Lora Transport Abstraction Layer for sx1272
Embed:
(wiki syntax)
Show/hide line numbers
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__
Generated on Thu Jul 14 2022 14:48:44 by 1.7.2