Greg Voronin
/
gammaCanary02
This version is the one to be submitted as a part the Hackster.io contest, Unleash Invisible Intelligence
LoRa.h@0:a761fba7f8a8, 2018-07-31 (annotated)
- Committer:
- gov1
- Date:
- Tue Jul 31 16:30:32 2018 +0000
- Revision:
- 0:a761fba7f8a8
complete version with emer. batt low check
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gov1 | 0:a761fba7f8a8 | 1 | #ifndef LORA_H |
gov1 | 0:a761fba7f8a8 | 2 | #define LORA_H |
gov1 | 0:a761fba7f8a8 | 3 | |
gov1 | 0:a761fba7f8a8 | 4 | #include "mbed.h" |
gov1 | 0:a761fba7f8a8 | 5 | |
gov1 | 0:a761fba7f8a8 | 6 | #define LORA_DEFAULT_SS_PIN P5_4 |
gov1 | 0:a761fba7f8a8 | 7 | #define LORA_DEFAULT_RESET_PIN P5_5 |
gov1 | 0:a761fba7f8a8 | 8 | #define LORA_DEFAULT_DIO0_PIN P3_3 |
gov1 | 0:a761fba7f8a8 | 9 | |
gov1 | 0:a761fba7f8a8 | 10 | #define PA_OUTPUT_RFO_PIN 0 |
gov1 | 0:a761fba7f8a8 | 11 | #define PA_OUTPUT_PA_BOOST_PIN 1 |
gov1 | 0:a761fba7f8a8 | 12 | |
gov1 | 0:a761fba7f8a8 | 13 | class LoRaClass: public Stream |
gov1 | 0:a761fba7f8a8 | 14 | { |
gov1 | 0:a761fba7f8a8 | 15 | public: |
gov1 | 0:a761fba7f8a8 | 16 | LoRaClass(); |
gov1 | 0:a761fba7f8a8 | 17 | |
gov1 | 0:a761fba7f8a8 | 18 | int begin(long frequency); |
gov1 | 0:a761fba7f8a8 | 19 | void end(); |
gov1 | 0:a761fba7f8a8 | 20 | |
gov1 | 0:a761fba7f8a8 | 21 | int beginPacket(int implicitHeader = false); |
gov1 | 0:a761fba7f8a8 | 22 | int endPacket(); |
gov1 | 0:a761fba7f8a8 | 23 | |
gov1 | 0:a761fba7f8a8 | 24 | int parsePacket(int size = 0); |
gov1 | 0:a761fba7f8a8 | 25 | int packetRssi(); |
gov1 | 0:a761fba7f8a8 | 26 | float packetSnr(); |
gov1 | 0:a761fba7f8a8 | 27 | |
gov1 | 0:a761fba7f8a8 | 28 | void onReceive(void(*callback)(int)); |
gov1 | 0:a761fba7f8a8 | 29 | |
gov1 | 0:a761fba7f8a8 | 30 | void receive(int size = 0); |
gov1 | 0:a761fba7f8a8 | 31 | void idle(); |
gov1 | 0:a761fba7f8a8 | 32 | void sleep(); |
gov1 | 0:a761fba7f8a8 | 33 | |
gov1 | 0:a761fba7f8a8 | 34 | void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN); |
gov1 | 0:a761fba7f8a8 | 35 | void setFrequency(long frequency); |
gov1 | 0:a761fba7f8a8 | 36 | void setSpreadingFactor(int sf); |
gov1 | 0:a761fba7f8a8 | 37 | void setSignalBandwidth(long sbw); |
gov1 | 0:a761fba7f8a8 | 38 | void setCodingRate4(int denominator); |
gov1 | 0:a761fba7f8a8 | 39 | void setPreambleLength(long length); |
gov1 | 0:a761fba7f8a8 | 40 | void setSyncWord(int sw); |
gov1 | 0:a761fba7f8a8 | 41 | void enableCrc(); |
gov1 | 0:a761fba7f8a8 | 42 | void disableCrc(); |
gov1 | 0:a761fba7f8a8 | 43 | |
gov1 | 0:a761fba7f8a8 | 44 | // deprecated |
gov1 | 0:a761fba7f8a8 | 45 | void crc() { |
gov1 | 0:a761fba7f8a8 | 46 | enableCrc(); |
gov1 | 0:a761fba7f8a8 | 47 | } |
gov1 | 0:a761fba7f8a8 | 48 | void noCrc() { |
gov1 | 0:a761fba7f8a8 | 49 | disableCrc(); |
gov1 | 0:a761fba7f8a8 | 50 | } |
gov1 | 0:a761fba7f8a8 | 51 | |
gov1 | 0:a761fba7f8a8 | 52 | uint8_t random(); |
gov1 | 0:a761fba7f8a8 | 53 | |
gov1 | 0:a761fba7f8a8 | 54 | void dumpRegisters(Stream& out); |
gov1 | 0:a761fba7f8a8 | 55 | |
gov1 | 0:a761fba7f8a8 | 56 | //protected: |
gov1 | 0:a761fba7f8a8 | 57 | // from Print |
gov1 | 0:a761fba7f8a8 | 58 | virtual int _putc(int value); |
gov1 | 0:a761fba7f8a8 | 59 | virtual int _getc(); |
gov1 | 0:a761fba7f8a8 | 60 | |
gov1 | 0:a761fba7f8a8 | 61 | int available(); |
gov1 | 0:a761fba7f8a8 | 62 | int peek(); |
gov1 | 0:a761fba7f8a8 | 63 | |
gov1 | 0:a761fba7f8a8 | 64 | private: |
gov1 | 0:a761fba7f8a8 | 65 | void explicitHeaderMode(); |
gov1 | 0:a761fba7f8a8 | 66 | void implicitHeaderMode(); |
gov1 | 0:a761fba7f8a8 | 67 | |
gov1 | 0:a761fba7f8a8 | 68 | void handleDio0Rise(); |
gov1 | 0:a761fba7f8a8 | 69 | |
gov1 | 0:a761fba7f8a8 | 70 | uint8_t readRegister(uint8_t address); |
gov1 | 0:a761fba7f8a8 | 71 | void writeRegister(uint8_t address, uint8_t value); |
gov1 | 0:a761fba7f8a8 | 72 | uint8_t singleTransfer(uint8_t address, uint8_t value); |
gov1 | 0:a761fba7f8a8 | 73 | |
gov1 | 0:a761fba7f8a8 | 74 | static void onDio0Rise(); |
gov1 | 0:a761fba7f8a8 | 75 | |
gov1 | 0:a761fba7f8a8 | 76 | private: |
gov1 | 0:a761fba7f8a8 | 77 | SPI &spi; |
gov1 | 0:a761fba7f8a8 | 78 | DigitalOut _ss; |
gov1 | 0:a761fba7f8a8 | 79 | DigitalOut _reset; |
gov1 | 0:a761fba7f8a8 | 80 | InterruptIn _dio0; |
gov1 | 0:a761fba7f8a8 | 81 | int _frequency; |
gov1 | 0:a761fba7f8a8 | 82 | int _packetIndex; |
gov1 | 0:a761fba7f8a8 | 83 | int _implicitHeaderMode; |
gov1 | 0:a761fba7f8a8 | 84 | void (*_onReceive)(int); |
gov1 | 0:a761fba7f8a8 | 85 | }; |
gov1 | 0:a761fba7f8a8 | 86 | |
gov1 | 0:a761fba7f8a8 | 87 | extern LoRaClass LoRa; |
gov1 | 0:a761fba7f8a8 | 88 | |
gov1 | 0:a761fba7f8a8 | 89 | #endif |