From f2d7215fb372b1d072eac66e655cd58d00068f9f Mon Sep 17 00:00:00 2001 From: geeksville Date: Thu, 6 Feb 2020 16:07:50 -0800 Subject: [PATCH] unreliable rx works --- TODO.md | 3 +++ src/MeshRadio.cpp | 19 ++++++++++++------- src/MeshRadio.h | 5 ++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/TODO.md b/TODO.md index ab3d072c..3773e055 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,8 @@ # High priority +* test raw device access without a manager in the way +* sim gps data for nodes that don't have hardware +* figure out what is busted with rx * send our owner info at boot, reply if we see anyone send theirs * implement regen owner and radio prefs * confirm second device receives that gps message and updates device db diff --git a/src/MeshRadio.cpp b/src/MeshRadio.cpp index 3d181ada..72d105cd 100644 --- a/src/MeshRadio.cpp +++ b/src/MeshRadio.cpp @@ -10,13 +10,13 @@ #include "NodeDB.h" // Change to 434.0 or other frequency, must match RX's freq! FIXME, choose a better default value -#define RF95_FREQ_US 915.0f +#define RF95_FREQ_US 902.0f RadioConfig radioConfig = RadioConfig_init_zero; MeshRadio::MeshRadio(MemoryPool &_pool, PointerQueue &_rxDest) : rf95(NSS_GPIO, DIO0_GPIO), - manager(rf95, nodeDB.getNodeNum()), + manager(rf95), pool(_pool), rxDest(_rxDest), txQueue(MAX_TX_QUEUE) @@ -38,6 +38,8 @@ bool MeshRadio::init() delay(10); #endif + manager.setThisAddress(nodeDB.getNodeNum()); // Note: we must do this here, because the nodenum isn't inited at constructor time. + if (!manager.init()) { DEBUG_MSG("LoRa radio init failed\n"); @@ -45,8 +47,6 @@ bool MeshRadio::init() return false; } - DEBUG_MSG("LoRa radio init OK!\n"); - // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM if (!rf95.setFrequency(radioConfig.center_freq)) { @@ -63,6 +63,8 @@ bool MeshRadio::init() // FIXME - can we do this? It seems to be in the Heltec board. rf95.setTxPower(radioConfig.tx_power, false); + DEBUG_MSG("LoRa radio init OK!\n"); + return true; } @@ -113,10 +115,11 @@ static int16_t packetnum = 0; // packet counter, we increment per xmission uint8_t srcaddr, destaddr, id, flags; // Poll to see if we've received a packet - if (manager.recvfromAckTimeout(radiobuf, &rxlen, 0, &srcaddr, &destaddr, &id, &flags)) + // if (manager.recvfromAckTimeout(radiobuf, &rxlen, 0, &srcaddr, &destaddr, &id, &flags)) + if (manager.recvfrom(radiobuf, &rxlen, &srcaddr, &destaddr, &id, &flags)) { // We received a packet - DEBUG_MSG("Received packet from mesh src=%d,dest=%d,id=%d,len=%d\n", srcaddr, destaddr, id, rxlen); + DEBUG_MSG("Received packet from mesh src=0x%x,dest=0x%x,id=%d,len=%d rxGood=%d,rxBad=%d\n", srcaddr, destaddr, id, rxlen, rf95.rxGood(), rf95.rxBad()); MeshPacket *mp = pool.allocZeroed(); assert(mp); // FIXME @@ -141,7 +144,7 @@ static int16_t packetnum = 0; // packet counter, we increment per xmission MeshPacket *txp = txQueue.dequeuePtr(0); // nowait if (txp) { - DEBUG_MSG("sending queued packet on mesh\n"); + DEBUG_MSG("sending queued packet on mesh (txGood=%d,rxGood=%d,rxBad=%d)\n", rf95.txGood(),rf95.rxGood(), rf95.rxBad()); assert(txp->has_payload); size_t numbytes = pb_encode_to_bytes(radiobuf, sizeof(radiobuf), SubPacket_fields, &txp->payload); @@ -154,5 +157,7 @@ static int16_t packetnum = 0; // packet counter, we increment per xmission handleReceive(txp); else pool.release(txp); + + DEBUG_MSG("Done with send\n"); } } diff --git a/src/MeshRadio.h b/src/MeshRadio.h index 324ccc41..4f096bbe 100644 --- a/src/MeshRadio.h +++ b/src/MeshRadio.h @@ -42,7 +42,10 @@ public: private: RH_RF95 rf95; // the raw radio interface - RHMesh manager; + + RHDatagram manager; + // RHReliableDatagram manager; // don't use mesh yet + // RHMesh manager; // MeshRXHandler rxHandler; MemoryPool &pool;