aboutsummaryrefslogtreecommitdiff
path: root/src/main/proto/StarLinkMessage.proto
blob: 167b9f283d77ee98d8bc6954cf05dae33038e9e2 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
syntax = "proto2";

package org.traccar.protobuf;

// StarLink Message
message StarLink_Message {
  optional uint32 FID     = 1;				// Unit factory serial
  optional string IMEI    = 2;				// IMEI
  optional uint32 UID     = 3;  			// Unit serial
  optional uint32 AckRef  = 4;				// Ack reference number

  repeated mMessage Message = 5;
}

// Message body
message mMessage {
  optional uint64 ReferenceNumber     = 100;
  optional uint32 ReferenceNumberDiff = 101;
  optional uint32 MessageType         = 102;

  optional mWakeUp        WakeUp          = 1;
  optional mConfirmation  Confirmation    = 2;
  optional mParamResponse ParamResponse   = 3;
  optional mEventReport   EventReport     = 6;
  optional mGeoZone       GeoZone         = 10;
  optional mOutputs       Outputs         = 12;
  optional mEventConfig   EventConfig     = 14;
  optional mInputs        Inputs          = 16;
  optional mInputConfig   InputConfig     = 17;
  optional mSpeedLimit    SpeedLimit      = 27;
  optional mUnitIDChanged UnitIDChanged   = 29;
  optional mGenDeviceMsg  GenericDeviceMsg= 30;
  optional mGenDeviceFW   GenericDeviceFW = 35;
  optional mReadIButton   ReadIButton     = 42;
  optional mGetPattern    GetPattern      = 43;
  optional mMultiParam    MultiParameter  = 45;
  optional mTempConfig    TempConfig      = 52;
  optional mDeviceList    DeviceList      = 56;
  optional mTeachRemote   TeachRemote     = 58;
  optional mAuthenticate  Authenticate    = 95;
  optional mEventReport   CurrentLocation = 96;
  optional mConfigServer  ConfigServer    = 98;
}

// Wake-Up event
message mWakeUp {
  required string UnitVersion = 1;
  required string ProtocolVersion = 2;
}

// Confirmation message
message mConfirmation {
  // standard response
  required uint32 ResultCode = 1;
  optional uint32 ReferenceNumber = 2;		// confirmation by reference number
  optional uint32 MessageType = 3;		// confirmation by message type

  // parameter ack (response to command #4)
  optional uint32 ParameterAck = 4;

  // multi-parameter ack (response to command #46)
  optional uint32 ParametersChanged = 5;
  optional uint32 ParametersFailed = 6;
  repeated uint32 ParameterFailedList = 9;

  // modify list of allowed drivers (response to command #50)
  optional uint32 CodesInList = 7;
  optional uint32 EmptySlots = 8;
}

// Parameter response
message mParamResponse {
  required uint32 ParameterNumber = 1;
  required string Value = 2;
}

