Init moved to RadioNode

This commit is contained in:
Pawel Spychalski
2018-05-16 14:23:09 +02:00
parent 948cc7915b
commit 434fe13fff
4 changed files with 48 additions and 39 deletions

View File

@@ -15,8 +15,8 @@
* DEVICE_MODE_TX * DEVICE_MODE_TX
* DEVICE_MODE_RX * DEVICE_MODE_RX
*/ */
// #define DEVICE_MODE_TX #define DEVICE_MODE_TX
#define DEVICE_MODE_RX // #define DEVICE_MODE_RX
#define FEATURE_TX_OLED #define FEATURE_TX_OLED
// #define FORCE_TX_WITHOUT_INPUT // #define FORCE_TX_WITHOUT_INPUT

View File

@@ -87,8 +87,6 @@ QspConfiguration_t qsp = {};
RxDeviceState_t rxDeviceState = {}; RxDeviceState_t rxDeviceState = {};
TxDeviceState_t txDeviceState = {}; TxDeviceState_t txDeviceState = {};
uint8_t tmpBuffer[MAX_PACKET_SIZE];
void onQspSuccess(QspConfiguration_t *qsp, TxDeviceState_t *txDeviceState, RxDeviceState_t *rxDeviceState, uint8_t receivedChannel) { void onQspSuccess(QspConfiguration_t *qsp, TxDeviceState_t *txDeviceState, RxDeviceState_t *rxDeviceState, uint8_t receivedChannel) {
//If recide received a valid frame, that means it can start to talk //If recide received a valid frame, that means it can start to talk
radioNode.lastReceivedChannel = receivedChannel; radioNode.lastReceivedChannel = receivedChannel;
@@ -162,30 +160,7 @@ void setup(void)
qsp.deviceState = DEVICE_STATE_OK; qsp.deviceState = DEVICE_STATE_OK;
#endif #endif
/* radioNode.init(LORA_SS_PIN, LORA_RST_PIN, LORA_DI0_PIN, onReceive);
* Setup hardware
*/
LoRa.setPins(
LORA_SS_PIN,
LORA_RST_PIN,
LORA_DI0_PIN
);
if (!LoRa.begin(radioNode.getFrequencyForChannel(radioNode.getChannel()))) {
while (true);
}
//Configure LoRa module
LoRa.setSignalBandwidth(radioNode.loraBandwidth);
LoRa.setSpreadingFactor(radioNode.loraSpreadingFactor);
LoRa.setCodingRate4(radioNode.loraCodingRate);
LoRa.setTxPower(radioNode.loraTxPower);
LoRa.enableCrc();
//Setup ISR callback and start receiving
LoRa.onReceive(onReceive);
LoRa.receive();
radioNode.deviceState = RADIO_STATE_RX;
#ifdef DEVICE_MODE_RX #ifdef DEVICE_MODE_RX
//initiallize default ppm values //initiallize default ppm values
@@ -485,17 +460,7 @@ void loop(void)
if (qsp.canTransmit && transmitPayload) if (qsp.canTransmit && transmitPayload)
{ {
uint8_t size; radioNode.handleTx(&qsp);
LoRa.beginPacket();
//Prepare packet
qspEncodeFrame(&qsp, tmpBuffer, &size, radioNode.getChannel());
//Sent it to radio in one SPI transaction
LoRa.write(tmpBuffer, size);
LoRa.endPacketAsync();
//Set state to be able to detect the moment when TX is done
radioNode.deviceState = RADIO_STATE_TX;
transmitPayload = false; transmitPayload = false;
} }

View File

@@ -5,6 +5,33 @@ RadioNode::RadioNode(void) {
} }
void RadioNode::init(uint8_t ss, uint8_t rst, uint8_t di0, void(*callback)(int)) {
/*
* Setup hardware
*/
LoRa.setPins(
ss,
rst,
di0
);
if (!LoRa.begin(getFrequencyForChannel(getChannel()))) {
while (true);
}
//Configure LoRa module
LoRa.setSignalBandwidth(loraBandwidth);
LoRa.setSpreadingFactor(loraSpreadingFactor);
LoRa.setCodingRate4(loraCodingRate);
LoRa.setTxPower(loraTxPower);
LoRa.enableCrc();
//Setup ISR callback and start receiving
LoRa.onReceive(callback);
LoRa.receive();
deviceState = RADIO_STATE_RX;
}
void RadioNode::readRssi(void) void RadioNode::readRssi(void)
{ {
rssi = 164 - constrain(LoRa.packetRssi() * -1, 0, 164); rssi = 164 - constrain(LoRa.packetRssi() * -1, 0, 164);
@@ -112,3 +139,18 @@ void RadioNode::handleTxDoneState(void) {
nextTxCheckMillis = currentMillis + 1; //We check of TX done every 1ms nextTxCheckMillis = currentMillis + 1; //We check of TX done every 1ms
} }
} }
void RadioNode::handleTx(QspConfiguration_t *qsp) {
uint8_t size;
uint8_t tmpBuffer[MAX_PACKET_SIZE];
LoRa.beginPacket();
//Prepare packet
qspEncodeFrame(qsp, tmpBuffer, &size, getChannel());
//Sent it to radio in one SPI transaction
LoRa.write(tmpBuffer, size);
LoRa.endPacketAsync();
//Set state to be able to detect the moment when TX is done
deviceState = RADIO_STATE_TX;
}

View File

@@ -18,6 +18,7 @@
class RadioNode { class RadioNode {
public: public:
RadioNode(void); RadioNode(void);
void init(uint8_t ss, uint8_t rst, uint8_t di0, void(*callback)(int));
void readRssi(void); void readRssi(void);
void readSnr(void); void readSnr(void);
static uint32_t getFrequencyForChannel(uint8_t channel); static uint32_t getFrequencyForChannel(uint8_t channel);
@@ -33,6 +34,7 @@ class RadioNode {
uint32_t getChannelEntryMillis(void); uint32_t getChannelEntryMillis(void);
void handleChannelDwell(void); void handleChannelDwell(void);
void handleTxDoneState(); void handleTxDoneState();
void handleTx(QspConfiguration_t *qsp);
int8_t bytesToRead = -1; int8_t bytesToRead = -1;
uint8_t deviceState = RADIO_STATE_RX; uint8_t deviceState = RADIO_STATE_RX;
uint8_t rssi = 0; uint8_t rssi = 0;