Skip to content

Commit 9871ba8

Browse files
committedApr 5, 2022
Added f2r decoder.
1 parent 7646fc5 commit 9871ba8

File tree

1 file changed

+131
-38
lines changed

1 file changed

+131
-38
lines changed
 

‎src/eotd.c

+131-38
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,30 @@ void add_comma(char *text, int text_size) {
5757
strlcat(text, ",", text_size);
5858
}
5959

60-
void get_chain(uint64_t pkt, char *text, int text_size) {
60+
void get_r2f_chain(uint64_t pkt, char *text, int text_size) {
6161
uint32_t val;
6262

6363
val = pkt & 0x03ULL;
6464

6565
strlcat(text, "chain=", text_size);
6666

67-
strlcat(text, val & 0x02 ? "FIRST+" : "NOT_FIRST+", text_size);
68-
strlcat(text, val & 0x01 ? "LAST" : "NOT_LAST", text_size);
67+
switch(val) {
68+
case 0:
69+
strlcat(text, "MIDDLE", text_size);
70+
break;
71+
case 1:
72+
strlcat(text, "LAST", text_size);
73+
break;
74+
case 2:
75+
strlcat(text, "FIRST", text_size);
76+
break;
77+
case 3:
78+
strlcat(text, "ONLY", text_size);
79+
break;
80+
}
6981
}
7082

71-
void get_dev_batt_stat(uint64_t pkt, char *text, int text_size) {
83+
void get_r2f_dev_batt_stat(uint64_t pkt, char *text, int text_size) {
7284
uint32_t val;
7385

7486
pkt >>= 2;
@@ -92,7 +104,7 @@ void get_dev_batt_stat(uint64_t pkt, char *text, int text_size) {
92104
}
93105
}
94106

95-
void get_msg_id_type(uint64_t pkt, char *text, int text_size) {
107+
void get_r2f_msg_id_type(uint64_t pkt, char *text, int text_size) {
96108
uint32_t val;
97109
char temp[32];
98110

@@ -113,7 +125,7 @@ void get_msg_id_type(uint64_t pkt, char *text, int text_size) {
113125
}
114126
}
115127

116-
void get_unit_addr_code(uint64_t pkt, char *text, int text_size) {
128+
void get_r2f_unit_addr_code(uint64_t pkt, char *text, int text_size) {
117129
uint32_t val;
118130
char temp[32];
119131

@@ -124,7 +136,7 @@ void get_unit_addr_code(uint64_t pkt, char *text, int text_size) {
124136
strlcat(text, temp, text_size);
125137
}
126138

127-
void get_brake_pressure(uint64_t pkt, char *text, int text_size) {
139+
void get_r2f_brake_pressure(uint64_t pkt, char *text, int text_size) {
128140
uint32_t val;
129141
char temp[32];
130142

@@ -154,7 +166,7 @@ void get_brake_pressure(uint64_t pkt, char *text, int text_size) {
154166
}
155167
}
156168

157-
void get_disc_bits(uint64_t pkt, char *text, int text_size) {
169+
void get_r2f_disc_bits(uint64_t pkt, char *text, int text_size) {
158170
uint32_t val;
159171
char temp[32];
160172

@@ -166,7 +178,7 @@ void get_disc_bits(uint64_t pkt, char *text, int text_size) {
166178
strlcat(text, temp, text_size);
167179
}
168180

169-
void get_valve_bit(uint64_t pkt, char *text, int text_size) {
181+
void get_r2f_valve_bit(uint64_t pkt, char *text, int text_size) {
170182
uint32_t val;
171183

172184
pkt >>= 39;
@@ -176,7 +188,7 @@ void get_valve_bit(uint64_t pkt, char *text, int text_size) {
176188
strlcat(text, val == 0 ? "FAILED" : "OPERATIONAL", text_size);
177189
}
178190

179-
void get_confirm_bit(uint64_t pkt, char *text, int text_size) {
191+
void get_r2f_confirm_bit(uint64_t pkt, char *text, int text_size) {
180192
uint32_t val;
181193

182194
pkt >>= 40;
@@ -186,7 +198,7 @@ void get_confirm_bit(uint64_t pkt, char *text, int text_size) {
186198
strlcat(text, val == 0 ? "UPDATE" : "RESPONSE", text_size);
187199
}
188200

189-
void get_disc_bit1(uint64_t pkt, char *text, int text_size) {
201+
void get_r2f_disc_bit1(uint64_t pkt, char *text, int text_size) {
190202
uint32_t val;
191203
char temp[32];
192204

@@ -198,7 +210,7 @@ void get_disc_bit1(uint64_t pkt, char *text, int text_size) {
198210
strlcat(text, temp, text_size);
199211
}
200212

201-
void get_motion_bit(uint64_t pkt, char *text, int text_size) {
213+
void get_r2f_motion_bit(uint64_t pkt, char *text, int text_size) {
202214
uint32_t val;
203215

204216
pkt >>= 42;
@@ -208,7 +220,7 @@ void get_motion_bit(uint64_t pkt, char *text, int text_size) {
208220
strlcat(text, val == 0 ? "STOPPED/NOT_MONITORED" : "IN_MOTION", text_size);
209221
}
210222

211-
void get_mkr_light_batt_bit(uint64_t pkt, char *text, int text_size) {
223+
void get_r2f_mkr_light_batt_bit(uint64_t pkt, char *text, int text_size) {
212224
uint32_t val;
213225

214226
pkt >>= 43;
@@ -218,7 +230,7 @@ void get_mkr_light_batt_bit(uint64_t pkt, char *text, int text_size) {
218230
strlcat(text, val == 0 ? "OK/NOT_MONITORED" : "WEAK", text_size);
219231
}
220232

221-
void get_mkr_light_bit(uint64_t pkt, char *text, int text_size) {
233+
void get_r2f_mkr_light_bit(uint64_t pkt, char *text, int text_size) {
222234
uint32_t val;
223235

224236
pkt >>= 44;
@@ -228,6 +240,102 @@ void get_mkr_light_bit(uint64_t pkt, char *text, int text_size) {
228240
strlcat(text, val == 0 ? "OFF/NOT_MONITORED" : "ON", text_size);
229241
}
230242

243+
void decode_basic_r2f(uint64_t pkt, char *text, int text_size) {
244+
245+
get_r2f_chain(pkt, text, text_size);
246+
add_comma(text, text_size);
247+
get_r2f_dev_batt_stat(pkt, text, text_size);
248+
add_comma(text, text_size);
249+
get_r2f_msg_id_type(pkt, text, text_size);
250+
add_comma(text, text_size);
251+
get_r2f_unit_addr_code(pkt, text, text_size);
252+
add_comma(text, text_size);
253+
get_r2f_brake_pressure(pkt, text, text_size);
254+
add_comma(text, text_size);
255+
get_r2f_disc_bits(pkt, text, text_size);
256+
add_comma(text, text_size);
257+
get_r2f_valve_bit(pkt, text, text_size);
258+
add_comma(text, text_size);
259+
get_r2f_confirm_bit(pkt, text, text_size);
260+
add_comma(text, text_size);
261+
get_r2f_disc_bit1(pkt, text, text_size);
262+
add_comma(text, text_size);
263+
get_r2f_motion_bit(pkt, text, text_size);
264+
add_comma(text, text_size);
265+
get_r2f_mkr_light_batt_bit(pkt, text, text_size);
266+
add_comma(text, text_size);
267+
get_r2f_mkr_light_bit(pkt, text, text_size);
268+
}
269+
270+
void get_f2r_chain(uint64_t pkt, char *text, int text_size) {
271+
uint32_t val;
272+
273+
val = pkt & 0x03;
274+
275+
strlcat(text, "chain=", text_size);
276+
277+
if (val == 3) {
278+
strlcat(text, "VALID", text_size);
279+
} else {
280+
strlcat(text, "INVALID", text_size);
281+
}
282+
}
283+
284+
void get_f2r_msg_id_type(uint64_t pkt, char *text, int text_size) {
285+
uint32_t val;
286+
287+
pkt >>= 2;
288+
val = pkt & 0x07ULL;
289+
290+
strlcat(text, "msgid=", text_size);
291+
strlcat(text, val == 0 ? "VALID" : "INVALID", text_size);
292+
}
293+
294+
void get_f2r_unit_addr_code(uint64_t pkt, char *text, int text_size) {
295+
uint32_t val;
296+
char temp[32];
297+
298+
pkt >>= 5;
299+
val = pkt & 0x1ffffULL;
300+
strlcat(text, "unit_addr=", text_size);
301+
sprintf(temp, "%d", val);
302+
strlcat(text, temp, text_size);
303+
}
304+
305+
void get_f2r_command(uint64_t pkt, char *text, int text_size) {
306+
uint32_t val;
307+
char temp[32];
308+
309+
pkt >>= 22;
310+
val = pkt & 0xff;
311+
strlcat(text, "cmd=", text_size);
312+
switch(val) {
313+
case 0x55:
314+
strlcat(text, "STATUS_REQ", text_size);
315+
break;
316+
317+
case 0xaa:
318+
strlcat(text, "APPLY_BRAKES", text_size);
319+
break;
320+
321+
default:
322+
sprintf(temp, "UNKNOWN(%d)", val);
323+
strlcat(text, temp, text_size);
324+
break;
325+
}
326+
}
327+
328+
void decode_basic_f2r(uint64_t pkt, char *text, int text_size) {
329+
330+
get_f2r_chain(pkt, text, text_size);
331+
add_comma(text, text_size);
332+
get_f2r_msg_id_type(pkt, text, text_size);
333+
add_comma(text, text_size);
334+
get_f2r_unit_addr_code(pkt, text, text_size);
335+
add_comma(text, text_size);
336+
get_f2r_command(pkt, text, text_size);
337+
}
338+
231339
void eotd_to_text (unsigned char *eotd, int eotd_len, char *text, int text_size)
232340
{
233341
assert (eotd_len == EOTD_LENGTH + 1);
@@ -240,9 +348,10 @@ void eotd_to_text (unsigned char *eotd, int eotd_len, char *text, int text_size)
240348
}
241349

242350
*text = '\0';
243-
#ifndef EOTD_RAW
351+
244352
char eotd_type = eotd[EOTD_LENGTH];
245353

354+
#ifndef EOTD_RAW
246355
if (eotd_type == EOTD_TYPE_F2R) {
247356
strlcat(text, "FRONT>REAR:", text_size);
248357
} else {
@@ -259,29 +368,13 @@ void eotd_to_text (unsigned char *eotd, int eotd_len, char *text, int text_size)
259368
now->tm_hour, now->tm_min, now->tm_sec);
260369
strlcat(text, date_buffer, text_size);
261370
#endif
262-
get_chain(pkt, text, text_size);
263-
add_comma(text, text_size);
264-
get_dev_batt_stat(pkt, text, text_size);
265-
add_comma(text, text_size);
266-
get_msg_id_type(pkt, text, text_size);
267-
add_comma(text, text_size);
268-
get_unit_addr_code(pkt, text, text_size);
269-
add_comma(text, text_size);
270-
get_brake_pressure(pkt, text, text_size);
271-
add_comma(text, text_size);
272-
get_disc_bits(pkt, text, text_size);
273-
add_comma(text, text_size);
274-
get_valve_bit(pkt, text, text_size);
275-
add_comma(text, text_size);
276-
get_confirm_bit(pkt, text, text_size);
277-
add_comma(text, text_size);
278-
get_disc_bit1(pkt, text, text_size);
279-
add_comma(text, text_size);
280-
get_motion_bit(pkt, text, text_size);
281-
add_comma(text, text_size);
282-
get_mkr_light_batt_bit(pkt, text, text_size);
283-
add_comma(text, text_size);
284-
get_mkr_light_bit(pkt, text, text_size);
371+
372+
if (eotd_type == EOTD_TYPE_R2F) {
373+
decode_basic_r2f(pkt, text, text_size);
374+
} else {
375+
decode_basic_f2r(pkt, text, text_size);
376+
}
377+
285378
#ifdef EOTD_APPEND_HEX
286379
char hex[64];
287380
add_comma(text, text_size);

0 commit comments

Comments
 (0)