GSMA version

Dependencies:   FXOS8700CQ mbed

Fork of AvnetATT_shape_hackathon by Rick McConney

Revision:
46:733edf15f9e8
Parent:
45:fe90f1fcb4e0
--- a/main.cpp	Wed Nov 30 14:50:16 2016 +0000
+++ b/main.cpp	Mon Jan 09 18:23:37 2017 +0000
@@ -1,30 +1,14 @@
 #include "mbed.h"
 #include <cctype>
 #include "SerialBuffered.h"
-#include "HTS221.h"
 #include "config_me.h"
-#include "sensors.h"
-#include "Proximity.h"
 #include "Wnc.h"
 
-#include "hardware.h"
-#include "att160826.h"
-
 extern SerialBuffered mdm;
 Wnc wnc;
-
-I2C i2c(PTC11, PTC10);    //SDA, SCL -- define the I2C pins being used
-I2C *myi2c;
-
-#define PROXIMITYON 1
+int seqNum =0;
+int msgLen = 10;
 
-#if PROXIMITYON == 1
-att160826_data_t strip_data[2];
-att160826_data_t last_data[2];
-ATT160826 *strips[2];
-#elif PROXIMITYON == 2
-Proximity proximityStrip[2];
-#endif
 
 // comment out the following line if color is not supported on the terminal
 #define USE_COLOR
@@ -55,10 +39,6 @@
 
 
 
-
-
-
-
 int mdm_dbgmask = MDM_DBG_OFF;
 
 Serial         pc(USBTX, USBRX);
@@ -71,16 +51,13 @@
 
 
 
-DigitalIn   slot1(PTB3,PullUp);
-DigitalIn   slot2(PTB10,PullUp);
-DigitalIn   slot3(PTB11,PullUp);
+//DigitalIn   slot1(PTB3,PullUp);
+//DigitalIn   slot2(PTB10,PullUp);
+//DigitalIn   slot3(PTB11,PullUp);
 
 DigitalIn   sw2(SW2);
 
-int lastSlot1;
-int lastSlot2;
-int lastSlot3;
-char *iccid;
+
 #define TOUPPER(a) (a) //toupper(a)
 
 
@@ -90,7 +67,7 @@
 #define MAX_AT_RSP_LEN                          255
 
 bool toggleLed = false;
-int seqNum;
+
 
 
 //********************************************************************************************************************************************
@@ -99,277 +76,39 @@
 //********************************************************************************************************************************************
 void SetLedColor(unsigned char ucColor)
 {
-    if(wnc.isPowerSaveOn()) 
-    {
-        led_red = !0;
-        led_green = !0;
-        led_blue = !(ucColor & 0x4);
-    }
-    else
-    {
-        //Note that when an LED is on, you write a 0 to it:
-        led_red = !(ucColor & 0x1); //bit 0
-        led_green = !(ucColor & 0x2); //bit 1
-        led_blue = !(ucColor & 0x4); //bit 2
-    }
+
+    //Note that when an LED is on, you write a 0 to it:
+    led_red = !(ucColor & 0x1); //bit 0
+    led_green = !(ucColor & 0x2); //bit 1
+    led_blue = !(ucColor & 0x4); //bit 2
+
 } //SetLedColor() 
 
 
 void system_reset()
 {
-    //wnc.passthrough();
     printf(RED "\n\rSystem resetting..." DEF "\n");
     NVIC_SystemReset();
 }
