LMiC adapted to work with SX1272MB2xAS LoRa shield.
Fork of LMiC by
Diff: lorabase.h
- Revision:
- 1:d3b7bde3995c
- Parent:
- 0:62d1edcc13d1
- Child:
- 2:974cafbfb159
--- a/lorabase.h Thu Jan 22 12:50:49 2015 +0000 +++ b/lorabase.h Tue Mar 31 13:36:56 2015 +0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014 IBM Corporation. + * Copyright (c) 2014-2015 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -54,7 +54,7 @@ enum { BCN_GUARD_us = 3000000 }; enum { BCN_SLOT_SPAN_us = 30000 }; -#if CFG_eu868 // ============================================== +#if defined(CFG_eu868) // ============================================== enum _dr_eu868_t { DR_SF12=0, DR_SF11, DR_SF10, DR_SF9, DR_SF8, DR_SF7, DR_SF7B, DR_FSK, DR_NONE }; enum { DR_DFLTMIN = DR_SF7 }; @@ -84,17 +84,30 @@ enum { DR_PING = SF9 }; // default ping DR enum { CHNL_DNW2 = 5 }; enum { FREQ_DNW2 = EU868_F6 }; -enum { DR_DNW2 = DR_SF9 }; +enum { DR_DNW2 = DR_SF9 }; // changed from LoRaWAN specification. + // Default value is DR_SF12 enum { CHNL_BCN = 5 }; enum { FREQ_BCN = EU868_F6 }; enum { DR_BCN = DR_SF9 }; -enum { AIRTIME_BCN = 185344 }; // micros +enum { AIRTIME_BCN = 144384 }; // micros -#elif CFG_us915 // ========================================= +enum { + // Beacon frame format EU SF9 + OFF_BCN_NETID = 0, + OFF_BCN_TIME = 3, + OFF_BCN_CRC1 = 7, + OFF_BCN_INFO = 8, + OFF_BCN_LAT = 9, + OFF_BCN_LON = 12, + OFF_BCN_CRC2 = 15, + LEN_BCN = 17 +}; + +#elif defined(CFG_us915) // ========================================= enum _dr_us915_t { DR_SF10=0, DR_SF9, DR_SF8, DR_SF7, DR_SF8C, DR_NONE, - // Devices behind a router: - DR_SF12CR=8, DR_SF11CR, DR_SF10CR, DR_SF9CR, DR_SF8CR, DR_SF7CR }; + // Devices behind a router: + DR_SF12CR=8, DR_SF11CR, DR_SF10CR, DR_SF9CR, DR_SF8CR, DR_SF7CR }; enum { DR_DFLTMIN = DR_SF8C }; enum { DR_PAGE = DR_PAGE_US915 }; @@ -109,33 +122,31 @@ enum { US915_FREQ_MIN = 902000000, US915_FREQ_MAX = 928000000 }; -enum { CHNL_PING = 2 }; +enum { CHNL_PING = 0 }; // used only for default init of state (follows beacon - rotating) enum { FREQ_PING = US915_500kHz_DNFBASE + CHNL_PING*US915_500kHz_DNFSTEP }; // default ping freq enum { DR_PING = DR_SF10CR }; // default ping DR -enum { CHNL_DNW2 = 1 }; +enum { CHNL_DNW2 = 0 }; enum { FREQ_DNW2 = US915_500kHz_DNFBASE + CHNL_DNW2*US915_500kHz_DNFSTEP }; -enum { DR_DNW2 = DR_SF10CR }; -enum { CHNL_BCN = 0 }; -enum { FREQ_BCN = US915_500kHz_DNFBASE + CHNL_BCN*US915_500kHz_DNFSTEP }; +enum { DR_DNW2 = DR_SF12CR }; +enum { CHNL_BCN = 0 }; // used only for default init of state (rotating beacon scheme) enum { DR_BCN = DR_SF10CR }; -enum { AIRTIME_BCN = 82432 }; // micros +enum { AIRTIME_BCN = 72192 }; // micros + +enum { + // Beacon frame format US SF10 + OFF_BCN_NETID = 0, + OFF_BCN_TIME = 3, + OFF_BCN_CRC1 = 7, + OFF_BCN_INFO = 9, + OFF_BCN_LAT = 10, + OFF_BCN_LON = 13, + OFF_BCN_RFU1 = 16, + OFF_BCN_CRC2 = 17, + LEN_BCN = 19 +}; #endif // =================================================== - -enum { - // Beacon frame format - OFF_BCN_RFU = 0, - OFF_BCN_NETID = 4, - OFF_BCN_CMAP = 7, - OFF_BCN_TIME = 9, - OFF_BCN_CRC1 = 13, - OFF_BCN_INFO = 15, - OFF_BCN_LAT = 16, - OFF_BCN_LON = 19, - OFF_BCN_CRC2 = 22, - LEN_BCN = 24 -}; enum { // Join Request frame format OFF_JR_HDR = 0, @@ -152,7 +163,9 @@ OFF_JA_NETID = 4, OFF_JA_DEVADDR = 7, OFF_JA_RFU = 11, - OFF_CFLIST = 14, + OFF_JA_DLSET = 11, + OFF_JA_RXDLY = 12, + OFF_CFLIST = 13, LEN_JA = 17, LEN_JAEXT = 17+16 }; @@ -191,10 +204,14 @@ FCT_ADREN = 0x80, FCT_ADRARQ = 0x40, FCT_ACK = 0x20, - FCT_MORE = 0x10, + FCT_MORE = 0x10, // also in DN direction: Class B indicator FCT_OPTLEN = 0x0F, }; enum { + // In UP direction: signals class B enabled + FCT_CLASSB = FCT_MORE +}; +enum { NWKID_MASK = (int)0xFE000000, NWKID_BITS = 7 }; @@ -225,10 +242,13 @@ MCMD_SNCH_REQ = 0x07, // set new channel : u1:chidx, u3:freq, u1:DRrange // Class B MCMD_PING_SET = 0x11, // set ping freq : u3: freq - MCMD_BCNI_ANS = 0x12, // next beacon start : u2: delay(10ms), u1:channel + MCMD_BCNI_ANS = 0x12, // next beacon start : u2: delay(in TUNIT millis), u1:channel }; enum { + MCMD_BCNI_TUNIT = 30 // time unit of delay value in millis +}; +enum { MCMD_LADR_ANS_RFU = 0xF8, // RFU bits MCMD_LADR_ANS_POWACK = 0x04, // 0=not supported power level MCMD_LADR_ANS_DRACK = 0x02, // 0=unknown data rate @@ -272,7 +292,7 @@ MCMD_LADR_POW_MASK = 0x0F, MCMD_LADR_DR_SHIFT = 4, MCMD_LADR_POW_SHIFT = 0, -#if CFG_eu868 +#if defined(CFG_eu868) MCMD_LADR_SF12 = DR_SF12<<4, MCMD_LADR_SF11 = DR_SF11<<4, MCMD_LADR_SF10 = DR_SF10<<4, @@ -288,7 +308,7 @@ MCMD_LADR_8dBm = 3, MCMD_LADR_5dBm = 4, MCMD_LADR_2dBm = 5, -#elif CFG_us915 +#elif defined(CFG_us915) MCMD_LADR_SF10 = DR_SF10<<4, MCMD_LADR_SF9 = DR_SF9 <<4, MCMD_LADR_SF8 = DR_SF8 <<4, @@ -318,15 +338,8 @@ // Device address typedef u4_t devaddr_t; - // RX quality (device) enum { RSSI_OFF=64, SNR_SCALEUP=4 }; -struct rxqu_t { - s1_t rssi; // offset by RSSI_OFF, max physical RSSI range -198..+63 - s1_t snr; // scaled by SNR_SCALEUP, max physical SNR range -32..+31.75 -}; -TYPEDEF_xref2rxqu_t; - inline sf_t getSf (rps_t params) { return (sf_t)(params & 0x7); } inline rps_t setSf (rps_t params, sf_t sf) { return (rps_t)((params & ~0x7) | sf); }