Skip to content

Commit aa3a36d

Browse files
svoglbulislaw
authored andcommitted
can_write(): return error code when no tx mailboxes are available. (#3829)
1 parent 9c8572a commit aa3a36d

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
@@ -207,7 +207,7 @@ int can_frequency(can_t *obj, int f)
207207

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

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

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

249247
return 1;
250248
}

0 commit comments

Comments
 (0)