| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #pragma once
- #include <Mesh.h>
- #include <RadioLib.h>
- class RadioLibWrapper : public mesh::Radio {
- protected:
- PhysicalLayer* _radio;
- mesh::MainBoard* _board;
- uint32_t n_recv, n_sent;
- void idle();
- public:
- RadioLibWrapper(PhysicalLayer& radio, mesh::MainBoard& board) : _radio(&radio), _board(&board) { n_recv = n_sent = 0; }
- void begin() override;
- int recvRaw(uint8_t* bytes, int sz) override;
- uint32_t getEstAirtimeFor(int len_bytes) override;
- void startSendRaw(const uint8_t* bytes, int len) override;
- bool isSendComplete() override;
- void onSendFinished() override;
- uint32_t getPacketsRecv() const { return n_recv; }
- uint32_t getPacketsSent() const { return n_sent; }
- virtual float getLastRSSI() const override;
- virtual float getLastSNR() const override;
- };
- /**
- * \brief an RNG impl using the noise from the LoRa radio as entropy.
- * NOTE: this is VERY SLOW! Use only for things like creating new LocalIdentity
- */
- class RadioNoiseListener : public mesh::RNG {
- PhysicalLayer* _radio;
- public:
- RadioNoiseListener(PhysicalLayer& radio): _radio(&radio) { }
- void random(uint8_t* dest, size_t sz) override {
- for (int i = 0; i < sz; i++) {
- dest[i] = _radio->randomByte() ^ (::random(0, 256) & 0xFF);
- }
- }
- };
|