mDot ABP base
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Connect_Example_ABPA by
Revision 8:d2c85894f26c, committed 2016-06-16
- Comitter:
- ludot
- Date:
- Thu Jun 16 21:40:59 2016 +0000
- Parent:
- 7:978cdd1cede8
- Commit message:
- modified sketch
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 978cdd1cede8 -r d2c85894f26c main.cpp --- a/main.cpp Thu Jun 16 11:30:44 2016 +0000 +++ b/main.cpp Thu Jun 16 21:40:59 2016 +0000 @@ -5,121 +5,134 @@ #include <vector> #include <algorithm> -// these options must match the settings on your Conduit -// uncomment the following lines and edit their values to match your configuration -static uint8_t config_network_addr[] = { 0x01, 0x02, 0x03, 0x04 }; -static uint8_t config_network_nskey[] = { 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04 }; -static uint8_t config_network_dskey[] = { 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04 }; +static uint8_t devAddr[] = { <insert DevAddr> }; //for example: { 0x44, 0x08, 0xCC, 0x9A }; +static uint8_t nwkSKey[] = { <insert nwkSKey> }; //for example: { 0x99, 0xC8, 0xA0, 0x4C, 0x50, 0x25, 0x94, 0xD2, 0xEB, 0xFD, 0xD9, 0x37, 0x56, 0x3C, 0x83, 0x32 }; +static uint8_t appSKey[] = { <insert appSKey> }; //for example: { 0x07, 0xA5, 0x9B, 0xAD, 0x11, 0x0B, 0x94, 0x6E, 0xEE, 0xE5, 0xF0, 0x87, 0xD0, 0x10, 0x35, 0x07 }; + static uint8_t config_frequency_sub_band = 7; +mDot* dot; + +void setupNetwork(); + int main() { + + Serial pc(USBTX, USBRX); + // Set up the network + setupNetwork(); + + // Message you want to send + std::string data_str = "Hello!"; + + // Copy the message in an array of bytes + std::vector<uint8_t> data; + for (std::string::iterator it = data_str.begin(); it != data_str.end(); it++) + data.push_back((uint8_t) *it); + + // Start the loop int32_t ret; - mDot* dot; - std::vector<uint8_t> data; - std::string data_str = "hello!"; + while (true) { + // Send the data + if ((ret = dot->send(data)) != mDot::MDOT_OK) { + // Oops, there was an error, check the debug screen + logError("Failed to send", ret, mDot::getReturnCodeString(ret).c_str()); + //pc.printf("Failed to send"); + } else { + // Sent the data + logInfo("Successfully sent data"); + //pc.printf("Successfully sent data"); + } + // Wait 5 seconds + osDelay(std::max((uint32_t)1000, (uint32_t)dot->getNextTxMs())); + } + + return 0; +} + +void setupNetwork() { + + //Serial pc(USBTX, USBRX); + + int32_t ret; + // get a mDot handle dot = mDot::getInstance(); // print library version information - logInfo("version: %s", dot->getId().c_str()); + logInfo("Version: %s", dot->getId().c_str()); - //******************************************* - // configuration - //******************************************* // reset to default config so we know what state we're in dot->resetConfig(); dot->setLogLevel(mts::MTSLog::INFO_LEVEL); - + + //joinmode: [MANUAL = ABP]/[OTA]/[AUTO_OTA] + 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() // frequency sub band is only applicable in the 915 (US) frequency band - // if using a MultiTech Conduit gateway, use the same sub band as your Conduit (1-8) - the mDot will use the 8 channels in that sub band - // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels - logInfo("setting frequency sub band"); + logInfo("Setting frequency sub band"); if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) { - logError("failed to set frequency sub band %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); + logError("Failed to set frequency sub band %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } std::vector<uint8_t> temp; - for (int i = 0; i < 4; i++) { - temp.push_back(config_network_addr[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 network addr"); + + for (int i = 0; i < 4; i++) { + temp.push_back(devAddr[i]); + } + + logInfo("setting Device Address"); 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_network_nskey[i]); + temp.push_back(nwkSKey[i]); } - logInfo("setting network password"); + logInfo("setting Network Session Key "); if ((ret = dot->setNetworkSessionKey(temp)) != mDot::MDOT_OK) { logError("failed to set network password %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } temp.clear(); for (int i = 0; i < 16; i++) { - temp.push_back(config_network_dskey[i]); + temp.push_back(appSKey[i]); } - logInfo("setting network password"); + logInfo("setting App Session Key"); 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 // in the 915 (US) frequency band, spreading factors 7 - 10 are available // in the 868 (EU) frequency band, spreading factors 7 - 12 are available - logInfo("setting TX spreading factor"); - if ((ret = dot->setTxDataRate(mDot::SF_10)) != mDot::MDOT_OK) { - logError("failed to set TX datarate %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); + logInfo("Setting TX spreading factor"); + if ((ret = dot->setTxDataRate(mDot::SF_8)) != mDot::MDOT_OK) { + logError("Failed to set TX datarate %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } // request receive confirmation of packets from the gateway - logInfo("enabling ACKs"); - if ((ret = dot->setAck(1)) != mDot::MDOT_OK) { - logError("failed to enable ACKs %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); + logInfo("Disabling ACKs"); + if ((ret = dot->setAck(0)) != mDot::MDOT_OK) { + logError("Failed to enable ACKs %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } // save this configuration to the mDot's NVM - logInfo("saving config"); + logInfo("Saving config"); if (! dot->saveConfig()) { - logError("failed to save configuration"); - } - //******************************************* - // end of configuration - //******************************************* - - // 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())); + logError("Failed to save configuration"); } - - // format data for sending to the gateway - for (std::string::iterator it = data_str.begin(); it != data_str.end(); it++) - data.push_back((uint8_t) *it); - - while (true) { - // send the data to the gateway - if ((ret = dot->send(data)) != mDot::MDOT_OK) { - logError("failed to send", ret, mDot::getReturnCodeString(ret).c_str()); - } else { - logInfo("successfully sent data to gateway"); - } - - // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again - osDelay(std::max((uint32_t)5000, (uint32_t)dot->getNextTxMs())); - } - - return 0; -} +} \ No newline at end of file