diff options
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | README.md | 75 | ||||
-rw-r--r-- | gen/cpp/openxc.pb | 22 | ||||
-rw-r--r-- | gen/cpp/openxc.pb.c | 48 | ||||
-rw-r--r-- | gen/cpp/openxc.pb.h | 45 | ||||
-rw-r--r-- | gen/java/com/openxc/BinaryMessages.java | 1172 | ||||
-rw-r--r-- | gen/python/openxc_pb2.py | 109 | ||||
m--------- | libs/nanopb | 13 | ||||
-rw-r--r-- | openxc.options | 6 | ||||
-rw-r--r-- | openxc.proto | 15 |
10 files changed, 1443 insertions, 65 deletions
@@ -1,5 +1,6 @@ nanopb: proto - python libs/nanopb/generator/nanopb_generator.py -s max_size:100 -f openxc.options gen/cpp/openxc.pb + make -C libs/nanopb/generator/proto + python libs/nanopb/generator/nanopb_generator.py gen/cpp/openxc.pb -f openxc.options proto: openxc.proto @mkdir -p gen/java @@ -42,6 +42,81 @@ is sent as a JSON object, separated by newlines. The format of each object is: 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. +## Diagnostic Messages + +### Requests + + {"bus": 1, + "id": 1234, + "mode": 1, + "pid": 5, + "payload": "0x1234", + "frequency": 0} + +**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 - 0x1 through 0xf (0x1 through 0xa + 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. + +**frequency** - (optional, defaults to 0) The frequency in Hz to send this + request. To send a single request, set this to 0 or leave it out. + +TODO it'd be nice to have the OBD-II PIDs built in, with the proper conversion +functions - that may need a different output format + +If you're just requesting a PID, you can use a simplified format for the +request: + + {"bus": 1, "id": 1234, "mode": 1, "pid": 5} + +### Responses + + {"bus": 1, + "id": 1234, + "mode": 1, + "pid": 5, + "success": true, + "negative_response_code": 17, + "payload": "0x1234"} + +**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 requsted node returned an error, + `success` will be `false` and this field will contain the negative response + code (NRC). + +**payload** - (optional) up to 7 bytes of data returned in the response, + 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. + +The response to a simple PID requset would look like this: + + {"bus": 1, "id": 1234, "mode": 1, "pid": 5, "payload": "0x2"} + +TODO again, it'd be nice to have the OBD-II PIDs built in, with the proper +conversion functions so the response here included the actual transformed value +of the pid and a human readable name + ## Trace File Format An OpenXC vehicle trace file is a plaintext file that contains JSON objects, diff --git a/gen/cpp/openxc.pb b/gen/cpp/openxc.pb index 88cf91aa..9d6271d1 100644 --- a/gen/cpp/openxc.pb +++ b/gen/cpp/openxc.pb @@ -1,20 +1,32 @@ -è -openxc.protoopenxc"¼ +Ã +openxc.protoopenxc"ƒ VehicleMessage) type (2.openxc.VehicleMessage.Type' raw_message (2.openxc.RawMessage5 -translated_message (2.openxc.TranslatedMessage" +translated_message (2.openxc.TranslatedMessage5 +diagnostic_message (2.openxc.DiagnosticMessage"/ Type RAW -TRANSLATED"; +TRANSLATED + +DIAGNOSTIC"; RawMessage bus ( message_id (
-data ("µ +data ("‘ +DiagnosticMessage +bus ( + +message_id (
+mode (
+pid (
+success ( +negative_response_code (
+payload ("µ TranslatedMessage, type (2.openxc.TranslatedMessage.Type name ( diff --git a/gen/cpp/openxc.pb.c b/gen/cpp/openxc.pb.c index 1625254e..3c3958f1 100644 --- a/gen/cpp/openxc.pb.c +++ b/gen/cpp/openxc.pb.c @@ -1,44 +1,56 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.2.4-dev at Thu Oct 24 10:06:38 2013. */ +/* Generated by nanopb-0.2.5 at Fri Jan 17 14:40:08 2014. */ #include "openxc.pb.h" -const pb_field_t openxc_VehicleMessage_fields[4] = { - 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), +const pb_field_t openxc_VehicleMessage_fields[5] = { + 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_message, translated_message, &openxc_DiagnosticMessage_fields), 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, UINT64 , OPTIONAL, STATIC, OTHER, openxc_RawMessage, data, message_id, 0), + 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, UINT64 , OPTIONAL, STATIC , OTHER, openxc_RawMessage, data, message_id, 0), + PB_LAST_FIELD +}; + +const pb_field_t openxc_DiagnosticMessage_fields[8] = { + PB_FIELD2( 1, INT32 , OPTIONAL, STATIC , FIRST, openxc_DiagnosticMessage, bus, bus, 0), + PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, message_id, bus, 0), + PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, mode, message_id, 0), + PB_FIELD2( 4, UINT32 , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, pid, mode, 0), + PB_FIELD2( 5, BOOL , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, success, pid, 0), + PB_FIELD2( 6, UINT32 , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, negative_response_code, success, 0), + PB_FIELD2( 7, BYTES , OPTIONAL, STATIC , OTHER, openxc_DiagnosticMessage, payload, negative_response_code, 0), PB_LAST_FIELD }; const pb_field_t openxc_TranslatedMessage_fields[9] = { - 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, STRING , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, string_value, name, 0), - PB_FIELD2( 4, DOUBLE , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, numeric_value, string_value, 0), - PB_FIELD2( 5, BOOL , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, boolean_value, numeric_value, 0), - PB_FIELD2( 6, STRING , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, string_event, boolean_value, 0), - PB_FIELD2( 7, DOUBLE , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, numeric_event, string_event, 0), - PB_FIELD2( 8, BOOL , OPTIONAL, STATIC, OTHER, openxc_TranslatedMessage, boolean_event, numeric_event, 0), + 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, STRING , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, string_value, name, 0), + PB_FIELD2( 4, DOUBLE , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, numeric_value, string_value, 0), + PB_FIELD2( 5, BOOL , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, boolean_value, numeric_value, 0), + PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, string_event, boolean_value, 0), + PB_FIELD2( 7, DOUBLE , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, numeric_event, string_event, 0), + PB_FIELD2( 8, BOOL , OPTIONAL, STATIC , OTHER, openxc_TranslatedMessage, boolean_event, numeric_event, 0), 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), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_TranslatedMessage) +STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, raw_message) < 256 && pb_membersize(openxc_VehicleMessage, translated_message) < 256 && pb_membersize(openxc_VehicleMessage, diagnostic_message) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_DiagnosticMessage_openxc_TranslatedMessage) #endif #if !defined(PB_FIELD_32BIT) -STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, raw_message) < 65536 && pb_membersize(openxc_VehicleMessage, translated_message) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_TranslatedMessage) +STATIC_ASSERT((pb_membersize(openxc_VehicleMessage, raw_message) < 65536 && pb_membersize(openxc_VehicleMessage, translated_message) < 65536 && pb_membersize(openxc_VehicleMessage, diagnostic_message) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_openxc_VehicleMessage_openxc_RawMessage_openxc_DiagnosticMessage_openxc_TranslatedMessage) #endif /* On some platforms (such as AVR), double is really float. diff --git a/gen/cpp/openxc.pb.h b/gen/cpp/openxc.pb.h index 81a0779d..95276b45 100644 --- a/gen/cpp/openxc.pb.h +++ b/gen/cpp/openxc.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.2.4-dev at Thu Oct 24 10:06:38 2013. */ +/* Generated by nanopb-0.2.5 at Fri Jan 17 14:40:08 2014. */ #ifndef _PB_OPENXC_PB_H_ #define _PB_OPENXC_PB_H_ @@ -12,7 +12,8 @@ extern "C" { /* Enum definitions */ typedef enum _openxc_VehicleMessage_Type { openxc_VehicleMessage_Type_RAW = 1, - openxc_VehicleMessage_Type_TRANSLATED = 2 + openxc_VehicleMessage_Type_TRANSLATED = 2, + openxc_VehicleMessage_Type_DIAGNOSTIC = 3 } openxc_VehicleMessage_Type; typedef enum _openxc_TranslatedMessage_Type { @@ -25,6 +26,28 @@ typedef enum _openxc_TranslatedMessage_Type { } openxc_TranslatedMessage_Type; /* Struct definitions */ +typedef struct { + size_t size; + uint8_t bytes[8]; +} openxc_DiagnosticMessage_payload_t; + +typedef struct _openxc_DiagnosticMessage { + bool has_bus; + int32_t bus; + bool has_message_id; + uint32_t message_id; + bool has_mode; + uint32_t mode; + bool has_pid; + uint32_t pid; + bool has_success; + bool success; + bool has_negative_response_code; + uint32_t negative_response_code; + bool has_payload; + openxc_DiagnosticMessage_payload_t payload; +} openxc_DiagnosticMessage; + typedef struct _openxc_RawMessage { bool has_bus; int32_t bus; @@ -60,11 +83,20 @@ typedef struct _openxc_VehicleMessage { openxc_RawMessage raw_message; bool has_translated_message; openxc_TranslatedMessage translated_message; + bool has_diagnostic_message; + openxc_DiagnosticMessage diagnostic_message; } openxc_VehicleMessage; /* Default values for struct fields */ /* Field tags (for use in manual encoding/decoding) */ +#define openxc_DiagnosticMessage_bus_tag 1 +#define openxc_DiagnosticMessage_message_id_tag 2 +#define openxc_DiagnosticMessage_mode_tag 3 +#define openxc_DiagnosticMessage_pid_tag 4 +#define openxc_DiagnosticMessage_success_tag 5 +#define openxc_DiagnosticMessage_negative_response_code_tag 6 +#define openxc_DiagnosticMessage_payload_tag 7 #define openxc_RawMessage_bus_tag 1 #define openxc_RawMessage_message_id_tag 2 #define openxc_RawMessage_data_tag 3 @@ -79,15 +111,18 @@ typedef struct _openxc_VehicleMessage { #define openxc_VehicleMessage_type_tag 1 #define openxc_VehicleMessage_raw_message_tag 2 #define openxc_VehicleMessage_translated_message_tag 3 +#define openxc_VehicleMessage_diagnostic_message_tag 4 /* Struct field encoding specification for nanopb */ -extern const pb_field_t openxc_VehicleMessage_fields[4]; +extern const pb_field_t openxc_VehicleMessage_fields[5]; extern const pb_field_t openxc_RawMessage_fields[4]; +extern const pb_field_t openxc_DiagnosticMessage_fields[8]; extern const pb_field_t openxc_TranslatedMessage_fields[9]; /* Maximum encoded size of messages (where known) */ -#define openxc_VehicleMessage_size 368 -#define openxc_RawMessage_size 23 +#define openxc_VehicleMessage_size 422 +#define openxc_RawMessage_size 28 +#define openxc_DiagnosticMessage_size 47 #define openxc_TranslatedMessage_size 334 #ifdef __cplusplus diff --git a/gen/java/com/openxc/BinaryMessages.java b/gen/java/com/openxc/BinaryMessages.java index 02f2579f..495925b1 100644 --- a/gen/java/com/openxc/BinaryMessages.java +++ b/gen/java/com/openxc/BinaryMessages.java @@ -48,6 +48,20 @@ public final class BinaryMessages { * <code>optional .openxc.TranslatedMessage translated_message = 3;</code> */ com.openxc.BinaryMessages.TranslatedMessageOrBuilder getTranslatedMessageOrBuilder(); + + // optional .openxc.DiagnosticMessage diagnostic_message = 4; + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + boolean hasDiagnosticMessage(); + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + com.openxc.BinaryMessages.DiagnosticMessage getDiagnosticMessage(); + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + com.openxc.BinaryMessages.DiagnosticMessageOrBuilder getDiagnosticMessageOrBuilder(); } /** * Protobuf type {@code openxc.VehicleMessage} @@ -137,6 +151,19 @@ public final class BinaryMessages { bitField0_ |= 0x00000004; break; } + case 34: { + com.openxc.BinaryMessages.DiagnosticMessage.Builder subBuilder = null; + if (((bitField0_ & 0x00000008) == 0x00000008)) { + subBuilder = diagnosticMessage_.toBuilder(); + } + diagnosticMessage_ = input.readMessage(com.openxc.BinaryMessages.DiagnosticMessage.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(diagnosticMessage_); + diagnosticMessage_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000008; + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -189,6 +216,10 @@ public final class BinaryMessages { * <code>TRANSLATED = 2;</code> */ TRANSLATED(1, 2), + /** + * <code>DIAGNOSTIC = 3;</code> + */ + DIAGNOSTIC(2, 3), ; /** @@ -199,6 +230,10 @@ public final class BinaryMessages { * <code>TRANSLATED = 2;</code> */ public static final int TRANSLATED_VALUE = 2; + /** + * <code>DIAGNOSTIC = 3;</code> + */ + public static final int DIAGNOSTIC_VALUE = 3; public final int getNumber() { return value; } @@ -207,6 +242,7 @@ public final class BinaryMessages { switch (value) { case 1: return RAW; case 2: return TRANSLATED; + case 3: return DIAGNOSTIC; default: return null; } } @@ -319,10 +355,33 @@ public final class BinaryMessages { return translatedMessage_; } + // optional .openxc.DiagnosticMessage diagnostic_message = 4; + public static final int DIAGNOSTIC_MESSAGE_FIELD_NUMBER = 4; + private com.openxc.BinaryMessages.DiagnosticMessage diagnosticMessage_; + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public boolean hasDiagnosticMessage() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public com.openxc.BinaryMessages.DiagnosticMessage getDiagnosticMessage() { + return diagnosticMessage_; + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public com.openxc.BinaryMessages.DiagnosticMessageOrBuilder getDiagnosticMessageOrBuilder() { + return diagnosticMessage_; + } + private void initFields() { type_ = com.openxc.BinaryMessages.VehicleMessage.Type.RAW; rawMessage_ = com.openxc.BinaryMessages.RawMessage.getDefaultInstance(); translatedMessage_ = com.openxc.BinaryMessages.TranslatedMessage.getDefaultInstance(); + diagnosticMessage_ = com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -345,6 +404,9 @@ public final class BinaryMessages { if (((bitField0_ & 0x00000004) == 0x00000004)) { output.writeMessage(3, translatedMessage_); } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(4, diagnosticMessage_); + } getUnknownFields().writeTo(output); } @@ -366,6 +428,10 @@ public final class BinaryMessages { size += com.google.protobuf.CodedOutputStream .computeMessageSize(3, translatedMessage_); } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, diagnosticMessage_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -476,6 +542,7 @@ public final class BinaryMessages { if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { getRawMessageFieldBuilder(); getTranslatedMessageFieldBuilder(); + getDiagnosticMessageFieldBuilder(); } } private static Builder create() { @@ -498,6 +565,12 @@ public final class BinaryMessages { translatedMessageBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000004); + if (diagnosticMessageBuilder_ == null) { + diagnosticMessage_ = com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance(); + } else { + diagnosticMessageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); return this; } @@ -546,6 +619,14 @@ public final class BinaryMessages { } else { result.translatedMessage_ = translatedMessageBuilder_.build(); } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + if (diagnosticMessageBuilder_ == null) { + result.diagnosticMessage_ = diagnosticMessage_; + } else { + result.diagnosticMessage_ = diagnosticMessageBuilder_.build(); + } result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -571,6 +652,9 @@ public final class BinaryMessages { if (other.hasTranslatedMessage()) { mergeTranslatedMessage(other.getTranslatedMessage()); } + if (other.hasDiagnosticMessage()) { + mergeDiagnosticMessage(other.getDiagnosticMessage()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -868,6 +952,123 @@ public final class BinaryMessages { return translatedMessageBuilder_; } + // optional .openxc.DiagnosticMessage diagnostic_message = 4; + private com.openxc.BinaryMessages.DiagnosticMessage diagnosticMessage_ = com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + com.openxc.BinaryMessages.DiagnosticMessage, com.openxc.BinaryMessages.DiagnosticMessage.Builder, com.openxc.BinaryMessages.DiagnosticMessageOrBuilder> diagnosticMessageBuilder_; + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public boolean hasDiagnosticMessage() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public com.openxc.BinaryMessages.DiagnosticMessage getDiagnosticMessage() { + if (diagnosticMessageBuilder_ == null) { + return diagnosticMessage_; + } else { + return diagnosticMessageBuilder_.getMessage(); + } + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public Builder setDiagnosticMessage(com.openxc.BinaryMessages.DiagnosticMessage value) { + if (diagnosticMessageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + diagnosticMessage_ = value; + onChanged(); + } else { + diagnosticMessageBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public Builder setDiagnosticMessage( + com.openxc.BinaryMessages.DiagnosticMessage.Builder builderForValue) { + if (diagnosticMessageBuilder_ == null) { + diagnosticMessage_ = builderForValue.build(); + onChanged(); + } else { + diagnosticMessageBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public Builder mergeDiagnosticMessage(com.openxc.BinaryMessages.DiagnosticMessage value) { + if (diagnosticMessageBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + diagnosticMessage_ != com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance()) { + diagnosticMessage_ = + com.openxc.BinaryMessages.DiagnosticMessage.newBuilder(diagnosticMessage_).mergeFrom(value).buildPartial(); + } else { + diagnosticMessage_ = value; + } + onChanged(); + } else { + diagnosticMessageBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public Builder clearDiagnosticMessage() { + if (diagnosticMessageBuilder_ == null) { + diagnosticMessage_ = com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance(); + onChanged(); + } else { + diagnosticMessageBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public com.openxc.BinaryMessages.DiagnosticMessage.Builder getDiagnosticMessageBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getDiagnosticMessageFieldBuilder().getBuilder(); + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + public com.openxc.BinaryMessages.DiagnosticMessageOrBuilder getDiagnosticMessageOrBuilder() { + if (diagnosticMessageBuilder_ != null) { + return diagnosticMessageBuilder_.getMessageOrBuilder(); + } else { + return diagnosticMessage_; + } + } + /** + * <code>optional .openxc.DiagnosticMessage diagnostic_message = 4;</code> + */ + private com.google.protobuf.SingleFieldBuilder< + com.openxc.BinaryMessages.DiagnosticMessage, com.openxc.BinaryMessages.DiagnosticMessage.Builder, com.openxc.BinaryMessages.DiagnosticMessageOrBuilder> + getDiagnosticMessageFieldBuilder() { + if (diagnosticMessageBuilder_ == null) { + diagnosticMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.openxc.BinaryMessages.DiagnosticMessage, com.openxc.BinaryMessages.DiagnosticMessage.Builder, com.openxc.BinaryMessages.DiagnosticMessageOrBuilder>( + diagnosticMessage_, + getParentForChildren(), + isClean()); + diagnosticMessage_ = null; + } + return diagnosticMessageBuilder_; + } + // @@protoc_insertion_point(builder_scope:openxc.VehicleMessage) } @@ -1437,6 +1638,931 @@ public final class BinaryMessages { // @@protoc_insertion_point(class_scope:openxc.RawMessage) } + public interface DiagnosticMessageOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional int32 bus = 1; + /** + * <code>optional int32 bus = 1;</code> + */ + boolean hasBus(); + /** + * <code>optional int32 bus = 1;</code> + */ + int getBus(); + + // optional uint32 message_id = 2; + /** + * <code>optional uint32 message_id = 2;</code> + */ + boolean hasMessageId(); + /** + * <code>optional uint32 message_id = 2;</code> + */ + int getMessageId(); + + // optional uint32 mode = 3; + /** + * <code>optional uint32 mode = 3;</code> + */ + boolean hasMode(); + /** + * <code>optional uint32 mode = 3;</code> + */ + int getMode(); + + // optional uint32 pid = 4; + /** + * <code>optional uint32 pid = 4;</code> + */ + boolean hasPid(); + /** + * <code>optional uint32 pid = 4;</code> + */ + int getPid(); + + // optional bool success = 5; + /** + * <code>optional bool success = 5;</code> + */ + boolean hasSuccess(); + /** + * <code>optional bool success = 5;</code> + */ + boolean getSuccess(); + + // optional uint32 negative_response_code = 6; + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + boolean hasNegativeResponseCode(); + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + int getNegativeResponseCode(); + + // optional bytes payload = 7; + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + boolean hasPayload(); + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + com.google.protobuf.ByteString getPayload(); + } + /** + * Protobuf type {@code openxc.DiagnosticMessage} + */ + public static final class DiagnosticMessage extends + com.google.protobuf.GeneratedMessage + implements DiagnosticMessageOrBuilder { + // Use DiagnosticMessage.newBuilder() to construct. + private DiagnosticMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private DiagnosticMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final DiagnosticMessage defaultInstance; + public static DiagnosticMessage getDefaultInstance() { + return defaultInstance; + } + + public DiagnosticMessage getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DiagnosticMessage( + 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; + messageId_ = input.readUInt32(); + break; + } + case 24: { + bitField0_ |= 0x00000004; + mode_ = input.readUInt32(); + break; + } + case 32: { + bitField0_ |= 0x00000008; + pid_ = input.readUInt32(); + break; + } + case 40: { + bitField0_ |= 0x00000010; + success_ = input.readBool(); + break; + } + case 48: { + bitField0_ |= 0x00000020; + negativeResponseCode_ = input.readUInt32(); + break; + } + case 58: { + bitField0_ |= 0x00000040; + payload_ = input.readBytes(); + 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_DiagnosticMessage_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.openxc.BinaryMessages.DiagnosticMessage.class, com.openxc.BinaryMessages.DiagnosticMessage.Builder.class); + } + + public static com.google.protobuf.Parser<DiagnosticMessage> PARSER = + new com.google.protobuf.AbstractParser<DiagnosticMessage>() { + public DiagnosticMessage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DiagnosticMessage(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser<DiagnosticMessage> getParserForType() { + return PARSER; + } + + private int bitField0_; + // optional int32 bus = 1; + 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_; + } + + // optional uint32 message_id = 2; + public static final int MESSAGE_ID_FIELD_NUMBER = 2; + private int messageId_; + /** + * <code>optional uint32 message_id = 2;</code> + */ + public boolean hasMessageId() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * <code>optional uint32 message_id = 2;</code> + */ + public int getMessageId() { + return messageId_; + } + + // optional uint32 mode = 3; + public static final int MODE_FIELD_NUMBER = 3; + private int mode_; + /** + * <code>optional uint32 mode = 3;</code> + */ + public boolean hasMode() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * <code>optional uint32 mode = 3;</code> + */ + public int getMode() { + return mode_; + } + + // optional uint32 pid = 4; + public static final int PID_FIELD_NUMBER = 4; + private int pid_; + /** + * <code>optional uint32 pid = 4;</code> + */ + public boolean hasPid() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * <code>optional uint32 pid = 4;</code> + */ + public int getPid() { + return pid_; + } + + // optional bool success = 5; + public static final int SUCCESS_FIELD_NUMBER = 5; + private boolean success_; + /** + * <code>optional bool success = 5;</code> + */ + public boolean hasSuccess() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * <code>optional bool success = 5;</code> + */ + public boolean getSuccess() { + return success_; + } + + // optional uint32 negative_response_code = 6; + public static final int NEGATIVE_RESPONSE_CODE_FIELD_NUMBER = 6; + private int negativeResponseCode_; + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public boolean hasNegativeResponseCode() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public int getNegativeResponseCode() { + return negativeResponseCode_; + } + + // optional bytes payload = 7; + public static final int PAYLOAD_FIELD_NUMBER = 7; + private com.google.protobuf.ByteString payload_; + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public boolean hasPayload() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + private void initFields() { + bus_ = 0; + messageId_ = 0; + mode_ = 0; + pid_ = 0; + success_ = false; + negativeResponseCode_ = 0; + payload_ = com.google.protobuf.ByteString.EMPTY; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeInt32(1, bus_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeUInt32(2, messageId_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeUInt32(3, mode_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeUInt32(4, pid_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBool(5, success_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeUInt32(6, negativeResponseCode_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeBytes(7, payload_); + } + 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 + .computeUInt32Size(2, messageId_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, mode_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, pid_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(5, success_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, negativeResponseCode_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(7, payload_); + } + 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.DiagnosticMessage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.openxc.BinaryMessages.DiagnosticMessage 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.DiagnosticMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static com.openxc.BinaryMessages.DiagnosticMessage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static com.openxc.BinaryMessages.DiagnosticMessage 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.DiagnosticMessage 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.DiagnosticMessage} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> + implements com.openxc.BinaryMessages.DiagnosticMessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticMessage_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.openxc.BinaryMessages.DiagnosticMessage.class, com.openxc.BinaryMessages.DiagnosticMessage.Builder.class); + } + + // Construct using com.openxc.BinaryMessages.DiagnosticMessage.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); + messageId_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); + mode_ = 0; + bitField0_ = (bitField0_ & ~0x00000004); + pid_ = 0; + bitField0_ = (bitField0_ & ~0x00000008); + success_ = false; + bitField0_ = (bitField0_ & ~0x00000010); + negativeResponseCode_ = 0; + bitField0_ = (bitField0_ & ~0x00000020); + payload_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticMessage_descriptor; + } + + public com.openxc.BinaryMessages.DiagnosticMessage getDefaultInstanceForType() { + return com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance(); + } + + public com.openxc.BinaryMessages.DiagnosticMessage build() { + com.openxc.BinaryMessages.DiagnosticMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.openxc.BinaryMessages.DiagnosticMessage buildPartial() { + com.openxc.BinaryMessages.DiagnosticMessage result = new com.openxc.BinaryMessages.DiagnosticMessage(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.messageId_ = messageId_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.mode_ = mode_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.pid_ = pid_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.success_ = success_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.negativeResponseCode_ = negativeResponseCode_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + result.payload_ = payload_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.openxc.BinaryMessages.DiagnosticMessage) { + return mergeFrom((com.openxc.BinaryMessages.DiagnosticMessage)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.openxc.BinaryMessages.DiagnosticMessage other) { + if (other == com.openxc.BinaryMessages.DiagnosticMessage.getDefaultInstance()) return this; + if (other.hasBus()) { + setBus(other.getBus()); + } + if (other.hasMessageId()) { + setMessageId(other.getMessageId()); + } + if (other.hasMode()) { + setMode(other.getMode()); + } + if (other.hasPid()) { + setPid(other.getPid()); + } + if (other.hasSuccess()) { + setSuccess(other.getSuccess()); + } + if (other.hasNegativeResponseCode()) { + setNegativeResponseCode(other.getNegativeResponseCode()); + } + if (other.hasPayload()) { + setPayload(other.getPayload()); + } + 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.DiagnosticMessage parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.openxc.BinaryMessages.DiagnosticMessage) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + // optional int32 bus = 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_; + } + /** + * <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; + } + + // optional uint32 message_id = 2; + private int messageId_ ; + /** + * <code>optional uint32 message_id = 2;</code> + */ + public boolean hasMessageId() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * <code>optional uint32 message_id = 2;</code> + */ + public int getMessageId() { + return messageId_; + } + /** + * <code>optional uint32 message_id = 2;</code> + */ + public Builder setMessageId(int value) { + bitField0_ |= 0x00000002; + messageId_ = value; + onChanged(); + return this; + } + /** + * <code>optional uint32 message_id = 2;</code> + */ + public Builder clearMessageId() { + bitField0_ = (bitField0_ & ~0x00000002); + messageId_ = 0; + onChanged(); + return this; + } + + // optional uint32 mode = 3; + private int mode_ ; + /** + * <code>optional uint32 mode = 3;</code> + */ + public boolean hasMode() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * <code>optional uint32 mode = 3;</code> + */ + public int getMode() { + return mode_; + } + /** + * <code>optional uint32 mode = 3;</code> + */ + public Builder setMode(int value) { + bitField0_ |= 0x00000004; + mode_ = value; + onChanged(); + return this; + } + /** + * <code>optional uint32 mode = 3;</code> + */ + public Builder clearMode() { + bitField0_ = (bitField0_ & ~0x00000004); + mode_ = 0; + onChanged(); + return this; + } + + // optional uint32 pid = 4; + private int pid_ ; + /** + * <code>optional uint32 pid = 4;</code> + */ + public boolean hasPid() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * <code>optional uint32 pid = 4;</code> + */ + public int getPid() { + return pid_; + } + /** + * <code>optional uint32 pid = 4;</code> + */ + public Builder setPid(int value) { + bitField0_ |= 0x00000008; + pid_ = value; + onChanged(); + return this; + } + /** + * <code>optional uint32 pid = 4;</code> + */ + public Builder clearPid() { + bitField0_ = (bitField0_ & ~0x00000008); + pid_ = 0; + onChanged(); + return this; + } + + // optional bool success = 5; + private boolean success_ ; + /** + * <code>optional bool success = 5;</code> + */ + public boolean hasSuccess() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * <code>optional bool success = 5;</code> + */ + public boolean getSuccess() { + return success_; + } + /** + * <code>optional bool success = 5;</code> + */ + public Builder setSuccess(boolean value) { + bitField0_ |= 0x00000010; + success_ = value; + onChanged(); + return this; + } + /** + * <code>optional bool success = 5;</code> + */ + public Builder clearSuccess() { + bitField0_ = (bitField0_ & ~0x00000010); + success_ = false; + onChanged(); + return this; + } + + // optional uint32 negative_response_code = 6; + private int negativeResponseCode_ ; + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public boolean hasNegativeResponseCode() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public int getNegativeResponseCode() { + return negativeResponseCode_; + } + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public Builder setNegativeResponseCode(int value) { + bitField0_ |= 0x00000020; + negativeResponseCode_ = value; + onChanged(); + return this; + } + /** + * <code>optional uint32 negative_response_code = 6;</code> + */ + public Builder clearNegativeResponseCode() { + bitField0_ = (bitField0_ & ~0x00000020); + negativeResponseCode_ = 0; + onChanged(); + return this; + } + + // optional bytes payload = 7; + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public boolean hasPayload() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public Builder setPayload(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + payload_ = value; + onChanged(); + return this; + } + /** + * <code>optional bytes payload = 7;</code> + * + * <pre> + * TODO we are capping this at 8 bytes for now - need to change when we + * support multi-frame responses + * </pre> + */ + public Builder clearPayload() { + bitField0_ = (bitField0_ & ~0x00000040); + payload_ = getDefaultInstance().getPayload(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:openxc.DiagnosticMessage) + } + + static { + defaultInstance = new DiagnosticMessage(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:openxc.DiagnosticMessage) + } + public interface TranslatedMessageOrBuilder extends com.google.protobuf.MessageOrBuilder { @@ -2763,6 +3889,11 @@ public final class BinaryMessages { com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_openxc_RawMessage_fieldAccessorTable; private static com.google.protobuf.Descriptors.Descriptor + internal_static_openxc_DiagnosticMessage_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_openxc_DiagnosticMessage_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor internal_static_openxc_TranslatedMessage_descriptor; private static com.google.protobuf.GeneratedMessage.FieldAccessorTable @@ -2776,22 +3907,27 @@ public final class BinaryMessages { descriptor; static { java.lang.String[] descriptorData = { - "\n\014openxc.proto\022\006openxc\"\274\001\n\016VehicleMessag" + + "\n\014openxc.proto\022\006openxc\"\203\002\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\"\037\n\004Type\022\007\n\003RAW\020\001\022\016\n" + - "\nTRANSLATED\020\002\";\n\nRawMessage\022\013\n\003bus\030\001 \001(\005" + - "\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004data\030\003 \001(\004\"\265\002\n\021T" + - "ranslatedMessage\022,\n\004type\030\001 \001(\0162\036.openxc." + - "TranslatedMessage.Type\022\014\n\004name\030\002 \001(\t\022\024\n\014" + - "string_value\030\003 \001(\t\022\025\n\rnumeric_value\030\004 \001(", - "\001\022\025\n\rboolean_value\030\005 \001(\010\022\024\n\014string_event" + - "\030\006 \001(\t\022\025\n\rnumeric_event\030\007 \001(\001\022\025\n\rboolean" + - "_event\030\010 \001(\010\"\\\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\013EVENT" + - "ED_NUM\020\005\022\020\n\014EVENTED_BOOL\020\006B\034\n\ncom.openxc" + - "B\016BinaryMessages" + "xc.TranslatedMessage\0225\n\022diagnostic_messa" + + "ge\030\004 \001(\0132\031.openxc.DiagnosticMessage\"/\n\004T" + + "ype\022\007\n\003RAW\020\001\022\016\n\nTRANSLATED\020\002\022\016\n\nDIAGNOST" + + "IC\020\003\";\n\nRawMessage\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessa" + + "ge_id\030\002 \001(\r\022\014\n\004data\030\003 \001(\004\"\221\001\n\021Diagnostic" + + "Message\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r", + "\022\014\n\004mode\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007success\030\005" + + " \001(\010\022\036\n\026negative_response_code\030\006 \001(\r\022\017\n\007" + + "payload\030\007 \001(\014\"\265\002\n\021TranslatedMessage\022,\n\004t" + + "ype\030\001 \001(\0162\036.openxc.TranslatedMessage.Typ" + + "e\022\014\n\004name\030\002 \001(\t\022\024\n\014string_value\030\003 \001(\t\022\025\n" + + "\rnumeric_value\030\004 \001(\001\022\025\n\rboolean_value\030\005 " + + "\001(\010\022\024\n\014string_event\030\006 \001(\t\022\025\n\rnumeric_eve" + + "nt\030\007 \001(\001\022\025\n\rboolean_event\030\010 \001(\010\"\\\n\004Type\022" + + "\n\n\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOOL\020\003\022\022\n\016EVENTE" + + "D_STRING\020\004\022\017\n\013EVENTED_NUM\020\005\022\020\n\014EVENTED_B", + "OOL\020\006B\034\n\ncom.openxcB\016BinaryMessages" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -2803,15 +3939,21 @@ public final class BinaryMessages { internal_static_openxc_VehicleMessage_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_openxc_VehicleMessage_descriptor, - new java.lang.String[] { "Type", "RawMessage", "TranslatedMessage", }); + new java.lang.String[] { "Type", "RawMessage", "TranslatedMessage", "DiagnosticMessage", }); 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_TranslatedMessage_descriptor = + internal_static_openxc_DiagnosticMessage_descriptor = getDescriptor().getMessageTypes().get(2); + internal_static_openxc_DiagnosticMessage_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_openxc_DiagnosticMessage_descriptor, + new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Success", "NegativeResponseCode", "Payload", }); + internal_static_openxc_TranslatedMessage_descriptor = + getDescriptor().getMessageTypes().get(3); internal_static_openxc_TranslatedMessage_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_openxc_TranslatedMessage_descriptor, diff --git a/gen/python/openxc_pb2.py b/gen/python/openxc_pb2.py index 9ec8f26b..56d1539e 100644 --- a/gen/python/openxc_pb2.py +++ b/gen/python/openxc_pb2.py @@ -13,7 +13,7 @@ from google.protobuf import descriptor_pb2 DESCRIPTOR = _descriptor.FileDescriptor( name='openxc.proto', package='openxc', - serialized_pb='\n\x0copenxc.proto\x12\x06openxc\"\xbc\x01\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\"\x1f\n\x04Type\x12\x07\n\x03RAW\x10\x01\x12\x0e\n\nTRANSLATED\x10\x02\";\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(\x04\"\xb5\x02\n\x11TranslatedMessage\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.openxc.TranslatedMessage.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x14\n\x0cstring_value\x18\x03 \x01(\t\x12\x15\n\rnumeric_value\x18\x04 \x01(\x01\x12\x15\n\rboolean_value\x18\x05 \x01(\x08\x12\x14\n\x0cstring_event\x18\x06 \x01(\t\x12\x15\n\rnumeric_event\x18\x07 \x01(\x01\x12\x15\n\rboolean_event\x18\x08 \x01(\x08\"\\\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='\n\x0copenxc.proto\x12\x06openxc\"\x83\x02\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\x35\n\x12\x64iagnostic_message\x18\x04 \x01(\x0b\x32\x19.openxc.DiagnosticMessage\"/\n\x04Type\x12\x07\n\x03RAW\x10\x01\x12\x0e\n\nTRANSLATED\x10\x02\x12\x0e\n\nDIAGNOSTIC\x10\x03\";\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(\x04\"\x91\x01\n\x11\x44iagnosticMessage\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\"\xb5\x02\n\x11TranslatedMessage\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.openxc.TranslatedMessage.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x14\n\x0cstring_value\x18\x03 \x01(\t\x12\x15\n\rnumeric_value\x18\x04 \x01(\x01\x12\x15\n\rboolean_value\x18\x05 \x01(\x08\x12\x14\n\x0cstring_event\x18\x06 \x01(\t\x12\x15\n\rnumeric_event\x18\x07 \x01(\x01\x12\x15\n\rboolean_event\x18\x08 \x01(\x08\"\\\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') @@ -31,11 +31,15 @@ _VEHICLEMESSAGE_TYPE = _descriptor.EnumDescriptor( name='TRANSLATED', index=1, number=2, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='DIAGNOSTIC', index=2, number=3, + options=None, + type=None), ], containing_type=None, options=None, - serialized_start=182, - serialized_end=213, + serialized_start=237, + serialized_end=284, ) _TRANSLATEDMESSAGE_TYPE = _descriptor.EnumDescriptor( @@ -71,8 +75,8 @@ _TRANSLATEDMESSAGE_TYPE = _descriptor.EnumDescriptor( ], containing_type=None, options=None, - serialized_start=494, - serialized_end=586, + serialized_start=713, + serialized_end=805, ) @@ -104,6 +108,13 @@ _VEHICLEMESSAGE = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='diagnostic_message', full_name='openxc.VehicleMessage.diagnostic_message', 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), ], extensions=[ ], @@ -115,7 +126,7 @@ _VEHICLEMESSAGE = _descriptor.Descriptor( is_extendable=False, extension_ranges=[], serialized_start=25, - serialized_end=213, + serialized_end=284, ) @@ -156,8 +167,78 @@ _RAWMESSAGE = _descriptor.Descriptor( options=None, is_extendable=False, extension_ranges=[], - serialized_start=215, - serialized_end=274, + serialized_start=286, + serialized_end=345, +) + + +_DIAGNOSTICMESSAGE = _descriptor.Descriptor( + name='DiagnosticMessage', + full_name='openxc.DiagnosticMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='bus', full_name='openxc.DiagnosticMessage.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.DiagnosticMessage.message_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='mode', full_name='openxc.DiagnosticMessage.mode', index=2, + number=3, 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='pid', full_name='openxc.DiagnosticMessage.pid', index=3, + number=4, 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='success', full_name='openxc.DiagnosticMessage.success', index=4, + number=5, 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), + _descriptor.FieldDescriptor( + name='negative_response_code', full_name='openxc.DiagnosticMessage.negative_response_code', index=5, + number=6, 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='payload', full_name='openxc.DiagnosticMessage.payload', index=6, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=348, + serialized_end=493, ) @@ -234,18 +315,20 @@ _TRANSLATEDMESSAGE = _descriptor.Descriptor( options=None, is_extendable=False, extension_ranges=[], - serialized_start=277, - serialized_end=586, + serialized_start=496, + serialized_end=805, ) _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['diagnostic_message'].message_type = _DIAGNOSTICMESSAGE _VEHICLEMESSAGE_TYPE.containing_type = _VEHICLEMESSAGE; _TRANSLATEDMESSAGE.fields_by_name['type'].enum_type = _TRANSLATEDMESSAGE_TYPE _TRANSLATEDMESSAGE_TYPE.containing_type = _TRANSLATEDMESSAGE; DESCRIPTOR.message_types_by_name['VehicleMessage'] = _VEHICLEMESSAGE DESCRIPTOR.message_types_by_name['RawMessage'] = _RAWMESSAGE +DESCRIPTOR.message_types_by_name['DiagnosticMessage'] = _DIAGNOSTICMESSAGE DESCRIPTOR.message_types_by_name['TranslatedMessage'] = _TRANSLATEDMESSAGE class VehicleMessage(_message.Message): @@ -260,6 +343,12 @@ class RawMessage(_message.Message): # @@protoc_insertion_point(class_scope:openxc.RawMessage) +class DiagnosticMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _DIAGNOSTICMESSAGE + + # @@protoc_insertion_point(class_scope:openxc.DiagnosticMessage) + class TranslatedMessage(_message.Message): __metaclass__ = _reflection.GeneratedProtocolMessageType DESCRIPTOR = _TRANSLATEDMESSAGE diff --git a/libs/nanopb b/libs/nanopb -Subproject 388d4de833cf4e2127b2ab0489cb6b14ecc0cbb +Subproject 906c8283b5995eb7b27f4958a6a6502ae0deea0 diff --git a/openxc.options b/openxc.options index 1863c0d3..75caabab 100644 --- a/openxc.options +++ b/openxc.options @@ -1,2 +1,4 @@ -# TODO this isn't working yet, so I'm defining it for everything in the Makefile -openxc_TranslatedMessage.name max_size:100 +openxc.TranslatedMessage.name max_size:100 +openxc.TranslatedMessage.string_value max_size:100 +openxc.TranslatedMessage.string_event max_size:100 +openxc.DiagnosticMessage.payload max_size:8 diff --git a/openxc.proto b/openxc.proto index 6b79c36f..cc135a6c 100644 --- a/openxc.proto +++ b/openxc.proto @@ -4,11 +4,12 @@ option java_package = "com.openxc"; option java_outer_classname = "BinaryMessages"; message VehicleMessage { - enum Type { RAW = 1; TRANSLATED = 2; } + enum Type { RAW = 1; TRANSLATED = 2; DIAGNOSTIC = 3; } optional Type type = 1; optional RawMessage raw_message = 2; optional TranslatedMessage translated_message = 3; + optional DiagnosticMessage diagnostic_message = 4; } message RawMessage { @@ -17,6 +18,18 @@ message RawMessage { optional uint64 data = 3; } +message DiagnosticMessage { + optional int32 bus = 1; + optional uint32 message_id = 2; + optional uint32 mode = 3; + optional uint32 pid = 4; + optional bool success = 5; + optional uint32 negative_response_code = 6; + // TODO we are capping this at 8 bytes for now - need to change when we + // support multi-frame responses + optional bytes payload = 7; +} + message TranslatedMessage { enum Type { STRING = 1; NUM = 2; BOOL = 3; EVENTED_STRING = 4; EVENTED_NUM = 5; EVENTED_BOOL = 6;} |