Port of aduino LoRa library from https://github.com/sandeepmistry/arduino-LoRa

Dependents:   WeatherStationRemote

LoRa.h

Committer:
fadhlika
Date:
2018-01-24
Revision:
1:8b16ccb7ea3f
Parent:
0:c28964675044

File content as of revision 1:8b16ccb7ea3f:

#ifndef LORA_H
#define LORA_H

#include "mbed.h"

#define LORA_DEFAULT_SS_PIN    PA_4
#define LORA_DEFAULT_RESET_PIN PA_2
#define LORA_DEFAULT_DIO0_PIN  PA_3

#define PA_OUTPUT_RFO_PIN      0
#define PA_OUTPUT_PA_BOOST_PIN 1

class LoRaClass: public Stream
{
public:
    LoRaClass();

    int begin(long frequency);
    void end();

    int beginPacket(int implicitHeader = false);
    int endPacket();

    int parsePacket(int size = 0);
    int packetRssi();
    float packetSnr();

    void onReceive(void(*callback)(int));

    void receive(int size = 0);
    void idle();
    void sleep();

    void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN);
    void setFrequency(long frequency);
    void setSpreadingFactor(int sf);
    void setSignalBandwidth(long sbw);
    void setCodingRate4(int denominator);
    void setPreambleLength(long length);
    void setSyncWord(int sw);
    void enableCrc();
    void disableCrc();

    // deprecated
    void crc() {
        enableCrc();
    }
    void noCrc() {
        disableCrc();
    }

    uint8_t random();

    void dumpRegisters(Stream& out);

protected:
    // from Print
    virtual int _putc(int value);
    virtual int _getc();

    int available();
    int peek();

private:
    void explicitHeaderMode();
    void implicitHeaderMode();

    void handleDio0Rise();

    uint8_t readRegister(uint8_t address);
    void writeRegister(uint8_t address, uint8_t value);
    uint8_t singleTransfer(uint8_t address, uint8_t value);

    static void onDio0Rise();

private:
    SPI &spi;
    DigitalOut _ss;
    DigitalOut _reset;
    InterruptIn _dio0;
    int _frequency;
    int _packetIndex;
    int _implicitHeaderMode;
    void (*_onReceive)(int);
};

extern LoRaClass LoRa;

#endif