]> 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 dfdf5afd635089b30c5076deae08baa4aa14a245..ed3a331a6bd47a65c9b2d96faeba87a8f150e92c 100644 (file)
@@ -144,13 +144,13 @@ implementation {
       call Registers.clrIfgRx();
 
       /* Restore pins to their pre-configure state */
-      if (is4pin() && (m_pins & PINS_STE))
+      if (is4pin() && (m_pins & (1 << PINS_STE)))
        call STE.selectIOFunc();
-      if (m_pins & PINS_SIMO)
+      if (m_pins & (1 << PINS_SIMO))
        call SIMO.selectIOFunc();
-      if (m_pins & PINS_SOMI)
+      if (m_pins & (1 << PINS_SOMI))
        call SOMI.selectIOFunc();
-      if (m_pins & PINS_CLK)
+      if (m_pins & (1 << PINS_CLK))
        call CLK.selectIOFunc();
     }
   }
@@ -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 {
-      signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_len, SUCCESS);
+      uint16_t len = m_len;
       m_len = 0;
+      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();