whatever
Dependencies: C027 C027_Support M2XStreamClient PowerControl jsonlite mbed-rtos mbed
Fork of PONY_Ph0-uAXIS by
main.cpp
- Committer:
- sgmcb
- Date:
- 2015-12-11
- Revision:
- 39:c14aff678b25
- Parent:
- 38:d86e744166b6
- Child:
- 40:82b70b92169e
File content as of revision 39:c14aff678b25:
#include "mbed.h" //------------------------------------------------------------------------------------ /* This example was tested on C027-U20 and C027-G35 with the on board modem. Additionally it was tested with a shield where the SARA-G350/U260/U270 RX/TX/PWRON is connected to D0/D1/D4 and the GPS SCL/SDA is connected D15/D15. In this configuration the following platforms were tested (it is likely that others will work as well) - U-BLOX: C027-G35, C027-U20, C027-C20 (for shield set define C027_FORCE_SHIELD) - NXP: LPC1549v2, LPC4088qsb - Freescale: FRDM-KL05Z, FRDM-KL25Z, FRDM-KL46Z, FRDM-K64F - STM: NUCLEO-F401RE, NUCLEO-F030R8 mount resistors SB13/14 1k, SB62/63 0R */ // C027 Support Libraries #include "GPS.h" #include "MDM.h" #include <jsonlite.h> #include "M2XStreamClient.h" //------------------------------------------------------------------------------------ // Cellular modem/SIM parameters #define SIMPIN "1111" //!SIMPIN is 1111 by default for AT&T SIMs. #define APN "m2m.com.attz" // Defined AT&T M2M APN #define USERNAME NULL //! Set the user name for your APN, or NULL if not needed (which, apparently, it isn't) #define PASSWORD NULL //! Set the password for your APN, or NULL if not needed (which, apparently, it isn't) //------------------------------------------------------------------------------------ // AT&T M2X Kekys #define M2XAPIKEY "54c6bbf11012f34830bd23cc091ca250" #define DEVID "b9c57667ee0495dc0b3cddd890f8d2df" //------------------------------------------------------------------------------------ #include "PONY_Loc.h" // PONY Location Code #include "H3LIS331DL.h" // Accelerometer library // PIN Config DigitalIn jostle(P2_13); // GLOBALS Client client; M2XStreamClient m2xClient(&client, M2XAPIKEY); I2C axis(P0_0, P0_1); unsigned int kReadingDelay = 180 * 1000; // How many seconds to wait between reads unsigned int kReadingDelayClimb = 15000; // How many seconds to add to the wait period when sitting idle unsigned int kReadingDelayMax = 5 * 60000; // What's the maximum time between readings? double kLaLoDiffMin = 0.01; double kAltDiffMin = 2.00; unsigned int kIdleSpins = 0; void parseM2XLocation2(const char* name, double latitude, double longitude, double elevation, const char* timestamp, int index, void* context) { printf("\n\n\n\n\n\n\n\n\n\n\n\n\nparseM2XLocation2\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); } //#define CELLOCATE //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ int main(void) { printf("\r\n\n\n\n-----\r\nI'm alive - u9\r\n\n"); int ret = 0; int len = 0; char buf[2048] = ""; // Create the GPS object GPSI2C gpsInst; // Struct for our GPS sentence info struct GPSbundle GPSone; GPSone.bGPS = gpsInst; GPSone.bRet = ret; GPSone.bLen = len; GPSone.bBuf = &buf[0]; GPSone.bBufLen = sizeof(buf); // Struct for item location //double timestamp = 0, lat = 0, lon = 0, alt = 0, vel = 0; struct GPSloc PONYspot, PONYlast; MDMSerial mdm; MDMParser::DevStatus devStatus = {}; MDMParser::NetStatus netStatus = {}; bool mdmOk = mdm.init(SIMPIN, &devStatus); //mdm.setDebug(4); // Acceleromter object char ax[2]; //axis.write(0x3A, //axis.read(0x3A, //moveData kegMotion; // Open modem connection if (!mdm.connect(SIMPIN, APN,USERNAME,PASSWORD)) return -1; // Ready the GPS readyGPS(&GPSone, 5); int M2X_response; // For the m2x message response moveData kegMotion; status_t axisStatus; uint8_t axisID; // Accelerometer tests //i2c->write((deviceAddress << 1) & 0xFE, (char *)buf, 2); //printf("WHOAMI = %i, status=%i\r\n",axisID,axisStatus); /* while(true) { axis.readXYZ( &(kegMotion.x), &(kegMotion.y), &(kegMotion.z) ); printf("x=%i, y=%i, z=%i\r\n", (kegMotion.x), (kegMotion.y), (kegMotion.z) ); delay(1000); } */ //bool mdmOk = false; // Don't need? const int sensorMask = 2; // 1 = GNSS, 2 = CellLocate, 3 = Hybrid: GNSS + CellLocate const int timeout = 55; // seconds const int submitPeriod = 15; // 1 minute in seconds const int targetAccuracy = 1; // meters const int numReq = 5; MDMParser::CellLocData loc; mdm.setDebug(4); //Token can be released from u-blox site, when you got one replace "TOKEN" below //printf("Pull from CellLocate server\r\n"); //if (!mdm.cellLocSrvHttp("tFpJ8NlWXUa8keKu3UY4AQ")) // mdm.cellLocSrvUdp(); printf("Configure deep scan mode\r\n"); int locConf = mdm.cellLocConfigSensor(1); // Deep scan mode printf("Config mode response=%i\r\n",locConf); while(true) { printf("Cell location Request; deep scan=%i, mask=%i, accuracy=%i, hypo=%i\r\n", locConf, sensorMask, targetAccuracy, numReq); mdm.cellLocRequest(sensorMask, timeout, targetAccuracy, numReq); if ( mdm.cellLocGet(&loc) ){ printf("CellLocate position received, sensor_used: %d, \r\n", loc.sensorUsed ); printf(" latitude: %0.5f, longitude: %0.5f, altitute: %d\r\n", loc.latitue, loc.longitude, loc.altitutude); if (loc.sensorUsed == 1) // If the GNSS sensor is giving us our position printf(" uncertainty: %d, speed: %d, direction: %d, vertical_acc: %d, satellite used: %d \r\n", loc.uncertainty,loc.speed,loc.direction,loc.verticalAcc,loc.svUsed); } else printf("cellLocGet failed.\r\n"); delay(submitPeriod * 1000); } while(true) { printf("Attempt GPS location.\r\n"); // Get coordinates if ( fetchLocBundle(&GPSone, &PONYspot, 30) == 7 ) { printf("\r\nFilled bundle!\r\n"); printf("Lat=%f, Long=%f, Elev=%f, Time=%f\r\n",PONYspot.lat, PONYspot.lon, PONYspot.alt, PONYspot.tmstmp); if( true ) { //(abs(PONYspot.lat - PONYlast.lat) > kLaLoDiffMin) || (abs(PONYspot.lon - PONYlast.lon) > kLaLoDiffMin) || (abs(PONYspot.alt - PONYlast.alt) > kAltDiffMin) ) { //printf("New location found!\r\n"); M2X_response = m2xClient.updateLocation(DEVID, "Igor-spot", PONYspot.lat, PONYspot.lon, PONYspot.alt); if(M2X_response == 202) printf("POST success\r\n"); PONYlast = PONYspot; kIdleSpins = 0; } } else { printf("No GPS location found.\r\n"); M2X_response = m2xClient.updateStreamValue(DEVID, "status", "GPS location not found."); } //M2X_response = m2xClient.readLocation(DEVID, parseM2XLocation2, NULL); //printf("readLoc response=%i\r\n",M2X_response); /* else { printf("No movement, no write. (%i spins)\r\n", kIdleSpins); kIdleSpins++; } if( kIdleSpins % 10 == 0 && kReadingDelay < kReadingDelayMax ) // Every time we go 10 measurements without moving kReadingDelay += kReadingDelayClimb; printf("Bump delay time...\r\n"); // Increase the between-reading wait time if we're sitting idle */ delay(kReadingDelay); } mdm.disconnect(); mdm.powerOff(); }