-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathmain.c
112 lines (95 loc) · 2.5 KB
/
main.c
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
#include <stdio.h>
#include <stdlib.h>
#include "datenbasis.h"
#include "processFrame.h"
// echo "(0.0) vcan0 001#8d00100100820100" | ./socketcanDecodeSignal ccl_test.dbc testFrame1
// echo "(0.1) vcan0 002#0C00057003CD1F83" | ./socketcanDecodeSignal ccl_test.dbc testFrame2
void printCallback(char *name, __u64 rawValue, double scaledValue,
struct timeval tv, char *device)
{
printf("(%04ld.%06ld) %s %s: 0x%02llx %02.0f \n", tv.tv_sec, tv.tv_usec,
device, name, rawValue, scaledValue);
}
int main(int argc, char **argv)
{
char buf[100], device[100], ascframe[100];
char *frameName, *signalName;
struct can_frame cf;
struct frame_struct *dataBase = NULL;
struct signal_callback_list *callbackList = NULL;
struct signal_struct *mySignal;
struct frame_struct *myFrame;
struct timeval tv;
if (argc < 2)
{
fprintf(stderr, "Usage:\n");
fprintf(stderr,
"%s Database Message1.Signal1 [Message2.Signal2 Message3.Signal3]\n",
argv[0]);
exit(1);
}
// read dbc
if (readInDatabase(&dataBase, argv[1]))
{
fprintf(stderr, "Error opening Database %s\n", argv[1]);
exit(1);
}
argc--;
argv++;
// parse arguments (frames/signals which should be decoded)
while (argc >= 2)
{
frameName = argv[1];
signalName = strchr(argv[1], '.');
printf("Trying to find: Frame: %s", frameName);
if (signalName != NULL)
{
*signalName = 0;
signalName++;
printf(", Signal: %s", signalName);
}
printf("\n");
myFrame = find_frame_by_name(dataBase, frameName);
if (!myFrame)
{
fprintf(stderr, "Error finding Frame %s\n", frameName);
exit(1);
}
if (NULL != signalName)
{
mySignal = find_signal_by_name(myFrame, signalName);
if (!mySignal)
{
fprintf(stderr, "Error finding Signal %s\n", signalName);
exit(1);
}
}
else
{
mySignal = NULL;
}
add_callback(&callbackList, myFrame, mySignal, printCallback, 0);
printf("-- %s (0x%03x) ", myFrame->name, myFrame->canID);
if (signalName != NULL)
printf(" %s (%d [%d]) --", mySignal->name, mySignal->startBit,
mySignal->signalLength);
printf("\n");
argc--;
argv++;
}
while (fgets(buf, 99, stdin))
{
if (sscanf(buf, "(%ld.%ld) %s %s", &tv.tv_sec, &tv.tv_usec, device,
ascframe) != 4)
{
fprintf(stderr, "incorrect line format in logfile\n");
return 1;
}
if (parse_canframe(ascframe, &cf))
{
return 1;
}
processFrame(callbackList, &cf, tv, device);
}
return 0;
}