provides {
interface Init;
interface SpiByte;
+ interface FastSpiByte;
interface SpiPacket;
interface Resource[uint8_t id];
}
}
async command uint8_t SpiByte.write( uint8_t tx ) {
+ /* There is no need to enable the SPI bus and update the power state
+ here since that must have been done when the resource was granted.
+ However there seems to be a bug somewhere in the radio driver for
+ the MicaZ platform so we cannot remove the following two lines
+ before that problem is resolved. (Miklos Maroti) */
call Spi.enableSpi(TRUE);
call McuPowerState.update();
+
call Spi.write( tx );
while ( !( SPSR & 0x80 ) );
return call Spi.read();
}
+ inline async command void FastSpiByte.splitWrite(uint8_t data) {
+ call Spi.write(data);
+ }
+
+ inline async command uint8_t FastSpiByte.splitRead() {
+ while( !( SPSR & 0x80 ) )
+ ;
+ return call Spi.read();
+ }
+
+ inline async command uint8_t FastSpiByte.splitReadWrite(uint8_t data) {
+ uint8_t b;
+
+ while( !( SPSR & 0x80 ) )
+ ;
+ b = call Spi.read();
+ call Spi.write(data);
+
+ return b;
+ }
+
+ inline async command uint8_t FastSpiByte.write(uint8_t data) {
+ call Spi.write(data);
+ while( !( SPSR & 0x80 ) )
+ ;
+ return call Spi.read();
+ }
/**
* This component sends SPI packets in chunks of size SPI_ATOMIC_SIZE