GSMA version

Dependencies:   FXOS8700CQ mbed sfh7779

Fork of StarterKit by Rick McConney

Committer:
elmkom
Date:
Mon Jan 09 18:25:31 2017 +0000
Revision:
46:319a3f1e8ba9
Parent:
45:fe90f1fcb4e0
republish starterkit shelf code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:9d5134074d84 1 #include "mbed.h"
JMF 0:9d5134074d84 2 #include <cctype>
JMF 0:9d5134074d84 3 #include "SerialBuffered.h"
JMF 0:9d5134074d84 4 #include "HTS221.h"
JMF 2:0e2ef866af95 5 #include "config_me.h"
stefanrousseau 4:f83bedd9cab4 6 #include "sensors.h"
elmkom 38:532a0d929756 7 #include "Proximity.h"
elmkom 42:8500f0cb2ea5 8 #include "Wnc.h"
JMF 0:9d5134074d84 9
stefanrousseau 11:e6602513730f 10 #include "hardware.h"
elmkom 44:60008ebffdd4 11 #include "att160826.h"
elmkom 42:8500f0cb2ea5 12
elmkom 42:8500f0cb2ea5 13 extern SerialBuffered mdm;
elmkom 42:8500f0cb2ea5 14 Wnc wnc;
elmkom 42:8500f0cb2ea5 15
stefanrousseau 11:e6602513730f 16 I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
elmkom 44:60008ebffdd4 17 I2C *myi2c;
elmkom 41:85a736a9b900 18
elmkom 42:8500f0cb2ea5 19 #define PROXIMITYON 1
elmkom 41:85a736a9b900 20
elmkom 41:85a736a9b900 21 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 22 att160826_data_t strip_data[2];
elmkom 44:60008ebffdd4 23 att160826_data_t last_data[2];
elmkom 44:60008ebffdd4 24 ATT160826 *strips[2];
elmkom 44:60008ebffdd4 25 #elif PROXIMITYON == 2
elmkom 44:60008ebffdd4 26 Proximity proximityStrip[2];
elmkom 41:85a736a9b900 27 #endif
elmkom 36:f8d96ff1dd1b 28
JMF 0:9d5134074d84 29 // comment out the following line if color is not supported on the terminal
JMF 0:9d5134074d84 30 #define USE_COLOR
JMF 0:9d5134074d84 31 #ifdef USE_COLOR
JMF 0:9d5134074d84 32 #define BLK "\033[30m"
JMF 0:9d5134074d84 33 #define RED "\033[31m"
JMF 0:9d5134074d84 34 #define GRN "\033[32m"
JMF 0:9d5134074d84 35 #define YEL "\033[33m"
JMF 0:9d5134074d84 36 #define BLU "\033[34m"
JMF 0:9d5134074d84 37 #define MAG "\033[35m"
JMF 0:9d5134074d84 38 #define CYN "\033[36m"
JMF 0:9d5134074d84 39 #define WHT "\033[37m"
JMF 0:9d5134074d84 40 #define DEF "\033[39m"
JMF 0:9d5134074d84 41 #else
JMF 0:9d5134074d84 42 #define BLK
JMF 0:9d5134074d84 43 #define RED
JMF 0:9d5134074d84 44 #define GRN
JMF 0:9d5134074d84 45 #define YEL
JMF 0:9d5134074d84 46 #define BLU
JMF 0:9d5134074d84 47 #define MAG
JMF 0:9d5134074d84 48 #define CYN
JMF 0:9d5134074d84 49 #define WHT
JMF 0:9d5134074d84 50 #define DEF
JMF 0:9d5134074d84 51 #endif
JMF 0:9d5134074d84 52
JMF 0:9d5134074d84 53 #define MDM_DBG_OFF 0
JMF 0:9d5134074d84 54 #define MDM_DBG_AT_CMDS (1 << 0)
elmkom 36:f8d96ff1dd1b 55
elmkom 44:60008ebffdd4 56
elmkom 44:60008ebffdd4 57
elmkom 36:f8d96ff1dd1b 58
elmkom 41:85a736a9b900 59
elmkom 41:85a736a9b900 60
elmkom 42:8500f0cb2ea5 61
JMF 0:9d5134074d84 62 int mdm_dbgmask = MDM_DBG_OFF;
JMF 0:9d5134074d84 63
JMF 0:9d5134074d84 64 Serial pc(USBTX, USBRX);
elmkom 42:8500f0cb2ea5 65
stefanrousseau 16:17c5916f2d12 66 DigitalOut led_green(LED_GREEN);
stefanrousseau 16:17c5916f2d12 67 DigitalOut led_red(LED_RED);
stefanrousseau 16:17c5916f2d12 68 DigitalOut led_blue(LED_BLUE);
JMF 0:9d5134074d84 69
JMF 0:9d5134074d84 70
JMF 0:9d5134074d84 71
elmkom 41:85a736a9b900 72
elmkom 44:60008ebffdd4 73
elmkom 41:85a736a9b900 74 DigitalIn slot1(PTB3,PullUp);
elmkom 41:85a736a9b900 75 DigitalIn slot2(PTB10,PullUp);
elmkom 41:85a736a9b900 76 DigitalIn slot3(PTB11,PullUp);
elmkom 42:8500f0cb2ea5 77
elmkom 45:fe90f1fcb4e0 78 DigitalIn sw2(SW2);
elmkom 45:fe90f1fcb4e0 79
elmkom 41:85a736a9b900 80 int lastSlot1;
elmkom 41:85a736a9b900 81 int lastSlot2;
elmkom 41:85a736a9b900 82 int lastSlot3;
elmkom 42:8500f0cb2ea5 83 char *iccid;
JMF 0:9d5134074d84 84 #define TOUPPER(a) (a) //toupper(a)
JMF 0:9d5134074d84 85
JMF 0:9d5134074d84 86
JMF 0:9d5134074d84 87 #define MDM_OK 0
JMF 0:9d5134074d84 88 #define MDM_ERR_TIMEOUT -1
JMF 0:9d5134074d84 89
JMF 0:9d5134074d84 90 #define MAX_AT_RSP_LEN 255
elmkom 38:532a0d929756 91
elmkom 41:85a736a9b900 92 bool toggleLed = false;
elmkom 41:85a736a9b900 93 int seqNum;
elmkom 36:f8d96ff1dd1b 94
elmkom 38:532a0d929756 95
elmkom 36:f8d96ff1dd1b 96 //********************************************************************************************************************************************
elmkom 36:f8d96ff1dd1b 97 //* Set the RGB LED's Color
elmkom 36:f8d96ff1dd1b 98 //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue)
elmkom 36:f8d96ff1dd1b 99 //********************************************************************************************************************************************
elmkom 36:f8d96ff1dd1b 100 void SetLedColor(unsigned char ucColor)
elmkom 35:2e864bae3af0 101 {
elmkom 42:8500f0cb2ea5 102 if(wnc.isPowerSaveOn())
elmkom 38:532a0d929756 103 {
elmkom 38:532a0d929756 104 led_red = !0;
elmkom 38:532a0d929756 105 led_green = !0;
elmkom 42:8500f0cb2ea5 106 led_blue = !(ucColor & 0x4);
elmkom 38:532a0d929756 107 }
elmkom 38:532a0d929756 108 else
elmkom 38:532a0d929756 109 {
elmkom 38:532a0d929756 110 //Note that when an LED is on, you write a 0 to it:
elmkom 38:532a0d929756 111 led_red = !(ucColor & 0x1); //bit 0
elmkom 38:532a0d929756 112 led_green = !(ucColor & 0x2); //bit 1
elmkom 38:532a0d929756 113 led_blue = !(ucColor & 0x4); //bit 2
elmkom 38:532a0d929756 114 }
elmkom 36:f8d96ff1dd1b 115 } //SetLedColor()
elmkom 35:2e864bae3af0 116
JMF 0:9d5134074d84 117
elmkom 36:f8d96ff1dd1b 118 void system_reset()
elmkom 36:f8d96ff1dd1b 119 {
elmkom 45:fe90f1fcb4e0 120 //wnc.passthrough();
elmkom 36:f8d96ff1dd1b 121 printf(RED "\n\rSystem resetting..." DEF "\n");
elmkom 36:f8d96ff1dd1b 122 NVIC_SystemReset();
elmkom 36:f8d96ff1dd1b 123 }
elmkom 42:8500f0cb2ea5 124
JMF 2:0e2ef866af95 125
JMF 0:9d5134074d84 126 #define CTOF(x) ((x)*1.8+32)
JMF 0:9d5134074d84 127
stefanrousseau 3:26b3cc155f39 128 //********************************************************************************************************************************************
stefanrousseau 12:7c94ec5069dc 129 //* Create string with sensor readings that can be sent to flow as an HTTP get
stefanrousseau 3:26b3cc155f39 130 //********************************************************************************************************************************************
stefanrousseau 12:7c94ec5069dc 131 K64F_Sensors_t SENSOR_DATA =
stefanrousseau 3:26b3cc155f39 132 {
stefanrousseau 12:7c94ec5069dc 133 .Temperature = "0",
stefanrousseau 12:7c94ec5069dc 134 .Humidity = "0",
stefanrousseau 12:7c94ec5069dc 135 .AccelX = "0",
stefanrousseau 12:7c94ec5069dc 136 .AccelY = "0",
stefanrousseau 12:7c94ec5069dc 137 .AccelZ = "0",
stefanrousseau 12:7c94ec5069dc 138 .MagnetometerX = "0",
stefanrousseau 12:7c94ec5069dc 139 .MagnetometerY = "0",
stefanrousseau 12:7c94ec5069dc 140 .MagnetometerZ = "0",
stefanrousseau 12:7c94ec5069dc 141 .AmbientLightVis = "0",
stefanrousseau 12:7c94ec5069dc 142 .AmbientLightIr = "0",
stefanrousseau 12:7c94ec5069dc 143 .UVindex = "0",
stefanrousseau 12:7c94ec5069dc 144 .Proximity = "0",
stefanrousseau 12:7c94ec5069dc 145 .Temperature_Si7020 = "0",
stefanrousseau 12:7c94ec5069dc 146 .Humidity_Si7020 = "0"
stefanrousseau 3:26b3cc155f39 147 };
stefanrousseau 12:7c94ec5069dc 148
elmkom 44:60008ebffdd4 149
elmkom 44:60008ebffdd4 150
elmkom 44:60008ebffdd4 151 void GenerateModemString(char * modem_string,int sensor,int strip)
stefanrousseau 3:26b3cc155f39 152 {
elmkom 41:85a736a9b900 153 switch(sensor)
stefanrousseau 12:7c94ec5069dc 154 {
elmkom 41:85a736a9b900 155 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 156
elmkom 44:60008ebffdd4 157 case PROXIMITY_ONLY:
elmkom 44:60008ebffdd4 158 {
elmkom 44:60008ebffdd4 159 if(strip == -1)
elmkom 44:60008ebffdd4 160 {
elmkom 44:60008ebffdd4 161 seqNum++;
elmkom 44:60008ebffdd4 162 sprintf(modem_string, "GET %s%s?ver=cat1&strip=%d&serial=%s&seq=%d&psm=%d&T=%d&t=%d %s%s\r\n\r\n", FLOW_BASE_URL, "/shelf", strip, iccid, seqNum, wnc.isPowerSaveOn(),wnc.gett3412Timer(),wnc.gett3324Timer(),FLOW_URL_TYPE, MY_SERVER_URL);
elmkom 44:60008ebffdd4 163 break;
elmkom 44:60008ebffdd4 164 }
elmkom 44:60008ebffdd4 165 int stripIndex = 0;
elmkom 44:60008ebffdd4 166 if(strip == 3)
elmkom 44:60008ebffdd4 167 stripIndex = 1;
elmkom 44:60008ebffdd4 168 char data[256];
elmkom 44:60008ebffdd4 169 int i=0;
elmkom 44:60008ebffdd4 170 int index = 0;
elmkom 44:60008ebffdd4 171 index += sprintf(&data[index],"[");
elmkom 44:60008ebffdd4 172 for (i=1; i<SENSORS_PER_STRIP; i++)
elmkom 44:60008ebffdd4 173 {
elmkom 44:60008ebffdd4 174 short p = last_data[stripIndex].sensor[i].sample.prox;
elmkom 44:60008ebffdd4 175 short l = last_data[stripIndex].sensor[i].sample.als_vis;
elmkom 44:60008ebffdd4 176 short r = last_data[stripIndex].sensor[i].sample.als_ir;
elmkom 44:60008ebffdd4 177 if(i<SENSORS_PER_STRIP-1)
elmkom 44:60008ebffdd4 178 index += snprintf(&data[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d},", i,p,l,r);
elmkom 44:60008ebffdd4 179 else
elmkom 44:60008ebffdd4 180 index += snprintf(&data[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d}]", i,p,l,r);
elmkom 44:60008ebffdd4 181
elmkom 44:60008ebffdd4 182 }
elmkom 44:60008ebffdd4 183
elmkom 44:60008ebffdd4 184
elmkom 44:60008ebffdd4 185 seqNum++;
elmkom 44:60008ebffdd4 186 sprintf(modem_string, "GET %s%s?ver=cat1&strip=%d&serial=%s&seq=%d&psm=%d&T=%d&t=%d&data=%s %s%s\r\n\r\n", FLOW_BASE_URL, "/shelf", strip, iccid, seqNum, wnc.isPowerSaveOn(),wnc.gett3412Timer(),wnc.gett3324Timer(), data, FLOW_URL_TYPE, MY_SERVER_URL);
elmkom 44:60008ebffdd4 187 break;
elmkom 44:60008ebffdd4 188 }
elmkom 44:60008ebffdd4 189 #elif PROXIMITYON == 2
elmkom 38:532a0d929756 190 case PROXIMITY_ONLY:
elmkom 35:2e864bae3af0 191 {
elmkom 41:85a736a9b900 192
elmkom 44:60008ebffdd4 193 char* data0 = proximityStrip[0].getDataStr();
elmkom 44:60008ebffdd4 194 char* data1 = proximityStrip[1].getDataStr();
elmkom 41:85a736a9b900 195 seqNum++;
elmkom 44:60008ebffdd4 196 sprintf(modem_string, "GET %s%s?serial=%s&seq=%d&data=%s&data1=%s %s%s\r\n\r\n", FLOW_BASE_URL, "/shelf", iccid, seqNum, data0,data1, FLOW_URL_TYPE, MY_SERVER_URL);
elmkom 41:85a736a9b900 197 break;
elmkom 41:85a736a9b900 198 }
elmkom 41:85a736a9b900 199 #endif
elmkom 41:85a736a9b900 200 case SWITCH_ONLY:
elmkom 41:85a736a9b900 201 {
elmkom 41:85a736a9b900 202 char data[32];
elmkom 41:85a736a9b900 203 sprintf(data,"[{\"p\":%d},{\"p\":%d},{\"p\":%d}]",lastSlot1*26,lastSlot2*26,lastSlot3*26);
elmkom 41:85a736a9b900 204 seqNum++;
elmkom 42:8500f0cb2ea5 205 sprintf(modem_string, "GET %s%s?serial=%s&seq=%d&data=%s %s%s\r\n\r\n", FLOW_BASE_URL, "/car", iccid, seqNum, data, FLOW_URL_TYPE, MY_SERVER_URL);
elmkom 35:2e864bae3af0 206 break;
elmkom 35:2e864bae3af0 207 }
stefanrousseau 12:7c94ec5069dc 208 case TEMP_HUMIDITY_ONLY:
stefanrousseau 12:7c94ec5069dc 209 {
stefanrousseau 12:7c94ec5069dc 210 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 211 break;
stefanrousseau 12:7c94ec5069dc 212 }
stefanrousseau 12:7c94ec5069dc 213 case TEMP_HUMIDITY_ACCELEROMETER:
stefanrousseau 12:7c94ec5069dc 214 {
stefanrousseau 12:7c94ec5069dc 215 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 216 break;
stefanrousseau 12:7c94ec5069dc 217 }
stefanrousseau 12:7c94ec5069dc 218 case TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS:
stefanrousseau 12:7c94ec5069dc 219 {
stefanrousseau 12:7c94ec5069dc 220 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&proximity=%s&light_uv=%s&light_vis=%s&light_ir=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, SENSOR_DATA.Proximity, SENSOR_DATA.UVindex, SENSOR_DATA.AmbientLightVis, SENSOR_DATA.AmbientLightIr, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 221 break;
stefanrousseau 12:7c94ec5069dc 222 }
stefanrousseau 12:7c94ec5069dc 223 default:
stefanrousseau 12:7c94ec5069dc 224 {
stefanrousseau 12:7c94ec5069dc 225 sprintf(modem_string, "Invalid sensor selected\r\n\r\n");
stefanrousseau 12:7c94ec5069dc 226 break;
stefanrousseau 12:7c94ec5069dc 227 }
stefanrousseau 16:17c5916f2d12 228 } //switch(iSensorsToReport)
stefanrousseau 3:26b3cc155f39 229 } //GenerateModemString
stefanrousseau 3:26b3cc155f39 230
stefanrousseau 3:26b3cc155f39 231
stefanrousseau 16:17c5916f2d12 232 //********************************************************************************************************************************************
stefanrousseau 16:17c5916f2d12 233 //* Process JSON response messages
stefanrousseau 16:17c5916f2d12 234 //********************************************************************************************************************************************
elmkom 40:45e4636d20cc 235 bool extract_reply(char* search_field, char* found_string)
stefanrousseau 16:17c5916f2d12 236 {
stefanrousseau 16:17c5916f2d12 237 char* beginquote;
stefanrousseau 16:17c5916f2d12 238 char* endquote;
elmkom 40:45e4636d20cc 239 beginquote = strstr(search_field, "\r\n\r\n"); //start of data
elmkom 40:45e4636d20cc 240 endquote = strchr(search_field, '\0');
stefanrousseau 16:17c5916f2d12 241 if (beginquote != 0)
stefanrousseau 16:17c5916f2d12 242 {
stefanrousseau 16:17c5916f2d12 243 uint16_t ifoundlen;
stefanrousseau 16:17c5916f2d12 244 if (endquote != 0)
stefanrousseau 16:17c5916f2d12 245 {
stefanrousseau 16:17c5916f2d12 246 ifoundlen = (uint16_t) (endquote - beginquote) + 1;
stefanrousseau 16:17c5916f2d12 247 strncpy(found_string, beginquote, ifoundlen );
stefanrousseau 16:17c5916f2d12 248 found_string[ifoundlen] = 0; //null terminate
stefanrousseau 16:17c5916f2d12 249 return true;
stefanrousseau 16:17c5916f2d12 250 }
stefanrousseau 16:17c5916f2d12 251 }
elmkom 40:45e4636d20cc 252
elmkom 40:45e4636d20cc 253 return false;
elmkom 40:45e4636d20cc 254
elmkom 40:45e4636d20cc 255 } //extract_reply
stefanrousseau 16:17c5916f2d12 256
elmkom 40:45e4636d20cc 257
elmkom 40:45e4636d20cc 258 void parse_reply(char* reply)
elmkom 40:45e4636d20cc 259 {
elmkom 40:45e4636d20cc 260 char *tokens[5];
elmkom 40:45e4636d20cc 261 int index = 0;
elmkom 40:45e4636d20cc 262 tokens[index++] = strtok(reply," ");
elmkom 40:45e4636d20cc 263 while( index < 5 )
elmkom 40:45e4636d20cc 264 {
elmkom 40:45e4636d20cc 265 char* token = strtok(NULL, " ");
elmkom 40:45e4636d20cc 266 if(token == NULL) break;
elmkom 40:45e4636d20cc 267 tokens[index++] = token;
elmkom 40:45e4636d20cc 268 }
elmkom 40:45e4636d20cc 269 if(strcmp("PSM",tokens[1]) == 0)
elmkom 40:45e4636d20cc 270 {
elmkom 40:45e4636d20cc 271
elmkom 40:45e4636d20cc 272 int t3412 = atoi(tokens[3]);
elmkom 40:45e4636d20cc 273 int t3324 = atoi(tokens[4]);
elmkom 40:45e4636d20cc 274 pc.printf("t3412 %d t3324 %d\r\n",t3412,t3324);
elmkom 42:8500f0cb2ea5 275 // setTauTimer(t3412);
elmkom 42:8500f0cb2ea5 276 //setActivityTimer(t3324);
elmkom 40:45e4636d20cc 277
elmkom 40:45e4636d20cc 278 if(strcmp("true",tokens[2]) == 0)
elmkom 40:45e4636d20cc 279 {
elmkom 40:45e4636d20cc 280 pc.printf("PSM ON\r\n");
elmkom 42:8500f0cb2ea5 281 wnc.setPowerSave(true,t3412,t3324);
elmkom 40:45e4636d20cc 282 }
elmkom 40:45e4636d20cc 283 else
elmkom 40:45e4636d20cc 284 {
elmkom 40:45e4636d20cc 285 pc.printf("PSM OFF\r\n");
elmkom 42:8500f0cb2ea5 286 wnc.setPowerSave(false,t3412,t3324);
elmkom 40:45e4636d20cc 287 }
elmkom 40:45e4636d20cc 288 }
elmkom 40:45e4636d20cc 289 }
stefanrousseau 16:17c5916f2d12 290
elmkom 41:85a736a9b900 291 bool checkSlots()
elmkom 41:85a736a9b900 292 {
elmkom 41:85a736a9b900 293 bool changed = false;
elmkom 41:85a736a9b900 294 int s1 = !slot1;
elmkom 41:85a736a9b900 295 int s2 = !slot2;
elmkom 41:85a736a9b900 296 int s3 = !slot3;
elmkom 41:85a736a9b900 297 if(lastSlot1 != s1 || lastSlot2 != s2 ||lastSlot3 != s3)
elmkom 41:85a736a9b900 298 {
elmkom 41:85a736a9b900 299 pc.printf("slot 1 %d\r\n",s1);
elmkom 41:85a736a9b900 300 pc.printf("slot 2 %d\r\n",s2);
elmkom 41:85a736a9b900 301 pc.printf("slot 3 %d\r\n",s3);
elmkom 41:85a736a9b900 302 changed = true;
elmkom 41:85a736a9b900 303 }
elmkom 41:85a736a9b900 304 lastSlot1 = s1;
elmkom 41:85a736a9b900 305 lastSlot2 = s2;
elmkom 41:85a736a9b900 306 lastSlot3 = s3;
elmkom 41:85a736a9b900 307 return changed;
elmkom 41:85a736a9b900 308 }
elmkom 44:60008ebffdd4 309 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 310 bool scanStrip(int id)
elmkom 44:60008ebffdd4 311 {
elmkom 44:60008ebffdd4 312 bool stripChanged = false;
elmkom 44:60008ebffdd4 313 ATT160826& strip = *strips[id];
elmkom 44:60008ebffdd4 314 att160826_data_t *data = &strip_data[id];
elmkom 44:60008ebffdd4 315 bool ok = strip.scan(data);
elmkom 44:60008ebffdd4 316
elmkom 44:60008ebffdd4 317 if(ok)
elmkom 44:60008ebffdd4 318 {
elmkom 44:60008ebffdd4 319 // printf("%d\r\n",id);
elmkom 44:60008ebffdd4 320 for (int i = 1; i < SENSORS_PER_STRIP;i++) { // ignore first sensor it is blocked
elmkom 44:60008ebffdd4 321
elmkom 44:60008ebffdd4 322 /*
elmkom 44:60008ebffdd4 323 if (strip_data[id].sensor[i].present) {
elmkom 44:60008ebffdd4 324 printf(" %3d", strip_data[id].sensor[i].sample.prox);
elmkom 44:60008ebffdd4 325 } else {
elmkom 44:60008ebffdd4 326 printf(" %3s", "---");
elmkom 44:60008ebffdd4 327 }
elmkom 44:60008ebffdd4 328 */
elmkom 44:60008ebffdd4 329 if (strip_data[id].sensor[i].present) {
elmkom 44:60008ebffdd4 330
elmkom 44:60008ebffdd4 331 if (abs(last_data[id].sensor[i].sample.prox - strip_data[id].sensor[i].sample.prox) > 50)
elmkom 44:60008ebffdd4 332 {
elmkom 44:60008ebffdd4 333 stripChanged = true;
elmkom 44:60008ebffdd4 334 last_data[id].sensor[i].sample.prox = strip_data[id].sensor[i].sample.prox;
elmkom 44:60008ebffdd4 335 last_data[id].sensor[i].sample.als_vis = strip_data[id].sensor[i].sample.als_vis;
elmkom 44:60008ebffdd4 336 last_data[id].sensor[i].sample.als_ir = strip_data[id].sensor[i].sample.als_ir;
elmkom 44:60008ebffdd4 337 }
elmkom 44:60008ebffdd4 338
elmkom 44:60008ebffdd4 339 }
elmkom 44:60008ebffdd4 340 }
elmkom 44:60008ebffdd4 341 // printf("\r\n");
elmkom 44:60008ebffdd4 342 }
elmkom 44:60008ebffdd4 343 else
elmkom 44:60008ebffdd4 344 printf("scan of strip %d failed",id);
elmkom 44:60008ebffdd4 345 return stripChanged;
elmkom 44:60008ebffdd4 346 }
elmkom 44:60008ebffdd4 347 #endif
elmkom 41:85a736a9b900 348
JMF 0:9d5134074d84 349 int main() {
elmkom 36:f8d96ff1dd1b 350
JMF 2:0e2ef866af95 351 int i;
elmkom 41:85a736a9b900 352
JMF 0:9d5134074d84 353 HTS221 hts221;
JMF 0:9d5134074d84 354 pc.baud(115200);
elmkom 42:8500f0cb2ea5 355
JMF 0:9d5134074d84 356 void hts221_init(void);
JMF 0:9d5134074d84 357
fkellermavnet 20:27a4f27254d0 358 // Set LED to RED until init finishes
fkellermavnet 20:27a4f27254d0 359 SetLedColor(0x1);
fkellermavnet 20:27a4f27254d0 360
JMF 1:af7a42f7d465 361 pc.printf(BLU "Hello World from AT&T Shape!\r\n\n\r");
JMF 0:9d5134074d84 362 pc.printf(GRN "Initialize the HTS221\n\r");
JMF 0:9d5134074d84 363
JMF 0:9d5134074d84 364 i = hts221.begin();
JMF 0:9d5134074d84 365 if( i )
JMF 0:9d5134074d84 366 pc.printf(BLU "HTS221 Detected! (0x%02X)\n\r",i);
JMF 0:9d5134074d84 367 else
JMF 0:9d5134074d84 368 pc.printf(RED "HTS221 NOT DETECTED!!\n\r");
JMF 0:9d5134074d84 369
JMF 0:9d5134074d84 370 printf("Temp is: %0.2f F \n\r",CTOF(hts221.readTemperature()));
JMF 0:9d5134074d84 371 printf("Humid is: %02d %%\n\r",hts221.readHumidity());
elmkom 35:2e864bae3af0 372
stefanrousseau 11:e6602513730f 373
JMF 0:9d5134074d84 374 // Initialize the modem
JMF 0:9d5134074d84 375 printf(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
elmkom 45:fe90f1fcb4e0 376 if(!wnc.init())
elmkom 45:fe90f1fcb4e0 377 {
elmkom 45:fe90f1fcb4e0 378 pc.printf(RED "Modem initialization failed!" DEF "\n");
elmkom 45:fe90f1fcb4e0 379 system_reset();
elmkom 45:fe90f1fcb4e0 380 }
elmkom 45:fe90f1fcb4e0 381
elmkom 41:85a736a9b900 382
elmkom 42:8500f0cb2ea5 383 iccid = wnc.getIccid();
elmkom 42:8500f0cb2ea5 384 printf(GRN "ICCID = %s" DEF "\r\n",iccid);
elmkom 45:fe90f1fcb4e0 385
elmkom 45:fe90f1fcb4e0 386
elmkom 42:8500f0cb2ea5 387
JMF 2:0e2ef866af95 388 //Software init
elmkom 45:fe90f1fcb4e0 389 if(!wnc.startInternet())
elmkom 45:fe90f1fcb4e0 390 system_reset();
elmkom 45:fe90f1fcb4e0 391
elmkom 45:fe90f1fcb4e0 392 char* ip = wnc.resolveDn(MY_SERVER_URL);
elmkom 45:fe90f1fcb4e0 393 if(strlen(ip) == 0)
elmkom 45:fe90f1fcb4e0 394 {
elmkom 45:fe90f1fcb4e0 395 printf(RED "Failed to resolve IP for %s" DEF "\r\n",MY_SERVER_URL);
elmkom 45:fe90f1fcb4e0 396 }
elmkom 45:fe90f1fcb4e0 397 else
elmkom 45:fe90f1fcb4e0 398 printf(GRN "IP = %s" DEF "\r\n",ip);
stefanrousseau 3:26b3cc155f39 399
fkellermavnet 20:27a4f27254d0 400 // Set LED BLUE for partial init
fkellermavnet 20:27a4f27254d0 401 SetLedColor(0x4);
elmkom 44:60008ebffdd4 402
elmkom 44:60008ebffdd4 403 wnc.setPowerSave(true,wnc.gett3412Timer(),wnc.gett3324Timer());
elmkom 41:85a736a9b900 404
elmkom 44:60008ebffdd4 405 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 406 bool stripChanged[2];
elmkom 44:60008ebffdd4 407 myi2c = new I2C(PTE25, PTE24);
elmkom 45:fe90f1fcb4e0 408 //myi2c = new I2C(PTC11, PTC10);
elmkom 44:60008ebffdd4 409 myi2c->frequency(100000);
elmkom 44:60008ebffdd4 410 ATT160826 strip0 (myi2c, 0);
elmkom 44:60008ebffdd4 411 ATT160826 strip1 (myi2c, 3);
elmkom 44:60008ebffdd4 412 strips[0] = &strip0;
elmkom 44:60008ebffdd4 413 strips[1] = &strip1;
elmkom 44:60008ebffdd4 414
elmkom 44:60008ebffdd4 415 #elif PROXIMITYON == 2
elmkom 44:60008ebffdd4 416
elmkom 44:60008ebffdd4 417 myi2c = new I2C(PTE25, PTE24);
elmkom 45:fe90f1fcb4e0 418
elmkom 44:60008ebffdd4 419 myi2c->frequency(100000);
elmkom 44:60008ebffdd4 420 Proximity strip0;
elmkom 44:60008ebffdd4 421 Proximity strip1;
elmkom 44:60008ebffdd4 422 proximityStrip[0] = strip0;
elmkom 44:60008ebffdd4 423 proximityStrip[1] = strip1;
elmkom 44:60008ebffdd4 424 proximityStrip[0].init(myi2c, 0x70);
elmkom 44:60008ebffdd4 425 proximityStrip[1].init(myi2c, 0x73);
elmkom 44:60008ebffdd4 426 proximityStrip[0].on();
elmkom 44:60008ebffdd4 427 proximityStrip[1].on();
elmkom 44:60008ebffdd4 428
elmkom 41:85a736a9b900 429 #endif
elmkom 38:532a0d929756 430
elmkom 45:fe90f1fcb4e0 431 int count = 5*120;
JMF 2:0e2ef866af95 432 // Send and receive data perpetually
JMF 2:0e2ef866af95 433 while(1) {
elmkom 38:532a0d929756 434
elmkom 42:8500f0cb2ea5 435 wnc.checkPassthrough();
elmkom 38:532a0d929756 436 //sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
elmkom 38:532a0d929756 437 //sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
elmkom 38:532a0d929756 438 // read_sensors(); //read available external sensors from a PMOD and the on-board motion sensor
elmkom 41:85a736a9b900 439 toggleLed = !toggleLed;
elmkom 41:85a736a9b900 440 if(toggleLed)
elmkom 41:85a736a9b900 441 SetLedColor(0x2); //green
elmkom 41:85a736a9b900 442 else
elmkom 41:85a736a9b900 443 SetLedColor(0); //off
elmkom 41:85a736a9b900 444
elmkom 41:85a736a9b900 445 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 446
elmkom 44:60008ebffdd4 447 if(stripChanged[0] == false)
elmkom 44:60008ebffdd4 448 stripChanged[0] = scanStrip(0);
elmkom 44:60008ebffdd4 449 if(stripChanged[1] == false)
elmkom 44:60008ebffdd4 450 stripChanged[1] = scanStrip(1);
elmkom 44:60008ebffdd4 451
elmkom 44:60008ebffdd4 452 #elif PROXIMITYON == 2
elmkom 44:60008ebffdd4 453
elmkom 44:60008ebffdd4 454 printf("scan %d\r\n",count);
elmkom 44:60008ebffdd4 455 bool stripChanged = false;
elmkom 44:60008ebffdd4 456 proximityStrip[0].scan();
elmkom 44:60008ebffdd4 457 printf("scan0 done %d\r\n",count);
elmkom 44:60008ebffdd4 458 proximityStrip[1].scan();
elmkom 44:60008ebffdd4 459 printf("scan1 done %d\r\n",count);
elmkom 44:60008ebffdd4 460 stripChanged |= proximityStrip[0].changed(50);
elmkom 44:60008ebffdd4 461 printf("scan0 change %d\r\n",stripChanged);
elmkom 44:60008ebffdd4 462 stripChanged |= proximityStrip[1].changed(50);
elmkom 44:60008ebffdd4 463 printf("scan1 change %d\r\n",stripChanged);
elmkom 44:60008ebffdd4 464
elmkom 41:85a736a9b900 465 #else
elmkom 41:85a736a9b900 466 bool slotsChanged = checkSlots();
elmkom 41:85a736a9b900 467 #endif
elmkom 44:60008ebffdd4 468
elmkom 44:60008ebffdd4 469 char modem_string[512];
elmkom 41:85a736a9b900 470
elmkom 45:fe90f1fcb4e0 471 #if PROXIMITYON == 1
elmkom 46:319a3f1e8ba9 472
elmkom 46:319a3f1e8ba9 473 if(count >= 5*30)
elmkom 44:60008ebffdd4 474 {
elmkom 44:60008ebffdd4 475 stripChanged[0] = true;
elmkom 44:60008ebffdd4 476 stripChanged[1] = true;
elmkom 44:60008ebffdd4 477 }
elmkom 46:319a3f1e8ba9 478
elmkom 45:fe90f1fcb4e0 479 if(sw2 == 0)
elmkom 45:fe90f1fcb4e0 480 {
elmkom 45:fe90f1fcb4e0 481 stripChanged[0] = true;
elmkom 45:fe90f1fcb4e0 482 stripChanged[1] = true;
elmkom 45:fe90f1fcb4e0 483 }
elmkom 44:60008ebffdd4 484 if(stripChanged[0] || stripChanged[1])
elmkom 44:60008ebffdd4 485
elmkom 44:60008ebffdd4 486
elmkom 44:60008ebffdd4 487 #elif PROXIMITYON == 2
elmkom 44:60008ebffdd4 488 if(count >= 5*60 || stripChanged )
elmkom 41:85a736a9b900 489 #else
elmkom 41:85a736a9b900 490 if(count >= 5*60 || slotsChanged)
elmkom 41:85a736a9b900 491 #endif
elmkom 38:532a0d929756 492 {
elmkom 42:8500f0cb2ea5 493 if(wnc.isPowerSaveOn())
elmkom 42:8500f0cb2ea5 494 {
elmkom 42:8500f0cb2ea5 495 wnc.wakeFromPowerSave();
elmkom 42:8500f0cb2ea5 496 //wnc.ping("108.244.165.22");
elmkom 42:8500f0cb2ea5 497 }
elmkom 38:532a0d929756 498 count = 0;
elmkom 38:532a0d929756 499 SetLedColor(0x04); //blue
elmkom 36:f8d96ff1dd1b 500
elmkom 44:60008ebffdd4 501
elmkom 41:85a736a9b900 502
elmkom 41:85a736a9b900 503 #if PROXIMITYON == 1
elmkom 44:60008ebffdd4 504 if(stripChanged[0])
elmkom 44:60008ebffdd4 505 {
elmkom 44:60008ebffdd4 506 GenerateModemString(&modem_string[0],PROXIMITY_ONLY,0);
elmkom 44:60008ebffdd4 507 stripChanged[0] = false;
elmkom 44:60008ebffdd4 508 }
elmkom 44:60008ebffdd4 509 else if (stripChanged[1])
elmkom 44:60008ebffdd4 510 {
elmkom 44:60008ebffdd4 511 GenerateModemString(&modem_string[0],PROXIMITY_ONLY,3);
elmkom 44:60008ebffdd4 512 stripChanged[1] = false;
elmkom 44:60008ebffdd4 513 }
elmkom 44:60008ebffdd4 514 else
elmkom 44:60008ebffdd4 515 GenerateModemString(&modem_string[0],PROXIMITY_ONLY,-1);
elmkom 44:60008ebffdd4 516 #elif PROXIMITYON == 2
elmkom 44:60008ebffdd4 517 GenerateModemString(&modem_string[0],PROXIMITY_ONLY,0);
elmkom 41:85a736a9b900 518 #else
elmkom 44:60008ebffdd4 519 GenerateModemString(&modem_string[0],SWITCH_ONLY,0);
elmkom 41:85a736a9b900 520 #endif
elmkom 41:85a736a9b900 521
elmkom 38:532a0d929756 522 printf(BLU "Sending to modem : %s" DEF "\r\n", modem_string);
elmkom 42:8500f0cb2ea5 523
elmkom 44:60008ebffdd4 524 //if(wnc.connect("108.244.165.22",5005)) // node-red
elmkom 45:fe90f1fcb4e0 525
elmkom 45:fe90f1fcb4e0 526
elmkom 45:fe90f1fcb4e0 527 if(wnc.connect(ip,MY_PORT)) // shelf
elmkom 44:60008ebffdd4 528 //if(wnc.connect("52.33.231.251",80)) // car
elmkom 42:8500f0cb2ea5 529 {
elmkom 45:fe90f1fcb4e0 530 if(wnc.writeSocket(modem_string))
elmkom 42:8500f0cb2ea5 531 {
elmkom 45:fe90f1fcb4e0 532
elmkom 45:fe90f1fcb4e0 533 char* mydata;
elmkom 45:fe90f1fcb4e0 534 int tries = 8;
elmkom 45:fe90f1fcb4e0 535 while(tries > 0) // wait for reply
elmkom 45:fe90f1fcb4e0 536 {
elmkom 45:fe90f1fcb4e0 537 tries--;
elmkom 45:fe90f1fcb4e0 538 mydata = wnc.readSocket();
elmkom 45:fe90f1fcb4e0 539 if (strlen(mydata) > 0)
elmkom 45:fe90f1fcb4e0 540 break;
elmkom 42:8500f0cb2ea5 541
elmkom 45:fe90f1fcb4e0 542 wait(0.5);
elmkom 45:fe90f1fcb4e0 543 }
elmkom 42:8500f0cb2ea5 544
elmkom 45:fe90f1fcb4e0 545 if (strlen(mydata) > 0)
elmkom 45:fe90f1fcb4e0 546 {
elmkom 37:ee01f752524a 547
elmkom 45:fe90f1fcb4e0 548 SetLedColor(0x2); // green
elmkom 45:fe90f1fcb4e0 549 //only copy on sucessful send
elmkom 38:532a0d929756 550
elmkom 45:fe90f1fcb4e0 551 printf(BLU "Read back : [%s]" DEF "\r\n", mydata);
elmkom 45:fe90f1fcb4e0 552 char datareply[512];
elmkom 45:fe90f1fcb4e0 553 if (extract_reply(mydata, datareply))
elmkom 45:fe90f1fcb4e0 554 {
elmkom 45:fe90f1fcb4e0 555 printf(GRN "JSON : %s" DEF "\r\n", datareply);
elmkom 45:fe90f1fcb4e0 556 parse_reply(datareply);
elmkom 45:fe90f1fcb4e0 557 }
elmkom 45:fe90f1fcb4e0 558 SetLedColor(0); // off
elmkom 45:fe90f1fcb4e0 559 }
elmkom 45:fe90f1fcb4e0 560 else // no reply reset
elmkom 42:8500f0cb2ea5 561 {
elmkom 45:fe90f1fcb4e0 562 SetLedColor(0x1); //red
elmkom 45:fe90f1fcb4e0 563 system_reset();
elmkom 45:fe90f1fcb4e0 564 }
elmkom 42:8500f0cb2ea5 565 }
elmkom 42:8500f0cb2ea5 566 wnc.disconnect();
elmkom 38:532a0d929756 567 }
elmkom 42:8500f0cb2ea5 568 else // failed to connect reset
elmkom 38:532a0d929756 569 {
elmkom 38:532a0d929756 570 SetLedColor(0x1); //red
elmkom 42:8500f0cb2ea5 571 system_reset();
elmkom 42:8500f0cb2ea5 572 }
elmkom 42:8500f0cb2ea5 573 if(wnc.isPowerSaveOn())
elmkom 42:8500f0cb2ea5 574 wnc.resumePowerSave();
elmkom 38:532a0d929756 575 }
elmkom 38:532a0d929756 576 count++;
elmkom 38:532a0d929756 577 wait(0.2);
stefanrousseau 3:26b3cc155f39 578 } //forever loop
JMF 0:9d5134074d84 579 }