Lora Transport Abstraction Layer for sx1272

Dependents:   lora-transceiver

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LoraTransport.h Source File

LoraTransport.h

00001 #ifndef __LORA_TRANSPORT__
00002 #define __LORA_TRANSPORT__
00003 
00004 #include "sx1272-hal.h"
00005 
00006 #define RF_FREQUENCY                                868300000 // Hz
00007 #define TX_OUTPUT_POWER                             20        // 14 dBm
00008 #define RX_TIMEOUT_VALUE                            5000000   // in us
00009 #define TX_TIMEOUT_VALUE                            5000000   // in us
00010 #define LORA_BANDWIDTH                              0         // [0: 125 kHz, 1: 250 kHz, 2: 500 kHz, 3: Reserved]
00011 #define LORA_SPREADING_FACTOR                       9         // [SF7..SF12]
00012 #define LORA_CODINGRATE                             1         // [1: 4/5, 2: 4/6, 3: 4/7,  4: 4/8]
00013 #define LORA_PREAMBLE_LENGTH                        8         // Same for Tx and Rx
00014 #define LORA_SYMBOL_TIMEOUT                         5         // Symbols
00015 #define LORA_FIX_LENGTH_PAYLOAD_ON                  false
00016 #define LORA_FHSS_ENABLED                           false
00017 #define LORA_NB_SYMB_HOP                            4
00018 #define LORA_IQ_INVERSION_ON                        false
00019 #define LORA_CRC_ENABLED                            true
00020 
00021 #define MAX_PAYLOAD_SIZE 251
00022 
00023 namespace LoraTransport {
00024 
00025     struct Packet {
00026         uint16_t from_addr;
00027         uint16_t to_addr;
00028         uint8_t  packet_number;
00029         uint8_t  payload[MAX_PAYLOAD_SIZE];
00030         uint8_t  payload_size;
00031     };
00032 
00033     struct Ack {
00034         uint16_t from_addr;
00035         uint16_t to_addr;
00036         uint8_t  packet_number;
00037         uint8_t  success;
00038     };
00039 
00040     enum State {
00041         IDLE,                   //0
00042         // TX cycle
00043         CAD_RUNNING,            //1
00044         CAD_POSITIVE,           //2
00045         CAD_NEGATIVE,           //3
00046         TX_MSG,                 //4
00047         TX_MSG_TIMEOUT,         //5
00048         TX_MSG_DONE,            //6
00049         RX_ACK,                 //7
00050         RX_ACK_TIMEOUT,         //8
00051         RX_ACK_ERROR,           //9
00052         RX_ACK_DONE,            //10
00053         TX_ERROR,               //11
00054         TX_SUCCESS,             //12
00055         // RX cycle
00056         RX_MSG,                 //13
00057         RX_MSG_TIMEOUT,         //14
00058         RX_MSG_ERROR,           //15
00059         RX_MSG_DONE,            //16
00060         TX_ERROR_ACK,           //17
00061         TX_ERROR_ACK_TIMEOUT,   //18
00062         TX_ERROR_ACK_DONE,      //19
00063         TX_SUCCESS_ACK,         //20
00064         TX_SUCCESS_ACK_TIMEOUT, //21
00065         TX_SUCCESS_ACK_DONE,    //22
00066         RX_ERROR,               //23
00067         RX_SUCCESS              //24
00068 
00069     };
00070 
00071     void init();
00072     void send(uint16_t addr, uint8_t *ptr, uint8_t len, uint32_t timeout = 20000000 /*µs -> 20s*/);
00073     void recv(uint32_t timeout = 20000000 /*µs -> 20s*/);
00074     bool done();
00075     bool success();
00076 
00077     void setAddress(uint16_t addr);
00078     State getState();
00079     State getLastErrorState();
00080     Packet& getPacket();
00081     int16_t getRSSI();
00082     int8_t getSNR();
00083 
00084 };
00085 
00086 #endif // __LORA_TRANSPORT__