[SX126x] Added support for AFSK transmission
This commit is contained in:
parent
526adc7431
commit
dc050df8d9
2 changed files with 62 additions and 0 deletions
|
@ -321,6 +321,63 @@ int16_t SX126x::receiveDirect() {
|
|||
return(RADIOLIB_ERR_UNKNOWN);
|
||||
}
|
||||
|
||||
int16_t SX126x::directMode() {
|
||||
// check modem
|
||||
if(getPacketType() != RADIOLIB_SX126X_PACKET_TYPE_GFSK) {
|
||||
return(RADIOLIB_ERR_WRONG_MODEM);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
int16_t state = standby();
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
// disable DIO2 RF switch
|
||||
state = setDio2AsRfSwitch(false);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
// set DIO2 to clock output and DIO3 to data input
|
||||
// this is done exclusively by writing magic values to even more magic registers
|
||||
uint8_t val = 0;
|
||||
|
||||
state = readRegister(RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_1, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
val &= ~(0x07 << 4);
|
||||
val |= (0x01 << 4);
|
||||
state = writeRegister(RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_1, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
state = readRegister(RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_0, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
val &= ~(0x0F << 0);
|
||||
val |= (0x0C << 0);
|
||||
state = writeRegister(RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_0, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
state = readRegister(RADIOLIB_SX126X_REG_DIOX_OUT_ENABLE, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
val &= ~(0x01 << 3);
|
||||
val |= (0x01 << 3);
|
||||
state = writeRegister(RADIOLIB_SX126X_REG_DIOX_OUT_ENABLE, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
state = readRegister(RADIOLIB_SX126X_REG_DIOX_IN_ENABLE, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
val &= ~(0x01 << 3);
|
||||
val |= (0x01 << 3);
|
||||
state = writeRegister(RADIOLIB_SX126X_REG_DIOX_IN_ENABLE, &val, 1);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
// enable TxDone interrupt
|
||||
state = setDioIrqParams(RADIOLIB_SX126X_IRQ_TX_DONE, RADIOLIB_SX126X_IRQ_TX_DONE);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
// set preamble length to the maximum to prevent SX126x from exiting Tx mode for a while
|
||||
state = setPreambleLength(0xFFFF);
|
||||
RADIOLIB_ASSERT(state);
|
||||
|
||||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX126x::scanChannel(uint8_t symbolNum, uint8_t detPeak, uint8_t detMin) {
|
||||
// set mode to CAD
|
||||
int state = startChannelScan(symbolNum, detPeak, detMin);
|
||||
|
|
|
@ -83,8 +83,11 @@
|
|||
#define RADIOLIB_SX126X_REG_DIOX_IN_ENABLE 0x0583
|
||||
#define RADIOLIB_SX126X_REG_DIOX_PULL_UP_CTRL 0x0584
|
||||
#define RADIOLIB_SX126X_REG_DIOX_PULL_DOWN_CTRL 0x0585
|
||||
#define RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_0 0x0587
|
||||
#define RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_1 0x0680
|
||||
#define RADIOLIB_SX126X_REG_WHITENING_INITIAL_MSB 0x06B8
|
||||
#define RADIOLIB_SX126X_REG_WHITENING_INITIAL_LSB 0x06B9
|
||||
#define RADIOLIB_SX126X_REG_RX_TX_PLD_LEN 0x06BB
|
||||
#define RADIOLIB_SX126X_REG_CRC_INITIAL_MSB 0x06BC
|
||||
#define RADIOLIB_SX126X_REG_CRC_INITIAL_LSB 0x06BD
|
||||
#define RADIOLIB_SX126X_REG_CRC_POLYNOMIAL_MSB 0x06BE
|
||||
|
@ -102,6 +105,7 @@
|
|||
#define RADIOLIB_SX126X_REG_IQ_CONFIG 0x0736
|
||||
#define RADIOLIB_SX126X_REG_LORA_SYNC_WORD_MSB 0x0740
|
||||
#define RADIOLIB_SX126X_REG_LORA_SYNC_WORD_LSB 0x0741
|
||||
#define RADIOLIB_SX126X_REG_RX_ADDR_PTR 0x0803
|
||||
#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_0 0x0819
|
||||
#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_1 0x081A
|
||||
#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_2 0x081B
|
||||
|
@ -1013,6 +1017,7 @@ class SX126x: public PhysicalLayer {
|
|||
int16_t setFrequencyRaw(float freq);
|
||||
int16_t setPacketMode(uint8_t mode, uint8_t len);
|
||||
int16_t setHeaderType(uint8_t headerType, size_t len = 0xFF);
|
||||
int16_t directMode();
|
||||
|
||||
// fixes to errata
|
||||
int16_t fixSensitivity();
|
||||
|
|
Loading…
Add table
Reference in a new issue