mDot EVB to M2X demo.

Dependencies:   DOGS102 ISL29011 MMA845x MPL3115A2 NCP5623B libmDot mbed-rtos mbed-src

Fork of MTDOT-EVBDemo by Multi-Hackers

Committer:
jamescmaki
Date:
Mon Jul 20 16:04:04 2015 +0000
Revision:
5:72d4d95e1d42
Parent:
4:71e411fbd9ff
Child:
6:c212427700af
Integrate Senet public network demo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
falingtrea 0:bdd16076aaa5 1 /**
falingtrea 0:bdd16076aaa5 2 * @file main.cpp
falingtrea 0:bdd16076aaa5 3 * @brief Main application for mDot-EVB demo
falingtrea 0:bdd16076aaa5 4 * @author Tim Barr MultiTech Systems Inc.
falingtrea 3:68e974f5f532 5 * @version 1.03
falingtrea 0:bdd16076aaa5 6 * @see
falingtrea 0:bdd16076aaa5 7 *
falingtrea 0:bdd16076aaa5 8 * Copyright (c) 2015
falingtrea 0:bdd16076aaa5 9 *
falingtrea 0:bdd16076aaa5 10 * Licensed under the Apache License, Version 2.0 (the "License");
falingtrea 0:bdd16076aaa5 11 * you may not use this file except in compliance with the License.
falingtrea 0:bdd16076aaa5 12 * You may obtain a copy of the License at
falingtrea 0:bdd16076aaa5 13 *
falingtrea 0:bdd16076aaa5 14 * http://www.apache.org/licenses/LICENSE-2.0
falingtrea 0:bdd16076aaa5 15 *
falingtrea 0:bdd16076aaa5 16 * Unless required by applicable law or agreed to in writing, software
falingtrea 0:bdd16076aaa5 17 * distributed under the License is distributed on an "AS IS" BASIS,
falingtrea 0:bdd16076aaa5 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
falingtrea 0:bdd16076aaa5 19 * See the License for the specific language governing permissions and
falingtrea 0:bdd16076aaa5 20 * limitations under the License.
falingtrea 1:ac9595d0f0e7 21 *
falingtrea 1:ac9595d0f0e7 22 * 1.01 TAB 7/6/15 Removed NULL pointer from evbAmbientLight creation call.
falingtrea 2:75adc72aa6a0 23 *
falingtrea 3:68e974f5f532 24 * 1.02 TAB 7/8/15 Send logo to LCD before attempting connection to LoRa network. Added
jamescmaki 5:72d4d95e1d42 25 * information on setting up for public LoRa network. Moved SW setup to
jamescmaki 5:72d4d95e1d42 26 * beginning of main. Removed printf call from ISR functions. Added
jamescmaki 5:72d4d95e1d42 27 * additional checks for exit_program.
falingtrea 3:68e974f5f532 28 *
falingtrea 3:68e974f5f532 29 * 1.03 TAB 7/15/15 Added threads for push button switch debounce.
falingtrea 3:68e974f5f532 30 *
jamescmaki 5:72d4d95e1d42 31 * 1.04 JCM 7/16/15 Updated application for AT&T M2X Demo
jamescmaki 5:72d4d95e1d42 32 *
jamescmaki 5:72d4d95e1d42 33 * 1.05 JCM 7/20/15 Integrate Senet Public network demo
jamescmaki 4:71e411fbd9ff 34 *
falingtrea 0:bdd16076aaa5 35 */
falingtrea 0:bdd16076aaa5 36
falingtrea 0:bdd16076aaa5 37 #include "mbed.h"
falingtrea 0:bdd16076aaa5 38 #include "MMA845x.h"
falingtrea 0:bdd16076aaa5 39 #include "MPL3115A2.h"
falingtrea 0:bdd16076aaa5 40 #include "ISL29011.h"
falingtrea 0:bdd16076aaa5 41 #include "NCP5623B.h"
falingtrea 0:bdd16076aaa5 42 #include "DOGS102.h"
falingtrea 0:bdd16076aaa5 43 #include "font_6x8.h"
falingtrea 0:bdd16076aaa5 44 #include "MultiTech_Logo.h"
falingtrea 0:bdd16076aaa5 45 #include "mDot.h"
falingtrea 0:bdd16076aaa5 46 #include "rtos.h"
falingtrea 0:bdd16076aaa5 47 #include <string>
falingtrea 0:bdd16076aaa5 48 #include <vector>
falingtrea 0:bdd16076aaa5 49
jamescmaki 5:72d4d95e1d42 50 /*
jamescmaki 5:72d4d95e1d42 51 * General settings
jamescmaki 5:72d4d95e1d42 52 */
jamescmaki 5:72d4d95e1d42 53 const bool public_net = false;
jamescmaki 5:72d4d95e1d42 54 const bool senet_demo = false;
jamescmaki 5:72d4d95e1d42 55 static uint8_t config_frequency_sub_band = 5;
jamescmaki 4:71e411fbd9ff 56
jamescmaki 4:71e411fbd9ff 57 /*
jamescmaki 4:71e411fbd9ff 58 * Conduit AEP settings
jamescmaki 4:71e411fbd9ff 59 *
jamescmaki 4:71e411fbd9ff 60 * AEP settings can be found at: https://<ip-address>/lora_network.html
jamescmaki 4:71e411fbd9ff 61 */
jamescmaki 4:71e411fbd9ff 62 static std::string config_network_name = "testtest";
jamescmaki 4:71e411fbd9ff 63 static std::string config_network_pass = "memememe";
jamescmaki 5:72d4d95e1d42 64
jamescmaki 5:72d4d95e1d42 65 /*
jamescmaki 5:72d4d95e1d42 66 * Public Network settings
jamescmaki 5:72d4d95e1d42 67 */
jamescmaki 5:72d4d95e1d42 68 static uint8_t app_id[8] = {0x00,0x25,0x0C,0x00,0x00,0x01,0x00,0x01};
jamescmaki 5:72d4d95e1d42 69 std::vector<uint8_t> config_app_id(app_id, app_id + sizeof(app_id)/sizeof(uint8_t));
jamescmaki 5:72d4d95e1d42 70 static uint8_t app_key[16] = {0xB4,0xAD,0x1A,0x25,0x69,0x7F,0xF6,0x8E,0xD3,0x4B,0x83,0xC4,0xB6,0xC0,0xF2,0x3C};
jamescmaki 5:72d4d95e1d42 71 std::vector<uint8_t> config_app_key(app_key, app_key + sizeof(app_key)/sizeof(uint8_t));
jamescmaki 4:71e411fbd9ff 72
jamescmaki 4:71e411fbd9ff 73 /*
jamescmaki 4:71e411fbd9ff 74 * M2X settings
jamescmaki 4:71e411fbd9ff 75 *
jamescmaki 4:71e411fbd9ff 76 * M2X settings can be found at: https://m2x.att.com/devices
jamescmaki 4:71e411fbd9ff 77 * Once a device is added you will see DEVICE ID and PRIMARY API KEY fields
jamescmaki 4:71e411fbd9ff 78 * for the device.
jamescmaki 4:71e411fbd9ff 79 */
jamescmaki 5:72d4d95e1d42 80 const char *m2x_device = "f397d9c6c74cb1e2a1be5ef7731dc8af";
jamescmaki 5:72d4d95e1d42 81 const char *m2x_key = "5899c8b045531d3634efa65096ee3ede";
jamescmaki 4:71e411fbd9ff 82
jamescmaki 4:71e411fbd9ff 83
falingtrea 0:bdd16076aaa5 84 enum LED1_COLOR {
falingtrea 0:bdd16076aaa5 85 RED = 0,
falingtrea 0:bdd16076aaa5 86 GREEN = 1
falingtrea 0:bdd16076aaa5 87 };
falingtrea 0:bdd16076aaa5 88
falingtrea 0:bdd16076aaa5 89 /*
falingtrea 0:bdd16076aaa5 90 * union for converting from 32-bit to 4 8-bit values
falingtrea 0:bdd16076aaa5 91 */
falingtrea 0:bdd16076aaa5 92 union convert32 {
jamescmaki 5:72d4d95e1d42 93 int32_t f_s; // convert from signed 32 bit int
jamescmaki 5:72d4d95e1d42 94 uint32_t f_u; // convert from unsigned 32 bit int
jamescmaki 5:72d4d95e1d42 95 uint8_t t_u[4]; // convert to 8 bit unsigned array
falingtrea 0:bdd16076aaa5 96 };
falingtrea 0:bdd16076aaa5 97
falingtrea 0:bdd16076aaa5 98 /*
falingtrea 0:bdd16076aaa5 99 * union for converting from 16- bit to 2 8-bit values
falingtrea 0:bdd16076aaa5 100 */
falingtrea 0:bdd16076aaa5 101 union convert16 {
jamescmaki 5:72d4d95e1d42 102 int16_t f_s; // convert from signed 16 bit int
jamescmaki 5:72d4d95e1d42 103 uint16_t f_u; // convert from unsigned 16 bit int
jamescmaki 5:72d4d95e1d42 104 uint8_t t_u[2]; // convert to 8 bit unsigned array
falingtrea 0:bdd16076aaa5 105 };
falingtrea 0:bdd16076aaa5 106
jamescmaki 5:72d4d95e1d42 107 //DigitalIn mDot02(PA_2); // GPIO/UART_TX
jamescmaki 5:72d4d95e1d42 108 //DigitalOut mDot03(PA_3); // GPIO/UART_RX
jamescmaki 5:72d4d95e1d42 109 //DigitalIn mDot04(PA_6); // GPIO/SPI_MISO
jamescmaki 5:72d4d95e1d42 110 //DigitalIn mDot06(PA_8); // GPIO/I2C_SCL
jamescmaki 5:72d4d95e1d42 111 //DigitalIn mDot07(PC_9); // GPIO/I2C_SDA
falingtrea 0:bdd16076aaa5 112
jamescmaki 5:72d4d95e1d42 113 InterruptIn mDot08(PA_12); // GPIO/USB PB S1 on EVB
jamescmaki 5:72d4d95e1d42 114 InterruptIn mDot09(PA_11); // GPIO/USB PB S2 on EVB
falingtrea 0:bdd16076aaa5 115
jamescmaki 5:72d4d95e1d42 116 //DigitalIn mDot11(PA_7); // GPIO/SPI_MOSI
falingtrea 0:bdd16076aaa5 117
jamescmaki 5:72d4d95e1d42 118 InterruptIn mDot12(PA_0); // GPIO/UART_CTS PRESSURE_INT2 on EVB
jamescmaki 5:72d4d95e1d42 119 DigitalOut mDot13(PC_13,1); // GPIO LCD_C/D
jamescmaki 5:72d4d95e1d42 120 InterruptIn mDot15(PC_1); // GPIO LIGHT_PROX_INT on EVB
jamescmaki 5:72d4d95e1d42 121 InterruptIn mDot16(PA_1); // GPIO/UART_RTS ACCEL_INT2 on EVB
jamescmaki 5:72d4d95e1d42 122 DigitalOut mDot17(PA_4,1); // GPIO/SPI_NCS LCD_CS on EVB
falingtrea 0:bdd16076aaa5 123
jamescmaki 5:72d4d95e1d42 124 //DigitalIn mDot18(PA_5); // GPIO/SPI_SCK
falingtrea 0:bdd16076aaa5 125
falingtrea 0:bdd16076aaa5 126 //DigitalInOut mDot19(PB_0,PIN_INPUT,PullNone,0); // GPIO PushPull LED Low=Red High=Green set MODE=INPUT to turn off
jamescmaki 5:72d4d95e1d42 127 AnalogIn mDot20(PB_1); // GPIO Current Sense Analog in on EVB
falingtrea 0:bdd16076aaa5 128
jamescmaki 5:72d4d95e1d42 129 Serial debugUART(PA_9, PA_10); // mDot debug UART
falingtrea 0:bdd16076aaa5 130
jamescmaki 5:72d4d95e1d42 131 //Serial mDotUART(PA_2, PA_3); // mDot external UART mDot02 and mDot03
falingtrea 0:bdd16076aaa5 132
jamescmaki 5:72d4d95e1d42 133 I2C mDoti2c(PC_9,PA_8); // mDot External I2C mDot6 and mDot7
falingtrea 0:bdd16076aaa5 134
jamescmaki 5:72d4d95e1d42 135 SPI mDotspi(PA_7,PA_6,PA_5); // mDot external SPI mDot11, mDot4, and mDot18
falingtrea 0:bdd16076aaa5 136
falingtrea 2:75adc72aa6a0 137
falingtrea 0:bdd16076aaa5 138 uint8_t result, pckt_time=10;
falingtrea 0:bdd16076aaa5 139 char data;
falingtrea 0:bdd16076aaa5 140 unsigned char test;
jamescmaki 4:71e411fbd9ff 141 char txtstr[64];
falingtrea 0:bdd16076aaa5 142 int32_t num_whole, mdot_ret;
falingtrea 0:bdd16076aaa5 143 uint32_t pressure;
falingtrea 0:bdd16076aaa5 144 int16_t num_frac;
falingtrea 0:bdd16076aaa5 145
jamescmaki 5:72d4d95e1d42 146 uint8_t position_value; // 00 unknown, 01 is flat, 02 is vertical
jamescmaki 5:72d4d95e1d42 147
falingtrea 0:bdd16076aaa5 148 bool exit_program = false;
falingtrea 0:bdd16076aaa5 149
falingtrea 0:bdd16076aaa5 150 MMA845x_DATA accel_data;
falingtrea 0:bdd16076aaa5 151 MPL3115A2_DATA baro_data;
falingtrea 0:bdd16076aaa5 152 uint16_t lux_data;
falingtrea 0:bdd16076aaa5 153 MMA845x* evbAccel;
falingtrea 0:bdd16076aaa5 154 MPL3115A2* evbBaro;
falingtrea 0:bdd16076aaa5 155 ISL29011* evbAmbLight;
falingtrea 0:bdd16076aaa5 156 NCP5623B* evbBackLight;
falingtrea 0:bdd16076aaa5 157 DOGS102* evbLCD;
falingtrea 0:bdd16076aaa5 158 mDot* mdot_radio;
falingtrea 0:bdd16076aaa5 159
falingtrea 0:bdd16076aaa5 160 convert32 convertl;
falingtrea 0:bdd16076aaa5 161 convert16 converts;
falingtrea 0:bdd16076aaa5 162
falingtrea 3:68e974f5f532 163 // flags for pushbutton debounce code
falingtrea 3:68e974f5f532 164 bool pb1_low = false;
falingtrea 3:68e974f5f532 165 bool pb2_low = false;
falingtrea 3:68e974f5f532 166
falingtrea 0:bdd16076aaa5 167 void pb1ISR(void);
falingtrea 0:bdd16076aaa5 168 void pb2ISR(void);
falingtrea 3:68e974f5f532 169 void pb1_debounce(void const *args);
falingtrea 3:68e974f5f532 170 void pb2_debounce(void const *args);
falingtrea 3:68e974f5f532 171 Thread* thread_3;
falingtrea 0:bdd16076aaa5 172
falingtrea 0:bdd16076aaa5 173 void log_error(mDot* dot, const char* msg, int32_t retval);
falingtrea 0:bdd16076aaa5 174
falingtrea 0:bdd16076aaa5 175 void config_pkt_xmit (void const *args);
falingtrea 0:bdd16076aaa5 176
falingtrea 0:bdd16076aaa5 177 int main()
falingtrea 0:bdd16076aaa5 178 {
jamescmaki 4:71e411fbd9ff 179 std::vector<uint8_t> lora_pl;
falingtrea 0:bdd16076aaa5 180 std::vector<uint8_t> mdot_EUI;
falingtrea 0:bdd16076aaa5 181 uint16_t i = 0;
falingtrea 0:bdd16076aaa5 182
jamescmaki 4:71e411fbd9ff 183 debugUART.baud(115200);
falingtrea 0:bdd16076aaa5 184 // mDotUART.baud(9600); // mdot UART unused but available on external connector
falingtrea 0:bdd16076aaa5 185
jamescmaki 5:72d4d95e1d42 186 Thread thread_1(pb1_debounce); // threads for de-bouncing pushbutton switches
falingtrea 3:68e974f5f532 187 Thread thread_2(pb2_debounce);
falingtrea 3:68e974f5f532 188
jamescmaki 5:72d4d95e1d42 189 thread_3 = new Thread(config_pkt_xmit); // start thread that sends LoRa packet when SW2 pressed
falingtrea 2:75adc72aa6a0 190
jamescmaki 5:72d4d95e1d42 191 evbAccel = new MMA845x(mDoti2c,MMA845x::SA0_VSS); // setup Accelerometer
jamescmaki 5:72d4d95e1d42 192 evbBaro = new MPL3115A2(mDoti2c); // setup Barometric sensor
jamescmaki 5:72d4d95e1d42 193 evbAmbLight = new ISL29011(mDoti2c); // Setup Ambient Light Sensor
jamescmaki 5:72d4d95e1d42 194 evbBackLight = new NCP5623B(mDoti2c); // setup backlight and LED 2 driver chip
jamescmaki 5:72d4d95e1d42 195 evbLCD = new DOGS102(mDotspi, mDot17, mDot13); // setup LCD
falingtrea 0:bdd16076aaa5 196
falingtrea 2:75adc72aa6a0 197 /*
falingtrea 2:75adc72aa6a0 198 * Setup SW1 as program stop function
falingtrea 2:75adc72aa6a0 199 */
falingtrea 2:75adc72aa6a0 200 mDot08.disable_irq();
falingtrea 2:75adc72aa6a0 201 mDot08.fall(&pb1ISR);
falingtrea 2:75adc72aa6a0 202
falingtrea 2:75adc72aa6a0 203 /*
falingtrea 2:75adc72aa6a0 204 * need to call this function after rise or fall because rise/fall sets
falingtrea 2:75adc72aa6a0 205 * mode to PullNone
falingtrea 2:75adc72aa6a0 206 */
falingtrea 2:75adc72aa6a0 207 mDot08.mode(PullUp);
falingtrea 2:75adc72aa6a0 208
falingtrea 2:75adc72aa6a0 209 mDot08.enable_irq();
falingtrea 2:75adc72aa6a0 210
falingtrea 2:75adc72aa6a0 211 /*
falingtrea 2:75adc72aa6a0 212 * Setup SW2 as packet time change
falingtrea 2:75adc72aa6a0 213 */
falingtrea 2:75adc72aa6a0 214 mDot09.disable_irq();
falingtrea 2:75adc72aa6a0 215 mDot09.fall(&pb2ISR);
falingtrea 2:75adc72aa6a0 216
falingtrea 2:75adc72aa6a0 217 /*
falingtrea 2:75adc72aa6a0 218 * need to call this function after rise or fall because rise/fall sets
falingtrea 2:75adc72aa6a0 219 * mode to PullNone
falingtrea 2:75adc72aa6a0 220 */
falingtrea 2:75adc72aa6a0 221 mDot09.mode(PullUp);
falingtrea 2:75adc72aa6a0 222
falingtrea 2:75adc72aa6a0 223 mDot09.enable_irq();
falingtrea 2:75adc72aa6a0 224
falingtrea 2:75adc72aa6a0 225 /*
falingtrea 2:75adc72aa6a0 226 * Setting other InterruptIn pins with Pull Ups
falingtrea 2:75adc72aa6a0 227 */
falingtrea 2:75adc72aa6a0 228 mDot12.mode(PullUp);
falingtrea 2:75adc72aa6a0 229 mDot15.mode(PullUp);
falingtrea 2:75adc72aa6a0 230 mDot16.mode(PullUp);
falingtrea 2:75adc72aa6a0 231
falingtrea 2:75adc72aa6a0 232 printf("font table address %p\n\r",&font_6x8);
falingtrea 2:75adc72aa6a0 233 printf("bitmap address %p\n\r",&MultiTech_Logo);
falingtrea 2:75adc72aa6a0 234
falingtrea 2:75adc72aa6a0 235 // Setup and display logo on LCD
falingtrea 2:75adc72aa6a0 236 evbLCD->startUpdate();
falingtrea 2:75adc72aa6a0 237
falingtrea 2:75adc72aa6a0 238 evbLCD->writeBitmap(0,0,MultiTech_Logo);
falingtrea 2:75adc72aa6a0 239
falingtrea 2:75adc72aa6a0 240 sprintf(txtstr,"MTDOT");
falingtrea 2:75adc72aa6a0 241 evbLCD->writeText(24,3,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 242 sprintf(txtstr,"Evaluation");
falingtrea 2:75adc72aa6a0 243 evbLCD->writeText(24,4,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 244 sprintf(txtstr,"Board");
falingtrea 2:75adc72aa6a0 245 evbLCD->writeText(24,5,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 246
falingtrea 2:75adc72aa6a0 247 evbLCD->endUpdate();
falingtrea 2:75adc72aa6a0 248
falingtrea 2:75adc72aa6a0 249 printf("\n\r setup mdot\n\r");
falingtrea 0:bdd16076aaa5 250
falingtrea 0:bdd16076aaa5 251 // get a mDot handle
falingtrea 0:bdd16076aaa5 252 mdot_radio = mDot::getInstance();
falingtrea 0:bdd16076aaa5 253
falingtrea 0:bdd16076aaa5 254 if (mdot_radio) {
falingtrea 0:bdd16076aaa5 255 // reset to default config so we know what state we're in
falingtrea 0:bdd16076aaa5 256 mdot_radio->resetConfig();
falingtrea 0:bdd16076aaa5 257
falingtrea 0:bdd16076aaa5 258 // Setting up LED1 as activity LED
falingtrea 0:bdd16076aaa5 259 mdot_radio->setActivityLedPin(PB_0);
falingtrea 0:bdd16076aaa5 260 mdot_radio->setActivityLedEnable(true);
falingtrea 0:bdd16076aaa5 261
falingtrea 0:bdd16076aaa5 262 // Read node ID
falingtrea 0:bdd16076aaa5 263 mdot_EUI = mdot_radio->getDeviceId();
falingtrea 0:bdd16076aaa5 264 printf("mDot EUI = ");
falingtrea 0:bdd16076aaa5 265
falingtrea 0:bdd16076aaa5 266 for (i=0; i<mdot_EUI.size(); i++) {
falingtrea 0:bdd16076aaa5 267 printf("%02x ", mdot_EUI[i]);
falingtrea 0:bdd16076aaa5 268 }
falingtrea 0:bdd16076aaa5 269 printf("\n\r");
falingtrea 0:bdd16076aaa5 270
jamescmaki 5:72d4d95e1d42 271 printf("setting Network Mode to %s\r\n", public_net ? "public" : "private");
jamescmaki 5:72d4d95e1d42 272 if ((mdot_ret = mdot_radio->setPublicNetwork(public_net)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 273 log_error(mdot_radio, "failed to set Network Mode", mdot_ret);
jamescmaki 5:72d4d95e1d42 274 }
falingtrea 2:75adc72aa6a0 275
jamescmaki 5:72d4d95e1d42 276 /*
jamescmaki 5:72d4d95e1d42 277 * Frequency sub-band is valid for NAM only and for Private networks should be set to a value
jamescmaki 5:72d4d95e1d42 278 * between 1-8 that matches the the LoRa gateway setting. Public networks use sub-band 0 only.
jamescmaki 5:72d4d95e1d42 279 * This function can be commented out for EU networks
jamescmaki 5:72d4d95e1d42 280 */
falingtrea 0:bdd16076aaa5 281 printf("setting frequency sub band\r\n");
falingtrea 0:bdd16076aaa5 282 if ((mdot_ret = mdot_radio->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
falingtrea 0:bdd16076aaa5 283 log_error(mdot_radio, "failed to set frequency sub band", mdot_ret);
falingtrea 0:bdd16076aaa5 284 }
falingtrea 0:bdd16076aaa5 285
falingtrea 0:bdd16076aaa5 286 printf("setting network name\r\n");
jamescmaki 5:72d4d95e1d42 287 if (public_net) {
jamescmaki 5:72d4d95e1d42 288 if ((mdot_ret = mdot_radio->setNetworkId(config_app_id)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 289 log_error(mdot_radio, "failed to set network name", mdot_ret);
jamescmaki 5:72d4d95e1d42 290 }
jamescmaki 5:72d4d95e1d42 291 } else {
jamescmaki 5:72d4d95e1d42 292 if ((mdot_ret = mdot_radio->setNetworkName(config_network_name)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 293 log_error(mdot_radio, "failed to set network name", mdot_ret);
jamescmaki 5:72d4d95e1d42 294 }
falingtrea 0:bdd16076aaa5 295 }
falingtrea 0:bdd16076aaa5 296
falingtrea 0:bdd16076aaa5 297 printf("setting network password\r\n");
jamescmaki 5:72d4d95e1d42 298 if (public_net) {
jamescmaki 5:72d4d95e1d42 299 if ((mdot_ret = mdot_radio->setNetworkKey(config_app_key)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 300 log_error(mdot_radio, "failed to set network key", mdot_ret);
jamescmaki 5:72d4d95e1d42 301 }
jamescmaki 5:72d4d95e1d42 302 } else {
jamescmaki 5:72d4d95e1d42 303 if ((mdot_ret = mdot_radio->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 304 log_error(mdot_radio, "failed to set network pass phrase", mdot_ret);
jamescmaki 5:72d4d95e1d42 305 }
falingtrea 0:bdd16076aaa5 306 }
falingtrea 0:bdd16076aaa5 307
falingtrea 0:bdd16076aaa5 308 // attempt to join the network
falingtrea 0:bdd16076aaa5 309 printf("joining network\r\n");
falingtrea 2:75adc72aa6a0 310 while (((mdot_ret = mdot_radio->joinNetwork()) != mDot::MDOT_OK) && (!exit_program)) {
falingtrea 0:bdd16076aaa5 311 log_error(mdot_radio,"failed to join network:", mdot_ret);
falingtrea 0:bdd16076aaa5 312 if (mdot_radio->getFrequencyBand() == mDot::FB_868){
jamescmaki 5:72d4d95e1d42 313 mdot_ret = mdot_radio->getNextTxMs();
jamescmaki 5:72d4d95e1d42 314 } else {
jamescmaki 5:72d4d95e1d42 315 mdot_ret = 0;
jamescmaki 5:72d4d95e1d42 316 }
falingtrea 0:bdd16076aaa5 317 printf("delay = %lu\n\r",mdot_ret);
falingtrea 0:bdd16076aaa5 318 osDelay(mdot_ret + 1);
falingtrea 0:bdd16076aaa5 319 }
falingtrea 2:75adc72aa6a0 320
falingtrea 2:75adc72aa6a0 321 /*
falingtrea 2:75adc72aa6a0 322 * Check for PB1 press during network join attempt
falingtrea 2:75adc72aa6a0 323 */
falingtrea 2:75adc72aa6a0 324 if (exit_program) {
falingtrea 2:75adc72aa6a0 325 printf("Exiting program\n\r");
falingtrea 2:75adc72aa6a0 326 evbLCD->clearBuffer();
falingtrea 2:75adc72aa6a0 327 sprintf(txtstr,"Exiting Program");
falingtrea 2:75adc72aa6a0 328 evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 329 exit(1);
falingtrea 2:75adc72aa6a0 330 }
falingtrea 2:75adc72aa6a0 331
falingtrea 0:bdd16076aaa5 332 } else {
falingtrea 0:bdd16076aaa5 333 printf("radio setup failed\n\r");
falingtrea 0:bdd16076aaa5 334 //exit(1);
falingtrea 0:bdd16076aaa5 335 }
falingtrea 0:bdd16076aaa5 336
falingtrea 0:bdd16076aaa5 337 osDelay(200);
falingtrea 0:bdd16076aaa5 338 evbBackLight->setPWM(NCP5623B::LED_3,16); // enable LED2 on EVB and set to 50% PWM
falingtrea 0:bdd16076aaa5 339
falingtrea 2:75adc72aa6a0 340 // sets LED2 to 50% max current
falingtrea 0:bdd16076aaa5 341 evbBackLight->setLEDCurrent(16);
falingtrea 0:bdd16076aaa5 342
falingtrea 0:bdd16076aaa5 343 printf("Start of Test\n\r");
falingtrea 0:bdd16076aaa5 344
jamescmaki 5:72d4d95e1d42 345 osDelay (500); // allows other threads to process
falingtrea 2:75adc72aa6a0 346 printf("shutdown LED:\n\r");
falingtrea 2:75adc72aa6a0 347 evbBackLight->shutdown();
falingtrea 0:bdd16076aaa5 348
jamescmaki 5:72d4d95e1d42 349 osDelay (500); // allows other threads to process
falingtrea 0:bdd16076aaa5 350 printf("Turn on LED2\n\r");
falingtrea 0:bdd16076aaa5 351 evbBackLight->setLEDCurrent(16);
falingtrea 0:bdd16076aaa5 352
falingtrea 0:bdd16076aaa5 353 data = evbAccel->getWhoAmI();
falingtrea 0:bdd16076aaa5 354 printf("Accelerometer who_am_i value = %x \n\r", data);
falingtrea 0:bdd16076aaa5 355
falingtrea 0:bdd16076aaa5 356 result = evbAccel->getStatus();
falingtrea 0:bdd16076aaa5 357 printf("status byte = %x \n\r", result);
falingtrea 0:bdd16076aaa5 358
falingtrea 0:bdd16076aaa5 359 printf("Barometer who_am_i check = %s \n\r", evbBaro->testWhoAmI() ? "TRUE" : "FALSE");
falingtrea 0:bdd16076aaa5 360
falingtrea 0:bdd16076aaa5 361 result = evbBaro->getStatus();
falingtrea 0:bdd16076aaa5 362 printf("status byte = %x \n\r", result);
falingtrea 0:bdd16076aaa5 363
falingtrea 0:bdd16076aaa5 364 /*
falingtrea 0:bdd16076aaa5 365 * Setup the Accelerometer for 8g range, 14 bit resolution, Noise reduction off, sample rate 1.56 Hz
falingtrea 0:bdd16076aaa5 366 * normal oversample mode, High pass filter off
falingtrea 0:bdd16076aaa5 367 */
falingtrea 0:bdd16076aaa5 368 evbAccel->setCommonParameters(MMA845x::RANGE_8g,MMA845x::RES_MAX,MMA845x::LN_OFF,
falingtrea 0:bdd16076aaa5 369 MMA845x::DR_1_56,MMA845x::OS_NORMAL,MMA845x::HPF_OFF );
falingtrea 0:bdd16076aaa5 370
falingtrea 0:bdd16076aaa5 371 /*
falingtrea 0:bdd16076aaa5 372 * Setup the Barometric sensor for post processed Ambient pressure, 4 samples per data acquisition.
falingtrea 0:bdd16076aaa5 373 * and a sample taken every second when in active mode
falingtrea 0:bdd16076aaa5 374 */
falingtrea 0:bdd16076aaa5 375 evbBaro->setParameters(MPL3115A2::DATA_NORMAL, MPL3115A2::DM_BAROMETER, MPL3115A2::OR_16,
falingtrea 0:bdd16076aaa5 376 MPL3115A2::AT_1);
falingtrea 0:bdd16076aaa5 377 /*
falingtrea 0:bdd16076aaa5 378 * Setup the Ambient Light Sensor for continuous Ambient Light Sensing, 16 bit resolution,
falingtrea 0:bdd16076aaa5 379 * and 16000 lux range
falingtrea 0:bdd16076aaa5 380 */
falingtrea 0:bdd16076aaa5 381
falingtrea 0:bdd16076aaa5 382 evbAmbLight->setMode(ISL29011::ALS_CONT);
falingtrea 0:bdd16076aaa5 383 evbAmbLight->setResolution(ISL29011::ADC_16BIT);
falingtrea 0:bdd16076aaa5 384 evbAmbLight->setRange(ISL29011::RNG_16000);
falingtrea 0:bdd16076aaa5 385
falingtrea 0:bdd16076aaa5 386 /*
falingtrea 0:bdd16076aaa5 387 * Set the accelerometer for active mode
falingtrea 0:bdd16076aaa5 388 */
falingtrea 0:bdd16076aaa5 389 evbAccel->activeMode();
falingtrea 0:bdd16076aaa5 390
falingtrea 0:bdd16076aaa5 391 /*
falingtrea 0:bdd16076aaa5 392 * Clear the min-max registers in the Barometric Sensor
falingtrea 0:bdd16076aaa5 393 */
falingtrea 0:bdd16076aaa5 394 evbBaro->clearMinMaxRegs();
falingtrea 0:bdd16076aaa5 395
falingtrea 0:bdd16076aaa5 396 evbBackLight->setLEDCurrent(0);
falingtrea 0:bdd16076aaa5 397
falingtrea 0:bdd16076aaa5 398 /*
falingtrea 2:75adc72aa6a0 399 * Check for PB1 press during network join attempt
falingtrea 2:75adc72aa6a0 400 */
falingtrea 2:75adc72aa6a0 401 if (exit_program) {
falingtrea 2:75adc72aa6a0 402 printf("Exiting program\n\r");
falingtrea 2:75adc72aa6a0 403 evbLCD->clearBuffer();
falingtrea 2:75adc72aa6a0 404 sprintf(txtstr,"Exiting Program");
falingtrea 2:75adc72aa6a0 405 evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 406 exit(1);
falingtrea 2:75adc72aa6a0 407 }
falingtrea 2:75adc72aa6a0 408
falingtrea 2:75adc72aa6a0 409 /*
falingtrea 0:bdd16076aaa5 410 * Main data acquisition loop
falingtrea 0:bdd16076aaa5 411 */
falingtrea 0:bdd16076aaa5 412 pckt_time = 10;
falingtrea 0:bdd16076aaa5 413 i = 0;
falingtrea 0:bdd16076aaa5 414
jamescmaki 5:72d4d95e1d42 415 if (!senet_demo) {
jamescmaki 5:72d4d95e1d42 416 lora_pl.clear();
jamescmaki 5:72d4d95e1d42 417 lora_pl.push_back(19);
jamescmaki 5:72d4d95e1d42 418 lora_pl.push_back(strlen(m2x_device));
jamescmaki 5:72d4d95e1d42 419 lora_pl.insert(lora_pl.end(), m2x_device, m2x_device + strlen(m2x_device));
jamescmaki 5:72d4d95e1d42 420 while ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 421 log_error(mdot_radio, "Failed to register m2x_device", mdot_ret);
jamescmaki 5:72d4d95e1d42 422 osDelay(2000);
jamescmaki 5:72d4d95e1d42 423 }
jamescmaki 4:71e411fbd9ff 424
jamescmaki 5:72d4d95e1d42 425 lora_pl.clear();
jamescmaki 5:72d4d95e1d42 426 lora_pl.push_back(20);
jamescmaki 5:72d4d95e1d42 427 lora_pl.push_back(strlen(m2x_key));
jamescmaki 5:72d4d95e1d42 428 lora_pl.insert(lora_pl.end(), m2x_key, m2x_key + strlen(m2x_key));
jamescmaki 5:72d4d95e1d42 429 while ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 430 log_error(mdot_radio, "Failed to register m2x_key", mdot_ret);
jamescmaki 5:72d4d95e1d42 431 osDelay(2000);
jamescmaki 5:72d4d95e1d42 432 }
jamescmaki 4:71e411fbd9ff 433 }
jamescmaki 4:71e411fbd9ff 434
falingtrea 0:bdd16076aaa5 435 do {
falingtrea 0:bdd16076aaa5 436 evbLCD->startUpdate();
falingtrea 0:bdd16076aaa5 437 evbLCD->clearBuffer();
falingtrea 0:bdd16076aaa5 438
falingtrea 0:bdd16076aaa5 439 /*
falingtrea 0:bdd16076aaa5 440 * Test Accelerometer XYZ data ready bit to see if acquisition complete
falingtrea 0:bdd16076aaa5 441 */
falingtrea 0:bdd16076aaa5 442 do {
jamescmaki 5:72d4d95e1d42 443 osDelay(100); // allows other threads to process
falingtrea 0:bdd16076aaa5 444 result = evbAccel->getStatus();
falingtrea 0:bdd16076aaa5 445 } while ((result & MMA845x::XYZDR) == 0 );
falingtrea 0:bdd16076aaa5 446
falingtrea 0:bdd16076aaa5 447 /*
falingtrea 0:bdd16076aaa5 448 * Retrieve and print out accelerometer data
falingtrea 0:bdd16076aaa5 449 */
falingtrea 0:bdd16076aaa5 450 accel_data = evbAccel->getXYZ();
falingtrea 0:bdd16076aaa5 451
falingtrea 0:bdd16076aaa5 452 sprintf(txtstr,"Accelerometer");
falingtrea 0:bdd16076aaa5 453 evbLCD->writeText(0,0,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 454 sprintf(txtstr, "x = %d", accel_data._x);
falingtrea 0:bdd16076aaa5 455 evbLCD->writeText(20,1,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 456 sprintf(txtstr, "y = %d", accel_data._y);
falingtrea 0:bdd16076aaa5 457 evbLCD->writeText(20,2,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 458 sprintf(txtstr, "z = %d", accel_data._z );
falingtrea 0:bdd16076aaa5 459 evbLCD->writeText(20,3,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 460
jamescmaki 5:72d4d95e1d42 461 // convert to simple position value for use in send/recv
jamescmaki 5:72d4d95e1d42 462 if (accel_data._x > 500 && accel_data._z < 500) {
jamescmaki 5:72d4d95e1d42 463 position_value = 0x02;
jamescmaki 5:72d4d95e1d42 464 } else if (accel_data._x < 500 && accel_data._z > 500) {
jamescmaki 5:72d4d95e1d42 465 position_value = 0x01;
jamescmaki 5:72d4d95e1d42 466 } else {
jamescmaki 5:72d4d95e1d42 467 position_value= 0x00;
jamescmaki 5:72d4d95e1d42 468 }
jamescmaki 5:72d4d95e1d42 469
falingtrea 0:bdd16076aaa5 470 /*
falingtrea 0:bdd16076aaa5 471 * Trigger a Pressure reading
falingtrea 0:bdd16076aaa5 472 */
falingtrea 0:bdd16076aaa5 473 evbBaro->setParameters(MPL3115A2::DATA_NORMAL, MPL3115A2::DM_BAROMETER, MPL3115A2::OR_16,
falingtrea 0:bdd16076aaa5 474 MPL3115A2::AT_1);
falingtrea 0:bdd16076aaa5 475 evbBaro->triggerOneShot();
falingtrea 0:bdd16076aaa5 476
falingtrea 0:bdd16076aaa5 477 /*
falingtrea 0:bdd16076aaa5 478 * Test barometer device status to see if acquisition is complete
falingtrea 0:bdd16076aaa5 479 */
falingtrea 0:bdd16076aaa5 480 do {
jamescmaki 5:72d4d95e1d42 481 osDelay(100); // allows other threads to process
falingtrea 0:bdd16076aaa5 482 result = evbBaro->getStatus();
falingtrea 0:bdd16076aaa5 483 } while ((result & MPL3115A2::PTDR) == 0 );
falingtrea 0:bdd16076aaa5 484
falingtrea 0:bdd16076aaa5 485 /*
falingtrea 0:bdd16076aaa5 486 * Retrieve and print out barometric pressure
falingtrea 0:bdd16076aaa5 487 */
falingtrea 0:bdd16076aaa5 488 pressure = evbBaro->getBaroData() >> 12; // convert 32 bit signed to 20 bit unsigned value
jamescmaki 5:72d4d95e1d42 489 num_whole = pressure >> 2; // 18 bit integer significant
jamescmaki 5:72d4d95e1d42 490 num_frac = (pressure & 0x3) * 25; // 2 bit fractional 0.25 per bit
falingtrea 0:bdd16076aaa5 491 sprintf(txtstr,"Press=%ld.%02d Pa", num_whole, num_frac);
falingtrea 0:bdd16076aaa5 492 evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 493
falingtrea 0:bdd16076aaa5 494 /*
falingtrea 0:bdd16076aaa5 495 * Trigger a Altitude reading
falingtrea 0:bdd16076aaa5 496 */
falingtrea 0:bdd16076aaa5 497 evbBaro->setParameters(MPL3115A2::DATA_NORMAL, MPL3115A2::DM_ALTIMETER, MPL3115A2::OR_16,
falingtrea 0:bdd16076aaa5 498 MPL3115A2::AT_1);
falingtrea 0:bdd16076aaa5 499 evbBaro->triggerOneShot();
falingtrea 0:bdd16076aaa5 500
falingtrea 0:bdd16076aaa5 501 /*
falingtrea 0:bdd16076aaa5 502 * Test barometer device status to see if acquisition is complete
falingtrea 0:bdd16076aaa5 503 */
falingtrea 0:bdd16076aaa5 504 do {
jamescmaki 5:72d4d95e1d42 505 osDelay(100); // allows other threads to process
falingtrea 0:bdd16076aaa5 506 result = evbBaro->getStatus();
falingtrea 0:bdd16076aaa5 507 } while ((result & MPL3115A2::PTDR) == 0 );
falingtrea 0:bdd16076aaa5 508
falingtrea 0:bdd16076aaa5 509 /*
falingtrea 0:bdd16076aaa5 510 * Retrieve and print out altitude and temperature
falingtrea 0:bdd16076aaa5 511 */
falingtrea 0:bdd16076aaa5 512 baro_data = evbBaro->getAllData(false);
jamescmaki 5:72d4d95e1d42 513 baro_data._baro /= 4096; // convert 32 bit signed to 20 bit signed value
jamescmaki 5:72d4d95e1d42 514 num_whole = baro_data._baro / 16; // 18 bit signed significant integer
jamescmaki 5:72d4d95e1d42 515 num_frac = (baro_data._baro & 0xF) * 625 / 100; // 4 bit fractional .0625 per bit
falingtrea 0:bdd16076aaa5 516 sprintf(txtstr,"Alti=%ld.%03d m", num_whole, num_frac);
falingtrea 0:bdd16076aaa5 517 evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
jamescmaki 5:72d4d95e1d42 518 num_whole = baro_data._temp / 16; // 8 bit signed significant integer
jamescmaki 5:72d4d95e1d42 519 num_frac = (baro_data._temp & 0x0F) * 625 / 10; // 4 bit fractional .0625 per bit
falingtrea 0:bdd16076aaa5 520 sprintf(txtstr,"Temp=%ld.%03d C", num_whole, num_frac);
falingtrea 0:bdd16076aaa5 521 evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 522
falingtrea 0:bdd16076aaa5 523 /*
falingtrea 0:bdd16076aaa5 524 * retrieve and print out Ambient Light level
falingtrea 0:bdd16076aaa5 525 */
falingtrea 0:bdd16076aaa5 526 lux_data = evbAmbLight->getData();
jamescmaki 5:72d4d95e1d42 527 num_whole = lux_data * 24 / 100; // 16000 lux full scale .24 lux per bit
falingtrea 0:bdd16076aaa5 528 num_frac = lux_data * 24 % 100;
jamescmaki 4:71e411fbd9ff 529 sprintf(txtstr, "Light=%ld.%02d lux", num_whole, num_frac);
falingtrea 0:bdd16076aaa5 530 evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
falingtrea 0:bdd16076aaa5 531
falingtrea 0:bdd16076aaa5 532 evbLCD->endUpdate();
falingtrea 0:bdd16076aaa5 533 printf("finished iteration %d\n\r",(++i));
falingtrea 0:bdd16076aaa5 534
falingtrea 0:bdd16076aaa5 535 if (i % pckt_time == 0) { // check packet counter will send packet every 2-5-10 data collection loops
jamescmaki 4:71e411fbd9ff 536 lora_pl.clear();
jamescmaki 5:72d4d95e1d42 537
jamescmaki 5:72d4d95e1d42 538 if (senet_demo) {
jamescmaki 5:72d4d95e1d42 539 // Position Value
jamescmaki 5:72d4d95e1d42 540 lora_pl.push_back(0);
jamescmaki 5:72d4d95e1d42 541 lora_pl.push_back(position_value);
jamescmaki 5:72d4d95e1d42 542 } else {
jamescmaki 5:72d4d95e1d42 543 // Current Acceleration 3-Axis Value
jamescmaki 5:72d4d95e1d42 544 lora_pl.push_back(14);
jamescmaki 5:72d4d95e1d42 545 lora_pl.push_back(6);
jamescmaki 5:72d4d95e1d42 546 converts.f_s = accel_data._x;
jamescmaki 5:72d4d95e1d42 547 lora_pl.push_back(converts.t_u[1]);
jamescmaki 5:72d4d95e1d42 548 lora_pl.push_back(converts.t_u[0]);
jamescmaki 5:72d4d95e1d42 549 converts.f_s = accel_data._y;
jamescmaki 5:72d4d95e1d42 550 lora_pl.push_back(converts.t_u[1]);
jamescmaki 5:72d4d95e1d42 551 lora_pl.push_back(converts.t_u[0]);
jamescmaki 5:72d4d95e1d42 552 converts.f_s = accel_data._z;
jamescmaki 5:72d4d95e1d42 553 lora_pl.push_back(converts.t_u[1]);
jamescmaki 5:72d4d95e1d42 554 lora_pl.push_back(converts.t_u[0]);
jamescmaki 5:72d4d95e1d42 555 // Current Pressure Value
jamescmaki 5:72d4d95e1d42 556 lora_pl.push_back(8);
jamescmaki 5:72d4d95e1d42 557 lora_pl.push_back(3);
jamescmaki 5:72d4d95e1d42 558 convertl.f_u = pressure;
jamescmaki 5:72d4d95e1d42 559 lora_pl.push_back(convertl.t_u[2]);
jamescmaki 5:72d4d95e1d42 560 lora_pl.push_back(convertl.t_u[1]);
jamescmaki 5:72d4d95e1d42 561 lora_pl.push_back(convertl.t_u[0]);
jamescmaki 5:72d4d95e1d42 562 // Current Ambient Light Value
jamescmaki 5:72d4d95e1d42 563 lora_pl.push_back(5);
jamescmaki 5:72d4d95e1d42 564 lora_pl.push_back(2);
jamescmaki 5:72d4d95e1d42 565 converts.f_u = lux_data;
jamescmaki 5:72d4d95e1d42 566 lora_pl.push_back(converts.t_u[1]);
jamescmaki 5:72d4d95e1d42 567 lora_pl.push_back(converts.t_u[0]);
jamescmaki 5:72d4d95e1d42 568 // Current Temperature Value
jamescmaki 5:72d4d95e1d42 569 lora_pl.push_back(11);
jamescmaki 5:72d4d95e1d42 570 lora_pl.push_back(2);
jamescmaki 5:72d4d95e1d42 571 converts.f_s = baro_data._temp;
jamescmaki 5:72d4d95e1d42 572 lora_pl.push_back(converts.t_u[1]);
jamescmaki 5:72d4d95e1d42 573 lora_pl.push_back(converts.t_u[0]);
jamescmaki 5:72d4d95e1d42 574 }
falingtrea 0:bdd16076aaa5 575
jamescmaki 4:71e411fbd9ff 576 if ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
falingtrea 0:bdd16076aaa5 577 log_error(mdot_radio, "failed to send", mdot_ret);
falingtrea 0:bdd16076aaa5 578 } else {
falingtrea 0:bdd16076aaa5 579 printf("successfully sent data to gateway\r\n");
jamescmaki 5:72d4d95e1d42 580
jamescmaki 5:72d4d95e1d42 581 if (senet_demo) {
jamescmaki 5:72d4d95e1d42 582 lora_pl.clear();
jamescmaki 5:72d4d95e1d42 583 if ((mdot_ret = mdot_radio->recv(lora_pl)) != mDot::MDOT_OK) {
jamescmaki 5:72d4d95e1d42 584 log_error(mdot_radio, "failed to recv:", mdot_ret);
jamescmaki 5:72d4d95e1d42 585 } else {
jamescmaki 5:72d4d95e1d42 586 printf("recv data: ");
jamescmaki 5:72d4d95e1d42 587 for(int i = 0;i < lora_pl.size();i++) {
jamescmaki 5:72d4d95e1d42 588 printf("%02X", lora_pl[i]);
jamescmaki 5:72d4d95e1d42 589 }
jamescmaki 5:72d4d95e1d42 590 printf("\r\n");
jamescmaki 5:72d4d95e1d42 591 if(lora_pl[0] == position_value) {
jamescmaki 5:72d4d95e1d42 592 evbBackLight->setLEDCurrent(16);
jamescmaki 5:72d4d95e1d42 593 } else {
jamescmaki 5:72d4d95e1d42 594 evbBackLight->setLEDCurrent(0);
jamescmaki 5:72d4d95e1d42 595 }
jamescmaki 5:72d4d95e1d42 596 }
jamescmaki 5:72d4d95e1d42 597 }
falingtrea 0:bdd16076aaa5 598 }
falingtrea 0:bdd16076aaa5 599 }
falingtrea 2:75adc72aa6a0 600 } while(!exit_program && (i < 65000));
falingtrea 0:bdd16076aaa5 601
falingtrea 0:bdd16076aaa5 602 evbBaro->triggerOneShot();
falingtrea 0:bdd16076aaa5 603
falingtrea 0:bdd16076aaa5 604 do {
jamescmaki 5:72d4d95e1d42 605 osDelay(200); // allows other threads to process
falingtrea 0:bdd16076aaa5 606 result = evbBaro->getStatus();
falingtrea 0:bdd16076aaa5 607 } while ((result & MPL3115A2::PTDR) == 0 );
falingtrea 0:bdd16076aaa5 608
falingtrea 0:bdd16076aaa5 609 baro_data = evbBaro->getAllData(true);
falingtrea 0:bdd16076aaa5 610 printf ("minBaro=%ld maxBaro=%ld minTemp=%d maxTemp=%d\n\r", baro_data._minbaro, baro_data._maxbaro,
falingtrea 0:bdd16076aaa5 611 baro_data._mintemp, baro_data._maxtemp);
falingtrea 0:bdd16076aaa5 612
falingtrea 0:bdd16076aaa5 613 printf("End of Test\n\r");
falingtrea 0:bdd16076aaa5 614
falingtrea 2:75adc72aa6a0 615 evbLCD->clearBuffer();
falingtrea 2:75adc72aa6a0 616 sprintf(txtstr,"Exiting Program");
falingtrea 2:75adc72aa6a0 617 evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
falingtrea 2:75adc72aa6a0 618
falingtrea 0:bdd16076aaa5 619 }
falingtrea 0:bdd16076aaa5 620
falingtrea 0:bdd16076aaa5 621 /*
falingtrea 3:68e974f5f532 622 * Sets pb1_low flag. Slag is cleared in pb1_debounce thread
falingtrea 0:bdd16076aaa5 623 */
falingtrea 0:bdd16076aaa5 624 void pb1ISR(void)
falingtrea 0:bdd16076aaa5 625 {
jamescmaki 5:72d4d95e1d42 626 if (!pb1_low)
jamescmaki 5:72d4d95e1d42 627 pb1_low = true;
falingtrea 3:68e974f5f532 628 }
falingtrea 0:bdd16076aaa5 629
falingtrea 3:68e974f5f532 630 /*
falingtrea 3:68e974f5f532 631 * Debounces pb1. Also exits program if pushbutton 1 is pressed
falingtrea 3:68e974f5f532 632 */
falingtrea 3:68e974f5f532 633 void pb1_debounce(void const *args)
falingtrea 3:68e974f5f532 634 {
falingtrea 3:68e974f5f532 635 static uint8_t count = 0;
falingtrea 3:68e974f5f532 636
falingtrea 3:68e974f5f532 637 while (true) {
jamescmaki 5:72d4d95e1d42 638 if (pb1_low && (mDot08 == 0)) {
jamescmaki 5:72d4d95e1d42 639 count++;
jamescmaki 5:72d4d95e1d42 640 } else {
jamescmaki 5:72d4d95e1d42 641 count = 0;
jamescmaki 5:72d4d95e1d42 642 pb1_low = false;
jamescmaki 5:72d4d95e1d42 643 }
falingtrea 3:68e974f5f532 644
jamescmaki 5:72d4d95e1d42 645 if (count == 5)
jamescmaki 5:72d4d95e1d42 646 exit_program = true;
jamescmaki 5:72d4d95e1d42 647
falingtrea 3:68e974f5f532 648 Thread::wait(5);
falingtrea 3:68e974f5f532 649 }
falingtrea 0:bdd16076aaa5 650 }
falingtrea 0:bdd16076aaa5 651
falingtrea 0:bdd16076aaa5 652 /*
falingtrea 3:68e974f5f532 653 * Sets pb2_low flag. Flag is cleared in pb2_debounce thread
falingtrea 0:bdd16076aaa5 654 */
falingtrea 0:bdd16076aaa5 655 void pb2ISR(void)
falingtrea 0:bdd16076aaa5 656 {
jamescmaki 5:72d4d95e1d42 657 if (!pb2_low)
jamescmaki 5:72d4d95e1d42 658 pb2_low = true;
falingtrea 3:68e974f5f532 659 }
falingtrea 0:bdd16076aaa5 660
falingtrea 3:68e974f5f532 661 /*
falingtrea 3:68e974f5f532 662 * Debounces pb2. Also changes packet transmit time to every other,
falingtrea 3:68e974f5f532 663 * every fifth, or every tenth sample when SW2 pushed
falingtrea 3:68e974f5f532 664 * Also triggers a thread to transmit a configuration packet
falingtrea 3:68e974f5f532 665 */
falingtrea 3:68e974f5f532 666 void pb2_debounce(void const *args)
falingtrea 3:68e974f5f532 667 {
falingtrea 3:68e974f5f532 668 static uint8_t count = 0;
falingtrea 3:68e974f5f532 669
falingtrea 3:68e974f5f532 670 while (true) {
jamescmaki 5:72d4d95e1d42 671 if (pb2_low && (mDot09 == 0)) {
jamescmaki 5:72d4d95e1d42 672 count++;
jamescmaki 5:72d4d95e1d42 673 } else {
jamescmaki 5:72d4d95e1d42 674 count = 0;
jamescmaki 5:72d4d95e1d42 675 pb2_low = false;
falingtrea 3:68e974f5f532 676 }
falingtrea 0:bdd16076aaa5 677
jamescmaki 5:72d4d95e1d42 678 if (count == 5) {
jamescmaki 5:72d4d95e1d42 679 if (pckt_time >= 5)
jamescmaki 5:72d4d95e1d42 680 pckt_time /= 2;
jamescmaki 5:72d4d95e1d42 681 else pckt_time = 20;
falingtrea 3:68e974f5f532 682
jamescmaki 5:72d4d95e1d42 683 thread_3->signal_set(0x10); // signal config_pkt_xmit to send packet
jamescmaki 5:72d4d95e1d42 684 }
jamescmaki 5:72d4d95e1d42 685
falingtrea 3:68e974f5f532 686 Thread::wait(5);
jamescmaki 5:72d4d95e1d42 687 }
falingtrea 3:68e974f5f532 688 }
falingtrea 0:bdd16076aaa5 689
falingtrea 2:75adc72aa6a0 690 /*
falingtrea 2:75adc72aa6a0 691 * Function that print clear text verion of mDot errors
falingtrea 2:75adc72aa6a0 692 */
falingtrea 0:bdd16076aaa5 693 void log_error(mDot* dot, const char* msg, int32_t retval)
falingtrea 0:bdd16076aaa5 694 {
falingtrea 0:bdd16076aaa5 695 printf("%s - %ld:%s, %s\r\n", msg, retval, mDot::getReturnCodeString(retval).c_str(), dot->getLastError().c_str());
falingtrea 0:bdd16076aaa5 696 }
falingtrea 0:bdd16076aaa5 697
falingtrea 2:75adc72aa6a0 698 /*
falingtrea 2:75adc72aa6a0 699 * Thread that is triggered by SW2 ISR. Sends a packet to the LoRa server with the new Packet Transmission time setting
falingtrea 2:75adc72aa6a0 700 */
falingtrea 0:bdd16076aaa5 701 void config_pkt_xmit (void const *args)
falingtrea 0:bdd16076aaa5 702 {
jamescmaki 4:71e411fbd9ff 703 std::vector<uint8_t> lora_pl;
falingtrea 0:bdd16076aaa5 704
falingtrea 0:bdd16076aaa5 705 while (true) {
jamescmaki 5:72d4d95e1d42 706 Thread::signal_wait(0x10); // wait for pb2ISR to signal send
jamescmaki 5:72d4d95e1d42 707
jamescmaki 4:71e411fbd9ff 708 lora_pl.clear();
jamescmaki 5:72d4d95e1d42 709 lora_pl.push_back(15); // key for Configuration data (packet transmission timer)
jamescmaki 4:71e411fbd9ff 710 lora_pl.push_back(1);
jamescmaki 4:71e411fbd9ff 711 lora_pl.push_back(pckt_time);
falingtrea 0:bdd16076aaa5 712
jamescmaki 4:71e411fbd9ff 713 if ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
falingtrea 0:bdd16076aaa5 714 log_error(mdot_radio, "failed to send config data", mdot_ret);
falingtrea 0:bdd16076aaa5 715 } else {
falingtrea 0:bdd16076aaa5 716 printf("sent config data to gateway\r\n");
falingtrea 0:bdd16076aaa5 717 }
falingtrea 0:bdd16076aaa5 718 }
jamescmaki 5:72d4d95e1d42 719 }