Merge pull request #28 from openxc/next
authorEric <emarsman@users.noreply.github.com>
Mon, 9 May 2016 21:02:12 +0000 (17:02 -0400)
committerEric <emarsman@users.noreply.github.com>
Mon, 9 May 2016 21:02:12 +0000 (17:02 -0400)
Ready to release updates for C5 devices

.gitmodules
CHANGELOG.md
JSON.mkd
README.md
gen/cpp/openxc.pb
gen/cpp/openxc.pb.c
gen/cpp/openxc.pb.h
gen/java/com/openxc/BinaryMessages.java
gen/python/openxc_pb2.py
openxc.proto

index a03da7b..5c59124 100644 (file)
@@ -1,4 +1,3 @@
 [submodule "libs/nanopb"]
        path = libs/nanopb
-       url = https://code.google.com/p/nanopb/
-       ignore = dirty
+       url = https://github.com/nanopb/nanopb
index e8244c4..3bd680d 100644 (file)
@@ -1,5 +1,13 @@
 # OpenXC Message Format Changelog
 
+## v0.6.0
+
+* Feature: Added MessagePack support for BTLE connections.
+* Feature: Support for vehicle message timestamps (changed previous uptime).
+* Feature: Support for C5 SD Card.
+* Feature: Support for C5 RTC.
+* Fix: Update submodule from code.google to github.
+
 ## v0.5.0
 
 * Feature: Support for C5 Cellular device. New uptime message.
index cddfc4e..d320aad 100644 (file)
--- a/JSON.mkd
+++ b/JSON.mkd
@@ -2,21 +2,16 @@
 
 Each JSON message published by a VI is delimited with a `\0 ` character.
 
-## Extra Values
+## Table of Contents
+1. [Vehicle Messages](#vehicle-messages)
+2. [CAN Message](#can-message)
+3. [Diagnostic Message](#diagnostic-message)
+4. [Commands](#commands)
+5. [Extra Values](#extra-values)
 
-Any of the following JSON objects may optionally include an `extras`
-field. The value may be any valid JSON object or array. The client libraries
-will do their best to parse this information into a generic format and pass it
-to your application. For example:
+## Vehicle Messages
 
-    {"name": "steering_wheel_angle",
-        "value": 45,
-        "extras": {
-            "calibrated": false
-        }
-    }
-
-## Simple Vehicle Message
+### Simple Vehicle Message
 
 There may not be a 1:1 relationship between input and output signals - i.e.
 engine timing CAN signals may be summarized in an "engine performance" metric on
@@ -26,7 +21,7 @@ The expected format of a single valued message is:
 
     {"name": "steering_wheel_angle", "value": 45}
 
-## Evented Simple Vehicle Message
+### Evented Simple Vehicle Message
 
 The expected format of an event message is:
 
@@ -57,7 +52,7 @@ The format for a plain CAN message:
   of `standard` or `extended`. If the `id` is greater than `0x7ff`, the extended
   frame format will be selected automatically.
 
-## Diagnostic Messages
+## Diagnostic Message
 
 ### Requests
 
@@ -377,7 +372,7 @@ the response will be `true`.
 
 The ModemConfigurationCommand message allows users to change certain aspects of modem operation on-the-fly (at runtime). The modem configuration settings are stored in flash memory and are untouched by the bootloader during a software update (assuming the correct cellular_c5 linker file is used during compilation of vi-firmware). Thus, new modem settings persistent across power cycles.
 
-The ModemConfigurationCommand message provides three sub-messages for particular groups of modem settings. These are NetworkOperatorSettings, NetworkDataSettings, and ServerConnectSettings. These configuration messages are described in great detail within the [c5_cellular_config](https://github.com/openxc/vi-firmware/docs/advanced/c5_cell_config.mkd) documentation. 
+The ModemConfigurationCommand message provides three sub-messages for particular groups of modem settings. These are NetworkOperatorSettings, NetworkDataSettings, and ServerConnectSettings. These configuration messages are described in great detail within the [c5_cellular_config](https://github.com/openxc/vi-firmware/docs/advanced/c5_cell_config.html) documentation. 
 
 Currently, only the ServerConnectSettings sub-message is supported in the vi-firmware's command interpreter. All other settings are currently compile-time only.
 
@@ -394,4 +389,47 @@ The ServerConnectSettings part of ModemConfigurationCommand allows the user to s
 
 **Response**
 
-       { "command_response": "modem_configuration", "status": true}
\ No newline at end of file
+       { "command_response": "modem_configuration", "status": true}
+
+## C5 SD Card Status
+
+In order to check the status of the SD card, the following command is available:
+
+    { "command": "sd_mount_status"}
+    
+Command response if the SD card is mounted correctly:
+
+    { "command_response": "sd_mount_status", "status": true}
+    
+If the SD card is full, not enabled, or connected as a MSD, the device will respond with:
+
+    { "command_response": "sd_mount_status", "status": false}
+    
+For more info see [c5_msd](https://github.com/openxc/vi-firmware/docs/advanced/msd.html).
+
+## C5 RTC Configuration
+
+To set the current time of the RTC, the following
+
+    { "command": "rtc_configuration", "unix_time": "1448551563"}
+    
+The response is
+
+    { "command_response": "rtc_configuration", "status": true}
+
+For more info see [c5_rtc](https://github.com/openxc/vi-firmware/docs/advanced/rtc.html).
+
+## Extra Values
+
+Any of the following JSON objects may optionally include an `extras`
+field. The value may be any valid JSON object or array. The client libraries
+will do their best to parse this information into a generic format and pass it
+to your application. For example:
+
+    {"name": "steering_wheel_angle",
+        "value": 45,
+        "extras": {
+            "calibrated": false
+        }
+    }
+
index 2daec60..77758b8 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # OpenXC Message Format Specification
 
-Version: v0.5.0
+Version: v0.6.0
 
 This specification is a part of the [OpenXC platform][OpenXC].
 
@@ -30,6 +30,21 @@ method (any protobuf library should support this).
 The binary format is best if you need to maximize the amount of data that can be
 sent from the VI, trading off flexibility for efficiency.
 
+## Message Pack
+MessagePack is an efficient binary serialization format. It lets you exchange data
+among multiple languages like JSON, but it's faster and smaller. Small integers are 
+encoded into a single byte, and typical short strings require only one extra byte
+in addition to the strings themselves
+
+For protocol specification visit:
+https://github.com/msgpack/msgpack/blob/master/spec.md
+
+We are using the following lib:
+https://github.com/camgunz/cmp
+
+MessagePack provides a binary alternative to ProtoBuf. There are pros & cons to each 
+so you can decide what works best for your project.
+
 ## Trace File Format
 
 An OpenXC vehicle trace file is a plaintext file that contains JSON objects,
index 28afa0b..20543fe 100644 (file)
Binary files a/gen/cpp/openxc.pb and b/gen/cpp/openxc.pb differ
index ed4609d..f834836 100644 (file)
@@ -1,5 +1,5 @@
 /* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.1 at Tue Dec  2 03:06:57 2014. */
+/* Generated by nanopb-0.3.1 at Mon Feb 29 19:42:01 2016. */
 
 #include "openxc.pb.h"
 
@@ -16,7 +16,7 @@ const pb_field_t openxc_VehicleMessage_fields[8] = {
     PB_FIELD(  4, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, diagnostic_response, simple_message, &openxc_DiagnosticResponse_fields),
     PB_FIELD(  5, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, control_command, diagnostic_response, &openxc_ControlCommand_fields),
     PB_FIELD(  6, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, command_response, control_command, &openxc_CommandResponse_fields),
-    PB_FIELD(  7, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, uptime, command_response, 0),
+    PB_FIELD(  7, UINT64  , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, timestamp, command_response, 0),
     PB_LAST_FIELD
 };
 
@@ -28,7 +28,7 @@ const pb_field_t openxc_CanMessage_fields[5] = {
     PB_LAST_FIELD
 };
 
-const pb_field_t openxc_ControlCommand_fields[8] = {
+const pb_field_t openxc_ControlCommand_fields[9] = {
     PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_ControlCommand, type, type, 0),
     PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, diagnostic_request, type, &openxc_DiagnosticControlCommand_fields),
     PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, passthrough_mode_request, diagnostic_request, &openxc_PassthroughModeControlCommand_fields),
@@ -36,6 +36,7 @@ const pb_field_t openxc_ControlCommand_fields[8] = {
     PB_FIELD(  5, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, payload_format_command, acceptance_filter_bypass_command, &openxc_PayloadFormatCommand_fields),
     PB_FIELD(  6, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, predefined_obd2_requests_command, payload_format_command, &openxc_PredefinedObd2RequestsCommand_fields),
     PB_FIELD(  7, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, modem_configuration_command, predefined_obd2_requests_command, &openxc_ModemConfigurationCommand_fields),
+    PB_FIELD(  8, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, rtc_configuration_command, modem_configuration_command, &openxc_RTCConfigurationCommand_fields),
     PB_LAST_FIELD
 };
 
@@ -98,6 +99,11 @@ const pb_field_t openxc_ModemConfigurationCommand_fields[4] = {
     PB_LAST_FIELD
 };
 
+const pb_field_t openxc_RTCConfigurationCommand_fields[2] = {
+    PB_FIELD(  1, UINT32  , OPTIONAL, STATIC  , FIRST, openxc_RTCConfigurationCommand, unix_time, unix_time, 0),
+    PB_LAST_FIELD
+};
+
 const pb_field_t openxc_CommandResponse_fields[4] = {
     PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_CommandResponse, type, type, 0),
     PB_FIELD(  2, STRING  , OPTIONAL, STATIC  , OTHER, openxc_CommandResponse, message, type, 0),
@@ -155,7 +161,7 @@ const pb_field_t openxc_SimpleMessage_fields[4] = {
  * numbers or field sizes that are larger than what can fit in 8 or 16 bit
  * field descriptors.
  */
-PB_STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, can_message) < 65536 && pb_membersize(openxc_VehicleMessage, simple_message) < 65536 && pb_membersize(openxc_VehicleMessage, diagnostic_response) < 65536 && pb_membersize(openxc_VehicleMessage, control_command) < 65536 && pb_membersize(openxc_VehicleMessage, command_response) < 65536 && pb_membersize(openxc_ControlCommand, diagnostic_request) < 65536 && pb_membersize(openxc_ControlCommand, passthrough_mode_request) < 65536 && pb_membersize(openxc_ControlCommand, acceptance_filter_bypass_command) < 65536 && pb_membersize(openxc_ControlCommand, payload_format_command) < 65536 && pb_membersize(openxc_ControlCommand, predefined_obd2_requests_command) < 65536 && pb_membersize(openxc_ControlCommand, modem_configuration_command) < 65536 && pb_membersize(openxc_DiagnosticControlCommand, request) < 65536 && pb_membersize(openxc_NetworkOperatorSettings, networkDescriptor) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, networkOperatorSettings) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, networkDataSettings) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, serverConnectSettings) < 65536 && pb_membersize(openxc_SimpleMessage, value) < 65536 && pb_membersize(openxc_SimpleMessage, event) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_CanMessage_openxc_ControlCommand_openxc_DiagnosticControlCommand_openxc_PassthroughModeControlCommand_openxc_AcceptanceFilterBypassCommand_openxc_PayloadFormatCommand_openxc_PredefinedObd2RequestsCommand_openxc_NetworkOperatorSettings_openxc_NetworkOperatorSettings_NetworkDescriptor_openxc_NetworkDataSettings_openxc_ServerConnectSettings_openxc_ModemConfigurationCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
+PB_STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, can_message) < 65536 && pb_membersize(openxc_VehicleMessage, simple_message) < 65536 && pb_membersize(openxc_VehicleMessage, diagnostic_response) < 65536 && pb_membersize(openxc_VehicleMessage, control_command) < 65536 && pb_membersize(openxc_VehicleMessage, command_response) < 65536 && pb_membersize(openxc_ControlCommand, diagnostic_request) < 65536 && pb_membersize(openxc_ControlCommand, passthrough_mode_request) < 65536 && pb_membersize(openxc_ControlCommand, acceptance_filter_bypass_command) < 65536 && pb_membersize(openxc_ControlCommand, payload_format_command) < 65536 && pb_membersize(openxc_ControlCommand, predefined_obd2_requests_command) < 65536 && pb_membersize(openxc_ControlCommand, modem_configuration_command) < 65536 && pb_membersize(openxc_ControlCommand, rtc_configuration_command) < 65536 && pb_membersize(openxc_DiagnosticControlCommand, request) < 65536 && pb_membersize(openxc_NetworkOperatorSettings, networkDescriptor) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, networkOperatorSettings) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, networkDataSettings) < 65536 && pb_membersize(openxc_ModemConfigurationCommand, serverConnectSettings) < 65536 && pb_membersize(openxc_SimpleMessage, value) < 65536 && pb_membersize(openxc_SimpleMessage, event) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_CanMessage_openxc_ControlCommand_openxc_DiagnosticControlCommand_openxc_PassthroughModeControlCommand_openxc_AcceptanceFilterBypassCommand_openxc_PayloadFormatCommand_openxc_PredefinedObd2RequestsCommand_openxc_NetworkOperatorSettings_openxc_NetworkOperatorSettings_NetworkDescriptor_openxc_NetworkDataSettings_openxc_ServerConnectSettings_openxc_ModemConfigurationCommand_openxc_RTCConfigurationCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
 #endif
 
 #if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
@@ -166,7 +172,7 @@ PB_STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, can_message) < 65536 && p
  * numbers or field sizes that are larger than what can fit in the default
  * 8 bit descriptors.
  */
-PB_STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, can_message) < 256 && pb_membersize(openxc_VehicleMessage, simple_message) < 256 && pb_membersize(openxc_VehicleMessage, diagnostic_response) < 256 && pb_membersize(openxc_VehicleMessage, control_command) < 256 && pb_membersize(openxc_VehicleMessage, command_response) < 256 && pb_membersize(openxc_ControlCommand, diagnostic_request) < 256 && pb_membersize(openxc_ControlCommand, passthrough_mode_request) < 256 && pb_membersize(openxc_ControlCommand, acceptance_filter_bypass_command) < 256 && pb_membersize(openxc_ControlCommand, payload_format_command) < 256 && pb_membersize(openxc_ControlCommand, predefined_obd2_requests_command) < 256 && pb_membersize(openxc_ControlCommand, modem_configuration_command) < 256 && pb_membersize(openxc_DiagnosticControlCommand, request) < 256 && pb_membersize(openxc_NetworkOperatorSettings, networkDescriptor) < 256 && pb_membersize(openxc_ModemConfigurationCommand, networkOperatorSettings) < 256 && pb_membersize(openxc_ModemConfigurationCommand, networkDataSettings) < 256 && pb_membersize(openxc_ModemConfigurationCommand, serverConnectSettings) < 256 && pb_membersize(openxc_SimpleMessage, value) < 256 && pb_membersize(openxc_SimpleMessage, event) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_CanMessage_openxc_ControlCommand_openxc_DiagnosticControlCommand_openxc_PassthroughModeControlCommand_openxc_AcceptanceFilterBypassCommand_openxc_PayloadFormatCommand_openxc_PredefinedObd2RequestsCommand_openxc_NetworkOperatorSettings_openxc_NetworkOperatorSettings_NetworkDescriptor_openxc_NetworkDataSettings_openxc_ServerConnectSettings_openxc_ModemConfigurationCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
+PB_STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, can_message) < 256 && pb_membersize(openxc_VehicleMessage, simple_message) < 256 && pb_membersize(openxc_VehicleMessage, diagnostic_response) < 256 && pb_membersize(openxc_VehicleMessage, control_command) < 256 && pb_membersize(openxc_VehicleMessage, command_response) < 256 && pb_membersize(openxc_ControlCommand, diagnostic_request) < 256 && pb_membersize(openxc_ControlCommand, passthrough_mode_request) < 256 && pb_membersize(openxc_ControlCommand, acceptance_filter_bypass_command) < 256 && pb_membersize(openxc_ControlCommand, payload_format_command) < 256 && pb_membersize(openxc_ControlCommand, predefined_obd2_requests_command) < 256 && pb_membersize(openxc_ControlCommand, modem_configuration_command) < 256 && pb_membersize(openxc_ControlCommand, rtc_configuration_command) < 256 && pb_membersize(openxc_DiagnosticControlCommand, request) < 256 && pb_membersize(openxc_NetworkOperatorSettings, networkDescriptor) < 256 && pb_membersize(openxc_ModemConfigurationCommand, networkOperatorSettings) < 256 && pb_membersize(openxc_ModemConfigurationCommand, networkDataSettings) < 256 && pb_membersize(openxc_ModemConfigurationCommand, serverConnectSettings) < 256 && pb_membersize(openxc_SimpleMessage, value) < 256 && pb_membersize(openxc_SimpleMessage, event) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_CanMessage_openxc_ControlCommand_openxc_DiagnosticControlCommand_openxc_PassthroughModeControlCommand_openxc_AcceptanceFilterBypassCommand_openxc_PayloadFormatCommand_openxc_PredefinedObd2RequestsCommand_openxc_NetworkOperatorSettings_openxc_NetworkOperatorSettings_NetworkDescriptor_openxc_NetworkDataSettings_openxc_ServerConnectSettings_openxc_ModemConfigurationCommand_openxc_RTCConfigurationCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
 #endif
 
 
