· 9 years ago · Feb 01, 2017, 09:36 PM
1//*****************************************************************************
2// Stream message
3//*****************************************************************************
4
5// Every message sent across the channel MUST be a stream message. This is
6// because the protocol buffer does not include top level type information
7// so the message receiver can only assume that it is being given a stream
8// message.
9
10message StreamMessage {
11 required fixed32 handle = 1;
12 optional bool end = 4;
13
14 required bytes senderAddress = 5;
15 required bytes recipientAddress = 6;
16
17 oneof contents {
18 // TODO - improved error handling
19
20 // Basic Operations
21 Noop noop = 14; // sometimes nothing is enough!
22 UnhandledMessageReply unhandledMessageReply = 15;
23 ConnectionReadyReply connectionReadyReply = 16;
24 RecipientUnavailableReply recipientUnavailableReply = 17;
25 Ping ping = 18;
26 Pong pong = 19;
27
28 ListStreamsRequest listStreamsRequest = 20;
29 ListStreamsReply listStreamsReply = 21;
30
31 ListOperationsRequest listOperationsRequest = 30;
32 ListOperationsReply listOperationsReply = 31;
33
34 // Circulator control
35 StartProgramRequest startProgramRequest = 50;
36 StartProgramReply startProgramReply = 51;
37
38 StopCirculatorRequest stopCirculatorRequest = 60;
39 StopCirculatorReply stopCirculatorReply = 61;
40
41 DropFoodRequest dropFoodRequest = 102;
42 DropFoodReply dropFoodReply = 103;
43
44 // Live feeds
45 BeginLiveFeed beginLiveFeed = 70;
46 BeginLiveFeedReply beginLiveFeedReply = 71;
47
48 KeepAlive keepAlive = 72;
49
50 RetransmitFeedRequest retransmitFeedRequest = 80;
51 RetransmitFeedReply retransmitFeedReply = 81;
52
53 CirculatorDataPoint circulatorDataPoint = 90;
54 DebugMessage debugMessage = 91;
55
56 ListRecentEventsRequest listRecentEventsRequest = 92;
57 ListRecentEventsReply listRecentEventsReply = 93;
58
59 DescribeFeedRequest describeFeedRequest = 95;
60 DescribeFeedReply describeFeedReply = 96;
61
62 ListFeedsRequest listFeedsRequest = 100;
63 ListFeedsReply listFeedsReply = 101;
64
65 // Circulator WiFi
66 ListWifiRequest listWifiRequest = 41;
67 ListWifiReply listWifiReply = 42;
68
69 ConnectWifiRequest connectWifiRequest = 43;
70 ConnectWifiReply connectWifiReply = 44;
71
72 ListWifiProfileRequest listWifiProfileRequest = 45;
73 ListWifiProfileReply listWifiProfileReply = 47;
74
75 ForgetWifiProfileRequest forgetWifiProfileRequest = 48;
76 ForgetWifiProfileReply forgetWifiProfileReply = 49;
77
78 DisconnectWifiRequest disconnectWifiRequest = 160;
79 DisconnectWifiReply disconnectWifiReply = 161;
80
81 // OTA update
82 EnterBootModeRequest enterBootModeRequest = 110;
83 EnterBootModeReply enterBootModeReply = 111;
84
85 StartFileTransferRequest startFileTransferRequest = 112;
86 StartFileTransferReply startFileTransferReply = 113;
87 TransferFileBlockRequest transferFileBlockRequest = 114;
88 TransferFileBlockReply transferFileBlockReply = 115;
89 TransferFileComplete transferFileComplete = 116;
90
91 StartFileReceiveRequest startFileReceiveRequest = 117;
92 StartFileReceiveReply startFileReceiveReply = 118;
93
94 // Initial Key Exchange and authentication
95 StartKeyExchangeRequest startKeyExchangeRequest = 120;
96 StartKeyExchangeReply startKeyExchangeReply = 121;
97
98 CancelKeyExchangeRequest cancelKeyExchangeRequest = 125;
99 CancelKeyExchangeReply cancelKeyExchangeReply = 126;
100
101 SubmitKeyRequest submitKeyRequest = 130;
102 SubmitKeyReply submitKeyReply = 131;
103
104 SubmitBearerAuthTokenRequest submitBearerAuthTokenRequest = 132;
105 SubmitBearerAuthTokenReply submitBearerAuthTokenReply = 133;
106
107 // Predictive cook
108 PredictionUpdate predictionUpdate = 140;
109
110 RenameCirculatorRequest renameCirculatorRequest = 150;
111 RenameCirculatorReply renameCirculatorReply = 151;
112
113 // Circulator Identification Messages
114 IdentifyCirculatorRequest identifyCirculatorRequest = 152;
115 IdentifyCirculatorReply identifyCirculatorReply = 153;
116
117 SetMessagingAddressRequest setMessagingAddressRequest = 154;
118 SetMessagingAddressReply setMessagingAddressReply = 155;
119
120 // ESP Wifi Module DFU management
121 WifiDFUStatusRequest wifiDFUStatusRequest = 170;
122 WifiDFUStatusReply wifiDFUStatusReply = 171;
123 WifiDFUSetFirmware wifiDFUSetFirmware = 172;
124 WifiDFUDownloadTFTPRequest wifiDFUDownloadTFTPRequest= 173;
125 WifiDFUDownloadTFTPResponse wifiDFUDownloadTFTPResponse = 174;
126
127 // Limits
128 GetLimitsRequest getLimitsRequest = 180;
129 GetLimitsReply getLimitsReply = 181;
130
131 // For debug and testing and end use
132 FactoryResetRequest factoryResetRequest = 1000;
133 FactoryResetReply factoryResetReply = 1001;
134 DeviceRestartRequest deviceRestartRequest = 1002;
135 DeviceRestartReply deviceRestartReply = 1003;
136 TestResetRequest testResetRequest = 1004;
137 TestResetReply testResetReply = 1005;
138 ForgetDevicePairingRequest forgetDevicePairingRequest = 1006;
139 ForgetDevicePairingReply forgetDevicePairingReply = 1007;
140 SetSimulatorRequest setSimulatorRequest = 1008;
141 SetSimulatorReply setSimulatorReply = 1009;
142 GetSimulatorRequest getSimulatorRequest = 1010;
143 GetSimulatorReply getSimulatorReply = 1011;
144
145 SetHardwareCoeffsRequest setHardwareCoeffsRequest = 1020;
146 SetHardwareCoeffsReply setHardwareCoeffsReply = 1021;
147 GetHardwareCoeffsRequest getHardwareCoeffsRequest = 1022;
148 GetHardwareCoeffsReply getHardwareCoeffsReply = 1023;
149
150 GetUsageDataRequest getUsageDataRequest = 1030;
151 GetUsageDataReply getUsageDataReply = 1031;
152 ResetUsageDataRequest resetUsageDataRequest = 1032;
153 ResetUsageDataReply resetUsageDataReply = 1033;
154 }
155}
156
157//*****************************************************************************
158// Basic operations
159//*****************************************************************************
160message UnhandledMessageReply {}
161message ConnectionReadyReply {}
162
163message RecipientUnavailableReply {
164 required bytes recipientAddress = 1;
165}
166
167message ListStreamsRequest{}
168message ListStreamsReply {
169 // Using bytes to avoid problematic (for NanoPB) circular message references
170 required bytes encodedStreamMessage = 1000;
171}
172
173message ListOperationsRequest {}
174message ListOperationsReply {
175 required string name = 1000;
176}
177
178message IdentifyCirculatorRequest {}
179message IdentifyCirculatorReply {
180 required string name = 1;
181 required string firmwareVersion = 2;
182 required string hardwareVersion = 3;
183 optional string serialNumber = 4;
184 optional string bleMacAddress = 5;
185 optional string softdeviceVersion = 6;
186 optional string bootloaderVersion = 7;
187 optional string appFirmwareVersion = 8;
188 optional string espFirmwareVersion = 9;
189 optional string certificateVersion = 10;
190 optional string modelNumber = 11;
191 optional uint32 apiVersion = 12;
192}
193
194message RenameCirculatorRequest {
195 required string name = 1;
196}
197message RenameCirculatorReply {
198 optional Result result = 1;
199 required string name = 2;
200}
201
202message SetMessagingAddressRequest {
203 required bytes address = 1;
204}
205message SetMessagingAddressReply {
206 optional Result result = 1;
207}
208
209message Noop {}
210
211message Ping {}
212message Pong {}
213message KeepAlive {}
214
215//*****************************************************************************
216// Common types
217//*****************************************************************************
218
219// Must be kept up to date with cs_error.h
220enum Result {
221 CS_SUCCESS = 0; ///< Successful command
222 CS_ERROR_SVC_HANDLER_MISSING = 1; ///< SVC handler is missing
223 CS_ERROR_SOFTDEVICE_NOT_ENABLED = 2; ///< SoftDevice has not been enabled
224 CS_ERROR_INTERNAL = 3; ///< Internal Error
225 CS_ERROR_NO_MEM = 4; ///< No Memory for operation
226 CS_ERROR_NOT_FOUND = 5; ///< Not found
227 CS_ERROR_NOT_SUPPORTED = 6; ///< Not supported
228 CS_ERROR_INVALID_PARAM = 7; ///< Invalid Parameter
229 CS_ERROR_INVALID_STATE = 8; ///< Invalid state, operation disallowed in this state
230 CS_ERROR_INVALID_LENGTH = 9; ///< Invalid Length
231 CS_ERROR_INVALID_FLAGS = 10; ///< Invalid Flags
232 CS_ERROR_INVALID_DATA = 11; ///< Invalid Data
233 CS_ERROR_DATA_SIZE = 12; ///< Data size exceeds limit
234 CS_ERROR_TIMEOUT = 13; ///< Operation timed out
235 CS_ERROR_NULL = 14; ///< Null Pointer
236 CS_ERROR_FORBIDDEN = 15; ///< Forbidden Operation
237 CS_ERROR_INVALID_ADDR = 16; ///< Bad Memory Address
238 CS_ERROR_BUSY = 17; ///< Busy
239 CS_ERROR_IO_FAILED = 18;
240 CS_ERROR_ALREADY_EXISTS = 19;
241 CS_ERROR_END_OF_FILE = 20;
242 CS_ERROR_NOT_CONNECTED = 21; ///< Circulator is not connected
243 CS_ERROR_UNKNOWN_RPC_MSG = 22; ///< RPC message not recognized
244 CS_ERROR_WIFI_DUPLICATE_SCAN_RESULT = 23; ///< Duplicate AP scan result
245 CS_ERROR_WIFI_KEY_ERROR = 24; ///< WiFi key is incorrect
246 CS_ERROR_WIFI_INVALID_ROLE = 25; ///< WiFi operation requested is not supported for current role
247 CS_ERROR_WIFI_INVALID_SEC_TYPE = 26; ///< WiFi security mode is not correct for network
248 CS_ERROR_WIFI_INVALID_WEP_IND = 27; ///< WiFi WEP key index is invalid
249 CS_ERROR_WIFI_ALREADY_DISCONN = 28; ///< WiFi already disconnected
250 CS_ERROR_WIFI_NOT_CONN = 29; ///< WiFi not connected
251 CS_ERROR_WIFI_DISCONNECT = 30; ///< Unexpected disconnection
252 CS_ERROR_WIFI_INVALID_PWD = 31; ///< WiFi password incorrect
253 CS_ERROR_WIFI_RX_BUFF = 32; ///< WiFi Rx buffer overrun
254 CS_ERROR_WIFI_AP_TERM_CONN = 33; ///< AP terminated connection
255 CS_ERROR_INVALID_SOCKET = 34; ///< Unable to open a valid BSD socket
256 CS_ERROR_IO_IN_PROGRESS = 35; ///< Async I/O incomplete -- try again
257 CS_ERROR_GEN_SOCK_FAILURE = 36; ///< General socket failure
258}
259
260message CirculatorProgram {
261 required float setPoint = 1;
262 optional uint32 cookTime = 2;
263
264 optional uint32 delayedStart = 3;
265 optional float holdingTemperature = 4;
266
267 required ProgramType programType = 5;
268 optional ProgramMetadata programMetadata = 6;
269}
270
271enum ProgramType {
272 MANUAL = 0;
273 AUTOMATIC = 1;
274}
275
276enum ProgramStep {
277 UNKNOWN = 0; // When would the step be unknown?
278 PRE_HEAT = 1;
279 WAIT_FOR_FOOD = 2;
280 COOK = 3;
281 WAIT_FOR_REMOVE_FOOD = 4;
282 ERROR = 5;
283}
284
285message ProgramMetadata {
286 optional string guideId = 1;
287 optional string programId = 2;
288 optional string timerId = 3;
289 optional string cookId = 4;
290}
291
292enum ErrorState {
293 NO_ERROR = 0;
294 SOFT_ERROR = 1;
295 HARD_ERROR = 2;
296}
297
298//*****************************************************************************
299// Circulator operation
300//*****************************************************************************
301
302message StartProgramRequest {
303 required CirculatorProgram circulatorProgram = 1;
304 // Optional optimistic concurrency parameters
305 optional uint32 feedId = 2;
306 optional uint32 sequenceNumber = 3;
307}
308message StartProgramReply {
309 optional Result result = 1;
310}
311
312message StopCirculatorRequest {
313 // Optional optimistic concurrency parameters
314 optional uint32 feedId = 2;
315 optional uint32 sequenceNumber = 3;
316 // Question: should the client or the server specify for how long a request is valid?
317}
318message StopCirculatorReply {
319 optional Result result = 1;
320}
321
322message DropFoodRequest {}
323message DropFoodReply {
324 optional Result result = 1;
325}
326
327
328//*****************************************************************************
329// Circulator operation
330//*****************************************************************************
331
332enum EventType {
333 UNKNOWN_TYPE = 0;
334 HW_FAILURE = 1;
335 STOP_PROGRAM = 2;
336}
337
338enum EventReason {
339 UNKNOWN_REASON = 0;
340 HARDWARE_FAILURE = 1;
341 BUTTON_PRESSED = 2;
342 LOW_WATER_LEVEL = 3;
343 TIPPED_OVER = 4;
344 OVERHEATING = 5;
345 POWER_LOSS = 6;
346 HEATER_THERMISTOR = 7;
347 BATH_THERMISTOR = 8;
348 PRESSURE_SENSOR = 9;
349 ACCELEROMETER = 10;
350 MOTOR = 11;
351}
352
353message ListRecentEventsRequest {}
354
355message ListRecentEventsReply {
356 // Note - once we start sending more than a single reply we should include an
357 // index and a count
358 required EventType eventType = 1;
359 required EventReason eventReason = 2;
360 required uint32 eventTimestamp = 3;
361 // milliseconds since processor start up as which the event occurred
362 // will be compared against CirculatorDataPoint.timestamp to determine how
363 // long the program has been in the ERROR step
364}
365
366//*****************************************************************************
367// WiFi
368//*****************************************************************************
369
370// TODO - need a request for describing current state
371enum SecurityType { // embedded enum makes embedded c library unhappy
372 OPEN = 0;
373 WEP = 1;
374 WPA = 2;
375 WPS = 3;
376 UNKNOWN_WIFI = 4;
377 WPA2 = 5;
378 WPA_WPA2 = 6;
379}
380message ListWifiRequest {
381 optional bool start = 1;
382}
383message ListWifiReply {
384 required string SSID = 1000;
385 required SecurityType securityType = 1001;
386 required sint32 rssi = 1002;
387}
388
389message ConnectWifiRequest {
390 required string SSID = 1 ;
391 required string passphrase = 2 ;
392 required SecurityType securityType = 3;
393}
394message ConnectWifiReply {
395 optional Result result = 1;
396}
397
398enum WifiConnectionStatus {
399 WIFI_IDLE = 0;
400 WIFI_CONNECTING = 1;
401 WIFI_WRONG_PASSWORD = 2;
402 WIFI_NO_AP_FOUND = 3;
403 WIFI_CONNECT_FAIL = 4;
404 WIFI_GOT_IP = 5;
405}
406message ListWifiProfileRequest {}
407message ListWifiProfileReply {
408 required Result result = 1;
409 required string SSID = 2;
410 optional bool bearerTokenSet = 3;
411 optional WifiConnectionStatus connectionStatus = 4;
412 optional uint32 timeSinceLastPacketMS = 5;
413 optional uint32 cloudStatus = 6;
414}
415
416message ForgetWifiProfileRequest {}
417message ForgetWifiProfileReply {
418 optional Result result = 1;
419}
420
421message DisconnectWifiRequest {}
422message DisconnectWifiReply {
423 optional Result result = 1;
424}
425
426//*****************************************************************************
427// WiFi DFU Control Messages
428//*****************************************************************************
429
430message WifiDFUStatusRequest {
431};
432
433message WifiDFUSlotStatus {
434 required bool valid = 1;
435 optional bytes sha256 = 2;
436}
437
438message WifiDFUStatusReply {
439 required Result result = 1;
440 required uint32 running_slot = 2;
441 /* Exactly 3 slots will be returned */
442 repeated WifiDFUSlotStatus slot = 3;
443};
444
445// WifiDFUSetFirmware has no matching response command,
446// but after sending it the client can expect a WifiDFUStatusReply
447// (however the rpc_Handle may not match, if a reset has happened in between.)
448message WifiDFUSetFirmware {
449 required bytes sha256 = 1;
450}
451
452message WifiDFUDownloadTFTPRequest {
453 required string host = 1;
454 required string filename = 2;
455 required bytes sha256 = 3;
456 optional bool useHTTP = 4;
457}
458
459enum WifiDFUDownloadTFTPStatus { // embedding enum in message makes embedded c library unhappy
460 API_ERROR = -32; // API errors range from -1 to -32. Code will need to be inspected to determine what happened
461 FAILED = 0; // General error
462 SUCCESS = 1;
463 ONGOING = 2; // Transfer is currently in progress
464
465 // Specific errors
466 FAILED_TIMEOUT = 3; // Transfer was timed out because data was not received in time
467 FAILED_ROUTING = 4; // No route is available to reach the server
468 FAILED_SHASUM = 5; // The sha256 supplied does not match the sha256 of the downloaded image
469 FAILED_SLOT_ACTIVE = 6; // Trying to save the requested image into the currently active memory slot
470 FAILED_SLOT_FACTORY = 7; // Trying to save the requested image over the factory image
471 FAILED_SLOT_INVALID = 8; // Specified slot is out of range
472 FAILED_BAD_IMAGE = 9; // Image is not a valid ESP executable
473 FAILED_BAD_ADDRESS = 10; // Trying to save the requested image into invalid memory
474}
475
476message WifiDFUDownloadTFTPResponse {
477 required WifiDFUDownloadTFTPStatus status = 1;
478 optional uint32 bytes_read = 2;
479}
480
481//*****************************************************************************
482// Time series data
483//*****************************************************************************
484
485message DescribeFeedRequest {
486 required uint32 feedId = 1;
487}
488
489message DescribeFeedReply {
490 required uint32 feedId = 1;
491 optional CirculatorProgram circulatorProgram = 2;
492 optional Result result = 3;
493}
494
495message ListFeedsRequest {}
496message ListFeedsReply {
497 required uint32 feedId = 1;
498 required FeedType feedType = 2;
499 optional bool active = 3;
500 optional Result result = 4;
501}
502
503enum FeedType {
504 COOK_DATA = 1;
505 DEBUG = 2;
506 NETWORK_BLUETOOTH = 3;
507 NETWORK_WIFI = 4;
508}
509
510message BeginLiveFeed {
511 required FeedType feedType = 1;
512}
513
514message BeginLiveFeedReply {
515 optional Result result = 1;
516}
517
518message BeginLiveFeedError {
519 enum LiveFeedErrorType {
520 NO_ACTIVE_FEED = 1;
521 }
522}
523
524message CirculatorDataPoint {
525 required uint32 feedId = 1;
526 required uint32 sequenceNumber = 2;
527 required uint32 timestamp = 3;
528 // timestamp is milliseconds since processor start up
529 optional ErrorState errorState = 4;
530 // Question: do we also need milliseconds since last message too?
531
532 required float bathTemp = 10;
533 optional ProgramStep programStep = 11;
534 optional uint32 timeRemaining = 12;
535
536 // Additional Data from the Circulator
537 optional float heaterTemp = 50; // Heater temperature (Celsius)
538 // optional float auxTemp = 51; // Auxiliary temperature sensor (Celsius) Removed because not used
539 optional float upperBoardTemp = 52; // Temperature in the upper (cool) section of the board (Celsius)
540 optional float lowerBoardTemp = 53; // Temperature in lower (hot) section of the board (Celsius)
541 optional int32 motorRPM = 54; // Motor RPM (Positive numbers spin water up from the bottom, Negative through the outlet and out the bottom)
542 optional float heaterPWM = 55; // Heater PWM [Pulse Width Modulation] (On Percentage)
543 optional float motorVoltage = 56; // Motor voltage (Volts)
544 optional float motorPWM = 57; // Motor PWM [Pulse Width Modulation] (On Percentage)
545 optional float motorCurrent = 58; // Motor current draw (Amps)
546 // optional float nrfTemp = 59; // Bluetooth processor temperature (Celsius) Removed because not used
547 // optional float measuredBathTemp = 60; // Bath temperature before filter (Celsius) Removed because not used
548 optional float pressure = 61; // Joule pressure (hPa/mbar)
549 // optional float pressureTemp = 62; // Joule pressure temperature (Celsius) Removed because not used
550 optional uint32 motorFaultFlag = 63; // Fault flag from the motor controller
551 optional float motorPeakCurrent = 64; // Peak motor current draw (Amps)
552}
553
554enum LogLevel {
555 LOG_DEBUG = 0;
556 LOG_INFO = 1;
557 LOG_WARNING = 2;
558 LOG_ERROR = 3;
559 LOG_FATAL = 4;
560}
561
562message DebugMessage {
563 required uint32 feedId = 1;
564 required uint32 sequenceNumber = 2;
565 required uint32 timestamp = 3;
566 required LogLevel logLevel = 4;
567 optional string source = 5;
568 optional string event = 6;
569 optional string message = 10;
570}
571
572message RetransmitFeedRequest {
573 required uint32 feedId = 1;
574 required uint32 seqStart = 2;
575 required uint32 seqEnd = 3;
576}
577
578message RetransmitFeedReply {
579 optional Result result = 1;
580}
581
582// Ignore below, to be revised but currently used in tests
583message StreamFeedReply {
584 required uint32 feedId = 1;
585 required uint32 seq = 2;
586 optional float setPoint = 3;
587 optional float bathTemp = 4;
588}
589
590//*****************************************************************************
591// Firmware Update + File Transfer
592//*****************************************************************************
593
594enum BootModeType {
595 SOFTDEVICE_BOOT_MODE = 1;
596 BOOTLOADER_BOOT_MODE = 2;
597 APPLICATION_BOOT_MODE = 3;
598}
599
600message EnterBootModeRequest {
601 optional BootModeType bootModeType = 1;
602}
603
604message EnterBootModeReply {
605 optional Result result = 1;
606}
607
608enum FileType {
609 APPLICATION_FIRMWARE = 1;
610 SOFTDEVICE_FIRMWARE = 2;
611 WIFI_FIRMWARE = 3;
612 CERTIFICATE_FIRMWARE = 4;
613 BOOTLOADER_FIRMWARE = 5;
614}
615
616message StartFileTransferRequest {
617 required FileType fileType = 1;
618 required uint32 blockCount = 2;
619 required uint32 byteCount = 3;
620
621 // Always CRC? In the future we might also want to include a field
622 // for cryptographically signing the files too.
623 required uint32 checksum = 4;
624 optional string version = 5;
625}
626
627message StartFileTransferReply {
628 required Result result = 1;
629}
630
631message StartFileReceiveRequest {
632 required FileType fileType = 1;
633}
634
635message StartFileReceiveReply {
636 required Result result = 1;
637 required uint32 blockCount = 2;
638 required uint32 byteCount = 3;
639 required uint32 checksum = 4;
640}
641
642message TransferFileBlockRequest {
643 required uint32 blockIdx = 1;
644 required bytes block = 2;
645}
646
647message TransferFileBlockReply {
648 required Result result = 1;
649 required uint32 blockIdx = 2;
650}
651
652message TransferFileComplete {
653 required Result result = 1;
654}
655
656//*****************************************************************************
657// Initial Key Exchange
658//*****************************************************************************
659
660message StartKeyExchangeRequest {}
661message StartKeyExchangeReply {
662 required bytes secretKey = 1;
663 optional Result result = 2;
664}
665
666message CancelKeyExchangeRequest {}
667message CancelKeyExchangeReply {
668 required Result result = 1;
669}
670
671message SubmitKeyRequest {
672 required bytes secretKey = 1;
673}
674message SubmitKeyReply {
675 optional Result result = 1;
676}
677
678//*****************************************************************************
679// Predictive Cook
680//*****************************************************************************
681
682message PredictionUpdate {
683 required ProgramStep programStep = 1;
684 required uint32 finishTimestamp = 2;
685
686 // The last point used for the prediction
687 // Should it be required or optional?
688 optional uint32 feedId = 3;
689 optional uint32 sequenceNumber = 4;
690}
691
692//*****************************************************************************
693// Initial Authorization Token
694//*****************************************************************************
695
696message SubmitBearerAuthTokenRequest {
697 required string token = 1;
698}
699message SubmitBearerAuthTokenReply {
700 optional Result result = 1;
701}
702
703
704//*****************************************************************************
705// Testing / Debug and End Use
706//*****************************************************************************
707message FactoryResetRequest {
708 required bool restart = 1;
709}
710message FactoryResetReply {
711 optional Result result = 1;
712}
713message DeviceRestartRequest {
714}
715message DeviceRestartReply {
716 optional Result result = 1;
717}
718message TestResetRequest {
719}
720message TestResetReply {
721 optional Result result = 1;
722}
723message ForgetDevicePairingRequest {
724}
725message ForgetDevicePairingReply {
726 optional Result result = 1;
727}
728message SetSimulatorRequest {
729 required bool simulatorOn = 1;
730}
731message SetSimulatorReply {
732 optional Result result = 1;
733}
734message GetSimulatorRequest {
735}
736message GetSimulatorReply {
737 required bool simulatorOn = 1;
738}
739
740message SetHardwareCoeffsRequest {
741 required float tempAdcBias = 1;
742 required float tempAdcScale = 2;
743 required float tempRef = 3;
744 required float tempCoeffA = 4;
745 required float tempCoeffB = 5;
746 required float tempCoeffC = 6;
747}
748message SetHardwareCoeffsReply {
749 required Result result = 1;
750}
751
752message GetHardwareCoeffsRequest {}
753message GetHardwareCoeffsReply {
754 required float tempAdcBias = 1;
755 required float tempAdcScale = 2;
756 required float tempRef = 3;
757 required float tempCoeffA = 4;
758 required float tempCoeffB = 5;
759 required float tempCoeffC = 6;
760 required Result result = 7;
761}
762
763enum UsageMetric {
764 MOTOR_RUNNING_MINS_LT = 0;
765 TOTAL_REVOLUTIONS = 1;
766 MOTOR_RUNNING_MINS_LT_30C = 2;
767 MOTOR_RUNNING_MINS_LT_35C = 3;
768 MOTOR_RUNNING_MINS_LT_40C = 4;
769 MOTOR_RUNNING_MINS_LT_45C = 5;
770 MOTOR_RUNNING_MINS_LT_50C = 6;
771 MOTOR_RUNNING_MINS_LT_55C = 7;
772 MOTOR_RUNNING_MINS_LT_60C = 8;
773 MOTOR_RUNNING_MINS_LT_65C = 9;
774 MOTOR_RUNNING_MINS_LT_70C = 10;
775 MOTOR_RUNNING_MINS_LT_75C = 11;
776 MOTOR_RUNNING_MINS_LT_80C = 12;
777 MOTOR_RUNNING_MINS_LT_85C = 13;
778 MOTOR_RUNNING_MINS_LT_90C = 14;
779 MOTOR_RUNNING_MINS_LT_95C = 15;
780 MOTOR_RUNNING_MINS_GT_95C = 16;
781 MOTOR_RPM_MEAN = 17;
782 MOTOR_RPM_VARIANCE = 18;
783 MOTOR_CURRENT_MEAN = 19;
784 MOTOR_CURRENT_VARIANCE = 20;
785 HEATER_MEAN = 21;
786 HEATER_VARIANCE = 22;
787 PRESSURE_MEAN = 23;
788 PRESSURE_VARIANCE = 24;
789 BATH_TEMP_MEAN = 25;
790 BATH_TEMP_VARIANCE = 26;
791 NUM_BUTTON_PRESSES = 27;
792 NUM_COOKS_INTERRUPTED = 28;
793 NUM_OOW_ERRORS = 29;
794 NUM_OVERTEMP_ERRORS = 30;
795 NUM_MOTOR_OVER_CURRENT_ERRORS = 31;
796 NUM_ACCELEROMETER_TRIPS = 32;
797 NUM_MOTOR_STALLS = 33;
798}
799
800message UsageDataMetric {
801 required UsageMetric key = 1;
802 required MetricValue value = 2;
803}
804
805message MetricValue {
806 optional uint32 intValue = 1;
807 optional float floatValue = 2;
808}
809
810message GetUsageDataRequest {}
811message GetUsageDataReply {
812 required Result result = 1;
813 optional string serialNumber = 2;
814 required UsageDataMetric metric = 3;
815}
816message ResetUsageDataRequest {}
817message ResetUsageDataReply {
818 required Result result = 1;
819}
820
821message GetLimitsRequest {}
822message GetLimitsReply {
823 required Result result = 1;
824 required float maxTemp = 2;
825}