};
uint8_t m_pins;
- uint8_t* m_txBuf;
- uint8_t* m_rxBuf;
- uint16_t m_len;
- uint16_t m_pos;
+ norace uint8_t* m_txBuf;
+ norace uint8_t* m_rxBuf;
+ norace uint16_t m_len;
+ norace uint16_t m_pos;
inline bool is4pin() /* TRUE if the SPI bus is in 4-pin mode */
{
task void signalSendDone()
{
- atomic {
- error_t error = (m_pos == m_len) ? SUCCESS : FAIL;
+ error_t error = (m_pos == m_len) ? SUCCESS : FAIL;
- m_len = 0;
- signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_pos, error);
- }
+ m_len = 0;
+ signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_pos, error);
}
async command void ResourceConfigure.unconfigure()
if (isBusy() || (!txBuf && !rxBuf) || len == 0)
return FAIL;
else {
- atomic {
- m_txBuf = txBuf;
- m_rxBuf = rxBuf;
- m_len = len;
- m_pos = 0;
- if (sendData()) {
- call Registers.setIeRx();
- return SUCCESS;
- } else if (m_pos) {
- post signalSendDone();
- return SUCCESS;
- } else {
- m_len = 0;
- return FAIL;
- }
- }
+ m_txBuf = txBuf;
+ m_rxBuf = rxBuf;
+ m_len = len;
+ m_pos = 0;
+ if (sendData())
+ call Registers.setIeRx();
+ else
+ post signalSendDone();
+ return SUCCESS;
}
}
return;
}
call Registers.clrIeRx();
- post signalSendDone(); /* Don't signal from ISR context */
+ post signalSendDone();
}
default async event void SpiPacket.sendDone(uint8_t*, uint8_t*, uint16_t,