]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/msp430/usci/Msp430SpiP.nc
Msp430SpiP SpiPacket.sendDone was incorrectly sending len==0.
[tinyos-2.x.git] / tos / chips / msp430 / usci / Msp430SpiP.nc
index eb217b3f92068e3cc76d2f0f4999bfe87d534359..ed3a331a6bd47a65c9b2d96faeba87a8f150e92c 100644 (file)
@@ -180,14 +180,13 @@ implementation {
 
       if (end > m_len)
        end = m_len;
-      call Registers.setTxbuf((m_txBuf) ? m_txBuf[m_pos] : 0);
+      call Registers.setTxbuf(m_txBuf ? m_txBuf[m_pos] : 0);
       while (++m_pos < end) {
-       while (!call Registers.getIfgRx());
+       while (!call Registers.getIfgRx() && !call Registers.getCtl1(UCSWRST));
+       tmp = call Registers.getRxbuf();
        if (m_rxBuf)
          m_rxBuf[m_pos - 1] = call Registers.getRxbuf();
-       else
-         tmp = call Registers.getRxbuf();
-       call Registers.setTxbuf((m_txBuf) ? m_txBuf[m_pos] : 0);
+       call Registers.setTxbuf(m_txBuf ? m_txBuf[m_pos] : 0);
       }
     }
   }
@@ -215,17 +214,16 @@ implementation {
   task void signalSendDone()
   {
     atomic {
+      uint16_t len = m_len;
       m_len = 0;
-      signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_len, SUCCESS);
+      signal SpiPacket.sendDone(m_txBuf, m_rxBuf, len, SUCCESS);
     }
   }
 
   async event void Interrupts.rx(uint8_t byte)
   {
     if (m_rxBuf)
-      m_rxBuf[m_pos - 1] = call Registers.getRxbuf();
-    else
-      call Registers.getRxbuf();
+      m_rxBuf[m_pos - 1] = byte;
 
     if (m_pos < m_len)
       sendData();