Demo HCI Implementation for WiMOD-LR Devices  V2.0.3
WiMOD_SAP_LORAWAN_ProLink.h
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
31 //------------------------------------------------------------------------------
32 
33 
34 #ifndef ARDUINO_SAP_WIMOD_SAP_LORAWAN_PROLINK_H_
35 #define ARDUINO_SAP_WIMOD_SAP_LORAWAN_PROLINK_H_
36 
37 /*
38  * THIS IS AN EXAMPLE IMPLEMENTATION ACCORDING THE THE HCI SPEC: V2.0
39  * FOR FIRMWARE: ProLink_
40  *
41  * SEE FILE: ProLink_LoRaWAN_EndNode_Modem_HCI_Spec.pdf (version 2.0)
42  * for detailed information
43  *
44  */
45 
46 
47 //------------------------------------------------------------------------------
48 //
49 // Section Includes Files
50 //
51 //------------------------------------------------------------------------------
52 
53 #include "WiMOD_SAP_LORAWAN.h"
55 
56 /*
57  * C++11 supports a better way for function pointers / function objects
58  * But C++11 mode is not supported by all platforms.
59  */
60 #ifdef WIMOD_USE_CPP11
61 #include <functional>
62 #endif
63 //------------------------------------------------------------------------------
64 //
65 // Section defines
66 //
67 //------------------------------------------------------------------------------
68 
73 {
81  ProLink_LoRaWAN_Region_proprietary_WW2G4,
83 
84 
85 
86 //-----------------------------------------------------------------------------
87 //
88 // types for callback functions
89 //
90 //-----------------------------------------------------------------------------
91 
92 // C++11 check
93 #ifdef WIMOD_USE_CPP11
94 /* C++11 function callback definitions */
95 
97  typedef std::function<void (void)> TResetDevNonceIndicationCallback;
98 
100  typedef std::function<void (void)> TLinkDisconnectIndicationCallback;
101 
103  typedef std::function<void (TWiMODLR_HCIMessage& rxMsg)> TNwkDeviceTimeAnsIndicationCallback;
104 
106  typedef std::function<void (TWiMODLR_HCIMessage& rxMsg)> TMCastDataIndicationCallback;
107 
109  typedef std::function<void (TWiMODLR_HCIMessage& rxMsg)> TMCastInvalidDataIndicationCallback;
110 
111 #else
112  /* pre C++11 function callback definitions */
113 
115  typedef void (*TResetDevNonceIndicationCallback)(void);
116 
118  typedef void (*TLinkDisconnectIndicationCallback)(void);
119 
122 
125 
128 
129 #endif
130 
131 
132 //------------------------------------------------------------------------------
133 //
134 // Section class
135 //
136 //------------------------------------------------------------------------------
137 
142 public:
143 
144  WiMOD_SAP_LoRaWAN_ProLink(TWiMODLRHCI* hci, UINT8* buffer, UINT16 bufferSize);
145  virtual ~WiMOD_SAP_LoRaWAN_ProLink(void);
146 
147 
148  virtual void setRegion(TProLinkLoRaWANregion regionalSetting);
149 
150  TWiMODLRResultCodes SetDeviceNonce(const UINT16 devNonce, UINT8* statusRsp);
151  TWiMODLRResultCodes GetDeviceNonce(UINT16* devNonce, UINT8* statusRsp);
152 
153  TWiMODLRResultCodes SetJoinNonce(const UINT16 joinNonce, UINT8* statusRsp);
154  TWiMODLRResultCodes GetJoinNonce(UINT16* joinNonce, UINT8* statusRsp);
155 
157 
160 
161 
167 
168 
169 // TWiMODLRResultCodes GetLinkAdrReqConfig(TWiMODLORAWAN_LinkAdrReqConfig* linkAdrReqCfg, UINT8* statusRsp);
170 // TWiMODLRResultCodes SetLinkAdrReqConfig(TWiMODLORAWAN_LinkAdrReqConfig& linkAdrReqCfg, UINT8* statusRsp);
171 
172  TWiMODLRResultCodes SetMulticastConfig(TWiMODLORAWAN_McastConfig& mcastCfg, UINT8* statusRsp);
173  TWiMODLRResultCodes GetMulticastConfig(TWiMODLORAWAN_McastConfig* mcastCfg, UINT8* statusRsp);
174  TWiMODLRResultCodes RemoveMulticastConfig(const UINT8 mcastIndex, UINT8* statusRsp);
175 
178 
179 
181  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_McastData* mcastData);
182  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_McastNoData* mcastErrData);
183 
184 // bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_JoinNwkTxIndData* indicationData) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, indicationData); };
185  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_RX_Data* loraWanRxData) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, loraWanRxData); };
186 // bool convert(TWiMODLR_HCIMessage& rxMsg, TWiMODLORAWAN_SendDataTxInd_Data* sendIndData) {return WiMOD_SAP_LoRaWAN::convert(rxMsg, indicationData); };
187  bool convert(TWiMODLR_HCIMessage& rxMsg, TWiMODLORAWAN_TxIndData* sendIndData) {return WiMOD_SAP_LoRaWAN::convert(rxMsg, sendIndData); };
188  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_RX_MacCmdData* loraWanMacCmdData) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, loraWanMacCmdData); };
189  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_RX_JoinedNwkData* joinedNwkData) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, joinedNwkData); };
190  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_RX_ACK_Data* ackData) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, ackData); };
191  bool convert(TWiMODLR_HCIMessage& RxMsg, TWiMODLORAWAN_NoData_Data* info) {return WiMOD_SAP_LoRaWAN::convert(RxMsg, info); };
192 
193 
194 
195  void DispatchProLinkLoRaWANMessage(TWiMODLR_HCIMessage& rxMsg);
196 protected:
198  TResetDevNonceIndicationCallback ResetDevNonceCallback;
199  TLinkDisconnectIndicationCallback LinkDisconnectCallback;
200  TNwkDeviceTimeAnsIndicationCallback DeviceTimeAnsCallback;
201  TMCastDataIndicationCallback MulticastRxDataCallback;
202  TMCastInvalidDataIndicationCallback MulticastRxInvalidDataCallback;
203 
204  TProLinkLoRaWANregion ProLink_region;
206 private:
208 
210 
211 };
212 
213 
214 #endif /* ARDUINO_SAP_WIMOD_SAP_LORAWAN_PROLINK_H_ */
TWiMODLORAWAN_DevTimeAnsInfo
info data structure for LoRa device time request MAC command
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:114
TWiMODLORAWAN_RX_JoinedNwkData
Structure containing data of the joined network indication.
Definition: WiMOD_SAP_LORAWAN_IDs.h:551
TWiMODLORAWAN_RX_Data
Structure containing RX (user) payload data.
Definition: WiMOD_SAP_LORAWAN_IDs.h:514
TWiMODLORAWAN_McastData::LoRaWANPort
UINT8 LoRaWANPort
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:146
TWiMODLORAWAN_McastNoData
Structure containing a MultiCast Data.
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:176
TWiMODLORAWAN_NoData_Data
Structure containing infos of a NoData Indication message.
Definition: WiMOD_SAP_LORAWAN_IDs.h:648
TWiMODLORAWAN_McastConfig::NwkSKey
UINT8 NwkSKey[WiMODLORAWAN_NWK_SESSION_KEY_LEN]
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:130
TWiMODLORAWAN_TxIndData
Activation data structure for LoRa network activation.
Definition: WiMOD_SAP_LORAWAN_IDs.h:472
TWiMODLRHCI
Internal helper class for processing SLIP frames.
Definition: WiMODLRHCI.h:235
TWiMODLORAWAN_McastData
Structure containing a MultiCast Data.
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:139
TWiMODLORAWAN_McastConfig::AppSKey
UINT8 AppSKey[WiMODLORAWAN_APP_SESSION_KEY_LEN]
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:131
WiMODLR_RESULT_TRANMIT_ERROR
@ WiMODLR_RESULT_TRANMIT_ERROR
Definition: WiMODLRHCI.h:154
TWiMODLORAWAN_McastData::RxSlot
UINT8 RxSlot
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:156
TWiMODLR_HCIMessage
basic low level HCI message structure used for all serial messages to/from WiMOD
Definition: WiMODLRHCI.h:120
WiMODLR_RESULT_OK
@ WiMODLR_RESULT_OK
Definition: WiMODLRHCI.h:151
TWiMODLORAWAN_McastData::DeviceAddress
UINT32 DeviceAddress
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:144
TWiMODLORAWAN_McastData::RSSI
INT8 RSSI
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:154
WiMOD_SAP_LORAWAN.h
TWiMODLR_HCIMessage::Length
UINT16 Length
Definition: WiMODLRHCI.h:123
TWiMODLR_HCIMessage::MsgID
UINT8 MsgID
Definition: WiMODLRHCI.h:129
TWiMODLORAWAN_McastData::StatusFormat
UINT8 StatusFormat
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:142
TWiMODLORAWAN_RX_ACK_Data
Data structure for received Acknowledgment data.
Definition: WiMOD_SAP_LORAWAN_IDs.h:602
TWiMODLR_HCIMessage::Payload
UINT8 Payload[WIMODLR_HCI_MSG_PAYLOAD_SIZE]
Definition: WiMODLRHCI.h:132
TWiMODLORAWAN_McastData::DataRateIndex
UINT8 DataRateIndex
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:153
TWiMODLORAWAN_McastData::AppPayload
UINT8 AppPayload[WiMODLORAWAN_APP_PAYLOAD_LEN]
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:148
TWiMODLORAWAN_DevTimeAnsInfo::GpsTime
UINT32 GpsTime
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:117
TWiMODLORAWAN_McastNoData::StatusFormat
UINT8 StatusFormat
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:179
TNwkDeviceTimeAnsIndicationCallback
void(* TNwkDeviceTimeAnsIndicationCallback)(TWiMODLR_HCIMessage &rxMsg)
Definition: WiMOD_SAP_LORAWAN.h:148
TWiMODLORAWAN_McastNoData::DeviceAddress
UINT32 DeviceAddress
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:183
TWiMODLORAWAN_DevTimeReqInfo
info data structure for LoRa device time request MAC command
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:104
TWiMODLORAWAN_McastData::SNR
INT8 SNR
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:155
WiMODLR_RESULT_PAYLOAD_PTR_ERROR
@ WiMODLR_RESULT_PAYLOAD_PTR_ERROR
Definition: WiMODLRHCI.h:153
TWiMODLORAWAN_McastConfig
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:121
TWiMODLORAWAN_McastNoData::ErrorCode
UINT8 ErrorCode
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:181
TResetDevNonceIndicationCallback
void(* TResetDevNonceIndicationCallback)(void)
Definition: WiMOD_SAP_LORAWAN.h:142
TWiMODLORAWAN_RX_MacCmdData
Structure containing a received MAC command.
Definition: WiMOD_SAP_LORAWAN_IDs.h:534
TWiMODLORAWAN_McastData::ChannelIndex
UINT8 ChannelIndex
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:152
TWiMODLRResultCodes
TWiMODLRResultCodes
Result codes for the local serial communication itself.
Definition: WiMODLRHCI.h:149
TWiMODLORAWAN_McastConfig::MulticastStatus
UINT8 MulticastStatus
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:127
WiMOD_SAP_LoRaWAN
Implementation for the ServiceAccessPoint LoRaWAN (End Node Modem firmware only)
Definition: WiMOD_SAP_LORAWAN.h:189
WiMOD_SAP_LoRaWAN::convert
bool convert(TWiMODLR_HCIMessage &RxMsg, TWiMODLORAWAN_RX_Data *loraWanRxData)
Convert a received low level HCI-Msg to a high-level Rx Data structure.
Definition: WiMOD_SAP_LORAWAN.cpp:489
TWiMODLORAWAN_McastData::OptionalInfoAvaiable
bool OptionalInfoAvaiable
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:157
TWiMODLORAWAN_DevTimeReqInfo::ChannelBlockTime
UINT32 ChannelBlockTime
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:107
TLinkDisconnectIndicationCallback
void(* TLinkDisconnectIndicationCallback)(void)
Definition: WiMOD_SAP_LORAWAN.h:145
TWiMODLORAWAN_McastConfig::DeviceAddress
UINT32 DeviceAddress
Definition: WiMOD_SAP_LORAWAN_ProLink_IDs.h:124
WiMODLR_RESULT_PAYLOAD_LENGTH_ERROR
@ WiMODLR_RESULT_PAYLOAD_LENGTH_ERROR
Definition: WiMODLRHCI.h:152