// Event report
message mEventReport {
  optional uint32 EID              =   1; 	// https://sweb.erm.co.il/protocol/?i=D12
  optional string EDESC            =   2; 	// https://sweb.erm.co.il/protocol/?i=D13
  optional uint32 EDT              =   3;	// https://sweb.erm.co.il/protocol/?i=D27 (seconds since 1/1/2000)
  optional sint32 EDT_Diff         =   4; 	// seconds since previous message's EDT
  optional uint32 NXT              =   5;	// https://sweb.erm.co.il/protocol/?i=D111
  optional uint32 NXTS             =  81;	// https://sweb.erm.co.il/protocol/?i=D178
  optional string ExtraData        = 254;

  optional uint32 PDT              =   6;	// https://sweb.erm.co.il/protocol/?i=D35 (seconds since 1/1/2000)
  optional sint32 PDT_Diff         =   7;	// seconds since previous message's PDT
  optional sint32 LAT              =   8;	// https://sweb.erm.co.il/protocol/?i=D49 (multiplied by 1000000)
  optional sint32 LAT_Diff         =   9; 	// difference between previous latitude (add this value to previous value)
  optional sint32 LONG             =  10;	// https://sweb.erm.co.il/protocol/?i=D57 (multiplied by 1000000)
  optional sint32 LONG_Diff        =  11;	// difference between previous longitude (add this value to previous value)
  optional sint32 ALT              =  12;	// https://sweb.erm.co.il/protocol/?i=D69 (multiplied by 10)
  optional sint32 ALT_Diff         =  13; 	// difference between previous altitude (add this value to previous value)
  optional uint32 SPD              =  14;	// https://sweb.erm.co.il/protocol/?i=D61 (multiplied by 10, in knots)
  optional uint32 SPDK             =  15;	// https://sweb.erm.co.il/protocol/?i=D62
  optional uint32 HEAD             =  16;	// https://sweb.erm.co.il/protocol/?i=D63
  optional uint32 HDOP             =  17;	// https://sweb.erm.co.il/protocol/?i=D71 (multiplied by 10)
  optional uint32 VDOP             =  18;	// https://sweb.erm.co.il/protocol/?i=D72 (multiplied by 10)
  optional uint32 PDOP             =  19;	// https://sweb.erm.co.il/protocol/?i=D70 (multiplied by 10)
  optional uint32 SAT              =  20;	// https://sweb.erm.co.il/protocol/?i=D73
  optional uint32 SATN             =  21;	// https://sweb.erm.co.il/protocol/?i=D99
  optional uint32 SATU             =  22;	// https://sweb.erm.co.il/protocol/?i=D74
  optional uint32 GSS              =  23;	// https://sweb.erm.co.il/protocol/?i=D98
  optional uint32 GSSN             =  24;	// https://sweb.erm.co.il/protocol/?i=D100
  optional uint32 FIX              =  25;	// https://sweb.erm.co.il/protocol/?i=D75
  optional uint32 LOCA             =  26;	// https://sweb.erm.co.il/protocol/?i=D126
  optional uint32 LOCS             =  79;	// https://sweb.erm.co.il/protocol/?i=D167

  optional uint32 ODO              =  27;	// https://sweb.erm.co.il/protocol/?i=D14
  optional sint32 ODO_Diff         =  28;	// difference between previous odometer (add this value to previous value)
  optional uint32 ODOD             =  29;	// https://sweb.erm.co.il/protocol/?i=D15 (multiplied by 1000)
  optional sint32 ODOD_Diff        =  30;	// difference between previous odometer (add this value to previous value)

  optional uint32 CID              =  31;	// https://sweb.erm.co.il/protocol/?i=D5
  optional uint32 LAC              =  32;	// https://sweb.erm.co.il/protocol/?i=D4
  optional uint32 CSS              =  33;	// https://sweb.erm.co.il/protocol/?i=D89
  optional sint32 CSS_Diff         =  34;	// difference between previous rx power (add this value to previous value)
  optional uint32 CTA              =  35;	// https://sweb.erm.co.il/protocol/?i=D95
  optional uint32 CCN              =  36;	// https://sweb.erm.co.il/protocol/?i=D89
  optional bool   JAM              =  37;	// https://sweb.erm.co.il/protocol/?i=D66
  optional uint32 NC               =  38;	// https://sweb.erm.co.il/protocol/?i=D94
  optional uint32 NM               =  39;	// https://sweb.erm.co.il/protocol/?i=D125
  optional uint32 NT               =  76;	// https://sweb.erm.co.il/protocol/?i=D153
  optional uint32 CU               =  77;	// https://sweb.erm.co.il/protocol/?i=D154

  optional uint32 VIN              =  40;	// https://sweb.erm.co.il/protocol/?i=D64 (multiplied by 100)
  optional sint32 VIN_Diff         =  41;	// difference between previous VIN (add this value to previous value)
  optional uint32 VBAT             =  42;	// https://sweb.erm.co.il/protocol/?i=D65 (multiplied by 100)
  optional sint32 VBAT_Diff        =  43;	// difference between previous VBAT (add this value to previous value)
  optional uint32 V3               =  44;	// https://sweb.erm.co.il/protocol/?i=D92 (multiplied by 100)
  optional sint32 V3_Diff          =  45;	// difference between previous V3 (add this value to previous value)
  optional uint32 V4               =  46;	// https://sweb.erm.co.il/protocol/?i=D93 (multiplied by 100)
  optional sint32 V4_Diff          =  47;	// difference between previous V4 (add this value to previous value)
  optional uint32 BATH             =  48;
  optional uint32 BATC             =  49;
  optional uint32 STRT             =  50;	// (multiplied by 100)
  optional sint32 TVI              =  51;	// https://sweb.erm.co.il/protocol/?i=D110 (multiplied by 10)

  optional uint32 Inputs           =  52;	// b0 = IN1/INC, b1 = IN2/IND, b2 = IN3/INE, b3 = IN4/INF
  optional uint32 DInputs          =  53;	// b0 = DI1, b1 = DI2, b2 = DI3, b3 = DI4, b4 = DI5, b5 = DI6, b6 = DI7, b7 = DI8
  optional uint32 IgnitionEngine   =  54;	// b0 = IGN, b1 = ENG, b2 = DRV
  optional uint32 Outputs          =  55;	// b0 = OUT1/OUTA, b1 = OUT2/OUTB, b2 = OUT3/OUTC, b3 = OUT4/OUTD, b4 = OUT5, b5 = OUT6, b6 = OUT7, b7 = OUT8

  optional string USER             =  56;	// https://sweb.erm.co.il/protocol/?i=D97
  optional string EDV1             =  57;	// https://sweb.erm.co.il/protocol/?i=D179
  optional string EDV2             =  58;	// https://sweb.erm.co.il/protocol/?i=D180
  optional string EDV3             =  59;	// https://sweb.erm.co.il/protocol/?i=D181
  optional string EDV4             =  60;	// https://sweb.erm.co.il/protocol/?i=D182

  optional sint32 CV1              =  61;	// https://sweb.erm.co.il/protocol/?i=D121
  optional sint32 CV2              =  62;	// https://sweb.erm.co.il/protocol/?i=D122
  optional sint32 CV3              =  63;	// https://sweb.erm.co.il/protocol/?i=D123
  optional sint32 CV4              =  64;	// https://sweb.erm.co.il/protocol/?i=D124
  optional sint32 CV5              =  82;	// https://sweb.erm.co.il/protocol/?i=D174
  optional sint32 CV6              =  83;	// https://sweb.erm.co.il/protocol/?i=D175
  optional sint32 CV7              =  84;	// https://sweb.erm.co.il/protocol/?i=D176
  optional sint32 CV8              =  85;	// https://sweb.erm.co.il/protocol/?i=D177
  optional sint32 CV9              =  86;	// https://sweb.erm.co.il/protocol/?i=D188
  optional sint32 CV10             =  87;	// https://sweb.erm.co.il/protocol/?i=D189
  optional sint32 CV11             =  88;	// https://sweb.erm.co.il/protocol/?i=D190
  optional sint32 CV12             =  89;	// https://sweb.erm.co.il/protocol/?i=D191

  optional bool   IARM             =  65;	// https://sweb.erm.co.il/protocol/?i=D7
  optional string DID              =  66;	// https://sweb.erm.co.il/protocol/?i=D101
  optional string DAL              =  67;	// https://sweb.erm.co.il/protocol/?i=D76
  optional uint32 DEST             =  68;	// https://sweb.erm.co.il/protocol/?i=D8
  optional bool   OVM              =  73;	// https://sweb.erm.co.il/protocol/?i=D150

  optional uint32 CFL              =  69;	// https://sweb.erm.co.il/protocol/?i=D26
  optional uint32 CFL2             =  80;	// https://sweb.erm.co.il/protocol/?i=D26
  optional uint32 RPM              =  70;	// https://sweb.erm.co.il/protocol/?i=D144

  optional uint32 DUR              =  71;	// https://sweb.erm.co.il/protocol/?i=D145
  optional uint32 TDUR             =  72;	// https://sweb.erm.co.il/protocol/?i=D146
  optional uint32 IDL              =  74;	// https://sweb.erm.co.il/protocol/?i=D151
  optional uint32 STP              =  75;	// https://sweb.erm.co.il/protocol/?i=D152

  repeated mEventReport_TDx TDx    =  78;	// https://sweb.erm.co.il/protocol/?i=D168
}

