Remote I/O Sensor bus with AT&T flow and M2X cloud

Dependencies:   DHT11 FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Revision:
69:5a3414cc7531
Parent:
68:6e311c747045
Child:
70:24d5800f27be
--- a/sensors.cpp	Thu Aug 11 00:03:09 2016 +0000
+++ b/sensors.cpp	Thu Aug 11 04:38:02 2016 +0000
@@ -18,8 +18,10 @@
 #include "mbed.h"
 #include "sensors.h"
 #include "hardware.h"
+#include "config_me.h"
 #include "FXOS8700CQ.h"
 #include "HTS221.h"
+#include "xadow_gps.h"
 #include <string>
 
 //I2C for pmod sensors:
@@ -419,6 +421,78 @@
     } //bHTS221_present
 } //Read_HTS221()
 
+bool bGPS_present = false;
+void Init_GPS(void)
+{
+    char scan_id[GPS_SCAN_SIZE+2]; //The first two bytes are the response length (0x00, 0x04)
+    I2C_WriteSingleByte(GPS_DEVICE_ADDR, GPS_SCAN_ID, false); //no hold, must do read
+
+    unsigned char i;
+    for(i=0;i<(GPS_SCAN_SIZE+2);i++)
+    {
+        scan_id[i] = I2C_ReadSingleByte(GPS_DEVICE_ADDR);
+    }
+
+    if(scan_id[5] != GPS_DEVICE_ID)
+    {
+        bGPS_present = false;
+        PRINTF("Xadow GPS not found\n");
+    }
+    else 
+    {
+        bGPS_present = true;
+        PRINTF("Xadow GPS Scan ID response = 0x%02X%02X (length), 0x%02X%02X%02X%02X\r\n", scan_id[0], scan_id[1], scan_id[2], scan_id[3], scan_id[4], scan_id[5]);
+        char status = gps_get_status();
+        if (iSensorsToReport == TEMP_HUMIDITY_ACCELEROMETER_GPS)
+        { //we must wait for GPS to initialize
+            PRINTF("Waiting for GPS to become ready... ");
+            while (status != 'A')
+            {
+                wait (5.0);        
+                char status = gps_get_status();
+                unsigned char num_satellites = gps_get_sate_in_veiw();
+                PRINTF("%c%d", status, num_satellites);
+            }
+            PRINTF("\r\n");
+        } //we must wait for GPS to initialize
+        PRINTF("gps_check_online is %d\r\n", gps_check_online());
+        unsigned char *data;
+        data = gps_get_utc_date_time();       
+        PRINTF("gps_get_utc_date_time : %d-%d-%d,%d:%d:%d\r\n", data[0], data[1], data[2], data[3], data[4], data[5]); 
+        PRINTF("gps_get_status        : %c ('A' = Valid, 'V' = Invalid)\r\n", gps_get_status());
+        PRINTF("gps_get_latitude      : %c:%f\r\n", gps_get_ns(), gps_get_latitude());
+        PRINTF("gps_get_longitude     : %c:%f\r\n", gps_get_ew(), gps_get_longitude());
+        PRINTF("gps_get_altitude      : %f meters\r\n", gps_get_altitude());
+        PRINTF("gps_get_speed         : %f knots\r\n", gps_get_speed());
+        PRINTF("gps_get_course        : %f degrees\r\n", gps_get_course());
+        PRINTF("gps_get_position_fix  : %c\r\n", gps_get_position_fix());
+        PRINTF("gps_get_sate_in_view  : %d satellites\r\n", gps_get_sate_in_veiw());
+        PRINTF("gps_get_sate_used     : %d\r\n", gps_get_sate_used());
+        PRINTF("gps_get_mode          : %c ('A' = Automatic, 'M' = Manual)\r\n", gps_get_mode());
+        PRINTF("gps_get_mode2         : %c ('1' = no fix, '1' = 2D fix, '3' = 3D fix)\r\n", gps_get_mode2()); 
+    } //bool bGPS_present = true
+} //Init_GPS()
+
+void Read_GPS()
+{
+    unsigned char gps_quality = 0; //default 
+    if (bGPS_present)
+    {
+        if ((gps_get_status() == 'A') && (gps_get_mode2() != '1'))
+        {
+            gps_quality = 1;
+        }
+        PRINTF("gps_quality           : %d\r\n", gps_quality);
+        PRINTF("gps_get_latitude      : %c:%f\r\n", gps_get_ns(), gps_get_latitude());
+        PRINTF("gps_get_longitude     : %c:%f\r\n", gps_get_ew(), gps_get_longitude());
+        PRINTF("gps_get_altitude      : %f meters\r\n", gps_get_altitude());
+        PRINTF("gps_get_speed         : %f knots\r\n", gps_get_speed());
+        PRINTF("gps_get_course        : %f degrees\r\n", gps_get_course());
+        //sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
+        //sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
+    } //bGPS_present
+} //Read_GPS()
+
 #ifdef USE_VIRTUAL_SENSORS
 bool bUsbConnected = false;
 volatile uint8_t usb_uart_rx_buff[256];
@@ -558,6 +632,7 @@
     Init_Si7020();
     Init_Si1145();
     Init_motion_sensor();
+    Init_GPS();
 } //sensors_init
 
 void read_sensors(void)
@@ -566,4 +641,5 @@
     Read_Si7020();
     Read_Si1145();
     Read_motion_sensor();
+    Read_GPS();
 } //read_sensors