This version is the one to be submitted as a part the Hackster.io contest, Unleash Invisible Intelligence

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?

UserRevisionLine numberNew 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