1
0
mirror of https://github.com/sandeepmistry/arduino-LoRa.git synced 2025-06-12 19:41:53 +03:00

non blocking functions added (#62)

This commit is contained in:
Samuel Lang
2018-08-19 16:34:32 +02:00
committed by Sandeep Mistry
parent 07bfead143
commit 9d2a8c9c82
5 changed files with 72 additions and 10 deletions

View File

@ -149,6 +149,10 @@ void LoRaClass::end()
int LoRaClass::beginPacket(int implicitHeader)
{
if (isTransmitting()) {
return 0;
}
// put in standby mode
idle();
@ -165,22 +169,40 @@ int LoRaClass::beginPacket(int implicitHeader)
return 1;
}
int LoRaClass::endPacket()
int LoRaClass::endPacket(bool async)
{
// put in TX mode
writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_TX);
// wait for TX done
while ((readRegister(REG_IRQ_FLAGS) & IRQ_TX_DONE_MASK) == 0) {
yield();
if (async) {
// grace time is required for the radio
delayMicroseconds(150);
} else {
// wait for TX done
while ((readRegister(REG_IRQ_FLAGS) & IRQ_TX_DONE_MASK) == 0) {
yield();
}
// clear IRQ's
writeRegister(REG_IRQ_FLAGS, IRQ_TX_DONE_MASK);
}
// clear IRQ's
writeRegister(REG_IRQ_FLAGS, IRQ_TX_DONE_MASK);
return 1;
}
bool LoRaClass::isTransmitting()
{
if ((readRegister(REG_OP_MODE) & MODE_TX) == MODE_TX) {
return true;
}
if (readRegister(REG_IRQ_FLAGS) & IRQ_TX_DONE_MASK) {
// clear IRQ's
writeRegister(REG_IRQ_FLAGS, IRQ_TX_DONE_MASK);
}
return false;
}
int LoRaClass::parsePacket(int size)
{
int packetLength = 0;

View File

@ -32,7 +32,7 @@ public:
void end();
int beginPacket(int implicitHeader = false);
int endPacket();
int endPacket(bool async = false);
int parsePacket(int size = 0);
int packetRssi();
@ -88,6 +88,7 @@ private:
void implicitHeaderMode();
void handleDio0Rise();
bool isTransmitting();
int getSpreadingFactor();
long getSignalBandwidth();