/ RNode_Firmware_CE_G2 / sx127x.h
sx127x.h
1 // Copyright Sandeep Mistry, Mark Qvist and Jacob Eva. 2 // Licensed under the MIT license. 3 4 #ifndef SX1276_H 5 #define SX1276_H 6 7 #include <Arduino.h> 8 #include <SPI.h> 9 #include "Modem.h" 10 11 #define LORA_DEFAULT_SS_PIN 10 12 #define LORA_DEFAULT_RESET_PIN 9 13 #define LORA_DEFAULT_DIO0_PIN 2 14 #define LORA_DEFAULT_BUSY_PIN -1 15 16 #define PA_OUTPUT_RFO_PIN 0 17 #define PA_OUTPUT_PA_BOOST_PIN 1 18 19 #define RSSI_OFFSET 157 20 21 // Modem status flags 22 #define SIG_DETECT 0x01 23 #define SIG_SYNCED 0x02 24 #define RX_ONGOING 0x04 25 26 class sx127x : public Stream { 27 public: 28 sx127x(); 29 30 int begin(long frequency); 31 void end(); 32 33 int beginPacket(int implicitHeader = false); 34 int endPacket(); 35 36 int parsePacket(int size = 0); 37 int packetRssi(); 38 int packetRssi(uint8_t pkt_snr_raw); 39 int currentRssi(); 40 uint8_t packetRssiRaw(); 41 uint8_t currentRssiRaw(); 42 uint8_t packetSnrRaw(); 43 float packetSnr(); 44 long packetFrequencyError(); 45 46 // from Print 47 virtual size_t write(uint8_t byte); 48 virtual size_t write(const uint8_t *buffer, size_t size); 49 50 // from Stream 51 virtual int available(); 52 virtual int read(); 53 virtual int peek(); 54 virtual void flush(); 55 56 void onReceive(void(*callback)(int)); 57 58 void receive(int size = 0); 59 void standby(); 60 void sleep(); 61 62 bool preInit(); 63 uint8_t getTxPower(); 64 void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN); 65 uint32_t getFrequency(); 66 void setFrequency(unsigned long frequency); 67 void setSpreadingFactor(int sf); 68 long getSignalBandwidth(); 69 void setSignalBandwidth(long sbw); 70 void setCodingRate4(int denominator); 71 void setPreambleLength(long preamble_symbols); 72 void setSyncWord(uint8_t sw); 73 bool dcd(); 74 void enableCrc(); 75 void disableCrc(); 76 void enableTCXO(); 77 void disableTCXO(); 78 79 byte random(); 80 81 void setPins(int ss = LORA_DEFAULT_SS_PIN, int reset = LORA_DEFAULT_RESET_PIN, int dio0 = LORA_DEFAULT_DIO0_PIN, int busy = LORA_DEFAULT_BUSY_PIN); 82 void setSPIFrequency(uint32_t frequency); 83 84 private: 85 void explicitHeaderMode(); 86 void implicitHeaderMode(); 87 88 void handleDio0Rise(); 89 90 uint8_t readRegister(uint8_t address); 91 void writeRegister(uint8_t address, uint8_t value); 92 uint8_t singleTransfer(uint8_t address, uint8_t value); 93 94 static void onDio0Rise(); 95 96 void handleLowDataRate(); 97 void optimizeModemSensitivity(); 98 99 private: 100 SPISettings _spiSettings; 101 int _ss; 102 int _reset; 103 int _dio0; 104 int _busy; 105 long _frequency; 106 int _packetIndex; 107 int _implicitHeaderMode; 108 bool _preinit_done; 109 void (*_onReceive)(int); 110 }; 111 112 extern sx127x sx127x_modem; 113 114 #endif