Merge branch 'next'
authorChristopher Peplin <chris.peplin@rhubarbtech.com>
Sat, 15 Nov 2014 17:01:01 +0000 (12:01 -0500)
committerChristopher Peplin <chris.peplin@rhubarbtech.com>
Sat, 15 Nov 2014 17:01:01 +0000 (12:01 -0500)
CHANGELOG.md
JSON.mkd [new file with mode: 0644]
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
libs/nanopb
openxc.options
openxc.proto

index 66d73c1..550b5b5 100644 (file)
@@ -1,10 +1,27 @@
 # OpenXC Message Format Changelog
 
-## v0.3.1-dev
+## v0.4-dev
 
-* Removed factor and offset from diagnostic requests to minimize the number of
+* BREAKING: Removed factor and offset from diagnostic requests to minimize the number of
   fields, and since this is such an uncommon use case and one that can be
   handled by the client receiving the data. We may add them back in the future.
+* BREAKING: Require an 'action' to diagnostic request commands, e.g. cancel or add.
+* BREAKING: Rename "raw" messages to the more precise "CAN messages".
+* BREAKING: Rename "translated" messages to "simple messages".
+* BREAKING: Remove redundant `type` field from simple messages (formerly
+  translated messages). The type can be inferred implicitly through the types of
+  the value and event fields.
+* Feature: Add a command for controlling CAN message passthrough.
+* Feature: Add a command for controlling CAN controller acceptance filter bypass.
+* Feature: Add a command to change the payload format.
+* Feature: Add a command to control whether pre-defined, recurring OBD-II
+  requests are enabled.
+* Improvement: Add `extras` field to JSON messages.
+* Improvement: Add an optional 'status' field to all command responses.
+* Improvement: Build protobuf generated files with nanopb v0.3.1.
+* Improvement: Allow explicitly setting CAN message frame format (i.e. standard
+  or extended frame).
+* Fix: Expand range of mode field to a full byte (#10)
 
 ## v0.3
 
diff --git a/JSON.mkd b/JSON.mkd
new file mode 100644 (file)
index 0000000..069f74b
--- /dev/null
+++ b/JSON.mkd
@@ -0,0 +1,375 @@
+# OpenXC JSON Message Format
+
+Each JSON message published by a VI is delimited with a `\0 ` character.
+
+## 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
+        }
+    }
+
+## 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
+the abstract side of the interface.
+
+The expected format of a single valued message is:
+
+    {"name": "steering_wheel_angle", "value": 45}
+
+## Evented Simple Vehicle Message
+
+The expected format of an event message is:
+
+    {"name": "button_event", "value": "up", "event": "pressed"}
+
+This format is good for something like a button event, where there are two
+discrete pieces of information in the measurement.
+
+## CAN Message
+
+The format for a plain CAN message:
+
+    {"bus": 1, "id": 1234, "data": "0x12345678"}
+
+**bus** - the numerical identifier of the CAN bus where this message originated,
+  most likely 1 or 2 (for a vehicle interface with 2 CAN controllers).
+
+**id** - the CAN message ID
+
+**data** - up to 8 bytes of data from the CAN message's payload, represented as
+  a hexidecimal number in a string. Many JSON parser cannot handle 64-bit
+  integers, which is why we are not using a numerical data type. Each byte in
+  the string *must* be represented with 2 characters, e.g. `0x1` is `0x01` - the
+  complete string must have an even number of characters. The `0x` prefix is
+  optional.
+
+**format** - (optional) explicitly set the frame format for the CAN message, one
+  of `standard` or `extended`. If the `id` is greater than `0x7ff`, the extended
+  frame format will be selected automatically.
+
+## Diagnostic Messages
+
+### Requests
+
+A diagnostic request is added or cancelled with a JSON object like this example:
+
+    { "command": "diagnostic_request",
+      "action": "add",
+      "diagnostic_request": {
+          "bus": 1,
+          "message_id": 1234,
+          "mode": 1,
+          "pid": 5,
+          "payload": "0x1234",
+          "multiple_responses": false,
+          "frequency": 1,
+          "name": "my_pid"
+        }
+      }
+    }
+
+* The `command` must be `diagnostic_request.`
+* The `action` must be included, and must be one of:
+    * `add` - create a new one-off or recurring diagnostic request.
+    * `cancel` - cancel an existing request.
+* The details of the request must be included in the `request` field, using
+  the sub-fields defined below.
+
+A diagnostic request's `bus`, `id`, `mode` and `pid` (or lack of a `pid`)
+combine to create a unique key to identify a request. These four fields will be
+referred to as the key of the diagnostic request. For example, to create a
+simple one-time diagnostic request:
+
+    { "command": "diagnostic_request",
+      "action": "add",
+      "diagnostic_request": {
+          "bus": 1,
+          "message_id": 1234,
+          "mode": 1,
+          "pid": 5
+        }
+      }
+    }
+
+Requests are completed after any responses are received (unless
+`multiple_responses` is set), or the request has timed out after a certain
+number of seconds. After a request is completed, you can re-`create` the same
+key to make another request.
+
+Requests with a `frequency` are added as *recurring* requests, e.g. to add the
+previous example as a recurring request at 1Hz:
+
+    { "command": "diagnostic_request",
+      "action": "add",
+      "diagnostic_request": {
+          "bus": 1,
+          "message_id": 1234,
+          "mode": 1,
+          "pid": 5,
+          "frequency": 1
+        }
+      }
+    }
+
+To cancel a recurring request, send a `cancel` action with the same key, e.g.:
+
+    { "command": "diagnostic_request",
+      "action": "cancel",
+      "diagnostic_request": {
+          "bus": 1,
+          "message_id": 1234,
+          "mode": 1,
+          "pid": 5
+        }
+      }
+    }
+
+Simultaneous recurring requests for the same key at different rates (e.g. 1Hz
+*and* 2Hz) is not supported. However, non-recurring ("one-off") requests may
+exist in parallel with a recurring request for the same key.
+
+**bus** - the numerical identifier of the CAN bus where this request should be
+    sent, most likely 1 or 2 (for a vehicle interface with 2 CAN controllers).
+
+**message_id** - the CAN message ID for the request.
+
+**mode** - the OBD-II mode of the request - 0x1 through 0xff (1 through 9 are the
+    standardized modes and 0x22 is a common proprietary mode).
+
+**pid** - (optional) the PID for the request, if applicable.
+
+**payload** - (optional) up to 7 bytes of data for the request's payload
+    represented as a hexadecimal number in a string. Many JSON parser cannot
+    handle 64-bit integers, which is why we are not using a numerical data type.
+    Each byte in the string *must* be represented with 2 characters, e.g. `0x1`
+    is `0x01` - the complete string must have an even number of characters. The
+    `0x` prefix is optional.
+
+**name** - (optional, defaults to nothing) A human readable, string name for
+  this request. If provided, the response will have a `name` field (much like a
+  simple vehicle message) with this value in place of `bus`, `id`, `mode` and
+  `pid`.
+
+**multiple_responses** - (optional, false by default) if true, request will stay
+  active for a full 100ms, even after receiving a diagnostic response message.
+  This is useful for requests to the functional broadcast message ID
+  (`0x7df`) when you need to get responses from multiple modules. It's possible
+  to set this to `true` for non-broadcast requests, but in practice you won't
+  see any additional responses after the first and it will just take up memory
+  in the VI for longer.
+
+**frequency** - (optional) Make this request a recurring request, at a this
+  frequency in Hz. To send a single non-recurring request, leave this field out.
+
+**decoded_type** - (optional, defaults to "obd2" if the request is a recognized
+OBD-II mode 1 request, otherwise "none") If specified, the valid values are
+`"none"` and `"obd2"`. If `obd2`, the payload will be decoded according to the
+OBD-II specification and returned in the `value` field. Set this to `none` to
+manually override the OBD-II decoding feature for a known PID.
+
+### Responses
+
+Requests to add or cancel a diagnostic request are first acknowledged by the VI,
+before any responses to the request are returned. The response uses the standard
+command response format:
+
+    { "command_response": "diagnostic_request", "status": true}
+
+**status** - true if the request was successfully created or cancelled.
+
+When a node on the network response to the request and the result is published
+by the VI, the result looks like:
+
+    {"bus": 1,
+      "message_id": 1234,
+      "mode": 1,
+      "pid": 5,
+      "success": true,
+      "payload": "0x1234",
+      "value": 4660}
+
+and to an unsuccessful request, with the `negative_response_code` and no `pid`
+echo:
+
+    {"bus": 1,
+      "message_id": 1234,
+      "mode": 1,
+      "success": false,
+      "negative_response_code": 17}
+
+**bus** - the numerical identifier of the CAN bus where this response was
+    received.
+
+**message_id** - the CAN message ID for this response.
+
+**mode** - the OBD-II mode of the original diagnostic request.
+
+**pid** - (optional) the PID for the request, if applicable.
+
+**success** -  true if the response received was a positive response. If this
+  field is false, the remote node returned an error and the
+  `negative_response_code` field should be populated.
+
+**negative_response_code** - (optional)  If requested node returned an error,
+    `success` will be `false` and this field will contain the negative response
+    code (NRC).
+
+Finally, the `payload` and `value` fields are mutually exclusive:
+
+**payload** - (optional) up to 7 bytes of data returned in the response,
+    represented as a hexadecimal number in a string. Many JSON parser cannot
+    handle 64-bit integers, which is why we are not using a numerical data type.
+
+**value** - (optional) if the response had a payload, this may be the
+    payload interpreted as an integer.
+
+The response to a simple PID request would look like this:
+
+    {"success": true, "bus": 1, "message_id": 1234, "mode": 1, "pid": 5, "payload": "0x2"}
+
+## Commands
+
+In addition to the `diagnostic_request` command described earlier, there are
+other possible values for the `command` field.
+
+All commands immediately return a `command_response`, e.g.:
+
+    { "command_response": "version", "message": "v6.0-dev (default)", "status": true}
+
+**command_response** - an echo of the command this is a ACKing.
+
+**status** - true if the command was understood and performed succesfully.
+
+**message** - (optional) a string message from the VI, e.g. to return a version
+    descriptor or error message.
+
+### Version Query
+
+The `version` command triggers the VI to inject a firmware version identifier
+response into the outgoing data stream.
+
+**Request**
+
+    { "command": "version"}
+
+**Response**
+
+    { "command_response": "version", "message": "v6.0-dev (default)", "status": true}
+
+### Device ID Query
+
+The `device_id` command triggers the VI to inject a unique device ID (e.g. the
+MAC address of an included Bluetooth module) into into the outgoing data stream.
+
+If no device ID is available, the response message will be "Unknown".
+
+**Request**
+
+    { "command": "device_id"}
+
+**Response**
+
+    { "command_response": "device_id", "message": "0012345678", "status": true}
+
+### Passthrough CAN Mode
+
+The `passthrough` command controls whether low-level CAN messages are passed
+through from the CAN bus through the VI to the output stream. If the CAN
+acceptance filter is in bypass mode and passthrough is enabled, the output
+stream will include all received CAN messages. If the bypass filter is enabled,
+only those CAN messages that have been pre-defined in the firmware are
+forwarded.
+
+**Request**
+
+    { "command": "passthrough",
+      "bus": 1,
+      "enabled": true
+    }
+
+**Response**
+
+If the bus in the request was valid and the passthrough mode was changed, the
+`status` field in the response will be `true`. If `false`, the passthrough mode
+was not changed.
+
+    { "command_response": "passthrough", "status": true}
+
+### Acceptance Filter Bypass
+
+The `af_bypass` command controls whether the CAN message acceptance filter is
+bypassed for each CAN controller. By default, hardware acceptance filter (AF) is
+enabled in the VI - only previously defined CAN message IDs will be received.
+Send this command with `bypass: true` to force the filters to bypassed.
+
+If `passthrough` mode is also enabled, when the AF is bypassed, the output will
+include all CAN messages received.
+
+**Request**
+
+    { "command": "af_bypass",
+      "bus": 1,
+      "bypass": true
+    }
+
+**Response**
+
+If the bus in the request was valid and the AF mode was changed, the `status`
+field in the response will be `true`. If `false`, the passthrough mode was not
+changed.
+
+    { "command_response": "af_bypass", "status": true}
+
+### Payload Format Control
+
+The `payload_format` command determines the format for output data from the VI
+and the expected format of commands sent to the VI.
+
+Valid formats are `json` and `protobuf`.
+
+**Request**
+
+    { "command": "payload_format",
+      "format": "json"
+    }
+
+**Response**
+
+If the format was changed successfully, the `status` in the response will be
+`true`. The response will be in the original message format, and all subsequent
+messages will be in the new format.
+
+    { "command_response": "payload_format", "status": true}
+
+### Automatic Pre-Defined OBD-II PID Requests
+
+The `predefined_obd2` command enables and disables the querying for and
+translating of a set of pre-defined OBD-II PIDs from the attached vehicle. When
+enabled, the VI will query the vehicle to see if these PIDs are claimed to be
+supported and for those that are, it will set up recurring requests. The
+responses will be output as simple vehicle messages, with the names defined in
+the "Signals Defined from Diagnostic Messages" section below.
+
+**Request**
+
+    { "command": "predefined_obd2",
+      "enabled": true
+    }
+
+**Response**
+
+f the predefined requests were enabled or disabled successfully, the `status` in
+the response will be `true`.
+
+    { "command_response": "predefined_obd2", "status": true}
+
index b0647da..29baa3a 100644 (file)
--- a/README.md
+++ b/README.md
 # OpenXC Message Format Specification
 
-Version: v0.3
+Version: v0.4-dev
 
 This specification is a part of the [OpenXC platform][OpenXC].
 
 An OpenXC vehicle interface sends generic vehicle data over one or more output
 interfaces (e.g. USB or Bluetooth) as JSON or Protocol Buffers (protobuf).
 
-This document describes the JSON format and includes a high level description of
-each type and field. Each JSON message published by a VI is delimited with a
-`\0` character.
+## JSON
 
-The Protocol Buffer format is specified in the file `openxc.proto`. Those are
-published using the standard length-delimited method (any protobuf library
-should support this).
+The JSON format is the most flexible and easiest to use. The format is fully
+specified in the [JSON.mkd](JSON.mkd) file in this repository.
+a more flexible option than binary, but is less compact and
+therefore takes more bandwidth and processing power.
 
-## Single Valued
+The JSON format is best for most developers, as it is fairly efficient and very
+flexible.
 
-There may not be a 1:1 relationship between input and output signals - i.e. raw
-engine timing CAN signals may be summarized in an "engine performance" metric on
-the abstract side of the interface.
+## Binary (Protocol Buffers)
 
-The expected format of a single valued message is:
+The binary format is encoded using [Google Protocol
+Buffers](https://code.google.com/p/protobuf/). The format is specified in the
+file [openxc.proto](openxc.proto). The descriptions of the messages can be foud
+in the JSON specs - the binary format mirrors this.
 
-    {"name": "steering_wheel_angle", "value": 45}
+The binary messages are published by the VI using the standard length-delimited
+method (any protobuf library should support this).
 
-## Evented
-
-The expected format of an event message is:
-
-    {"name": "button_event", "value": "up", "event": "pressed"}
-
-This format is good for something like a button event, where there are two
-discrete pieces of information in the measurement.
-
-## Raw CAN Message format
-
-The format for a raw CAN message:
-
-    {"bus": 1, "id": 1234, "data": "0x12345678"}
-
-**bus** - the numerical identifier of the CAN bus where this message originated,
-  most likely 1 or 2 (for a vehicle interface with 2 CAN controllers).
-
-**id** - the CAN message ID
-
-**data** - up to 8 bytes of data from the CAN message's payload, represented as
-  a hexidecimal number in a string. Many JSON parser cannot handle 64-bit
-  integers, which is why we are not using a numerical data type. Each byte in
-  the string *must* be represented with 2 characters, e.g. `0x1` is `0x01` - the
-  complete string must have an even number of characters.
-
-## Diagnostic Messages
-
-### Requests
-
-A request to add or update a diagnostic request is sent to a vehicle interface
-with this command format:
-
-    { "command": "diagnostic_request",
-      "request": {
-          "bus": 1,
-          "id": 1234,
-          "mode": 1,
-          "pid": 5,
-          "payload": "0x1234",
-          "multiple_responses": false,
-          "frequency": 1,
-          "name": "my_pid"
-        }
-      }
-    }
-
-**bus** - the numerical identifier of the CAN bus where this request should be
-    sent, most likely 1 or 2 (for a vehicle interface with 2 CAN controllers).
-
-**id** - the CAN arbitration ID for the request.
-
-**mode** - the OBD-II mode of the request - 1 through 15 (1 through 9 are the
-    standardized modes).
-
-**pid** - (optional) the PID for the request, if applicable.
-
-**payload** - (optional) up to 7 bytes of data for the request's payload
-    represented as a hexidecimal number in a string. Many JSON parser cannot
-    handle 64-bit integers, which is why we are not using a numerical data type.
-    Each byte in the string *must* be represented with 2 characters, e.g. `0x1`
-    is `0x01` - the complete string must have an even number of characters.
-
-**name** - (optional, defaults to nothing) A human readable, string name for
-  this request. If provided, the response will have a `name` field (much like a
-  normal translated message) with this value in place of `bus`, `id`, `mode` and
-  `pid`.
-
-**multiple_responses** - (optional, false by default) if true, request will stay
-  active for a full 100ms, even after receiving a diagnostic response message.
-  This is useful for requests to the functional broadcast arbitration ID
-  (`0x7df`) when you need to get responses from multiple modules. It's possible
-  to set this to `true` for non-broadcast requests, but in practice you won't
-  see any additional responses after the first and it will just take up memory
-  in the VI for longer.
-
-**frequency** - (optional, defaults to 0) The frequency in Hz to send this
-    request. To send a single non-recurring request, set this to 0 or leave it
-    out.
-
-**decoded_type** - (optional, defaults to "obd2" if the request is a recognized
-OBD-II mode 1 request, otherwise "none") If specified, the valid values are
-`"none"` and `"obd2"`. If `obd2`, the payload will be decoded according to the
-OBD-II specification and returned in the `value` field. Set this to `none` to
-manually override the OBD-II decoding feature for a known PID.
-
-A diagnostic request's `bus`, `id`, `mode` and `pid` (or lack of a `pid`)
-combine to create a unique key to identify a recurring request. This means that
-you cannot simultaneosly have recurring requests at 2Hz and 5Hz for the same PID
-from the same ID.
-
-If you send a new `diagnostic_request` command with a `bus + id + mode + pid`
-key matching an existing recurring request, it will update it with whatever
-other parameters you've provided (e.g. it will change the frequency if you
-specify one).
-
-To cancel a recurring request, send a `diagnostic_request` command with the
-matching request information (i.e. the `bus`, `id`, `mode` and `pid`) but a
-frequency of 0.
-
-Non-recurring requests may have the same `bus+id+mode(+pid)` key as a recurring
-request, and they will co-exist without issue. As soon as a non-recurring
-request is either completed or times out, it is removed from the active list.
-
-If you're just requesting a PID, you can use this minimal field set for the
-`request` object:
-
-    {"bus": 1, "id": 1234, "mode": 1, "pid": 5}
-
-### Responses
-
-The response to a successful request:
-
-    {"bus": 1,
-      "id": 1234,
-      "mode": 1,
-      "pid": 5,
-      "success": true,
-      "payload": "0x1234",
-      "value": 4660}
-
-and to an unsuccessful request, with the `negative_response_code` and no `pid`
-echo:
-
-    {"bus": 1,
-      "id": 1234,
-      "mode": 1,
-      "success": false,
-      "negative_response_code": 17}
-
-**bus** - the numerical identifier of the CAN bus where this response was
-    received.
-
-**id** - the CAN arbitration ID for this response.
-
-**mode** - the OBD-II mode of the original diagnostic request.
-
-**pid** - (optional) the PID for the request, if applicable.
-
-**success** -  true if the response received was a positive response. If this
-  field is false, the remote node returned an error and the
-  `negative_response_code` field should be populated.
-
-**negative_response_code** - (optional)  If requested node returned an error,
-    `success` will be `false` and this field will contain the negative response
-    code (NRC).
-
-Finally, the `payload` and `value` fields are mutually exclusive:
-
-**payload** - (optional) up to 7 bytes of data returned in the response,
-    represented as a hexadecimal number in a string. Many JSON parser cannot
-    handle 64-bit integers, which is why we are not using a numerical data type.
-
-**value** - (optional) if the response had a payload, this may be the
-    payload interpreted as an integer.
-
-The response to a simple PID request would look like this:
-
-    {"success": true, "bus": 1, "id": 1234, "mode": 1, "pid": 5, "payload": "0x2"}
-
-## Commands
-
-### Version Query
-
-The `version` command triggers the VI to inject a firmware version identifier
-response into the outgoing data stream.
-
-**Request**
-
-    { "command": "version"}
-
-**Response**
-
-    { "command_response": "version", "message": "v6.0-dev (default)"}
-
-### Device ID Query
-
-The `device_id` command triggers the VI to inject a unique device ID (e.g. the
-MAC address of an included Bluetooth module) into into the outgoing data stream.
-
-**Request**
-
-    { "command": "device_id"}
-
-**Response**
-
-    { "command_response": "device_id", "message": "0012345678"}
+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.
 
 ## Trace File Format
 
@@ -314,7 +131,7 @@ manufacturers may support custom message names.
     * numerical, -179.0 to 179.0 degrees with standard GPS accuracy
     * 1Hz
 