// Sensor data
message mEventReport_TDx {
  required uint32 SensorNumber		= 1;	// Sensor #
  optional string SensorID		= 3;	// TIx (binary)

  optional sint32 Temperature		= 4;	// TVx (multiplied by 10)
  optional uint32 Temperature_State	= 2;	// TSx

  optional uint32 Humidity		= 5;	// THx (multiplied by 10)
  optional uint32 Humidity_State	= 6;

  optional uint32 RSSI			= 7;
  optional uint32 RSSI_State		= 8;

  optional uint32 Voltage		= 9;	// mV (multiplied by 1000)
  optional uint32 Voltage_State		= 10;

  optional uint32 Light			= 11;	// percent
  optional uint32 Light_State		= 12;

  optional uint32 MagnetSwitch		= 13;
  optional uint32 MagnetSwitch_State	= 14;

  optional uint32 Accident		= 15;
  optional uint32 Button		= 16;
  optional uint32 Movement		= 17; 
}

// Geozone reqsponse
message mGeoZone {
  required uint32   ZoneNumber = 1;
  repeated mLatLong Point = 2;				// single point for radius geozone, multiple points for polygon
  optional uint32   Radius = 3;
}

// Outputs response
message mOutputs {
  required uint32 OutputBitmask = 1;
}