-
-
-#define CTOF(x)  ((x)*1.8+32)
-
-//********************************************************************************************************************************************
-//* Create string with sensor readings that can be sent to flow as an HTTP get
-//********************************************************************************************************************************************
-K64F_Sensors_t  SENSOR_DATA =
-{
-    .Temperature        = "0",
-    .Humidity           = "0",
-    .AccelX             = "0",
-    .AccelY             = "0",
-    .AccelZ             = "0",
-    .MagnetometerX      = "0",
-    .MagnetometerY      = "0",
-    .MagnetometerZ      = "0",
-    .AmbientLightVis    = "0",
-    .AmbientLightIr     = "0",
-    .UVindex            = "0",
-    .Proximity          = "0",
-    .Temperature_Si7020 = "0",
-    .Humidity_Si7020    = "0"
-};
-
-
-
-void GenerateModemString(char * modem_string,int sensor,int strip)
-{
-    switch(sensor)
-    {
-#if PROXIMITYON == 1
-
-        case PROXIMITY_ONLY:
-        {
-            if(strip == -1)
-            {
-                seqNum++;
-                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);
-                break;
-            }
-            int stripIndex = 0;
-            if(strip == 3)
-                stripIndex = 1;
-            char data[256];
-            int i=0;
-            int index = 0;
-            index += sprintf(&data[index],"[");
-            for (i=1; i<SENSORS_PER_STRIP; i++)
-            {
-                short  p = last_data[stripIndex].sensor[i].sample.prox;
-                short l = last_data[stripIndex].sensor[i].sample.als_vis;
-                short r = last_data[stripIndex].sensor[i].sample.als_ir;
-                if(i<SENSORS_PER_STRIP-1)
-                    index += snprintf(&data[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d},", i,p,l,r);
-                else
-                    index += snprintf(&data[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d}]", i,p,l,r);
-
-            } 
-            
-
-            seqNum++;
-            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);
-            break;
-        }
-#elif PROXIMITYON == 2
-        case PROXIMITY_ONLY:
-        {
-
-            char* data0 = proximityStrip[0].getDataStr();
-            char* data1 = proximityStrip[1].getDataStr();
-            seqNum++;
-            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);
-            break;
-        }
-#endif
-        case SWITCH_ONLY:
-        {
-            char data[32];
-            sprintf(data,"[{\"p\":%d},{\"p\":%d},{\"p\":%d}]",lastSlot1*26,lastSlot2*26,lastSlot3*26);
-            seqNum++;
-            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);
-            break;
-        }
-        case TEMP_HUMIDITY_ONLY:
-        {
-            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);
-            break;
-        }
-        case TEMP_HUMIDITY_ACCELEROMETER:
-        {
-            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);
-            break;
-        }
-        case TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS:
-        {
-            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);
-            break;
-        }
-        default:
-        {
-            sprintf(modem_string, "Invalid sensor selected\r\n\r\n");
-            break;
-        }
-    } //switch(iSensorsToReport)
-} //GenerateModemString        
-            
-            
-//********************************************************************************************************************************************
-//* Process JSON response messages
-//********************************************************************************************************************************************
-bool extract_reply(char* search_field, char* found_string)
-{
-    char* beginquote;
-    char* endquote;
-    beginquote = strstr(search_field, "\r\n\r\n"); //start of data
-    endquote = strchr(search_field, '\0');
-    if (beginquote != 0)
-    {
-        uint16_t ifoundlen;
-        if (endquote != 0)
-        {
-            ifoundlen = (uint16_t) (endquote - beginquote) + 1;
-            strncpy(found_string, beginquote, ifoundlen );
-            found_string[ifoundlen] = 0; //null terminate
-            return true;
-        }
-    }
-
-    return false;
-
-} //extract_reply
-
-
-void parse_reply(char* reply)
-{
-    char *tokens[5];
-    int index = 0;
-    tokens[index++] = strtok(reply," ");  
-    while( index < 5 ) 
-    {    
-      char* token = strtok(NULL, " ");
-      if(token == NULL) break;
-      tokens[index++] = token;
-    }
-    if(strcmp("PSM",tokens[1]) == 0)
-    {
-
-        int t3412 = atoi(tokens[3]);
-        int t3324 = atoi(tokens[4]);
-        pc.printf("t3412 %d t3324 %d\r\n",t3412,t3324);
-        // setTauTimer(t3412);
-        //setActivityTimer(t3324);
-        
-        if(strcmp("true",tokens[2]) == 0)
-        {
-            pc.printf("PSM ON\r\n");
-            wnc.setPowerSave(true,t3412,t3324);
-        }
-        else
-        {
-            pc.printf("PSM OFF\r\n");
-            wnc.setPowerSave(false,t3412,t3324);
-        }
-    }        
+ 
+void GenerateTestString(char * modem_string,int len)
+{           
+    seqNum++;
+    char data[len+1];
+    for(int i = 0;i<len;i++)
+        data[i] = 'a';
+    data[len] = 0;
+    sprintf(modem_string, "%s", data);
 }
 
-bool checkSlots()
-{
-    bool changed = false;
-    int s1 = !slot1;
-    int s2 = !slot2;
-    int s3 = !slot3;
-    if(lastSlot1 != s1 || lastSlot2 != s2 ||lastSlot3 != s3)
-    {
-        pc.printf("slot 1 %d\r\n",s1);
-        pc.printf("slot 2 %d\r\n",s2);
-        pc.printf("slot 3 %d\r\n",s3);
-        changed = true;
-    }
-    lastSlot1 = s1;
-    lastSlot2 = s2;
-    lastSlot3 = s3;
-    return changed;
-}
-#if PROXIMITYON == 1 
-bool scanStrip(int id)
-{
-    bool stripChanged = false;
-    ATT160826&  strip = *strips[id];
-    att160826_data_t *data = &strip_data[id];
-    bool ok = strip.scan(data);
-     
-    if(ok)
-    {  
-       // printf("%d\r\n",id);
-        for (int i = 1; i < SENSORS_PER_STRIP;i++) { // ignore first sensor it is blocked
-         
-          /*  
-            if (strip_data[id].sensor[i].present) {
-                printf(" %3d", strip_data[id].sensor[i].sample.prox);
-            } else {
-                printf(" %3s", "---");
-            }
-            */
-            if (strip_data[id].sensor[i].present) {
-                
-                if (abs(last_data[id].sensor[i].sample.prox - strip_data[id].sensor[i].sample.prox) > 50)
-                {
-                    stripChanged = true; 
-                    last_data[id].sensor[i].sample.prox = strip_data[id].sensor[i].sample.prox;
-                    last_data[id].sensor[i].sample.als_vis = strip_data[id].sensor[i].sample.als_vis;
-                    last_data[id].sensor[i].sample.als_ir = strip_data[id].sensor[i].sample.als_ir;   
-                }
-
-            }
-        }
-        // printf("\r\n");
-    }
-    else
-        printf("scan of strip %d failed",id);
-    return stripChanged;
-}
-#endif
-
 int main() {
 
-    int i;
-
-    HTS221 hts221;
     pc.baud(115200);
    
-    void hts221_init(void);
-
     // Set LED to RED until init finishes
     SetLedColor(0x1);
 
-    pc.printf(BLU "Hello World from AT&T Shape!\r\n\n\r");
-    pc.printf(GRN "Initialize the HTS221\n\r");
-
-    i = hts221.begin();  
-    if( i ) 
-        pc.printf(BLU "HTS221 Detected! (0x%02X)\n\r",i);
-    else
-        pc.printf(RED "HTS221 NOT DETECTED!!\n\r");
-
-    printf("Temp  is: %0.2f F \n\r",CTOF(hts221.readTemperature()));
-    printf("Humid is: %02d %%\n\r",hts221.readHumidity());
-
+    pc.printf(BLU "Hello World\r\n\n\r");
 
     // Initialize the modem
     printf(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
@@ -378,9 +117,8 @@
         pc.printf(RED "Modem initialization failed!" DEF "\n");
         system_reset();
     }
-       
-    
-    iccid = wnc.getIccid();
+          
+    char* iccid = wnc.getIccid();
     printf(GRN "ICCID = %s" DEF "\r\n",iccid);
     
 
@@ -400,136 +138,25 @@
     // Set LED BLUE for partial init
     SetLedColor(0x4);
  
-    wnc.setPowerSave(true,wnc.gett3412Timer(),wnc.gett3324Timer());
- 
-#if PROXIMITYON == 1 
-    bool stripChanged[2];
-    myi2c = new I2C(PTE25, PTE24); 
-    //myi2c = new I2C(PTC11, PTC10); 
-    myi2c->frequency(100000);
-    ATT160826 strip0 (myi2c, 0);
-    ATT160826 strip1 (myi2c, 3);
-    strips[0] = &strip0;
-    strips[1] = &strip1;
-    
-#elif PROXIMITYON == 2
-
-    myi2c = new I2C(PTE25, PTE24); 
+    char modem_string[512];                
     
-    myi2c->frequency(100000);
-    Proximity strip0;
-    Proximity strip1;
-    proximityStrip[0] = strip0;
-    proximityStrip[1] = strip1;
-    proximityStrip[0].init(myi2c, 0x70); 
-    proximityStrip[1].init(myi2c, 0x73);
-    proximityStrip[0].on(); 
-    proximityStrip[1].on(); 
-     
-#endif
-
-    int count = 5*120;
-    // Send and receive data perpetually
-    while(1) {
-       
-        wnc.checkPassthrough();
-        //sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
-        //sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
-        // read_sensors(); //read available external sensors from a PMOD and the on-board motion sensor
+    while(true)
+    {   
         toggleLed = !toggleLed;
         if(toggleLed)
             SetLedColor(0x2); //green 
         else    
-            SetLedColor(0); //off   
-
-#if PROXIMITYON == 1            
-    
-     if(stripChanged[0] == false)
-        stripChanged[0] = scanStrip(0);
-     if(stripChanged[1] == false)
-        stripChanged[1] = scanStrip(1); 
-     
-#elif PROXIMITYON == 2
-
-    printf("scan %d\r\n",count);
-    bool stripChanged = false;
-    proximityStrip[0].scan();
-    printf("scan0 done %d\r\n",count);
-    proximityStrip[1].scan();
-    printf("scan1 done %d\r\n",count);
-    stripChanged |= proximityStrip[0].changed(50);
-    printf("scan0 change %d\r\n",stripChanged);
-    stripChanged |= proximityStrip[1].changed(50);
-    printf("scan1 change %d\r\n",stripChanged);
-    
-#else
-        bool slotsChanged = checkSlots();
-#endif
-
-     char modem_string[512];                
-        
-#if PROXIMITYON == 1 
-/*           
-        if(count >= 5*120)
-        {
-            stripChanged[0] = true;
-            stripChanged[1] = true;
-        }
- */     
+            SetLedColor(0); //off 
+            
         if(sw2 == 0)
-        {
-            stripChanged[0] = true;
-            stripChanged[1] = true;
-        }             
-        if(stripChanged[0] || stripChanged[1])
-
-        
-#elif PROXIMITYON == 2
-        if(count >= 5*60 || stripChanged )
-#else
-        if(count >= 5*60 || slotsChanged)
-#endif
-        {
-            if(wnc.isPowerSaveOn())
-            {
-                wnc.wakeFromPowerSave();
-                //wnc.ping("108.244.165.22");
-            }
-            count = 0;
-            SetLedColor(0x04); //blue
-                
-
-            
-#if PROXIMITYON == 1
-        if(stripChanged[0])
-        {
-            GenerateModemString(&modem_string[0],PROXIMITY_ONLY,0);
-            stripChanged[0] = false;
-        }
-        else if (stripChanged[1])
-        {
-            GenerateModemString(&modem_string[0],PROXIMITY_ONLY,3);
-            stripChanged[1] = false;
-        }
-        else
-            GenerateModemString(&modem_string[0],PROXIMITY_ONLY,-1);
-#elif PROXIMITYON == 2
-            GenerateModemString(&modem_string[0],PROXIMITY_ONLY,0);
-#else
-            GenerateModemString(&modem_string[0],SWITCH_ONLY,0);
-#endif
-  
+        {      
+            GenerateTestString(modem_string,msgLen);
             printf(BLU "Sending to modem : %s" DEF "\r\n", modem_string);
-
-            //if(wnc.connect("108.244.165.22",5005)) // node-red
-            
-            
+                      
             if(wnc.connect(ip,MY_PORT)) // shelf
-            //if(wnc.connect("52.33.231.251",80)) // car
             {
                 if(wnc.writeSocket(modem_string))
-                {
-           
+                {       
                     char* mydata;
                     int tries = 8;
                     while(tries > 0) // wait for reply
@@ -543,25 +170,11 @@
                     }
             
                     if (strlen(mydata) > 0)
-                    {   
-                                
+                    {                                 
                         SetLedColor(0x2); // green
-                        //only copy on sucessful send
-
                         printf(BLU "Read back : [%s]" DEF "\r\n", mydata);
-                        char datareply[512];
-                        if (extract_reply(mydata, datareply))
-                        {
-                            printf(GRN "JSON : %s" DEF "\r\n", datareply);
-                            parse_reply(datareply);
-                        }
-                        SetLedColor(0); // off             
+                        sscanf(mydata,"LEN=%d",&msgLen);
                     }
-                    else // no reply reset
-                    {
-                        SetLedColor(0x1); //red
-                        system_reset();                 
-                    } 
                 }
                 wnc.disconnect();
             }
@@ -569,11 +182,8 @@
             {
                 SetLedColor(0x1); //red
                 system_reset(); 
-            }
-            if(wnc.isPowerSaveOn())
-                wnc.resumePowerSave();   
+            }   
         }
-        count++;
         wait(0.2); 
     } //forever loop
 }