-### Signals from Diagnostics Messages
+## Signals from Diagnostic Messages
 
 This set of signals is often retreived from OBD-II requests. The units can be
 found in the [OBD-II standard](http://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_01).
index da31233..3fc2f80 100644 (file)
@@ -1,38 +1,71 @@
 
-Ã\f
-\fopenxc.proto\12\ 6openxc"\94\ 3
+ï\12
+\fopenxc.proto\12\ 6openxc"\88\ 3
 \ eVehicleMessage\12)
 \ 4type\18\ 1 \ 1(\ e2\e.openxc.VehicleMessage.Type\12'
-\vraw_message\18\ 2 \ 1(\v2\12.openxc.RawMessage\125
-\12translated_message\18\ 3 \ 1(\v2\19.openxc.TranslatedMessage\127
+\vcan_message\18\ 2 \ 1(\v2\12.openxc.CanMessage\12-
+\ esimple_message\18\ 3 \ 1(\v2\15.openxc.SimpleMessage\127
 \13diagnostic_response\18\ 4 \ 1(\v2\1a.openxc.DiagnosticResponse\12/
 \ fcontrol_command\18\ 5 \ 1(\v2\16.openxc.ControlCommand\121
-\10command_response\18\ 6 \ 1(\v2\17.openxc.CommandResponse"Z
+\10command_response\18\ 6 \ 1(\v2\17.openxc.CommandResponse"V
 \ 4Type\12\a
-\ 3RAW\10\ 1\12\ e
+\ 3CAN\10\ 1\12
 
-TRANSLATED\10\ 2\12\ e
+\ 6SIMPLE\10\ 2\12\ e
 
 DIAGNOSTIC\10\ 3\12\13
 \ fCONTROL_COMMAND\10\ 4\12\14
-\10COMMAND_RESPONSE\10\ 5";
+\10COMMAND_RESPONSE\10\ 5"\94\ 1
 
-RawMessage\12\v
-\ 3bus\18\ 1 \ 1(\ 5\12\12
+CanMessage\12\v
+\ 3bus\18\ 1 \ 1(\ 5\12
 
-message_id\18\ 2 \ 1(\r\12\f
-\ 4data\18\ 3 \ 1(\f"¦\ 1
+\ 2id\18\ 2 \ 1(\r\12\f
+\ 4data\18\ 3 \ 1(\f\124
+\fframe_format\18\ 4 \ 1(\ e2\1e.openxc.CanMessage.FrameFormat")
+\vFrameFormat\12\f
+\bSTANDARD\10\ 1\12\f
+\bEXTENDED\10\ 2"¸\ 4
 \ eControlCommand\12)
-\ 4type\18\ 1 \ 1(\ e2\e.openxc.ControlCommand.Type\125
-\12diagnostic_request\18\ 2 \ 1(\v2\19.openxc.DiagnosticRequest"2
+\ 4type\18\ 1 \ 1(\ e2\e.openxc.ControlCommand.Type\12<
+\12diagnostic_request\18\ 2 \ 1(\v2 .openxc.DiagnosticControlCommand\12G
+\18passthrough_mode_request\18\ 3 \ 1(\v2%.openxc.PassthroughModeControlCommand\12O
+ acceptance_filter_bypass_command\18\ 4 \ 1(\v2%.openxc.AcceptanceFilterBypassCommand\12<
+\16payload_format_command\18\ 5 \ 1(\v2\1c.openxc.PayloadFormatCommand\12O
+ predefined_obd2_requests_command\18\ 6 \ 1(\v2%.openxc.PredefinedObd2RequestsCommand"\93\ 1
 \ 4Type\12\v
 \aVERSION\10\ 1\12\r
        DEVICE_ID\10\ 2\12\ e
 
-DIAGNOSTIC\10\ 3"M
+DIAGNOSTIC\10\ 3\12\ f
+\vPASSTHROUGH\10\ 4\12\1c
+\18ACCEPTANCE_FILTER_BYPASS\10\ 5\12\12
+\ ePAYLOAD_FORMAT\10\ 6\12\1c
+\18PREDEFINED_OBD2_REQUESTS\10\a"\9e\ 1
+\18DiagnosticControlCommand\12*
+\arequest\18\ 1 \ 1(\v2\19.openxc.DiagnosticRequest\127
+\ 6action\18\ 2 \ 1(\ e2'.openxc.DiagnosticControlCommand.Action"\1d
+\ 6Action\12\a
+\ 3ADD\10\ 1\12
+
+\ 6CANCEL\10\ 2"=
+\1dPassthroughModeControlCommand\12\v
+\ 3bus\18\ 1 \ 1(\ 5\12\ f
+\aenabled\18\ 2 \ 1(\b"<
+\1dAcceptanceFilterBypassCommand\12\v
+\ 3bus\18\ 1 \ 1(\ 5\12\ e
+\ 6bypass\18\ 2 \ 1(\b"{
+\14PayloadFormatCommand\12:
+\ 6format\18\ 1 \ 1(\ e2*.openxc.PayloadFormatCommand.PayloadFormat"'
+\rPayloadFormat\12\b
+\ 4JSON\10\ 1\12\f
+\bPROTOBUF\10\ 2"0
+\1dPredefinedObd2RequestsCommand\12\ f
+\aenabled\18\ 1 \ 1(\b"]
 \ fCommandResponse\12)
 \ 4type\18\ 1 \ 1(\ e2\e.openxc.ControlCommand.Type\12\ f
-\amessage\18\ 2 \ 1(  "ý\ 1
+\amessage\18\ 2 \ 1(  \12\ e
+\ 6status\18\ 3 \ 1(\b"ý\ 1
 \11DiagnosticRequest\12\v
 \ 3bus\18\ 1 \ 1(\ 5\12\12
 
@@ -66,19 +99,10 @@ message_id\18\ 2 \ 1(\r\12
 
 \ 6STRING\10\ 1\12\a
 \ 3NUM\10\ 2\12\b
-\ 4BOOL\10\ 3"÷\ 1
-\11TranslatedMessage\12,
-\ 4type\18\ 1 \ 1(\ e2\1e.openxc.TranslatedMessage.Type\12\f
-\ 4name\18\ 2 \ 1(     \12#
-\ 5value\18\ 3 \ 1(\v2\14.openxc.DynamicField\12#
-\ 5event\18\ 4 \ 1(\v2\14.openxc.DynamicField"\
-\ 4Type\12
-
-\ 6STRING\10\ 1\12\a
-\ 3NUM\10\ 2\12\b
-\ 4BOOL\10\ 3\12\12
-\ eEVENTED_STRING\10\ 4\12\ f
-\vEVENTED_NUM\10\ 5\12\10
-\fEVENTED_BOOL\10\ 6B\1c
+\ 4BOOL\10\ 3"g
+\rSimpleMessage\12\f
+\ 4name\18\ 1 \ 1(     \12#
+\ 5value\18\ 2 \ 1(\v2\14.openxc.DynamicField\12#
+\ 5event\18\ 3 \ 1(\v2\14.openxc.DynamicFieldB\1c
 
 com.openxcB\ eBinaryMessages
\ No newline at end of file
index e3be257..6fc7070 100644 (file)
 /* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.2.5 at Wed Mar 26 09:29:06 2014. */
+/* Generated by nanopb-0.3.1 at Fri Nov  7 08:56:52 2014. */
 
 #include "openxc.pb.h"
 
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
 
 
 const pb_field_t openxc_VehicleMessage_fields[7] = {
-    PB_FIELD2(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_VehicleMessage, type, type, 0),
-    PB_FIELD2(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, raw_message, type, &openxc_RawMessage_fields),
-    PB_FIELD2(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, translated_message, raw_message, &openxc_TranslatedMessage_fields),
-    PB_FIELD2(  4, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, diagnostic_response, translated_message, &openxc_DiagnosticResponse_fields),
-    PB_FIELD2(  5, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, control_command, diagnostic_response, &openxc_ControlCommand_fields),
-    PB_FIELD2(  6, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, command_response, control_command, &openxc_CommandResponse_fields),
+    PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_VehicleMessage, type, type, 0),
+    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, can_message, type, &openxc_CanMessage_fields),
+    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_VehicleMessage, simple_message, can_message, &openxc_SimpleMessage_fields),
+    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_LAST_FIELD
+};
+
+const pb_field_t openxc_CanMessage_fields[5] = {
+    PB_FIELD(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_CanMessage, bus, bus, 0),
+    PB_FIELD(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_CanMessage, id, bus, 0),
+    PB_FIELD(  3, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_CanMessage, data, id, 0),
+    PB_FIELD(  4, ENUM    , OPTIONAL, STATIC  , OTHER, openxc_CanMessage, frame_format, data, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t openxc_ControlCommand_fields[7] = {
+    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),
+    PB_FIELD(  4, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, acceptance_filter_bypass_command, passthrough_mode_request, &openxc_AcceptanceFilterBypassCommand_fields),
+    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_LAST_FIELD
+};
+
+const pb_field_t openxc_DiagnosticControlCommand_fields[3] = {
+    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, openxc_DiagnosticControlCommand, request, request, &openxc_DiagnosticRequest_fields),
+    PB_FIELD(  2, ENUM    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticControlCommand, action, request, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t openxc_PassthroughModeControlCommand_fields[3] = {
+    PB_FIELD(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_PassthroughModeControlCommand, bus, bus, 0),
+    PB_FIELD(  2, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_PassthroughModeControlCommand, enabled, bus, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t openxc_AcceptanceFilterBypassCommand_fields[3] = {
+    PB_FIELD(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_AcceptanceFilterBypassCommand, bus, bus, 0),
+    PB_FIELD(  2, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_AcceptanceFilterBypassCommand, bypass, bus, 0),
     PB_LAST_FIELD
 };
 
-const pb_field_t openxc_RawMessage_fields[4] = {
-    PB_FIELD2(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_RawMessage, bus, bus, 0),
-    PB_FIELD2(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_RawMessage, message_id, bus, 0),
-    PB_FIELD2(  3, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_RawMessage, data, message_id, 0),
+const pb_field_t openxc_PayloadFormatCommand_fields[2] = {
+    PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_PayloadFormatCommand, format, format, 0),
     PB_LAST_FIELD
 };
 
-const pb_field_t openxc_ControlCommand_fields[3] = {
-    PB_FIELD2(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_ControlCommand, type, type, 0),
-    PB_FIELD2(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_ControlCommand, diagnostic_request, type, &openxc_DiagnosticRequest_fields),
+const pb_field_t openxc_PredefinedObd2RequestsCommand_fields[2] = {
+    PB_FIELD(  1, BOOL    , OPTIONAL, STATIC  , FIRST, openxc_PredefinedObd2RequestsCommand, enabled, enabled, 0),
     PB_LAST_FIELD
 };
 
-const pb_field_t openxc_CommandResponse_fields[3] = {
-    PB_FIELD2(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_CommandResponse, type, type, 0),
-    PB_FIELD2(  2, STRING  , OPTIONAL, STATIC  , OTHER, openxc_CommandResponse, message, type, 0),
+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),
+    PB_FIELD(  3, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_CommandResponse, status, message, 0),
     PB_LAST_FIELD
 };
 
 const pb_field_t openxc_DiagnosticRequest_fields[10] = {
-    PB_FIELD2(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_DiagnosticRequest, bus, bus, 0),
-    PB_FIELD2(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, message_id, bus, 0),
-    PB_FIELD2(  3, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, mode, message_id, 0),
-    PB_FIELD2(  4, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, pid, mode, 0),
-    PB_FIELD2(  5, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, payload, pid, 0),
-    PB_FIELD2(  6, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, multiple_responses, payload, 0),
-    PB_FIELD2(  7, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, frequency, multiple_responses, 0),
-    PB_FIELD2(  8, STRING  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, name, frequency, 0),
-    PB_FIELD2(  9, ENUM    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, decoded_type, name, 0),
+    PB_FIELD(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_DiagnosticRequest, bus, bus, 0),
+    PB_FIELD(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, message_id, bus, 0),
+    PB_FIELD(  3, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, mode, message_id, 0),
+    PB_FIELD(  4, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, pid, mode, 0),
+    PB_FIELD(  5, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, payload, pid, 0),
+    PB_FIELD(  6, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, multiple_responses, payload, 0),
+    PB_FIELD(  7, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, frequency, multiple_responses, 0),
+    PB_FIELD(  8, STRING  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, name, frequency, 0),
+    PB_FIELD(  9, ENUM    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticRequest, decoded_type, name, 0),
     PB_LAST_FIELD
 };
 
 const pb_field_t openxc_DiagnosticResponse_fields[9] = {
-    PB_FIELD2(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_DiagnosticResponse, bus, bus, 0),
-    PB_FIELD2(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, message_id, bus, 0),
-    PB_FIELD2(  3, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, mode, message_id, 0),
-    PB_FIELD2(  4, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, pid, mode, 0),
-    PB_FIELD2(  5, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, success, pid, 0),
-    PB_FIELD2(  6, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, negative_response_code, success, 0),
-    PB_FIELD2(  7, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, payload, negative_response_code, 0),
-    PB_FIELD2(  8, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, value, payload, 0),
+    PB_FIELD(  1, INT32   , OPTIONAL, STATIC  , FIRST, openxc_DiagnosticResponse, bus, bus, 0),
+    PB_FIELD(  2, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, message_id, bus, 0),
+    PB_FIELD(  3, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, mode, message_id, 0),
+    PB_FIELD(  4, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, pid, mode, 0),
+    PB_FIELD(  5, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, success, pid, 0),
+    PB_FIELD(  6, UINT32  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, negative_response_code, success, 0),
+    PB_FIELD(  7, BYTES   , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, payload, negative_response_code, 0),
+    PB_FIELD(  8, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DiagnosticResponse, value, payload, 0),
     PB_LAST_FIELD
 };
 
 const pb_field_t openxc_DynamicField_fields[5] = {
-    PB_FIELD2(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_DynamicField, type, type, 0),
-    PB_FIELD2(  2, STRING  , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, string_value, type, 0),
-    PB_FIELD2(  3, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, numeric_value, string_value, 0),
-    PB_FIELD2(  4, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, boolean_value, numeric_value, 0),
+    PB_FIELD(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_DynamicField, type, type, 0),
+    PB_FIELD(  2, STRING  , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, string_value, type, 0),
+    PB_FIELD(  3, DOUBLE  , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, numeric_value, string_value, 0),
+    PB_FIELD(  4, BOOL    , OPTIONAL, STATIC  , OTHER, openxc_DynamicField, boolean_value, numeric_value, 0),
     PB_LAST_FIELD
 };
 
-const pb_field_t openxc_TranslatedMessage_fields[5] = {
-    PB_FIELD2(  1, ENUM    , OPTIONAL, STATIC  , FIRST, openxc_TranslatedMessage, type, type, 0),
-    PB_FIELD2(  2, STRING  , OPTIONAL, STATIC  , OTHER, openxc_TranslatedMessage, name, type, 0),
-    PB_FIELD2(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_TranslatedMessage, value, name, &openxc_DynamicField_fields),
-    PB_FIELD2(  4, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_TranslatedMessage, event, value, &openxc_DynamicField_fields),
+const pb_field_t openxc_SimpleMessage_fields[4] = {
+    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, openxc_SimpleMessage, name, name, 0),
+    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_SimpleMessage, value, name, &openxc_DynamicField_fields),
+    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, openxc_SimpleMessage, event, value, &openxc_DynamicField_fields),
     PB_LAST_FIELD
 };
 
 
 /* Check that field information fits in pb_field_t */
-#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
-STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, raw_message) < 256 && pb_membersize(openxc_VehicleMessage, translated_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_TranslatedMessage, value) < 256 && pb_membersize(openxc_TranslatedMessage, event) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_ControlCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_TranslatedMessage)
+#if !defined(PB_FIELD_32BIT)
+/* If you get an error here, it means that you need to define PB_FIELD_32BIT
+ * compile-time option. You can do that in pb.h or on compiler command line.
+ * 
+ * The reason you need to do this is that some of your messages contain tag
+ * 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_DiagnosticControlCommand, request) < 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_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
 #endif
 
-#if !defined(PB_FIELD_32BIT)
-STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, raw_message) < 65536 && pb_membersize(openxc_VehicleMessage, translated_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_TranslatedMessage, value) < 65536 && pb_membersize(openxc_TranslatedMessage, event) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_ControlCommand_openxc_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_TranslatedMessage)
+#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
+/* If you get an error here, it means that you need to define PB_FIELD_16BIT
+ * compile-time option. You can do that in pb.h or on compiler command line.
+ * 
+ * The reason you need to do this is that some of your messages contain tag
+ * 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_DiagnosticControlCommand, request) < 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_CommandResponse_openxc_DiagnosticRequest_openxc_DiagnosticResponse_openxc_DynamicField_openxc_SimpleMessage)
 #endif
 
+
 /* On some platforms (such as AVR), double is really float.
  * These are not directly supported by nanopb, but see example_avr_double.
  * To get rid of this error, remove any double fields from your .proto.
  */
-STATIC_ASSERT(sizeof(double) == 8, DOUBLE_MUST_BE_8_BYTES)
+PB_STATIC_ASSERT(sizeof(double) == 8, DOUBLE_MUST_BE_8_BYTES)
 
index e70324f..a99a91f 100644 (file)
@@ -1,29 +1,52 @@
 /* Automatically generated nanopb header */
-/* Generated by nanopb-0.2.5 at Wed Mar 26 09:29:06 2014. */
+/* Generated by nanopb-0.3.1 at Fri Nov  7 08:56:52 2014. */
 
-#ifndef _PB_OPENXC_PB_H_
-#define _PB_OPENXC_PB_H_
+#ifndef PB_OPENXC_PB_H_INCLUDED
+#define PB_OPENXC_PB_H_INCLUDED
 #include <pb.h>
 
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /* Enum definitions */
 typedef enum _openxc_VehicleMessage_Type {
-    openxc_VehicleMessage_Type_RAW = 1,
-    openxc_VehicleMessage_Type_TRANSLATED = 2,
+    openxc_VehicleMessage_Type_CAN = 1,
+    openxc_VehicleMessage_Type_SIMPLE = 2,
     openxc_VehicleMessage_Type_DIAGNOSTIC = 3,
     openxc_VehicleMessage_Type_CONTROL_COMMAND = 4,
     openxc_VehicleMessage_Type_COMMAND_RESPONSE = 5
 } openxc_VehicleMessage_Type;
 
+typedef enum _openxc_CanMessage_FrameFormat {
+    openxc_CanMessage_FrameFormat_STANDARD = 1,
+    openxc_CanMessage_FrameFormat_EXTENDED = 2
+} openxc_CanMessage_FrameFormat;
+
 typedef enum _openxc_ControlCommand_Type {
     openxc_ControlCommand_Type_VERSION = 1,
     openxc_ControlCommand_Type_DEVICE_ID = 2,
-    openxc_ControlCommand_Type_DIAGNOSTIC = 3
+    openxc_ControlCommand_Type_DIAGNOSTIC = 3,
+    openxc_ControlCommand_Type_PASSTHROUGH = 4,
+    openxc_ControlCommand_Type_ACCEPTANCE_FILTER_BYPASS = 5,
+    openxc_ControlCommand_Type_PAYLOAD_FORMAT = 6,
+    openxc_ControlCommand_Type_PREDEFINED_OBD2_REQUESTS = 7
 } openxc_ControlCommand_Type;
 
+typedef enum _openxc_DiagnosticControlCommand_Action {
+    openxc_DiagnosticControlCommand_Action_ADD = 1,
+    openxc_DiagnosticControlCommand_Action_CANCEL = 2
+} openxc_DiagnosticControlCommand_Action;
+
+typedef enum _openxc_PayloadFormatCommand_PayloadFormat {
+    openxc_PayloadFormatCommand_PayloadFormat_JSON = 1,
+    openxc_PayloadFormatCommand_PayloadFormat_PROTOBUF = 2
+} openxc_PayloadFormatCommand_PayloadFormat;
+
 typedef enum _openxc_DiagnosticRequest_DecodedType {
     openxc_DiagnosticRequest_DecodedType_NONE = 1,
     openxc_DiagnosticRequest_DecodedType_OBD2 = 2
@@ -35,27 +58,37 @@ typedef enum _openxc_DynamicField_Type {
     openxc_DynamicField_Type_BOOL = 3
 } openxc_DynamicField_Type;
 
-typedef enum _openxc_TranslatedMessage_Type {
-    openxc_TranslatedMessage_Type_STRING = 1,
-    openxc_TranslatedMessage_Type_NUM = 2,
-    openxc_TranslatedMessage_Type_BOOL = 3,
-    openxc_TranslatedMessage_Type_EVENTED_STRING = 4,
-    openxc_TranslatedMessage_Type_EVENTED_NUM = 5,
-    openxc_TranslatedMessage_Type_EVENTED_BOOL = 6
-} openxc_TranslatedMessage_Type;
-
 /* Struct definitions */
+typedef struct _openxc_AcceptanceFilterBypassCommand {
+    bool has_bus;
+    int32_t bus;
+    bool has_bypass;
+    bool bypass;
+} openxc_AcceptanceFilterBypassCommand;
+
+typedef PB_BYTES_ARRAY_T(8) openxc_CanMessage_data_t;
+
+typedef struct _openxc_CanMessage {
+    bool has_bus;
+    int32_t bus;
+    bool has_id;
+    uint32_t id;
+    bool has_data;
+    openxc_CanMessage_data_t data;
+    bool has_frame_format;
+    openxc_CanMessage_FrameFormat frame_format;
+} openxc_CanMessage;
+
 typedef struct _openxc_CommandResponse {
     bool has_type;
     openxc_ControlCommand_Type type;
     bool has_message;
     char message[128];
+    bool has_status;
+    bool status;
 } openxc_CommandResponse;
 
-typedef struct {
-    size_t size;
-    uint8_t bytes[8];
-} openxc_DiagnosticRequest_payload_t;
+typedef PB_BYTES_ARRAY_T(8) openxc_DiagnosticRequest_payload_t;
 
 typedef struct _openxc_DiagnosticRequest {
     bool has_bus;
@@ -78,10 +111,7 @@ typedef struct _openxc_DiagnosticRequest {
     openxc_DiagnosticRequest_DecodedType decoded_type;
 } openxc_DiagnosticRequest;
 
-typedef struct {
-    size_t size;
-    uint8_t bytes[8];
-} openxc_DiagnosticResponse_payload_t;
+typedef PB_BYTES_ARRAY_T(8) openxc_DiagnosticResponse_payload_t;
 
 typedef struct _openxc_DiagnosticResponse {
     bool has_bus;
@@ -113,45 +143,61 @@ typedef struct _openxc_DynamicField {
     bool boolean_value;
 } openxc_DynamicField;
 
-typedef struct {
-    size_t size;
-    uint8_t bytes[8];
-} openxc_RawMessage_data_t;
-
-typedef struct _openxc_RawMessage {
+typedef struct _openxc_PassthroughModeControlCommand {
     bool has_bus;
     int32_t bus;
-    bool has_message_id;
-    uint32_t message_id;
-    bool has_data;
-    openxc_RawMessage_data_t data;
-} openxc_RawMessage;
+    bool has_enabled;
+    bool enabled;
+} openxc_PassthroughModeControlCommand;
 
-typedef struct _openxc_ControlCommand {
-    bool has_type;
-    openxc_ControlCommand_Type type;
-    bool has_diagnostic_request;
-    openxc_DiagnosticRequest diagnostic_request;
-} openxc_ControlCommand;
+typedef struct _openxc_PayloadFormatCommand {
+    bool has_format;
+    openxc_PayloadFormatCommand_PayloadFormat format;
+} openxc_PayloadFormatCommand;
 
-typedef struct _openxc_TranslatedMessage {
-    bool has_type;
-    openxc_TranslatedMessage_Type type;
+typedef struct _openxc_PredefinedObd2RequestsCommand {
+    bool has_enabled;
+    bool enabled;
+} openxc_PredefinedObd2RequestsCommand;
+
+typedef struct _openxc_DiagnosticControlCommand {
+    bool has_request;
+    openxc_DiagnosticRequest request;
+    bool has_action;
+    openxc_DiagnosticControlCommand_Action action;
+} openxc_DiagnosticControlCommand;
+
+typedef struct _openxc_SimpleMessage {
     bool has_name;
     char name[100];
     bool has_value;
     openxc_DynamicField value;
     bool has_event;
     openxc_DynamicField event;
-} openxc_TranslatedMessage;
+} openxc_SimpleMessage;
+
+typedef struct _openxc_ControlCommand {
+    bool has_type;
+    openxc_ControlCommand_Type type;
+    bool has_diagnostic_request;
+    openxc_DiagnosticControlCommand diagnostic_request;
+    bool has_passthrough_mode_request;
+    openxc_PassthroughModeControlCommand passthrough_mode_request;
+    bool has_acceptance_filter_bypass_command;
+    openxc_AcceptanceFilterBypassCommand acceptance_filter_bypass_command;
+    bool has_payload_format_command;
+    openxc_PayloadFormatCommand payload_format_command;
+    bool has_predefined_obd2_requests_command;
+    openxc_PredefinedObd2RequestsCommand predefined_obd2_requests_command;
+} openxc_ControlCommand;
 
 typedef struct _openxc_VehicleMessage {
     bool has_type;
     openxc_VehicleMessage_Type type;
-    bool has_raw_message;
-    openxc_RawMessage raw_message;
-    bool has_translated_message;
-    openxc_TranslatedMessage translated_message;
+    bool has_can_message;
+    openxc_CanMessage can_message;
+    bool has_simple_message;
+    openxc_SimpleMessage simple_message;
     bool has_diagnostic_response;
     openxc_DiagnosticResponse diagnostic_response;
     bool has_control_command;
@@ -162,9 +208,44 @@ typedef struct _openxc_VehicleMessage {
 
 /* Default values for struct fields */
 
+/* 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}
+#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}
+#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}
+#define openxc_PayloadFormatCommand_init_default {false, (openxc_PayloadFormatCommand_PayloadFormat)0}
+#define openxc_PredefinedObd2RequestsCommand_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}
+#define openxc_DynamicField_init_default         {false, (openxc_DynamicField_Type)0, false, "", false, 0, false, 0}
+#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}
+#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}
+#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}
+#define openxc_PayloadFormatCommand_init_zero    {false, (openxc_PayloadFormatCommand_PayloadFormat)0}
+#define openxc_PredefinedObd2RequestsCommand_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}
+#define openxc_DynamicField_init_zero            {false, (openxc_DynamicField_Type)0, false, "", false, 0, false, 0}
+#define openxc_SimpleMessage_init_zero           {false, "", false, openxc_DynamicField_init_zero, false, openxc_DynamicField_init_zero}
+
 /* Field tags (for use in manual encoding/decoding) */
+#define openxc_AcceptanceFilterBypassCommand_bus_tag 1
+#define openxc_AcceptanceFilterBypassCommand_bypass_tag 2
+#define openxc_CanMessage_bus_tag                1
+#define openxc_CanMessage_id_tag                 2
+#define openxc_CanMessage_data_tag               3
+#define openxc_CanMessage_frame_format_tag       4
 #define openxc_CommandResponse_type_tag          1
 #define openxc_CommandResponse_message_tag       2
+#define openxc_CommandResponse_status_tag        3
 #define openxc_DiagnosticRequest_bus_tag         1
 #define openxc_DiagnosticRequest_message_id_tag  2
 #define openxc_DiagnosticRequest_mode_tag        3
@@ -186,41 +267,57 @@ typedef struct _openxc_VehicleMessage {
 #define openxc_DynamicField_string_value_tag     2
 #define openxc_DynamicField_numeric_value_tag    3
 #define openxc_DynamicField_boolean_value_tag    4
-#define openxc_RawMessage_bus_tag                1
-#define openxc_RawMessage_message_id_tag         2
-#define openxc_RawMessage_data_tag               3
+#define openxc_PassthroughModeControlCommand_bus_tag 1
+#define openxc_PassthroughModeControlCommand_enabled_tag 2
+#define openxc_PayloadFormatCommand_format_tag   1
+#define openxc_PredefinedObd2RequestsCommand_enabled_tag 1
+#define openxc_DiagnosticControlCommand_request_tag 1
+#define openxc_DiagnosticControlCommand_action_tag 2
+#define openxc_SimpleMessage_name_tag            1
+#define openxc_SimpleMessage_value_tag           2
+#define openxc_SimpleMessage_event_tag           3
 #define openxc_ControlCommand_type_tag           1
 #define openxc_ControlCommand_diagnostic_request_tag 2
-#define openxc_TranslatedMessage_type_tag        1
-#define openxc_TranslatedMessage_name_tag        2
-#define openxc_TranslatedMessage_value_tag       3
-#define openxc_TranslatedMessage_event_tag       4
+#define openxc_ControlCommand_passthrough_mode_request_tag 3
+#define openxc_ControlCommand_acceptance_filter_bypass_command_tag 4
+#define openxc_ControlCommand_payload_format_command_tag 5
+#define openxc_ControlCommand_predefined_obd2_requests_command_tag 6
 #define openxc_VehicleMessage_type_tag           1
-#define openxc_VehicleMessage_raw_message_tag    2
-#define openxc_VehicleMessage_translated_message_tag 3
+#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
 
 /* Struct field encoding specification for nanopb */
 extern const pb_field_t openxc_VehicleMessage_fields[7];
-extern const pb_field_t openxc_RawMessage_fields[4];
-extern const pb_field_t openxc_ControlCommand_fields[3];
-extern const pb_field_t openxc_CommandResponse_fields[3];
+extern const pb_field_t openxc_CanMessage_fields[5];
+extern const pb_field_t openxc_ControlCommand_fields[7];
+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];
+extern const pb_field_t openxc_PayloadFormatCommand_fields[2];
+extern const pb_field_t openxc_PredefinedObd2RequestsCommand_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];
 extern const pb_field_t openxc_DynamicField_fields[5];
-extern const pb_field_t openxc_TranslatedMessage_fields[5];
+extern const pb_field_t openxc_SimpleMessage_fields[4];
 
 /* Maximum encoded size of messages (where known) */
-#define openxc_VehicleMessage_size               664
-#define openxc_RawMessage_size                   27
-#define openxc_ControlCommand_size               76
-#define openxc_CommandResponse_size              137
+#define openxc_VehicleMessage_size               716
+#define openxc_CanMessage_size                   33
+#define openxc_ControlCommand_size               126
+#define openxc_DiagnosticControlCommand_size     76
+#define openxc_PassthroughModeControlCommand_size 13
+#define openxc_AcceptanceFilterBypassCommand_size 13
+#define openxc_PayloadFormatCommand_size         6
+#define openxc_PredefinedObd2RequestsCommand_size 2
+#define openxc_CommandResponse_size              139
 #define openxc_DiagnosticRequest_size            68
 #define openxc_DiagnosticResponse_size           56
 #define openxc_DynamicField_size                 119
-#define openxc_TranslatedMessage_size            350
+#define openxc_SimpleMessage_size                344
 
 #ifdef __cplusplus
 } /* extern "C" */
index 777acd0..60dbfb8 100644 (file)
@@ -8,10 +8,10 @@ public final class BinaryMessages {
   public static void registerAllExtensions(
       com.google.protobuf.ExtensionRegistry registry) {
   }
-  public interface VehicleMessageOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface VehicleMessageOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.VehicleMessage)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional .openxc.VehicleMessage.Type type = 1;
     /**
      * <code>optional .openxc.VehicleMessage.Type type = 1;</code>
      */
@@ -21,35 +21,32 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.VehicleMessage.Type getType();
 
-    // optional .openxc.RawMessage raw_message = 2;
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    boolean hasRawMessage();
+    boolean hasCanMessage();
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    com.openxc.BinaryMessages.RawMessage getRawMessage();
+    com.openxc.BinaryMessages.CanMessage getCanMessage();
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    com.openxc.BinaryMessages.RawMessageOrBuilder getRawMessageOrBuilder();
+    com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder();
 
-    // optional .openxc.TranslatedMessage translated_message = 3;
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    boolean hasTranslatedMessage();
+    boolean hasSimpleMessage();
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    com.openxc.BinaryMessages.TranslatedMessage getTranslatedMessage();
+    com.openxc.BinaryMessages.SimpleMessage getSimpleMessage();
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    com.openxc.BinaryMessages.TranslatedMessageOrBuilder getTranslatedMessageOrBuilder();
+    com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder();
 
-    // optional .openxc.DiagnosticResponse diagnostic_response = 4;
     /**
      * <code>optional .openxc.DiagnosticResponse diagnostic_response = 4;</code>
      */
@@ -63,7 +60,6 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.DiagnosticResponseOrBuilder getDiagnosticResponseOrBuilder();
 
-    // optional .openxc.ControlCommand control_command = 5;
     /**
      * <code>optional .openxc.ControlCommand control_command = 5;</code>
      */
@@ -77,7 +73,6 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.ControlCommandOrBuilder getControlCommandOrBuilder();
 
-    // optional .openxc.CommandResponse command_response = 6;
     /**
      * <code>optional .openxc.CommandResponse command_response = 6;</code>
      */
@@ -95,8 +90,9 @@ public final class BinaryMessages {
    * Protobuf type {@code openxc.VehicleMessage}
    */
   public static final class VehicleMessage extends
-      com.google.protobuf.GeneratedMessage
-      implements VehicleMessageOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.VehicleMessage)
+      VehicleMessageOrBuilder {
     // Use VehicleMessage.newBuilder() to construct.
     private VehicleMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -154,27 +150,27 @@ public final class BinaryMessages {
               break;
             }
             case 18: {
-              com.openxc.BinaryMessages.RawMessage.Builder subBuilder = null;
+              com.openxc.BinaryMessages.CanMessage.Builder subBuilder = null;
               if (((bitField0_ & 0x00000002) == 0x00000002)) {
-                subBuilder = rawMessage_.toBuilder();
+                subBuilder = canMessage_.toBuilder();
               }
-              rawMessage_ = input.readMessage(com.openxc.BinaryMessages.RawMessage.PARSER, extensionRegistry);
+              canMessage_ = input.readMessage(com.openxc.BinaryMessages.CanMessage.PARSER, extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(rawMessage_);
-                rawMessage_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(canMessage_);
+                canMessage_ = subBuilder.buildPartial();
               }
               bitField0_ |= 0x00000002;
               break;
             }
             case 26: {
-              com.openxc.BinaryMessages.TranslatedMessage.Builder subBuilder = null;
+              com.openxc.BinaryMessages.SimpleMessage.Builder subBuilder = null;
               if (((bitField0_ & 0x00000004) == 0x00000004)) {
-                subBuilder = translatedMessage_.toBuilder();
+                subBuilder = simpleMessage_.toBuilder();
               }
-              translatedMessage_ = input.readMessage(com.openxc.BinaryMessages.TranslatedMessage.PARSER, extensionRegistry);
+              simpleMessage_ = input.readMessage(com.openxc.BinaryMessages.SimpleMessage.PARSER, extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(translatedMessage_);
-                translatedMessage_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(simpleMessage_);
+                simpleMessage_ = subBuilder.buildPartial();
               }
               bitField0_ |= 0x00000004;
               break;
@@ -263,13 +259,13 @@ public final class BinaryMessages {
     public enum Type
         implements com.google.protobuf.ProtocolMessageEnum {
       /**
-       * <code>RAW = 1;</code>
+       * <code>CAN = 1;</code>
        */
-      RAW(0, 1),
+      CAN(0, 1),
       /**
-       * <code>TRANSLATED = 2;</code>
+       * <code>SIMPLE = 2;</code>
        */
-      TRANSLATED(1, 2),
+      SIMPLE(1, 2),
       /**
        * <code>DIAGNOSTIC = 3;</code>
        */
@@ -285,13 +281,13 @@ public final class BinaryMessages {
       ;
 
       /**
-       * <code>RAW = 1;</code>
+       * <code>CAN = 1;</code>
        */
-      public static final int RAW_VALUE = 1;
+      public static final int CAN_VALUE = 1;
       /**
-       * <code>TRANSLATED = 2;</code>
+       * <code>SIMPLE = 2;</code>
        */
-      public static final int TRANSLATED_VALUE = 2;
+      public static final int SIMPLE_VALUE = 2;
       /**
        * <code>DIAGNOSTIC = 3;</code>
        */
@@ -310,8 +306,8 @@ public final class BinaryMessages {
 
       public static Type valueOf(int value) {
         switch (value) {
-          case 1: return RAW;
-          case 2: return TRANSLATED;
+          case 1: return CAN;
+          case 2: return SIMPLE;
           case 3: return DIAGNOSTIC;
           case 4: return CONTROL_COMMAND;
           case 5: return COMMAND_RESPONSE;
@@ -367,7 +363,6 @@ public final class BinaryMessages {
     }
 
     private int bitField0_;
-    // optional .openxc.VehicleMessage.Type type = 1;
     public static final int TYPE_FIELD_NUMBER = 1;
     private com.openxc.BinaryMessages.VehicleMessage.Type type_;
     /**
@@ -383,51 +378,48 @@ public final class BinaryMessages {
       return type_;
     }
 
-    // optional .openxc.RawMessage raw_message = 2;
-    public static final int RAW_MESSAGE_FIELD_NUMBER = 2;
-    private com.openxc.BinaryMessages.RawMessage rawMessage_;
+    public static final int CAN_MESSAGE_FIELD_NUMBER = 2;
+    private com.openxc.BinaryMessages.CanMessage canMessage_;
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    public boolean hasRawMessage() {
+    public boolean hasCanMessage() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    public com.openxc.BinaryMessages.RawMessage getRawMessage() {
-      return rawMessage_;
+    public com.openxc.BinaryMessages.CanMessage getCanMessage() {
+      return canMessage_;
     }
     /**
-     * <code>optional .openxc.RawMessage raw_message = 2;</code>
+     * <code>optional .openxc.CanMessage can_message = 2;</code>
      */
-    public com.openxc.BinaryMessages.RawMessageOrBuilder getRawMessageOrBuilder() {
-      return rawMessage_;
+    public com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder() {
+      return canMessage_;
     }
 
-    // optional .openxc.TranslatedMessage translated_message = 3;
-    public static final int TRANSLATED_MESSAGE_FIELD_NUMBER = 3;
-    private com.openxc.BinaryMessages.TranslatedMessage translatedMessage_;
+    public static final int SIMPLE_MESSAGE_FIELD_NUMBER = 3;
+    private com.openxc.BinaryMessages.SimpleMessage simpleMessage_;
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    public boolean hasTranslatedMessage() {
+    public boolean hasSimpleMessage() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    public com.openxc.BinaryMessages.TranslatedMessage getTranslatedMessage() {
-      return translatedMessage_;
+    public com.openxc.BinaryMessages.SimpleMessage getSimpleMessage() {
+      return simpleMessage_;
     }
     /**
-     * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+     * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
      */
-    public com.openxc.BinaryMessages.TranslatedMessageOrBuilder getTranslatedMessageOrBuilder() {
-      return translatedMessage_;
+    public com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder() {
+      return simpleMessage_;
     }
 
-    // optional .openxc.DiagnosticResponse diagnostic_response = 4;
     public static final int DIAGNOSTIC_RESPONSE_FIELD_NUMBER = 4;
     private com.openxc.BinaryMessages.DiagnosticResponse diagnosticResponse_;
     /**
@@ -449,7 +441,6 @@ public final class BinaryMessages {
       return diagnosticResponse_;
     }
 
-    // optional .openxc.ControlCommand control_command = 5;
     public static final int CONTROL_COMMAND_FIELD_NUMBER = 5;
     private com.openxc.BinaryMessages.ControlCommand controlCommand_;
     /**
@@ -471,7 +462,6 @@ public final class BinaryMessages {
       return controlCommand_;
     }
 
-    // optional .openxc.CommandResponse command_response = 6;
     public static final int COMMAND_RESPONSE_FIELD_NUMBER = 6;
     private com.openxc.BinaryMessages.CommandResponse commandResponse_;
     /**
@@ -494,9 +484,9 @@ public final class BinaryMessages {
     }
 
     private void initFields() {
-      type_ = com.openxc.BinaryMessages.VehicleMessage.Type.RAW;
-      rawMessage_ = com.openxc.BinaryMessages.RawMessage.getDefaultInstance();
-      translatedMessage_ = com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance();
+      type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
+      canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
+      simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
       diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
       controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
       commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
@@ -504,7 +494,8 @@ public final class BinaryMessages {
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -517,10 +508,10 @@ public final class BinaryMessages {
         output.writeEnum(1, type_.getNumber());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(2, rawMessage_);
+        output.writeMessage(2, canMessage_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(3, translatedMessage_);
+        output.writeMessage(3, simpleMessage_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         output.writeMessage(4, diagnosticResponse_);
@@ -546,11 +537,11 @@ public final class BinaryMessages {
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, rawMessage_);
+          .computeMessageSize(2, canMessage_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, translatedMessage_);
+          .computeMessageSize(3, simpleMessage_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         size += com.google.protobuf.CodedOutputStream
@@ -646,8 +637,9 @@ public final class BinaryMessages {
      * Protobuf type {@code openxc.VehicleMessage}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.VehicleMessageOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.VehicleMessage)
+        com.openxc.BinaryMessages.VehicleMessageOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.openxc.BinaryMessages.internal_static_openxc_VehicleMessage_descriptor;
@@ -672,8 +664,8 @@ public final class BinaryMessages {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getRawMessageFieldBuilder();
-          getTranslatedMessageFieldBuilder();
+          getCanMessageFieldBuilder();
+          getSimpleMessageFieldBuilder();
           getDiagnosticResponseFieldBuilder();
           getControlCommandFieldBuilder();
           getCommandResponseFieldBuilder();
@@ -685,18 +677,18 @@ public final class BinaryMessages {
 
       public Builder clear() {
         super.clear();
-        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.RAW;
+        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
         bitField0_ = (bitField0_ & ~0x00000001);
-        if (rawMessageBuilder_ == null) {
-          rawMessage_ = com.openxc.BinaryMessages.RawMessage.getDefaultInstance();
+        if (canMessageBuilder_ == null) {
+          canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
         } else {
-          rawMessageBuilder_.clear();
+          canMessageBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000002);
-        if (translatedMessageBuilder_ == null) {
-          translatedMessage_ = com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance();
+        if (simpleMessageBuilder_ == null) {
+          simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
         } else {
-          translatedMessageBuilder_.clear();
+          simpleMessageBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000004);
         if (diagnosticResponseBuilder_ == null) {
@@ -752,18 +744,18 @@ public final class BinaryMessages {
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        if (rawMessageBuilder_ == null) {
-          result.rawMessage_ = rawMessage_;
+        if (canMessageBuilder_ == null) {
+          result.canMessage_ = canMessage_;
         } else {
-          result.rawMessage_ = rawMessageBuilder_.build();
+          result.canMessage_ = canMessageBuilder_.build();
         }
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        if (translatedMessageBuilder_ == null) {
-          result.translatedMessage_ = translatedMessage_;
+        if (simpleMessageBuilder_ == null) {
+          result.simpleMessage_ = simpleMessage_;
         } else {
-          result.translatedMessage_ = translatedMessageBuilder_.build();
+          result.simpleMessage_ = simpleMessageBuilder_.build();
         }
         if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
           to_bitField0_ |= 0x00000008;
@@ -808,11 +800,11 @@ public final class BinaryMessages {
         if (other.hasType()) {
           setType(other.getType());
         }
-        if (other.hasRawMessage()) {
-          mergeRawMessage(other.getRawMessage());
+        if (other.hasCanMessage()) {
+          mergeCanMessage(other.getCanMessage());
         }
-        if (other.hasTranslatedMessage()) {
-          mergeTranslatedMessage(other.getTranslatedMessage());
+        if (other.hasSimpleMessage()) {
+          mergeSimpleMessage(other.getSimpleMessage());
         }
         if (other.hasDiagnosticResponse()) {
           mergeDiagnosticResponse(other.getDiagnosticResponse());
@@ -850,8 +842,7 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional .openxc.VehicleMessage.Type type = 1;
-      private com.openxc.BinaryMessages.VehicleMessage.Type type_ = com.openxc.BinaryMessages.VehicleMessage.Type.RAW;
+      private com.openxc.BinaryMessages.VehicleMessage.Type type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
       /**
        * <code>optional .openxc.VehicleMessage.Type type = 1;</code>
        */
@@ -881,246 +872,243 @@ public final class BinaryMessages {
        */
       public Builder clearType() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.RAW;
+        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
         onChanged();
         return this;
       }
 
-      // optional .openxc.RawMessage raw_message = 2;
-      private com.openxc.BinaryMessages.RawMessage rawMessage_ = com.openxc.BinaryMessages.RawMessage.getDefaultInstance();
+      private com.openxc.BinaryMessages.CanMessage canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.RawMessage, com.openxc.BinaryMessages.RawMessage.Builder, com.openxc.BinaryMessages.RawMessageOrBuilder> rawMessageBuilder_;
+          com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder> canMessageBuilder_;
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public boolean hasRawMessage() {
+      public boolean hasCanMessage() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public com.openxc.BinaryMessages.RawMessage getRawMessage() {
-        if (rawMessageBuilder_ == null) {
-          return rawMessage_;
+      public com.openxc.BinaryMessages.CanMessage getCanMessage() {
+        if (canMessageBuilder_ == null) {
+          return canMessage_;
         } else {
-          return rawMessageBuilder_.getMessage();
+          return canMessageBuilder_.getMessage();
         }
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public Builder setRawMessage(com.openxc.BinaryMessages.RawMessage value) {
-        if (rawMessageBuilder_ == null) {
+      public Builder setCanMessage(com.openxc.BinaryMessages.CanMessage value) {
+        if (canMessageBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          rawMessage_ = value;
+          canMessage_ = value;
           onChanged();
         } else {
-          rawMessageBuilder_.setMessage(value);
+          canMessageBuilder_.setMessage(value);
         }
         bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public Builder setRawMessage(
-          com.openxc.BinaryMessages.RawMessage.Builder builderForValue) {
-        if (rawMessageBuilder_ == null) {
-          rawMessage_ = builderForValue.build();
+      public Builder setCanMessage(
+          com.openxc.BinaryMessages.CanMessage.Builder builderForValue) {
+        if (canMessageBuilder_ == null) {
+          canMessage_ = builderForValue.build();
           onChanged();
         } else {
-          rawMessageBuilder_.setMessage(builderForValue.build());
+          canMessageBuilder_.setMessage(builderForValue.build());
         }
         bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public Builder mergeRawMessage(com.openxc.BinaryMessages.RawMessage value) {
-        if (rawMessageBuilder_ == null) {
+      public Builder mergeCanMessage(com.openxc.BinaryMessages.CanMessage value) {
+        if (canMessageBuilder_ == null) {
           if (((bitField0_ & 0x00000002) == 0x00000002) &&
-              rawMessage_ != com.openxc.BinaryMessages.RawMessage.getDefaultInstance()) {
-            rawMessage_ =
-              com.openxc.BinaryMessages.RawMessage.newBuilder(rawMessage_).mergeFrom(value).buildPartial();
+              canMessage_ != com.openxc.BinaryMessages.CanMessage.getDefaultInstance()) {
+            canMessage_ =
+              com.openxc.BinaryMessages.CanMessage.newBuilder(canMessage_).mergeFrom(value).buildPartial();
           } else {
-            rawMessage_ = value;
+            canMessage_ = value;
           }
           onChanged();
         } else {
-          rawMessageBuilder_.mergeFrom(value);
+          canMessageBuilder_.mergeFrom(value);
         }
         bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public Builder clearRawMessage() {
-        if (rawMessageBuilder_ == null) {
-          rawMessage_ = com.openxc.BinaryMessages.RawMessage.getDefaultInstance();
+      public Builder clearCanMessage() {
+        if (canMessageBuilder_ == null) {
+          canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
           onChanged();
         } else {
-          rawMessageBuilder_.clear();
+          canMessageBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public com.openxc.BinaryMessages.RawMessage.Builder getRawMessageBuilder() {
+      public com.openxc.BinaryMessages.CanMessage.Builder getCanMessageBuilder() {
         bitField0_ |= 0x00000002;
         onChanged();
-        return getRawMessageFieldBuilder().getBuilder();
+        return getCanMessageFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
-      public com.openxc.BinaryMessages.RawMessageOrBuilder getRawMessageOrBuilder() {
-        if (rawMessageBuilder_ != null) {
-          return rawMessageBuilder_.getMessageOrBuilder();
+      public com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder() {
+        if (canMessageBuilder_ != null) {
+          return canMessageBuilder_.getMessageOrBuilder();
         } else {
-          return rawMessage_;
+          return canMessage_;
         }
       }
       /**
-       * <code>optional .openxc.RawMessage raw_message = 2;</code>
+       * <code>optional .openxc.CanMessage can_message = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.RawMessage, com.openxc.BinaryMessages.RawMessage.Builder, com.openxc.BinaryMessages.RawMessageOrBuilder> 
-          getRawMessageFieldBuilder() {
-        if (rawMessageBuilder_ == null) {
-          rawMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.openxc.BinaryMessages.RawMessage, com.openxc.BinaryMessages.RawMessage.Builder, com.openxc.BinaryMessages.RawMessageOrBuilder>(
-                  rawMessage_,
+          com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder> 
+          getCanMessageFieldBuilder() {
+        if (canMessageBuilder_ == null) {
+          canMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder>(
+                  getCanMessage(),
                   getParentForChildren(),
                   isClean());
-          rawMessage_ = null;
+          canMessage_ = null;
         }
-        return rawMessageBuilder_;
+        return canMessageBuilder_;
       }
 
-      // optional .openxc.TranslatedMessage translated_message = 3;
-      private com.openxc.BinaryMessages.TranslatedMessage translatedMessage_ = com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance();
+      private com.openxc.BinaryMessages.SimpleMessage simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.TranslatedMessage, com.openxc.BinaryMessages.TranslatedMessage.Builder, com.openxc.BinaryMessages.TranslatedMessageOrBuilder> translatedMessageBuilder_;
+          com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder> simpleMessageBuilder_;
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public boolean hasTranslatedMessage() {
+      public boolean hasSimpleMessage() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public com.openxc.BinaryMessages.TranslatedMessage getTranslatedMessage() {
-        if (translatedMessageBuilder_ == null) {
-          return translatedMessage_;
+      public com.openxc.BinaryMessages.SimpleMessage getSimpleMessage() {
+        if (simpleMessageBuilder_ == null) {
+          return simpleMessage_;
         } else {
-          return translatedMessageBuilder_.getMessage();
+          return simpleMessageBuilder_.getMessage();
         }
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public Builder setTranslatedMessage(com.openxc.BinaryMessages.TranslatedMessage value) {
-        if (translatedMessageBuilder_ == null) {
+      public Builder setSimpleMessage(com.openxc.BinaryMessages.SimpleMessage value) {
+        if (simpleMessageBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          translatedMessage_ = value;
+          simpleMessage_ = value;
           onChanged();
         } else {
-          translatedMessageBuilder_.setMessage(value);
+          simpleMessageBuilder_.setMessage(value);
         }
         bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public Builder setTranslatedMessage(
-          com.openxc.BinaryMessages.TranslatedMessage.Builder builderForValue) {
-        if (translatedMessageBuilder_ == null) {
-          translatedMessage_ = builderForValue.build();
+      public Builder setSimpleMessage(
+          com.openxc.BinaryMessages.SimpleMessage.Builder builderForValue) {
+        if (simpleMessageBuilder_ == null) {
+          simpleMessage_ = builderForValue.build();
           onChanged();
         } else {
-          translatedMessageBuilder_.setMessage(builderForValue.build());
+          simpleMessageBuilder_.setMessage(builderForValue.build());
         }
         bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public Builder mergeTranslatedMessage(com.openxc.BinaryMessages.TranslatedMessage value) {
-        if (translatedMessageBuilder_ == null) {
+      public Builder mergeSimpleMessage(com.openxc.BinaryMessages.SimpleMessage value) {
+        if (simpleMessageBuilder_ == null) {
           if (((bitField0_ & 0x00000004) == 0x00000004) &&
-              translatedMessage_ != com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance()) {
-            translatedMessage_ =
-              com.openxc.BinaryMessages.TranslatedMessage.newBuilder(translatedMessage_).mergeFrom(value).buildPartial();
+              simpleMessage_ != com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance()) {
+            simpleMessage_ =
+              com.openxc.BinaryMessages.SimpleMessage.newBuilder(simpleMessage_).mergeFrom(value).buildPartial();
           } else {
-            translatedMessage_ = value;
+            simpleMessage_ = value;
           }
           onChanged();
         } else {
-          translatedMessageBuilder_.mergeFrom(value);
+          simpleMessageBuilder_.mergeFrom(value);
         }
         bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public Builder clearTranslatedMessage() {
-        if (translatedMessageBuilder_ == null) {
-          translatedMessage_ = com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance();
+      public Builder clearSimpleMessage() {
+        if (simpleMessageBuilder_ == null) {
+          simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
           onChanged();
         } else {
-          translatedMessageBuilder_.clear();
+          simpleMessageBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public com.openxc.BinaryMessages.TranslatedMessage.Builder getTranslatedMessageBuilder() {
+      public com.openxc.BinaryMessages.SimpleMessage.Builder getSimpleMessageBuilder() {
         bitField0_ |= 0x00000004;
         onChanged();
-        return getTranslatedMessageFieldBuilder().getBuilder();
+        return getSimpleMessageFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
-      public com.openxc.BinaryMessages.TranslatedMessageOrBuilder getTranslatedMessageOrBuilder() {
-        if (translatedMessageBuilder_ != null) {
-          return translatedMessageBuilder_.getMessageOrBuilder();
+      public com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder() {
+        if (simpleMessageBuilder_ != null) {
+          return simpleMessageBuilder_.getMessageOrBuilder();
         } else {
-          return translatedMessage_;
+          return simpleMessage_;
         }
       }
       /**
-       * <code>optional .openxc.TranslatedMessage translated_message = 3;</code>
+       * <code>optional .openxc.SimpleMessage simple_message = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.TranslatedMessage, com.openxc.BinaryMessages.TranslatedMessage.Builder, com.openxc.BinaryMessages.TranslatedMessageOrBuilder> 
-          getTranslatedMessageFieldBuilder() {
-        if (translatedMessageBuilder_ == null) {
-          translatedMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.openxc.BinaryMessages.TranslatedMessage, com.openxc.BinaryMessages.TranslatedMessage.Builder, com.openxc.BinaryMessages.TranslatedMessageOrBuilder>(
-                  translatedMessage_,
+          com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder> 
+          getSimpleMessageFieldBuilder() {
+        if (simpleMessageBuilder_ == null) {
+          simpleMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder>(
+                  getSimpleMessage(),
                   getParentForChildren(),
                   isClean());
-          translatedMessage_ = null;
+          simpleMessage_ = null;
         }
-        return translatedMessageBuilder_;
+        return simpleMessageBuilder_;
       }
 
-      // optional .openxc.DiagnosticResponse diagnostic_response = 4;
       private com.openxc.BinaryMessages.DiagnosticResponse diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.DiagnosticResponse, com.openxc.BinaryMessages.DiagnosticResponse.Builder, com.openxc.BinaryMessages.DiagnosticResponseOrBuilder> diagnosticResponseBuilder_;
@@ -1229,7 +1217,7 @@ public final class BinaryMessages {
         if (diagnosticResponseBuilder_ == null) {
           diagnosticResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
               com.openxc.BinaryMessages.DiagnosticResponse, com.openxc.BinaryMessages.DiagnosticResponse.Builder, com.openxc.BinaryMessages.DiagnosticResponseOrBuilder>(
-                  diagnosticResponse_,
+                  getDiagnosticResponse(),
                   getParentForChildren(),
                   isClean());
           diagnosticResponse_ = null;
@@ -1237,7 +1225,6 @@ public final class BinaryMessages {
         return diagnosticResponseBuilder_;
       }
 
-      // optional .openxc.ControlCommand control_command = 5;
       private com.openxc.BinaryMessages.ControlCommand controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.ControlCommand, com.openxc.BinaryMessages.ControlCommand.Builder, com.openxc.BinaryMessages.ControlCommandOrBuilder> controlCommandBuilder_;
@@ -1346,7 +1333,7 @@ public final class BinaryMessages {
         if (controlCommandBuilder_ == null) {
           controlCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
               com.openxc.BinaryMessages.ControlCommand, com.openxc.BinaryMessages.ControlCommand.Builder, com.openxc.BinaryMessages.ControlCommandOrBuilder>(
-                  controlCommand_,
+                  getControlCommand(),
                   getParentForChildren(),
                   isClean());
           controlCommand_ = null;
@@ -1354,7 +1341,6 @@ public final class BinaryMessages {
         return controlCommandBuilder_;
       }
 
-      // optional .openxc.CommandResponse command_response = 6;
       private com.openxc.BinaryMessages.CommandResponse commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.CommandResponse, com.openxc.BinaryMessages.CommandResponse.Builder, com.openxc.BinaryMessages.CommandResponseOrBuilder> commandResponseBuilder_;
@@ -1463,7 +1449,7 @@ public final class BinaryMessages {
         if (commandResponseBuilder_ == null) {
           commandResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
               com.openxc.BinaryMessages.CommandResponse, com.openxc.BinaryMessages.CommandResponse.Builder, com.openxc.BinaryMessages.CommandResponseOrBuilder>(
-                  commandResponse_,
+                  getCommandResponse(),
                   getParentForChildren(),
                   isClean());
           commandResponse_ = null;
@@ -1482,10 +1468,10 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.VehicleMessage)
   }
 
-  public interface RawMessageOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface CanMessageOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.CanMessage)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional int32 bus = 1;
     /**
      * <code>optional int32 bus = 1;</code>
      */
@@ -1495,17 +1481,15 @@ public final class BinaryMessages {
      */
     int getBus();
 
-    // optional uint32 message_id = 2;
     /**
-     * <code>optional uint32 message_id = 2;</code>
+     * <code>optional uint32 id = 2;</code>
      */
-    boolean hasMessageId();
+    boolean hasId();
     /**
-     * <code>optional uint32 message_id = 2;</code>
+     * <code>optional uint32 id = 2;</code>
      */
-    int getMessageId();
+    int getId();
 
-    // optional bytes data = 3;
     /**
      * <code>optional bytes data = 3;</code>
      */
@@ -1514,26 +1498,36 @@ public final class BinaryMessages {
      * <code>optional bytes data = 3;</code>
      */
     com.google.protobuf.ByteString getData();
+
+    /**
+     * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+     */
+    boolean hasFrameFormat();
+    /**
+     * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+     */
+    com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat();
   }
   /**
-   * Protobuf type {@code openxc.RawMessage}
+   * Protobuf type {@code openxc.CanMessage}
    */
-  public static final class RawMessage extends
-      com.google.protobuf.GeneratedMessage
-      implements RawMessageOrBuilder {
-    // Use RawMessage.newBuilder() to construct.
-    private RawMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+  public static final class CanMessage extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.CanMessage)
+      CanMessageOrBuilder {
+    // Use CanMessage.newBuilder() to construct.
+    private CanMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
       this.unknownFields = builder.getUnknownFields();
     }
-    private RawMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+    private CanMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
 
-    private static final RawMessage defaultInstance;
-    public static RawMessage getDefaultInstance() {
+    private static final CanMessage defaultInstance;
+    public static CanMessage getDefaultInstance() {
       return defaultInstance;
     }
 
-    public RawMessage getDefaultInstanceForType() {
+    public CanMessage getDefaultInstanceForType() {
       return defaultInstance;
     }
 
@@ -1543,7 +1537,7 @@ public final class BinaryMessages {
         getUnknownFields() {
       return this.unknownFields;
     }
-    private RawMessage(
+    private CanMessage(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1573,7 +1567,7 @@ public final class BinaryMessages {
             }
             case 16: {
               bitField0_ |= 0x00000002;
-              messageId_ = input.readUInt32();
+              id_ = input.readUInt32();
               break;
             }
             case 26: {
@@ -1581,6 +1575,17 @@ public final class BinaryMessages {
               data_ = input.readBytes();
               break;
             }
+            case 32: {
+              int rawValue = input.readEnum();
+              com.openxc.BinaryMessages.CanMessage.FrameFormat value = com.openxc.BinaryMessages.CanMessage.FrameFormat.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(4, rawValue);
+              } else {
+                bitField0_ |= 0x00000008;
+                frameFormat_ = value;
+              }
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -1595,33 +1600,114 @@ public final class BinaryMessages {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.openxc.BinaryMessages.internal_static_openxc_RawMessage_descriptor;
+      return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.openxc.BinaryMessages.internal_static_openxc_RawMessage_fieldAccessorTable
+      return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.openxc.BinaryMessages.RawMessage.class, com.openxc.BinaryMessages.RawMessage.Builder.class);
+              com.openxc.BinaryMessages.CanMessage.class, com.openxc.BinaryMessages.CanMessage.Builder.class);
     }
 
-    public static com.google.protobuf.Parser<RawMessage> PARSER =
-        new com.google.protobuf.AbstractParser<RawMessage>() {
-      public RawMessage parsePartialFrom(
+    public static com.google.protobuf.Parser<CanMessage> PARSER =
+        new com.google.protobuf.AbstractParser<CanMessage>() {
+      public CanMessage parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new RawMessage(input, extensionRegistry);
+        return new CanMessage(input, extensionRegistry);
       }
     };
 
     @java.lang.Override
-    public com.google.protobuf.Parser<RawMessage> getParserForType() {
+    public com.google.protobuf.Parser<CanMessage> getParserForType() {
       return PARSER;
     }
 
+    /**
+     * Protobuf enum {@code openxc.CanMessage.FrameFormat}
+     */
+    public enum FrameFormat
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>STANDARD = 1;</code>
+       */
+      STANDARD(0, 1),
+      /**
+       * <code>EXTENDED = 2;</code>
+       */
+      EXTENDED(1, 2),
+      ;
+
+      /**
+       * <code>STANDARD = 1;</code>
+       */
+      public static final int STANDARD_VALUE = 1;
+      /**
+       * <code>EXTENDED = 2;</code>
+       */
+      public static final int EXTENDED_VALUE = 2;
+
+
+      public final int getNumber() { return value; }
+
+      public static FrameFormat valueOf(int value) {
+        switch (value) {
+          case 1: return STANDARD;
+          case 2: return EXTENDED;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<FrameFormat>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<FrameFormat>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<FrameFormat>() {
+              public FrameFormat findValueByNumber(int number) {
+                return FrameFormat.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.CanMessage.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final FrameFormat[] VALUES = values();
+
+      public static FrameFormat valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private FrameFormat(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:openxc.CanMessage.FrameFormat)
+    }
+
     private int bitField0_;
-    // optional int32 bus = 1;
     public static final int BUS_FIELD_NUMBER = 1;
     private int bus_;
     /**
@@ -1637,23 +1723,21 @@ public final class BinaryMessages {
       return bus_;
     }
 
-    // optional uint32 message_id = 2;
-    public static final int MESSAGE_ID_FIELD_NUMBER = 2;
-    private int messageId_;
+    public static final int ID_FIELD_NUMBER = 2;
+    private int id_;
     /**
-     * <code>optional uint32 message_id = 2;</code>
+     * <code>optional uint32 id = 2;</code>
      */
-    public boolean hasMessageId() {
+    public boolean hasId() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
     /**
-     * <code>optional uint32 message_id = 2;</code>
+     * <code>optional uint32 id = 2;</code>
      */
-    public int getMessageId() {
-      return messageId_;
+    public int getId() {
+      return id_;
     }
 
-    // optional bytes data = 3;
     public static final int DATA_FIELD_NUMBER = 3;
     private com.google.protobuf.ByteString data_;
     /**
@@ -1669,15 +1753,32 @@ public final class BinaryMessages {
       return data_;
     }
 
+    public static final int FRAME_FORMAT_FIELD_NUMBER = 4;
+    private com.openxc.BinaryMessages.CanMessage.FrameFormat frameFormat_;
+    /**
+     * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+     */
+    public boolean hasFrameFormat() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+     */
+    public com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat() {
+      return frameFormat_;
+    }
+
     private void initFields() {
       bus_ = 0;
-      messageId_ = 0;
+      id_ = 0;
       data_ = com.google.protobuf.ByteString.EMPTY;
+      frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -1690,11 +1791,14 @@ public final class BinaryMessages {
         output.writeInt32(1, bus_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeUInt32(2, messageId_);
+        output.writeUInt32(2, id_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         output.writeBytes(3, data_);
       }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(4, frameFormat_.getNumber());
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -1710,12 +1814,16 @@ public final class BinaryMessages {
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, messageId_);
+          .computeUInt32Size(2, id_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(3, data_);
       }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, frameFormat_.getNumber());
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -1728,53 +1836,53 @@ public final class BinaryMessages {
       return super.writeReplace();
     }
 
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(byte[] data)
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseDelimitedFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.CanMessage parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseDelimitedFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.RawMessage parseFrom(
+    public static com.openxc.BinaryMessages.CanMessage parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1783,7 +1891,7 @@ public final class BinaryMessages {
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.openxc.BinaryMessages.RawMessage prototype) {
+    public static Builder newBuilder(com.openxc.BinaryMessages.CanMessage prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -1795,24 +1903,25 @@ public final class BinaryMessages {
       return builder;
     }
     /**
-     * Protobuf type {@code openxc.RawMessage}
+     * Protobuf type {@code openxc.CanMessage}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.RawMessageOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.CanMessage)
+        com.openxc.BinaryMessages.CanMessageOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.openxc.BinaryMessages.internal_static_openxc_RawMessage_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.openxc.BinaryMessages.internal_static_openxc_RawMessage_fieldAccessorTable
+        return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.openxc.BinaryMessages.RawMessage.class, com.openxc.BinaryMessages.RawMessage.Builder.class);
+                com.openxc.BinaryMessages.CanMessage.class, com.openxc.BinaryMessages.CanMessage.Builder.class);
       }
 
-      // Construct using com.openxc.BinaryMessages.RawMessage.newBuilder()
+      // Construct using com.openxc.BinaryMessages.CanMessage.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1834,10 +1943,12 @@ public final class BinaryMessages {
         super.clear();
         bus_ = 0;
         bitField0_ = (bitField0_ & ~0x00000001);
-        messageId_ = 0;
+        id_ = 0;
         bitField0_ = (bitField0_ & ~0x00000002);
         data_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000004);
+        frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
 
@@ -1847,23 +1958,23 @@ public final class BinaryMessages {
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.openxc.BinaryMessages.internal_static_openxc_RawMessage_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_descriptor;
       }
 
-      public com.openxc.BinaryMessages.RawMessage getDefaultInstanceForType() {
-        return com.openxc.BinaryMessages.RawMessage.getDefaultInstance();
+      public com.openxc.BinaryMessages.CanMessage getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
       }
 
-      public com.openxc.BinaryMessages.RawMessage build() {
-        com.openxc.BinaryMessages.RawMessage result = buildPartial();
+      public com.openxc.BinaryMessages.CanMessage build() {
+        com.openxc.BinaryMessages.CanMessage result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public com.openxc.BinaryMessages.RawMessage buildPartial() {
-        com.openxc.BinaryMessages.RawMessage result = new com.openxc.BinaryMessages.RawMessage(this);
+      public com.openxc.BinaryMessages.CanMessage buildPartial() {
+        com.openxc.BinaryMessages.CanMessage result = new com.openxc.BinaryMessages.CanMessage(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
@@ -1873,36 +1984,43 @@ public final class BinaryMessages {
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.messageId_ = messageId_;
+        result.id_ = id_;
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
         result.data_ = data_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.frameFormat_ = frameFormat_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.openxc.BinaryMessages.RawMessage) {
-          return mergeFrom((com.openxc.BinaryMessages.RawMessage)other);
+        if (other instanceof com.openxc.BinaryMessages.CanMessage) {
+          return mergeFrom((com.openxc.BinaryMessages.CanMessage)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.openxc.BinaryMessages.RawMessage other) {
-        if (other == com.openxc.BinaryMessages.RawMessage.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.openxc.BinaryMessages.CanMessage other) {
+        if (other == com.openxc.BinaryMessages.CanMessage.getDefaultInstance()) return this;
         if (other.hasBus()) {
           setBus(other.getBus());
         }
-        if (other.hasMessageId()) {
-          setMessageId(other.getMessageId());
+        if (other.hasId()) {
+          setId(other.getId());
         }
         if (other.hasData()) {
           setData(other.getData());
         }
+        if (other.hasFrameFormat()) {
+          setFrameFormat(other.getFrameFormat());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -1915,11 +2033,11 @@ public final class BinaryMessages {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.openxc.BinaryMessages.RawMessage parsedMessage = null;
+        com.openxc.BinaryMessages.CanMessage parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.openxc.BinaryMessages.RawMessage) e.getUnfinishedMessage();
+          parsedMessage = (com.openxc.BinaryMessages.CanMessage) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
@@ -1930,7 +2048,6 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional int32 bus = 1;
       private int bus_ ;
       /**
        * <code>optional int32 bus = 1;</code>
@@ -1963,40 +2080,38 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 message_id = 2;
-      private int messageId_ ;
+      private int id_ ;
       /**
-       * <code>optional uint32 message_id = 2;</code>
+       * <code>optional uint32 id = 2;</code>
        */
-      public boolean hasMessageId() {
+      public boolean hasId() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
       /**
-       * <code>optional uint32 message_id = 2;</code>
+       * <code>optional uint32 id = 2;</code>
        */
-      public int getMessageId() {
-        return messageId_;
+      public int getId() {
+        return id_;
       }
       /**
-       * <code>optional uint32 message_id = 2;</code>
+       * <code>optional uint32 id = 2;</code>
        */
-      public Builder setMessageId(int value) {
+      public Builder setId(int value) {
         bitField0_ |= 0x00000002;
-        messageId_ = value;
+        id_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional uint32 message_id = 2;</code>
+       * <code>optional uint32 id = 2;</code>
        */
-      public Builder clearMessageId() {
+      public Builder clearId() {
         bitField0_ = (bitField0_ & ~0x00000002);
-        messageId_ = 0;
+        id_ = 0;
         onChanged();
         return this;
       }
 
-      // optional bytes data = 3;
       private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
       /**
        * <code>optional bytes data = 3;</code>
@@ -2032,21 +2147,56 @@ public final class BinaryMessages {
         return this;
       }
 
-      // @@protoc_insertion_point(builder_scope:openxc.RawMessage)
+      private com.openxc.BinaryMessages.CanMessage.FrameFormat frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
+      /**
+       * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+       */
+      public boolean hasFrameFormat() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+       */
+      public com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat() {
+        return frameFormat_;
+      }
+      /**
+       * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+       */
+      public Builder setFrameFormat(com.openxc.BinaryMessages.CanMessage.FrameFormat value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000008;
+        frameFormat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional .openxc.CanMessage.FrameFormat frame_format = 4;</code>
+       */
+      public Builder clearFrameFormat() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.CanMessage)
     }
 
     static {
-      defaultInstance = new RawMessage(true);
+      defaultInstance = new CanMessage(true);
       defaultInstance.initFields();
     }
 
-    // @@protoc_insertion_point(class_scope:openxc.RawMessage)
+    // @@protoc_insertion_point(class_scope:openxc.CanMessage)
   }
 
-  public interface ControlCommandOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface ControlCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.ControlCommand)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional .openxc.ControlCommand.Type type = 1;
     /**
      * <code>optional .openxc.ControlCommand.Type type = 1;</code>
      */
@@ -2056,26 +2206,78 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.ControlCommand.Type getType();
 
-    // optional .openxc.DiagnosticRequest diagnostic_request = 2;
     /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
      */
     boolean hasDiagnosticRequest();
     /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+     */
+    com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest();
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+     */
+    com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder();
+
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    boolean hasPassthroughModeRequest();
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest();
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder();
+
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    boolean hasAcceptanceFilterBypassCommand();
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand();
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder();
+
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    boolean hasPayloadFormatCommand();
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand();
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder();
+
+    /**
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+     */
+    boolean hasPredefinedObd2RequestsCommand();
+    /**
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
      */
-    com.openxc.BinaryMessages.DiagnosticRequest getDiagnosticRequest();
+    com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand();
     /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
      */
-    com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getDiagnosticRequestOrBuilder();
+    com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder();
   }
   /**
    * Protobuf type {@code openxc.ControlCommand}
    */
   public static final class ControlCommand extends
-      com.google.protobuf.GeneratedMessage
-      implements ControlCommandOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.ControlCommand)
+      ControlCommandOrBuilder {
     // Use ControlCommand.newBuilder() to construct.
     private ControlCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -2133,11 +2335,11 @@ public final class BinaryMessages {
               break;
             }
             case 18: {
-              com.openxc.BinaryMessages.DiagnosticRequest.Builder subBuilder = null;
+              com.openxc.BinaryMessages.DiagnosticControlCommand.Builder subBuilder = null;
               if (((bitField0_ & 0x00000002) == 0x00000002)) {
                 subBuilder = diagnosticRequest_.toBuilder();
               }
-              diagnosticRequest_ = input.readMessage(com.openxc.BinaryMessages.DiagnosticRequest.PARSER, extensionRegistry);
+              diagnosticRequest_ = input.readMessage(com.openxc.BinaryMessages.DiagnosticControlCommand.PARSER, extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(diagnosticRequest_);
                 diagnosticRequest_ = subBuilder.buildPartial();
@@ -2145,6 +2347,58 @@ public final class BinaryMessages {
               bitField0_ |= 0x00000002;
               break;
             }
+            case 26: {
+              com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000004) == 0x00000004)) {
+                subBuilder = passthroughModeRequest_.toBuilder();
+              }
+              passthroughModeRequest_ = input.readMessage(com.openxc.BinaryMessages.PassthroughModeControlCommand.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(passthroughModeRequest_);
+                passthroughModeRequest_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000004;
+              break;
+            }
+            case 34: {
+              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000008) == 0x00000008)) {
+                subBuilder = acceptanceFilterBypassCommand_.toBuilder();
+              }
+              acceptanceFilterBypassCommand_ = input.readMessage(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(acceptanceFilterBypassCommand_);
+                acceptanceFilterBypassCommand_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000008;
+              break;
+            }
+            case 42: {
+              com.openxc.BinaryMessages.PayloadFormatCommand.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000010) == 0x00000010)) {
+                subBuilder = payloadFormatCommand_.toBuilder();
+              }
+              payloadFormatCommand_ = input.readMessage(com.openxc.BinaryMessages.PayloadFormatCommand.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(payloadFormatCommand_);
+                payloadFormatCommand_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000010;
+              break;
+            }
+            case 50: {
+              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000020) == 0x00000020)) {
+                subBuilder = predefinedObd2RequestsCommand_.toBuilder();
+              }
+              predefinedObd2RequestsCommand_ = input.readMessage(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(predefinedObd2RequestsCommand_);
+                predefinedObd2RequestsCommand_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000020;
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -2201,6 +2455,22 @@ public final class BinaryMessages {
        * <code>DIAGNOSTIC = 3;</code>
        */
       DIAGNOSTIC(2, 3),
+      /**
+       * <code>PASSTHROUGH = 4;</code>
+       */
+      PASSTHROUGH(3, 4),
+      /**
+       * <code>ACCEPTANCE_FILTER_BYPASS = 5;</code>
+       */
+      ACCEPTANCE_FILTER_BYPASS(4, 5),
+      /**
+       * <code>PAYLOAD_FORMAT = 6;</code>
+       */
+      PAYLOAD_FORMAT(5, 6),
+      /**
+       * <code>PREDEFINED_OBD2_REQUESTS = 7;</code>
+       */
+      PREDEFINED_OBD2_REQUESTS(6, 7),
       ;
 
       /**
@@ -2215,6 +2485,22 @@ public final class BinaryMessages {
        * <code>DIAGNOSTIC = 3;</code>
        */
       public static final int DIAGNOSTIC_VALUE = 3;
+      /**
+       * <code>PASSTHROUGH = 4;</code>
+       */
+      public static final int PASSTHROUGH_VALUE = 4;
+      /**
+       * <code>ACCEPTANCE_FILTER_BYPASS = 5;</code>
+       */
+      public static final int ACCEPTANCE_FILTER_BYPASS_VALUE = 5;
+      /**
+       * <code>PAYLOAD_FORMAT = 6;</code>
+       */
+      public static final int PAYLOAD_FORMAT_VALUE = 6;
+      /**
+       * <code>PREDEFINED_OBD2_REQUESTS = 7;</code>
+       */
+      public static final int PREDEFINED_OBD2_REQUESTS_VALUE = 7;
 
 
       public final int getNumber() { return value; }
@@ -2224,6 +2510,10 @@ public final class BinaryMessages {
           case 1: return VERSION;
           case 2: return DEVICE_ID;
           case 3: return DIAGNOSTIC;
+          case 4: return PASSTHROUGH;
+          case 5: return ACCEPTANCE_FILTER_BYPASS;
+          case 6: return PAYLOAD_FORMAT;
+          case 7: return PREDEFINED_OBD2_REQUESTS;
           default: return null;
         }
       }
@@ -2267,61 +2557,3368 @@ public final class BinaryMessages {
       private final int index;
       private final int value;
 
-      private Type(int index, int value) {
-        this.index = index;
-        this.value = value;
+      private Type(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:openxc.ControlCommand.Type)
+    }
+
+    private int bitField0_;
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private com.openxc.BinaryMessages.ControlCommand.Type type_;
+    /**
+     * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+     */
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+     */
+    public com.openxc.BinaryMessages.ControlCommand.Type getType() {
+      return type_;
+    }
+
+    public static final int DIAGNOSTIC_REQUEST_FIELD_NUMBER = 2;
+    private com.openxc.BinaryMessages.DiagnosticControlCommand diagnosticRequest_;
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+     */
+    public boolean hasDiagnosticRequest() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+     */
+    public com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest() {
+      return diagnosticRequest_;
+    }
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+     */
+    public com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder() {
+      return diagnosticRequest_;
+    }
+
+    public static final int PASSTHROUGH_MODE_REQUEST_FIELD_NUMBER = 3;
+    private com.openxc.BinaryMessages.PassthroughModeControlCommand passthroughModeRequest_;
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    public boolean hasPassthroughModeRequest() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    public com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest() {
+      return passthroughModeRequest_;
+    }
+    /**
+     * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+     */
+    public com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder() {
+      return passthroughModeRequest_;
+    }
+
+    public static final int ACCEPTANCE_FILTER_BYPASS_COMMAND_FIELD_NUMBER = 4;
+    private com.openxc.BinaryMessages.AcceptanceFilterBypassCommand acceptanceFilterBypassCommand_;
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    public boolean hasAcceptanceFilterBypassCommand() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand() {
+      return acceptanceFilterBypassCommand_;
+    }
+    /**
+     * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+     */
+    public com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder() {
+      return acceptanceFilterBypassCommand_;
+    }
+
+    public static final int PAYLOAD_FORMAT_COMMAND_FIELD_NUMBER = 5;
+    private com.openxc.BinaryMessages.PayloadFormatCommand payloadFormatCommand_;
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    public boolean hasPayloadFormatCommand() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    public com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand() {
+      return payloadFormatCommand_;
+    }
+    /**
+     * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+     */
+    public com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder() {
+      return payloadFormatCommand_;
+    }
+
+    public static final int PREDEFINED_OBD2_REQUESTS_COMMAND_FIELD_NUMBER = 6;
+    private com.openxc.BinaryMessages.PredefinedObd2RequestsCommand predefinedObd2RequestsCommand_;
+    /**
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+     */
+    public boolean hasPredefinedObd2RequestsCommand() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+     */
+    public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand() {
+      return predefinedObd2RequestsCommand_;
+    }
+    /**
+     * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+     */
+    public com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder() {
+      return predefinedObd2RequestsCommand_;
+    }
+
+    private void initFields() {
+      type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+      diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
+      passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
+      acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
+      payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
+      predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(2, diagnosticRequest_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(3, passthroughModeRequest_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(4, acceptanceFilterBypassCommand_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeMessage(5, payloadFormatCommand_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeMessage(6, predefinedObd2RequestsCommand_);
+      }
+      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
+          .computeEnumSize(1, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, diagnosticRequest_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, passthroughModeRequest_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, acceptanceFilterBypassCommand_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, payloadFormatCommand_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, predefinedObd2RequestsCommand_);
+      }
+      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.ControlCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.ControlCommand 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;
+    }
+    /**
+     * Protobuf type {@code openxc.ControlCommand}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.ControlCommand)
+        com.openxc.BinaryMessages.ControlCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.openxc.BinaryMessages.ControlCommand.class, com.openxc.BinaryMessages.ControlCommand.Builder.class);
+      }
+
+      // Construct using com.openxc.BinaryMessages.ControlCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getDiagnosticRequestFieldBuilder();
+          getPassthroughModeRequestFieldBuilder();
+          getAcceptanceFilterBypassCommandFieldBuilder();
+          getPayloadFormatCommandFieldBuilder();
+          getPredefinedObd2RequestsCommandFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (diagnosticRequestBuilder_ == null) {
+          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
+        } else {
+          diagnosticRequestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (passthroughModeRequestBuilder_ == null) {
+          passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
+        } else {
+          passthroughModeRequestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
+        } else {
+          acceptanceFilterBypassCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        if (payloadFormatCommandBuilder_ == null) {
+          payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
+        } else {
+          payloadFormatCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000010);
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
+        } else {
+          predefinedObd2RequestsCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
+      }
+
+      public com.openxc.BinaryMessages.ControlCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
+      }
+
+      public com.openxc.BinaryMessages.ControlCommand build() {
+        com.openxc.BinaryMessages.ControlCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.openxc.BinaryMessages.ControlCommand buildPartial() {
+        com.openxc.BinaryMessages.ControlCommand result = new com.openxc.BinaryMessages.ControlCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.type_ = type_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        if (diagnosticRequestBuilder_ == null) {
+          result.diagnosticRequest_ = diagnosticRequest_;
+        } else {
+          result.diagnosticRequest_ = diagnosticRequestBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (passthroughModeRequestBuilder_ == null) {
+          result.passthroughModeRequest_ = passthroughModeRequest_;
+        } else {
+          result.passthroughModeRequest_ = passthroughModeRequestBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          result.acceptanceFilterBypassCommand_ = acceptanceFilterBypassCommand_;
+        } else {
+          result.acceptanceFilterBypassCommand_ = acceptanceFilterBypassCommandBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        if (payloadFormatCommandBuilder_ == null) {
+          result.payloadFormatCommand_ = payloadFormatCommand_;
+        } else {
+          result.payloadFormatCommand_ = payloadFormatCommandBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          result.predefinedObd2RequestsCommand_ = predefinedObd2RequestsCommand_;
+        } else {
+          result.predefinedObd2RequestsCommand_ = predefinedObd2RequestsCommandBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.ControlCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.ControlCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.openxc.BinaryMessages.ControlCommand other) {
+        if (other == com.openxc.BinaryMessages.ControlCommand.getDefaultInstance()) return this;
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        if (other.hasDiagnosticRequest()) {
+          mergeDiagnosticRequest(other.getDiagnosticRequest());
+        }
+        if (other.hasPassthroughModeRequest()) {
+          mergePassthroughModeRequest(other.getPassthroughModeRequest());
+        }
+        if (other.hasAcceptanceFilterBypassCommand()) {
+          mergeAcceptanceFilterBypassCommand(other.getAcceptanceFilterBypassCommand());
+        }
+        if (other.hasPayloadFormatCommand()) {
+          mergePayloadFormatCommand(other.getPayloadFormatCommand());
+        }
+        if (other.hasPredefinedObd2RequestsCommand()) {
+          mergePredefinedObd2RequestsCommand(other.getPredefinedObd2RequestsCommand());
+        }
+        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.openxc.BinaryMessages.ControlCommand parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.openxc.BinaryMessages.ControlCommand) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private com.openxc.BinaryMessages.ControlCommand.Type type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+      /**
+       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       */
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       */
+      public com.openxc.BinaryMessages.ControlCommand.Type getType() {
+        return type_;
+      }
+      /**
+       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       */
+      public Builder setType(com.openxc.BinaryMessages.ControlCommand.Type value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       */
+      public Builder clearType() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+        onChanged();
+        return this;
+      }
+
+      private com.openxc.BinaryMessages.DiagnosticControlCommand diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder> diagnosticRequestBuilder_;
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public boolean hasDiagnosticRequest() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest() {
+        if (diagnosticRequestBuilder_ == null) {
+          return diagnosticRequest_;
+        } else {
+          return diagnosticRequestBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public Builder setDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticControlCommand value) {
+        if (diagnosticRequestBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          diagnosticRequest_ = value;
+          onChanged();
+        } else {
+          diagnosticRequestBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public Builder setDiagnosticRequest(
+          com.openxc.BinaryMessages.DiagnosticControlCommand.Builder builderForValue) {
+        if (diagnosticRequestBuilder_ == null) {
+          diagnosticRequest_ = builderForValue.build();
+          onChanged();
+        } else {
+          diagnosticRequestBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public Builder mergeDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticControlCommand value) {
+        if (diagnosticRequestBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002) &&
+              diagnosticRequest_ != com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance()) {
+            diagnosticRequest_ =
+              com.openxc.BinaryMessages.DiagnosticControlCommand.newBuilder(diagnosticRequest_).mergeFrom(value).buildPartial();
+          } else {
+            diagnosticRequest_ = value;
+          }
+          onChanged();
+        } else {
+          diagnosticRequestBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public Builder clearDiagnosticRequest() {
+        if (diagnosticRequestBuilder_ == null) {
+          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          diagnosticRequestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticControlCommand.Builder getDiagnosticRequestBuilder() {
+        bitField0_ |= 0x00000002;
+        onChanged();
+        return getDiagnosticRequestFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder() {
+        if (diagnosticRequestBuilder_ != null) {
+          return diagnosticRequestBuilder_.getMessageOrBuilder();
+        } else {
+          return diagnosticRequest_;
+        }
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand diagnostic_request = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder> 
+          getDiagnosticRequestFieldBuilder() {
+        if (diagnosticRequestBuilder_ == null) {
+          diagnosticRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder>(
+                  getDiagnosticRequest(),
+                  getParentForChildren(),
+                  isClean());
+          diagnosticRequest_ = null;
+        }
+        return diagnosticRequestBuilder_;
+      }
+
+      private com.openxc.BinaryMessages.PassthroughModeControlCommand passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder> passthroughModeRequestBuilder_;
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public boolean hasPassthroughModeRequest() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest() {
+        if (passthroughModeRequestBuilder_ == null) {
+          return passthroughModeRequest_;
+        } else {
+          return passthroughModeRequestBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public Builder setPassthroughModeRequest(com.openxc.BinaryMessages.PassthroughModeControlCommand value) {
+        if (passthroughModeRequestBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          passthroughModeRequest_ = value;
+          onChanged();
+        } else {
+          passthroughModeRequestBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public Builder setPassthroughModeRequest(
+          com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder builderForValue) {
+        if (passthroughModeRequestBuilder_ == null) {
+          passthroughModeRequest_ = builderForValue.build();
+          onChanged();
+        } else {
+          passthroughModeRequestBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public Builder mergePassthroughModeRequest(com.openxc.BinaryMessages.PassthroughModeControlCommand value) {
+        if (passthroughModeRequestBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              passthroughModeRequest_ != com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance()) {
+            passthroughModeRequest_ =
+              com.openxc.BinaryMessages.PassthroughModeControlCommand.newBuilder(passthroughModeRequest_).mergeFrom(value).buildPartial();
+          } else {
+            passthroughModeRequest_ = value;
+          }
+          onChanged();
+        } else {
+          passthroughModeRequestBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public Builder clearPassthroughModeRequest() {
+        if (passthroughModeRequestBuilder_ == null) {
+          passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          passthroughModeRequestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder getPassthroughModeRequestBuilder() {
+        bitField0_ |= 0x00000004;
+        onChanged();
+        return getPassthroughModeRequestFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      public com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder() {
+        if (passthroughModeRequestBuilder_ != null) {
+          return passthroughModeRequestBuilder_.getMessageOrBuilder();
+        } else {
+          return passthroughModeRequest_;
+        }
+      }
+      /**
+       * <code>optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder> 
+          getPassthroughModeRequestFieldBuilder() {
+        if (passthroughModeRequestBuilder_ == null) {
+          passthroughModeRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder>(
+                  getPassthroughModeRequest(),
+                  getParentForChildren(),
+                  isClean());
+          passthroughModeRequest_ = null;
+        }
+        return passthroughModeRequestBuilder_;
+      }
+
+      private com.openxc.BinaryMessages.AcceptanceFilterBypassCommand acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder> acceptanceFilterBypassCommandBuilder_;
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public boolean hasAcceptanceFilterBypassCommand() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand() {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          return acceptanceFilterBypassCommand_;
+        } else {
+          return acceptanceFilterBypassCommandBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public Builder setAcceptanceFilterBypassCommand(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand value) {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          acceptanceFilterBypassCommand_ = value;
+          onChanged();
+        } else {
+          acceptanceFilterBypassCommandBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public Builder setAcceptanceFilterBypassCommand(
+          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder builderForValue) {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          acceptanceFilterBypassCommand_ = builderForValue.build();
+          onChanged();
+        } else {
+          acceptanceFilterBypassCommandBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public Builder mergeAcceptanceFilterBypassCommand(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand value) {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              acceptanceFilterBypassCommand_ != com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance()) {
+            acceptanceFilterBypassCommand_ =
+              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.newBuilder(acceptanceFilterBypassCommand_).mergeFrom(value).buildPartial();
+          } else {
+            acceptanceFilterBypassCommand_ = value;
+          }
+          onChanged();
+        } else {
+          acceptanceFilterBypassCommandBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public Builder clearAcceptanceFilterBypassCommand() {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          acceptanceFilterBypassCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder getAcceptanceFilterBypassCommandBuilder() {
+        bitField0_ |= 0x00000008;
+        onChanged();
+        return getAcceptanceFilterBypassCommandFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder() {
+        if (acceptanceFilterBypassCommandBuilder_ != null) {
+          return acceptanceFilterBypassCommandBuilder_.getMessageOrBuilder();
+        } else {
+          return acceptanceFilterBypassCommand_;
+        }
+      }
+      /**
+       * <code>optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder> 
+          getAcceptanceFilterBypassCommandFieldBuilder() {
+        if (acceptanceFilterBypassCommandBuilder_ == null) {
+          acceptanceFilterBypassCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder>(
+                  getAcceptanceFilterBypassCommand(),
+                  getParentForChildren(),
+                  isClean());
+          acceptanceFilterBypassCommand_ = null;
+        }
+        return acceptanceFilterBypassCommandBuilder_;
+      }
+
+      private com.openxc.BinaryMessages.PayloadFormatCommand payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder> payloadFormatCommandBuilder_;
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public boolean hasPayloadFormatCommand() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand() {
+        if (payloadFormatCommandBuilder_ == null) {
+          return payloadFormatCommand_;
+        } else {
+          return payloadFormatCommandBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public Builder setPayloadFormatCommand(com.openxc.BinaryMessages.PayloadFormatCommand value) {
+        if (payloadFormatCommandBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          payloadFormatCommand_ = value;
+          onChanged();
+        } else {
+          payloadFormatCommandBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public Builder setPayloadFormatCommand(
+          com.openxc.BinaryMessages.PayloadFormatCommand.Builder builderForValue) {
+        if (payloadFormatCommandBuilder_ == null) {
+          payloadFormatCommand_ = builderForValue.build();
+          onChanged();
+        } else {
+          payloadFormatCommandBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public Builder mergePayloadFormatCommand(com.openxc.BinaryMessages.PayloadFormatCommand value) {
+        if (payloadFormatCommandBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010) &&
+              payloadFormatCommand_ != com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance()) {
+            payloadFormatCommand_ =
+              com.openxc.BinaryMessages.PayloadFormatCommand.newBuilder(payloadFormatCommand_).mergeFrom(value).buildPartial();
+          } else {
+            payloadFormatCommand_ = value;
+          }
+          onChanged();
+        } else {
+          payloadFormatCommandBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public Builder clearPayloadFormatCommand() {
+        if (payloadFormatCommandBuilder_ == null) {
+          payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          payloadFormatCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public com.openxc.BinaryMessages.PayloadFormatCommand.Builder getPayloadFormatCommandBuilder() {
+        bitField0_ |= 0x00000010;
+        onChanged();
+        return getPayloadFormatCommandFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      public com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder() {
+        if (payloadFormatCommandBuilder_ != null) {
+          return payloadFormatCommandBuilder_.getMessageOrBuilder();
+        } else {
+          return payloadFormatCommand_;
+        }
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand payload_format_command = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder> 
+          getPayloadFormatCommandFieldBuilder() {
+        if (payloadFormatCommandBuilder_ == null) {
+          payloadFormatCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder>(
+                  getPayloadFormatCommand(),
+                  getParentForChildren(),
+                  isClean());
+          payloadFormatCommand_ = null;
+        }
+        return payloadFormatCommandBuilder_;
+      }
+
+      private com.openxc.BinaryMessages.PredefinedObd2RequestsCommand predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder> predefinedObd2RequestsCommandBuilder_;
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public boolean hasPredefinedObd2RequestsCommand() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand() {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          return predefinedObd2RequestsCommand_;
+        } else {
+          return predefinedObd2RequestsCommandBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public Builder setPredefinedObd2RequestsCommand(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand value) {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          predefinedObd2RequestsCommand_ = value;
+          onChanged();
+        } else {
+          predefinedObd2RequestsCommandBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000020;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public Builder setPredefinedObd2RequestsCommand(
+          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder builderForValue) {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          predefinedObd2RequestsCommand_ = builderForValue.build();
+          onChanged();
+        } else {
+          predefinedObd2RequestsCommandBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000020;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public Builder mergePredefinedObd2RequestsCommand(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand value) {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          if (((bitField0_ & 0x00000020) == 0x00000020) &&
+              predefinedObd2RequestsCommand_ != com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance()) {
+            predefinedObd2RequestsCommand_ =
+              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.newBuilder(predefinedObd2RequestsCommand_).mergeFrom(value).buildPartial();
+          } else {
+            predefinedObd2RequestsCommand_ = value;
+          }
+          onChanged();
+        } else {
+          predefinedObd2RequestsCommandBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000020;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public Builder clearPredefinedObd2RequestsCommand() {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
+          onChanged();
+        } else {
+          predefinedObd2RequestsCommandBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder getPredefinedObd2RequestsCommandBuilder() {
+        bitField0_ |= 0x00000020;
+        onChanged();
+        return getPredefinedObd2RequestsCommandFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder() {
+        if (predefinedObd2RequestsCommandBuilder_ != null) {
+          return predefinedObd2RequestsCommandBuilder_.getMessageOrBuilder();
+        } else {
+          return predefinedObd2RequestsCommand_;
+        }
+      }
+      /**
+       * <code>optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder> 
+          getPredefinedObd2RequestsCommandFieldBuilder() {
+        if (predefinedObd2RequestsCommandBuilder_ == null) {
+          predefinedObd2RequestsCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder>(
+                  getPredefinedObd2RequestsCommand(),
+                  getParentForChildren(),
+                  isClean());
+          predefinedObd2RequestsCommand_ = null;
+        }
+        return predefinedObd2RequestsCommandBuilder_;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.ControlCommand)
+    }
+
+    static {
+      defaultInstance = new ControlCommand(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:openxc.ControlCommand)
+  }
+
+  public interface DiagnosticControlCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.DiagnosticControlCommand)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    boolean hasRequest();
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    com.openxc.BinaryMessages.DiagnosticRequest getRequest();
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder();
+
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+     */
+    boolean hasAction();
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+     */
+    com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction();
+  }
+  /**
+   * Protobuf type {@code openxc.DiagnosticControlCommand}
+   */
+  public static final class DiagnosticControlCommand extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.DiagnosticControlCommand)
+      DiagnosticControlCommandOrBuilder {
+    // Use DiagnosticControlCommand.newBuilder() to construct.
+    private DiagnosticControlCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private DiagnosticControlCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final DiagnosticControlCommand defaultInstance;
+    public static DiagnosticControlCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public DiagnosticControlCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DiagnosticControlCommand(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              com.openxc.BinaryMessages.DiagnosticRequest.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = request_.toBuilder();
+              }
+              request_ = input.readMessage(com.openxc.BinaryMessages.DiagnosticRequest.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(request_);
+                request_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+              com.openxc.BinaryMessages.DiagnosticControlCommand.Action value = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(2, rawValue);
+              } else {
+                bitField0_ |= 0x00000002;
+                action_ = value;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.openxc.BinaryMessages.DiagnosticControlCommand.class, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<DiagnosticControlCommand> PARSER =
+        new com.google.protobuf.AbstractParser<DiagnosticControlCommand>() {
+      public DiagnosticControlCommand parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DiagnosticControlCommand(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DiagnosticControlCommand> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code openxc.DiagnosticControlCommand.Action}
+     */
+    public enum Action
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>ADD = 1;</code>
+       */
+      ADD(0, 1),
+      /**
+       * <code>CANCEL = 2;</code>
+       */
+      CANCEL(1, 2),
+      ;
+
+      /**
+       * <code>ADD = 1;</code>
+       */
+      public static final int ADD_VALUE = 1;
+      /**
+       * <code>CANCEL = 2;</code>
+       */
+      public static final int CANCEL_VALUE = 2;
+
+
+      public final int getNumber() { return value; }
+
+      public static Action valueOf(int value) {
+        switch (value) {
+          case 1: return ADD;
+          case 2: return CANCEL;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<Action>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<Action>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<Action>() {
+              public Action findValueByNumber(int number) {
+                return Action.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.DiagnosticControlCommand.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final Action[] VALUES = values();
+
+      public static Action valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private Action(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:openxc.DiagnosticControlCommand.Action)
+    }
+
+    private int bitField0_;
+    public static final int REQUEST_FIELD_NUMBER = 1;
+    private com.openxc.BinaryMessages.DiagnosticRequest request_;
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    public boolean hasRequest() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    public com.openxc.BinaryMessages.DiagnosticRequest getRequest() {
+      return request_;
+    }
+    /**
+     * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+     */
+    public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder() {
+      return request_;
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 2;
+    private com.openxc.BinaryMessages.DiagnosticControlCommand.Action action_;
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+     */
+    public boolean hasAction() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+     */
+    public com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction() {
+      return action_;
+    }
+
+    private void initFields() {
+      request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
+      action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(1, request_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeEnum(2, action_.getNumber());
+      }
+      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
+          .computeMessageSize(1, request_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, action_.getNumber());
+      }
+      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.DiagnosticControlCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.DiagnosticControlCommand 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;
+    }
+    /**
+     * Protobuf type {@code openxc.DiagnosticControlCommand}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.DiagnosticControlCommand)
+        com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.openxc.BinaryMessages.DiagnosticControlCommand.class, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder.class);
+      }
+
+      // Construct using com.openxc.BinaryMessages.DiagnosticControlCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getRequestFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        if (requestBuilder_ == null) {
+          request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
+        } else {
+          requestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000001);
+        action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_descriptor;
+      }
+
+      public com.openxc.BinaryMessages.DiagnosticControlCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
+      }
+
+      public com.openxc.BinaryMessages.DiagnosticControlCommand build() {
+        com.openxc.BinaryMessages.DiagnosticControlCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.openxc.BinaryMessages.DiagnosticControlCommand buildPartial() {
+        com.openxc.BinaryMessages.DiagnosticControlCommand result = new com.openxc.BinaryMessages.DiagnosticControlCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        if (requestBuilder_ == null) {
+          result.request_ = request_;
+        } else {
+          result.request_ = requestBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.action_ = action_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.DiagnosticControlCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.DiagnosticControlCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.openxc.BinaryMessages.DiagnosticControlCommand other) {
+        if (other == com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance()) return this;
+        if (other.hasRequest()) {
+          mergeRequest(other.getRequest());
+        }
+        if (other.hasAction()) {
+          setAction(other.getAction());
+        }
+        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.openxc.BinaryMessages.DiagnosticControlCommand parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.openxc.BinaryMessages.DiagnosticControlCommand) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private com.openxc.BinaryMessages.DiagnosticRequest request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> requestBuilder_;
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public boolean hasRequest() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticRequest getRequest() {
+        if (requestBuilder_ == null) {
+          return request_;
+        } else {
+          return requestBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public Builder setRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
+        if (requestBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          request_ = value;
+          onChanged();
+        } else {
+          requestBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public Builder setRequest(
+          com.openxc.BinaryMessages.DiagnosticRequest.Builder builderForValue) {
+        if (requestBuilder_ == null) {
+          request_ = builderForValue.build();
+          onChanged();
+        } else {
+          requestBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public Builder mergeRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
+        if (requestBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001) &&
+              request_ != com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance()) {
+            request_ =
+              com.openxc.BinaryMessages.DiagnosticRequest.newBuilder(request_).mergeFrom(value).buildPartial();
+          } else {
+            request_ = value;
+          }
+          onChanged();
+        } else {
+          requestBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public Builder clearRequest() {
+        if (requestBuilder_ == null) {
+          request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
+          onChanged();
+        } else {
+          requestBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticRequest.Builder getRequestBuilder() {
+        bitField0_ |= 0x00000001;
+        onChanged();
+        return getRequestFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder() {
+        if (requestBuilder_ != null) {
+          return requestBuilder_.getMessageOrBuilder();
+        } else {
+          return request_;
+        }
+      }
+      /**
+       * <code>optional .openxc.DiagnosticRequest request = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> 
+          getRequestFieldBuilder() {
+        if (requestBuilder_ == null) {
+          requestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder>(
+                  getRequest(),
+                  getParentForChildren(),
+                  isClean());
+          request_ = null;
+        }
+        return requestBuilder_;
+      }
+
+      private com.openxc.BinaryMessages.DiagnosticControlCommand.Action action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+       */
+      public boolean hasAction() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+       */
+      public com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction() {
+        return action_;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+       */
+      public Builder setAction(com.openxc.BinaryMessages.DiagnosticControlCommand.Action value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000002;
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional .openxc.DiagnosticControlCommand.Action action = 2;</code>
+       */
+      public Builder clearAction() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.DiagnosticControlCommand)
+    }
+
+    static {
+      defaultInstance = new DiagnosticControlCommand(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:openxc.DiagnosticControlCommand)
+  }
+
+  public interface PassthroughModeControlCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.PassthroughModeControlCommand)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    boolean hasBus();
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    int getBus();
+
+    /**
+     * <code>optional bool enabled = 2;</code>
+     */
+    boolean hasEnabled();
+    /**
+     * <code>optional bool enabled = 2;</code>
+     */
+    boolean getEnabled();
+  }
+  /**
+   * Protobuf type {@code openxc.PassthroughModeControlCommand}
+   */
+  public static final class PassthroughModeControlCommand extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.PassthroughModeControlCommand)
+      PassthroughModeControlCommandOrBuilder {
+    // Use PassthroughModeControlCommand.newBuilder() to construct.
+    private PassthroughModeControlCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private PassthroughModeControlCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final PassthroughModeControlCommand defaultInstance;
+    public static PassthroughModeControlCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public PassthroughModeControlCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PassthroughModeControlCommand(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              bus_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              enabled_ = input.readBool();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.openxc.BinaryMessages.PassthroughModeControlCommand.class, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<PassthroughModeControlCommand> PARSER =
+        new com.google.protobuf.AbstractParser<PassthroughModeControlCommand>() {
+      public PassthroughModeControlCommand parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PassthroughModeControlCommand(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PassthroughModeControlCommand> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    public static final int BUS_FIELD_NUMBER = 1;
+    private int bus_;
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    public boolean hasBus() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    public int getBus() {
+      return bus_;
+    }
+
+    public static final int ENABLED_FIELD_NUMBER = 2;
+    private boolean enabled_;
+    /**
+     * <code>optional bool enabled = 2;</code>
+     */
+    public boolean hasEnabled() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bool enabled = 2;</code>
+     */
+    public boolean getEnabled() {
+      return enabled_;
+    }
+
+    private void initFields() {
+      bus_ = 0;
+      enabled_ = false;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, bus_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, enabled_);
+      }
+      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
+          .computeInt32Size(1, bus_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, enabled_);
+      }
+      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.PassthroughModeControlCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.PassthroughModeControlCommand 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;
+    }
+    /**
+     * Protobuf type {@code openxc.PassthroughModeControlCommand}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.PassthroughModeControlCommand)
+        com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.openxc.BinaryMessages.PassthroughModeControlCommand.class, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder.class);
+      }
+
+      // Construct using com.openxc.BinaryMessages.PassthroughModeControlCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.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();
+        bus_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        enabled_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_descriptor;
+      }
+
+      public com.openxc.BinaryMessages.PassthroughModeControlCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
+      }
+
+      public com.openxc.BinaryMessages.PassthroughModeControlCommand build() {
+        com.openxc.BinaryMessages.PassthroughModeControlCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.openxc.BinaryMessages.PassthroughModeControlCommand buildPartial() {
+        com.openxc.BinaryMessages.PassthroughModeControlCommand result = new com.openxc.BinaryMessages.PassthroughModeControlCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.bus_ = bus_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.enabled_ = enabled_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.PassthroughModeControlCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.PassthroughModeControlCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.openxc.BinaryMessages.PassthroughModeControlCommand other) {
+        if (other == com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance()) return this;
+        if (other.hasBus()) {
+          setBus(other.getBus());
+        }
+        if (other.hasEnabled()) {
+          setEnabled(other.getEnabled());
+        }
+        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.openxc.BinaryMessages.PassthroughModeControlCommand parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.openxc.BinaryMessages.PassthroughModeControlCommand) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private int bus_ ;
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public boolean hasBus() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public int getBus() {
+        return bus_;
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public Builder setBus(int value) {
+        bitField0_ |= 0x00000001;
+        bus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public Builder clearBus() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        bus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private boolean enabled_ ;
+      /**
+       * <code>optional bool enabled = 2;</code>
+       */
+      public boolean hasEnabled() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional bool enabled = 2;</code>
+       */
+      public boolean getEnabled() {
+        return enabled_;
+      }
+      /**
+       * <code>optional bool enabled = 2;</code>
+       */
+      public Builder setEnabled(boolean value) {
+        bitField0_ |= 0x00000002;
+        enabled_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bool enabled = 2;</code>
+       */
+      public Builder clearEnabled() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        enabled_ = false;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.PassthroughModeControlCommand)
+    }
+
+    static {
+      defaultInstance = new PassthroughModeControlCommand(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:openxc.PassthroughModeControlCommand)
+  }
+
+  public interface AcceptanceFilterBypassCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.AcceptanceFilterBypassCommand)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    boolean hasBus();
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    int getBus();
+
+    /**
+     * <code>optional bool bypass = 2;</code>
+     */
+    boolean hasBypass();
+    /**
+     * <code>optional bool bypass = 2;</code>
+     */
+    boolean getBypass();
+  }
+  /**
+   * Protobuf type {@code openxc.AcceptanceFilterBypassCommand}
+   */
+  public static final class AcceptanceFilterBypassCommand extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.AcceptanceFilterBypassCommand)
+      AcceptanceFilterBypassCommandOrBuilder {
+    // Use AcceptanceFilterBypassCommand.newBuilder() to construct.
+    private AcceptanceFilterBypassCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private AcceptanceFilterBypassCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final AcceptanceFilterBypassCommand defaultInstance;
+    public static AcceptanceFilterBypassCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public AcceptanceFilterBypassCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AcceptanceFilterBypassCommand(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              bus_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              bypass_ = input.readBool();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.class, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<AcceptanceFilterBypassCommand> PARSER =
+        new com.google.protobuf.AbstractParser<AcceptanceFilterBypassCommand>() {
+      public AcceptanceFilterBypassCommand parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AcceptanceFilterBypassCommand(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AcceptanceFilterBypassCommand> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    public static final int BUS_FIELD_NUMBER = 1;
+    private int bus_;
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    public boolean hasBus() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional int32 bus = 1;</code>
+     */
+    public int getBus() {
+      return bus_;
+    }
+
+    public static final int BYPASS_FIELD_NUMBER = 2;
+    private boolean bypass_;
+    /**
+     * <code>optional bool bypass = 2;</code>
+     */
+    public boolean hasBypass() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bool bypass = 2;</code>
+     */
+    public boolean getBypass() {
+      return bypass_;
+    }
+
+    private void initFields() {
+      bus_ = 0;
+      bypass_ = false;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, bus_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, bypass_);
+      }
+      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
+          .computeInt32Size(1, bus_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, bypass_);
+      }
+      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.AcceptanceFilterBypassCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand 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;
+    }
+    /**
+     * Protobuf type {@code openxc.AcceptanceFilterBypassCommand}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.AcceptanceFilterBypassCommand)
+        com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.class, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder.class);
+      }
+
+      // Construct using com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.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();
+        bus_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        bypass_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
+      }
+
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
+      }
+
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand build() {
+        com.openxc.BinaryMessages.AcceptanceFilterBypassCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand buildPartial() {
+        com.openxc.BinaryMessages.AcceptanceFilterBypassCommand result = new com.openxc.BinaryMessages.AcceptanceFilterBypassCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.bus_ = bus_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.bypass_ = bypass_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.AcceptanceFilterBypassCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.AcceptanceFilterBypassCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand other) {
+        if (other == com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance()) return this;
+        if (other.hasBus()) {
+          setBus(other.getBus());
+        }
+        if (other.hasBypass()) {
+          setBypass(other.getBypass());
+        }
+        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.openxc.BinaryMessages.AcceptanceFilterBypassCommand parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.openxc.BinaryMessages.AcceptanceFilterBypassCommand) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private int bus_ ;
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public boolean hasBus() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public int getBus() {
+        return bus_;
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public Builder setBus(int value) {
+        bitField0_ |= 0x00000001;
+        bus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 bus = 1;</code>
+       */
+      public Builder clearBus() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        bus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private boolean bypass_ ;
+      /**
+       * <code>optional bool bypass = 2;</code>
+       */
+      public boolean hasBypass() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional bool bypass = 2;</code>
+       */
+      public boolean getBypass() {
+        return bypass_;
+      }
+      /**
+       * <code>optional bool bypass = 2;</code>
+       */
+      public Builder setBypass(boolean value) {
+        bitField0_ |= 0x00000002;
+        bypass_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bool bypass = 2;</code>
+       */
+      public Builder clearBypass() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        bypass_ = false;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.AcceptanceFilterBypassCommand)
+    }
+
+    static {
+      defaultInstance = new AcceptanceFilterBypassCommand(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:openxc.AcceptanceFilterBypassCommand)
+  }
+
+  public interface PayloadFormatCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.PayloadFormatCommand)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+     */
+    boolean hasFormat();
+    /**
+     * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+     */
+    com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat();
+  }
+  /**
+   * Protobuf type {@code openxc.PayloadFormatCommand}
+   */
+  public static final class PayloadFormatCommand extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.PayloadFormatCommand)
+      PayloadFormatCommandOrBuilder {
+    // Use PayloadFormatCommand.newBuilder() to construct.
+    private PayloadFormatCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private PayloadFormatCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final PayloadFormatCommand defaultInstance;
+    public static PayloadFormatCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public PayloadFormatCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PayloadFormatCommand(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              int rawValue = input.readEnum();
+              com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat value = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                format_ = value;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.openxc.BinaryMessages.PayloadFormatCommand.class, com.openxc.BinaryMessages.PayloadFormatCommand.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<PayloadFormatCommand> PARSER =
+        new com.google.protobuf.AbstractParser<PayloadFormatCommand>() {
+      public PayloadFormatCommand parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PayloadFormatCommand(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PayloadFormatCommand> getParserForType() {
+      return PARSER;
+    }
+
+    /**
+     * Protobuf enum {@code openxc.PayloadFormatCommand.PayloadFormat}
+     */
+    public enum PayloadFormat
+        implements com.google.protobuf.ProtocolMessageEnum {
+      /**
+       * <code>JSON = 1;</code>
+       */
+      JSON(0, 1),
+      /**
+       * <code>PROTOBUF = 2;</code>
+       */
+      PROTOBUF(1, 2),
+      ;
+
+      /**
+       * <code>JSON = 1;</code>
+       */
+      public static final int JSON_VALUE = 1;
+      /**
+       * <code>PROTOBUF = 2;</code>
+       */
+      public static final int PROTOBUF_VALUE = 2;
+
+
+      public final int getNumber() { return value; }
+
+      public static PayloadFormat valueOf(int value) {
+        switch (value) {
+          case 1: return JSON;
+          case 2: return PROTOBUF;
+          default: return null;
+        }
+      }
+
+      public static com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>() {
+              public PayloadFormat findValueByNumber(int number) {
+                return PayloadFormat.valueOf(number);
+              }
+            };
+
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.PayloadFormatCommand.getDescriptor().getEnumTypes().get(0);
+      }
+
+      private static final PayloadFormat[] VALUES = values();
+
+      public static PayloadFormat valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+
+      private final int index;
+      private final int value;
+
+      private PayloadFormat(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+
+      // @@protoc_insertion_point(enum_scope:openxc.PayloadFormatCommand.PayloadFormat)
+    }
+
+    private int bitField0_;
+    public static final int FORMAT_FIELD_NUMBER = 1;
+    private com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat format_;
+    /**
+     * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+     */
+    public boolean hasFormat() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+     */
+    public com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat() {
+      return format_;
+    }
+
+    private void initFields() {
+      format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, format_.getNumber());
+      }
+      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
+          .computeEnumSize(1, format_.getNumber());
+      }
+      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.PayloadFormatCommand parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.openxc.BinaryMessages.PayloadFormatCommand 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;
+    }
+    /**
+     * Protobuf type {@code openxc.PayloadFormatCommand}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.PayloadFormatCommand)
+        com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.openxc.BinaryMessages.PayloadFormatCommand.class, com.openxc.BinaryMessages.PayloadFormatCommand.Builder.class);
+      }
+
+      // Construct using com.openxc.BinaryMessages.PayloadFormatCommand.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.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();
+        format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_descriptor;
+      }
+
+      public com.openxc.BinaryMessages.PayloadFormatCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
+      }
+
+      public com.openxc.BinaryMessages.PayloadFormatCommand build() {
+        com.openxc.BinaryMessages.PayloadFormatCommand result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public com.openxc.BinaryMessages.PayloadFormatCommand buildPartial() {
+        com.openxc.BinaryMessages.PayloadFormatCommand result = new com.openxc.BinaryMessages.PayloadFormatCommand(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.format_ = format_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.openxc.BinaryMessages.PayloadFormatCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.PayloadFormatCommand)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.openxc.BinaryMessages.PayloadFormatCommand other) {
+        if (other == com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance()) return this;
+        if (other.hasFormat()) {
+          setFormat(other.getFormat());
+        }
+        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.openxc.BinaryMessages.PayloadFormatCommand parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.openxc.BinaryMessages.PayloadFormatCommand) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
+      /**
+       * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+       */
+      public boolean hasFormat() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+       */
+      public com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat() {
+        return format_;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+       */
+      public Builder setFormat(com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        format_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;</code>
+       */
+      public Builder clearFormat() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:openxc.PayloadFormatCommand)
+    }
+
+    static {
+      defaultInstance = new PayloadFormatCommand(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:openxc.PayloadFormatCommand)
+  }
+
+  public interface PredefinedObd2RequestsCommandOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.PredefinedObd2RequestsCommand)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional bool enabled = 1;</code>
+     */
+    boolean hasEnabled();
+    /**
+     * <code>optional bool enabled = 1;</code>
+     */
+    boolean getEnabled();
+  }
+  /**
+   * Protobuf type {@code openxc.PredefinedObd2RequestsCommand}
+   */
+  public static final class PredefinedObd2RequestsCommand extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.PredefinedObd2RequestsCommand)
+      PredefinedObd2RequestsCommandOrBuilder {
+    // Use PredefinedObd2RequestsCommand.newBuilder() to construct.
+    private PredefinedObd2RequestsCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private PredefinedObd2RequestsCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final PredefinedObd2RequestsCommand defaultInstance;
+    public static PredefinedObd2RequestsCommand getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public PredefinedObd2RequestsCommand getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PredefinedObd2RequestsCommand(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              enabled_ = input.readBool();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.class, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<PredefinedObd2RequestsCommand> PARSER =
+        new com.google.protobuf.AbstractParser<PredefinedObd2RequestsCommand>() {
+      public PredefinedObd2RequestsCommand parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PredefinedObd2RequestsCommand(input, extensionRegistry);
       }
+    };
 
-      // @@protoc_insertion_point(enum_scope:openxc.ControlCommand.Type)
+    @java.lang.Override
+    public com.google.protobuf.Parser<PredefinedObd2RequestsCommand> getParserForType() {
+      return PARSER;
     }
 
     private int bitField0_;
-    // optional .openxc.ControlCommand.Type type = 1;
-    public static final int TYPE_FIELD_NUMBER = 1;
-    private com.openxc.BinaryMessages.ControlCommand.Type type_;
+    public static final int ENABLED_FIELD_NUMBER = 1;
+    private boolean enabled_;
     /**
-     * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+     * <code>optional bool enabled = 1;</code>
      */
-    public boolean hasType() {
+    public boolean hasEnabled() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
     /**
-     * <code>optional .openxc.ControlCommand.Type type = 1;</code>
-     */
-    public com.openxc.BinaryMessages.ControlCommand.Type getType() {
-      return type_;
-    }
-
-    // optional .openxc.DiagnosticRequest diagnostic_request = 2;
-    public static final int DIAGNOSTIC_REQUEST_FIELD_NUMBER = 2;
-    private com.openxc.BinaryMessages.DiagnosticRequest diagnosticRequest_;
-    /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-     */
-    public boolean hasDiagnosticRequest() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
+     * <code>optional bool enabled = 1;</code>
      */
-    public com.openxc.BinaryMessages.DiagnosticRequest getDiagnosticRequest() {
-      return diagnosticRequest_;
-    }
-    /**
-     * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-     */
-    public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getDiagnosticRequestOrBuilder() {
-      return diagnosticRequest_;
+    public boolean getEnabled() {
+      return enabled_;
     }
 
     private void initFields() {
-      type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
-      diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
+      enabled_ = false;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -2331,10 +5928,7 @@ public final class BinaryMessages {
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(2, diagnosticRequest_);
+        output.writeBool(1, enabled_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -2347,11 +5941,7 @@ public final class BinaryMessages {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, diagnosticRequest_);
+          .computeBoolSize(1, enabled_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -2365,53 +5955,53 @@ public final class BinaryMessages {
       return super.writeReplace();
     }
 
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(byte[] data)
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
+    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2420,7 +6010,7 @@ public final class BinaryMessages {
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.openxc.BinaryMessages.ControlCommand prototype) {
+    public static Builder newBuilder(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -2432,24 +6022,25 @@ public final class BinaryMessages {
       return builder;
     }
     /**
-     * Protobuf type {@code openxc.ControlCommand}
+     * Protobuf type {@code openxc.PredefinedObd2RequestsCommand}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.ControlCommandOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.PredefinedObd2RequestsCommand)
+        com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_fieldAccessorTable
+        return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.openxc.BinaryMessages.ControlCommand.class, com.openxc.BinaryMessages.ControlCommand.Builder.class);
+                com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.class, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder.class);
       }
 
-      // Construct using com.openxc.BinaryMessages.ControlCommand.newBuilder()
+      // Construct using com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2461,7 +6052,6 @@ public final class BinaryMessages {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getDiagnosticRequestFieldBuilder();
         }
       }
       private static Builder create() {
@@ -2470,14 +6060,8 @@ public final class BinaryMessages {
 
       public Builder clear() {
         super.clear();
-        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+        enabled_ = false;
         bitField0_ = (bitField0_ & ~0x00000001);
-        if (diagnosticRequestBuilder_ == null) {
-          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
-        } else {
-          diagnosticRequestBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
 
@@ -2487,58 +6071,47 @@ public final class BinaryMessages {
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
       }
 
-      public com.openxc.BinaryMessages.ControlCommand getDefaultInstanceForType() {
-        return com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
       }
 
-      public com.openxc.BinaryMessages.ControlCommand build() {
-        com.openxc.BinaryMessages.ControlCommand result = buildPartial();
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand build() {
+        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public com.openxc.BinaryMessages.ControlCommand buildPartial() {
-        com.openxc.BinaryMessages.ControlCommand result = new com.openxc.BinaryMessages.ControlCommand(this);
+      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand buildPartial() {
+        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand result = new com.openxc.BinaryMessages.PredefinedObd2RequestsCommand(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.type_ = type_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        if (diagnosticRequestBuilder_ == null) {
-          result.diagnosticRequest_ = diagnosticRequest_;
-        } else {
-          result.diagnosticRequest_ = diagnosticRequestBuilder_.build();
-        }
+        result.enabled_ = enabled_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.openxc.BinaryMessages.ControlCommand) {
-          return mergeFrom((com.openxc.BinaryMessages.ControlCommand)other);
+        if (other instanceof com.openxc.BinaryMessages.PredefinedObd2RequestsCommand) {
+          return mergeFrom((com.openxc.BinaryMessages.PredefinedObd2RequestsCommand)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.openxc.BinaryMessages.ControlCommand other) {
-        if (other == com.openxc.BinaryMessages.ControlCommand.getDefaultInstance()) return this;
-        if (other.hasType()) {
-          setType(other.getType());
-        }
-        if (other.hasDiagnosticRequest()) {
-          mergeDiagnosticRequest(other.getDiagnosticRequest());
+      public Builder mergeFrom(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand other) {
+        if (other == com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance()) return this;
+        if (other.hasEnabled()) {
+          setEnabled(other.getEnabled());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -2552,11 +6125,11 @@ public final class BinaryMessages {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.openxc.BinaryMessages.ControlCommand parsedMessage = null;
+        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.openxc.BinaryMessages.ControlCommand) e.getUnfinishedMessage();
+          parsedMessage = (com.openxc.BinaryMessages.PredefinedObd2RequestsCommand) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
@@ -2567,174 +6140,53 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional .openxc.ControlCommand.Type type = 1;
-      private com.openxc.BinaryMessages.ControlCommand.Type type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+      private boolean enabled_ ;
       /**
-       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       * <code>optional bool enabled = 1;</code>
        */
-      public boolean hasType() {
+      public boolean hasEnabled() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
       /**
-       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       * <code>optional bool enabled = 1;</code>
        */
-      public com.openxc.BinaryMessages.ControlCommand.Type getType() {
-        return type_;
+      public boolean getEnabled() {
+        return enabled_;
       }
       /**
-       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       * <code>optional bool enabled = 1;</code>
        */
-      public Builder setType(com.openxc.BinaryMessages.ControlCommand.Type value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder setEnabled(boolean value) {
         bitField0_ |= 0x00000001;
-        type_ = value;
+        enabled_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional .openxc.ControlCommand.Type type = 1;</code>
+       * <code>optional bool enabled = 1;</code>
        */
-      public Builder clearType() {
+      public Builder clearEnabled() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
+        enabled_ = false;
         onChanged();
         return this;
       }
 
-      // optional .openxc.DiagnosticRequest diagnostic_request = 2;
-      private com.openxc.BinaryMessages.DiagnosticRequest diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> diagnosticRequestBuilder_;
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public boolean hasDiagnosticRequest() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public com.openxc.BinaryMessages.DiagnosticRequest getDiagnosticRequest() {
-        if (diagnosticRequestBuilder_ == null) {
-          return diagnosticRequest_;
-        } else {
-          return diagnosticRequestBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public Builder setDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
-        if (diagnosticRequestBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          diagnosticRequest_ = value;
-          onChanged();
-        } else {
-          diagnosticRequestBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public Builder setDiagnosticRequest(
-          com.openxc.BinaryMessages.DiagnosticRequest.Builder builderForValue) {
-        if (diagnosticRequestBuilder_ == null) {
-          diagnosticRequest_ = builderForValue.build();
-          onChanged();
-        } else {
-          diagnosticRequestBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public Builder mergeDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
-        if (diagnosticRequestBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) == 0x00000002) &&
-              diagnosticRequest_ != com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance()) {
-            diagnosticRequest_ =
-              com.openxc.BinaryMessages.DiagnosticRequest.newBuilder(diagnosticRequest_).mergeFrom(value).buildPartial();
-          } else {
-            diagnosticRequest_ = value;
-          }
-          onChanged();
-        } else {
-          diagnosticRequestBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public Builder clearDiagnosticRequest() {
-        if (diagnosticRequestBuilder_ == null) {
-          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
-          onChanged();
-        } else {
-          diagnosticRequestBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public com.openxc.BinaryMessages.DiagnosticRequest.Builder getDiagnosticRequestBuilder() {
-        bitField0_ |= 0x00000002;
-        onChanged();
-        return getDiagnosticRequestFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getDiagnosticRequestOrBuilder() {
-        if (diagnosticRequestBuilder_ != null) {
-          return diagnosticRequestBuilder_.getMessageOrBuilder();
-        } else {
-          return diagnosticRequest_;
-        }
-      }
-      /**
-       * <code>optional .openxc.DiagnosticRequest diagnostic_request = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> 
-          getDiagnosticRequestFieldBuilder() {
-        if (diagnosticRequestBuilder_ == null) {
-          diagnosticRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder>(
-                  diagnosticRequest_,
-                  getParentForChildren(),
-                  isClean());
-          diagnosticRequest_ = null;
-        }
-        return diagnosticRequestBuilder_;
-      }
-
-      // @@protoc_insertion_point(builder_scope:openxc.ControlCommand)
+      // @@protoc_insertion_point(builder_scope:openxc.PredefinedObd2RequestsCommand)
     }
 
     static {
-      defaultInstance = new ControlCommand(true);
+      defaultInstance = new PredefinedObd2RequestsCommand(true);
       defaultInstance.initFields();
     }
 
-    // @@protoc_insertion_point(class_scope:openxc.ControlCommand)
+    // @@protoc_insertion_point(class_scope:openxc.PredefinedObd2RequestsCommand)
   }
 
-  public interface CommandResponseOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface CommandResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.CommandResponse)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional .openxc.ControlCommand.Type type = 1;
     /**
      * <code>optional .openxc.ControlCommand.Type type = 1;</code>
      */
@@ -2744,7 +6196,6 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.ControlCommand.Type getType();
 
-    // optional string message = 2;
     /**
      * <code>optional string message = 2;</code>
      */
@@ -2758,13 +6209,23 @@ public final class BinaryMessages {
      */
     com.google.protobuf.ByteString
         getMessageBytes();
+
+    /**
+     * <code>optional bool status = 3;</code>
+     */
+    boolean hasStatus();
+    /**
+     * <code>optional bool status = 3;</code>
+     */
+    boolean getStatus();
   }
   /**
    * Protobuf type {@code openxc.CommandResponse}
    */
   public static final class CommandResponse extends
-      com.google.protobuf.GeneratedMessage
-      implements CommandResponseOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.CommandResponse)
+      CommandResponseOrBuilder {
     // Use CommandResponse.newBuilder() to construct.
     private CommandResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -2822,8 +6283,14 @@ public final class BinaryMessages {
               break;
             }
             case 18: {
+              com.google.protobuf.ByteString bs = input.readBytes();
               bitField0_ |= 0x00000002;
-              message_ = input.readBytes();
+              message_ = bs;
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              status_ = input.readBool();
               break;
             }
           }
@@ -2866,7 +6333,6 @@ public final class BinaryMessages {
     }
 
     private int bitField0_;
-    // optional .openxc.ControlCommand.Type type = 1;
     public static final int TYPE_FIELD_NUMBER = 1;
     private com.openxc.BinaryMessages.ControlCommand.Type type_;
     /**
@@ -2882,7 +6348,6 @@ public final class BinaryMessages {
       return type_;
     }
 
-    // optional string message = 2;
     public static final int MESSAGE_FIELD_NUMBER = 2;
     private java.lang.Object message_;
     /**
@@ -2925,14 +6390,31 @@ public final class BinaryMessages {
       }
     }
 
+    public static final int STATUS_FIELD_NUMBER = 3;
+    private boolean status_;
+    /**
+     * <code>optional bool status = 3;</code>
+     */
+    public boolean hasStatus() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional bool status = 3;</code>
+     */
+    public boolean getStatus() {
+      return status_;
+    }
+
     private void initFields() {
       type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
       message_ = "";
+      status_ = false;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -2947,6 +6429,9 @@ public final class BinaryMessages {
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         output.writeBytes(2, getMessageBytes());
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(3, status_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -2964,6 +6449,10 @@ public final class BinaryMessages {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(2, getMessageBytes());
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, status_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -3046,8 +6535,9 @@ public final class BinaryMessages {
      * Protobuf type {@code openxc.CommandResponse}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.CommandResponseOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.CommandResponse)
+        com.openxc.BinaryMessages.CommandResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.openxc.BinaryMessages.internal_static_openxc_CommandResponse_descriptor;
@@ -3084,6 +6574,8 @@ public final class BinaryMessages {
         bitField0_ = (bitField0_ & ~0x00000001);
         message_ = "";
         bitField0_ = (bitField0_ & ~0x00000002);
+        status_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
 
@@ -3120,6 +6612,10 @@ public final class BinaryMessages {
           to_bitField0_ |= 0x00000002;
         }
         result.message_ = message_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.status_ = status_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -3144,6 +6640,9 @@ public final class BinaryMessages {
           message_ = other.message_;
           onChanged();
         }
+        if (other.hasStatus()) {
+          setStatus(other.getStatus());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -3171,7 +6670,6 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional .openxc.ControlCommand.Type type = 1;
       private com.openxc.BinaryMessages.ControlCommand.Type type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
       /**
        * <code>optional .openxc.ControlCommand.Type type = 1;</code>
@@ -3207,7 +6705,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional string message = 2;
       private java.lang.Object message_ = "";
       /**
        * <code>optional string message = 2;</code>
@@ -3221,9 +6718,12 @@ public final class BinaryMessages {
       public java.lang.String getMessage() {
         java.lang.Object ref = message_;
         if (!(ref instanceof java.lang.String)) {
-          java.lang.String s = ((com.google.protobuf.ByteString) ref)
-              .toStringUtf8();
-          message_ = s;
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            message_ = s;
+          }
           return s;
         } else {
           return (java.lang.String) ref;
@@ -3281,6 +6781,38 @@ public final class BinaryMessages {
         return this;
       }
 
+      private boolean status_ ;
+      /**
+       * <code>optional bool status = 3;</code>
+       */
+      public boolean hasStatus() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>optional bool status = 3;</code>
+       */
+      public boolean getStatus() {
+        return status_;
+      }
+      /**
+       * <code>optional bool status = 3;</code>
+       */
+      public Builder setStatus(boolean value) {
+        bitField0_ |= 0x00000004;
+        status_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bool status = 3;</code>
+       */
+      public Builder clearStatus() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        status_ = false;
+        onChanged();
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:openxc.CommandResponse)
     }
 
@@ -3292,10 +6824,10 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.CommandResponse)
   }
 
-  public interface DiagnosticRequestOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface DiagnosticRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.DiagnosticRequest)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional int32 bus = 1;
     /**
      * <code>optional int32 bus = 1;</code>
      */
@@ -3305,7 +6837,6 @@ public final class BinaryMessages {
      */
     int getBus();
 
-    // optional uint32 message_id = 2;
     /**
      * <code>optional uint32 message_id = 2;</code>
      */
@@ -3315,7 +6846,6 @@ public final class BinaryMessages {
      */
     int getMessageId();
 
-    // optional uint32 mode = 3;
     /**
      * <code>optional uint32 mode = 3;</code>
      */
@@ -3325,7 +6855,6 @@ public final class BinaryMessages {
      */
     int getMode();
 
-    // optional uint32 pid = 4;
     /**
      * <code>optional uint32 pid = 4;</code>
      */
@@ -3335,7 +6864,6 @@ public final class BinaryMessages {
      */
     int getPid();
 
-    // optional bytes payload = 5;
     /**
      * <code>optional bytes payload = 5;</code>
      *
@@ -3355,7 +6883,6 @@ public final class BinaryMessages {
      */
     com.google.protobuf.ByteString getPayload();
 
-    // optional bool multiple_responses = 6;
     /**
      * <code>optional bool multiple_responses = 6;</code>
      */
@@ -3365,7 +6892,6 @@ public final class BinaryMessages {
      */
     boolean getMultipleResponses();
 
-    // optional double frequency = 7;
     /**
      * <code>optional double frequency = 7;</code>
      */
@@ -3375,7 +6901,6 @@ public final class BinaryMessages {
      */
     double getFrequency();
 
-    // optional string name = 8;
     /**
      * <code>optional string name = 8;</code>
      */
@@ -3390,7 +6915,6 @@ public final class BinaryMessages {
     com.google.protobuf.ByteString
         getNameBytes();
 
-    // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
     /**
      * <code>optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;</code>
      */
@@ -3404,8 +6928,9 @@ public final class BinaryMessages {
    * Protobuf type {@code openxc.DiagnosticRequest}
    */
   public static final class DiagnosticRequest extends
-      com.google.protobuf.GeneratedMessage
-      implements DiagnosticRequestOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.DiagnosticRequest)
+      DiagnosticRequestOrBuilder {
     // Use DiagnosticRequest.newBuilder() to construct.
     private DiagnosticRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -3487,8 +7012,9 @@ public final class BinaryMessages {
               break;
             }
             case 66: {
+              com.google.protobuf.ByteString bs = input.readBytes();
               bitField0_ |= 0x00000080;
-              name_ = input.readBytes();
+              name_ = bs;
               break;
             }
             case 72: {
@@ -3624,7 +7150,6 @@ public final class BinaryMessages {
     }
 
     private int bitField0_;
-    // optional int32 bus = 1;
     public static final int BUS_FIELD_NUMBER = 1;
     private int bus_;
     /**
@@ -3640,7 +7165,6 @@ public final class BinaryMessages {
       return bus_;
     }
 
-    // optional uint32 message_id = 2;
     public static final int MESSAGE_ID_FIELD_NUMBER = 2;
     private int messageId_;
     /**
@@ -3656,7 +7180,6 @@ public final class BinaryMessages {
       return messageId_;
     }
 
-    // optional uint32 mode = 3;
     public static final int MODE_FIELD_NUMBER = 3;
     private int mode_;
     /**
@@ -3672,7 +7195,6 @@ public final class BinaryMessages {
       return mode_;
     }
 
-    // optional uint32 pid = 4;
     public static final int PID_FIELD_NUMBER = 4;
     private int pid_;
     /**
@@ -3688,7 +7210,6 @@ public final class BinaryMessages {
       return pid_;
     }
 
-    // optional bytes payload = 5;
     public static final int PAYLOAD_FIELD_NUMBER = 5;
     private com.google.protobuf.ByteString payload_;
     /**
@@ -3714,7 +7235,6 @@ public final class BinaryMessages {
       return payload_;
     }
 
-    // optional bool multiple_responses = 6;
     public static final int MULTIPLE_RESPONSES_FIELD_NUMBER = 6;
     private boolean multipleResponses_;
     /**
@@ -3730,7 +7250,6 @@ public final class BinaryMessages {
       return multipleResponses_;
     }
 
-    // optional double frequency = 7;
     public static final int FREQUENCY_FIELD_NUMBER = 7;
     private double frequency_;
     /**
@@ -3746,7 +7265,6 @@ public final class BinaryMessages {
       return frequency_;
     }
 
-    // optional string name = 8;
     public static final int NAME_FIELD_NUMBER = 8;
     private java.lang.Object name_;
     /**
@@ -3789,7 +7307,6 @@ public final class BinaryMessages {
       }
     }
 
-    // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
     public static final int DECODED_TYPE_FIELD_NUMBER = 9;
     private com.openxc.BinaryMessages.DiagnosticRequest.DecodedType decodedType_;
     /**
@@ -3819,7 +7336,8 @@ public final class BinaryMessages {
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -3982,8 +7500,9 @@ public final class BinaryMessages {
      * Protobuf type {@code openxc.DiagnosticRequest}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.DiagnosticRequestOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.DiagnosticRequest)
+        com.openxc.BinaryMessages.DiagnosticRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticRequest_descriptor;
@@ -4170,7 +7689,6 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional int32 bus = 1;
       private int bus_ ;
       /**
        * <code>optional int32 bus = 1;</code>
@@ -4203,7 +7721,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 message_id = 2;
       private int messageId_ ;
       /**
        * <code>optional uint32 message_id = 2;</code>
@@ -4236,7 +7753,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 mode = 3;
       private int mode_ ;
       /**
        * <code>optional uint32 mode = 3;</code>
@@ -4269,7 +7785,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 pid = 4;
       private int pid_ ;
       /**
        * <code>optional uint32 pid = 4;</code>
@@ -4302,7 +7817,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional bytes payload = 5;
       private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY;
       /**
        * <code>optional bytes payload = 5;</code>
@@ -4358,7 +7872,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional bool multiple_responses = 6;
       private boolean multipleResponses_ ;
       /**
        * <code>optional bool multiple_responses = 6;</code>
@@ -4391,7 +7904,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional double frequency = 7;
       private double frequency_ ;
       /**
        * <code>optional double frequency = 7;</code>
@@ -4424,7 +7936,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional string name = 8;
       private java.lang.Object name_ = "";
       /**
        * <code>optional string name = 8;</code>
@@ -4438,9 +7949,12 @@ public final class BinaryMessages {
       public java.lang.String getName() {
         java.lang.Object ref = name_;
         if (!(ref instanceof java.lang.String)) {
-          java.lang.String s = ((com.google.protobuf.ByteString) ref)
-              .toStringUtf8();
-          name_ = s;
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            name_ = s;
+          }
           return s;
         } else {
           return (java.lang.String) ref;
@@ -4498,7 +8012,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
       private com.openxc.BinaryMessages.DiagnosticRequest.DecodedType decodedType_ = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.NONE;
       /**
        * <code>optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;</code>
@@ -4545,10 +8058,10 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.DiagnosticRequest)
   }
 
-  public interface DiagnosticResponseOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface DiagnosticResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.DiagnosticResponse)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional int32 bus = 1;
     /**
      * <code>optional int32 bus = 1;</code>
      */
@@ -4558,7 +8071,6 @@ public final class BinaryMessages {
      */
     int getBus();
 
-    // optional uint32 message_id = 2;
     /**
      * <code>optional uint32 message_id = 2;</code>
      */
@@ -4568,7 +8080,6 @@ public final class BinaryMessages {
      */
     int getMessageId();
 
-    // optional uint32 mode = 3;
     /**
      * <code>optional uint32 mode = 3;</code>
      */
@@ -4578,7 +8089,6 @@ public final class BinaryMessages {
      */
     int getMode();
 
-    // optional uint32 pid = 4;
     /**
      * <code>optional uint32 pid = 4;</code>
      */
@@ -4588,7 +8098,6 @@ public final class BinaryMessages {
      */
     int getPid();
 
-    // optional bool success = 5;
     /**
      * <code>optional bool success = 5;</code>
      */
@@ -4598,7 +8107,6 @@ public final class BinaryMessages {
      */
     boolean getSuccess();
 
-    // optional uint32 negative_response_code = 6;
     /**
      * <code>optional uint32 negative_response_code = 6;</code>
      */
@@ -4608,7 +8116,6 @@ public final class BinaryMessages {
      */
     int getNegativeResponseCode();
 
-    // optional bytes payload = 7;
     /**
      * <code>optional bytes payload = 7;</code>
      *
@@ -4628,7 +8135,6 @@ public final class BinaryMessages {
      */
     com.google.protobuf.ByteString getPayload();
 
-    // optional double value = 8;
     /**
      * <code>optional double value = 8;</code>
      */
@@ -4642,8 +8148,9 @@ public final class BinaryMessages {
    * Protobuf type {@code openxc.DiagnosticResponse}
    */
   public static final class DiagnosticResponse extends
-      com.google.protobuf.GeneratedMessage
-      implements DiagnosticResponseOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.DiagnosticResponse)
+      DiagnosticResponseOrBuilder {
     // Use DiagnosticResponse.newBuilder() to construct.
     private DiagnosticResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -4769,7 +8276,6 @@ public final class BinaryMessages {
     }
 
     private int bitField0_;
-    // optional int32 bus = 1;
     public static final int BUS_FIELD_NUMBER = 1;
     private int bus_;
     /**
@@ -4785,7 +8291,6 @@ public final class BinaryMessages {
       return bus_;
     }
 
-    // optional uint32 message_id = 2;
     public static final int MESSAGE_ID_FIELD_NUMBER = 2;
     private int messageId_;
     /**
@@ -4801,7 +8306,6 @@ public final class BinaryMessages {
       return messageId_;
     }
 
-    // optional uint32 mode = 3;
     public static final int MODE_FIELD_NUMBER = 3;
     private int mode_;
     /**
@@ -4817,7 +8321,6 @@ public final class BinaryMessages {
       return mode_;
     }
 
-    // optional uint32 pid = 4;
     public static final int PID_FIELD_NUMBER = 4;
     private int pid_;
     /**
@@ -4833,7 +8336,6 @@ public final class BinaryMessages {
       return pid_;
     }
 
-    // optional bool success = 5;
     public static final int SUCCESS_FIELD_NUMBER = 5;
     private boolean success_;
     /**
@@ -4849,7 +8351,6 @@ public final class BinaryMessages {
       return success_;
     }
 
-    // optional uint32 negative_response_code = 6;
     public static final int NEGATIVE_RESPONSE_CODE_FIELD_NUMBER = 6;
     private int negativeResponseCode_;
     /**
@@ -4865,7 +8366,6 @@ public final class BinaryMessages {
       return negativeResponseCode_;
     }
 
-    // optional bytes payload = 7;
     public static final int PAYLOAD_FIELD_NUMBER = 7;
     private com.google.protobuf.ByteString payload_;
     /**
@@ -4891,7 +8391,6 @@ public final class BinaryMessages {
       return payload_;
     }
 
-    // optional double value = 8;
     public static final int VALUE_FIELD_NUMBER = 8;
     private double value_;
     /**
@@ -4920,7 +8419,8 @@ public final class BinaryMessages {
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -5076,8 +8576,9 @@ public final class BinaryMessages {
      * Protobuf type {@code openxc.DiagnosticResponse}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.DiagnosticResponseOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.DiagnosticResponse)
+        com.openxc.BinaryMessages.DiagnosticResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticResponse_descriptor;
@@ -5253,7 +8754,6 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional int32 bus = 1;
       private int bus_ ;
       /**
        * <code>optional int32 bus = 1;</code>
@@ -5286,7 +8786,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 message_id = 2;
       private int messageId_ ;
       /**
        * <code>optional uint32 message_id = 2;</code>
@@ -5319,7 +8818,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 mode = 3;
       private int mode_ ;
       /**
        * <code>optional uint32 mode = 3;</code>
@@ -5352,7 +8850,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 pid = 4;
       private int pid_ ;
       /**
        * <code>optional uint32 pid = 4;</code>
@@ -5385,7 +8882,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional bool success = 5;
       private boolean success_ ;
       /**
        * <code>optional bool success = 5;</code>
@@ -5418,7 +8914,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional uint32 negative_response_code = 6;
       private int negativeResponseCode_ ;
       /**
        * <code>optional uint32 negative_response_code = 6;</code>
@@ -5451,7 +8946,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional bytes payload = 7;
       private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY;
       /**
        * <code>optional bytes payload = 7;</code>
@@ -5507,7 +9001,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional double value = 8;
       private double value_ ;
       /**
        * <code>optional double value = 8;</code>
@@ -5551,10 +9044,10 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.DiagnosticResponse)
   }
 
-  public interface DynamicFieldOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface DynamicFieldOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.DynamicField)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional .openxc.DynamicField.Type type = 1;
     /**
      * <code>optional .openxc.DynamicField.Type type = 1;</code>
      */
@@ -5564,7 +9057,6 @@ public final class BinaryMessages {
      */
     com.openxc.BinaryMessages.DynamicField.Type getType();
 
-    // optional string string_value = 2;
     /**
      * <code>optional string string_value = 2;</code>
      */
@@ -5579,7 +9071,6 @@ public final class BinaryMessages {
     com.google.protobuf.ByteString
         getStringValueBytes();
 
-    // optional double numeric_value = 3;
     /**
      * <code>optional double numeric_value = 3;</code>
      */
@@ -5589,7 +9080,6 @@ public final class BinaryMessages {
      */
     double getNumericValue();
 
-    // optional bool boolean_value = 4;
     /**
      * <code>optional bool boolean_value = 4;</code>
      */
@@ -5603,8 +9093,9 @@ public final class BinaryMessages {
    * Protobuf type {@code openxc.DynamicField}
    */
   public static final class DynamicField extends
-      com.google.protobuf.GeneratedMessage
-      implements DynamicFieldOrBuilder {
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.DynamicField)
+      DynamicFieldOrBuilder {
     // Use DynamicField.newBuilder() to construct.
     private DynamicField(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
@@ -5662,8 +9153,9 @@ public final class BinaryMessages {
               break;
             }
             case 18: {
+              com.google.protobuf.ByteString bs = input.readBytes();
               bitField0_ |= 0x00000002;
-              stringValue_ = input.readBytes();
+              stringValue_ = bs;
               break;
             }
             case 25: {
@@ -5807,7 +9299,6 @@ public final class BinaryMessages {
     }
 
     private int bitField0_;
-    // optional .openxc.DynamicField.Type type = 1;
     public static final int TYPE_FIELD_NUMBER = 1;
     private com.openxc.BinaryMessages.DynamicField.Type type_;
     /**
@@ -5823,7 +9314,6 @@ public final class BinaryMessages {
       return type_;
     }
 
-    // optional string string_value = 2;
     public static final int STRING_VALUE_FIELD_NUMBER = 2;
     private java.lang.Object stringValue_;
     /**
@@ -5866,7 +9356,6 @@ public final class BinaryMessages {
       }
     }
 
-    // optional double numeric_value = 3;
     public static final int NUMERIC_VALUE_FIELD_NUMBER = 3;
     private double numericValue_;
     /**
@@ -5882,7 +9371,6 @@ public final class BinaryMessages {
       return numericValue_;
     }
 
-    // optional bool boolean_value = 4;
     public static final int BOOLEAN_VALUE_FIELD_NUMBER = 4;
     private boolean booleanValue_;
     /**
@@ -5907,7 +9395,8 @@ public final class BinaryMessages {
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -6035,8 +9524,9 @@ public final class BinaryMessages {
      * Protobuf type {@code openxc.DynamicField}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.DynamicFieldOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.DynamicField)
+        com.openxc.BinaryMessages.DynamicFieldOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
         return com.openxc.BinaryMessages.internal_static_openxc_DynamicField_descriptor;
@@ -6178,7 +9668,6 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional .openxc.DynamicField.Type type = 1;
       private com.openxc.BinaryMessages.DynamicField.Type type_ = com.openxc.BinaryMessages.DynamicField.Type.STRING;
       /**
        * <code>optional .openxc.DynamicField.Type type = 1;</code>
@@ -6214,7 +9703,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional string string_value = 2;
       private java.lang.Object stringValue_ = "";
       /**
        * <code>optional string string_value = 2;</code>
@@ -6228,9 +9716,12 @@ public final class BinaryMessages {
       public java.lang.String getStringValue() {
         java.lang.Object ref = stringValue_;
         if (!(ref instanceof java.lang.String)) {
-          java.lang.String s = ((com.google.protobuf.ByteString) ref)
-              .toStringUtf8();
-          stringValue_ = s;
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            stringValue_ = s;
+          }
           return s;
         } else {
           return (java.lang.String) ref;
@@ -6288,7 +9779,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional double numeric_value = 3;
       private double numericValue_ ;
       /**
        * <code>optional double numeric_value = 3;</code>
@@ -6321,7 +9811,6 @@ public final class BinaryMessages {
         return this;
       }
 
-      // optional bool boolean_value = 4;
       private boolean booleanValue_ ;
       /**
        * <code>optional bool boolean_value = 4;</code>
@@ -6365,81 +9854,70 @@ public final class BinaryMessages {
     // @@protoc_insertion_point(class_scope:openxc.DynamicField)
   }
 
-  public interface TranslatedMessageOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
+  public interface SimpleMessageOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:openxc.SimpleMessage)
+      com.google.protobuf.MessageOrBuilder {
 
-    // optional .openxc.TranslatedMessage.Type type = 1;
     /**
-     * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-     */
-    boolean hasType();
-    /**
-     * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-     */
-    com.openxc.BinaryMessages.TranslatedMessage.Type getType();
-
-    // optional string name = 2;
-    /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     boolean hasName();
     /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     java.lang.String getName();
     /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     com.google.protobuf.ByteString
         getNameBytes();
 
-    // optional .openxc.DynamicField value = 3;
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     boolean hasValue();
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     com.openxc.BinaryMessages.DynamicField getValue();
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder();
 
-    // optional .openxc.DynamicField event = 4;
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     boolean hasEvent();
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     com.openxc.BinaryMessages.DynamicField getEvent();
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder();
   }
   /**
-   * Protobuf type {@code openxc.TranslatedMessage}
+   * Protobuf type {@code openxc.SimpleMessage}
    */
-  public static final class TranslatedMessage extends
-      com.google.protobuf.GeneratedMessage
-      implements TranslatedMessageOrBuilder {
-    // Use TranslatedMessage.newBuilder() to construct.
-    private TranslatedMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+  public static final class SimpleMessage extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:openxc.SimpleMessage)
+      SimpleMessageOrBuilder {
+    // Use SimpleMessage.newBuilder() to construct.
+    private SimpleMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
       super(builder);
       this.unknownFields = builder.getUnknownFields();
     }
-    private TranslatedMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+    private SimpleMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
 
-    private static final TranslatedMessage defaultInstance;
-    public static TranslatedMessage getDefaultInstance() {
+    private static final SimpleMessage defaultInstance;
+    public static SimpleMessage getDefaultInstance() {
       return defaultInstance;
     }
 
-    public TranslatedMessage getDefaultInstanceForType() {
+    public SimpleMessage getDefaultInstanceForType() {
       return defaultInstance;
     }
 
@@ -6449,7 +9927,7 @@ public final class BinaryMessages {
         getUnknownFields() {
       return this.unknownFields;
     }
-    private TranslatedMessage(
+    private SimpleMessage(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -6472,25 +9950,15 @@ public final class BinaryMessages {
               }
               break;
             }
-            case 8: {
-              int rawValue = input.readEnum();
-              com.openxc.BinaryMessages.TranslatedMessage.Type value = com.openxc.BinaryMessages.TranslatedMessage.Type.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(1, rawValue);
-              } else {
-                bitField0_ |= 0x00000001;
-                type_ = value;
-              }
+            case 10: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000001;
+              name_ = bs;
               break;
             }
             case 18: {
-              bitField0_ |= 0x00000002;
-              name_ = input.readBytes();
-              break;
-            }
-            case 26: {
               com.openxc.BinaryMessages.DynamicField.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000004) == 0x00000004)) {
+              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                 subBuilder = value_.toBuilder();
               }
               value_ = input.readMessage(com.openxc.BinaryMessages.DynamicField.PARSER, extensionRegistry);
@@ -6498,12 +9966,12 @@ public final class BinaryMessages {
                 subBuilder.mergeFrom(value_);
                 value_ = subBuilder.buildPartial();
               }
-              bitField0_ |= 0x00000004;
+              bitField0_ |= 0x00000002;
               break;
             }
-            case 34: {
+            case 26: {
               com.openxc.BinaryMessages.DynamicField.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000008) == 0x00000008)) {
+              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                 subBuilder = event_.toBuilder();
               }
               event_ = input.readMessage(com.openxc.BinaryMessages.DynamicField.PARSER, extensionRegistry);
@@ -6511,7 +9979,7 @@ public final class BinaryMessages {
                 subBuilder.mergeFrom(event_);
                 event_ = subBuilder.buildPartial();
               }
-              bitField0_ |= 0x00000008;
+              bitField0_ |= 0x00000004;
               break;
             }
           }
@@ -6528,177 +9996,42 @@ public final class BinaryMessages {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.openxc.BinaryMessages.internal_static_openxc_TranslatedMessage_descriptor;
+      return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.openxc.BinaryMessages.internal_static_openxc_TranslatedMessage_fieldAccessorTable
+      return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.openxc.BinaryMessages.TranslatedMessage.class, com.openxc.BinaryMessages.TranslatedMessage.Builder.class);
+              com.openxc.BinaryMessages.SimpleMessage.class, com.openxc.BinaryMessages.SimpleMessage.Builder.class);
     }
 
-    public static com.google.protobuf.Parser<TranslatedMessage> PARSER =
-        new com.google.protobuf.AbstractParser<TranslatedMessage>() {
-      public TranslatedMessage parsePartialFrom(
+    public static com.google.protobuf.Parser<SimpleMessage> PARSER =
+        new com.google.protobuf.AbstractParser<SimpleMessage>() {
+      public SimpleMessage parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TranslatedMessage(input, extensionRegistry);
+        return new SimpleMessage(input, extensionRegistry);
       }
     };
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TranslatedMessage> getParserForType() {
+    public com.google.protobuf.Parser<SimpleMessage> getParserForType() {
       return PARSER;
     }
 
-    /**
-     * Protobuf enum {@code openxc.TranslatedMessage.Type}
-     */
-    public enum Type
-        implements com.google.protobuf.ProtocolMessageEnum {
-      /**
-       * <code>STRING = 1;</code>
-       */
-      STRING(0, 1),
-      /**
-       * <code>NUM = 2;</code>
-       */
-      NUM(1, 2),
-      /**
-       * <code>BOOL = 3;</code>
-       */
-      BOOL(2, 3),
-      /**
-       * <code>EVENTED_STRING = 4;</code>
-       */
-      EVENTED_STRING(3, 4),
-      /**
-       * <code>EVENTED_NUM = 5;</code>
-       */
-      EVENTED_NUM(4, 5),
-      /**
-       * <code>EVENTED_BOOL = 6;</code>
-       */
-      EVENTED_BOOL(5, 6),
-      ;
-
-      /**
-       * <code>STRING = 1;</code>
-       */
-      public static final int STRING_VALUE = 1;
-      /**
-       * <code>NUM = 2;</code>
-       */
-      public static final int NUM_VALUE = 2;
-      /**
-       * <code>BOOL = 3;</code>
-       */
-      public static final int BOOL_VALUE = 3;
-      /**
-       * <code>EVENTED_STRING = 4;</code>
-       */
-      public static final int EVENTED_STRING_VALUE = 4;
-      /**
-       * <code>EVENTED_NUM = 5;</code>
-       */
-      public static final int EVENTED_NUM_VALUE = 5;
-      /**
-       * <code>EVENTED_BOOL = 6;</code>
-       */
-      public static final int EVENTED_BOOL_VALUE = 6;
-
-
-      public final int getNumber() { return value; }
-
-      public static Type valueOf(int value) {
-        switch (value) {
-          case 1: return STRING;
-          case 2: return NUM;
-          case 3: return BOOL;
-          case 4: return EVENTED_STRING;
-          case 5: return EVENTED_NUM;
-          case 6: return EVENTED_BOOL;
-          default: return null;
-        }
-      }
-
-      public static com.google.protobuf.Internal.EnumLiteMap<Type>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static com.google.protobuf.Internal.EnumLiteMap<Type>
-          internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
-              public Type findValueByNumber(int number) {
-                return Type.valueOf(number);
-              }
-            };
-
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        return getDescriptor().getValues().get(index);
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return com.openxc.BinaryMessages.TranslatedMessage.getDescriptor().getEnumTypes().get(0);
-      }
-
-      private static final Type[] VALUES = values();
-
-      public static Type valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        return VALUES[desc.getIndex()];
-      }
-
-      private final int index;
-      private final int value;
-
-      private Type(int index, int value) {
-        this.index = index;
-        this.value = value;
-      }
-
-      // @@protoc_insertion_point(enum_scope:openxc.TranslatedMessage.Type)
-    }
-
     private int bitField0_;
-    // optional .openxc.TranslatedMessage.Type type = 1;
-    public static final int TYPE_FIELD_NUMBER = 1;
-    private com.openxc.BinaryMessages.TranslatedMessage.Type type_;
-    /**
-     * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-     */
-    public boolean hasType() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-     */
-    public com.openxc.BinaryMessages.TranslatedMessage.Type getType() {
-      return type_;
-    }
-
-    // optional string name = 2;
-    public static final int NAME_FIELD_NUMBER = 2;
+    public static final int NAME_FIELD_NUMBER = 1;
     private java.lang.Object name_;
     /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     public boolean hasName() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+      return ((bitField0_ & 0x00000001) == 0x00000001);
     }
     /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     public java.lang.String getName() {
       java.lang.Object ref = name_;
@@ -6715,7 +10048,7 @@ public final class BinaryMessages {
       }
     }
     /**
-     * <code>optional string name = 2;</code>
+     * <code>optional string name = 1;</code>
      */
     public com.google.protobuf.ByteString
         getNameBytes() {
@@ -6731,52 +10064,49 @@ public final class BinaryMessages {
       }
     }
 
-    // optional .openxc.DynamicField value = 3;
-    public static final int VALUE_FIELD_NUMBER = 3;
+    public static final int VALUE_FIELD_NUMBER = 2;
     private com.openxc.BinaryMessages.DynamicField value_;
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     public boolean hasValue() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
+      return ((bitField0_ & 0x00000002) == 0x00000002);
     }
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     public com.openxc.BinaryMessages.DynamicField getValue() {
       return value_;
     }
     /**
-     * <code>optional .openxc.DynamicField value = 3;</code>
+     * <code>optional .openxc.DynamicField value = 2;</code>
      */
     public com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder() {
       return value_;
     }
 
-    // optional .openxc.DynamicField event = 4;
-    public static final int EVENT_FIELD_NUMBER = 4;
+    public static final int EVENT_FIELD_NUMBER = 3;
     private com.openxc.BinaryMessages.DynamicField event_;
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     public boolean hasEvent() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
+      return ((bitField0_ & 0x00000004) == 0x00000004);
     }
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     public com.openxc.BinaryMessages.DynamicField getEvent() {
       return event_;
     }
     /**
-     * <code>optional .openxc.DynamicField event = 4;</code>
+     * <code>optional .openxc.DynamicField event = 3;</code>
      */
     public com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder() {
       return event_;
     }
 
     private void initFields() {
-      type_ = com.openxc.BinaryMessages.TranslatedMessage.Type.STRING;
       name_ = "";
       value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
       event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
@@ -6784,7 +10114,8 @@ public final class BinaryMessages {
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
       return true;
@@ -6794,16 +10125,13 @@ public final class BinaryMessages {
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, type_.getNumber());
+        output.writeBytes(1, getNameBytes());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getNameBytes());
+        output.writeMessage(2, value_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(3, value_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(4, event_);
+        output.writeMessage(3, event_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -6816,19 +10144,15 @@ public final class BinaryMessages {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, type_.getNumber());
+          .computeBytesSize(1, getNameBytes());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getNameBytes());
+          .computeMessageSize(2, value_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, value_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, event_);
+          .computeMessageSize(3, event_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -6842,53 +10166,53 @@ public final class BinaryMessages {
       return super.writeReplace();
     }
 
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(byte[] data)
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseDelimitedFrom(java.io.InputStream input)
+    public static com.openxc.BinaryMessages.SimpleMessage parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseDelimitedFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static com.openxc.BinaryMessages.TranslatedMessage parseFrom(
+    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -6897,7 +10221,7 @@ public final class BinaryMessages {
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.openxc.BinaryMessages.TranslatedMessage prototype) {
+    public static Builder newBuilder(com.openxc.BinaryMessages.SimpleMessage prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -6909,24 +10233,25 @@ public final class BinaryMessages {
       return builder;
     }
     /**
-     * Protobuf type {@code openxc.TranslatedMessage}
+     * Protobuf type {@code openxc.SimpleMessage}
      */
     public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.openxc.BinaryMessages.TranslatedMessageOrBuilder {
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:openxc.SimpleMessage)
+        com.openxc.BinaryMessages.SimpleMessageOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.openxc.BinaryMessages.internal_static_openxc_TranslatedMessage_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.openxc.BinaryMessages.internal_static_openxc_TranslatedMessage_fieldAccessorTable
+        return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.openxc.BinaryMessages.TranslatedMessage.class, com.openxc.BinaryMessages.TranslatedMessage.Builder.class);
+                com.openxc.BinaryMessages.SimpleMessage.class, com.openxc.BinaryMessages.SimpleMessage.Builder.class);
       }
 
-      // Construct using com.openxc.BinaryMessages.TranslatedMessage.newBuilder()
+      // Construct using com.openxc.BinaryMessages.SimpleMessage.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -6948,22 +10273,20 @@ public final class BinaryMessages {
 
       public Builder clear() {
         super.clear();
-        type_ = com.openxc.BinaryMessages.TranslatedMessage.Type.STRING;
-        bitField0_ = (bitField0_ & ~0x00000001);
         name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
+        bitField0_ = (bitField0_ & ~0x00000001);
         if (valueBuilder_ == null) {
           value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
         } else {
           valueBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000002);
         if (eventBuilder_ == null) {
           event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
         } else {
           eventBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
 
@@ -6973,43 +10296,39 @@ public final class BinaryMessages {
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.openxc.BinaryMessages.internal_static_openxc_TranslatedMessage_descriptor;
+        return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_descriptor;
       }
 
-      public com.openxc.BinaryMessages.TranslatedMessage getDefaultInstanceForType() {
-        return com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance();
+      public com.openxc.BinaryMessages.SimpleMessage getDefaultInstanceForType() {
+        return com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
       }
 
-      public com.openxc.BinaryMessages.TranslatedMessage build() {
-        com.openxc.BinaryMessages.TranslatedMessage result = buildPartial();
+      public com.openxc.BinaryMessages.SimpleMessage build() {
+        com.openxc.BinaryMessages.SimpleMessage result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public com.openxc.BinaryMessages.TranslatedMessage buildPartial() {
-        com.openxc.BinaryMessages.TranslatedMessage result = new com.openxc.BinaryMessages.TranslatedMessage(this);
+      public com.openxc.BinaryMessages.SimpleMessage buildPartial() {
+        com.openxc.BinaryMessages.SimpleMessage result = new com.openxc.BinaryMessages.SimpleMessage(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.type_ = type_;
+        result.name_ = name_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
         if (valueBuilder_ == null) {
           result.value_ = value_;
         } else {
           result.value_ = valueBuilder_.build();
         }
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
         }
         if (eventBuilder_ == null) {
           result.event_ = event_;
@@ -7022,21 +10341,18 @@ public final class BinaryMessages {
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.openxc.BinaryMessages.TranslatedMessage) {
-          return mergeFrom((com.openxc.BinaryMessages.TranslatedMessage)other);
+        if (other instanceof com.openxc.BinaryMessages.SimpleMessage) {
+          return mergeFrom((com.openxc.BinaryMessages.SimpleMessage)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.openxc.BinaryMessages.TranslatedMessage other) {
-        if (other == com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance()) return this;
-        if (other.hasType()) {
-          setType(other.getType());
-        }
+      public Builder mergeFrom(com.openxc.BinaryMessages.SimpleMessage other) {
+        if (other == com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance()) return this;
         if (other.hasName()) {
-          bitField0_ |= 0x00000002;
+          bitField0_ |= 0x00000001;
           name_ = other.name_;
           onChanged();
         }
@@ -7058,11 +10374,11 @@ public final class BinaryMessages {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.openxc.BinaryMessages.TranslatedMessage parsedMessage = null;
+        com.openxc.BinaryMessages.SimpleMessage parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.openxc.BinaryMessages.TranslatedMessage) e.getUnfinishedMessage();
+          parsedMessage = (com.openxc.BinaryMessages.SimpleMessage) e.getUnfinishedMessage();
           throw e;
         } finally {
           if (parsedMessage != null) {
@@ -7073,66 +10389,32 @@ public final class BinaryMessages {
       }
       private int bitField0_;
 
-      // optional .openxc.TranslatedMessage.Type type = 1;
-      private com.openxc.BinaryMessages.TranslatedMessage.Type type_ = com.openxc.BinaryMessages.TranslatedMessage.Type.STRING;
-      /**
-       * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-       */
-      public boolean hasType() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-       */
-      public com.openxc.BinaryMessages.TranslatedMessage.Type getType() {
-        return type_;
-      }
-      /**
-       * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-       */
-      public Builder setType(com.openxc.BinaryMessages.TranslatedMessage.Type value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000001;
-        type_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional .openxc.TranslatedMessage.Type type = 1;</code>
-       */
-      public Builder clearType() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        type_ = com.openxc.BinaryMessages.TranslatedMessage.Type.STRING;
-        onChanged();
-        return this;
-      }
-
-      // optional string name = 2;
       private java.lang.Object name_ = "";
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public boolean hasName() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
+        return ((bitField0_ & 0x00000001) == 0x00000001);
       }
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public java.lang.String getName() {
         java.lang.Object ref = name_;
         if (!(ref instanceof java.lang.String)) {
-          java.lang.String s = ((com.google.protobuf.ByteString) ref)
-              .toStringUtf8();
-          name_ = s;
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            name_ = s;
+          }
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public com.google.protobuf.ByteString
           getNameBytes() {
@@ -7148,53 +10430,52 @@ public final class BinaryMessages {
         }
       }
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public Builder setName(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000002;
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public Builder clearName() {
-        bitField0_ = (bitField0_ & ~0x00000002);
+        bitField0_ = (bitField0_ & ~0x00000001);
         name_ = getDefaultInstance().getName();
         onChanged();
         return this;
       }
       /**
-       * <code>optional string name = 2;</code>
+       * <code>optional string name = 1;</code>
        */
       public Builder setNameBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000002;
+  bitField0_ |= 0x00000001;
         name_ = value;
         onChanged();
         return this;
       }
 
-      // optional .openxc.DynamicField value = 3;
       private com.openxc.BinaryMessages.DynamicField value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> valueBuilder_;
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public boolean hasValue() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public com.openxc.BinaryMessages.DynamicField getValue() {
         if (valueBuilder_ == null) {
@@ -7204,7 +10485,7 @@ public final class BinaryMessages {
         }
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public Builder setValue(com.openxc.BinaryMessages.DynamicField value) {
         if (valueBuilder_ == null) {
@@ -7216,11 +10497,11 @@ public final class BinaryMessages {
         } else {
           valueBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public Builder setValue(
           com.openxc.BinaryMessages.DynamicField.Builder builderForValue) {
@@ -7230,15 +10511,15 @@ public final class BinaryMessages {
         } else {
           valueBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public Builder mergeValue(com.openxc.BinaryMessages.DynamicField value) {
         if (valueBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+          if (((bitField0_ & 0x00000002) == 0x00000002) &&
               value_ != com.openxc.BinaryMessages.DynamicField.getDefaultInstance()) {
             value_ =
               com.openxc.BinaryMessages.DynamicField.newBuilder(value_).mergeFrom(value).buildPartial();
@@ -7249,11 +10530,11 @@ public final class BinaryMessages {
         } else {
           valueBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000002;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public Builder clearValue() {
         if (valueBuilder_ == null) {
@@ -7262,19 +10543,19 @@ public final class BinaryMessages {
         } else {
           valueBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public com.openxc.BinaryMessages.DynamicField.Builder getValueBuilder() {
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000002;
         onChanged();
         return getValueFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       public com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder() {
         if (valueBuilder_ != null) {
@@ -7284,7 +10565,7 @@ public final class BinaryMessages {
         }
       }
       /**
-       * <code>optional .openxc.DynamicField value = 3;</code>
+       * <code>optional .openxc.DynamicField value = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> 
@@ -7292,7 +10573,7 @@ public final class BinaryMessages {
         if (valueBuilder_ == null) {
           valueBuilder_ = new com.google.protobuf.SingleFieldBuilder<
               com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder>(
-                  value_,
+                  getValue(),
                   getParentForChildren(),
                   isClean());
           value_ = null;
@@ -7300,18 +10581,17 @@ public final class BinaryMessages {
         return valueBuilder_;
       }
 
-      // optional .openxc.DynamicField event = 4;
       private com.openxc.BinaryMessages.DynamicField event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> eventBuilder_;
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public boolean hasEvent() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
+        return ((bitField0_ & 0x00000004) == 0x00000004);
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public com.openxc.BinaryMessages.DynamicField getEvent() {
         if (eventBuilder_ == null) {
@@ -7321,7 +10601,7 @@ public final class BinaryMessages {
         }
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public Builder setEvent(com.openxc.BinaryMessages.DynamicField value) {
         if (eventBuilder_ == null) {
@@ -7333,11 +10613,11 @@ public final class BinaryMessages {
         } else {
           eventBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public Builder setEvent(
           com.openxc.BinaryMessages.DynamicField.Builder builderForValue) {
@@ -7347,15 +10627,15 @@ public final class BinaryMessages {
         } else {
           eventBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public Builder mergeEvent(com.openxc.BinaryMessages.DynamicField value) {
         if (eventBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
               event_ != com.openxc.BinaryMessages.DynamicField.getDefaultInstance()) {
             event_ =
               com.openxc.BinaryMessages.DynamicField.newBuilder(event_).mergeFrom(value).buildPartial();
@@ -7366,11 +10646,11 @@ public final class BinaryMessages {
         } else {
           eventBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000004;
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public Builder clearEvent() {
         if (eventBuilder_ == null) {
@@ -7379,19 +10659,19 @@ public final class BinaryMessages {
         } else {
           eventBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public com.openxc.BinaryMessages.DynamicField.Builder getEventBuilder() {
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000004;
         onChanged();
         return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       public com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder() {
         if (eventBuilder_ != null) {
@@ -7401,7 +10681,7 @@ public final class BinaryMessages {
         }
       }
       /**
-       * <code>optional .openxc.DynamicField event = 4;</code>
+       * <code>optional .openxc.DynamicField event = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> 
@@ -7409,7 +10689,7 @@ public final class BinaryMessages {
         if (eventBuilder_ == null) {
           eventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
               com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder>(
-                  event_,
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
           event_ = null;
@@ -7417,57 +10697,82 @@ public final class BinaryMessages {
         return eventBuilder_;
       }
 
-      // @@protoc_insertion_point(builder_scope:openxc.TranslatedMessage)
+      // @@protoc_insertion_point(builder_scope:openxc.SimpleMessage)
     }
 
     static {
-      defaultInstance = new TranslatedMessage(true);
+      defaultInstance = new SimpleMessage(true);
       defaultInstance.initFields();
     }
 
-    // @@protoc_insertion_point(class_scope:openxc.TranslatedMessage)
+    // @@protoc_insertion_point(class_scope:openxc.SimpleMessage)
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_VehicleMessage_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_VehicleMessage_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
-    internal_static_openxc_RawMessage_descriptor;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_CanMessage_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_openxc_RawMessage_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+      internal_static_openxc_CanMessage_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_ControlCommand_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_ControlCommand_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_DiagnosticControlCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_PassthroughModeControlCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_PayloadFormatCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_PayloadFormatCommand_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_CommandResponse_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_CommandResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_DiagnosticRequest_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_DiagnosticRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_DiagnosticResponse_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_DiagnosticResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_openxc_DynamicField_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_openxc_DynamicField_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
-    internal_static_openxc_TranslatedMessage_descriptor;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_openxc_SimpleMessage_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_openxc_TranslatedMessage_fieldAccessorTable;
+      internal_static_openxc_SimpleMessage_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -7477,108 +10782,158 @@ public final class BinaryMessages {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\014openxc.proto\022\006openxc\"\224\003\n\016VehicleMessag" +
+      "\n\014openxc.proto\022\006openxc\"\210\003\n\016VehicleMessag" +
       "e\022)\n\004type\030\001 \001(\0162\033.openxc.VehicleMessage." +
-      "Type\022\'\n\013raw_message\030\002 \001(\0132\022.openxc.RawMe" +
-      "ssage\0225\n\022translated_message\030\003 \001(\0132\031.open" +
-      "xc.TranslatedMessage\0227\n\023diagnostic_respo" +
-      "nse\030\004 \001(\0132\032.openxc.DiagnosticResponse\022/\n" +
-      "\017control_command\030\005 \001(\0132\026.openxc.ControlC" +
-      "ommand\0221\n\020command_response\030\006 \001(\0132\027.openx" +
-      "c.CommandResponse\"Z\n\004Type\022\007\n\003RAW\020\001\022\016\n\nTR" +
-      "ANSLATED\020\002\022\016\n\nDIAGNOSTIC\020\003\022\023\n\017CONTROL_CO",
-      "MMAND\020\004\022\024\n\020COMMAND_RESPONSE\020\005\";\n\nRawMess" +
-      "age\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004" +
-      "data\030\003 \001(\014\"\246\001\n\016ControlCommand\022)\n\004type\030\001 " +
-      "\001(\0162\033.openxc.ControlCommand.Type\0225\n\022diag" +
-      "nostic_request\030\002 \001(\0132\031.openxc.Diagnostic" +
-      "Request\"2\n\004Type\022\013\n\007VERSION\020\001\022\r\n\tDEVICE_I" +
-      "D\020\002\022\016\n\nDIAGNOSTIC\020\003\"M\n\017CommandResponse\022)" +
-      "\n\004type\030\001 \001(\0162\033.openxc.ControlCommand.Typ" +
-      "e\022\017\n\007message\030\002 \001(\t\"\375\001\n\021DiagnosticRequest" +
-      "\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004mod",
-      "e\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\tfrequency\030\007" +
-      " \001(\001\022\014\n\004name\030\010 \001(\t\022;\n\014decoded_type\030\t \001(\016" +
-      "2%.openxc.DiagnosticRequest.DecodedType\"" +
-      "!\n\013DecodedType\022\010\n\004NONE\020\001\022\010\n\004OBD2\020\002\"\241\001\n\022D" +
-      "iagnosticResponse\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessag" +
-      "e_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_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.D",
-      "ynamicField.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\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOO" +
-      "L\020\003\"\367\001\n\021TranslatedMessage\022,\n\004type\030\001 \001(\0162" +
-      "\036.openxc.TranslatedMessage.Type\022\014\n\004name\030" +
-      "\002 \001(\t\022#\n\005value\030\003 \001(\0132\024.openxc.DynamicFie" +
-      "ld\022#\n\005event\030\004 \001(\0132\024.openxc.DynamicField\"" +
-      "\\\n\004Type\022\n\n\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOOL\020\003\022\022" +
-      "\n\016EVENTED_STRING\020\004\022\017\n\013EVENTED_NUM\020\005\022\020\n\014E" +
-      "VENTED_BOOL\020\006B\034\n\ncom.openxcB\016BinaryMessa",
-      "ges"
+      "Type\022\'\n\013can_message\030\002 \001(\0132\022.openxc.CanMe" +
+      "ssage\022-\n\016simple_message\030\003 \001(\0132\025.openxc.S" +
+      "impleMessage\0227\n\023diagnostic_response\030\004 \001(" +
+      "\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\"V\n\004Type\022\007\n\003CAN\020\001\022\n\n\006SIMPLE\020\002\022\016" +
+      "\n\nDIAGNOSTIC\020\003\022\023\n\017CONTROL_COMMAND\020\004\022\024\n\020C",
+      "OMMAND_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\004data\030\003 \001(\014\0224\n\014frame" +
+      "_format\030\004 \001(\0162\036.openxc.CanMessage.FrameF" +
+      "ormat\")\n\013FrameFormat\022\014\n\010STANDARD\020\001\022\014\n\010EX" +
+      "TENDED\020\002\"\270\004\n\016ControlCommand\022)\n\004type\030\001 \001(" +
+      "\0162\033.openxc.ControlCommand.Type\022<\n\022diagno" +
+      "stic_request\030\002 \001(\0132 .openxc.DiagnosticCo" +
+      "ntrolCommand\022G\n\030passthrough_mode_request" +
+      "\030\003 \001(\0132%.openxc.PassthroughModeControlCo" +
+      "mmand\022O\n acceptance_filter_bypass_comman",
+      "d\030\004 \001(\0132%.openxc.AcceptanceFilterBypassC" +
+      "ommand\022<\n\026payload_format_command\030\005 \001(\0132\034" +
+      ".openxc.PayloadFormatCommand\022O\n predefin" +
+      "ed_obd2_requests_command\030\006 \001(\0132%.openxc." +
+      "PredefinedObd2RequestsCommand\"\223\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\030PREDEFI" +
+      "NED_OBD2_REQUESTS\020\007\"\236\001\n\030DiagnosticContro" +
+      "lCommand\022*\n\007request\030\001 \001(\0132\031.openxc.Diagn",
+      "osticRequest\0227\n\006action\030\002 \001(\0162\'.openxc.Di" +
+      "agnosticControlCommand.Action\"\035\n\006Action\022" +
+      "\007\n\003ADD\020\001\022\n\n\006CANCEL\020\002\"=\n\035PassthroughModeC" +
+      "ontrolCommand\022\013\n\003bus\030\001 \001(\005\022\017\n\007enabled\030\002 " +
+      "\001(\010\"<\n\035AcceptanceFilterBypassCommand\022\013\n\003" +
+      "bus\030\001 \001(\005\022\016\n\006bypass\030\002 \001(\010\"{\n\024PayloadForm" +
+      "atCommand\022:\n\006format\030\001 \001(\0162*.openxc.Paylo" +
+      "adFormatCommand.PayloadFormat\"\'\n\rPayload" +
+      "Format\022\010\n\004JSON\020\001\022\014\n\010PROTOBUF\020\002\"0\n\035Predef" +
+      "inedObd2RequestsCommand\022\017\n\007enabled\030\001 \001(\010",
+      "\"]\n\017CommandResponse\022)\n\004type\030\001 \001(\0162\033.open" +
+      "xc.ControlCommand.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\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\007payload\030\005 \001(\014\022\032\n\022mu" +
+      "ltiple_responses\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.DiagnosticRequest.DecodedType\"!\n\013" +
+      "DecodedType\022\010\n\004NONE\020\001\022\010\n\004OBD2\020\002\"\241\001\n\022Diag" +
+      "nosticResponse\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_i",
+      "d\030\002 \001(\r\022\014\n\004mode\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007su" +
+      "ccess\030\005 \001(\010\022\036\n\026negative_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\014" +
+      "DynamicField\022\'\n\004type\030\001 \001(\0162\031.openxc.Dyna" +
+      "micField.Type\022\024\n\014string_value\030\002 \001(\t\022\025\n\rn" +
+      "umeric_value\030\003 \001(\001\022\025\n\rboolean_value\030\004 \001(" +
+      "\010\"%\n\004Type\022\n\n\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOOL\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\005event\030\003 " +
+      "\001(\0132\024.openxc.DynamicFieldB\034\n\ncom.openxcB",
+      "\016BinaryMessages"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
-      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
-        public com.google.protobuf.ExtensionRegistry assignDescriptors(
-            com.google.protobuf.Descriptors.FileDescriptor root) {
-          descriptor = root;
-          internal_static_openxc_VehicleMessage_descriptor =
-            getDescriptor().getMessageTypes().get(0);
-          internal_static_openxc_VehicleMessage_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_VehicleMessage_descriptor,
-              new java.lang.String[] { "Type", "RawMessage", "TranslatedMessage", "DiagnosticResponse", "ControlCommand", "CommandResponse", });
-          internal_static_openxc_RawMessage_descriptor =
-            getDescriptor().getMessageTypes().get(1);
-          internal_static_openxc_RawMessage_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_RawMessage_descriptor,
-              new java.lang.String[] { "Bus", "MessageId", "Data", });
-          internal_static_openxc_ControlCommand_descriptor =
-            getDescriptor().getMessageTypes().get(2);
-          internal_static_openxc_ControlCommand_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_ControlCommand_descriptor,
-              new java.lang.String[] { "Type", "DiagnosticRequest", });
-          internal_static_openxc_CommandResponse_descriptor =
-            getDescriptor().getMessageTypes().get(3);
-          internal_static_openxc_CommandResponse_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_CommandResponse_descriptor,
-              new java.lang.String[] { "Type", "Message", });
-          internal_static_openxc_DiagnosticRequest_descriptor =
-            getDescriptor().getMessageTypes().get(4);
-          internal_static_openxc_DiagnosticRequest_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_DiagnosticRequest_descriptor,
-              new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Payload", "MultipleResponses", "Frequency", "Name", "DecodedType", });
-          internal_static_openxc_DiagnosticResponse_descriptor =
-            getDescriptor().getMessageTypes().get(5);
-          internal_static_openxc_DiagnosticResponse_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_DiagnosticResponse_descriptor,
-              new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Success", "NegativeResponseCode", "Payload", "Value", });
-          internal_static_openxc_DynamicField_descriptor =
-            getDescriptor().getMessageTypes().get(6);
-          internal_static_openxc_DynamicField_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_DynamicField_descriptor,
-              new java.lang.String[] { "Type", "StringValue", "NumericValue", "BooleanValue", });
-          internal_static_openxc_TranslatedMessage_descriptor =
-            getDescriptor().getMessageTypes().get(7);
-          internal_static_openxc_TranslatedMessage_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_openxc_TranslatedMessage_descriptor,
-              new java.lang.String[] { "Type", "Name", "Value", "Event", });
-          return null;
-        }
-      };
+        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
+          public com.google.protobuf.ExtensionRegistry assignDescriptors(
+              com.google.protobuf.Descriptors.FileDescriptor root) {
+            descriptor = root;
+            return null;
+          }
+        };
     com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
         }, assigner);
+    internal_static_openxc_VehicleMessage_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    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", });
+    internal_static_openxc_CanMessage_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_openxc_CanMessage_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_CanMessage_descriptor,
+        new java.lang.String[] { "Bus", "Id", "Data", "FrameFormat", });
+    internal_static_openxc_ControlCommand_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    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", });
+    internal_static_openxc_DiagnosticControlCommand_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_DiagnosticControlCommand_descriptor,
+        new java.lang.String[] { "Request", "Action", });
+    internal_static_openxc_PassthroughModeControlCommand_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_PassthroughModeControlCommand_descriptor,
+        new java.lang.String[] { "Bus", "Enabled", });
+    internal_static_openxc_AcceptanceFilterBypassCommand_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_AcceptanceFilterBypassCommand_descriptor,
+        new java.lang.String[] { "Bus", "Bypass", });
+    internal_static_openxc_PayloadFormatCommand_descriptor =
+      getDescriptor().getMessageTypes().get(6);
+    internal_static_openxc_PayloadFormatCommand_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_PayloadFormatCommand_descriptor,
+        new java.lang.String[] { "Format", });
+    internal_static_openxc_PredefinedObd2RequestsCommand_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_PredefinedObd2RequestsCommand_descriptor,
+        new java.lang.String[] { "Enabled", });
+    internal_static_openxc_CommandResponse_descriptor =
+      getDescriptor().getMessageTypes().get(8);
+    internal_static_openxc_CommandResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_CommandResponse_descriptor,
+        new java.lang.String[] { "Type", "Message", "Status", });
+    internal_static_openxc_DiagnosticRequest_descriptor =
+      getDescriptor().getMessageTypes().get(9);
+    internal_static_openxc_DiagnosticRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_DiagnosticRequest_descriptor,
+        new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Payload", "MultipleResponses", "Frequency", "Name", "DecodedType", });
+    internal_static_openxc_DiagnosticResponse_descriptor =
+      getDescriptor().getMessageTypes().get(10);
+    internal_static_openxc_DiagnosticResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_DiagnosticResponse_descriptor,
+        new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Success", "NegativeResponseCode", "Payload", "Value", });
+    internal_static_openxc_DynamicField_descriptor =
+      getDescriptor().getMessageTypes().get(11);
+    internal_static_openxc_DynamicField_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_DynamicField_descriptor,
+        new java.lang.String[] { "Type", "StringValue", "NumericValue", "BooleanValue", });
+    internal_static_openxc_SimpleMessage_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_openxc_SimpleMessage_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_openxc_SimpleMessage_descriptor,
+        new java.lang.String[] { "Name", "Value", "Event", });
   }
 
   // @@protoc_insertion_point(outer_class_scope)
index f831230..21ec4bd 100644 (file)
@@ -1,19 +1,26 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: openxc.proto
 
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
 from google.protobuf import descriptor_pb2
 # @@protoc_insertion_point(imports)
 
+_sym_db = _symbol_database.Default()
+
 
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
   name='openxc.proto',
   package='openxc',
-  serialized_pb='\n\x0copenxc.proto\x12\x06openxc\"\x94\x03\n\x0eVehicleMessage\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.VehicleMessage.Type\x12\'\n\x0braw_message\x18\x02 \x01(\x0b\x32\x12.openxc.RawMessage\x12\x35\n\x12translated_message\x18\x03 \x01(\x0b\x32\x19.openxc.TranslatedMessage\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\"Z\n\x04Type\x12\x07\n\x03RAW\x10\x01\x12\x0e\n\nTRANSLATED\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\x12\x13\n\x0f\x43ONTROL_COMMAND\x10\x04\x12\x14\n\x10\x43OMMAND_RESPONSE\x10\x05\";\n\nRawMessage\x12\x0b\n\x03\x62us\x18\x01 \x01(\x05\x12\x12\n\nmessage_id\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"\xa6\x01\n\x0e\x43ontrolCommand\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12\x35\n\x12\x64iagnostic_request\x18\x02 \x01(\x0b\x32\x19.openxc.DiagnosticRequest\"2\n\x04Type\x12\x0b\n\x07VERSION\x10\x01\x12\r\n\tDEVICE_ID\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\"M\n\x0f\x43ommandResponse\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openxc.ControlCommand.Type\x12\x0f\n\x07message\x18\x02 \x01(\t\"\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\"\xf7\x01\n\x11TranslatedMessage\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.openxc.TranslatedMessage.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.openxc.DynamicField\x12#\n\x05\x65vent\x18\x04 \x01(\x0b\x32\x14.openxc.DynamicField\"\\\n\x04Type\x12\n\n\x06STRING\x10\x01\x12\x07\n\x03NUM\x10\x02\x12\x08\n\x04\x42OOL\x10\x03\x12\x12\n\x0e\x45VENTED_STRING\x10\x04\x12\x0f\n\x0b\x45VENTED_NUM\x10\x05\x12\x10\n\x0c\x45VENTED_BOOL\x10\x06\x42\x1c\n\ncom.openxcB\x0e\x42inaryMessages')
+  serialized_pb=_b('\n\x0copenxc.proto\x12\x06openxc\"\x88\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\"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\"\xb8\x04\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\"\x93\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\"\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\"]\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')
+)
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 
 
@@ -24,11 +31,11 @@ _VEHICLEMESSAGE_TYPE = _descriptor.EnumDescriptor(
   file=DESCRIPTOR,
   values=[
     _descriptor.EnumValueDescriptor(
-      name='RAW', index=0, number=1,
+      name='CAN', index=0, number=1,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='TRANSLATED', index=1, number=2,
+      name='SIMPLE', index=1, number=2,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
@@ -46,9 +53,32 @@ _VEHICLEMESSAGE_TYPE = _descriptor.EnumDescriptor(
   ],
   containing_type=None,
   options=None,
-  serialized_start=339,
-  serialized_end=429,
+  serialized_start=331,
+  serialized_end=417,
 )
+_sym_db.RegisterEnumDescriptor(_VEHICLEMESSAGE_TYPE)
+
+_CANMESSAGE_FRAMEFORMAT = _descriptor.EnumDescriptor(
+  name='FrameFormat',
+  full_name='openxc.CanMessage.FrameFormat',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='STANDARD', index=0, number=1,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EXTENDED', index=1, number=2,
+      options=None,
+      type=None),
+  ],
+  containing_type=None,
+  options=None,
+  serialized_start=527,
+  serialized_end=568,
+)
+_sym_db.RegisterEnumDescriptor(_CANMESSAGE_FRAMEFORMAT)
 
 _CONTROLCOMMAND_TYPE = _descriptor.EnumDescriptor(
   name='Type',
@@ -68,62 +98,99 @@ _CONTROLCOMMAND_TYPE = _descriptor.EnumDescriptor(
       name='DIAGNOSTIC', index=2, number=3,
       options=None,
       type=None),
+    _descriptor.EnumValueDescriptor(
+      name='PASSTHROUGH', index=3, number=4,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='ACCEPTANCE_FILTER_BYPASS', index=4, number=5,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='PAYLOAD_FORMAT', index=5, number=6,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='PREDEFINED_OBD2_REQUESTS', index=6, number=7,
+      options=None,
+      type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=609,
-  serialized_end=659,
+  serialized_start=992,
+  serialized_end=1139,
 )
+_sym_db.RegisterEnumDescriptor(_CONTROLCOMMAND_TYPE)
 
-_DIAGNOSTICREQUEST_DECODEDTYPE = _descriptor.EnumDescriptor(
-  name='DecodedType',
-  full_name='openxc.DiagnosticRequest.DecodedType',
+_DIAGNOSTICCONTROLCOMMAND_ACTION = _descriptor.EnumDescriptor(
+  name='Action',
+  full_name='openxc.DiagnosticControlCommand.Action',
   filename=None,
   file=DESCRIPTOR,
   values=[
     _descriptor.EnumValueDescriptor(
-      name='NONE', index=0, number=1,
+      name='ADD', index=0, number=1,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='OBD2', index=1, number=2,
+      name='CANCEL', index=1, number=2,
       options=None,
       type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=961,
-  serialized_end=994,
+  serialized_start=1271,
+  serialized_end=1300,
 )
+_sym_db.RegisterEnumDescriptor(_DIAGNOSTICCONTROLCOMMAND_ACTION)
 
-_DYNAMICFIELD_TYPE = _descriptor.EnumDescriptor(
-  name='Type',
-  full_name='openxc.DynamicField.Type',
+_PAYLOADFORMATCOMMAND_PAYLOADFORMAT = _descriptor.EnumDescriptor(
+  name='PayloadFormat',
+  full_name='openxc.PayloadFormatCommand.PayloadFormat',
   filename=None,
   file=DESCRIPTOR,
   values=[
     _descriptor.EnumValueDescriptor(
-      name='STRING', index=0, number=1,
+      name='JSON', index=0, number=1,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='NUM', index=1, number=2,
+      name='PROTOBUF', index=1, number=2,
+      options=None,
+      type=None),
+  ],
+  containing_type=None,
+  options=None,
+  serialized_start=1511,
+  serialized_end=1550,
+)
+_sym_db.RegisterEnumDescriptor(_PAYLOADFORMATCOMMAND_PAYLOADFORMAT)
+
+_DIAGNOSTICREQUEST_DECODEDTYPE = _descriptor.EnumDescriptor(
+  name='DecodedType',
+  full_name='openxc.DiagnosticRequest.DecodedType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='NONE', index=0, number=1,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='BOOL', index=2, number=3,
+      name='OBD2', index=1, number=2,
       options=None,
       type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=1286,
-  serialized_end=1323,
+  serialized_start=1918,
+  serialized_end=1951,
 )
+_sym_db.RegisterEnumDescriptor(_DIAGNOSTICREQUEST_DECODEDTYPE)
 
-_TRANSLATEDMESSAGE_TYPE = _descriptor.EnumDescriptor(
+_DYNAMICFIELD_TYPE = _descriptor.EnumDescriptor(
   name='Type',
-  full_name='openxc.TranslatedMessage.Type',
+  full_name='openxc.DynamicField.Type',
   filename=None,
   file=DESCRIPTOR,
   values=[
@@ -139,24 +206,13 @@ _TRANSLATEDMESSAGE_TYPE = _descriptor.EnumDescriptor(
       name='BOOL', index=2, number=3,
       options=None,
       type=None),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTED_STRING', index=3, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTED_NUM', index=4, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTED_BOOL', index=5, number=6,
-      options=None,
-      type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=1481,
-  serialized_end=1573,
+  serialized_start=2243,
+  serialized_end=2280,
 )
+_sym_db.RegisterEnumDescriptor(_DYNAMICFIELD_TYPE)
 
 
 _VEHICLEMESSAGE = _descriptor.Descriptor(
@@ -174,14 +230,14 @@ _VEHICLEMESSAGE = _descriptor.Descriptor(
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='raw_message', full_name='openxc.VehicleMessage.raw_message', index=1,
+      name='can_message', full_name='openxc.VehicleMessage.can_message', index=1,
       number=2, 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),
     _descriptor.FieldDescriptor(
-      name='translated_message', full_name='openxc.VehicleMessage.translated_message', index=2,
+      name='simple_message', full_name='openxc.VehicleMessage.simple_message', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
@@ -218,36 +274,45 @@ _VEHICLEMESSAGE = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
+  oneofs=[
+  ],
   serialized_start=25,
-  serialized_end=429,
+  serialized_end=417,
 )
 
 
-_RAWMESSAGE = _descriptor.Descriptor(
-  name='RawMessage',
-  full_name='openxc.RawMessage',
+_CANMESSAGE = _descriptor.Descriptor(
+  name='CanMessage',
+  full_name='openxc.CanMessage',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   fields=[
     _descriptor.FieldDescriptor(
-      name='bus', full_name='openxc.RawMessage.bus', index=0,
+      name='bus', full_name='openxc.CanMessage.bus', index=0,
       number=1, type=5, cpp_type=1, 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),
     _descriptor.FieldDescriptor(
-      name='message_id', full_name='openxc.RawMessage.message_id', index=1,
+      name='id', full_name='openxc.CanMessage.id', index=1,
       number=2, 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),
     _descriptor.FieldDescriptor(
-      name='data', full_name='openxc.RawMessage.data', index=2,
+      name='data', full_name='openxc.CanMessage.data', index=2,
       number=3, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value="",
+      has_default_value=False, default_value=_b(""),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='frame_format', full_name='openxc.CanMessage.frame_format', index=3,
+      number=4, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=1,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -256,12 +321,15 @@ _RAWMESSAGE = _descriptor.Descriptor(
   ],
   nested_types=[],
   enum_types=[
+    _CANMESSAGE_FRAMEFORMAT,
   ],
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=431,
-  serialized_end=490,
+  oneofs=[
+  ],
+  serialized_start=420,
+  serialized_end=568,
 )
 
 
@@ -286,6 +354,34 @@ _CONTROLCOMMAND = _descriptor.Descriptor(
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
+    _descriptor.FieldDescriptor(
+      name='passthrough_mode_request', full_name='openxc.ControlCommand.passthrough_mode_request', index=2,
+      number=3, 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),
+    _descriptor.FieldDescriptor(
+      name='acceptance_filter_bypass_command', full_name='openxc.ControlCommand.acceptance_filter_bypass_command', index=3,
+      number=4, 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),
+    _descriptor.FieldDescriptor(
+      name='payload_format_command', full_name='openxc.ControlCommand.payload_format_command', index=4,
+      number=5, 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),
+    _descriptor.FieldDescriptor(
+      name='predefined_obd2_requests_command', full_name='openxc.ControlCommand.predefined_obd2_requests_command', index=5,
+      number=6, 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=[
   ],
@@ -296,8 +392,183 @@ _CONTROLCOMMAND = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=493,
-  serialized_end=659,
+  oneofs=[
+  ],
+  serialized_start=571,
+  serialized_end=1139,
+)
+
+
+_DIAGNOSTICCONTROLCOMMAND = _descriptor.Descriptor(
+  name='DiagnosticControlCommand',
+  full_name='openxc.DiagnosticControlCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='request', full_name='openxc.DiagnosticControlCommand.request', index=0,
+      number=1, 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),
+    _descriptor.FieldDescriptor(
+      name='action', full_name='openxc.DiagnosticControlCommand.action', index=1,
+      number=2, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=1,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _DIAGNOSTICCONTROLCOMMAND_ACTION,
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1142,
+  serialized_end=1300,
+)
+
+
+_PASSTHROUGHMODECONTROLCOMMAND = _descriptor.Descriptor(
+  name='PassthroughModeControlCommand',
+  full_name='openxc.PassthroughModeControlCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='bus', full_name='openxc.PassthroughModeControlCommand.bus', index=0,
+      number=1, type=5, cpp_type=1, 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),
+    _descriptor.FieldDescriptor(
+      name='enabled', full_name='openxc.PassthroughModeControlCommand.enabled', index=1,
+      number=2, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      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=[],
+  oneofs=[
+  ],
+  serialized_start=1302,
+  serialized_end=1363,
+)
+
+
+_ACCEPTANCEFILTERBYPASSCOMMAND = _descriptor.Descriptor(
+  name='AcceptanceFilterBypassCommand',
+  full_name='openxc.AcceptanceFilterBypassCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='bus', full_name='openxc.AcceptanceFilterBypassCommand.bus', index=0,
+      number=1, type=5, cpp_type=1, 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),
+    _descriptor.FieldDescriptor(
+      name='bypass', full_name='openxc.AcceptanceFilterBypassCommand.bypass', index=1,
+      number=2, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      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=[],
+  oneofs=[
+  ],
+  serialized_start=1365,
+  serialized_end=1425,
+)
+
+
+_PAYLOADFORMATCOMMAND = _descriptor.Descriptor(
+  name='PayloadFormatCommand',
+  full_name='openxc.PayloadFormatCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='format', full_name='openxc.PayloadFormatCommand.format', index=0,
+      number=1, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=1,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _PAYLOADFORMATCOMMAND_PAYLOADFORMAT,
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1427,
+  serialized_end=1550,
+)
+
+
+_PREDEFINEDOBD2REQUESTSCOMMAND = _descriptor.Descriptor(
+  name='PredefinedObd2RequestsCommand',
+  full_name='openxc.PredefinedObd2RequestsCommand',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='enabled', full_name='openxc.PredefinedObd2RequestsCommand.enabled', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      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=[],
+  oneofs=[
+  ],
+  serialized_start=1552,
+  serialized_end=1600,
 )
 
 
@@ -318,7 +589,14 @@ _COMMANDRESPONSE = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='message', full_name='openxc.CommandResponse.message', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=unicode("", "utf-8"),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='openxc.CommandResponse.status', index=2,
+      number=3, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -331,8 +609,10 @@ _COMMANDRESPONSE = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=661,
-  serialized_end=738,
+  oneofs=[
+  ],
+  serialized_start=1602,
+  serialized_end=1695,
 )
 
 
@@ -374,7 +654,7 @@ _DIAGNOSTICREQUEST = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='payload', full_name='openxc.DiagnosticRequest.payload', index=4,
       number=5, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value="",
+      has_default_value=False, default_value=_b(""),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -395,7 +675,7 @@ _DIAGNOSTICREQUEST = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='name', full_name='openxc.DiagnosticRequest.name', index=7,
       number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=unicode("", "utf-8"),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -416,8 +696,10 @@ _DIAGNOSTICREQUEST = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=741,
-  serialized_end=994,
+  oneofs=[
+  ],
+  serialized_start=1698,
+  serialized_end=1951,
 )
 
 
@@ -473,7 +755,7 @@ _DIAGNOSTICRESPONSE = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='payload', full_name='openxc.DiagnosticResponse.payload', index=6,
       number=7, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value="",
+      has_default_value=False, default_value=_b(""),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -493,8 +775,10 @@ _DIAGNOSTICRESPONSE = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=997,
-  serialized_end=1158,
+  oneofs=[
+  ],
+  serialized_start=1954,
+  serialized_end=2115,
 )
 
 
@@ -515,7 +799,7 @@ _DYNAMICFIELD = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='string_value', full_name='openxc.DynamicField.string_value', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=unicode("", "utf-8"),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
@@ -543,42 +827,37 @@ _DYNAMICFIELD = _descriptor.Descriptor(
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1161,
-  serialized_end=1323,
+  oneofs=[
+  ],
+  serialized_start=2118,
+  serialized_end=2280,
 )
 
 
-_TRANSLATEDMESSAGE = _descriptor.Descriptor(
-  name='TranslatedMessage',
-  full_name='openxc.TranslatedMessage',
+_SIMPLEMESSAGE = _descriptor.Descriptor(
+  name='SimpleMessage',
+  full_name='openxc.SimpleMessage',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
   fields=[
     _descriptor.FieldDescriptor(
-      name='type', full_name='openxc.TranslatedMessage.type', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=1,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='name', full_name='openxc.TranslatedMessage.name', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=unicode("", "utf-8"),
+      name='name', full_name='openxc.SimpleMessage.name', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='value', full_name='openxc.TranslatedMessage.value', index=2,
-      number=3, type=11, cpp_type=10, label=1,
+      name='value', full_name='openxc.SimpleMessage.value', index=1,
+      number=2, 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),
     _descriptor.FieldDescriptor(
-      name='event', full_name='openxc.TranslatedMessage.event', index=3,
-      number=4, type=11, cpp_type=10, label=1,
+      name='event', full_name='openxc.SimpleMessage.event', index=2,
+      number=3, 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,
@@ -588,92 +867,150 @@ _TRANSLATEDMESSAGE = _descriptor.Descriptor(
   ],
   nested_types=[],
   enum_types=[
-    _TRANSLATEDMESSAGE_TYPE,
   ],
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1326,
-  serialized_end=1573,
+  oneofs=[
+  ],
+  serialized_start=2282,
+  serialized_end=2385,
 )
 
 _VEHICLEMESSAGE.fields_by_name['type'].enum_type = _VEHICLEMESSAGE_TYPE
-_VEHICLEMESSAGE.fields_by_name['raw_message'].message_type = _RAWMESSAGE
-_VEHICLEMESSAGE.fields_by_name['translated_message'].message_type = _TRANSLATEDMESSAGE
+_VEHICLEMESSAGE.fields_by_name['can_message'].message_type = _CANMESSAGE
+_VEHICLEMESSAGE.fields_by_name['simple_message'].message_type = _SIMPLEMESSAGE
 _VEHICLEMESSAGE.fields_by_name['diagnostic_response'].message_type = _DIAGNOSTICRESPONSE
 _VEHICLEMESSAGE.fields_by_name['control_command'].message_type = _CONTROLCOMMAND
 _VEHICLEMESSAGE.fields_by_name['command_response'].message_type = _COMMANDRESPONSE
-_VEHICLEMESSAGE_TYPE.containing_type = _VEHICLEMESSAGE;
+_VEHICLEMESSAGE_TYPE.containing_type = _VEHICLEMESSAGE
+_CANMESSAGE.fields_by_name['frame_format'].enum_type = _CANMESSAGE_FRAMEFORMAT
+_CANMESSAGE_FRAMEFORMAT.containing_type = _CANMESSAGE
 _CONTROLCOMMAND.fields_by_name['type'].enum_type = _CONTROLCOMMAND_TYPE
-_CONTROLCOMMAND.fields_by_name['diagnostic_request'].message_type = _DIAGNOSTICREQUEST
-_CONTROLCOMMAND_TYPE.containing_type = _CONTROLCOMMAND;
+_CONTROLCOMMAND.fields_by_name['diagnostic_request'].message_type = _DIAGNOSTICCONTROLCOMMAND
+_CONTROLCOMMAND.fields_by_name['passthrough_mode_request'].message_type = _PASSTHROUGHMODECONTROLCOMMAND
+_CONTROLCOMMAND.fields_by_name['acceptance_filter_bypass_command'].message_type = _ACCEPTANCEFILTERBYPASSCOMMAND
+_CONTROLCOMMAND.fields_by_name['payload_format_command'].message_type = _PAYLOADFORMATCOMMAND
+_CONTROLCOMMAND.fields_by_name['predefined_obd2_requests_command'].message_type = _PREDEFINEDOBD2REQUESTSCOMMAND
+_CONTROLCOMMAND_TYPE.containing_type = _CONTROLCOMMAND
+_DIAGNOSTICCONTROLCOMMAND.fields_by_name['request'].message_type = _DIAGNOSTICREQUEST
+_DIAGNOSTICCONTROLCOMMAND.fields_by_name['action'].enum_type = _DIAGNOSTICCONTROLCOMMAND_ACTION
+_DIAGNOSTICCONTROLCOMMAND_ACTION.containing_type = _DIAGNOSTICCONTROLCOMMAND
+_PAYLOADFORMATCOMMAND.fields_by_name['format'].enum_type = _PAYLOADFORMATCOMMAND_PAYLOADFORMAT
+_PAYLOADFORMATCOMMAND_PAYLOADFORMAT.containing_type = _PAYLOADFORMATCOMMAND
 _COMMANDRESPONSE.fields_by_name['type'].enum_type = _CONTROLCOMMAND_TYPE
 _DIAGNOSTICREQUEST.fields_by_name['decoded_type'].enum_type = _DIAGNOSTICREQUEST_DECODEDTYPE
-_DIAGNOSTICREQUEST_DECODEDTYPE.containing_type = _DIAGNOSTICREQUEST;
+_DIAGNOSTICREQUEST_DECODEDTYPE.containing_type = _DIAGNOSTICREQUEST
 _DYNAMICFIELD.fields_by_name['type'].enum_type = _DYNAMICFIELD_TYPE
-_DYNAMICFIELD_TYPE.containing_type = _DYNAMICFIELD;
-_TRANSLATEDMESSAGE.fields_by_name['type'].enum_type = _TRANSLATEDMESSAGE_TYPE
-_TRANSLATEDMESSAGE.fields_by_name['value'].message_type = _DYNAMICFIELD
-_TRANSLATEDMESSAGE.fields_by_name['event'].message_type = _DYNAMICFIELD
-_TRANSLATEDMESSAGE_TYPE.containing_type = _TRANSLATEDMESSAGE;
+_DYNAMICFIELD_TYPE.containing_type = _DYNAMICFIELD
+_SIMPLEMESSAGE.fields_by_name['value'].message_type = _DYNAMICFIELD
+_SIMPLEMESSAGE.fields_by_name['event'].message_type = _DYNAMICFIELD
 DESCRIPTOR.message_types_by_name['VehicleMessage'] = _VEHICLEMESSAGE
-DESCRIPTOR.message_types_by_name['RawMessage'] = _RAWMESSAGE
+DESCRIPTOR.message_types_by_name['CanMessage'] = _CANMESSAGE
 DESCRIPTOR.message_types_by_name['ControlCommand'] = _CONTROLCOMMAND
+DESCRIPTOR.message_types_by_name['DiagnosticControlCommand'] = _DIAGNOSTICCONTROLCOMMAND
+DESCRIPTOR.message_types_by_name['PassthroughModeControlCommand'] = _PASSTHROUGHMODECONTROLCOMMAND
+DESCRIPTOR.message_types_by_name['AcceptanceFilterBypassCommand'] = _ACCEPTANCEFILTERBYPASSCOMMAND
+DESCRIPTOR.message_types_by_name['PayloadFormatCommand'] = _PAYLOADFORMATCOMMAND
+DESCRIPTOR.message_types_by_name['PredefinedObd2RequestsCommand'] = _PREDEFINEDOBD2REQUESTSCOMMAND
 DESCRIPTOR.message_types_by_name['CommandResponse'] = _COMMANDRESPONSE
 DESCRIPTOR.message_types_by_name['DiagnosticRequest'] = _DIAGNOSTICREQUEST
 DESCRIPTOR.message_types_by_name['DiagnosticResponse'] = _DIAGNOSTICRESPONSE
 DESCRIPTOR.message_types_by_name['DynamicField'] = _DYNAMICFIELD
-DESCRIPTOR.message_types_by_name['TranslatedMessage'] = _TRANSLATEDMESSAGE
-
-class VehicleMessage(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _VEHICLEMESSAGE
+DESCRIPTOR.message_types_by_name['SimpleMessage'] = _SIMPLEMESSAGE
 
+VehicleMessage = _reflection.GeneratedProtocolMessageType('VehicleMessage', (_message.Message,), dict(
+  DESCRIPTOR = _VEHICLEMESSAGE,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.VehicleMessage)
-
-class RawMessage(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _RAWMESSAGE
-
-  # @@protoc_insertion_point(class_scope:openxc.RawMessage)
-
-class ControlCommand(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _CONTROLCOMMAND
-
+  ))
+_sym_db.RegisterMessage(VehicleMessage)
+
+CanMessage = _reflection.GeneratedProtocolMessageType('CanMessage', (_message.Message,), dict(
+  DESCRIPTOR = _CANMESSAGE,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.CanMessage)
+  ))
+_sym_db.RegisterMessage(CanMessage)
+
+ControlCommand = _reflection.GeneratedProtocolMessageType('ControlCommand', (_message.Message,), dict(
+  DESCRIPTOR = _CONTROLCOMMAND,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.ControlCommand)
-
-class CommandResponse(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _COMMANDRESPONSE
-
+  ))
+_sym_db.RegisterMessage(ControlCommand)
+
+DiagnosticControlCommand = _reflection.GeneratedProtocolMessageType('DiagnosticControlCommand', (_message.Message,), dict(
+  DESCRIPTOR = _DIAGNOSTICCONTROLCOMMAND,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.DiagnosticControlCommand)
+  ))
+_sym_db.RegisterMessage(DiagnosticControlCommand)
+
+PassthroughModeControlCommand = _reflection.GeneratedProtocolMessageType('PassthroughModeControlCommand', (_message.Message,), dict(
+  DESCRIPTOR = _PASSTHROUGHMODECONTROLCOMMAND,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.PassthroughModeControlCommand)
+  ))
+_sym_db.RegisterMessage(PassthroughModeControlCommand)
+
+AcceptanceFilterBypassCommand = _reflection.GeneratedProtocolMessageType('AcceptanceFilterBypassCommand', (_message.Message,), dict(
+  DESCRIPTOR = _ACCEPTANCEFILTERBYPASSCOMMAND,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.AcceptanceFilterBypassCommand)
+  ))
+_sym_db.RegisterMessage(AcceptanceFilterBypassCommand)
+
+PayloadFormatCommand = _reflection.GeneratedProtocolMessageType('PayloadFormatCommand', (_message.Message,), dict(
+  DESCRIPTOR = _PAYLOADFORMATCOMMAND,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.PayloadFormatCommand)
+  ))
+_sym_db.RegisterMessage(PayloadFormatCommand)
+
+PredefinedObd2RequestsCommand = _reflection.GeneratedProtocolMessageType('PredefinedObd2RequestsCommand', (_message.Message,), dict(
+  DESCRIPTOR = _PREDEFINEDOBD2REQUESTSCOMMAND,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.PredefinedObd2RequestsCommand)
+  ))
+_sym_db.RegisterMessage(PredefinedObd2RequestsCommand)
+
+CommandResponse = _reflection.GeneratedProtocolMessageType('CommandResponse', (_message.Message,), dict(
+  DESCRIPTOR = _COMMANDRESPONSE,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.CommandResponse)
+  ))
+_sym_db.RegisterMessage(CommandResponse)
 
-class DiagnosticRequest(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _DIAGNOSTICREQUEST
-
+DiagnosticRequest = _reflection.GeneratedProtocolMessageType('DiagnosticRequest', (_message.Message,), dict(
+  DESCRIPTOR = _DIAGNOSTICREQUEST,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.DiagnosticRequest)
+  ))
+_sym_db.RegisterMessage(DiagnosticRequest)
 
-class DiagnosticResponse(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _DIAGNOSTICRESPONSE
-
+DiagnosticResponse = _reflection.GeneratedProtocolMessageType('DiagnosticResponse', (_message.Message,), dict(
+  DESCRIPTOR = _DIAGNOSTICRESPONSE,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.DiagnosticResponse)
+  ))
+_sym_db.RegisterMessage(DiagnosticResponse)
 
-class DynamicField(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _DYNAMICFIELD
-
+DynamicField = _reflection.GeneratedProtocolMessageType('DynamicField', (_message.Message,), dict(
+  DESCRIPTOR = _DYNAMICFIELD,
+  __module__ = 'openxc_pb2'
   # @@protoc_insertion_point(class_scope:openxc.DynamicField)
+  ))
+_sym_db.RegisterMessage(DynamicField)
 
-class TranslatedMessage(_message.Message):
-  __metaclass__ = _reflection.GeneratedProtocolMessageType
-  DESCRIPTOR = _TRANSLATEDMESSAGE
-
-  # @@protoc_insertion_point(class_scope:openxc.TranslatedMessage)
+SimpleMessage = _reflection.GeneratedProtocolMessageType('SimpleMessage', (_message.Message,), dict(
+  DESCRIPTOR = _SIMPLEMESSAGE,
+  __module__ = 'openxc_pb2'
+  # @@protoc_insertion_point(class_scope:openxc.SimpleMessage)
+  ))
+_sym_db.RegisterMessage(SimpleMessage)
 
 
 DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\n\ncom.openxcB\016BinaryMessages')
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\ncom.openxcB\016BinaryMessages'))
 # @@protoc_insertion_point(module_scope)
index 906c828..b947dc6 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 906c8283b5995eb7b27f4958a6a6502ae0deea07
+Subproject commit b947dc6e2c0d63a29e83ebf9c8af450d2531aef2
index 80d0f9b..5a01879 100644 (file)
@@ -1,7 +1,7 @@
-openxc.TranslatedMessage.name max_size:100
+openxc.SimpleMessage.name max_size:100
 openxc.DynamicField.string_value max_size:100
 openxc.CommandResponse.message max_size:128
 openxc.DiagnosticResponse.payload max_size:8
 openxc.DiagnosticRequest.name max_size:10
 openxc.DiagnosticRequest.payload max_size:8
-openxc.RawMessage.data max_size:8
+openxc.CanMessage.data max_size:8
index 43f3199..586ead2 100644 (file)
@@ -4,33 +4,81 @@ option java_package = "com.openxc";
 option java_outer_classname = "BinaryMessages";
 
 message VehicleMessage {
-    enum Type { RAW = 1; TRANSLATED = 2; DIAGNOSTIC = 3; CONTROL_COMMAND = 4;
+    enum Type { CAN = 1; SIMPLE = 2; DIAGNOSTIC = 3; CONTROL_COMMAND = 4;
             COMMAND_RESPONSE = 5; }
 
     optional Type type = 1;
-    optional RawMessage raw_message = 2;
-    optional TranslatedMessage translated_message = 3;
+    optional CanMessage can_message = 2;
+    optional SimpleMessage simple_message = 3;
     optional DiagnosticResponse diagnostic_response = 4;
     optional ControlCommand control_command = 5;
     optional CommandResponse command_response = 6;
 }
 
-message RawMessage {
+message CanMessage {
+    enum FrameFormat {
+        STANDARD = 1;
+        EXTENDED = 2;
+    }
     optional int32 bus = 1;
-    optional uint32 message_id = 2;
+    optional uint32 id = 2;
     optional bytes data = 3;
+    optional FrameFormat frame_format = 4;
 }
 
 message ControlCommand {
-    enum Type { VERSION = 1; DEVICE_ID = 2; DIAGNOSTIC = 3; }
+    enum Type {
+        VERSION = 1;
+        DEVICE_ID = 2;
+        DIAGNOSTIC = 3;
+        PASSTHROUGH = 4;
+        ACCEPTANCE_FILTER_BYPASS = 5;
+        PAYLOAD_FORMAT = 6;
+        PREDEFINED_OBD2_REQUESTS = 7;
+    }
 
     optional Type type = 1;
-    optional DiagnosticRequest diagnostic_request = 2;
+    optional DiagnosticControlCommand diagnostic_request = 2;
+    optional PassthroughModeControlCommand passthrough_mode_request = 3;
+    optional AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;
+    optional PayloadFormatCommand payload_format_command = 5;
+    optional PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;
+}
+
+message DiagnosticControlCommand {
+    enum Action { ADD = 1; CANCEL = 2; }
+
+    optional DiagnosticRequest request = 1;
+    optional Action action = 2;
+}
+
+message PassthroughModeControlCommand {
+    optional int32 bus = 1;
+    optional bool enabled = 2;
+}
+
+message AcceptanceFilterBypassCommand {
+    optional int32 bus = 1;
+    optional bool bypass = 2;
+}
+
+message PayloadFormatCommand {
+    enum PayloadFormat {
+        JSON = 1;
+        PROTOBUF = 2;
+    }
+
+    optional PayloadFormat format = 1;
+}
+
+message PredefinedObd2RequestsCommand {
+    optional bool enabled = 1;
 }
 
 message CommandResponse {
     optional ControlCommand.Type type = 1;
     optional string message = 2;
+    optional bool status = 3;
 }
 
 message DiagnosticRequest {
@@ -71,12 +119,8 @@ message DynamicField {
     optional bool boolean_value = 4;
 }
 
-message TranslatedMessage {
-    enum Type { STRING = 1; NUM = 2; BOOL = 3;
-        EVENTED_STRING = 4; EVENTED_NUM = 5; EVENTED_BOOL = 6;}
-
-    optional Type type = 1;
-    optional string name = 2;
-    optional DynamicField value = 3;
-    optional DynamicField event = 4;
+message SimpleMessage {
+    optional string name = 1;
+    optional DynamicField value = 2;
+    optional DynamicField event = 3;
 }