123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561 |
- #define PAYLOAD_LENGTH 0x40
- #define MAX_PAYLOAD_LENGTH 0x80
- #define NUM_HOPS 3
- #define RSSI_LIMIT 35
- #define RSSI_WAIT 6
- #define EVENT_WAIT 15000
- #define DONE_WAIT 1950
- #define SPISPEED 8000000
- struct vector {
-
- uint32_t upFreq;
- uint16_t upBW;
- uint8_t upLo;
- uint8_t upHi;
-
- uint32_t dwnFreq;
- uint16_t dwnBW;
- uint8_t dwnLo;
- uint8_t dwnHi;
- };
- #ifdef EU863_870
- vector freqs [] =
- {
- { 868100000, 125, 7, 12, 868100000, 125, 7, 12},
- { 868300000, 125, 7, 12, 868300000, 125, 7, 12},
- { 868500000, 125, 7, 12, 868500000, 125, 7, 12},
- { 867100000, 125, 7, 12, 867100000, 125, 7, 12},
- { 867300000, 125, 7, 12, 867300000, 125, 7, 12},
- { 867500000, 125, 7, 12, 867500000, 125, 7, 12},
- { 867700000, 125, 7, 12, 867700000, 125, 7, 12},
- { 867900000, 125, 7, 12, 867900000, 125, 7, 12},
- { 868800000, 125, 7, 12, 868800000, 125, 7, 12},
- { 0, 0 , 0, 0, 869525000, 125, 9, 9}
-
- };
- #elif defined(EU433)
- vector freqs [] = {
- { 433175000, 125, 7, 12, 433175000, 125, 7, 12},
- { 433375000, 125, 7, 12, 433375000, 125, 7, 12},
- { 433575000, 125, 7, 12, 433575000, 125, 7, 12},
- { 433775000, 125, 7, 12, 433775000, 125, 7, 12},
- { 433975000, 125, 7, 12, 433975000, 125, 7, 12},
- { 434175000, 125, 7, 12, 434175000, 125, 7, 12},
- { 434375000, 125, 7, 12, 434375000, 125, 7, 12},
- { 434575000, 125, 7, 12, 434575000, 125, 7, 12},
- { 434775000, 125, 7, 12, 434775000, 125, 7, 12}
- };
- #elif defined(US902_928)
- vector freqs [] = {
-
- { 903900000, 125, 7, 10, 923300000, 500, 7, 12},
- { 904100000, 125, 7, 10, 923900000, 500, 7, 12},
- { 904300000, 125, 7, 10, 924500000, 500, 7, 12},
- { 904500000, 125, 7, 10, 925100000, 500, 7, 12},
- { 904700000, 125, 7, 10, 925700000, 500, 7, 12},
- { 904900000, 125, 7, 10, 926300000, 500, 7, 12},
- { 905100000, 125, 7, 10, 926900000, 500, 7, 12},
- { 905300000, 125, 7, 10, 927500000, 500, 7, 12},
- { 904600000, 500, 8, 8, 0 , 0, 0, 00},
- };
- #elif defined(AU925_928)
- vector freqs [] = {
- { 916800000, 125, 7, 10, 916800000, 125, 7, 12},
- { 917000000, 125, 7, 10, 917000000, 125, 7, 12},
- { 917200000, 125, 7, 10, 917200000, 125, 7, 12},
- { 917400000, 125, 7, 10, 917400000, 125, 7, 12},
- { 917600000, 125, 7, 10, 917600000, 125, 7, 12},
- { 917800000, 125, 7, 10, 917800000, 125, 7, 12},
- { 918000000, 125, 7, 10, 918000000, 125, 7, 12},
- { 918200000, 125, 7, 10, 918200000, 125, 7, 12} ,
- { 917500000, 500, 8, 8, 0, 0, 0, 0}
- };
- #elif defined(CN470_510)
- vector freqs [] = {
- { 486300000, 125, 7, 12, 486300000, 125, 7, 12},
- { 486500000, 125, 7, 12, 486500000, 125, 7, 12},
- { 486700000, 125, 7, 12, 486700000, 125, 7, 12},
- { 486900000, 125, 7, 12, 486900000, 125, 7, 12},
- { 487100000, 125, 7, 12, 487100000, 125, 7, 12},
- { 487300000, 125, 7, 12, 487300000, 125, 7, 12},
- { 487500000, 125, 7, 12, 487500000, 125, 7, 12},
- { 487700000, 125, 7, 12, 487700000, 125, 7, 12}
- };
- #else
- int freqs [] = {
-
- #error "Sorry, but your frequency plan is not supported"
- };
- #endif
- enum sf_t { SF6=6, SF7, SF8, SF9, SF10, SF11, SF12 };
- enum state_t { S_INIT=0, S_SCAN, S_CAD, S_RX, S_TX, S_TXDONE};
- volatile state_t _state=S_INIT;
- volatile uint8_t _event=0;
- uint8_t _rssi;
- bool _cad= (bool) _CAD;
- bool _hop= (bool) false;
- unsigned long nowTime=0;
- unsigned long msgTime=0;
- unsigned long hopTime=0;
- unsigned long detTime=0;
- #if _PIN_OUT==1
- struct pins {
- uint8_t dio0=15;
- uint8_t dio1=15;
- uint8_t dio2=15;
- uint8_t ss=16;
- uint8_t rst=0;
-
-
-
- } pins;
- #elif _PIN_OUT==2
- struct pins {
- uint8_t dio0=5;
- uint8_t dio1=4;
- uint8_t dio2=0;
- uint8_t ss=15;
- uint8_t rst=0;
- } pins;
- #elif _PIN_OUT==3
- struct pins {
- uint8_t dio0=26;
- uint8_t dio1=26;
- uint8_t dio2=26;
- uint8_t ss=18;
- uint8_t rst=14;
- } pins;
- #elif _PIN_OUT==4
- struct pins {
- uint8_t dio0=26;
- uint8_t dio1=33;
- uint8_t dio2=32;
- uint8_t ss=18;
- uint8_t rst=14;
- } pins;
- #define SCK 5
- #define MISO 19
- #define MOSI 27
- #define RST 14
- #define SS 18
- #define GPS_RX 15
- #define GPS_TX 12
- #elif _PIN_OUT==5
- struct pins {
- uint8_t dio0=26;
- uint8_t dio1=33;
- uint8_t dio2=32;
- uint8_t ss=18;
- uint8_t rst=14;
- } pins;
- #define SCK 5
- #define MISO 19
- #define MOSI 27
- #define RST 14
- #define SS 18
- #else
- #error "Pin Definitions _PIN_OUT must be defined in loraModem.h"
- #endif
- struct stat_t {
- unsigned long tmst;
- unsigned long node;
- uint8_t ch;
- uint8_t sf;
- #if RSSI==1
- int8_t rssi;
- #endif
- int8_t prssi;
- #if _LOCALSERVER==1
- uint8_t data[23];
- uint8_t datal;
- #endif
- } stat_t;
- #if _STATISTICS >= 1
- struct stat_c {
- unsigned long msg_ok;
- unsigned long msg_ttl;
- unsigned long msg_down;
- #if _STATISTICS >= 2
- unsigned long sf7;
- unsigned long sf8;
- unsigned long sf9;
- unsigned long sf10;
- unsigned long sf11;
- unsigned long sf12;
-
-
-
-
- #if _STATISTICS >=3
- unsigned long msg_ok_0, msg_ok_1, msg_ok_2;
- unsigned long msg_ttl_0, msg_ttl_1, msg_ttl_2;
- unsigned long msg_down_0, msg_down_1, msg_down_2;
- unsigned long sf7_0, sf7_1, sf7_2;
- unsigned long sf8_0, sf8_1, sf8_2;
- unsigned long sf9_0, sf9_1, sf9_2;
- unsigned long sf10_0, sf10_1, sf10_2;
- unsigned long sf11_0, sf11_1, sf11_2;
- unsigned long sf12_0, sf12_1, sf12_2;
- #endif
-
- uint16_t boots;
- uint16_t resets;
- #endif
- } stat_c;
- struct stat_c statc;
- struct stat_t statr[MAX_STAT];
- #else
- struct stat_t statr[1];
- #endif
- uint8_t payLoad[128];
- struct LoraBuffer {
- uint8_t * payLoad;
- uint8_t payLength;
- uint32_t tmst;
- uint8_t sfTx;
- uint8_t powe;
- uint32_t fff;
- uint8_t crc;
- uint8_t iiq;
- } LoraDown;
- struct LoraUp {
- uint8_t payLoad[128];
- uint8_t payLength;
- int prssi;
- long snr;
- int rssicorr;
- uint8_t sf;
- } LoraUp;
- #define REG_FIFO 0x00
- #define REG_OPMODE 0x01
- #define REG_FRF_MSB 0x06
- #define REG_FRF_MID 0x07
- #define REG_FRF_LSB 0x08
- #define REG_PAC 0x09
- #define REG_PARAMP 0x0A
- #define REG_LNA 0x0C
- #define REG_FIFO_ADDR_PTR 0x0D
- #define REG_FIFO_TX_BASE_AD 0x0E
- #define REG_FIFO_RX_BASE_AD 0x0F
- #define REG_FIFO_RX_CURRENT_ADDR 0x10
- #define REG_IRQ_FLAGS_MASK 0x11
- #define REG_IRQ_FLAGS 0x12
- #define REG_RX_NB_BYTES 0x13
- #define REG_PKT_SNR_VALUE 0x19
- #define REG_PKT_RSSI 0x1A
- #define REG_RSSI 0x1B
- #define REG_HOP_CHANNEL 0x1C
- #define REG_MODEM_CONFIG1 0x1D
- #define REG_MODEM_CONFIG2 0x1E
- #define REG_SYMB_TIMEOUT_LSB 0x1F
- #define REG_PAYLOAD_LENGTH 0x22
- #define REG_MAX_PAYLOAD_LENGTH 0x23
- #define REG_HOP_PERIOD 0x24
- #define REG_MODEM_CONFIG3 0x26
- #define REG_RSSI_WIDEBAND 0x2C
- #define REG_INVERTIQ 0x33
- #define REG_DET_TRESH 0x37
- #define REG_SYNC_WORD 0x39
- #define REG_TEMP 0x3C
- #define REG_DIO_MAPPING_1 0x40
- #define REG_DIO_MAPPING_2 0x41
- #define REG_VERSION 0x42
- #define REG_PADAC 0x5A
- #define REG_PADAC_SX1272 0x5A
- #define REG_PADAC_SX1276 0x4D
- #define SX72_MODE_SLEEP 0x80
- #define SX72_MODE_STANDBY 0x81
- #define SX72_MODE_FSTX 0x82
- #define SX72_MODE_TX 0x83
- #define SX72_MODE_RX_CONTINUOS 0x85
- #define OPMODE_LORA 0x80
- #define OPMODE_MASK 0x07
- #define OPMODE_SLEEP 0x00
- #define OPMODE_STANDBY 0x01
- #define OPMODE_FSTX 0x02
- #define OPMODE_TX 0x03
- #define OPMODE_FSRX 0x04
- #define OPMODE_RX 0x05
- #define OPMODE_RX_SINGLE 0x06
- #define OPMODE_CAD 0x07
- #define LNA_MAX_GAIN 0x23
- #define LNA_OFF_GAIN 0x00
- #define LNA_LOW_GAIN 0x20
- #define REG1 0x0A
- #define REG2 0x84
- #define SX1276_MC1_BW_125 0x70
- #define SX1276_MC1_BW_250 0x80
- #define SX1276_MC1_BW_500 0x90
- #define SX1276_MC1_CR_4_5 0x02
- #define SX1276_MC1_CR_4_6 0x04
- #define SX1276_MC1_CR_4_7 0x06
- #define SX1276_MC1_CR_4_8 0x08
- #define SX1276_MC1_IMPLICIT_HEADER_MODE_ON 0x01
- #define SX72_MC1_LOW_DATA_RATE_OPTIMIZE 0x01
- #define SX72_MC2_FSK 0x00
- #define SX72_MC2_SF7 0x70
- #define SX72_MC2_SF8 0x80
- #define SX72_MC2_SF9 0x90
- #define SX72_MC2_SF10 0xA0
- #define SX72_MC2_SF11 0xB0
- #define SX72_MC2_SF12 0xC0
- #define SX1276_MC3_LOW_DATA_RATE_OPTIMIZE 0x08
- #define SX1276_MC3_AGCAUTO 0x04
- #define FRF_MSB 0xD9
- #define FRF_MID 0x06
- #define FRF_LSB 0x66
- #define MAP_DIO0_LORA_RXDONE 0x00
- #define MAP_DIO0_LORA_TXDONE 0x40
- #define MAP_DIO0_LORA_CADDONE 0x80
- #define MAP_DIO0_LORA_NOP 0xC0
- #define MAP_DIO1_LORA_RXTOUT 0x00
- #define MAP_DIO1_LORA_FCC 0x10
- #define MAP_DIO1_LORA_CADDETECT 0x20
- #define MAP_DIO1_LORA_NOP 0x30
- #define MAP_DIO2_LORA_FCC0 0x00
- #define MAP_DIO2_LORA_FCC1 0x04
- #define MAP_DIO2_LORA_FCC2 0x08
- #define MAP_DIO2_LORA_NOP 0x0C
- #define MAP_DIO3_LORA_CADDONE 0x00
- #define MAP_DIO3_LORA_HEADER 0x01
- #define MAP_DIO3_LORA_CRC 0x02
- #define MAP_DIO3_LORA_NOP 0x03
- #define MAP_DIO0_FSK_READY 0x00
- #define MAP_DIO1_FSK_NOP 0x30
- #define MAP_DIO2_FSK_TXNOP 0x04
- #define MAP_DIO2_FSK_TIMEOUT 0x08
- #define IRQ_LORA_RXTOUT_MASK 0x80
- #define IRQ_LORA_RXDONE_MASK 0x40
- #define IRQ_LORA_CRCERR_MASK 0x20
- #define IRQ_LORA_HEADER_MASK 0x10
- #define IRQ_LORA_TXDONE_MASK 0x08
- #define IRQ_LORA_CDDONE_MASK 0x04
- #define IRQ_LORA_FHSSCH_MASK 0x02
- #define IRQ_LORA_CDDETD_MASK 0x01
- #define PROTOCOL_VERSION 0x01
- #define PKT_PUSH_DATA 0x00
- #define PKT_PUSH_ACK 0x01
- #define PKT_PULL_DATA 0x02
- #define PKT_PULL_RESP 0x03
- #define PKT_PULL_ACK 0x04
- #define PKT_TX_ACK 0x05
- #define MGT_RESET 0x15
- #define MGT_SET_SF 0x16
- #define MGT_SET_FREQ 0x17
|