Skip to content

Commit 22b6585

Browse files
committed
can_write(): return error code when no tx mailboxes are available.
1 parent a8a31da commit 22b6585

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

targets/TARGET_STM/can_api.c

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ int can_frequency(can_t *obj, int f)
206206

207207
int can_write(can_t *obj, CAN_Message msg, int cc)
208208
{
209-
uint32_t transmitmailbox = 5;
209+
uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX;
210210
CAN_TypeDef *can = (CAN_TypeDef *)(obj->can);
211211

212212
/* Select one empty transmit mailbox */
@@ -217,33 +217,31 @@ int can_write(can_t *obj, CAN_Message msg, int cc)
217217
} else if ((can->TSR & CAN_TSR_TME2) == CAN_TSR_TME2) {
218218
transmitmailbox = 2;
219219
} else {
220-
transmitmailbox = CAN_TXSTATUS_NOMAILBOX;
220+
return 0;
221221
}
222222

223-
if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX) {
224-
can->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;
225-
if (!(msg.format)) {
226-
can->sTxMailBox[transmitmailbox].TIR |= ((msg.id << 21) | msg.type);
227-
} else {
228-
can->sTxMailBox[transmitmailbox].TIR |= ((msg.id << 3) | CAN_ID_EXT | msg.type);
229-
}
230-
231-
/* Set up the DLC */
232-
can->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0;
233-
can->sTxMailBox[transmitmailbox].TDTR |= (msg.len & (uint8_t)0x0000000F);
234-
235-
/* Set up the data field */
236-
can->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)msg.data[3] << 24) |
237-
((uint32_t)msg.data[2] << 16) |
238-
((uint32_t)msg.data[1] << 8) |
239-
((uint32_t)msg.data[0]));
240-
can->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)msg.data[7] << 24) |
241-
((uint32_t)msg.data[6] << 16) |
242-
((uint32_t)msg.data[5] << 8) |
243-
((uint32_t)msg.data[4]));
244-
/* Request transmission */
245-
can->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;
223+
can->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;
224+
if (!(msg.format)) {
225+
can->sTxMailBox[transmitmailbox].TIR |= ((msg.id << 21) | msg.type);
226+
} else {
227+
can->sTxMailBox[transmitmailbox].TIR |= ((msg.id << 3) | CAN_ID_EXT | msg.type);
246228
}
229+
230+
/* Set up the DLC */
231+
can->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0;
232+
can->sTxMailBox[transmitmailbox].TDTR |= (msg.len & (uint8_t)0x0000000F);
233+
234+
/* Set up the data field */
235+
can->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)msg.data[3] << 24) |
236+
((uint32_t)msg.data[2] << 16) |
237+
((uint32_t)msg.data[1] << 8) |
238+
((uint32_t)msg.data[0]));
239+
can->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)msg.data[7] << 24) |
240+
((uint32_t)msg.data[6] << 16) |
241+
((uint32_t)msg.data[5] << 8) |
242+
((uint32_t)msg.data[4]));
243+
/* Request transmission */
244+
can->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;
247245

248246
return 1;
249247
}

0 commit comments

Comments
 (0)