Peer to peer xDot

Dependencies:   ISL29011 libxDot-dev-mbed5-deprecated

Committer:
javierp
Date:
Mon Mar 05 23:51:58 2018 +0000
Revision:
0:33f2abdc6bf9
Conexi?n peer to peer para que con una misma clave se entiendan dos xDot.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
javierp 0:33f2abdc6bf9 1 #include "mbed.h"
javierp 0:33f2abdc6bf9 2 #include "mDot.h"
javierp 0:33f2abdc6bf9 3 #include "rtos.h"
javierp 0:33f2abdc6bf9 4 #include "ChannelPlan.h"
javierp 0:33f2abdc6bf9 5 #include "ISL29011.h"
javierp 0:33f2abdc6bf9 6 #include "dot_util.h"
javierp 0:33f2abdc6bf9 7 #include "RadioEvent.h"
javierp 0:33f2abdc6bf9 8
javierp 0:33f2abdc6bf9 9 static uint8_t network_address[] = { 0x04, 0x05, 0x03, 0x04 };
javierp 0:33f2abdc6bf9 10 static uint8_t network_session_key[] = { 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04 };
javierp 0:33f2abdc6bf9 11 static uint8_t data_session_key[] = { 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04 };
javierp 0:33f2abdc6bf9 12
javierp 0:33f2abdc6bf9 13 mDot* dot = NULL;
javierp 0:33f2abdc6bf9 14 lora::ChannelPlan* plan = NULL;
javierp 0:33f2abdc6bf9 15
javierp 0:33f2abdc6bf9 16 static Serial pc(USBTX, USBRX);
javierp 0:33f2abdc6bf9 17
javierp 0:33f2abdc6bf9 18 I2C i2c(I2C_SDA, I2C_SCL);
javierp 0:33f2abdc6bf9 19 ISL29011 lux(i2c);
javierp 0:33f2abdc6bf9 20
javierp 0:33f2abdc6bf9 21 int main() {
javierp 0:33f2abdc6bf9 22
javierp 0:33f2abdc6bf9 23 // Custom event handler for automatically displaying RX data
javierp 0:33f2abdc6bf9 24 RadioEvent events;
javierp 0:33f2abdc6bf9 25 uint32_t tx_frequency;
javierp 0:33f2abdc6bf9 26 uint8_t tx_datarate;
javierp 0:33f2abdc6bf9 27 uint8_t tx_power;
javierp 0:33f2abdc6bf9 28
javierp 0:33f2abdc6bf9 29 pc.baud(115200);
javierp 0:33f2abdc6bf9 30
javierp 0:33f2abdc6bf9 31 plan = new lora::ChannelPlan_US915();
javierp 0:33f2abdc6bf9 32 dot = mDot::getInstance(plan);
javierp 0:33f2abdc6bf9 33 assert(dot);
javierp 0:33f2abdc6bf9 34
javierp 0:33f2abdc6bf9 35 logInfo("defaulting Dot configuration");
javierp 0:33f2abdc6bf9 36 dot->resetConfig();
javierp 0:33f2abdc6bf9 37
javierp 0:33f2abdc6bf9 38 // make sure library logging is turned on
javierp 0:33f2abdc6bf9 39 dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
javierp 0:33f2abdc6bf9 40
javierp 0:33f2abdc6bf9 41 // attach the custom events handler
javierp 0:33f2abdc6bf9 42 dot->setEvents(&events);
javierp 0:33f2abdc6bf9 43
javierp 0:33f2abdc6bf9 44 // update configuration if necessary
javierp 0:33f2abdc6bf9 45 if (dot->getJoinMode() != mDot::PEER_TO_PEER) {
javierp 0:33f2abdc6bf9 46 logInfo("changing network join mode to PEER_TO_PEER");
javierp 0:33f2abdc6bf9 47 if (dot->setJoinMode(mDot::PEER_TO_PEER) != mDot::MDOT_OK) {
javierp 0:33f2abdc6bf9 48 logError("failed to set network join mode to PEER_TO_PEER");
javierp 0:33f2abdc6bf9 49 }
javierp 0:33f2abdc6bf9 50 }
javierp 0:33f2abdc6bf9 51
javierp 0:33f2abdc6bf9 52 tx_frequency = 915500000;
javierp 0:33f2abdc6bf9 53 tx_datarate = lora::DR_13;
javierp 0:33f2abdc6bf9 54 // 915 bands have no duty cycle restrictions, set tx power to max
javierp 0:33f2abdc6bf9 55 tx_power = 20;
javierp 0:33f2abdc6bf9 56
javierp 0:33f2abdc6bf9 57 // in PEER_TO_PEER mode there is no join request/response transaction
javierp 0:33f2abdc6bf9 58 // as long as both Dots are configured correctly, they should be able to communicate
javierp 0:33f2abdc6bf9 59 update_peer_to_peer_config(network_address, network_session_key, data_session_key, tx_frequency, tx_datarate, tx_power);
javierp 0:33f2abdc6bf9 60
javierp 0:33f2abdc6bf9 61 // save changes to configuration
javierp 0:33f2abdc6bf9 62 logInfo("saving configuration");
javierp 0:33f2abdc6bf9 63 if (!dot->saveConfig()) {
javierp 0:33f2abdc6bf9 64 logError("failed to save configuration");
javierp 0:33f2abdc6bf9 65 }
javierp 0:33f2abdc6bf9 66
javierp 0:33f2abdc6bf9 67 // display configuration
javierp 0:33f2abdc6bf9 68 display_config();
javierp 0:33f2abdc6bf9 69
javierp 0:33f2abdc6bf9 70 lux.setMode(ISL29011::ALS_CONT);
javierp 0:33f2abdc6bf9 71 lux.setResolution(ISL29011::ADC_16BIT);
javierp 0:33f2abdc6bf9 72 lux.setRange(ISL29011::RNG_64000);
javierp 0:33f2abdc6bf9 73
javierp 0:33f2abdc6bf9 74 while (true) {
javierp 0:33f2abdc6bf9 75 uint16_t light;
javierp 0:33f2abdc6bf9 76 std::vector<uint8_t> tx_data;
javierp 0:33f2abdc6bf9 77
javierp 0:33f2abdc6bf9 78 // join network if not joined
javierp 0:33f2abdc6bf9 79 if (!dot->getNetworkJoinStatus()) {
javierp 0:33f2abdc6bf9 80 join_network();
javierp 0:33f2abdc6bf9 81 }
javierp 0:33f2abdc6bf9 82
javierp 0:33f2abdc6bf9 83 light = lux.getData();
javierp 0:33f2abdc6bf9 84 tx_data.push_back((light >> 8) & 0xFF);
javierp 0:33f2abdc6bf9 85 tx_data.push_back(light & 0xFF);
javierp 0:33f2abdc6bf9 86 logInfo("light: %lu [0x%04X]", light, light);
javierp 0:33f2abdc6bf9 87 send_data(tx_data);
javierp 0:33f2abdc6bf9 88
javierp 0:33f2abdc6bf9 89 // the Dot can't sleep in PEER_TO_PEER mode
javierp 0:33f2abdc6bf9 90 // it must be waiting for data from the other Dot
javierp 0:33f2abdc6bf9 91 // send data every 5 seconds
javierp 0:33f2abdc6bf9 92 logInfo("waiting for 5s");
javierp 0:33f2abdc6bf9 93 wait(5);
javierp 0:33f2abdc6bf9 94 }
javierp 0:33f2abdc6bf9 95 return 0;
javierp 0:33f2abdc6bf9 96 }