-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtmcdec.c
More file actions
68 lines (56 loc) · 1.35 KB
/
tmcdec.c
File metadata and controls
68 lines (56 loc) · 1.35 KB
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "tmc_events.h"
#define PI 0xC401
#define GROUP_8A 0x8000
typedef struct TMCMsg {
int block1;
int block2;
int block3;
int block4;
} TMCMsg;
TMCMsg tmcmsg;
const char * eventmsg[TMC_EVENTS];
void load_eventcode()
{
int i;
for (i=0; i<TMC_EVENT_LIST_LINES; i++) {
int code = strtol(tmc_events[i][2], NULL, 10);
if (code != 0) {
eventmsg[code] =
tmc_events[i][1];
// printf("%d=>%s\n", code, eventmsg[code]);
} else {
eventmsg[code] = 0;
}
}
}
void parsemsg(const char *msg)
{
char *endptr = NULL;
tmcmsg.block1 = strtol(msg, &endptr, 16);
tmcmsg.block2 = strtol(endptr, &endptr, 16);
tmcmsg.block3 = strtol(endptr, &endptr, 16);
tmcmsg.block4 = strtol(endptr, &endptr, 16);
}
const char * getevent()
{
int mask = (1 << 11) - 1;
int eventcode = tmcmsg.block3 & mask;
return eventmsg[eventcode];
}
int main()
{
char buf[32];
load_eventcode();
while (fgets(buf, 32, stdin) != NULL) {
int s = strlen(buf);
*(buf+s-1) = 0;
parsemsg(buf);
if ((tmcmsg.block2 & 0xF800) == GROUP_8A &&
(tmcmsg.block2 & 0x1F) == 0x8) printf("%s\t%s\n", buf, getevent());
else printf("%s\t-\n", buf);
}
return 0;
}