diff --git a/crossbow/crossbow.ino b/crossbow/crossbow.ino index ab8161f..cacdf0a 100644 --- a/crossbow/crossbow.ino +++ b/crossbow/crossbow.ino @@ -429,7 +429,7 @@ void loop(void) &rxDeviceState, radioNode.rssi, radioNode.snr, - platformNode.platformState + (platformNode.platformState == DEVICE_STATE_FAILSAFE) ); break; } diff --git a/crossbow/platform_node.cpp b/crossbow/platform_node.cpp index 90762c1..9ba18dd 100644 --- a/crossbow/platform_node.cpp +++ b/crossbow/platform_node.cpp @@ -23,16 +23,16 @@ void PlatformNode::setRcChannel(uint8_t channel, int value, int offset) { void PlatformNode::enterBindMode(void) { isBindMode = true; - // radioNode.set( - // 0, // Minimum power - // 125000, // 125kHz bandwidth - // 6, // low spreading factor, we do not need high RX sensitivity - // 5, // same for coding rate - // 868000000 //Fixed frequency while binding - // ); - + radioNode.set( + 0, // Minimum power + 125000, // 125kHz bandwidth + 6, // low spreading factor, we do not need high RX sensitivity + 5, // same for coding rate + 868000000 //Fixed frequency while binding + ); } void PlatformNode::leaveBindMode(void) { isBindMode = false; + radioNode.reset(); } \ No newline at end of file diff --git a/crossbow/platform_node.h b/crossbow/platform_node.h index 0e8f5b4..f07146b 100644 --- a/crossbow/platform_node.h +++ b/crossbow/platform_node.h @@ -1,6 +1,7 @@ #pragma once #include "Arduino.h" +#include "radio_node.h" #ifndef PLATFORM_NODE_H #define PLATFORM_NODE_H @@ -9,6 +10,8 @@ #define PLATFORM_CHANNEL_COUNT 10 #define PLATFORM_DEFAULT_CHANNEL_VALUE 1000 +extern RadioNode radioNode; + enum deviceStates { DEVICE_STATE_OK, DEVICE_STATE_FAILSAFE, diff --git a/crossbow/qsp.cpp b/crossbow/qsp.cpp index 9f13280..db6d479 100644 --- a/crossbow/qsp.cpp +++ b/crossbow/qsp.cpp @@ -41,7 +41,7 @@ void qspComputeCrc(QspConfiguration_t *qsp, uint8_t dataByte) qsp->crc = crc8_dvb_s2(qsp->crc, dataByte); } -void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState, uint8_t rssi, uint8_t snr, uint8_t platformState) { +void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState, uint8_t rssi, uint8_t snr, bool isFailsafe) { qsp->payload[0] = rssi; qsp->payload[1] = snr; qsp->payload[2] = rxDeviceState->rxVoltage; @@ -50,7 +50,7 @@ void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceSta uint8_t flags = 0; - if (platformState == DEVICE_STATE_FAILSAFE) { + if (isFailsafe) { flags |= 0x01 << 0; } diff --git a/crossbow/qsp.h b/crossbow/qsp.h index c23f18b..9312f11 100644 --- a/crossbow/qsp.h +++ b/crossbow/qsp.h @@ -1,6 +1,5 @@ #include "Arduino.h" #include "variables.h" -#include "radio_node.h" void qspDecodeRcDataFrame(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceSate); void decodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState); @@ -8,7 +7,7 @@ void decodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceSta uint8_t get10bitHighShift(uint8_t channel); uint8_t get10bitLowShift(uint8_t channel); void qspComputeCrc(QspConfiguration_t *qsp, uint8_t dataByte); -void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState, uint8_t rssi, uint8_t snr, uint8_t platformState); +void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState, uint8_t rssi, uint8_t snr, bool isFailsafe); void encodeRcDataPayload(QspConfiguration_t *qsp, uint8_t noOfChannels); void qspDecodeIncomingFrame( QspConfiguration_t *qsp, diff --git a/crossbow/radio_node.cpp b/crossbow/radio_node.cpp index 5413c41..e7b0512 100644 --- a/crossbow/radio_node.cpp +++ b/crossbow/radio_node.cpp @@ -17,6 +17,16 @@ RadioNode::RadioNode(void) { } +void RadioNode::reset(void) { + set( + loraTxPower, + loraBandwidth, + loraSpreadingFactor, + loraCodingRate, + getFrequencyForChannel(getChannel()) + ); +} + void RadioNode::init(uint8_t ss, uint8_t rst, uint8_t di0, void(*callback)(int)) { /* * Setup hardware @@ -31,14 +41,7 @@ void RadioNode::init(uint8_t ss, uint8_t rst, uint8_t di0, void(*callback)(int)) while (true); } - set( - loraTxPower, - loraBandwidth, - loraSpreadingFactor, - loraCodingRate, - getFrequencyForChannel(getChannel()) - ); - + reset(); LoRa.enableCrc(); //Setup ISR callback and start receiving diff --git a/crossbow/radio_node.h b/crossbow/radio_node.h index 0d31a40..164d651 100644 --- a/crossbow/radio_node.h +++ b/crossbow/radio_node.h @@ -39,6 +39,7 @@ class RadioNode { uint8_t codingRate, long frequency ); + void reset(void); volatile int8_t bytesToRead = -1; volatile uint8_t radioState = RADIO_STATE_RX; uint8_t rssi = 0; diff --git a/crossbow/variables.h b/crossbow/variables.h index c62d0e9..f412f6f 100644 --- a/crossbow/variables.h +++ b/crossbow/variables.h @@ -1,6 +1,4 @@ #include "Arduino.h" -#include "radio_node.h" -#include "platform_node.h" #pragma once