![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Example of using the mDot UDK with the X-NUCLEO-IKS01A1 shield
Dependencies: mDot_X_NUCLEO_IKS01A1 libmDot-dev-mbed5-deprecated
Hardware
Hardware List
- Multiconnect mDot with programming header (MTDOT-xxx-X1P)
- Multiconnect mDot Developer kit (MTUDK2-ST-MDOT) or SocketModem and Dragonfly Developer kit (MTUDK2-ST-CELL)
- Motion MEMS and environmental sensor expansion board for STM32 Nucleo X-NUCLEO-IKS01A1
Setup
- Install the mDot on the developer board.
- Install the IKS01A1 on the developer board.
- If using a MTUDK-ST-CELL (white board) plug in the AC power adapter
- Connect the microusb power to your development PC
- if using a MTUDK-ST-CELL there are 2 microusb ports. Use the one closest to the serial port.
Your developer board should look like the following:
Software
This example program uses LoRa utility functions from Dot-Examples and the IKS01A1 library from ST Micro.
LoRa Configuration
Senet
By default this program is configured to connect to the Senet network. To connect to Senet you will need to register your mDot's Node ID with the Senet developer portal and change the network_key array in main.cpp.
Others
To connect to a different LoRa gateway change the arrays network_id and network_key. If you are using passphrases, edit the strings network_name and network_key, uncomment the function "update_ota_config_name_phrase" and comment out the function "update_ota_config_id_key".
Diff: RadioEvent.h
- Revision:
- 0:9e88a9018fc0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RadioEvent.h Fri Dec 09 15:56:42 2016 +0000 @@ -0,0 +1,78 @@ +#ifndef __RADIO_EVENT_H__ +#define __RADIO_EVENT_H__ + +#include "dot_util.h" +#include "mDotEvent.h" + +class RadioEvent : public mDotEvent +{ + +public: + RadioEvent() {} + + virtual ~RadioEvent() {} + + /*! + * MAC layer event callback prototype. + * + * \param [IN] flags Bit field indicating the MAC events occurred + * \param [IN] info Details about MAC events occurred + */ + virtual void MacEvent(LoRaMacEventFlags* flags, LoRaMacEventInfo* info) { + + if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) { + std::string msg = "OK"; + switch (info->Status) { + case LORAMAC_EVENT_INFO_STATUS_ERROR: + msg = "ERROR"; + break; + case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT: + msg = "TX_TIMEOUT"; + break; + case LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT: + msg = "RX_TIMEOUT"; + break; + case LORAMAC_EVENT_INFO_STATUS_RX_ERROR: + msg = "RX_ERROR"; + break; + case LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL: + msg = "JOIN_FAIL"; + break; + case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL: + msg = "DOWNLINK_FAIL"; + break; + case LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL: + msg = "ADDRESS_FAIL"; + break; + case LORAMAC_EVENT_INFO_STATUS_MIC_FAIL: + msg = "MIC_FAIL"; + break; + default: + break; + } + logTrace("Event: %s", msg.c_str()); + + logTrace("Flags Tx: %d Rx: %d RxData: %d RxSlot: %d LinkCheck: %d JoinAccept: %d", + flags->Bits.Tx, flags->Bits.Rx, flags->Bits.RxData, flags->Bits.RxSlot, flags->Bits.LinkCheck, flags->Bits.JoinAccept); + logTrace("Info: Status: %d ACK: %d Retries: %d TxDR: %d RxPort: %d RxSize: %d RSSI: %d SNR: %d Energy: %d Margin: %d Gateways: %d", + info->Status, info->TxAckReceived, info->TxNbRetries, info->TxDatarate, info->RxPort, info->RxBufferSize, + info->RxRssi, info->RxSnr, info->Energy, info->DemodMargin, info->NbGateways); + } + + if (flags->Bits.Rx) { + + logDebug("Rx %d bytes", info->RxBufferSize); + if (info->RxBufferSize > 0) { + // print RX data as hexadecimal + //printf("Rx data: %s\r\n", mts::Text::bin2hexString(info->RxBuffer, info->RxBufferSize).c_str()); + + // print RX data as string + std::string rx((const char*)info->RxBuffer, info->RxBufferSize); + printf("Rx data: %s\r\n", rx.c_str()); + } + } + } +}; + +#endif +