From 26138b79721f391bbdadd7669ef2adf4dadef68c Mon Sep 17 00:00:00 2001 From: Frank Olaf Sem-Jacobsen Date: Fri, 31 Oct 2014 20:27:20 +0100 Subject: [PATCH] RF69 --- libraries/MySensors/MyConfig.h | 8 +++++ libraries/MySensors/MyDriverRF69.cpp | 47 ++++++++++++++++++++++++++++ libraries/MySensors/MyDriverRF69.h | 33 +++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 libraries/MySensors/MyDriverRF69.cpp create mode 100644 libraries/MySensors/MyDriverRF69.h diff --git a/libraries/MySensors/MyConfig.h b/libraries/MySensors/MyConfig.h index d25a446..4a45ac0 100644 --- a/libraries/MySensors/MyConfig.h +++ b/libraries/MySensors/MyConfig.h @@ -12,6 +12,9 @@ // Choose radio type by enabling one of the following #define MYSENSORS_RF_NRF24 +#define MYSENSORS_RF_RF69 + + @@ -20,6 +23,11 @@ typedef class MyDriverNRF24 MyDriverClass; #endif +#ifdef MYSENSORS_RF_RF69 +#include "MyDriverRF69.h" +typedef class MyDriverRF69 MyDriverClass; +#endif + /*** * Enable/Disable debug logging */ diff --git a/libraries/MySensors/MyDriverRF69.cpp b/libraries/MySensors/MyDriverRF69.cpp new file mode 100644 index 0000000..4f733ed --- /dev/null +++ b/libraries/MySensors/MyDriverRF69.cpp @@ -0,0 +1,47 @@ +#include "MyDriver.h" +#include "MyDriverRF69.h" + +MyDriverRF69::MyDriverRF69() : MyDriver() { + driver = new RH_RF69(RF69_CS_PIN, RF69_INTERRUPT_PIN); +} + +void MyDriverRF69::init() { + // Start up the radio library + manager = new RHReliableDatagram(*driver, _address); + driver->setFrequency(RF69_FREQUENCY); + driver->setTxPower(RF69_TRANSMIT_POWER) + +} + +void MyDriverRF69::setAddress(uint8_t address) { + _address = address; + manager->setThisAddress(_address); +} + +uint8_t MyDriverRF69::getAddress() { + return _address; +} + +bool MyDriverRF69::send(uint8_t to, const void* data, uint8_t len) { + // Make sure radio has powered up + uint8_t status = manager->sendtoWait((uint8_t *) data, len, to); + if(status==RH_ROUTER_ERROR_NONE) { + return true; + } else { + return false; + } +} + +bool MyDriverRF69::available(uint8_t *to) { + return manager->available(); +} + +uint8_t MyDriverRF69::receive(void* data) { + uint8_t len = 256; + uint8_t from; + manager->recvfromAck((uint8_t *) data, &len, &from); +} + +void MyDriverRF69::powerDown() { + driver->sleep(); +} diff --git a/libraries/MySensors/MyDriverRF69.h b/libraries/MySensors/MyDriverRF69.h new file mode 100644 index 0000000..635d97f --- /dev/null +++ b/libraries/MySensors/MyDriverRF69.h @@ -0,0 +1,33 @@ +#ifndef MyCommDriver_h +#define MyCommDriver_h + +#include "MyConfig.h" +#include "MyDriver.h" +#include +#include +#include + +#define RF69_FREQUENCY 868; +#define RF69_TRANSMIT_POWER 14; +#define RF69_MODEM_CONFIG RH_RF69::GFSK_Rb250Fd250; +#define RF69_INTERRUPT_PIN 2; +#define RF69_CS_PIN 10; + +class MyDriverRF69 : public MyDriver +{ +public: + MyDriverRF69(); + void init(); + void setAddress(uint8_t address); + uint8_t getAddress(); + bool send(uint8_t to, const void* data, uint8_t len); + bool available(uint8_t *to); + uint8_t receive(void* data); + void powerDown(); +private: + RH_RF69 *driver = NULL; + RHReliableDatagram *manager = NULL; + uint8_t _address; +}; + +#endif \ No newline at end of file