Skip to content

Commit

Permalink
Transport code harmonization (#1072)
Browse files Browse the repository at this point in the history
  • Loading branch information
tekka007 authored and henrikekblad committed Feb 20, 2018
1 parent b51981a commit 57eca4f
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 90 deletions.
63 changes: 4 additions & 59 deletions drivers/RFM69/new/RFM69_new.cpp
Expand Up @@ -200,7 +200,6 @@ LOCAL bool RFM69_initialise(const uint32_t frequencyHz)
RFM69.powerLevel = MY_RFM69_TX_POWER_DBM + 1; // will be overwritten when set
RFM69.radioMode = RFM69_RADIO_MODE_SLEEP;
RFM69.ATCenabled = false;
RFM69.listenModeEnabled = false;
RFM69.ATCtargetRSSI = RFM69_RSSItoInternal(MY_RFM69_ATC_TARGET_RSSI_DBM);

// SPI init
Expand Down Expand Up @@ -354,7 +353,7 @@ LOCAL uint8_t RFM69_receive(uint8_t *buf, const uint8_t maxBufSize)
// clear data flag
RFM69.dataReceived = false;
if (RFM69_getACKRequested(controlFlags) && !RFM69_getACKReceived(controlFlags)) {
#if defined(MY_GATEWAY_FEATURE) && (F_CPU>16000000)
#if defined(MY_GATEWAY_FEATURE) && (F_CPU>16*1000000ul)
// delay for fast GW and slow nodes
delay(50);
#endif
Expand Down Expand Up @@ -425,9 +424,9 @@ LOCAL bool RFM69_send(const uint8_t recipient, uint8_t *data, const uint8_t len,
LOCAL void RFM69_setFrequency(const uint32_t frequencyHz)
{
const uint32_t freqHz = (uint32_t)(frequencyHz / RFM69_FSTEP);
RFM69_writeReg(RFM69_REG_FRFMSB, (freqHz >> 16) & 0xFF);
RFM69_writeReg(RFM69_REG_FRFMID, (freqHz >> 8) & 0xFF);
RFM69_writeReg(RFM69_REG_FRFLSB, freqHz & 0xFF);
RFM69_writeReg(RFM69_REG_FRFMSB, (uint8_t)((freqHz >> 16) & 0xFF));
RFM69_writeReg(RFM69_REG_FRFMID, (uint8_t)((freqHz >> 8) & 0xFF));
RFM69_writeReg(RFM69_REG_FRFLSB, (uint8_t)(freqHz & 0xFF));
}

LOCAL void RFM69_setHighPowerRegs(const bool onOff)
Expand Down Expand Up @@ -774,60 +773,6 @@ LOCAL rfm69_RSSI_t RFM69_readRSSI(const bool forceTrigger)
return (rfm69_RSSI_t)RFM69_readReg(RFM69_REG_RSSIVALUE);
}

/* UNUSED
LOCAL uint8_t RFM69_getVersion(void)
{
return RFM69_readReg(RFM69_REG_VERSION);
}
LOCAL uint8_t RFM69_readTemperature(const uint8_t calFactor)
{
(void)RFM69_setRadioMode(RFM69_RADIO_MODE_STDBY);
RFM69_writeReg(RFM69_REG_TEMP1, RFM69_TEMP1_MEAS_START);
const uint32_t enterMS = hwMillis();
while ((RFM69_readReg(RFM69_REG_TEMP1) & RFM69_TEMP1_MEAS_RUNNING) && hwMillis() - enterMS < 500);
return ~RFM69_readReg(RFM69_REG_TEMP2) + RFM69_COURSE_TEMP_COEF +
calFactor; // 'complement' corrects the slope, rising temp = rising val
}
LOCAL uint8_t RFM69_setLNA(const uint8_t newReg)
{
const uint8_t oldReg = RFM69_readReg(RFM69_REG_LNA);
RFM69_writeReg(RFM69_REG_LNA, ((newReg & 7) | (oldReg &
~7))); // just control the LNA Gain bits for now
return oldReg; // return the original value in case we need to restore it
}
LOCAL bool RFM69_waitCAD(void)
{
const uint32_t enterMS = hwMillis();
(void)RFM69_setRadioMode(RFM69_RADIO_MODE_RX);
while (RFM69.radioMode == RFM69_RADIO_MODE_RX && !RFM69.dataReceived &&
RFM69_RSSItoInternal(RFM69_readRSSI()) > RFM69_RSSItoInternal(RFM69_CSMA_LIMIT_DBM)) {
if (hwMillis() - enterMS > RFM69_CSMA_TIMEOUT_MS) {
return false;
}
}
return true;
}
LOCAL void RFM69_rcCalibration(void)
{
// RC oscillator calibration
// On the SX1231 V2a, RC calibration at power-up needs to be performed
// This is not required in the version V2b any more, where the calibration is fully automatic
// see SX1231 datasheet, chapter 9 (Chip Revision)
RFM69_writeReg(0x57, 0x80);
RFM69_writeReg(RFM69_REG_OSC1, RFM69_OSC1_RCCAL_START);
while (!(RFM69_readReg(RFM69_REG_OSC1) & RFM69_OSC1_RCCAL_DONE)) {};
RFM69_writeReg(RFM69_REG_OSC1, RFM69_OSC1_RCCAL_START);
while (!(RFM69_readReg(RFM69_REG_OSC1) & RFM69_OSC1_RCCAL_DONE)) {};
RFM69_writeReg(0x57, 0x00);
}
*/

LOCAL void RFM69_readAllRegs(void)
{
#ifdef RFM69_REGISTER_DETAIL
Expand Down
4 changes: 1 addition & 3 deletions drivers/RFM69/new/RFM69_new.h
Expand Up @@ -326,7 +326,6 @@ typedef struct {
rfm69_RSSI_t RSSI; //!< RSSI of current packet, RSSI = value - 137
} __attribute__((packed)) rfm69_packet_t;


/**
* @brief RFM69 internal variables
*/
Expand All @@ -341,8 +340,7 @@ typedef struct {
bool dataReceived : 1; //!< data received
bool ackReceived : 1; //!< ACK received
bool ATCenabled : 1; //!< ATC enabled
bool listenModeEnabled : 1; //!< Listen mode enabled
bool reserved : 1; //!< Reserved
uint8_t reserved : 2; //!< Reserved
} rfm69_internal_t;

#define LOCAL static //!< static
Expand Down
15 changes: 7 additions & 8 deletions drivers/RFM95/RFM95.cpp
Expand Up @@ -347,9 +347,8 @@ LOCAL bool RFM95_sendFrame(rfm95_packet_t *packet, const bool increaseSequenceCo
(void)RFM95_setRadioMode(RFM95_RADIO_MODE_TX);
// wait until IRQ fires or timeout
const uint32_t startTX_MS = hwMillis();
while (!RFM95_irq &&
(hwMillis() - startTX_MS <
MY_RFM95_TX_TIMEOUT_MS) ) { // make this payload length + bit rate dependend
// todo: make this payload length + bit rate dependend
while (!RFM95_irq && (hwMillis() - startTX_MS < MY_RFM95_TX_TIMEOUT_MS) ) {
doYield();
}
return RFM95_irq;
Expand All @@ -371,9 +370,9 @@ LOCAL bool RFM95_send(const uint8_t recipient, uint8_t *data, const uint8_t len,
LOCAL void RFM95_setFrequency(const uint32_t frequencyHz)
{
const uint32_t freqReg = (uint32_t)(frequencyHz / RFM95_FSTEP);
(void)RFM95_writeReg(RFM95_REG_06_FRF_MSB, (freqReg >> 16) & 0xff);
(void)RFM95_writeReg(RFM95_REG_07_FRF_MID, (freqReg >> 8) & 0xff);
(void)RFM95_writeReg(RFM95_REG_08_FRF_LSB, freqReg & 0xff);
(void)RFM95_writeReg(RFM95_REG_06_FRF_MSB, (uint8_t)((freqReg >> 16) & 0xff));
(void)RFM95_writeReg(RFM95_REG_07_FRF_MID, (uint8_t)((freqReg >> 8) & 0xff));
(void)RFM95_writeReg(RFM95_REG_08_FRF_LSB, (uint8_t)(freqReg & 0xff));
}

LOCAL bool RFM95_setTxPowerLevel(rfm95_powerLevel_t newPowerLevel)
Expand Down Expand Up @@ -420,8 +419,8 @@ LOCAL void RFM95_setModemRegisters(const rfm95_modemConfig_t *config)

LOCAL void RFM95_setPreambleLength(const uint16_t preambleLength)
{
(void)RFM95_writeReg(RFM95_REG_20_PREAMBLE_MSB, (preambleLength >> 8) & 0xff);
(void)RFM95_writeReg(RFM95_REG_21_PREAMBLE_LSB, preambleLength & 0xff);
(void)RFM95_writeReg(RFM95_REG_20_PREAMBLE_MSB, (uint8_t)((preambleLength >> 8) & 0xff));
(void)RFM95_writeReg(RFM95_REG_21_PREAMBLE_LSB, (uint8_t)(preambleLength & 0xff));
}

LOCAL void RFM95_setAddress(const uint8_t addr)
Expand Down
2 changes: 0 additions & 2 deletions drivers/RFM95/RFM95.h
Expand Up @@ -186,8 +186,6 @@ extern HardwareSPI SPI; //!< SPI
#define RFM95_setACKReceived(__value, __flag) bitWrite(__value, RFM95_BIT_ACK_RECEIVED,__flag) //!< setACKReceived
#define RFM95_setACKRSSIReport(__value, __flag) bitWrite(__value, RFM95_BIT_ACK_RSSI_REPORT,__flag) //!< setACKRSSIReport
#define RFM95_getACKRSSIReport(__value) ((bool)bitRead(__value, RFM95_BIT_ACK_RSSI_REPORT)) //!< getACKRSSIReport
//#define RFM95_internalToRSSI(__value) ((int16_t)(__value - RFM95_RSSI_OFFSET)) //!< Convert internal RSSI to RSSI
//#define RFM95_RSSItoInternal(__value) ((uint8_t)(__value + RFM95_RSSI_OFFSET)) //!< Convert RSSI to internal RSSI
#define RFM95_internalToSNR(__value) ((int8_t)(__value / 4)) //!< Convert internal SNR to SNR

#define RFM95_MIN_POWER_LEVEL_DBM ((rfm95_powerLevel_t)5u) //!< min. power level
Expand Down
8 changes: 4 additions & 4 deletions hal/transport/RF24/MyTransportRF24.cpp
Expand Up @@ -68,7 +68,7 @@ bool transportInit(void)
(void)memset(RF24_psk, 0, 16);
(void)memcpy(RF24_psk, MY_ENCRYPTION_SIMPLE_PASSWD, strnlen(MY_ENCRYPTION_SIMPLE_PASSWD, 16));
#else
hwReadConfigBlock((void*)RF24_psk, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
hwReadConfigBlock((void *)RF24_psk, (void *)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
#endif
//set up AES-key
RF24_aes.set_key(RF24_psk, 16);
Expand All @@ -93,7 +93,7 @@ uint8_t transportGetAddress(void)
return RF24_getNodeID();
}

bool transportSend(const uint8_t to, const void* data, const uint8_t len, const bool noACK)
bool transportSend(const uint8_t to, const void *data, const uint8_t len, const bool noACK)
{
#if defined(MY_RF24_ENABLE_ENCRYPTION)
// copy input data because it is read-only
Expand Down Expand Up @@ -124,7 +124,7 @@ bool transportSanityCheck(void)
return RF24_sanityCheck();
}

uint8_t transportReceive(void* data)
uint8_t transportReceive(void *data)
{
uint8_t len = 0;
#if defined(MY_RX_MESSAGE_BUFFER_FEATURE)
Expand All @@ -141,7 +141,7 @@ uint8_t transportReceive(void* data)
// has to be adjusted, WIP!
RF24_aes.set_IV(0);

This comment has been minimized.

Copy link
@dewmercer

dewmercer Jul 21, 2018

@tekka007

This is a pretty nasty security issue.

Please see my comment on reuse of IVs here

// decrypt data
if (RF24_aes.cbc_decrypt((uint8_t*)(data), (uint8_t*)(data), len > 16 ? 2 : 1) != AES_SUCCESS) {
if (RF24_aes.cbc_decrypt((uint8_t *)data, (uint8_t *)data, len > 16 ? 2 : 1) != AES_SUCCESS) {
len = 0;
}
#endif
Expand Down
22 changes: 11 additions & 11 deletions hal/transport/RFM69/MyTransportRFM69.cpp
Expand Up @@ -37,9 +37,9 @@ bool transportInit(void)
(void)memset(RFM69_psk, 0, 16);
(void)memcpy(RFM69_psk, MY_ENCRYPTION_SIMPLE_PASSWD, strnlen(MY_ENCRYPTION_SIMPLE_PASSWD, 16));
#else
hwReadConfigBlock((void*)RFM69_psk, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
hwReadConfigBlock((void *)RFM69_psk, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
#endif
RFM69_encrypt((const char*)RFM69_psk);
RFM69_encrypt((const char *)RFM69_psk);
(void)memset(RFM69_psk, 0, 16); // Make sure it is purged from memory when set
#else
(void)RFM69_encrypt;
Expand All @@ -57,7 +57,7 @@ uint8_t transportGetAddress(void)
return RFM69_getAddress();
}

bool transportSend(const uint8_t to, const void* data, uint8_t len, const bool noACK)
bool transportSend(const uint8_t to, const void *data, uint8_t len, const bool noACK)
{
if (noACK) {
(void)RFM69_sendWithRetry(to, data, len, 0, 0);
Expand All @@ -77,9 +77,9 @@ bool transportSanityCheck(void)
return RFM69_sanityCheck();
}

uint8_t transportReceive(void* data)
uint8_t transportReceive(void *data)
{
return RFM69_receive((uint8_t*)data, MAX_MESSAGE_LENGTH);
return RFM69_receive((uint8_t *)data, MAX_MESSAGE_LENGTH);
}

void transportSleep(void)
Expand Down Expand Up @@ -108,7 +108,7 @@ bool transportSetTxPowerLevel(const uint8_t powerLevel)
return RFM69_setTxPowerLevel(powerLevel);
}

void transportSetTargetRSSI(int16_t targetSignalStrength)
void transportSetTargetRSSI(const int16_t targetSignalStrength)
{
#if !defined(MY_GATEWAY_FEATURE) && !defined(MY_RFM69_ATC_MODE_DISABLED)
RFM69_ATCmode(true, targetSignalStrength);
Expand Down Expand Up @@ -175,9 +175,9 @@ bool transportInit(void)
(void)memset(RFM69_psk, 0, 16);
(void)memcpy(RFM69_psk, MY_ENCRYPTION_SIMPLE_PASSWD, strnlen(MY_ENCRYPTION_SIMPLE_PASSWD, 16));
#else
hwReadConfigBlock((void*)RFM69_psk, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
hwReadConfigBlock((void *)RFM69_psk, (void *)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16);
#endif
_radio.encrypt((const char*)RFM69_psk);
_radio.encrypt((const char *)RFM69_psk);
(void)memset(RFM69_psk, 0, 16); // Make sure it is purged from memory when set
#endif
return true;
Expand All @@ -196,7 +196,7 @@ uint8_t transportGetAddress(void)
return _address;
}

bool transportSend(const uint8_t to, const void* data, const uint8_t len, const bool noACK)
bool transportSend(const uint8_t to, const void *data, const uint8_t len, const bool noACK)
{
if (noACK) {
(void)_radio.sendWithRetry(to, data, len, 0, 0);
Expand All @@ -215,11 +215,11 @@ bool transportSanityCheck(void)
return _radio.sanityCheck();
}

uint8_t transportReceive(void* data)
uint8_t transportReceive(void *data)
{
// save payload length
const uint8_t dataLen = _radio.DATALEN < MAX_MESSAGE_LENGTH? _radio.DATALEN : MAX_MESSAGE_LENGTH;
(void)memcpy((void*)data, (void*)_radio.DATA, dataLen);
(void)memcpy((void *)data, (void *)_radio.DATA, dataLen);
// Send ack back if this message wasn't a broadcast
if (_radio.ACKRequested()) {
_radio.sendACK();
Expand Down
6 changes: 3 additions & 3 deletions hal/transport/RFM95/MyTransportRFM95.cpp
Expand Up @@ -46,7 +46,7 @@ uint8_t transportGetAddress(void)
return RFM95_getAddress();
}

bool transportSend(const uint8_t to, const void* data, const uint8_t len, const bool noACK)
bool transportSend(const uint8_t to, const void *data, const uint8_t len, const bool noACK)
{
if (noACK) {
(void)RFM95_sendWithRetry(to, data, len, 0, 0);
Expand All @@ -66,9 +66,9 @@ bool transportSanityCheck(void)
return RFM95_sanityCheck();
}

uint8_t transportReceive(void* data)
uint8_t transportReceive(void *data)
{
const uint8_t len = RFM95_receive((uint8_t*)data, MAX_MESSAGE_LENGTH);
const uint8_t len = RFM95_receive((uint8_t *)data, MAX_MESSAGE_LENGTH);
return len;
}

Expand Down

0 comments on commit 57eca4f

Please sign in to comment.