[RF69] Added RTTY support

This commit is contained in:
jgromes 2018-10-07 12:14:20 +02:00
parent 120dcf5bed
commit 5cd59e43ba
2 changed files with 58 additions and 1 deletions

View file

@ -216,6 +216,56 @@ int16_t RF69::standby() {
return(setMode(RF69_STANDBY)); return(setMode(RF69_STANDBY));
} }
int16_t RF69::transmitDirect(uint32_t FRF) {
// user requested to start transmitting immediately (required for RTTY)
if(FRF != 0) {
_mod->SPIwriteRegister(RF69_REG_FRF_MSB, (FRF & 0xFF0000) >> 16);
_mod->SPIwriteRegister(RF69_REG_FRF_MID, (FRF & 0x00FF00) >> 8);
_mod->SPIwriteRegister(RF69_REG_FRF_LSB, FRF & 0x0000FF);
return(setMode(RF69_TX));
}
// activate direct mode
int16_t state = directMode();
if(state != ERR_NONE) {
return(state);
}
// start transmitting
return(setMode(RF69_TX));
}
int16_t RF69::receiveDirect() {
// activate direct mode
int16_t state = directMode();
if(state != ERR_NONE) {
return(state);
}
// start receiving
return(setMode(RF69_RX));
}
int16_t RF69::directMode() {
// set mode to standby
int16_t state = setMode(RF69_STANDBY);
if(state != ERR_NONE) {
return(state);
}
// set DIO mapping
state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO1_CONT_DCLK | RF69_DIO2_CONT_DATA, 5, 2);
// set continuous mode
state |= _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_CONTINUOUS_MODE_WITH_SYNC, 6, 5);
return(state);
}
int16_t RF69::packetMode() {
return(_mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_PACKET_MODE, 6, 5));
}
void RF69::setAESKey(uint8_t* key) { void RF69::setAESKey(uint8_t* key) {
_mod->SPIwriteRegisterBurst(RF69_REG_AES_KEY_1, key, 16); _mod->SPIwriteRegisterBurst(RF69_REG_AES_KEY_1, key, 16);
} }

View file

@ -4,6 +4,8 @@
#include "TypeDef.h" #include "TypeDef.h"
#include "Module.h" #include "Module.h"
#include "../protocols/PhysicalLayer.h"
//RF69 register map //RF69 register map
#define RF69_REG_FIFO 0x00 #define RF69_REG_FIFO 0x00
#define RF69_REG_OP_MODE 0x01 #define RF69_REG_OP_MODE 0x01
@ -279,6 +281,7 @@
#define RF69_DIO1_PACK_FIFO_NOT_EMPTY 0b00100000 // 5 4 #define RF69_DIO1_PACK_FIFO_NOT_EMPTY 0b00100000 // 5 4
#define RF69_DIO1_PACK_PLL_LOCK 0b00110000 // 5 4 #define RF69_DIO1_PACK_PLL_LOCK 0b00110000 // 5 4
#define RF69_DIO1_PACK_TIMEOUT 0b00110000 // 5 4 #define RF69_DIO1_PACK_TIMEOUT 0b00110000 // 5 4
#define RF69_DIO2_CONT_DATA 0b00000000 // 3 2
//RF69_REG_DIO_MAPPING_2 //RF69_REG_DIO_MAPPING_2
#define RF69_CLK_OUT_FXOSC 0b00000000 // 2 0 ClkOut frequency: F(XOSC) #define RF69_CLK_OUT_FXOSC 0b00000000 // 2 0 ClkOut frequency: F(XOSC)
@ -412,7 +415,7 @@
#define RF69_PA2_NORMAL 0x70 // 7 0 PA_BOOST: none #define RF69_PA2_NORMAL 0x70 // 7 0 PA_BOOST: none
#define RF69_PA2_20_DBM 0x7C // 7 0 +20 dBm #define RF69_PA2_20_DBM 0x7C // 7 0 +20 dBm
class RF69 { class RF69: public PhysicalLayer {
public: public:
// constructor // constructor
RF69(Module* module); RF69(Module* module);
@ -429,6 +432,9 @@ class RF69 {
int16_t receive(String& str, size_t len = 0); int16_t receive(String& str, size_t len = 0);
int16_t sleep(); int16_t sleep();
int16_t standby(); int16_t standby();
int16_t transmitDirect(uint32_t FRF = 0);
int16_t receiveDirect();
int16_t packetMode();
// hardware AES support // hardware AES support
void setAESKey(uint8_t* key); void setAESKey(uint8_t* key);
@ -468,6 +474,7 @@ class RF69 {
int16_t _tempOffset; int16_t _tempOffset;
int16_t config(); int16_t config();
int16_t directMode();
private: private:
int16_t setMode(uint8_t mode); int16_t setMode(uint8_t mode);