Frank Vannieuwkerke / Mbed 2 deprecated Wi-Go_IOT_Demo_MKII

Dependencies:   NVIC_set_all_priorities mbed cc3000_hostdriver_mbedsocket TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger

Committer:
frankvnk
Date:
Wed Oct 23 12:01:30 2013 +0000
Revision:
1:99bfc8d68fd3
Parent:
0:ebcd5ecff2cf
Child:
2:dac99c6c56d3
Webserver functional using ProcessWlanInterrupt flag instead of NVIC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 1:99bfc8d68fd3 1 /* mbed Microcontroller Library
frankvnk 1:99bfc8d68fd3 2 * Copyright (c) 2006-2013 ARM Limited
frankvnk 1:99bfc8d68fd3 3 *
frankvnk 1:99bfc8d68fd3 4 * Licensed under the Apache License, Version 2.0 (the "License");
frankvnk 1:99bfc8d68fd3 5 * you may not use this file except in compliance with the License.
frankvnk 1:99bfc8d68fd3 6 * You may obtain a copy of the License at
frankvnk 1:99bfc8d68fd3 7 *
frankvnk 1:99bfc8d68fd3 8 * http://www.apache.org/licenses/LICENSE-2.0
frankvnk 1:99bfc8d68fd3 9 *
frankvnk 1:99bfc8d68fd3 10 * Unless required by applicable law or agreed to in writing, software
frankvnk 1:99bfc8d68fd3 11 * distributed under the License is distributed on an "AS IS" BASIS,
frankvnk 1:99bfc8d68fd3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
frankvnk 1:99bfc8d68fd3 13 * See the License for the specific language governing permissions and
frankvnk 1:99bfc8d68fd3 14 * limitations under the License.
frankvnk 1:99bfc8d68fd3 15 */
frankvnk 1:99bfc8d68fd3 16 #include "mbed.h"
frankvnk 1:99bfc8d68fd3 17 #include "cc3000.h"
frankvnk 1:99bfc8d68fd3 18 #include "main.h"
frankvnk 1:99bfc8d68fd3 19
frankvnk 1:99bfc8d68fd3 20 #include "demo.h"
frankvnk 1:99bfc8d68fd3 21
frankvnk 1:99bfc8d68fd3 22 using namespace mbed_cc3000;
frankvnk 1:99bfc8d68fd3 23
frankvnk 1:99bfc8d68fd3 24 tUserFS user_info;
frankvnk 1:99bfc8d68fd3 25
frankvnk 1:99bfc8d68fd3 26 /* cc3000 module declaration specific for user's board. Check also init() */
frankvnk 1:99bfc8d68fd3 27 #if (MY_BOARD == WIGO)
frankvnk 1:99bfc8d68fd3 28
frankvnk 1:99bfc8d68fd3 29 #include "defLED.h"
frankvnk 1:99bfc8d68fd3 30 #include "TSISensor.h"
frankvnk 1:99bfc8d68fd3 31 #include "TEMT6200.h"
frankvnk 1:99bfc8d68fd3 32 #include "WiGo_BattCharger.h"
frankvnk 1:99bfc8d68fd3 33 #include "MMA8451Q.h"
frankvnk 1:99bfc8d68fd3 34 #include "MAG3110.h"
frankvnk 1:99bfc8d68fd3 35 #include "MPL3115A2.h"
frankvnk 1:99bfc8d68fd3 36 #include "Wi-Go_eCompass_Lib_V3.h"
frankvnk 1:99bfc8d68fd3 37 #include "demo.h"
frankvnk 1:99bfc8d68fd3 38 //#include "run_exosite.h"
frankvnk 1:99bfc8d68fd3 39
frankvnk 1:99bfc8d68fd3 40 #define FCOUNTSPERG 4096.0F // sensor specific: MMA8451 provide 4096 counts / g in 2g mode
frankvnk 1:99bfc8d68fd3 41 #define FCOUNTSPERUT 10.0F // sensor specific: MAG3110 provide 10 counts / uT
frankvnk 1:99bfc8d68fd3 42
frankvnk 1:99bfc8d68fd3 43 #define BATT_0 0.53
frankvnk 1:99bfc8d68fd3 44 #define BATT_100 0.63
frankvnk 1:99bfc8d68fd3 45
frankvnk 1:99bfc8d68fd3 46 DigitalOut ledr (LED_RED);
frankvnk 1:99bfc8d68fd3 47 DigitalOut ledg (LED_GREEN);
frankvnk 1:99bfc8d68fd3 48 DigitalOut ledb (LED_BLUE);
frankvnk 1:99bfc8d68fd3 49 DigitalOut led1 (PTB8);
frankvnk 1:99bfc8d68fd3 50 DigitalOut led2 (PTB9);
frankvnk 1:99bfc8d68fd3 51 DigitalOut led3 (PTB10);
frankvnk 1:99bfc8d68fd3 52
frankvnk 1:99bfc8d68fd3 53 cc3000 wifi(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
frankvnk 1:99bfc8d68fd3 54 Serial pc(USBTX, USBRX);
frankvnk 1:99bfc8d68fd3 55
frankvnk 1:99bfc8d68fd3 56 // Slide sensor
frankvnk 1:99bfc8d68fd3 57 TSISensor tsi;
frankvnk 1:99bfc8d68fd3 58
frankvnk 1:99bfc8d68fd3 59 // Systick
frankvnk 1:99bfc8d68fd3 60 Ticker systick;
frankvnk 1:99bfc8d68fd3 61
frankvnk 1:99bfc8d68fd3 62 // Ambient light sensor : PTD5 = enable, PTB0 = analog input
frankvnk 1:99bfc8d68fd3 63 TEMT6200 ambi(PTD5, PTB0);
frankvnk 1:99bfc8d68fd3 64
frankvnk 1:99bfc8d68fd3 65 //Wi-Go battery charger control
frankvnk 1:99bfc8d68fd3 66 WiGo_BattCharger Batt(CHRG_EN1, CHRG_EN2, CHRG_SNS_EN, CHRG_SNS, CHRG_POK, CHRG_CHG);
frankvnk 1:99bfc8d68fd3 67
frankvnk 1:99bfc8d68fd3 68 // Accelerometer
frankvnk 1:99bfc8d68fd3 69 #define MMA8451_I2C_ADDRESS (0x1d<<1)
frankvnk 1:99bfc8d68fd3 70 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
frankvnk 1:99bfc8d68fd3 71
frankvnk 1:99bfc8d68fd3 72 // Magnetometer
frankvnk 1:99bfc8d68fd3 73 MAG3110 mag(PTE0, PTE1);
frankvnk 1:99bfc8d68fd3 74
frankvnk 1:99bfc8d68fd3 75 // altimeter-Pressure-Temperature (apt)
frankvnk 1:99bfc8d68fd3 76 #define MPL3115A2_I2C_ADDRESS (0x60<<1)
frankvnk 1:99bfc8d68fd3 77 MPL3115A2 apt( PTE0, PTE1, MPL3115A2_I2C_ADDRESS);
frankvnk 1:99bfc8d68fd3 78
frankvnk 1:99bfc8d68fd3 79 volatile bool ProcessWlanInterrupt;
frankvnk 1:99bfc8d68fd3 80
frankvnk 1:99bfc8d68fd3 81 volatile int secondFlag;
frankvnk 1:99bfc8d68fd3 82 volatile int HsecondFlag;
frankvnk 1:99bfc8d68fd3 83 unsigned int seconds;
frankvnk 1:99bfc8d68fd3 84 unsigned int compass_type;
frankvnk 1:99bfc8d68fd3 85 unsigned short adc_sample3;
frankvnk 1:99bfc8d68fd3 86 float fcountperg = 1.0F / FCOUNTSPERG;
frankvnk 1:99bfc8d68fd3 87 float fcountperut = 1.0F / FCOUNTSPERUT;
frankvnk 1:99bfc8d68fd3 88 volatile unsigned char newData;
frankvnk 1:99bfc8d68fd3 89 volatile int server_running;
frankvnk 1:99bfc8d68fd3 90 axis6_t axis6;
frankvnk 1:99bfc8d68fd3 91 int do_mDNS = 0;
frankvnk 1:99bfc8d68fd3 92 //Device name - used for Smart config in order to stop the Smart phone configuration process
frankvnk 1:99bfc8d68fd3 93 char DevServname[] = "CC3000";
frankvnk 1:99bfc8d68fd3 94
frankvnk 1:99bfc8d68fd3 95 void initLEDs(void)
frankvnk 1:99bfc8d68fd3 96 {
frankvnk 1:99bfc8d68fd3 97 RED_OFF;
frankvnk 1:99bfc8d68fd3 98 GREEN_OFF;
frankvnk 1:99bfc8d68fd3 99 BLUE_OFF;
frankvnk 1:99bfc8d68fd3 100 LED_D1_OFF;
frankvnk 1:99bfc8d68fd3 101 LED_D2_OFF;
frankvnk 1:99bfc8d68fd3 102 LED_D3_OFF;
frankvnk 1:99bfc8d68fd3 103 }
frankvnk 1:99bfc8d68fd3 104
frankvnk 1:99bfc8d68fd3 105 void GreenStop(void)
frankvnk 1:99bfc8d68fd3 106 {
frankvnk 1:99bfc8d68fd3 107 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 108 while(1)
frankvnk 1:99bfc8d68fd3 109 {
frankvnk 1:99bfc8d68fd3 110 GREEN_ON;
frankvnk 1:99bfc8d68fd3 111 secondFlag = 0;
frankvnk 1:99bfc8d68fd3 112 while(!secondFlag);
frankvnk 1:99bfc8d68fd3 113 GREEN_OFF;
frankvnk 1:99bfc8d68fd3 114 secondFlag = 0;
frankvnk 1:99bfc8d68fd3 115 while(!secondFlag);
frankvnk 1:99bfc8d68fd3 116 }
frankvnk 1:99bfc8d68fd3 117 }
frankvnk 1:99bfc8d68fd3 118
frankvnk 1:99bfc8d68fd3 119 void accel_read(void)
frankvnk 1:99bfc8d68fd3 120 {
frankvnk 1:99bfc8d68fd3 121 signed short resultx, resulty, resultz;
frankvnk 1:99bfc8d68fd3 122 if(acc.isDataAvailable())
frankvnk 1:99bfc8d68fd3 123 {
frankvnk 1:99bfc8d68fd3 124 acc.getAccRawX(&resultx);
frankvnk 1:99bfc8d68fd3 125 acc.getAccRawY(&resulty);
frankvnk 1:99bfc8d68fd3 126 acc.getAccRawZ(&resultz);
frankvnk 1:99bfc8d68fd3 127 if(compass_type == NED_COMPASS)
frankvnk 1:99bfc8d68fd3 128 {
frankvnk 1:99bfc8d68fd3 129 axis6.acc_x = resultx;
frankvnk 1:99bfc8d68fd3 130 axis6.acc_y = -1 * resulty; // multiple by -1 to compensate for PCB layout
frankvnk 1:99bfc8d68fd3 131 axis6.acc_z = resultz;
frankvnk 1:99bfc8d68fd3 132 }
frankvnk 1:99bfc8d68fd3 133 if(compass_type == ANDROID_COMPASS)
frankvnk 1:99bfc8d68fd3 134 {
frankvnk 1:99bfc8d68fd3 135 axis6.acc_x = resulty; //
frankvnk 1:99bfc8d68fd3 136 axis6.acc_y = -1 * resultx;
frankvnk 1:99bfc8d68fd3 137 axis6.acc_z = resultz;
frankvnk 1:99bfc8d68fd3 138 }
frankvnk 1:99bfc8d68fd3 139 if(compass_type == WINDOWS_COMPASS)
frankvnk 1:99bfc8d68fd3 140 {
frankvnk 1:99bfc8d68fd3 141 axis6.acc_x = -1 * resulty; //
frankvnk 1:99bfc8d68fd3 142 axis6.acc_y = resultx;
frankvnk 1:99bfc8d68fd3 143 axis6.acc_z = resultz;
frankvnk 1:99bfc8d68fd3 144 }
frankvnk 1:99bfc8d68fd3 145 axis6.fax = axis6.acc_x;
frankvnk 1:99bfc8d68fd3 146 axis6.fay = axis6.acc_y;
frankvnk 1:99bfc8d68fd3 147 axis6.faz = axis6.acc_z;
frankvnk 1:99bfc8d68fd3 148 axis6.fGax = axis6.fax * fcountperg;
frankvnk 1:99bfc8d68fd3 149 axis6.fGay = axis6.fay * fcountperg;
frankvnk 1:99bfc8d68fd3 150 axis6.fGaz = axis6.faz * fcountperg;
frankvnk 1:99bfc8d68fd3 151 }
frankvnk 1:99bfc8d68fd3 152 }
frankvnk 1:99bfc8d68fd3 153
frankvnk 1:99bfc8d68fd3 154 void readTempAlt(void) // We don't use the fractional data
frankvnk 1:99bfc8d68fd3 155 {
frankvnk 1:99bfc8d68fd3 156 unsigned char raw_data[5];
frankvnk 1:99bfc8d68fd3 157 if(apt.getAllDataRaw(&raw_data[0]))
frankvnk 1:99bfc8d68fd3 158 {
frankvnk 1:99bfc8d68fd3 159 axis6.temp = raw_data[3];
frankvnk 1:99bfc8d68fd3 160 axis6.alt = ((raw_data[0] << 8) | raw_data[1]);
frankvnk 1:99bfc8d68fd3 161
frankvnk 1:99bfc8d68fd3 162 }
frankvnk 1:99bfc8d68fd3 163 }
frankvnk 1:99bfc8d68fd3 164
frankvnk 1:99bfc8d68fd3 165 void readCompass( void )
frankvnk 1:99bfc8d68fd3 166 {
frankvnk 1:99bfc8d68fd3 167 if(compass_type == NED_COMPASS)
frankvnk 1:99bfc8d68fd3 168 {
frankvnk 1:99bfc8d68fd3 169 axis6.mag_y = mag.readVal(MAG_OUT_X_MSB); // x & y swapped to compenste for PCB layout
frankvnk 1:99bfc8d68fd3 170 axis6.mag_x = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 1:99bfc8d68fd3 171 axis6.mag_z = mag.readVal(MAG_OUT_Z_MSB); //
frankvnk 1:99bfc8d68fd3 172 }
frankvnk 1:99bfc8d68fd3 173 if(compass_type == ANDROID_COMPASS)
frankvnk 1:99bfc8d68fd3 174 {
frankvnk 1:99bfc8d68fd3 175 axis6.mag_x = mag.readVal(MAG_OUT_X_MSB); //
frankvnk 1:99bfc8d68fd3 176 axis6.mag_y = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 1:99bfc8d68fd3 177 axis6.mag_z = -1 * mag.readVal(MAG_OUT_Z_MSB); // negate to reverse axis of Z to conform to Android coordinate system
frankvnk 1:99bfc8d68fd3 178 }
frankvnk 1:99bfc8d68fd3 179 if(compass_type == WINDOWS_COMPASS)
frankvnk 1:99bfc8d68fd3 180 {
frankvnk 1:99bfc8d68fd3 181 axis6.mag_x = mag.readVal(MAG_OUT_X_MSB); //
frankvnk 1:99bfc8d68fd3 182 axis6.mag_y = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 1:99bfc8d68fd3 183 axis6.mag_z = -1 * mag.readVal(MAG_OUT_Z_MSB); //
frankvnk 1:99bfc8d68fd3 184 }
frankvnk 1:99bfc8d68fd3 185 axis6.fmx = axis6.mag_x;
frankvnk 1:99bfc8d68fd3 186 axis6.fmy = axis6.mag_y;
frankvnk 1:99bfc8d68fd3 187 axis6.fmz = axis6.mag_z;
frankvnk 1:99bfc8d68fd3 188 axis6.fUTmx = axis6.fmx * fcountperut;
frankvnk 1:99bfc8d68fd3 189 axis6.fUTmy = axis6.fmy * fcountperut;
frankvnk 1:99bfc8d68fd3 190 axis6.fUTmz = axis6.fmz * fcountperut;
frankvnk 1:99bfc8d68fd3 191 }
frankvnk 1:99bfc8d68fd3 192
frankvnk 1:99bfc8d68fd3 193 void set_dir_LED(void)
frankvnk 1:99bfc8d68fd3 194 {
frankvnk 1:99bfc8d68fd3 195 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 196
frankvnk 1:99bfc8d68fd3 197 if((axis6.compass >= 353) || (axis6.compass <= 7))
frankvnk 1:99bfc8d68fd3 198 {
frankvnk 1:99bfc8d68fd3 199 GREEN_ON;
frankvnk 1:99bfc8d68fd3 200 }
frankvnk 1:99bfc8d68fd3 201 else
frankvnk 1:99bfc8d68fd3 202 {
frankvnk 1:99bfc8d68fd3 203 GREEN_OFF;
frankvnk 1:99bfc8d68fd3 204 }
frankvnk 1:99bfc8d68fd3 205 if(((axis6.compass >= 348) && (axis6.compass <= 357)) || ((axis6.compass >= 3) && (axis6.compass <= 12)))
frankvnk 1:99bfc8d68fd3 206 {
frankvnk 1:99bfc8d68fd3 207 BLUE_ON;
frankvnk 1:99bfc8d68fd3 208 }
frankvnk 1:99bfc8d68fd3 209 else
frankvnk 1:99bfc8d68fd3 210 {
frankvnk 1:99bfc8d68fd3 211 BLUE_OFF;
frankvnk 1:99bfc8d68fd3 212 }
frankvnk 1:99bfc8d68fd3 213 if((axis6.compass >= 348) || (axis6.compass <= 12)) return;
frankvnk 1:99bfc8d68fd3 214 if(((axis6.compass >= 268) && (axis6.compass <= 272)) || ((axis6.compass >= 88) && (axis6.compass <= 92)))
frankvnk 1:99bfc8d68fd3 215 {
frankvnk 1:99bfc8d68fd3 216 RED_ON;
frankvnk 1:99bfc8d68fd3 217 return;
frankvnk 1:99bfc8d68fd3 218 }
frankvnk 1:99bfc8d68fd3 219 if((axis6.compass >= 178) && (axis6.compass <= 182))
frankvnk 1:99bfc8d68fd3 220 {
frankvnk 1:99bfc8d68fd3 221 BLUE_ON;
frankvnk 1:99bfc8d68fd3 222 RED_ON;
frankvnk 1:99bfc8d68fd3 223 return;
frankvnk 1:99bfc8d68fd3 224 }
frankvnk 1:99bfc8d68fd3 225 }
frankvnk 1:99bfc8d68fd3 226
frankvnk 1:99bfc8d68fd3 227 void SysTick_Handler(void)
frankvnk 1:99bfc8d68fd3 228 {
frankvnk 1:99bfc8d68fd3 229 static unsigned int ttt = 1;
frankvnk 1:99bfc8d68fd3 230 int ts;
frankvnk 1:99bfc8d68fd3 231 ts = ttt & 0x3;
frankvnk 1:99bfc8d68fd3 232 if(ts == 2) readCompass();
frankvnk 1:99bfc8d68fd3 233 if(ts == 1) accel_read();
frankvnk 1:99bfc8d68fd3 234 if(ts == 3)
frankvnk 1:99bfc8d68fd3 235 {
frankvnk 1:99bfc8d68fd3 236 run_eCompass();
frankvnk 1:99bfc8d68fd3 237 newData = 1; // a general purpose flag for things that need to synch to the ISR
frankvnk 1:99bfc8d68fd3 238 axis6.timestamp++;
frankvnk 1:99bfc8d68fd3 239 if(!server_running) set_dir_LED(); // Set the LEDs based on direction when nothing else is usng them
frankvnk 1:99bfc8d68fd3 240 }
frankvnk 1:99bfc8d68fd3 241 if(ttt == 20)//100)
frankvnk 1:99bfc8d68fd3 242 {
frankvnk 1:99bfc8d68fd3 243 LED_D1_ON;
frankvnk 1:99bfc8d68fd3 244 if(seconds && (seconds < 15)) calibrate_eCompass();
frankvnk 1:99bfc8d68fd3 245 readTempAlt();
frankvnk 1:99bfc8d68fd3 246 axis6.light = ambi.readRaw(); // Light Sensor
frankvnk 1:99bfc8d68fd3 247 HsecondFlag = 1; // A general purpose flag for things that need to happen every 500ms
frankvnk 1:99bfc8d68fd3 248 }
frankvnk 1:99bfc8d68fd3 249 if(ttt >= 40)//200)
frankvnk 1:99bfc8d68fd3 250 {
frankvnk 1:99bfc8d68fd3 251 LED_D1_OFF;
frankvnk 1:99bfc8d68fd3 252 ttt = 1;
frankvnk 1:99bfc8d68fd3 253 calibrate_eCompass();
frankvnk 1:99bfc8d68fd3 254 Batt.sense_en(1);
frankvnk 1:99bfc8d68fd3 255 adc_sample3 = Batt.level();
frankvnk 1:99bfc8d68fd3 256 Batt.sense_en(0);
frankvnk 1:99bfc8d68fd3 257 secondFlag = 1; // A general purpose flag for things that need to happen once a second
frankvnk 1:99bfc8d68fd3 258 HsecondFlag = 1;
frankvnk 1:99bfc8d68fd3 259 seconds++;
frankvnk 1:99bfc8d68fd3 260 if(!(seconds & 0x1F)) do_mDNS = 1;
frankvnk 1:99bfc8d68fd3 261 } else ttt++;
frankvnk 1:99bfc8d68fd3 262 }
frankvnk 1:99bfc8d68fd3 263
frankvnk 1:99bfc8d68fd3 264 #elif (MY_BOARD == WIFI_DIPCORTEX)
frankvnk 1:99bfc8d68fd3 265 cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37), PIN_INT0_IRQn);
frankvnk 1:99bfc8d68fd3 266 Serial pc(UART_TX, UART_RX);
frankvnk 1:99bfc8d68fd3 267 #else
frankvnk 1:99bfc8d68fd3 268
frankvnk 1:99bfc8d68fd3 269 #endif
frankvnk 1:99bfc8d68fd3 270
frankvnk 1:99bfc8d68fd3 271 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
frankvnk 1:99bfc8d68fd3 272 const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
frankvnk 1:99bfc8d68fd3 273 #else
frankvnk 1:99bfc8d68fd3 274 const uint8_t smartconfigkey = 0;
frankvnk 1:99bfc8d68fd3 275 #endif
frankvnk 1:99bfc8d68fd3 276
frankvnk 1:99bfc8d68fd3 277 /**
frankvnk 1:99bfc8d68fd3 278 * \brief Print cc3000 information
frankvnk 1:99bfc8d68fd3 279 * \param none
frankvnk 1:99bfc8d68fd3 280 * \return none
frankvnk 1:99bfc8d68fd3 281 */
frankvnk 1:99bfc8d68fd3 282 void print_cc3000_info() {
frankvnk 1:99bfc8d68fd3 283 uint8_t myMAC[8];
frankvnk 1:99bfc8d68fd3 284
frankvnk 1:99bfc8d68fd3 285 printf("MAC address + cc3000 info \r\n");
frankvnk 1:99bfc8d68fd3 286 wifi.get_user_file_info((uint8_t *)&user_info, sizeof(user_info));
frankvnk 1:99bfc8d68fd3 287 wifi.get_mac_address(myMAC);
frankvnk 1:99bfc8d68fd3 288 printf(" MAC address %02x:%02x:%02x:%02x:%02x:%02x \r\n \r\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
frankvnk 1:99bfc8d68fd3 289
frankvnk 1:99bfc8d68fd3 290 printf(" FTC %i \r\n",user_info.FTC);
frankvnk 1:99bfc8d68fd3 291 printf(" PP_version %i.%i \r\n",user_info.PP_version[0], user_info.PP_version[1]);
frankvnk 1:99bfc8d68fd3 292 printf(" SERV_PACK %i.%i \r\n",user_info.SERV_PACK[0], user_info.SERV_PACK[1]);
frankvnk 1:99bfc8d68fd3 293 printf(" DRV_VER %i.%i.%i \r\n",user_info.DRV_VER[0], user_info.DRV_VER[1], user_info.DRV_VER[2]);
frankvnk 1:99bfc8d68fd3 294 printf(" FW_VER %i.%i.%i \r\n",user_info.FW_VER[0], user_info.FW_VER[1], user_info.FW_VER[2]);
frankvnk 1:99bfc8d68fd3 295 }
frankvnk 1:99bfc8d68fd3 296
frankvnk 1:99bfc8d68fd3 297 /**
frankvnk 1:99bfc8d68fd3 298 * \brief Connect to SSID with a timeout
frankvnk 1:99bfc8d68fd3 299 * \param ssid Name of SSID
frankvnk 1:99bfc8d68fd3 300 * \param key Password
frankvnk 1:99bfc8d68fd3 301 * \param sec_mode Security mode
frankvnk 1:99bfc8d68fd3 302 * \return none
frankvnk 1:99bfc8d68fd3 303 */
frankvnk 1:99bfc8d68fd3 304 void connect_to_ssid(char *ssid, char *key, unsigned char sec_mode) {
frankvnk 1:99bfc8d68fd3 305 printf("Connecting to SSID: %s. Timeout is 10s. \r\n",ssid);
frankvnk 1:99bfc8d68fd3 306 if (wifi.connect_to_AP((uint8_t *)ssid, (uint8_t *)key, sec_mode) == true) {
frankvnk 1:99bfc8d68fd3 307 printf(" Connected. \r\n");
frankvnk 1:99bfc8d68fd3 308 } else {
frankvnk 1:99bfc8d68fd3 309 printf(" Connection timed-out (error). Please restart. \r\n");
frankvnk 1:99bfc8d68fd3 310 while(1);
frankvnk 1:99bfc8d68fd3 311 }
frankvnk 1:99bfc8d68fd3 312 }
frankvnk 1:99bfc8d68fd3 313
frankvnk 1:99bfc8d68fd3 314 /**
frankvnk 1:99bfc8d68fd3 315 * \brief Connect to SSID without security
frankvnk 1:99bfc8d68fd3 316 * \param ssid Name of SSID
frankvnk 1:99bfc8d68fd3 317 * \return none
frankvnk 1:99bfc8d68fd3 318 */
frankvnk 1:99bfc8d68fd3 319 void connect_to_ssid(char *ssid) {
frankvnk 1:99bfc8d68fd3 320 wifi.connect_open((uint8_t *)ssid);
frankvnk 1:99bfc8d68fd3 321 }
frankvnk 1:99bfc8d68fd3 322
frankvnk 1:99bfc8d68fd3 323 /**
frankvnk 1:99bfc8d68fd3 324 * \brief First time configuration
frankvnk 1:99bfc8d68fd3 325 * \param none
frankvnk 1:99bfc8d68fd3 326 * \return none
frankvnk 1:99bfc8d68fd3 327 */
frankvnk 1:99bfc8d68fd3 328 void do_FTC(void) {
frankvnk 1:99bfc8d68fd3 329 printf("Running First Time Configuration \r\n");
frankvnk 1:99bfc8d68fd3 330 wifi.start_smart_config(smartconfigkey);
frankvnk 1:99bfc8d68fd3 331 while (wifi.is_dhcp_configured() == false) {
frankvnk 1:99bfc8d68fd3 332 wait_ms(500);
frankvnk 1:99bfc8d68fd3 333 printf("Waiting for dhcp to be set. \r\n");
frankvnk 1:99bfc8d68fd3 334 }
frankvnk 1:99bfc8d68fd3 335 user_info.FTC = 1;
frankvnk 1:99bfc8d68fd3 336 wifi.set_user_file_info((uint8_t *)&user_info, sizeof(user_info));
frankvnk 1:99bfc8d68fd3 337 wifi._wlan.stop();
frankvnk 1:99bfc8d68fd3 338 printf("FTC finished. \r\n");
frankvnk 1:99bfc8d68fd3 339 }
frankvnk 1:99bfc8d68fd3 340
frankvnk 1:99bfc8d68fd3 341 /**
frankvnk 1:99bfc8d68fd3 342 * \brief TCP server demo
frankvnk 1:99bfc8d68fd3 343 * \param none
frankvnk 1:99bfc8d68fd3 344 * \return int
frankvnk 1:99bfc8d68fd3 345 */
frankvnk 1:99bfc8d68fd3 346 int main() {
frankvnk 1:99bfc8d68fd3 347 int loop;
frankvnk 1:99bfc8d68fd3 348 int temp;
frankvnk 1:99bfc8d68fd3 349 unsigned int oldseconds;
frankvnk 1:99bfc8d68fd3 350
frankvnk 1:99bfc8d68fd3 351 //Board dependent init
frankvnk 1:99bfc8d68fd3 352 init();
frankvnk 1:99bfc8d68fd3 353
frankvnk 1:99bfc8d68fd3 354 // Initalize global variables
frankvnk 1:99bfc8d68fd3 355 axis6.packet_id = 1;
frankvnk 1:99bfc8d68fd3 356 axis6.timestamp = 0;
frankvnk 1:99bfc8d68fd3 357 axis6.acc_x = 0;
frankvnk 1:99bfc8d68fd3 358 axis6.acc_y = 0;
frankvnk 1:99bfc8d68fd3 359 axis6.acc_z = 0;
frankvnk 1:99bfc8d68fd3 360 axis6.mag_x = 0;
frankvnk 1:99bfc8d68fd3 361 axis6.mag_y = 0;
frankvnk 1:99bfc8d68fd3 362 axis6.mag_z = 0;
frankvnk 1:99bfc8d68fd3 363 axis6.roll = 0;
frankvnk 1:99bfc8d68fd3 364 axis6.pitch = 0;
frankvnk 1:99bfc8d68fd3 365 axis6.yaw = 0;
frankvnk 1:99bfc8d68fd3 366 axis6.compass = 0;
frankvnk 1:99bfc8d68fd3 367 axis6.alt = 0;
frankvnk 1:99bfc8d68fd3 368 axis6.temp = 0;
frankvnk 1:99bfc8d68fd3 369 axis6.light = 0;
frankvnk 1:99bfc8d68fd3 370 compass_type = ANDROID_COMPASS;
frankvnk 1:99bfc8d68fd3 371 seconds = 0;
frankvnk 1:99bfc8d68fd3 372 server_running = 1;
frankvnk 1:99bfc8d68fd3 373 newData = 0;
frankvnk 1:99bfc8d68fd3 374 secondFlag = 0;
frankvnk 1:99bfc8d68fd3 375 HsecondFlag = 0;
frankvnk 1:99bfc8d68fd3 376 GREEN_ON;
frankvnk 1:99bfc8d68fd3 377
frankvnk 1:99bfc8d68fd3 378 pc.baud(115200);
frankvnk 1:99bfc8d68fd3 379
frankvnk 1:99bfc8d68fd3 380 // set current to 500mA since we're turning on the Wi-Fi
frankvnk 1:99bfc8d68fd3 381 Batt.init(CHRG_500MA);
frankvnk 1:99bfc8d68fd3 382
frankvnk 1:99bfc8d68fd3 383 // Set MPL3115 to altimeter mode - oversample rate = 128
frankvnk 1:99bfc8d68fd3 384 apt.Oversample_Ratio(OVERSAMPLE_RATIO_128);
frankvnk 1:99bfc8d68fd3 385 apt.Altimeter_Mode();
frankvnk 1:99bfc8d68fd3 386
frankvnk 1:99bfc8d68fd3 387 //Init LEDs
frankvnk 1:99bfc8d68fd3 388 initLEDs();
frankvnk 1:99bfc8d68fd3 389
frankvnk 1:99bfc8d68fd3 390 // Read the Magnetometer a couple of times to initalize
frankvnk 1:99bfc8d68fd3 391 for(loop=0 ; loop < 5 ; loop++)
frankvnk 1:99bfc8d68fd3 392 {
frankvnk 1:99bfc8d68fd3 393 while(!(mag.readReg(MAG_DR_STATUS) && 0x08));
frankvnk 1:99bfc8d68fd3 394 readCompass();
frankvnk 1:99bfc8d68fd3 395 }
frankvnk 1:99bfc8d68fd3 396
frankvnk 1:99bfc8d68fd3 397 init_eCompass();
frankvnk 1:99bfc8d68fd3 398
frankvnk 1:99bfc8d68fd3 399 // Start 5ms Ticker
frankvnk 1:99bfc8d68fd3 400 systick.attach(&SysTick_Handler, 0.025);
frankvnk 1:99bfc8d68fd3 401
frankvnk 1:99bfc8d68fd3 402 // Trigger a WLAN device
frankvnk 1:99bfc8d68fd3 403 wifi.start(0);
frankvnk 1:99bfc8d68fd3 404 printf("CC3000 Wi-Go IOT demo.\r\n");
frankvnk 1:99bfc8d68fd3 405 print_cc3000_info();
frankvnk 1:99bfc8d68fd3 406 server_running = 1;
frankvnk 1:99bfc8d68fd3 407 newData = 0;
frankvnk 1:99bfc8d68fd3 408 GREEN_ON;
frankvnk 1:99bfc8d68fd3 409
frankvnk 1:99bfc8d68fd3 410 if(!user_info.FTC && USE_SMART_CONFIG)
frankvnk 1:99bfc8d68fd3 411 {
frankvnk 1:99bfc8d68fd3 412 do_FTC(); // Call First Time Configuration if SmartConfig has not been run
frankvnk 1:99bfc8d68fd3 413 printf("Please restart your board. \r\n");
frankvnk 1:99bfc8d68fd3 414 GreenStop();
frankvnk 1:99bfc8d68fd3 415 }
frankvnk 1:99bfc8d68fd3 416
frankvnk 1:99bfc8d68fd3 417 // Wait for slider touch
frankvnk 1:99bfc8d68fd3 418 printf("\r\nUse the slider to start an application.\r\n");
frankvnk 1:99bfc8d68fd3 419 printf("Releasing the slider for more than 3 seconds\r\nwill start the chosen application.\r\n");
frankvnk 1:99bfc8d68fd3 420 printf("Touching the slider within the 3 seconds\ntimeframe allows you to re-select an application.\r\n");
frankvnk 1:99bfc8d68fd3 421 printf("\r\nThe RGB LED indicates the selection:\r\n");
frankvnk 1:99bfc8d68fd3 422 printf("ORANGE - Erase all profiles.\r\n");
frankvnk 1:99bfc8d68fd3 423 printf("PURPLE - Force SmartConfig.\r\n");
frankvnk 1:99bfc8d68fd3 424 printf("BLUE - Webserver displaying live sensor data.\r\n");
frankvnk 1:99bfc8d68fd3 425 printf("RED - Exosite data client.\r\n");
frankvnk 1:99bfc8d68fd3 426 printf("GREEN - Android sensor fusion app.\r\n");
frankvnk 1:99bfc8d68fd3 427 while( tsi.readPercentage() == 0 )
frankvnk 1:99bfc8d68fd3 428 {
frankvnk 1:99bfc8d68fd3 429 RED_ON;
frankvnk 1:99bfc8d68fd3 430 wait(0.2);
frankvnk 1:99bfc8d68fd3 431 RED_OFF;
frankvnk 1:99bfc8d68fd3 432 wait(0.2);
frankvnk 1:99bfc8d68fd3 433 }
frankvnk 1:99bfc8d68fd3 434 RED_OFF;
frankvnk 1:99bfc8d68fd3 435
frankvnk 1:99bfc8d68fd3 436 oldseconds = seconds;
frankvnk 1:99bfc8d68fd3 437 loop = 100;
frankvnk 1:99bfc8d68fd3 438 temp = 0;
frankvnk 1:99bfc8d68fd3 439 // Read slider as long as it is touched.
frankvnk 1:99bfc8d68fd3 440 // If released for more than 3 seconds, exit
frankvnk 1:99bfc8d68fd3 441 while((loop != 0) || ((seconds - oldseconds) < 3))
frankvnk 1:99bfc8d68fd3 442 {
frankvnk 1:99bfc8d68fd3 443 loop = tsi.readPercentage() * 100;
frankvnk 1:99bfc8d68fd3 444 if(loop != 0)
frankvnk 1:99bfc8d68fd3 445 {
frankvnk 1:99bfc8d68fd3 446 oldseconds = seconds;
frankvnk 1:99bfc8d68fd3 447 temp = loop;
frankvnk 1:99bfc8d68fd3 448 }
frankvnk 1:99bfc8d68fd3 449 if(temp > 80)
frankvnk 1:99bfc8d68fd3 450 {
frankvnk 1:99bfc8d68fd3 451 RED_ON; GREEN_ON; BLUE_OFF; //Orange
frankvnk 1:99bfc8d68fd3 452 }
frankvnk 1:99bfc8d68fd3 453 else if(temp > 60)
frankvnk 1:99bfc8d68fd3 454 {
frankvnk 1:99bfc8d68fd3 455 RED_ON; GREEN_OFF; BLUE_ON; //Purple
frankvnk 1:99bfc8d68fd3 456 }
frankvnk 1:99bfc8d68fd3 457 else if(temp > 40)
frankvnk 1:99bfc8d68fd3 458 {
frankvnk 1:99bfc8d68fd3 459 RED_OFF; GREEN_OFF; BLUE_ON; //Blue
frankvnk 1:99bfc8d68fd3 460 }
frankvnk 1:99bfc8d68fd3 461 else if(temp > 20)
frankvnk 1:99bfc8d68fd3 462 {
frankvnk 1:99bfc8d68fd3 463 RED_ON; GREEN_OFF; BLUE_OFF; //Red
frankvnk 1:99bfc8d68fd3 464 }
frankvnk 1:99bfc8d68fd3 465 else
frankvnk 1:99bfc8d68fd3 466 {
frankvnk 1:99bfc8d68fd3 467 RED_OFF; GREEN_ON; BLUE_OFF; //Green
frankvnk 1:99bfc8d68fd3 468 }
frankvnk 1:99bfc8d68fd3 469 }
frankvnk 1:99bfc8d68fd3 470 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 471
frankvnk 1:99bfc8d68fd3 472 // Execute the user selected application
frankvnk 1:99bfc8d68fd3 473 if(temp > 80) // Erase all profiles
frankvnk 1:99bfc8d68fd3 474 {
frankvnk 1:99bfc8d68fd3 475 server_running = 1;
frankvnk 1:99bfc8d68fd3 476 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 477 printf("\r\nErasing all wireless profiles. \r\n");
frankvnk 1:99bfc8d68fd3 478 wifi.delete_profiles();
frankvnk 1:99bfc8d68fd3 479 wifi.stop();
frankvnk 1:99bfc8d68fd3 480 printf("Finished. Please restart your board. \r\n");
frankvnk 1:99bfc8d68fd3 481 GreenStop();
frankvnk 1:99bfc8d68fd3 482 }
frankvnk 1:99bfc8d68fd3 483
frankvnk 1:99bfc8d68fd3 484 if(temp > 60) // Force SmartConfig
frankvnk 1:99bfc8d68fd3 485 {
frankvnk 1:99bfc8d68fd3 486 server_running = 1;
frankvnk 1:99bfc8d68fd3 487 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 488 printf("\r\nStarting Smart Config configuration. \r\n");
frankvnk 1:99bfc8d68fd3 489 wifi.start_smart_config(smartconfigkey);
frankvnk 1:99bfc8d68fd3 490 while (wifi.is_dhcp_configured() == false)
frankvnk 1:99bfc8d68fd3 491 {
frankvnk 1:99bfc8d68fd3 492 wait_ms(500);
frankvnk 1:99bfc8d68fd3 493 printf("Waiting for dhcp to be set. \r\n");
frankvnk 1:99bfc8d68fd3 494 }
frankvnk 1:99bfc8d68fd3 495 printf("Finished. Please restart your board. \r\n");
frankvnk 1:99bfc8d68fd3 496 GreenStop();
frankvnk 1:99bfc8d68fd3 497 }
frankvnk 1:99bfc8d68fd3 498
frankvnk 1:99bfc8d68fd3 499 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 1:99bfc8d68fd3 500
frankvnk 1:99bfc8d68fd3 501 printf("\r\nAttempting SSID Connection. \r\n");
frankvnk 1:99bfc8d68fd3 502 #if (USE_SMART_CONFIG == 1)
frankvnk 1:99bfc8d68fd3 503 wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
frankvnk 1:99bfc8d68fd3 504 #else
frankvnk 1:99bfc8d68fd3 505 wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
frankvnk 1:99bfc8d68fd3 506 #ifndef CC3000_TINY_DRIVER
frankvnk 1:99bfc8d68fd3 507 #ifdef AP_KEY
frankvnk 1:99bfc8d68fd3 508 connect_to_ssid(SSID, AP_KEY, AP_SECURITY);
frankvnk 1:99bfc8d68fd3 509 #else
frankvnk 1:99bfc8d68fd3 510 connect_to_ssid(SSID);
frankvnk 1:99bfc8d68fd3 511 #endif
frankvnk 1:99bfc8d68fd3 512 #else
frankvnk 1:99bfc8d68fd3 513 connect_to_ssid(SSID);
frankvnk 1:99bfc8d68fd3 514 #endif
frankvnk 1:99bfc8d68fd3 515 #endif
frankvnk 1:99bfc8d68fd3 516
frankvnk 1:99bfc8d68fd3 517 printf("DHCP request \r\n");
frankvnk 1:99bfc8d68fd3 518 while (wifi.is_dhcp_configured() == false)
frankvnk 1:99bfc8d68fd3 519 {
frankvnk 1:99bfc8d68fd3 520 wait_ms(500);
frankvnk 1:99bfc8d68fd3 521 printf(" Waiting for dhcp to be set. \r\n");
frankvnk 1:99bfc8d68fd3 522 }
frankvnk 1:99bfc8d68fd3 523 tNetappIpconfigRetArgs ipinfo2;
frankvnk 1:99bfc8d68fd3 524 wifi.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
frankvnk 1:99bfc8d68fd3 525 printf("DHCP assigned IP Address = %d.%d.%d.%d \r\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
frankvnk 1:99bfc8d68fd3 526 LED_D3_ON;
frankvnk 1:99bfc8d68fd3 527
frankvnk 1:99bfc8d68fd3 528 server_running = 0;
frankvnk 1:99bfc8d68fd3 529
frankvnk 1:99bfc8d68fd3 530 // Start the selected application
frankvnk 1:99bfc8d68fd3 531 if(temp > 40) // Run Webserver
frankvnk 1:99bfc8d68fd3 532 {
frankvnk 1:99bfc8d68fd3 533 compass_type = NED_COMPASS;
frankvnk 1:99bfc8d68fd3 534 init_eCompass();
frankvnk 1:99bfc8d68fd3 535 seconds = 0;
frankvnk 1:99bfc8d68fd3 536 demo_wifi_main();
frankvnk 1:99bfc8d68fd3 537 }
frankvnk 1:99bfc8d68fd3 538 if(temp > 20) // Send data to Exosite
frankvnk 1:99bfc8d68fd3 539 {
frankvnk 1:99bfc8d68fd3 540 compass_type = NED_COMPASS;
frankvnk 1:99bfc8d68fd3 541 init_eCompass();
frankvnk 1:99bfc8d68fd3 542 seconds = 0;
frankvnk 1:99bfc8d68fd3 543 // run_exosite();
frankvnk 1:99bfc8d68fd3 544 }
frankvnk 1:99bfc8d68fd3 545 init_eCompass();
frankvnk 1:99bfc8d68fd3 546 seconds = 0;
frankvnk 1:99bfc8d68fd3 547 // Run TCP/IP Connection to host - Sensor Fusion App
frankvnk 1:99bfc8d68fd3 548 // runTCPIPserver();
frankvnk 1:99bfc8d68fd3 549
frankvnk 1:99bfc8d68fd3 550 }