Skip to content

Commit bce279a

Browse files
authored
Pedal: only one firmware (#164)
* Pedal: only one firmware
1 parent 4f73cb4 commit bce279a

File tree

11 files changed

+39
-413
lines changed

11 files changed

+39
-413
lines changed

.circleci/config.yml

+2-6
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,9 @@ jobs:
2929
command: |
3030
docker run panda_build /bin/bash -c "cd /panda/board; make bin"
3131
- run:
32-
name: Build Honda Pedal STM image
32+
name: Build Pedal STM image
3333
command: |
34-
docker run panda_build /bin/bash -c "cd /panda/board/pedal_honda; make obj/comma.bin"
35-
- run:
36-
name: Build Toyota Pedal STM image
37-
command: |
38-
docker run panda_build /bin/bash -c "cd /panda/board/pedal_toyota; make obj/comma.bin"
34+
docker run panda_build /bin/bash -c "cd /panda/board/pedal; make obj/comma.bin"
3935
- run:
4036
name: Build NEO STM image
4137
command: |
File renamed without changes.
File renamed without changes.
File renamed without changes.

board/pedal_honda/main.c board/pedal/main.c

+37-27
Original file line numberDiff line numberDiff line change
@@ -70,28 +70,33 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, int hardwired) {
7070

7171
#endif
7272

73-
// ***************************** honda can checksum *****************************
74-
75-
int can_cksum(uint8_t *dat, int len, int addr, int idx) {
76-
int i;
77-
int s = 0;
78-
for (i = 0; i < len; i++) {
79-
s += (dat[i] >> 4);
80-
s += dat[i] & 0xF;
73+
// ***************************** pedal can checksum *****************************
74+
75+
uint8_t pedal_checksum(uint8_t *dat, int len) {
76+
uint8_t crc = 0xFF;
77+
uint8_t poly = 0xD5; // standard crc8
78+
int i, j;
79+
for (i = len - 1; i >= 0; i--) {
80+
crc ^= dat[i];
81+
for (j = 0; j < 8; j++) {
82+
if ((crc & 0x80) != 0) {
83+
crc = (uint8_t)((crc << 1) ^ poly);
84+
}
85+
else {
86+
crc <<= 1;
87+
}
88+
}
8189
}
82-
s += (addr>>0)&0xF;
83-
s += (addr>>4)&0xF;
84-
s += (addr>>8)&0xF;
85-
s += idx;
86-
s = 8-s;
87-
return s&0xF;
90+
return crc;
8891
}
8992

9093
// ***************************** can port *****************************
9194

9295
// addresses to be used on CAN
9396
#define CAN_GAS_INPUT 0x200
9497
#define CAN_GAS_OUTPUT 0x201
98+
#define CAN_GAS_SIZE 6
99+
#define COUNTER_CYCLE 0xF
95100

96101
void CAN1_TX_IRQHandler() {
97102
// clear interrupt
@@ -134,14 +139,19 @@ void CAN1_RX0_IRQHandler() {
134139
}
135140

136141
// normal packet
137-
uint8_t *dat = (uint8_t *)&CAN->sFIFOMailBox[0].RDLR;
138-
uint8_t *dat2 = (uint8_t *)&CAN->sFIFOMailBox[0].RDHR;
142+
uint8_t dat[8];
143+
uint8_t *rdlr = (uint8_t *)&CAN->sFIFOMailBox[0].RDLR;
144+
uint8_t *rdhr = (uint8_t *)&CAN->sFIFOMailBox[0].RDHR;
145+
for (int i=0; i<4; i++) {
146+
dat[i] = rdlr[i];
147+
dat[i+4] = rdhr[i];
148+
}
139149
uint16_t value_0 = (dat[0] << 8) | dat[1];
140150
uint16_t value_1 = (dat[2] << 8) | dat[3];
141-
uint8_t enable = (dat2[0] >> 7) & 1;
142-
uint8_t index = (dat2[1] >> 4) & 3;
143-
if (can_cksum(dat, 5, CAN_GAS_INPUT, index) == (dat2[1] & 0xF)) {
144-
if (((current_index+1)&3) == index) {
151+
uint8_t enable = (dat[4] >> 7) & 1;
152+
uint8_t index = dat[4] & COUNTER_CYCLE;
153+
if (pedal_checksum(dat, CAN_GAS_SIZE - 1) == dat[5]) {
154+
if (((current_index + 1) & COUNTER_CYCLE) == index) {
145155
#ifdef DEBUG
146156
puts("setting gas ");
147157
puth(value);
@@ -196,18 +206,18 @@ void TIM3_IRQHandler() {
196206
// check timer for sending the user pedal and clearing the CAN
197207
if ((CAN->TSR & CAN_TSR_TME0) == CAN_TSR_TME0) {
198208
uint8_t dat[8];
199-
dat[0] = (pdl0>>8)&0xFF;
200-
dat[1] = (pdl0>>0)&0xFF;
201-
dat[2] = (pdl1>>8)&0xFF;
202-
dat[3] = (pdl1>>0)&0xFF;
203-
dat[4] = state;
204-
dat[5] = can_cksum(dat, 5, CAN_GAS_OUTPUT, pkt_idx) | (pkt_idx<<4);
209+
dat[0] = (pdl0>>8) & 0xFF;
210+
dat[1] = (pdl0>>0) & 0xFF;
211+
dat[2] = (pdl1>>8) & 0xFF;
212+
dat[3] = (pdl1>>0) & 0xFF;
213+
dat[4] = (state & 0xF) << 4 | pkt_idx;
214+
dat[5] = pedal_checksum(dat, CAN_GAS_SIZE - 1);
205215
CAN->sTxMailBox[0].TDLR = dat[0] | (dat[1]<<8) | (dat[2]<<16) | (dat[3]<<24);
206216
CAN->sTxMailBox[0].TDHR = dat[4] | (dat[5]<<8);
207217
CAN->sTxMailBox[0].TDTR = 6; // len of packet is 5
208218
CAN->sTxMailBox[0].TIR = (CAN_GAS_OUTPUT << 21) | 1;
209219
++pkt_idx;
210-
pkt_idx &= 3;
220+
pkt_idx &= COUNTER_CYCLE;
211221
} else {
212222
// old can packet hasn't sent!
213223
state = FAULT_SEND;
File renamed without changes.

board/pedal_toyota/.gitignore

-1
This file was deleted.

board/pedal_toyota/Makefile

-58
This file was deleted.

board/pedal_toyota/README

-30
This file was deleted.

0 commit comments

Comments
 (0)