Skip to content

Commit 812ace5

Browse files
authored
Misra 15_7: if … else if constructs should be terminated with an else clause (commaai#230)
* Fixed all Misra 15_7 violations
1 parent 79e9735 commit 812ace5

File tree

7 files changed

+63
-41
lines changed

7 files changed

+63
-41
lines changed

board/drivers/can.h

+30-33
Original file line numberDiff line numberDiff line change
@@ -156,48 +156,45 @@ void can_init_all(void) {
156156
}
157157
}
158158

159-
void can_set_gmlan(int bus) {
160-
if ((bus == -1) || (bus != can_num_lookup[3])) {
161-
// GMLAN OFF
162-
switch (can_num_lookup[3]) {
159+
void can_set_gmlan(uint8_t bus) {
160+
161+
// first, disable GMLAN on prev bus
162+
uint8_t prev_bus = can_num_lookup[3];
163+
if (bus != prev_bus) {
164+
switch (prev_bus) {
163165
case 1:
164-
puts("disable GMLAN on CAN2\n");
165-
set_can_mode(1, 0);
166-
bus_lookup[1] = 1;
167-
can_num_lookup[1] = 1;
168-
can_num_lookup[3] = -1;
169-
can_init(1);
170-
break;
171166
case 2:
172-
puts("disable GMLAN on CAN3\n");
173-
set_can_mode(2, 0);
174-
bus_lookup[2] = 2;
175-
can_num_lookup[2] = 2;
167+
puts("Disable GMLAN on CAN");
168+
puth(prev_bus + 1U);
169+
puts("\n");
170+
set_can_mode(prev_bus, 0);
171+
bus_lookup[prev_bus] = prev_bus;
172+
can_num_lookup[prev_bus] = prev_bus;
176173
can_num_lookup[3] = -1;
177-
can_init(2);
174+
can_init(prev_bus);
178175
break;
179176
default:
180-
puts("GMLAN bus value invalid\n");
177+
// GMLAN was not set on either BUS 1 or 2
181178
break;
182179
}
183180
}
184181

185-
if (bus == 1) {
186-
puts("GMLAN on CAN2\n");
187-
// GMLAN on CAN2
188-
set_can_mode(1, 1);
189-
bus_lookup[1] = 3;
190-
can_num_lookup[1] = -1;
191-
can_num_lookup[3] = 1;
192-
can_init(1);
193-
} else if (bus == 2) {
194-
puts("GMLAN on CAN3\n");
195-
// GMLAN on CAN3
196-
set_can_mode(2, 1);
197-
bus_lookup[2] = 3;
198-
can_num_lookup[2] = -1;
199-
can_num_lookup[3] = 2;
200-
can_init(2);
182+
// now enable GMLAN on the new bus
183+
switch (bus) {
184+
case 1:
185+
case 2:
186+
puts("Enable GMLAN on CAN");
187+
puth(bus + 1U);
188+
puts("\n");
189+
set_can_mode(bus, 1);
190+
bus_lookup[bus] = 3;
191+
can_num_lookup[bus] = -1;
192+
can_num_lookup[3] = bus;
193+
can_init(bus);
194+
break;
195+
default:
196+
puts("GMLAN can only be set on CAN2 or CAN3");
197+
break;
201198
}
202199
}
203200

board/drivers/gmlan_alt.h

+7-5
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void TIM4_IRQHandler(void) {
196196
} else {
197197
gmlan_silent_count++;
198198
}
199-
} else if (gmlan_silent_count == REQUIRED_SILENT_TIME) {
199+
} else {
200200
bool retry = 0;
201201
// in send loop
202202
if ((gmlan_sending > 0) && // not first bit
@@ -209,6 +209,8 @@ void TIM4_IRQHandler(void) {
209209
} else if ((read == 1) && (gmlan_sending == (gmlan_sendmax - 11))) { // recessive during ACK
210210
puts("GMLAN ERR: didn't recv ACK\n");
211211
retry = 1;
212+
} else {
213+
// do not retry
212214
}
213215
if (retry) {
214216
// reset sender (retry after 7 silent)
@@ -233,9 +235,7 @@ void TIM4_IRQHandler(void) {
233235
}
234236
}
235237
TIM4->SR = 0;
236-
} //bit bang mode
237-
238-
else if (gmlan_alt_mode == GPIO_SWITCH) {
238+
} else if (gmlan_alt_mode == GPIO_SWITCH) {
239239
if ((TIM4->SR & TIM_SR_UIF) && (gmlan_switch_below_timeout != -1)) {
240240
if ((can_timeout_counter == 0) && gmlan_switch_timeout_enable) {
241241
//it has been more than 1 second since timeout was reset; disable timer and restore the GMLAN output
@@ -258,7 +258,9 @@ void TIM4_IRQHandler(void) {
258258
}
259259
}
260260
TIM4->SR = 0;
261-
} //gmlan switch mode
261+
} else {
262+
puts("invalid gmlan_alt_mode\n");
263+
}
262264
}
263265

264266
void bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {

board/drivers/llcan.h

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// 5000 = 500 kbps
99
#define can_speed_to_prescaler(x) (CAN_PCLK / CAN_QUANTA * 10 / (x))
1010

11+
void puts(const char *a);
12+
1113
bool llcan_set_speed(CAN_TypeDef *CAN, uint32_t speed, bool loopback, bool silent) {
1214
// initialization mode
1315
CAN->MCR = CAN_MCR_TTCM | CAN_MCR_INRQ;
@@ -70,6 +72,8 @@ void llcan_init(CAN_TypeDef *CAN) {
7072
NVIC_EnableIRQ(CAN3_RX0_IRQn);
7173
NVIC_EnableIRQ(CAN3_SCE_IRQn);
7274
#endif
75+
} else {
76+
puts("Invalid CAN: initialization failed\n");
7377
}
7478
}
7579

board/drivers/uart.h

+2
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ void uart_init(USART_TypeDef *u, int baud) {
289289
NVIC_EnableIRQ(USART3_IRQn);
290290
} else if (u == UART5) {
291291
NVIC_EnableIRQ(UART5_IRQn);
292+
} else {
293+
// USART type undefined, skip
292294
}
293295
}
294296

board/drivers/usb.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -793,18 +793,19 @@ void usb_irqhandler(void) {
793793
if ((gintsts & USB_OTG_GINTSTS_RXFLVL) != 0) {
794794
// 1. Read the Receive status pop register
795795
volatile unsigned int rxst = USBx->GRXSTSP;
796+
int status = (rxst & USB_OTG_GRXSTSP_PKTSTS) >> 17;
796797

797798
#ifdef DEBUG_USB
798799
puts(" RX FIFO:");
799800
puth(rxst);
800801
puts(" status: ");
801-
puth((rxst & USB_OTG_GRXSTSP_PKTSTS) >> 17);
802+
puth(status);
802803
puts(" len: ");
803804
puth((rxst & USB_OTG_GRXSTSP_BCNT) >> 4);
804805
puts("\n");
805806
#endif
806807

807-
if (((rxst & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT) {
808+
if (status == STS_DATA_UPDT) {
808809
int endpoint = (rxst & USB_OTG_GRXSTSP_EPNUM);
809810
int len = (rxst & USB_OTG_GRXSTSP_BCNT) >> 4;
810811
(void)USB_ReadPacket(&usbdata, len);
@@ -822,13 +823,15 @@ void usb_irqhandler(void) {
822823
if (endpoint == 3) {
823824
usb_cb_ep3_out(usbdata, len, 1);
824825
}
825-
} else if (((rxst & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT) {
826+
} else if (status == STS_SETUP_UPDT) {
826827
(void)USB_ReadPacket(&setup, 8);
827828
#ifdef DEBUG_USB
828829
puts(" setup ");
829830
hexdump(&setup, 8);
830831
puts("\n");
831832
#endif
833+
} else {
834+
// status is neither STS_DATA_UPDT or STS_SETUP_UPDT, skip
832835
}
833836
}
834837

@@ -903,6 +906,8 @@ void usb_irqhandler(void) {
903906
puts("OUTEP3 error ");
904907
puth(USBx_OUTEP(3)->DOEPINT);
905908
puts("\n");
909+
} else {
910+
// USBx_OUTEP(3)->DOEPINT is 0, ok to skip
906911
}
907912

908913
if ((USBx_OUTEP(0)->DOEPINT & USB_OTG_DIEPINT_XFRC) != 0) {

board/gpio.h

+6
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ void set_can_enable(CAN_TypeDef *CAN, bool enabled) {
127127
// CAN3_EN
128128
set_gpio_output(GPIOA, 0, !enabled);
129129
#endif
130+
} else {
131+
puts("Invalid CAN: enabling failed\n");
130132
}
131133
}
132134

@@ -171,6 +173,8 @@ void set_can_mode(int can, bool use_gmlan) {
171173
set_gpio_alternate(GPIOB, 3, GPIO_AF11_CAN3);
172174
set_gpio_alternate(GPIOB, 4, GPIO_AF11_CAN3);
173175
#endif
176+
} else {
177+
puts("Invalid CAN: mode setting failed\n");
174178
}
175179
} else {
176180
if (can == 1) {
@@ -190,6 +194,8 @@ void set_can_mode(int can, bool use_gmlan) {
190194
set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3);
191195
set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3);
192196
#endif
197+
} else {
198+
puts("Invalid CAN: mode setting failed\n");
193199
}
194200
}
195201
}

board/main.c

+6
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,8 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
285285
can_set_gmlan(1);
286286
} else if (setup->b.wIndex.w == 2) {
287287
can_set_gmlan(2);
288+
} else {
289+
puts("Invalid bus num for GMLAN CAN set\n");
288290
}
289291
} else {
290292
can_set_gmlan(-1);
@@ -332,6 +334,8 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
332334
can_set_forwarding(setup->b.wValue.w, setup->b.wIndex.w & CAN_BUS_NUM_MASK);
333335
} else if((setup->b.wValue.w < BUS_MAX) && (setup->b.wIndex.w == 0xFF)){ //Clear Forwarding
334336
can_set_forwarding(setup->b.wValue.w, -1);
337+
} else {
338+
puts("Invalid CAN bus forwarding\n");
335339
}
336340
break;
337341
// **** 0xde: set can bitrate
@@ -462,6 +466,8 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
462466
} else if (setup->b.wValue.w < BUS_MAX) {
463467
puts("Clearing CAN Tx queue\n");
464468
can_clear(can_queues[setup->b.wValue.w]);
469+
} else {
470+
puts("Clearing CAN CAN ring buffer failed: wrong bus number\n");
465471
}
466472
break;
467473
// **** 0xf2: Clear UART ring buffer.

0 commit comments

Comments
 (0)