From aa9f517f87125bbe7e9520c838627cde509ffa8c Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 6 Dec 2009 14:09:22 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1378 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/src/can.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'os/hal/src/can.c') diff --git a/os/hal/src/can.c b/os/hal/src/can.c index 3cd10126d..7359e57b7 100644 --- a/os/hal/src/can.c +++ b/os/hal/src/can.c @@ -98,6 +98,9 @@ void canStop(CANDriver *canp) { "canStop(), #1", "invalid state"); can_lld_stop(canp); + chSemResetI(&canp->cd_rxsem, 0); + chSemResetI(&canp->cd_txsem, 0); + chSchRescheduleS(); canp->cd_state = CAN_STOP; canp->cd_status = 0; chSysUnlock(); @@ -129,7 +132,7 @@ msg_t canTransmit(CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout) { chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), "canTransmit(), #1", "invalid state"); - if ((canp->cd_state == CAN_SLEEP) || !can_lld_can_transmit(canp)) { + while ((canp->cd_state == CAN_SLEEP) || !can_lld_can_transmit(canp)) { msg_t msg = chSemWaitTimeoutS(&canp->cd_txsem, timeout); if (msg != RDY_OK) { chSysUnlock(); @@ -169,7 +172,7 @@ msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout) { chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), "canReceive(), #1", "invalid state"); - if ((canp->cd_state == CAN_SLEEP) || !can_lld_can_receive(canp)) { + while ((canp->cd_state == CAN_SLEEP) || !can_lld_can_receive(canp)) { msg_t msg = chSemWaitTimeoutS(&canp->cd_rxsem, timeout); if (msg != RDY_OK) { chSysUnlock(); -- cgit v1.2.3