package openxc; option java_package = "com.openxc"; option java_outer_classname = "BinaryMessages"; message VehicleMessage { enum Type { RAW = 1; TRANSLATED = 2; DIAGNOSTIC = 3; CONTROL_COMMAND = 4; COMMAND_RESPONSE = 5; } optional Type type = 1; optional RawMessage raw_message = 2; optional TranslatedMessage translated_message = 3; optional DiagnosticResponse diagnostic_response = 4; optional ControlCommand control_command = 5; optional CommandResponse command_response = 6; } message RawMessage { optional int32 bus = 1; optional uint32 message_id = 2; optional bytes data = 3; } message ControlCommand { enum Type { VERSION = 1; DEVICE_ID = 2; DIAGNOSTIC = 3; } optional Type type = 1; optional DiagnosticRequest diagnostic_request = 2; } message CommandResponse { optional ControlCommand.Type type = 1; optional string message = 2; } message DiagnosticRequest { optional int32 bus = 1; optional uint32 message_id = 2; optional uint32 mode = 3; optional uint32 pid = 4; // TODO we are capping this at 8 bytes for now - need to change when we // support multi-frame responses optional bytes payload = 5; optional bool parse_payload = 6; optional double factor = 7; optional double offset = 8; optional double frequency = 9; } message DiagnosticResponse { 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; optional double value = 8; } message DynamicField { enum Type { STRING = 1; NUM = 2; BOOL = 3; } optional Type type = 1; optional string string_value = 2; optional double numeric_value = 3; 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; } // TODO we should also consider having an enum type, having each specific // message defined as a protobuf