1
+ #define MAX_BITS_CAN_PACKET (64+44+25)
1
2
2
3
// returns out_len
3
4
int do_bitstuff (char * out , char * in , int in_len ) {
@@ -26,24 +27,35 @@ int do_bitstuff(char *out, char *in, int in_len) {
26
27
return j ;
27
28
}
28
29
30
+ int append_crc (char * in , int in_len ) {
31
+ int crc = 0 ;
32
+ for (int i = 0 ; i < in_len ; i ++ ) {
33
+ crc <<= 1 ;
34
+ if (in [i ] ^ ((crc >>15 )& 1 )) {
35
+ crc = crc ^ 0x4599 ;
36
+ }
37
+ crc &= 0x7fff ;
38
+ }
39
+ for (int i = 14 ; i >= 0 ; i -- ) {
40
+ in [in_len ++ ] = (crc >>i )& 1 ;
41
+ }
42
+ return in_len ;
43
+ }
44
+
29
45
int get_bit_message (char * out ) {
30
- char test_pkt [] = {
46
+ char test_pkt [MAX_BITS_CAN_PACKET ];
47
+ char test_pkt_src [] = {
31
48
0 , // SOF
32
49
0 ,0 ,0 ,0 , // ID10-ID7
33
- //1, // bitstuff
34
50
0 ,0 ,1 ,0 ,1 ,0 ,0 , // ID6-ID0
35
51
0 , // RTR
36
52
0 , // IDE
37
53
0 , // reserved
38
- //1, // bitstuff
39
54
0 ,0 ,0 ,1 , // len
40
55
0 ,0 ,0 ,0 ,0 , // 1st byte 7-3
41
- //1, // bitstuff
42
56
0 ,0 ,1 , // 1st byte 2-0
43
-
44
- // CRC from real message
45
- 1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,1 ,1 ,
46
57
};
58
+
47
59
char footer [] = {
48
60
1 , // CRC delimiter
49
61
@@ -54,12 +66,14 @@ int get_bit_message(char *out) {
54
66
};
55
67
#define SPEEED 30
56
68
57
- // testing
58
- //char *test_pkt_stuffed = test_pkt;
59
- //int len = sizeof(test_pkt);
69
+ // copy packet
70
+ for (int i = 0 ; i < sizeof (test_pkt_src ); i ++ ) test_pkt [i ] = test_pkt_src [i ];
71
+
72
+ // append crc
73
+ int len = append_crc (test_pkt , sizeof (test_pkt_src ));
60
74
61
75
// do bitstuffing
62
- int len = do_bitstuff (out , test_pkt , sizeof ( test_pkt ) );
76
+ len = do_bitstuff (out , test_pkt , len );
63
77
64
78
// append footer
65
79
for (int i = 0 ; i < sizeof (footer ); i ++ ) {
@@ -85,7 +99,7 @@ void bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
85
99
puth (can_num_lookup [3 ]);
86
100
puts ("\n" );
87
101
88
- char pkt_stuffed [64 + 44 + 25 ];
102
+ char pkt_stuffed [MAX_BITS_CAN_PACKET ];
89
103
int len = get_bit_message (pkt_stuffed );
90
104
91
105
// actual bitbang loop
0 commit comments