Start project of The Things Network workshop with the MultiTech mDot
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Connect_Example_APP_EUI_KEY by
Revision 13:6ce90b84a3fe, committed 2016-04-06
- Comitter:
- johanstokking
- Date:
- Wed Apr 06 00:10:30 2016 +0000
- Parent:
- 12:343229a12653
- Commit message:
- Switched to ABP
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Apr 05 16:48:13 2016 +0000 +++ b/main.cpp Wed Apr 06 00:10:30 2016 +0000 @@ -5,8 +5,9 @@ #include <vector> #include <algorithm> -static uint8_t config_app_eui[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; -static uint8_t config_app_key[] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x45 }; +static uint8_t config_network_addr[] = { 0x01, 0x02, 0x03, 0x04 }; +static uint8_t config_network_nskey[] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C}; +static uint8_t config_network_dskey[] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C}; static uint8_t config_frequency_sub_band = 7; mDot* dot; @@ -58,6 +59,8 @@ dot->setLogLevel(mts::MTSLog::INFO_LEVEL); + dot->setJoinMode(mDot::MANUAL); + // set up the mDot with our network information: frequency sub band, network name, and network password // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig() @@ -69,27 +72,37 @@ std::vector<uint8_t> temp; - for (int i = 0; i < 8; i++) { - temp.push_back(config_app_eui[i]); - } - if ((ret = dot->setPublicNetwork(true)) != mDot::MDOT_OK) { logError("Failed to enable public network %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } - - logInfo("Setting app eui"); - if ((ret = dot->setNetworkId(temp)) != mDot::MDOT_OK) { - logError("Failed to set app eui %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); + + for (int i = 0; i < 4; i++) { + temp.push_back(config_network_addr[i]); + } + + logInfo("setting network addr"); + if ((ret = dot->setNetworkAddress(temp)) != mDot::MDOT_OK) { + logError("failed to set network name %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } temp.clear(); for (int i = 0; i < 16; i++) { - temp.push_back(config_app_key[i]); + temp.push_back(config_network_nskey[i]); + } + + logInfo("setting network password"); + if ((ret = dot->setNetworkSessionKey(temp)) != mDot::MDOT_OK) { + logError("failed to set network password %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } - logInfo("Setting app key"); - if ((ret = dot->setNetworkKey(temp)) != mDot::MDOT_OK) { - logError("Failed to set app key %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); + temp.clear(); + for (int i = 0; i < 16; i++) { + temp.push_back(config_network_dskey[i]); + } + + logInfo("setting network password"); + if ((ret = dot->setDataSessionKey(temp)) != mDot::MDOT_OK) { + logError("failed to set network password %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } // a higher spreading factor allows for longer range but lower throughput @@ -101,8 +114,8 @@ } // request receive confirmation of packets from the gateway - logInfo("Enabling ACKs"); - if ((ret = dot->setAck(1)) != mDot::MDOT_OK) { + logInfo("Disabling ACKs"); + if ((ret = dot->setAck(0)) != mDot::MDOT_OK) { logError("Failed to enable ACKs %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } @@ -113,10 +126,10 @@ } // attempt to join the network - logInfo("Joining network"); - while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) { - logError("Failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); - // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again - osDelay(std::max((uint32_t)1000, (uint32_t)dot->getNextTxMs())); - } + //logInfo("Joining network"); +// while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) { +// logError("Failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); +// // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again +// osDelay(std::max((uint32_t)1000, (uint32_t)dot->getNextTxMs())); +// } } \ No newline at end of file