Dave H's version of the EVB Demo. Sends to specific conduit, and sends with a comma separated text string
Dependencies: DOGS102 ISL29011 MMA845x MPL3115A2 NCP5623B libmDot mbed-rtos mbed-src
Fork of MTDOT-EVBDemo by
Revision 2:75adc72aa6a0, committed 2015-07-09
- Comitter:
- falingtrea
- Date:
- Thu Jul 09 20:32:03 2015 +0000
- Parent:
- 1:ac9595d0f0e7
- Child:
- 3:68e974f5f532
- Commit message:
- Send logo to LCD before attempting connection to LoRa network. Added information on setting up for public LoRa network. Moved SW setup to beginning of main. Removed printf call from ISR functions. Added additional checks for exit_program.
Changed in this revision
--- a/DOGS102.lib Mon Jul 06 21:10:10 2015 +0000 +++ b/DOGS102.lib Thu Jul 09 20:32:03 2015 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Multi-Hackers/code/DOGS102/#f40dbeaefe69 +http://developer.mbed.org/teams/Multi-Hackers/code/DOGS102/#3b02b7fb79c9
--- a/libmDot.lib Mon Jul 06 21:10:10 2015 +0000 +++ b/libmDot.lib Thu Jul 09 20:32:03 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/MultiTech/code/libmDot/#94969e981dcc +https://developer.mbed.org/teams/MultiTech/code/libmDot/#0bfe6a650513
--- a/main.cpp Mon Jul 06 21:10:10 2015 +0000 +++ b/main.cpp Thu Jul 09 20:32:03 2015 +0000 @@ -2,7 +2,7 @@ * @file main.cpp * @brief Main application for mDot-EVB demo * @author Tim Barr MultiTech Systems Inc. - * @version 1.01 + * @version 1.02 * @see * * Copyright (c) 2015 @@ -20,6 +20,11 @@ * limitations under the License. * * 1.01 TAB 7/6/15 Removed NULL pointer from evbAmbientLight creation call. + * + * 1.02 TAB 7/9/15 Send logo to LCD before attempting connection to LoRa network. Added + * information on setting up for public LoRa network. Moved SW setup to + * beginning of main. Removed printf call from ISR functions. Added + * additional checks for exit_program. */ #include "mbed.h" @@ -88,11 +93,20 @@ SPI mDotspi(PA_7,PA_6,PA_5); // mDot external SPI mDot11, mDot4, and mDot18 -// replace these values with the proper network settings +/* **** replace these values with the proper public or private network settings **** + * config_network_nameand config_network_pass are for private networks. + */ static std::string config_network_name = "TAB-CubeNet"; static std::string config_network_pass = "1nt3gral"; static uint8_t config_frequency_sub_band = 5; +/* config_app_id and config_app_key are for public networks. +static uint8_t app_id[8] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D}; +std::vector<uint8_t> config_app_id; +static uint8_t app_key[16] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D}; +std::vector<uint8_t> config_app_key; +*/ + uint8_t result, pckt_time=10; char data; unsigned char test; @@ -135,14 +149,67 @@ debugUART.baud(921600); // mDotUART.baud(9600); // mdot UART unused but available on external connector - thread1 = new Thread(config_pkt_xmit); + thread1 = new Thread(config_pkt_xmit); // start thread that sends LoRa packet when SW2 pressed + evbAccel = new MMA845x(mDoti2c,MMA845x::SA0_VSS); // setup Accelerometer evbBaro = new MPL3115A2(mDoti2c); // setup Barometric sensor evbAmbLight = new ISL29011(mDoti2c); // Setup Ambient Light Sensor evbBackLight = new NCP5623B(mDoti2c); // setup backlight and LED 2 driver chip evbLCD = new DOGS102(mDotspi, mDot17, mDot13); // setup LCD - printf("\n\r setup mdot\n\r"); + /* + * Setup SW1 as program stop function + */ + mDot08.disable_irq(); + mDot08.fall(&pb1ISR); + + /* + * need to call this function after rise or fall because rise/fall sets + * mode to PullNone + */ + mDot08.mode(PullUp); + + mDot08.enable_irq(); + + /* + * Setup SW2 as packet time change + */ + mDot09.disable_irq(); + mDot09.fall(&pb2ISR); + + /* + * need to call this function after rise or fall because rise/fall sets + * mode to PullNone + */ + mDot09.mode(PullUp); + + mDot09.enable_irq(); + + /* + * Setting other InterruptIn pins with Pull Ups + */ + mDot12.mode(PullUp); + mDot15.mode(PullUp); + mDot16.mode(PullUp); + + printf("font table address %p\n\r",&font_6x8); + printf("bitmap address %p\n\r",&MultiTech_Logo); + +// Setup and display logo on LCD + evbLCD->startUpdate(); + + evbLCD->writeBitmap(0,0,MultiTech_Logo); + + sprintf(txtstr,"MTDOT"); + evbLCD->writeText(24,3,font_6x8,txtstr,strlen(txtstr)); + sprintf(txtstr,"Evaluation"); + evbLCD->writeText(24,4,font_6x8,txtstr,strlen(txtstr)); + sprintf(txtstr,"Board"); + evbLCD->writeText(24,5,font_6x8,txtstr,strlen(txtstr)); + + evbLCD->endUpdate(); + + printf("\n\r setup mdot\n\r"); // get a mDot handle mdot_radio = mDot::getInstance(); @@ -165,36 +232,79 @@ printf("\n\r"); -// set up the mDot with our network information +// Setting up the mDot with network information. + +/* + * This call sets up private or public mode on the MTDOT. Set the function to true if + * connecting to a public network + */ + printf("setting Private Network Mode\r\n"); + if ((mdot_ret = mdot_radio->setPublicNetwork(false)) != mDot::MDOT_OK) { + log_error(mdot_radio, "failed to set Public Network Mode", mdot_ret); + } + +/* + * Frequency sub-band is valid for NAM only and for Private networks should be set to a value + * between 1-8 that matches the the LoRa gateway setting. Public networks use sub-band 0 only. + * This function can be commented out for EU networks + */ printf("setting frequency sub band\r\n"); if ((mdot_ret = mdot_radio->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) { log_error(mdot_radio, "failed to set frequency sub band", mdot_ret); } +/* + * setNetworkName is used for private networks. + * Use setNetworkID(AppID) for public networks + */ + +// config_app_id.assign(app_id,app_id+7); + printf("setting network name\r\n"); if ((mdot_ret = mdot_radio->setNetworkName(config_network_name)) != mDot::MDOT_OK) { +// if ((mdot_ret = mdot_radio->setNetworkID(config_app_id)) != mDot::MDOT_OK) { log_error(mdot_radio, "failed to set network name", mdot_ret); } +/* + * setNetworkPassphrase is used for private networks + * Use setNetworkKey for public networks + */ + +// config_app_key.assign(app_key,app_key+15); + printf("setting network password\r\n"); if ((mdot_ret = mdot_radio->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) { +// if ((mdot_ret = mdot_radio->setNetworkKey(config_app_key)) != mDot::MDOT_OK) { log_error(mdot_radio, "failed to set network password", mdot_ret); } // attempt to join the network printf("joining network\r\n"); - while ((mdot_ret = mdot_radio->joinNetwork()) != mDot::MDOT_OK) { + while (((mdot_ret = mdot_radio->joinNetwork()) != mDot::MDOT_OK) && (!exit_program)) { log_error(mdot_radio,"failed to join network:", mdot_ret); if (mdot_radio->getFrequencyBand() == mDot::FB_868){ mdot_ret = mdot_radio->getNextTxMs(); } else { mdot_ret = 0; - } + } printf("delay = %lu\n\r",mdot_ret); osDelay(mdot_ret + 1); } + + /* + * Check for PB1 press during network join attempt + */ + if (exit_program) { + printf("Exiting program\n\r"); + evbLCD->clearBuffer(); + sprintf(txtstr,"Exiting Program"); + evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr)); + exit(1); + } + } else { printf("radio setup failed\n\r"); //exit(1); @@ -203,64 +313,16 @@ osDelay(200); evbBackLight->setPWM(NCP5623B::LED_3,16); // enable LED2 on EVB and set to 50% PWM - /* - * Setup SW1 as program stop function - */ - mDot08.disable_irq(); - mDot08.fall(&pb1ISR); - - /* - * need to call this function after rise or fall because rise/fall sets - * mode to PullNone - */ - mDot08.mode(PullUp); - mDot08.enable_irq(); - - /* - * Setup SW2 as packet time change - */ - mDot09.disable_irq(); - mDot09.fall(&pb2ISR); - - /* - * need to call this function after rise or fall because rise/fall sets - * mode to PullNone - */ - mDot09.mode(PullUp); - mDot09.enable_irq(); - - /* - * Setting other InterruptIn pins with Pull Ups - */ - mDot12.mode(PullUp); - mDot15.mode(PullUp); - mDot16.mode(PullUp); - - - // sets LED2 to ramp up to 50% max current at 32 mS per step + // sets LED2 to 50% max current evbBackLight->setLEDCurrent(16); - printf("font table address %p\n\r",&font_6x8); - printf("bitmap address %p\n\r",&MultiTech_Logo); - printf("Start of Test\n\r"); - evbLCD->startUpdate(); - evbLCD->writeBitmap(0,0,MultiTech_Logo); - - sprintf(txtstr,"MTDOT"); - evbLCD->writeText(24,3,font_6x8,txtstr,strlen(txtstr)); - sprintf(txtstr,"Evaluation"); - evbLCD->writeText(24,4,font_6x8,txtstr,strlen(txtstr)); - sprintf(txtstr,"Board"); - evbLCD->writeText(24,5,font_6x8,txtstr,strlen(txtstr)); + osDelay (500); // allows other threads to process + printf("shutdown LED:\n\r"); + evbBackLight->shutdown(); osDelay (500); // allows other threads to process - printf("shutdown LEDs and update LCD:\n\r"); - evbBackLight->shutdown(); - evbLCD->endUpdate(); - - osDelay (1000); // allows other threads to process printf("Turn on LED2\n\r"); evbBackLight->setLEDCurrent(16); @@ -310,6 +372,17 @@ evbBackLight->setLEDCurrent(0); /* + * Check for PB1 press during network join attempt + */ + if (exit_program) { + printf("Exiting program\n\r"); + evbLCD->clearBuffer(); + sprintf(txtstr,"Exiting Program"); + evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr)); + exit(1); + } + + /* * Main data acquisition loop */ pckt_time = 10; @@ -435,7 +508,7 @@ printf("successfully sent data to gateway\r\n"); } } - } while(!exit_program | (i > 65000)); + } while(!exit_program && (i < 65000)); evbBaro->triggerOneShot(); @@ -450,6 +523,10 @@ printf("End of Test\n\r"); + evbLCD->clearBuffer(); + sprintf(txtstr,"Exiting Program"); + evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr)); + } /* @@ -457,35 +534,36 @@ */ void pb1ISR(void) { - printf("calling ISR for SW1\n\r"); exit_program = true; } /* - * changes packet transmit time to every other, every fifth, or every tenth sample when button 2 pushed + * changes packet transmit time to every other, every fifth, or every tenth sample when SW2 pushed * Also triggers a thread to transmit a configuration packet */ void pb2ISR(void) { - printf("calling ISR for SW2\n\r"); - if (pckt_time >= 5) pckt_time /= 2; else pckt_time = 20; thread1->signal_set(0x10); // signal config_pkt_xmit to send packet - printf ("pckt_time = %d\n\r",pckt_time); - } +/* + * Function that print clear text verion of mDot errors + */ void log_error(mDot* dot, const char* msg, int32_t retval) { printf("%s - %ld:%s, %s\r\n", msg, retval, mDot::getReturnCodeString(retval).c_str(), dot->getLastError().c_str()); } +/* + * Thread that is triggered by SW2 ISR. Sends a packet to the LoRa server with the new Packet Transmission time setting + */ void config_pkt_xmit (void const *args) {
--- a/mbed-src.lib Mon Jul 06 21:10:10 2015 +0000 +++ b/mbed-src.lib Thu Jul 09 20:32:03 2015 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed-src/#39197bcd20f2 +http://mbed.org/users/mbed_official/code/mbed-src/#dfaf40375987