Port of RadioHead version 1.48 to mbed. It is a little messy and only works for SPI at this time.

Revision:
0:ab4e012489ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RHSPIDriver.cpp	Thu Oct 15 01:27:00 2015 +0000
@@ -0,0 +1,83 @@
+// RHSPIDriver.cpp
+//
+// Copyright (C) 2014 Mike McCauley
+// $Id: RHSPIDriver.cpp,v 1.9 2014/05/03 00:20:36 mikem Exp $
+
+#include <RHSPIDriver.h>
+
+RHSPIDriver::RHSPIDriver(PINS slaveSelectPin, RHGenericSPI& spi)
+    : 
+    _spi(spi),
+    _slaveSelectPin(slaveSelectPin)
+{
+}
+
+bool RHSPIDriver::init()
+{
+    // start the SPI library with the default speeds etc:
+    // On Arduino Due this defaults to SPI1 on the central group of 6 SPI pins
+    _spi.begin();
+
+    // Initialise the slave select pin
+    // On Maple, this must be _after_ spi.begin
+#if (RH_PLATFORM != RH_PLATFORM_MBED)
+    pinMode(_slaveSelectPin, OUTPUT);
+#endif
+    digitalWrite(_slaveSelectPin, HIGH);
+
+    delay(100);
+    return true;
+}
+
+uint8_t RHSPIDriver::spiRead(uint8_t reg)
+{
+    uint8_t val;
+    ATOMIC_BLOCK_START;
+    digitalWrite(_slaveSelectPin, LOW);
+    _spi.transfer(reg & ~RH_SPI_WRITE_MASK); // Send the address with the write mask off
+    val = _spi.transfer(0); // The written value is ignored, reg value is read
+    digitalWrite(_slaveSelectPin, HIGH);
+    ATOMIC_BLOCK_END;
+    return val;
+}
+
+uint8_t RHSPIDriver::spiWrite(uint8_t reg, uint8_t val)
+{
+    uint8_t status = 0;
+    ATOMIC_BLOCK_START;
+    digitalWrite(_slaveSelectPin, LOW);
+    status = _spi.transfer(reg | RH_SPI_WRITE_MASK); // Send the address with the write mask on
+    _spi.transfer(val); // New value follows
+    digitalWrite(_slaveSelectPin, HIGH);
+    ATOMIC_BLOCK_END;
+    return status;
+}
+
+uint8_t RHSPIDriver::spiBurstRead(uint8_t reg, uint8_t* dest, uint8_t len)
+{
+    uint8_t status = 0;
+    ATOMIC_BLOCK_START;
+    digitalWrite(_slaveSelectPin, LOW);
+    status = _spi.transfer(reg & ~RH_SPI_WRITE_MASK); // Send the start address with the write mask off
+    while (len--)
+	*dest++ = _spi.transfer(0);
+    digitalWrite(_slaveSelectPin, HIGH);
+    ATOMIC_BLOCK_END;
+    return status;
+}
+
+uint8_t RHSPIDriver::spiBurstWrite(uint8_t reg, const uint8_t* src, uint8_t len)
+{
+    uint8_t status = 0;
+    ATOMIC_BLOCK_START;
+    digitalWrite(_slaveSelectPin, LOW);
+    status = _spi.transfer(reg | RH_SPI_WRITE_MASK); // Send the start address with the write mask on
+    while (len--)
+	_spi.transfer(*src++);
+    digitalWrite(_slaveSelectPin, HIGH);
+    ATOMIC_BLOCK_END;
+    return status;
+}
+
+
+