summaryrefslogtreecommitdiffstats
path: root/openxc.proto
blob: 252f214bb3770e749889e7840368221382f2da4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package openxc;

option java_package = "com.openxc";
option java_outer_classname = "BinaryMessages";

message VehicleMessage {
    enum Type { CAN = 1; SIMPLE = 2; DIAGNOSTIC = 3; CONTROL_COMMAND = 4;
            COMMAND_RESPONSE = 5; }

    optional Type type = 1;
    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 CanMessage {
    enum FrameFormat {
        STANDARD = 1;
        EXTENDED = 2;
    }
    optional int32 bus = 1;
    optional uint32 message_id = 2;
    optional bytes data = 3;
    optional FrameFormat frame_format = 4;
}

message ControlCommand {
    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 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 {
    enum DecodedType { NONE = 1; OBD2 = 2; }

    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 multiple_responses = 6;
    optional double frequency = 7;
    optional string name = 8;
    optional DecodedType decoded_type = 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 SimpleMessage {
    optional string name = 1;
    optional DynamicField value = 2;
    optional DynamicField event = 3;
}

// TODO we should also consider having an enum type, having each specific
// message defined as a protobuf