// Event configuration response
message mEventConfig {
  required uint32 EventID = 1;
  required uint32 Configuration = 2;		// bitmask
}

// Inputs response
message mInputs {
  required uint32 InputBitmask = 1;
}

// Inputs configuration
message mInputConfig {
  required uint32 InputID = 1;
  required uint32 DebounceLow = 2;
  required uint32 DebounceHigh = 3;
}

// Speed limit configuration
message mSpeedLimit {
  required uint32 Number = 1;
  required bool   Active = 2;
  optional uint32 MinSpeed = 3;       // when using speed limit with minimum speed
  optional uint32 MaxSpeed = 4;       // when using speed limit with maximum speed
  required uint32 Duration = 5;
  required bool   ReportDuration = 6;
  optional bool   StartAndEnd = 7;
  optional bool   AutoTrack = 8;
  optional bool   OutputPattern = 9;
  optional uint32 Step = 10;
}

// Unit ID changed
message mUnitIDChanged {
  required uint32 FID = 1;
  required string IMEI = 2;
  required sint32 PreviousSetting = 3;
  required sint32 NewSetting = 4;
}

// Generic device message
message mGenDeviceMsg {
  required uint32 DeviceID = 1;
  required uint32 DataType = 2;
  optional string Data = 3;
}

// Generic device FW update
message mGenDeviceFW {
  optional uint32 BlockRequest = 1;
  optional uint32 Status = 2;
  optional uint32 MaxBlocks = 3;
}

// Configuration server message
message mConfigServer {
  required bool Success = 1;
}

// Read iButton
message mReadIButton {
  required string iButtonID = 1;
  optional string Data = 2;
}

// Read pattern configuration
message mGetPattern {
  required uint32 PatternID = 1;
  required string Pattern = 2;
}

// Multiple parameters response
message mMultiParam {
  repeated uint32 ParameterNumbers = 1;
  repeated string Values = 2;
}

// Temperature sensor configuration
message mTempConfig {
  required uint32 SensorCount = 1;
  repeated string SensorID = 2;
}

// Device list
message mDeviceList {
  repeated uint32 DeviceID = 1;
  repeated uint32 Version = 2;
}

// Teach remote
message mTeachRemote {
  required uint32 RuleID = 1;
  optional uint32 RemoteID = 2;
}

// Authentication message
message mAuthenticate {
  required uint32 Version = 1;
  optional string Token = 2;
  optional uint32 Key = 3;
  optional uint32 Step = 4;
  optional string Digest = 5;
}

// Point (Lat / Long)
message mLatLong {
  required sint32 Latitude  = 1;
  required sint32 Longitude = 2;
}