index 2975d4d..11386e3 100644 (file)
@@ -1,5 +1,5 @@
 /* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.1 at Tue Dec  2 03:06:57 2014. */
+/* Generated by nanopb-0.3.1 at Mon Feb 29 19:42:01 2016. */
 
 #ifndef PB_OPENXC_PB_H_INCLUDED
 #define PB_OPENXC_PB_H_INCLUDED
@@ -35,7 +35,9 @@ typedef enum _openxc_ControlCommand_Type {
     openxc_ControlCommand_Type_ACCEPTANCE_FILTER_BYPASS = 5,
     openxc_ControlCommand_Type_PAYLOAD_FORMAT = 6,
     openxc_ControlCommand_Type_PREDEFINED_OBD2_REQUESTS = 7,
-    openxc_ControlCommand_Type_MODEM_CONFIGURATION = 8
+    openxc_ControlCommand_Type_MODEM_CONFIGURATION = 8,
+    openxc_ControlCommand_Type_RTC_CONFIGURATION = 9,
+    openxc_ControlCommand_Type_SD_MOUNT_STATUS = 10
 } openxc_ControlCommand_Type;
 
 typedef enum _openxc_DiagnosticControlCommand_Action {
@@ -45,7 +47,8 @@ typedef enum _openxc_DiagnosticControlCommand_Action {
 
 typedef enum _openxc_PayloadFormatCommand_PayloadFormat {
     openxc_PayloadFormatCommand_PayloadFormat_JSON = 1,
-    openxc_PayloadFormatCommand_PayloadFormat_PROTOBUF = 2
+    openxc_PayloadFormatCommand_PayloadFormat_PROTOBUF = 2,
+    openxc_PayloadFormatCommand_PayloadFormat_MESSAGEPACK = 3
 } openxc_PayloadFormatCommand_PayloadFormat;
 
 typedef enum _openxc_NetworkOperatorSettings_OperatorSelectMode {
@@ -185,6 +188,11 @@ typedef struct _openxc_PredefinedObd2RequestsCommand {
     bool enabled;
 } openxc_PredefinedObd2RequestsCommand;
 
+typedef struct _openxc_RTCConfigurationCommand {
+    bool has_unix_time;
+    uint32_t unix_time;
+} openxc_RTCConfigurationCommand;
+
 typedef struct _openxc_ServerConnectSettings {
     bool has_host;
     char host[128];
@@ -241,6 +249,8 @@ typedef struct _openxc_ControlCommand {
     openxc_PredefinedObd2RequestsCommand predefined_obd2_requests_command;
     bool has_modem_configuration_command;
     openxc_ModemConfigurationCommand modem_configuration_command;
+    bool has_rtc_configuration_command;
+    openxc_RTCConfigurationCommand rtc_configuration_command;
 } openxc_ControlCommand;
 
 typedef struct _openxc_VehicleMessage {
@@ -256,8 +266,8 @@ typedef struct _openxc_VehicleMessage {
     openxc_ControlCommand control_command;
     bool has_command_response;
     openxc_CommandResponse command_response;
-    bool has_uptime;
-    uint32_t uptime;
+    bool has_timestamp;
+    uint64_t timestamp;
 } openxc_VehicleMessage;
 
 /* Default values for struct fields */
@@ -265,7 +275,7 @@ typedef struct _openxc_VehicleMessage {
 /* Initializer values for message structs */
 #define openxc_VehicleMessage_init_default       {false, (openxc_VehicleMessage_Type)0, false, openxc_CanMessage_init_default, false, openxc_SimpleMessage_init_default, false, openxc_DiagnosticResponse_init_default, false, openxc_ControlCommand_init_default, false, openxc_CommandResponse_init_default, false, 0}
 #define openxc_CanMessage_init_default           {false, 0, false, 0, false, {0, {0}}, false, (openxc_CanMessage_FrameFormat)0}
-#define openxc_ControlCommand_init_default       {false, (openxc_ControlCommand_Type)0, false, openxc_DiagnosticControlCommand_init_default, false, openxc_PassthroughModeControlCommand_init_default, false, openxc_AcceptanceFilterBypassCommand_init_default, false, openxc_PayloadFormatCommand_init_default, false, openxc_PredefinedObd2RequestsCommand_init_default, false, openxc_ModemConfigurationCommand_init_default}
+#define openxc_ControlCommand_init_default       {false, (openxc_ControlCommand_Type)0, false, openxc_DiagnosticControlCommand_init_default, false, openxc_PassthroughModeControlCommand_init_default, false, openxc_AcceptanceFilterBypassCommand_init_default, false, openxc_PayloadFormatCommand_init_default, false, openxc_PredefinedObd2RequestsCommand_init_default, false, openxc_ModemConfigurationCommand_init_default, false, openxc_RTCConfigurationCommand_init_default}
 #define openxc_DiagnosticControlCommand_init_default {false, openxc_DiagnosticRequest_init_default, false, (openxc_DiagnosticControlCommand_Action)0}
 #define openxc_PassthroughModeControlCommand_init_default {false, 0, false, 0}
 #define openxc_AcceptanceFilterBypassCommand_init_default {false, 0, false, 0}
@@ -276,6 +286,7 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_NetworkDataSettings_init_default  {{{NULL}, NULL}}
 #define openxc_ServerConnectSettings_init_default {false, "", false, 0}
 #define openxc_ModemConfigurationCommand_init_default {false, openxc_NetworkOperatorSettings_init_default, false, openxc_NetworkDataSettings_init_default, false, openxc_ServerConnectSettings_init_default}
+#define openxc_RTCConfigurationCommand_init_default {false, 0}
 #define openxc_CommandResponse_init_default      {false, (openxc_ControlCommand_Type)0, false, "", false, 0}
 #define openxc_DiagnosticRequest_init_default    {false, 0, false, 0, false, 0, false, 0, false, {0, {0}}, false, 0, false, 0, false, "", false, (openxc_DiagnosticRequest_DecodedType)0}
 #define openxc_DiagnosticResponse_init_default   {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, {0, {0}}, false, 0}
@@ -283,7 +294,7 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_SimpleMessage_init_default        {false, "", false, openxc_DynamicField_init_default, false, openxc_DynamicField_init_default}
 #define openxc_VehicleMessage_init_zero          {false, (openxc_VehicleMessage_Type)0, false, openxc_CanMessage_init_zero, false, openxc_SimpleMessage_init_zero, false, openxc_DiagnosticResponse_init_zero, false, openxc_ControlCommand_init_zero, false, openxc_CommandResponse_init_zero, false, 0}
 #define openxc_CanMessage_init_zero              {false, 0, false, 0, false, {0, {0}}, false, (openxc_CanMessage_FrameFormat)0}
-#define openxc_ControlCommand_init_zero          {false, (openxc_ControlCommand_Type)0, false, openxc_DiagnosticControlCommand_init_zero, false, openxc_PassthroughModeControlCommand_init_zero, false, openxc_AcceptanceFilterBypassCommand_init_zero, false, openxc_PayloadFormatCommand_init_zero, false, openxc_PredefinedObd2RequestsCommand_init_zero, false, openxc_ModemConfigurationCommand_init_zero}
+#define openxc_ControlCommand_init_zero          {false, (openxc_ControlCommand_Type)0, false, openxc_DiagnosticControlCommand_init_zero, false, openxc_PassthroughModeControlCommand_init_zero, false, openxc_AcceptanceFilterBypassCommand_init_zero, false, openxc_PayloadFormatCommand_init_zero, false, openxc_PredefinedObd2RequestsCommand_init_zero, false, openxc_ModemConfigurationCommand_init_zero, false, openxc_RTCConfigurationCommand_init_zero}
 #define openxc_DiagnosticControlCommand_init_zero {false, openxc_DiagnosticRequest_init_zero, false, (openxc_DiagnosticControlCommand_Action)0}
 #define openxc_PassthroughModeControlCommand_init_zero {false, 0, false, 0}
 #define openxc_AcceptanceFilterBypassCommand_init_zero {false, 0, false, 0}
@@ -294,6 +305,7 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_NetworkDataSettings_init_zero     {{{NULL}, NULL}}
 #define openxc_ServerConnectSettings_init_zero   {false, "", false, 0}
 #define openxc_ModemConfigurationCommand_init_zero {false, openxc_NetworkOperatorSettings_init_zero, false, openxc_NetworkDataSettings_init_zero, false, openxc_ServerConnectSettings_init_zero}
+#define openxc_RTCConfigurationCommand_init_zero {false, 0}
 #define openxc_CommandResponse_init_zero         {false, (openxc_ControlCommand_Type)0, false, "", false, 0}
 #define openxc_DiagnosticRequest_init_zero       {false, 0, false, 0, false, 0, false, 0, false, {0, {0}}, false, 0, false, 0, false, "", false, (openxc_DiagnosticRequest_DecodedType)0}
 #define openxc_DiagnosticResponse_init_zero      {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, {0, {0}}, false, 0}
@@ -338,6 +350,7 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_PassthroughModeControlCommand_enabled_tag 2
 #define openxc_PayloadFormatCommand_format_tag   1
 #define openxc_PredefinedObd2RequestsCommand_enabled_tag 1
+#define openxc_RTCConfigurationCommand_unix_time_tag 1
 #define openxc_ServerConnectSettings_host_tag    1
 #define openxc_ServerConnectSettings_port_tag    2
 #define openxc_DiagnosticControlCommand_request_tag 1
@@ -358,18 +371,19 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_ControlCommand_payload_format_command_tag 5
 #define openxc_ControlCommand_predefined_obd2_requests_command_tag 6
 #define openxc_ControlCommand_modem_configuration_command_tag 7
+#define openxc_ControlCommand_rtc_configuration_command_tag 8
 #define openxc_VehicleMessage_type_tag           1
 #define openxc_VehicleMessage_can_message_tag    2
 #define openxc_VehicleMessage_simple_message_tag 3
 #define openxc_VehicleMessage_diagnostic_response_tag 4
 #define openxc_VehicleMessage_control_command_tag 5
 #define openxc_VehicleMessage_command_response_tag 6
-#define openxc_VehicleMessage_uptime_tag         7
+#define openxc_VehicleMessage_timestamp_tag      7
 
 /* Struct field encoding specification for nanopb */
 extern const pb_field_t openxc_VehicleMessage_fields[8];
 extern const pb_field_t openxc_CanMessage_fields[5];
-extern const pb_field_t openxc_ControlCommand_fields[8];
+extern const pb_field_t openxc_ControlCommand_fields[9];
 extern const pb_field_t openxc_DiagnosticControlCommand_fields[3];
 extern const pb_field_t openxc_PassthroughModeControlCommand_fields[3];
 extern const pb_field_t openxc_AcceptanceFilterBypassCommand_fields[3];
@@ -380,6 +394,7 @@ extern const pb_field_t openxc_NetworkOperatorSettings_NetworkDescriptor_fields[
 extern const pb_field_t openxc_NetworkDataSettings_fields[2];
 extern const pb_field_t openxc_ServerConnectSettings_fields[3];
 extern const pb_field_t openxc_ModemConfigurationCommand_fields[4];
+extern const pb_field_t openxc_RTCConfigurationCommand_fields[2];
 extern const pb_field_t openxc_CommandResponse_fields[4];
 extern const pb_field_t openxc_DiagnosticRequest_fields[10];
 extern const pb_field_t openxc_DiagnosticResponse_fields[9];
@@ -396,6 +411,7 @@ extern const pb_field_t openxc_SimpleMessage_fields[4];
 #define openxc_NetworkOperatorSettings_size      22
 #define openxc_NetworkOperatorSettings_NetworkDescriptor_size 12
 #define openxc_ServerConnectSettings_size        137
+#define openxc_RTCConfigurationCommand_size      6
 #define openxc_CommandResponse_size              139
 #define openxc_DiagnosticRequest_size            68
 #define openxc_DiagnosticResponse_size           56
index ef02ba8..534b223 100644 (file)
@@ -40,9 +40,9 @@ public final class BinaryMessages {
     com.openxc.BinaryMessages.CommandResponse getCommandResponse();
     com.openxc.BinaryMessages.CommandResponseOrBuilder getCommandResponseOrBuilder();
     
-    // optional uint32 uptime = 7;
-    boolean hasUptime();
-    int getUptime();
+    // optional uint64 timestamp = 7;
+    boolean hasTimestamp();
+    long getTimestamp();
   }
   public static final class VehicleMessage extends
       com.google.protobuf.GeneratedMessage
@@ -226,14 +226,14 @@ public final class BinaryMessages {
       return commandResponse_;
     }
     
-    // optional uint32 uptime = 7;
-    public static final int UPTIME_FIELD_NUMBER = 7;
-    private int uptime_;
-    public boolean hasUptime() {
+    // optional uint64 timestamp = 7;
+    public static final int TIMESTAMP_FIELD_NUMBER = 7;
+    private long timestamp_;
+    public boolean hasTimestamp() {
       return ((bitField0_ & 0x00000040) == 0x00000040);
     }
-    public int getUptime() {
-      return uptime_;
+    public long getTimestamp() {
+      return timestamp_;
     }
     
     private void initFields() {
@@ -243,7 +243,7 @@ public final class BinaryMessages {
       diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
       controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
       commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
-      uptime_ = 0;
+      timestamp_ = 0L;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -276,7 +276,7 @@ public final class BinaryMessages {
         output.writeMessage(6, commandResponse_);
       }
       if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        output.writeUInt32(7, uptime_);
+        output.writeUInt64(7, timestamp_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -313,7 +313,7 @@ public final class BinaryMessages {
       }
       if (((bitField0_ & 0x00000040) == 0x00000040)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(7, uptime_);
+          .computeUInt64Size(7, timestamp_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -476,7 +476,7 @@ public final class BinaryMessages {
           commandResponseBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000020);
-        uptime_ = 0;
+        timestamp_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000040);
         return this;
       }
@@ -563,7 +563,7 @@ public final class BinaryMessages {
         if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
           to_bitField0_ |= 0x00000040;
         }
-        result.uptime_ = uptime_;
+        result.timestamp_ = timestamp_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -598,8 +598,8 @@ public final class BinaryMessages {
         if (other.hasCommandResponse()) {
           mergeCommandResponse(other.getCommandResponse());
         }
-        if (other.hasUptime()) {
-          setUptime(other.getUptime());
+        if (other.hasTimestamp()) {
+          setTimestamp(other.getTimestamp());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -690,7 +690,7 @@ public final class BinaryMessages {
             }
             case 56: {
               bitField0_ |= 0x00000040;
-              uptime_ = input.readUInt32();
+              timestamp_ = input.readUInt64();
               break;
             }
           }
@@ -1173,23 +1173,23 @@ public final class BinaryMessages {
         return commandResponseBuilder_;
       }
       
-      // optional uint32 uptime = 7;
-      private int uptime_ ;
-      public boolean hasUptime() {
+      // optional uint64 timestamp = 7;
+      private long timestamp_ ;
+      public boolean hasTimestamp() {
         return ((bitField0_ & 0x00000040) == 0x00000040);
       }
-      public int getUptime() {
-        return uptime_;
+      public long getTimestamp() {
+        return timestamp_;
       }
-      public Builder setUptime(int value) {
+      public Builder setTimestamp(long value) {
         bitField0_ |= 0x00000040;
-        uptime_ = value;
+        timestamp_ = value;
         onChanged();
         return this;
       }
-      public Builder clearUptime() {
+      public Builder clearTimestamp() {
         bitField0_ = (bitField0_ & ~0x00000040);
-        uptime_ = 0;
+        timestamp_ = 0L;
         onChanged();
         return this;
       }
@@ -1831,6 +1831,11 @@ public final class BinaryMessages {
     boolean hasModemConfigurationCommand();
     com.openxc.BinaryMessages.ModemConfigurationCommand getModemConfigurationCommand();
     com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder getModemConfigurationCommandOrBuilder();
+    
+    // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
+    boolean hasRtcConfigurationCommand();
+    com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand();
+    com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder();
   }
   public static final class ControlCommand extends
       com.google.protobuf.GeneratedMessage
@@ -1870,6 +1875,8 @@ public final class BinaryMessages {
       PAYLOAD_FORMAT(5, 6),
       PREDEFINED_OBD2_REQUESTS(6, 7),
       MODEM_CONFIGURATION(7, 8),
+      RTC_CONFIGURATION(8, 9),
+      SD_MOUNT_STATUS(9, 10),
       ;
       
       public static final int VERSION_VALUE = 1;
@@ -1880,6 +1887,8 @@ public final class BinaryMessages {
       public static final int PAYLOAD_FORMAT_VALUE = 6;
       public static final int PREDEFINED_OBD2_REQUESTS_VALUE = 7;
       public static final int MODEM_CONFIGURATION_VALUE = 8;
+      public static final int RTC_CONFIGURATION_VALUE = 9;
+      public static final int SD_MOUNT_STATUS_VALUE = 10;
       
       
       public final int getNumber() { return value; }
@@ -1894,6 +1903,8 @@ public final class BinaryMessages {
           case 6: return PAYLOAD_FORMAT;
           case 7: return PREDEFINED_OBD2_REQUESTS;
           case 8: return MODEM_CONFIGURATION;
+          case 9: return RTC_CONFIGURATION;
+          case 10: return SD_MOUNT_STATUS;
           default: return null;
         }
       }
@@ -1924,7 +1935,7 @@ public final class BinaryMessages {
       }
       
       private static final Type[] VALUES = {
-        VERSION, DEVICE_ID, DIAGNOSTIC, PASSTHROUGH, ACCEPTANCE_FILTER_BYPASS, PAYLOAD_FORMAT, PREDEFINED_OBD2_REQUESTS, MODEM_CONFIGURATION, 
+        VERSION, DEVICE_ID, DIAGNOSTIC, PASSTHROUGH, ACCEPTANCE_FILTER_BYPASS, PAYLOAD_FORMAT, PREDEFINED_OBD2_REQUESTS, MODEM_CONFIGURATION, RTC_CONFIGURATION, SD_MOUNT_STATUS, 
       };
       
       public static Type valueOf(
@@ -2036,6 +2047,19 @@ public final class BinaryMessages {
       return modemConfigurationCommand_;
     }
     
+    // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
+    public static final int RTC_CONFIGURATION_COMMAND_FIELD_NUMBER = 8;
+    private com.openxc.BinaryMessages.RTCConfigurationCommand rtcConfigurationCommand_;
+    public boolean hasRtcConfigurationCommand() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand() {
+      return rtcConfigurationCommand_;
+    }
+    public com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder() {
+      return rtcConfigurationCommand_;
+    }
+    
     private void initFields() {
       type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
       diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
@@ -2044,6 +2068,7 @@ public final class BinaryMessages {
       payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
       predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
       modemConfigurationCommand_ = com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
+      rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -2078,6 +2103,9 @@ public final class BinaryMessages {
       if (((bitField0_ & 0x00000040) == 0x00000040)) {
         output.writeMessage(7, modemConfigurationCommand_);
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeMessage(8, rtcConfigurationCommand_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -2115,6 +2143,10 @@ public final class BinaryMessages {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(7, modemConfigurationCommand_);
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, rtcConfigurationCommand_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -2237,6 +2269,7 @@ public final class BinaryMessages {
           getPayloadFormatCommandFieldBuilder();
           getPredefinedObd2RequestsCommandFieldBuilder();
           getModemConfigurationCommandFieldBuilder();
+          getRtcConfigurationCommandFieldBuilder();
         }
       }
       private static Builder create() {
@@ -2283,6 +2316,12 @@ public final class BinaryMessages {
           modemConfigurationCommandBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000040);
+        if (rtcConfigurationCommandBuilder_ == null) {
+          rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
+        } else {
+          rtcConfigurationCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
         return this;
       }
       
@@ -2373,6 +2412,14 @@ public final class BinaryMessages {
         } else {
           result.modemConfigurationCommand_ = modemConfigurationCommandBuilder_.build();
         }
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        if (rtcConfigurationCommandBuilder_ == null) {
+          result.rtcConfigurationCommand_ = rtcConfigurationCommand_;
+        } else {
+          result.rtcConfigurationCommand_ = rtcConfigurationCommandBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -2410,6 +2457,9 @@ public final class BinaryMessages {
         if (other.hasModemConfigurationCommand()) {
           mergeModemConfigurationCommand(other.getModemConfigurationCommand());
         }
+        if (other.hasRtcConfigurationCommand()) {
+          mergeRtcConfigurationCommand(other.getRtcConfigurationCommand());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -2506,6 +2556,15 @@ public final class BinaryMessages {
               setModemConfigurationCommand(subBuilder.buildPartial());
               break;
             }
+            case 66: {
+              com.openxc.BinaryMessages.RTCConfigurationCommand.Builder subBuilder = com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder();
+              if (hasRtcConfigurationCommand()) {
+                subBuilder.mergeFrom(getRtcConfigurationCommand());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setRtcConfigurationCommand(subBuilder.buildPartial());
+              break;
+            }
           }
         }
       }
@@ -3076,6 +3135,96 @@ public final class BinaryMessages {
         return modemConfigurationCommandBuilder_;
       }
       
+      // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
+      private com.openxc.BinaryMessages.RTCConfigurationCommand rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder> rtcConfigurationCommandBuilder_;
+      public boolean hasRtcConfigurationCommand() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand() {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          return rtcConfigurationCommand_;
+        } else {
+          return rtcConfigurationCommandBuilder_.getMessage();
+        }
+      }
+      public Builder setRtcConfigurationCommand(com.openxc.BinaryMessages.RTCConfigurationCommand value) {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          rtcConfigurationCommand_ = value;
+          onChanged();
+        } else {
+          rtcConfigurationCommandBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder setRtcConfigurationCommand(
+          com.openxc.BinaryMessages.RTCConfigurationCommand.Builder builderForValue) {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          rtcConfigurationCommand_ = builderForValue.build();
+          onChanged();
+        } else {
+          rtcConfigurationCommandBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder mergeRtcConfigurationCommand(com.openxc.BinaryMessages.RTCConfigurationCommand value) {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              rtcConfigurationCommand_ != com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance()) {
+            rtcConfigurationCommand_ =
+              com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder(rtcConfigurationCommand_).mergeFrom(value).buildPartial();
+          } else {
+            rtcConfigurationCommand_ = value;
+          }
+          onChanged();
+        } else {
+          rtcConfigurationCommandBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder clearRtcConfigurationCommand() {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          rtcConfigurationCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.openxc.BinaryMessages.RTCConfigurationCommand.Builder getRtcConfigurationCommandBuilder() {
+        bitField0_ |= 0x00000080;
+        onChanged();
+        return getRtcConfigurationCommandFieldBuilder().getBuilder();
+      }
+      public com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder() {
+        if (rtcConfigurationCommandBuilder_ != null) {
+          return rtcConfigurationCommandBuilder_.getMessageOrBuilder();
+        } else {
+          return rtcConfigurationCommand_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder> 
+          getRtcConfigurationCommandFieldBuilder() {
+        if (rtcConfigurationCommandBuilder_ == null) {
+          rtcConfigurationCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder>(
+                  rtcConfigurationCommand_,
+                  getParentForChildren(),
+                  isClean());
+          rtcConfigurationCommand_ = null;
+        }
+        return rtcConfigurationCommandBuilder_;
+      }
+      
       // @@protoc_insertion_point(builder_scope:openxc.ControlCommand)
     }
     
@@ -4475,10 +4624,12 @@ public final class BinaryMessages {
         implements com.google.protobuf.ProtocolMessageEnum {
       JSON(0, 1),
       PROTOBUF(1, 2),
+      MESSAGEPACK(2, 3),
       ;
       
       public static final int JSON_VALUE = 1;
       public static final int PROTOBUF_VALUE = 2;
+      public static final int MESSAGEPACK_VALUE = 3;
       
       
       public final int getNumber() { return value; }
@@ -4487,6 +4638,7 @@ public final class BinaryMessages {
         switch (value) {
           case 1: return JSON;
           case 2: return PROTOBUF;
+          case 3: return MESSAGEPACK;
           default: return null;
         }
       }
@@ -4517,7 +4669,7 @@ public final class BinaryMessages {
       }
       
       private static final PayloadFormat[] VALUES = {
-        JSON, PROTOBUF, 
+        JSON, PROTOBUF, MESSAGEPACK, 
       };
       
       public static PayloadFormat valueOf(
@@ -7805,6 +7957,344 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.ModemConfigurationCommand)
   }
   
+  public interface RTCConfigurationCommandOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional uint32 unix_time = 1;
+    boolean hasUnixTime();
+    int getUnixTime();
+  }
+  public static final class RTCConfigurationCommand extends
+      com.google.protobuf.GeneratedMessage
+      implements RTCConfigurationCommandOrBuilder {
+    // Use RTCConfigurationCommand.newBuilder() to construct.
+    private RTCConfigurationCommand(Builder builder) {
+      super(builder);
+    }
+    private RTCConfigurationCommand(boolean noInit) {}
+    
+    private static final RTCConfigurationCommand defaultInstance;
+    public static RTCConfigurationCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public RTCConfigurationCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional uint32 unix_time = 1;
+    public static final int UNIX_TIME_FIELD_NUMBER = 1;
+    private int unixTime_;
+    public boolean hasUnixTime() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getUnixTime() {
+      return unixTime_;
+    }
+    
+    private void initFields() {
+      unixTime_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeUInt32(1, unixTime_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, unixTime_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.RTCConfigurationCommand prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
+      }
+      
+      // Construct using com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        unixTime_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.RTCConfigurationCommand.getDescriptor();
+      }
+      
+      public com.openxc.BinaryMessages.RTCConfigurationCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
+      }
+      
+      public com.openxc.BinaryMessages.RTCConfigurationCommand build() {
+        com.openxc.BinaryMessages.RTCConfigurationCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.openxc.BinaryMessages.RTCConfigurationCommand buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.openxc.BinaryMessages.RTCConfigurationCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.openxc.BinaryMessages.RTCConfigurationCommand buildPartial() {
+        com.openxc.BinaryMessages.RTCConfigurationCommand result = new com.openxc.BinaryMessages.RTCConfigurationCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.unixTime_ = unixTime_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.RTCConfigurationCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.RTCConfigurationCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.openxc.BinaryMessages.RTCConfigurationCommand other) {
+        if (other == com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance()) return this;
+        if (other.hasUnixTime()) {
+          setUnixTime(other.getUnixTime());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              unixTime_ = input.readUInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional uint32 unix_time = 1;
+      private int unixTime_ ;
+      public boolean hasUnixTime() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getUnixTime() {
+        return unixTime_;
+      }
+      public Builder setUnixTime(int value) {
+        bitField0_ |= 0x00000001;
+        unixTime_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUnixTime() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        unixTime_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:openxc.RTCConfigurationCommand)
+    }
+    
+    static {
+      defaultInstance = new RTCConfigurationCommand(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:openxc.RTCConfigurationCommand)
+  }
+  
   public interface CommandResponseOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
@@ -11308,6 +11798,11 @@ public final class BinaryMessages {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_ModemConfigurationCommand_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_RTCConfigurationCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_CommandResponse_descriptor;
   private static
@@ -11342,7 +11837,7 @@ public final class BinaryMessages {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\014openxc.proto\022\006openxc\"\230\003\n\016VehicleMessag" +
+      "\n\014openxc.proto\022\006openxc\"\233\003\n\016VehicleMessag" +
       "e\022)\n\004type\030\001 \001(\0162\033.openxc.VehicleMessage." +
       "Type\022\'\n\013can_message\030\002 \001(\0132\022.openxc.CanMe" +
       "ssage\022-\n\016simple_message\030\003 \001(\0132\025.openxc.S" +
@@ -11350,81 +11845,85 @@ public final class BinaryMessages {
       "\0132\032.openxc.DiagnosticResponse\022/\n\017control" +
       "_command\030\005 \001(\0132\026.openxc.ControlCommand\0221" +
       "\n\020command_response\030\006 \001(\0132\027.openxc.Comman" +
-      "dResponse\022\016\n\006uptime\030\007 \001(\r\"V\n\004Type\022\007\n\003CAN" +
-      "\020\001\022\n\n\006SIMPLE\020\002\022\016\n\nDIAGNOSTIC\020\003\022\023\n\017CONTRO",
-      "L_COMMAND\020\004\022\024\n\020COMMAND_RESPONSE\020\005\"\224\001\n\nCa" +
-      "nMessage\022\013\n\003bus\030\001 \001(\005\022\n\n\002id\030\002 \001(\r\022\014\n\004dat" +
-      "a\030\003 \001(\014\0224\n\014frame_format\030\004 \001(\0162\036.openxc.C" +
-      "anMessage.FrameFormat\")\n\013FrameFormat\022\014\n\010" +
-      "STANDARD\020\001\022\014\n\010EXTENDED\020\002\"\231\005\n\016ControlComm" +
-      "and\022)\n\004type\030\001 \001(\0162\033.openxc.ControlComman" +
-      "d.Type\022<\n\022diagnostic_request\030\002 \001(\0132 .ope" +
-      "nxc.DiagnosticControlCommand\022G\n\030passthro" +
-      "ugh_mode_request\030\003 \001(\0132%.openxc.Passthro" +
-      "ughModeControlCommand\022O\n acceptance_filt",
-      "er_bypass_command\030\004 \001(\0132%.openxc.Accepta" +
-      "nceFilterBypassCommand\022<\n\026payload_format" +
-      "_command\030\005 \001(\0132\034.openxc.PayloadFormatCom" +
-      "mand\022O\n predefined_obd2_requests_command" +
-      "\030\006 \001(\0132%.openxc.PredefinedObd2RequestsCo" +
-      "mmand\022F\n\033modem_configuration_command\030\007 \001" +
-      "(\0132!.openxc.ModemConfigurationCommand\"\254\001" +
-      "\n\004Type\022\013\n\007VERSION\020\001\022\r\n\tDEVICE_ID\020\002\022\016\n\nDI" +
-      "AGNOSTIC\020\003\022\017\n\013PASSTHROUGH\020\004\022\034\n\030ACCEPTANC" +
-      "E_FILTER_BYPASS\020\005\022\022\n\016PAYLOAD_FORMAT\020\006\022\034\n",
-      "\030PREDEFINED_OBD2_REQUESTS\020\007\022\027\n\023MODEM_CON" +
-      "FIGURATION\020\010\"\236\001\n\030DiagnosticControlComman" +
-      "d\022*\n\007request\030\001 \001(\0132\031.openxc.DiagnosticRe" +
-      "quest\0227\n\006action\030\002 \001(\0162\'.openxc.Diagnosti" +
-      "cControlCommand.Action\"\035\n\006Action\022\007\n\003ADD\020" +
-      "\001\022\n\n\006CANCEL\020\002\"=\n\035PassthroughModeControlC" +
-      "ommand\022\013\n\003bus\030\001 \001(\005\022\017\n\007enabled\030\002 \001(\010\"<\n\035" +
-      "AcceptanceFilterBypassCommand\022\013\n\003bus\030\001 \001" +
-      "(\005\022\016\n\006bypass\030\002 \001(\010\"{\n\024PayloadFormatComma" +
-      "nd\022:\n\006format\030\001 \001(\0162*.openxc.PayloadForma",
-      "tCommand.PayloadFormat\"\'\n\rPayloadFormat\022" +
-      "\010\n\004JSON\020\001\022\014\n\010PROTOBUF\020\002\"0\n\035PredefinedObd" +
-      "2RequestsCommand\022\017\n\007enabled\030\001 \001(\010\"\321\003\n\027Ne" +
-      "tworkOperatorSettings\022\030\n\020allowDataRoamin" +
-      "g\030\001 \001(\010\022N\n\022operatorSelectMode\030\002 \001(\01622.op" +
-      "enxc.NetworkOperatorSettings.OperatorSel" +
-      "ectMode\022L\n\021networkDescriptor\030\003 \001(\01321.ope" +
-      "nxc.NetworkOperatorSettings.NetworkDescr" +
-      "iptor\032\230\001\n\021NetworkDescriptor\022\014\n\004PLMN\030\001 \001(" +
-      "\r\022R\n\013networkType\030\002 \001(\0162=.openxc.NetworkO",
-      "peratorSettings.NetworkDescriptor.Networ" +
-      "kType\"!\n\013NetworkType\022\007\n\003GSM\020\000\022\t\n\005UTRAN\020\002" +
-      "\"c\n\022OperatorSelectMode\022\r\n\tAUTOMATIC\020\000\022\n\n" +
-      "\006MANUAL\020\001\022\016\n\nDEREGISTER\020\002\022\014\n\010SET_ONLY\020\003\022" +
-      "\024\n\020MANUAL_AUTOMATIC\020\004\"\"\n\023NetworkDataSett" +
-      "ings\022\013\n\003APN\030\001 \001(\t\"3\n\025ServerConnectSettin" +
-      "gs\022\014\n\004host\030\001 \001(\t\022\014\n\004port\030\002 \001(\r\"\325\001\n\031Modem" +
-      "ConfigurationCommand\022@\n\027networkOperatorS" +
-      "ettings\030\001 \001(\0132\037.openxc.NetworkOperatorSe" +
-      "ttings\0228\n\023networkDataSettings\030\002 \001(\0132\033.op",
-      "enxc.NetworkDataSettings\022<\n\025serverConnec" +
-      "tSettings\030\003 \001(\0132\035.openxc.ServerConnectSe" +
-      "ttings\"]\n\017CommandResponse\022)\n\004type\030\001 \001(\0162" +
-      "\033.openxc.ControlCommand.Type\022\017\n\007message\030" +
-      "\002 \001(\t\022\016\n\006status\030\003 \001(\010\"\375\001\n\021DiagnosticRequ" +
-      "est\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004" +
-      "mode\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007payload\030\005 \001(\014" +
-      "\022\032\n\022multiple_responses\030\006 \001(\010\022\021\n\tfrequenc" +
-      "y\030\007 \001(\001\022\014\n\004name\030\010 \001(\t\022;\n\014decoded_type\030\t " +
-      "\001(\0162%.openxc.DiagnosticRequest.DecodedTy",
-      "pe\"!\n\013DecodedType\022\010\n\004NONE\020\001\022\010\n\004OBD2\020\002\"\241\001" +
-      "\n\022DiagnosticResponse\022\013\n\003bus\030\001 \001(\005\022\022\n\nmes" +
-      "sage_id\030\002 \001(\r\022\014\n\004mode\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r" +
-      "\022\017\n\007success\030\005 \001(\010\022\036\n\026negative_response_c" +
-      "ode\030\006 \001(\r\022\017\n\007payload\030\007 \001(\014\022\r\n\005value\030\010 \001(" +
-      "\001\"\242\001\n\014DynamicField\022\'\n\004type\030\001 \001(\0162\031.openx" +
-      "c.DynamicField.Type\022\024\n\014string_value\030\002 \001(" +
-      "\t\022\025\n\rnumeric_value\030\003 \001(\001\022\025\n\rboolean_valu" +
-      "e\030\004 \001(\010\"%\n\004Type\022\n\n\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004" +
-      "BOOL\020\003\"g\n\rSimpleMessage\022\014\n\004name\030\001 \001(\t\022#\n",
-      "\005value\030\002 \001(\0132\024.openxc.DynamicField\022#\n\005ev" +
-      "ent\030\003 \001(\0132\024.openxc.DynamicFieldB\034\n\ncom.o" +
-      "penxcB\016BinaryMessages"
+      "dResponse\022\021\n\ttimestamp\030\007 \001(\004\"V\n\004Type\022\007\n\003" +
+      "CAN\020\001\022\n\n\006SIMPLE\020\002\022\016\n\nDIAGNOSTIC\020\003\022\023\n\017CON",
+      "TROL_COMMAND\020\004\022\024\n\020COMMAND_RESPONSE\020\005\"\224\001\n" +
+      "\nCanMessage\022\013\n\003bus\030\001 \001(\005\022\n\n\002id\030\002 \001(\r\022\014\n\004" +
+      "data\030\003 \001(\014\0224\n\014frame_format\030\004 \001(\0162\036.openx" +
+      "c.CanMessage.FrameFormat\")\n\013FrameFormat\022" +
+      "\014\n\010STANDARD\020\001\022\014\n\010EXTENDED\020\002\"\211\006\n\016ControlC" +
+      "ommand\022)\n\004type\030\001 \001(\0162\033.openxc.ControlCom" +
+      "mand.Type\022<\n\022diagnostic_request\030\002 \001(\0132 ." +
+      "openxc.DiagnosticControlCommand\022G\n\030passt" +
+      "hrough_mode_request\030\003 \001(\0132%.openxc.Passt" +
+      "hroughModeControlCommand\022O\n acceptance_f",
+      "ilter_bypass_command\030\004 \001(\0132%.openxc.Acce" +
+      "ptanceFilterBypassCommand\022<\n\026payload_for" +
+      "mat_command\030\005 \001(\0132\034.openxc.PayloadFormat" +
+      "Command\022O\n predefined_obd2_requests_comm" +
+      "and\030\006 \001(\0132%.openxc.PredefinedObd2Request" +
+      "sCommand\022F\n\033modem_configuration_command\030" +
+      "\007 \001(\0132!.openxc.ModemConfigurationCommand" +
+      "\022B\n\031rtc_configuration_command\030\010 \001(\0132\037.op" +
+      "enxc.RTCConfigurationCommand\"\330\001\n\004Type\022\013\n" +
+      "\007VERSION\020\001\022\r\n\tDEVICE_ID\020\002\022\016\n\nDIAGNOSTIC\020",
+      "\003\022\017\n\013PASSTHROUGH\020\004\022\034\n\030ACCEPTANCE_FILTER_" +
+      "BYPASS\020\005\022\022\n\016PAYLOAD_FORMAT\020\006\022\034\n\030PREDEFIN" +
+      "ED_OBD2_REQUESTS\020\007\022\027\n\023MODEM_CONFIGURATIO" +
+      "N\020\010\022\025\n\021RTC_CONFIGURATION\020\t\022\023\n\017SD_MOUNT_S" +
+      "TATUS\020\n\"\236\001\n\030DiagnosticControlCommand\022*\n\007" +
+      "request\030\001 \001(\0132\031.openxc.DiagnosticRequest" +
+      "\0227\n\006action\030\002 \001(\0162\'.openxc.DiagnosticCont" +
+      "rolCommand.Action\"\035\n\006Action\022\007\n\003ADD\020\001\022\n\n\006" +
+      "CANCEL\020\002\"=\n\035PassthroughModeControlComman" +
+      "d\022\013\n\003bus\030\001 \001(\005\022\017\n\007enabled\030\002 \001(\010\"<\n\035Accep",
+      "tanceFilterBypassCommand\022\013\n\003bus\030\001 \001(\005\022\016\n" +
+      "\006bypass\030\002 \001(\010\"\214\001\n\024PayloadFormatCommand\022:" +
+      "\n\006format\030\001 \001(\0162*.openxc.PayloadFormatCom" +
+      "mand.PayloadFormat\"8\n\rPayloadFormat\022\010\n\004J" +
+      "SON\020\001\022\014\n\010PROTOBUF\020\002\022\017\n\013MESSAGEPACK\020\003\"0\n\035" +
+      "PredefinedObd2RequestsCommand\022\017\n\007enabled" +
+      "\030\001 \001(\010\"\321\003\n\027NetworkOperatorSettings\022\030\n\020al" +
+      "lowDataRoaming\030\001 \001(\010\022N\n\022operatorSelectMo" +
+      "de\030\002 \001(\01622.openxc.NetworkOperatorSetting" +
+      "s.OperatorSelectMode\022L\n\021networkDescripto",
+      "r\030\003 \001(\01321.openxc.NetworkOperatorSettings" +
+      ".NetworkDescriptor\032\230\001\n\021NetworkDescriptor" +
+      "\022\014\n\004PLMN\030\001 \001(\r\022R\n\013networkType\030\002 \001(\0162=.op" +
+      "enxc.NetworkOperatorSettings.NetworkDesc" +
+      "riptor.NetworkType\"!\n\013NetworkType\022\007\n\003GSM" +
+      "\020\000\022\t\n\005UTRAN\020\002\"c\n\022OperatorSelectMode\022\r\n\tA" +
+      "UTOMATIC\020\000\022\n\n\006MANUAL\020\001\022\016\n\nDEREGISTER\020\002\022\014" +
+      "\n\010SET_ONLY\020\003\022\024\n\020MANUAL_AUTOMATIC\020\004\"\"\n\023Ne" +
+      "tworkDataSettings\022\013\n\003APN\030\001 \001(\t\"3\n\025Server" +
+      "ConnectSettings\022\014\n\004host\030\001 \001(\t\022\014\n\004port\030\002 ",
+      "\001(\r\"\325\001\n\031ModemConfigurationCommand\022@\n\027net" +
+      "workOperatorSettings\030\001 \001(\0132\037.openxc.Netw" +
+      "orkOperatorSettings\0228\n\023networkDataSettin" +
+      "gs\030\002 \001(\0132\033.openxc.NetworkDataSettings\022<\n" +
+      "\025serverConnectSettings\030\003 \001(\0132\035.openxc.Se" +
+      "rverConnectSettings\",\n\027RTCConfigurationC" +
+      "ommand\022\021\n\tunix_time\030\001 \001(\r\"]\n\017CommandResp" +
+      "onse\022)\n\004type\030\001 \001(\0162\033.openxc.ControlComma" +
+      "nd.Type\022\017\n\007message\030\002 \001(\t\022\016\n\006status\030\003 \001(\010" +
+      "\"\375\001\n\021DiagnosticRequest\022\013\n\003bus\030\001 \001(\005\022\022\n\nm",
+      "essage_id\030\002 \001(\r\022\014\n\004mode\030\003 \001(\r\022\013\n\003pid\030\004 \001" +
+      "(\r\022\017\n\007payload\030\005 \001(\014\022\032\n\022multiple_response" +
+      "s\030\006 \001(\010\022\021\n\tfrequency\030\007 \001(\001\022\014\n\004name\030\010 \001(\t" +
+      "\022;\n\014decoded_type\030\t \001(\0162%.openxc.Diagnost" +
+      "icRequest.DecodedType\"!\n\013DecodedType\022\010\n\004" +
+      "NONE\020\001\022\010\n\004OBD2\020\002\"\241\001\n\022DiagnosticResponse\022" +
+      "\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004mode" +
+      "\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007success\030\005 \001(\010\022\036\n\026" +
+      "negative_response_code\030\006 \001(\r\022\017\n\007payload\030" +
+      "\007 \001(\014\022\r\n\005value\030\010 \001(\001\"\242\001\n\014DynamicField\022\'\n",
+      "\004type\030\001 \001(\0162\031.openxc.DynamicField.Type\022\024" +
+      "\n\014string_value\030\002 \001(\t\022\025\n\rnumeric_value\030\003 " +
+      "\001(\001\022\025\n\rboolean_value\030\004 \001(\010\"%\n\004Type\022\n\n\006ST" +
+      "RING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOOL\020\003\"g\n\rSimpleMessa" +
+      "ge\022\014\n\004name\030\001 \001(\t\022#\n\005value\030\002 \001(\0132\024.openxc" +
+      ".DynamicField\022#\n\005event\030\003 \001(\0132\024.openxc.Dy" +
+      "namicFieldB\034\n\ncom.openxcB\016BinaryMessages"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -11436,7 +11935,7 @@ public final class BinaryMessages {
           internal_static_openxc_VehicleMessage_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_VehicleMessage_descriptor,
-              new java.lang.String[] { "Type", "CanMessage", "SimpleMessage", "DiagnosticResponse", "ControlCommand", "CommandResponse", "Uptime", },
+              new java.lang.String[] { "Type", "CanMessage", "SimpleMessage", "DiagnosticResponse", "ControlCommand", "CommandResponse", "Timestamp", },
               com.openxc.BinaryMessages.VehicleMessage.class,
               com.openxc.BinaryMessages.VehicleMessage.Builder.class);
           internal_static_openxc_CanMessage_descriptor =
@@ -11452,7 +11951,7 @@ public final class BinaryMessages {
           internal_static_openxc_ControlCommand_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_ControlCommand_descriptor,
-              new java.lang.String[] { "Type", "DiagnosticRequest", "PassthroughModeRequest", "AcceptanceFilterBypassCommand", "PayloadFormatCommand", "PredefinedObd2RequestsCommand", "ModemConfigurationCommand", },
+              new java.lang.String[] { "Type", "DiagnosticRequest", "PassthroughModeRequest", "AcceptanceFilterBypassCommand", "PayloadFormatCommand", "PredefinedObd2RequestsCommand", "ModemConfigurationCommand", "RtcConfigurationCommand", },
               com.openxc.BinaryMessages.ControlCommand.class,
               com.openxc.BinaryMessages.ControlCommand.Builder.class);
           internal_static_openxc_DiagnosticControlCommand_descriptor =
@@ -11535,8 +12034,16 @@ public final class BinaryMessages {
               new java.lang.String[] { "NetworkOperatorSettings", "NetworkDataSettings", "ServerConnectSettings", },
               com.openxc.BinaryMessages.ModemConfigurationCommand.class,
               com.openxc.BinaryMessages.ModemConfigurationCommand.Builder.class);
-          internal_static_openxc_CommandResponse_descriptor =
+          internal_static_openxc_RTCConfigurationCommand_descriptor =
             getDescriptor().getMessageTypes().get(12);
+          internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_openxc_RTCConfigurationCommand_descriptor,
+              new java.lang.String[] { "UnixTime", },
+              com.openxc.BinaryMessages.RTCConfigurationCommand.class,
+              com.openxc.BinaryMessages.RTCConfigurationCommand.Builder.class);
+          internal_static_openxc_CommandResponse_descriptor =
+            getDescriptor().getMessageTypes().get(13);
           internal_static_openxc_CommandResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_CommandResponse_descriptor,
@@ -11544,7 +12051,7 @@ public final class BinaryMessages {
               com.openxc.BinaryMessages.CommandResponse.class,
               com.openxc.BinaryMessages.CommandResponse.Builder.class);
           internal_static_openxc_DiagnosticRequest_descriptor =
-            getDescriptor().getMessageTypes().get(13);
+            getDescriptor().getMessageTypes().get(14);
           internal_static_openxc_DiagnosticRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_DiagnosticRequest_descriptor,
@@ -11552,7 +12059,7 @@ public final class BinaryMessages {
               com.openxc.BinaryMessages.DiagnosticRequest.class,
               com.openxc.BinaryMessages.DiagnosticRequest.Builder.class);
           internal_static_openxc_DiagnosticResponse_descriptor =
-            getDescriptor().getMessageTypes().get(14);
+            getDescriptor().getMessageTypes().get(15);
           internal_static_openxc_DiagnosticResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_DiagnosticResponse_descriptor,
@@ -11560,7 +12067,7 @@ public final class BinaryMessages {
               com.openxc.BinaryMessages.DiagnosticResponse.class,
               com.openxc.BinaryMessages.DiagnosticResponse.Builder.class);
           internal_static_openxc_DynamicField_descriptor =
-            getDescriptor().getMessageTypes().get(15);
+            getDescriptor().getMessageTypes().get(16);
           internal_static_openxc_DynamicField_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_DynamicField_descriptor,
@@ -11568,7 +12075,7 @@ public final class BinaryMessages {
               com.openxc.BinaryMessages.DynamicField.class,
               com.openxc.BinaryMessages.DynamicField.Builder.class);
           internal_static_openxc_SimpleMessage_descriptor =
-            getDescriptor().getMessageTypes().get(16);
+            getDescriptor().getMessageTypes().get(17);
           internal_static_openxc_SimpleMessage_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_openxc_SimpleMessage_descriptor,
index b63c713..718231b 100644 (file)
@@ -11,7 +11,7 @@ from google.protobuf import descriptor_pb2
 DESCRIPTOR = descriptor.FileDescriptor(
   name='openxc.proto',
   package='openxc',
-  serialized_pb='\n\x0copenxc.proto\x12\x06openxc\"\x98\x03\n\x0eVehicleMessage\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.VehicleMessage.Type\x12\'\n\x0b\x63\x61n_message\x18\x02 \x01(\x0b\x32\x12.openxc.CanMessage\x12-\n\x0esimple_message\x18\x03 \x01(\x0b\x32\x15.openxc.SimpleMessage\x12\x37\n\x13\x64iagnostic_response\x18\x04 \x01(\x0b\x32\x1a.openxc.DiagnosticResponse\x12/\n\x0f\x63ontrol_command\x18\x05 \x01(\x0b\x32\x16.openxc.ControlCommand\x12\x31\n\x10\x63ommand_response\x18\x06 \x01(\x0b\x32\x17.openxc.CommandResponse\x12\x0e\n\x06uptime\x18\x07 \x01(\r\"V\n\x04Type\x12\x07\n\x03\x43\x41N\x10\x01\x12\n\n\x06SIMPLE\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\x12\x13\n\x0f\x43ONTROL_COMMAND\x10\x04\x12\x14\n\x10\x43OMMAND_RESPONSE\x10\x05\"\x94\x01\n\nCanMessage\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x34\n\x0c\x66rame_format\x18\x04 \x01(\x0e\x32\x1e.openxc.CanMessage.FrameFormat\")\n\x0b\x46rameFormat\x12\x0c\n\x08STANDARD\x10\x01\x12\x0c\n\x08\x45XTENDED\x10\x02\"\x99\x05\n\x0e\x43ontrolCommand\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12<\n\x12\x64iagnostic_request\x18\x02 \x01(\x0b\x32 .openxc.DiagnosticControlCommand\x12G\n\x18passthrough_mode_request\x18\x03 \x01(\x0b\x32%.openxc.PassthroughModeControlCommand\x12O\n acceptance_filter_bypass_command\x18\x04 \x01(\x0b\x32%.openxc.AcceptanceFilterBypassCommand\x12<\n\x16payload_format_command\x18\x05 \x01(\x0b\x32\x1c.openxc.PayloadFormatCommand\x12O\n predefined_obd2_requests_command\x18\x06 \x01(\x0b\x32%.openxc.PredefinedObd2RequestsCommand\x12\x46\n\x1bmodem_configuration_command\x18\x07 \x01(\x0b\x32!.openxc.ModemConfigurationCommand\"\xac\x01\n\x04Type\x12\x0b\n\x07VERSION\x10\x01\x12\r\n\tDEVICE_ID\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\x12\x0f\n\x0bPASSTHROUGH\x10\x04\x12\x1c\n\x18\x41\x43\x43\x45PTANCE_FILTER_BYPASS\x10\x05\x12\x12\n\x0ePAYLOAD_FORMAT\x10\x06\x12\x1c\n\x18PREDEFINED_OBD2_REQUESTS\x10\x07\x12\x17\n\x13MODEM_CONFIGURATION\x10\x08\"\x9e\x01\n\x18\x44iagnosticControlCommand\x12*\n\x07request\x18\x01 \x01(\x0b\x32\x19.openxc.DiagnosticRequest\x12\x37\n\x06\x61\x63tion\x18\x02 \x01(\x0e\x32\'.openxc.DiagnosticControlCommand.Action\"\x1d\n\x06\x41\x63tion\x12\x07\n\x03\x41\x44\x44\x10\x01\x12\n\n\x06\x43\x41NCEL\x10\x02\"=\n\x1dPassthroughModeControlCommand\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"<\n\x1d\x41\x63\x63\x65ptanceFilterBypassCommand\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x0e\n\x06\x62ypass\x18\x02 \x01(\x08\"{\n\x14PayloadFormatCommand\x12:\n\x06\x66ormat\x18\x01 \x01(\x0e\x32*.openxc.PayloadFormatCommand.PayloadFormat\"\'\n\rPayloadFormat\x12\x08\n\x04JSON\x10\x01\x12\x0c\n\x08PROTOBUF\x10\x02\"0\n\x1dPredefinedObd2RequestsCommand\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\xd1\x03\n\x17NetworkOperatorSettings\x12\x18\n\x10\x61llowDataRoaming\x18\x01 \x01(\x08\x12N\n\x12operatorSelectMode\x18\x02 \x01(\x0e\x32\x32.openxc.NetworkOperatorSettings.OperatorSelectMode\x12L\n\x11networkDescriptor\x18\x03 \x01(\x0b\x32\x31.openxc.NetworkOperatorSettings.NetworkDescriptor\x1a\x98\x01\n\x11NetworkDescriptor\x12\x0c\n\x04PLMN\x18\x01 \x01(\r\x12R\n\x0bnetworkType\x18\x02 \x01(\x0e\x32=.openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType\"!\n\x0bNetworkType\x12\x07\n\x03GSM\x10\x00\x12\t\n\x05UTRAN\x10\x02\"c\n\x12OperatorSelectMode\x12\r\n\tAUTOMATIC\x10\x00\x12\n\n\x06MANUAL\x10\x01\x12\x0e\n\nDEREGISTER\x10\x02\x12\x0c\n\x08SET_ONLY\x10\x03\x12\x14\n\x10MANUAL_AUTOMATIC\x10\x04\"\"\n\x13NetworkDataSettings\x12\x0b\n\x03\x41PN\x18\x01 \x01(\t\"3\n\x15ServerConnectSettings\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"\xd5\x01\n\x19ModemConfigurationCommand\x12@\n\x17networkOperatorSettings\x18\x01 \x01(\x0b\x32\x1f.openxc.NetworkOperatorSettings\x12\x38\n\x13networkDataSettings\x18\x02 \x01(\x0b\x32\x1b.openxc.NetworkDataSettings\x12<\n\x15serverConnectSettings\x18\x03 \x01(\x0b\x32\x1d.openxc.ServerConnectSettings\"]\n\x0f\x43ommandResponse\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\x08\"\xfd\x01\n\x11\x44iagnosticRequest\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x12\n\nmessage_id\x18\x02 \x01(\r\x12\x0c\n\x04mode\x18\x03 \x01(\r\x12\x0b\n\x03pid\x18\x04 \x01(\r\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12\x1a\n\x12multiple_responses\x18\x06 \x01(\x08\x12\x11\n\tfrequency\x18\x07 \x01(\x01\x12\x0c\n\x04name\x18\x08 \x01(\t\x12;\n\x0c\x64\x65\x63oded_type\x18\t \x01(\x0e\x32%.openxc.DiagnosticRequest.DecodedType\"!\n\x0b\x44\x65\x63odedType\x12\x08\n\x04NONE\x10\x01\x12\x08\n\x04OBD2\x10\x02\"\xa1\x01\n\x12\x44iagnosticResponse\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x12\n\nmessage_id\x18\x02 \x01(\r\x12\x0c\n\x04mode\x18\x03 \x01(\r\x12\x0b\n\x03pid\x18\x04 \x01(\r\x12\x0f\n\x07success\x18\x05 \x01(\x08\x12\x1e\n\x16negative_response_code\x18\x06 \x01(\r\x12\x0f\n\x07payload\x18\x07 \x01(\x0c\x12\r\n\x05value\x18\x08 \x01(\x01\"\xa2\x01\n\x0c\x44ynamicField\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.openxc.DynamicField.Type\x12\x14\n\x0cstring_value\x18\x02 \x01(\t\x12\x15\n\rnumeric_value\x18\x03 \x01(\x01\x12\x15\n\rboolean_value\x18\x04 \x01(\x08\"%\n\x04Type\x12\n\n\x06STRING\x10\x01\x12\x07\n\x03NUM\x10\x02\x12\x08\n\x04\x42OOL\x10\x03\"g\n\rSimpleMessage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.openxc.DynamicField\x12#\n\x05\x65vent\x18\x03 \x01(\x0b\x32\x14.openxc.DynamicFieldB\x1c\n\ncom.openxcB\x0e\x42inaryMessages')
+  serialized_pb='\n\x0copenxc.proto\x12\x06openxc\"\x9b\x03\n\x0eVehicleMessage\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.VehicleMessage.Type\x12\'\n\x0b\x63\x61n_message\x18\x02 \x01(\x0b\x32\x12.openxc.CanMessage\x12-\n\x0esimple_message\x18\x03 \x01(\x0b\x32\x15.openxc.SimpleMessage\x12\x37\n\x13\x64iagnostic_response\x18\x04 \x01(\x0b\x32\x1a.openxc.DiagnosticResponse\x12/\n\x0f\x63ontrol_command\x18\x05 \x01(\x0b\x32\x16.openxc.ControlCommand\x12\x31\n\x10\x63ommand_response\x18\x06 \x01(\x0b\x32\x17.openxc.CommandResponse\x12\x11\n\ttimestamp\x18\x07 \x01(\x04\"V\n\x04Type\x12\x07\n\x03\x43\x41N\x10\x01\x12\n\n\x06SIMPLE\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\x12\x13\n\x0f\x43ONTROL_COMMAND\x10\x04\x12\x14\n\x10\x43OMMAND_RESPONSE\x10\x05\"\x94\x01\n\nCanMessage\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x34\n\x0c\x66rame_format\x18\x04 \x01(\x0e\x32\x1e.openxc.CanMessage.FrameFormat\")\n\x0b\x46rameFormat\x12\x0c\n\x08STANDARD\x10\x01\x12\x0c\n\x08\x45XTENDED\x10\x02\"\x89\x06\n\x0e\x43ontrolCommand\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12<\n\x12\x64iagnostic_request\x18\x02 \x01(\x0b\x32 .openxc.DiagnosticControlCommand\x12G\n\x18passthrough_mode_request\x18\x03 \x01(\x0b\x32%.openxc.PassthroughModeControlCommand\x12O\n acceptance_filter_bypass_command\x18\x04 \x01(\x0b\x32%.openxc.AcceptanceFilterBypassCommand\x12<\n\x16payload_format_command\x18\x05 \x01(\x0b\x32\x1c.openxc.PayloadFormatCommand\x12O\n predefined_obd2_requests_command\x18\x06 \x01(\x0b\x32%.openxc.PredefinedObd2RequestsCommand\x12\x46\n\x1bmodem_configuration_command\x18\x07 \x01(\x0b\x32!.openxc.ModemConfigurationCommand\x12\x42\n\x19rtc_configuration_command\x18\x08 \x01(\x0b\x32\x1f.openxc.RTCConfigurationCommand\"\xd8\x01\n\x04Type\x12\x0b\n\x07VERSION\x10\x01\x12\r\n\tDEVICE_ID\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\x12\x0f\n\x0bPASSTHROUGH\x10\x04\x12\x1c\n\x18\x41\x43\x43\x45PTANCE_FILTER_BYPASS\x10\x05\x12\x12\n\x0ePAYLOAD_FORMAT\x10\x06\x12\x1c\n\x18PREDEFINED_OBD2_REQUESTS\x10\x07\x12\x17\n\x13MODEM_CONFIGURATION\x10\x08\x12\x15\n\x11RTC_CONFIGURATION\x10\t\x12\x13\n\x0fSD_MOUNT_STATUS\x10\n\"\x9e\x01\n\x18\x44iagnosticControlCommand\x12*\n\x07request\x18\x01 \x01(\x0b\x32\x19.openxc.DiagnosticRequest\x12\x37\n\x06\x61\x63tion\x18\x02 \x01(\x0e\x32\'.openxc.DiagnosticControlCommand.Action\"\x1d\n\x06\x41\x63tion\x12\x07\n\x03\x41\x44\x44\x10\x01\x12\n\n\x06\x43\x41NCEL\x10\x02\"=\n\x1dPassthroughModeControlCommand\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"<\n\x1d\x41\x63\x63\x65ptanceFilterBypassCommand\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x0e\n\x06\x62ypass\x18\x02 \x01(\x08\"\x8c\x01\n\x14PayloadFormatCommand\x12:\n\x06\x66ormat\x18\x01 \x01(\x0e\x32*.openxc.PayloadFormatCommand.PayloadFormat\"8\n\rPayloadFormat\x12\x08\n\x04JSON\x10\x01\x12\x0c\n\x08PROTOBUF\x10\x02\x12\x0f\n\x0bMESSAGEPACK\x10\x03\"0\n\x1dPredefinedObd2RequestsCommand\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\xd1\x03\n\x17NetworkOperatorSettings\x12\x18\n\x10\x61llowDataRoaming\x18\x01 \x01(\x08\x12N\n\x12operatorSelectMode\x18\x02 \x01(\x0e\x32\x32.openxc.NetworkOperatorSettings.OperatorSelectMode\x12L\n\x11networkDescriptor\x18\x03 \x01(\x0b\x32\x31.openxc.NetworkOperatorSettings.NetworkDescriptor\x1a\x98\x01\n\x11NetworkDescriptor\x12\x0c\n\x04PLMN\x18\x01 \x01(\r\x12R\n\x0bnetworkType\x18\x02 \x01(\x0e\x32=.openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType\"!\n\x0bNetworkType\x12\x07\n\x03GSM\x10\x00\x12\t\n\x05UTRAN\x10\x02\"c\n\x12OperatorSelectMode\x12\r\n\tAUTOMATIC\x10\x00\x12\n\n\x06MANUAL\x10\x01\x12\x0e\n\nDEREGISTER\x10\x02\x12\x0c\n\x08SET_ONLY\x10\x03\x12\x14\n\x10MANUAL_AUTOMATIC\x10\x04\"\"\n\x13NetworkDataSettings\x12\x0b\n\x03\x41PN\x18\x01 \x01(\t\"3\n\x15ServerConnectSettings\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"\xd5\x01\n\x19ModemConfigurationCommand\x12@\n\x17networkOperatorSettings\x18\x01 \x01(\x0b\x32\x1f.openxc.NetworkOperatorSettings\x12\x38\n\x13networkDataSettings\x18\x02 \x01(\x0b\x32\x1b.openxc.NetworkDataSettings\x12<\n\x15serverConnectSettings\x18\x03 \x01(\x0b\x32\x1d.openxc.ServerConnectSettings\",\n\x17RTCConfigurationCommand\x12\x11\n\tunix_time\x18\x01 \x01(\r\"]\n\x0f\x43ommandResponse\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\x08\"\xfd\x01\n\x11\x44iagnosticRequest\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x12\n\nmessage_id\x18\x02 \x01(\r\x12\x0c\n\x04mode\x18\x03 \x01(\r\x12\x0b\n\x03pid\x18\x04 \x01(\r\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12\x1a\n\x12multiple_responses\x18\x06 \x01(\x08\x12\x11\n\tfrequency\x18\x07 \x01(\x01\x12\x0c\n\x04name\x18\x08 \x01(\t\x12;\n\x0c\x64\x65\x63oded_type\x18\t \x01(\x0e\x32%.openxc.DiagnosticRequest.DecodedType\"!\n\x0b\x44\x65\x63odedType\x12\x08\n\x04NONE\x10\x01\x12\x08\n\x04OBD2\x10\x02\"\xa1\x01\n\x12\x44iagnosticResponse\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x12\n\nmessage_id\x18\x02 \x01(\r\x12\x0c\n\x04mode\x18\x03 \x01(\r\x12\x0b\n\x03pid\x18\x04 \x01(\r\x12\x0f\n\x07success\x18\x05 \x01(\x08\x12\x1e\n\x16negative_response_code\x18\x06 \x01(\r\x12\x0f\n\x07payload\x18\x07 \x01(\x0c\x12\r\n\x05value\x18\x08 \x01(\x01\"\xa2\x01\n\x0c\x44ynamicField\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.openxc.DynamicField.Type\x12\x14\n\x0cstring_value\x18\x02 \x01(\t\x12\x15\n\rnumeric_value\x18\x03 \x01(\x01\x12\x15\n\rboolean_value\x18\x04 \x01(\x08\"%\n\x04Type\x12\n\n\x06STRING\x10\x01\x12\x07\n\x03NUM\x10\x02\x12\x08\n\x04\x42OOL\x10\x03\"g\n\rSimpleMessage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.openxc.DynamicField\x12#\n\x05\x65vent\x18\x03 \x01(\x0b\x32\x14.openxc.DynamicFieldB\x1c\n\ncom.openxcB\x0e\x42inaryMessages')
 
 
 
@@ -44,8 +44,8 @@ _VEHICLEMESSAGE_TYPE = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=347,
-  serialized_end=433,
+  serialized_start=350,
+  serialized_end=436,
 )
 
 _CANMESSAGE_FRAMEFORMAT = descriptor.EnumDescriptor(
@@ -65,8 +65,8 @@ _CANMESSAGE_FRAMEFORMAT = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=543,
-  serialized_end=584,
+  serialized_start=546,
+  serialized_end=587,
 )
 
 _CONTROLCOMMAND_TYPE = descriptor.EnumDescriptor(
@@ -107,11 +107,19 @@ _CONTROLCOMMAND_TYPE = descriptor.EnumDescriptor(
       name='MODEM_CONFIGURATION', index=7, number=8,
       options=None,
       type=None),
+    descriptor.EnumValueDescriptor(
+      name='RTC_CONFIGURATION', index=8, number=9,
+      options=None,
+      type=None),
+    descriptor.EnumValueDescriptor(
+      name='SD_MOUNT_STATUS', index=9, number=10,
+      options=None,
+      type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=1080,
-  serialized_end=1252,
+  serialized_start=1151,
+  serialized_end=1367,
 )
 
 _DIAGNOSTICCONTROLCOMMAND_ACTION = descriptor.EnumDescriptor(
@@ -131,8 +139,8 @@ _DIAGNOSTICCONTROLCOMMAND_ACTION = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=1384,
-  serialized_end=1413,
+  serialized_start=1499,
+  serialized_end=1528,
 )
 
 _PAYLOADFORMATCOMMAND_PAYLOADFORMAT = descriptor.EnumDescriptor(
@@ -149,11 +157,15 @@ _PAYLOADFORMATCOMMAND_PAYLOADFORMAT = descriptor.EnumDescriptor(
       name='PROTOBUF', index=1, number=2,
       options=None,
       type=None),
+    descriptor.EnumValueDescriptor(
+      name='MESSAGEPACK', index=2, number=3,
+      options=None,
+      type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=1624,
-  serialized_end=1663,
+  serialized_start=1740,
+  serialized_end=1796,
 )
 
 _NETWORKOPERATORSETTINGS_NETWORKDESCRIPTOR_NETWORKTYPE = descriptor.EnumDescriptor(
@@ -173,8 +185,8 @@ _NETWORKOPERATORSETTINGS_NETWORKDESCRIPTOR_NETWORKTYPE = descriptor.EnumDescript
   ],
   containing_type=None,
   options=None,
-  serialized_start=2047,
-  serialized_end=2080,
+  serialized_start=2180,
+  serialized_end=2213,
 )
 
 _NETWORKOPERATORSETTINGS_OPERATORSELECTMODE = descriptor.EnumDescriptor(
@@ -206,8 +218,8 @@ _NETWORKOPERATORSETTINGS_OPERATORSELECTMODE = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=2082,
-  serialized_end=2181,
+  serialized_start=2215,
+  serialized_end=2314,
 )
 
 _DIAGNOSTICREQUEST_DECODEDTYPE = descriptor.EnumDescriptor(
@@ -227,8 +239,8 @@ _DIAGNOSTICREQUEST_DECODEDTYPE = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=2804,
-  serialized_end=2837,
+  serialized_start=2983,
+  serialized_end=3016,
 )
 
 _DYNAMICFIELD_TYPE = descriptor.EnumDescriptor(
@@ -252,8 +264,8 @@ _DYNAMICFIELD_TYPE = descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=3129,
-  serialized_end=3166,
+  serialized_start=3308,
+  serialized_end=3345,
 )
 
 
@@ -307,8 +319,8 @@ _VEHICLEMESSAGE = descriptor.Descriptor(
       is_extension=False, extension_scope=None,
       options=None),
     descriptor.FieldDescriptor(
-      name='uptime', full_name='openxc.VehicleMessage.uptime', index=6,
-      number=7, type=13, cpp_type=3, label=1,
+      name='timestamp', full_name='openxc.VehicleMessage.timestamp', index=6,
+      number=7, type=4, cpp_type=4, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -324,7 +336,7 @@ _VEHICLEMESSAGE = descriptor.Descriptor(
   is_extendable=False,
   extension_ranges=[],
   serialized_start=25,
-  serialized_end=433,
+  serialized_end=436,
 )
 
 
@@ -373,8 +385,8 @@ _CANMESSAGE = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=436,
-  serialized_end=584,
+  serialized_start=439,
+  serialized_end=587,
 )
 
 
@@ -434,6 +446,13 @@ _CONTROLCOMMAND = descriptor.Descriptor(
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
+    descriptor.FieldDescriptor(
+      name='rtc_configuration_command', full_name='openxc.ControlCommand.rtc_configuration_command', index=7,
+      number=8, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
   ],
   extensions=[
   ],
@@ -444,8 +463,8 @@ _CONTROLCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=587,
-  serialized_end=1252,
+  serialized_start=590,
+  serialized_end=1367,
 )
 
 
@@ -480,8 +499,8 @@ _DIAGNOSTICCONTROLCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1255,
-  serialized_end=1413,
+  serialized_start=1370,
+  serialized_end=1528,
 )
 
 
@@ -515,8 +534,8 @@ _PASSTHROUGHMODECONTROLCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1415,
-  serialized_end=1476,
+  serialized_start=1530,
+  serialized_end=1591,
 )
 
 
@@ -550,8 +569,8 @@ _ACCEPTANCEFILTERBYPASSCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1478,
-  serialized_end=1538,
+  serialized_start=1593,
+  serialized_end=1653,
 )
 
 
@@ -579,8 +598,8 @@ _PAYLOADFORMATCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1540,
-  serialized_end=1663,
+  serialized_start=1656,
+  serialized_end=1796,
 )
 
 
@@ -607,8 +626,8 @@ _PREDEFINEDOBD2REQUESTSCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1665,
-  serialized_end=1713,
+  serialized_start=1798,
+  serialized_end=1846,
 )
 
 
@@ -643,8 +662,8 @@ _NETWORKOPERATORSETTINGS_NETWORKDESCRIPTOR = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1928,
-  serialized_end=2080,
+  serialized_start=2061,
+  serialized_end=2213,
 )
 
 _NETWORKOPERATORSETTINGS = descriptor.Descriptor(
@@ -685,8 +704,8 @@ _NETWORKOPERATORSETTINGS = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1716,
-  serialized_end=2181,
+  serialized_start=1849,
+  serialized_end=2314,
 )
 
 
@@ -713,8 +732,8 @@ _NETWORKDATASETTINGS = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2183,
-  serialized_end=2217,
+  serialized_start=2316,
+  serialized_end=2350,
 )
 
 
@@ -748,8 +767,8 @@ _SERVERCONNECTSETTINGS = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2219,
-  serialized_end=2270,
+  serialized_start=2352,
+  serialized_end=2403,
 )
 
 
@@ -790,8 +809,36 @@ _MODEMCONFIGURATIONCOMMAND = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2273,
-  serialized_end=2486,
+  serialized_start=2406,
+  serialized_end=2619,
+)
+
+
+_RTCCONFIGURATIONCOMMAND = descriptor.Descriptor(
+  name='RTCConfigurationCommand',
+  full_name='openxc.RTCConfigurationCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='unix_time', full_name='openxc.RTCConfigurationCommand.unix_time', index=0,
+      number=1, type=13, cpp_type=3, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=2621,
+  serialized_end=2665,
 )
 
 
@@ -832,8 +879,8 @@ _COMMANDRESPONSE = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2488,
-  serialized_end=2581,
+  serialized_start=2667,
+  serialized_end=2760,
 )
 
 
@@ -917,8 +964,8 @@ _DIAGNOSTICREQUEST = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2584,
-  serialized_end=2837,
+  serialized_start=2763,
+  serialized_end=3016,
 )
 
 
@@ -994,8 +1041,8 @@ _DIAGNOSTICRESPONSE = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2840,
-  serialized_end=3001,
+  serialized_start=3019,
+  serialized_end=3180,
 )
 
 
@@ -1044,8 +1091,8 @@ _DYNAMICFIELD = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=3004,
-  serialized_end=3166,
+  serialized_start=3183,
+  serialized_end=3345,
 )
 
 
@@ -1086,8 +1133,8 @@ _SIMPLEMESSAGE = descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=3168,
-  serialized_end=3271,
+  serialized_start=3347,
+  serialized_end=3450,
 )
 
 _VEHICLEMESSAGE.fields_by_name['type'].enum_type = _VEHICLEMESSAGE_TYPE
@@ -1106,6 +1153,7 @@ _CONTROLCOMMAND.fields_by_name['acceptance_filter_bypass_command'].message_type
 _CONTROLCOMMAND.fields_by_name['payload_format_command'].message_type = _PAYLOADFORMATCOMMAND
 _CONTROLCOMMAND.fields_by_name['predefined_obd2_requests_command'].message_type = _PREDEFINEDOBD2REQUESTSCOMMAND
 _CONTROLCOMMAND.fields_by_name['modem_configuration_command'].message_type = _MODEMCONFIGURATIONCOMMAND
+_CONTROLCOMMAND.fields_by_name['rtc_configuration_command'].message_type = _RTCCONFIGURATIONCOMMAND
 _CONTROLCOMMAND_TYPE.containing_type = _CONTROLCOMMAND;
 _DIAGNOSTICCONTROLCOMMAND.fields_by_name['request'].message_type = _DIAGNOSTICREQUEST
 _DIAGNOSTICCONTROLCOMMAND.fields_by_name['action'].enum_type = _DIAGNOSTICCONTROLCOMMAND_ACTION
@@ -1140,6 +1188,7 @@ DESCRIPTOR.message_types_by_name['NetworkOperatorSettings'] = _NETWORKOPERATORSE
 DESCRIPTOR.message_types_by_name['NetworkDataSettings'] = _NETWORKDATASETTINGS
 DESCRIPTOR.message_types_by_name['ServerConnectSettings'] = _SERVERCONNECTSETTINGS
 DESCRIPTOR.message_types_by_name['ModemConfigurationCommand'] = _MODEMCONFIGURATIONCOMMAND
+DESCRIPTOR.message_types_by_name['RTCConfigurationCommand'] = _RTCCONFIGURATIONCOMMAND
 DESCRIPTOR.message_types_by_name['CommandResponse'] = _COMMANDRESPONSE
 DESCRIPTOR.message_types_by_name['DiagnosticRequest'] = _DIAGNOSTICREQUEST
 DESCRIPTOR.message_types_by_name['DiagnosticResponse'] = _DIAGNOSTICRESPONSE
@@ -1224,6 +1273,12 @@ class ModemConfigurationCommand(message.Message):
   
   # @@protoc_insertion_point(class_scope:openxc.ModemConfigurationCommand)
 
+class RTCConfigurationCommand(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _RTCCONFIGURATIONCOMMAND
+  
+  # @@protoc_insertion_point(class_scope:openxc.RTCConfigurationCommand)
+
 class CommandResponse(message.Message):
   __metaclass__ = reflection.GeneratedProtocolMessageType
   DESCRIPTOR = _COMMANDRESPONSE
index bb54c77..80ffc50 100644 (file)
@@ -13,7 +13,7 @@ message VehicleMessage {
     optional DiagnosticResponse diagnostic_response = 4;
     optional ControlCommand control_command = 5;
     optional CommandResponse command_response = 6;
-       optional uint32 uptime = 7;
+    optional uint64 timestamp = 7;
 }
 
 message CanMessage {
@@ -36,7 +36,9 @@ message ControlCommand {
         ACCEPTANCE_FILTER_BYPASS = 5;
         PAYLOAD_FORMAT = 6;
         PREDEFINED_OBD2_REQUESTS = 7;
-               MODEM_CONFIGURATION = 8;
+        MODEM_CONFIGURATION = 8;
+        RTC_CONFIGURATION = 9;
+        SD_MOUNT_STATUS = 10;
     }
 
     optional Type type = 1;
@@ -45,7 +47,8 @@ message ControlCommand {
     optional AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;
     optional PayloadFormatCommand payload_format_command = 5;
     optional PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;
-       optional ModemConfigurationCommand modem_configuration_command = 7;
+    optional ModemConfigurationCommand modem_configuration_command = 7;
+    optional RTCConfigurationCommand rtc_configuration_command = 8;
 }
 
 message DiagnosticControlCommand {
@@ -69,6 +72,7 @@ message PayloadFormatCommand {
     enum PayloadFormat {
         JSON = 1;
         PROTOBUF = 2;
+       MESSAGEPACK = 3;
     }
 
     optional PayloadFormat format = 1;
@@ -114,6 +118,10 @@ message ModemConfigurationCommand {
        optional ServerConnectSettings serverConnectSettings = 3;
 }
 
+message RTCConfigurationCommand {
+       optional uint32 unix_time = 1;
+}
+
 message CommandResponse {
     optional ControlCommand.Type type = 1;
     optional string message = 2;