async rx mode
This commit is contained in:
27
crossbow.ino
27
crossbow.ino
@@ -1,7 +1,7 @@
|
|||||||
#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
|
||||||
|
|
||||||
// #define DEBUG_SERIAL
|
// #define DEBUG_SERIAL
|
||||||
@@ -168,6 +168,7 @@ void setup(void)
|
|||||||
//Setup ISR callback and start receiving
|
//Setup ISR callback and start receiving
|
||||||
LoRa.onReceive(onReceive);
|
LoRa.onReceive(onReceive);
|
||||||
LoRa.receive();
|
LoRa.receive();
|
||||||
|
radioState.deviceState = RADIO_STATE_RX;
|
||||||
|
|
||||||
#ifdef DEVICE_MODE_RX
|
#ifdef DEVICE_MODE_RX
|
||||||
//initiallize default ppm values
|
//initiallize default ppm values
|
||||||
@@ -261,9 +262,23 @@ int8_t getFrameToTransmit(QspConfiguration_t *qsp) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Main loop starts here!
|
||||||
|
*
|
||||||
|
*/
|
||||||
void loop(void)
|
void loop(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Detect the moment when radio module stopped transmittig and put it
|
||||||
|
* back in to receive state
|
||||||
|
*/
|
||||||
|
if (radioState.deviceState == RADIO_STATE_TX && !LoRa.isTransmitting()) {
|
||||||
|
LoRa.receive();
|
||||||
|
radioState.deviceState = RADIO_STATE_RX;
|
||||||
|
}
|
||||||
|
|
||||||
if (radioState.bytesToRead != NO_DATA_TO_READ) {
|
if (radioState.bytesToRead != NO_DATA_TO_READ) {
|
||||||
LoRa.read(tmpBuffer, radioState.bytesToRead);
|
LoRa.read(tmpBuffer, radioState.bytesToRead);
|
||||||
|
|
||||||
@@ -277,6 +292,7 @@ void loop(void)
|
|||||||
//After reading, flush radio buffer, we have no need for whatever might be over there
|
//After reading, flush radio buffer, we have no need for whatever might be over there
|
||||||
LoRa.sleep();
|
LoRa.sleep();
|
||||||
LoRa.receive();
|
LoRa.receive();
|
||||||
|
radioState.deviceState = RADIO_STATE_RX;
|
||||||
|
|
||||||
radioState.bytesToRead = NO_DATA_TO_READ;
|
radioState.bytesToRead = NO_DATA_TO_READ;
|
||||||
}
|
}
|
||||||
@@ -404,9 +420,11 @@ void loop(void)
|
|||||||
qspEncodeFrame(&qsp, tmpBuffer, &size);
|
qspEncodeFrame(&qsp, tmpBuffer, &size);
|
||||||
//Sent it to radio in one SPI transaction
|
//Sent it to radio in one SPI transaction
|
||||||
LoRa.write(tmpBuffer, size);
|
LoRa.write(tmpBuffer, size);
|
||||||
LoRa.endPacket();
|
LoRa.endPacketAsync();
|
||||||
//After ending packet, put device into receive mode again
|
|
||||||
LoRa.receive();
|
//Set state to be able to detect the moment when TX is done
|
||||||
|
radioState.deviceState = RADIO_STATE_TX;
|
||||||
|
|
||||||
transmitPayload = false;
|
transmitPayload = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,6 +533,7 @@ void onReceive(int packetSize)
|
|||||||
*/
|
*/
|
||||||
LoRa.sleep();
|
LoRa.sleep();
|
||||||
LoRa.receive();
|
LoRa.receive();
|
||||||
|
radioState.deviceState = RADIO_STATE_RX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
2
lora.h
2
lora.h
@@ -27,7 +27,7 @@ public:
|
|||||||
int endPacket();
|
int endPacket();
|
||||||
|
|
||||||
void endPacketAsync();
|
void endPacketAsync();
|
||||||
bool isTransmitting()
|
bool isTransmitting();
|
||||||
|
|
||||||
int parsePacket(int size = 0);
|
int parsePacket(int size = 0);
|
||||||
int packetRssi();
|
int packetRssi();
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ enum debugConfigFlags {
|
|||||||
|
|
||||||
#define NO_DATA_TO_READ -1
|
#define NO_DATA_TO_READ -1
|
||||||
|
|
||||||
|
#define RADIO_STATE_TX 1
|
||||||
|
#define RADIO_STATE_RX 2
|
||||||
|
|
||||||
struct RadioState_t {
|
struct RadioState_t {
|
||||||
uint32_t frequency = 867000000;
|
uint32_t frequency = 867000000;
|
||||||
uint32_t loraBandwidth = 250000;
|
uint32_t loraBandwidth = 250000;
|
||||||
@@ -83,6 +86,7 @@ struct RadioState_t {
|
|||||||
int8_t bytesToRead = -1;
|
int8_t bytesToRead = -1;
|
||||||
uint8_t rssi = 0;
|
uint8_t rssi = 0;
|
||||||
uint8_t snr = 0;
|
uint8_t snr = 0;
|
||||||
|
uint8_t deviceState = RADIO_STATE_RX;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TxDeviceState_t {
|
struct TxDeviceState_t {
|
||||||
|
|||||||
Reference in New Issue
Block a user