Skip to content

Commit 74af441

Browse files
committed
can crc
1 parent 932d727 commit 74af441

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

board/drivers/canbitbang.h

+26-12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#define MAX_BITS_CAN_PACKET (64+44+25)
12

23
// returns out_len
34
int do_bitstuff(char *out, char *in, int in_len) {
@@ -26,24 +27,35 @@ int do_bitstuff(char *out, char *in, int in_len) {
2627
return j;
2728
}
2829

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+
2945
int get_bit_message(char *out) {
30-
char test_pkt[] = {
46+
char test_pkt[MAX_BITS_CAN_PACKET];
47+
char test_pkt_src[] = {
3148
0, // SOF
3249
0,0,0,0, // ID10-ID7
33-
//1, // bitstuff
3450
0,0,1,0,1,0,0, // ID6-ID0
3551
0, // RTR
3652
0, // IDE
3753
0, // reserved
38-
//1, // bitstuff
3954
0,0,0,1, // len
4055
0,0,0,0,0, // 1st byte 7-3
41-
//1, // bitstuff
4256
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,
4657
};
58+
4759
char footer[] = {
4860
1, // CRC delimiter
4961

@@ -54,12 +66,14 @@ int get_bit_message(char *out) {
5466
};
5567
#define SPEEED 30
5668

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));
6074

6175
// do bitstuffing
62-
int len = do_bitstuff(out, test_pkt, sizeof(test_pkt));
76+
len = do_bitstuff(out, test_pkt, len);
6377

6478
// append footer
6579
for (int i = 0; i < sizeof(footer); i++) {
@@ -85,7 +99,7 @@ void bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
8599
puth(can_num_lookup[3]);
86100
puts("\n");
87101

88-
char pkt_stuffed[64+44+25];
102+
char pkt_stuffed[MAX_BITS_CAN_PACKET];
89103
int len = get_bit_message(pkt_stuffed);
90104

91105
// actual bitbang loop

tests/gmbitbang/test_packer.c

+3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
int main() {
55
char out[100];
66
int len = get_bit_message(out);
7+
printf("T:");
78
for (int i = 0; i < len; i++) {
89
printf("%d", out[i]);
910
}
1011
printf("\n");
12+
printf("R:0000010010100000100010000010011110111010100111111111111111");
13+
printf("\n");
1114
return 0;
1215
}
1316

0 commit comments

Comments
 (0)