Import of CSR's demo for SirfV. Has minor cleanup.

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by jie zhao

Revision:
16:24128dedf8db
Parent:
15:495c22f32cc6
Child:
17:ebf95368b2d8
--- a/CsrLocationDemo.cpp	Thu Oct 16 12:42:11 2014 +0000
+++ b/CsrLocationDemo.cpp	Thu Oct 30 14:44:13 2014 +0000
@@ -1,34 +1,21 @@
-/* CsrLocation class for mbed Microcontroller
+/* CSRLocation class for mbed Microcontroller
  * Copyright 2014 CSR plc
  */
 
 #include "mbed.h"
 #include "CsrLocation.h"
+#include "GPSProvider.h"
 
 #ifdef TARGET_LPC1768
-    #define PINMAP_UART_DEBUG_TX        USBTX
-    #define PINMAP_UART_DEBUG_RX        USBRX
-    #define PINMAP_UART_LOC_TX          D8
-    #define PINMAP_UART_LOC_RX          D9
-    #define PINMAP_GPIO_LOC_ONOFF       D11
-    #define PINMAP_GPIO_LOC_RESET       D12
-    #define PINMAP_GPIO_LOC_WAKEUP      D3
-    #define PINMAP_GPIO_BTN             D6
-    #define PINMAP_GPIO_TEST            D10
-    #define LOC_LED1                    LED1
-    #define LOC_LED2                    LED2
+    #define PINMAP_GPIO_BTN  D6
+    #define PINMAP_GPIO_TEST D10
+    #define LOC_LED1         LED1
+    #define LOC_LED2         LED2
 #elif defined(TARGET_LPC1549) || defined(TARGET_NUCLEO_F103RB)
-    #define PINMAP_UART_DEBUG_TX        D1
-    #define PINMAP_UART_DEBUG_RX        D0
-    #define PINMAP_UART_LOC_TX          D8
-    #define PINMAP_UART_LOC_RX          D2
-    #define PINMAP_GPIO_LOC_ONOFF       D9
-    #define PINMAP_GPIO_LOC_RESET       D4
-    #define PINMAP_GPIO_LOC_WAKEUP      D3
-    #define PINMAP_GPIO_BTN             D5
-    #define PINMAP_GPIO_TEST            D10
-    #define LOC_LED1                    D7
-    #define LOC_LED2                    D6
+    #define PINMAP_GPIO_BTN  D5
+    #define PINMAP_GPIO_TEST D10
+    #define LOC_LED1         D7
+    #define LOC_LED2         D6
 #endif // ifdef TARGET_LPC1768
 
 #define APP_DBG_PORT_BAUD       115200
@@ -51,8 +38,7 @@
     APP_CMD_STOP_FAILED,    // Process stop failed case
     APP_CMD_ONOFF_ON,       // Debug command, pull onoff pin high level
     APP_CMD_ONOFF_OFF,      // Debug command, pull onoff pin low level
-    APP_CMD_RESET_ON,       // Debug command, pull reset pin high level
-    APP_CMD_RESET_OFF,      // Debug command, pull reset pin low level
+    APP_CMD_RESET,          // Debug command, pull reset pin high level
     APP_CMD_WAKEUP_STATUS,  // Debug command, check wakeup pin status
     APP_CMD_PINTEST_ON,     // Debug command, pull test pin high level
     APP_CMD_PINTEST_OFF,    // Debug command, pull test pin low level
@@ -61,29 +47,20 @@
 
 static void _AppShowCmd(void);
 static void _AppBtnPushed(void);
-static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength);
-static void _AppEventCallback(eCsrLocEventType event, uint32_t data);
 static void _ConsoleRxHandler(void);
 static void _AppCmdProcess(char *pCmd);
 
-static int             sAppCmd  = APP_CMD_IDLE;
-static ePowerMode      sPwrMode = PWR_FULL;
-static eProto          sProto   = PROTO_OSP;
+static int         sAppCmd  = APP_CMD_IDLE;
 
-static DBG_SERIAL_TYPE sSerialDebug(PINMAP_UART_DEBUG_TX, PINMAP_UART_DEBUG_RX);
-static RawSerial       sSerialLoc(PINMAP_UART_LOC_TX, PINMAP_UART_LOC_RX);
-static DigitalOut      sPinOnoff(PINMAP_GPIO_LOC_ONOFF);
-static DigitalOut      sPinReset(PINMAP_GPIO_LOC_RESET);
-static DigitalOut      sLedLocOn(LOC_LED1);
-static DigitalOut      sLedPosReport(LOC_LED2);
-static DigitalIn       sWakeup(PINMAP_GPIO_LOC_WAKEUP);
-static InterruptIn     sBtn(PINMAP_GPIO_BTN);
-static DigitalOut      sPinTest(PINMAP_GPIO_TEST);
+static DigitalOut  sLedLocOn(LOC_LED1);
+static DigitalOut  sLedPosReport(LOC_LED2);
+static InterruptIn sBtn(PINMAP_GPIO_BTN);
+static DigitalOut  sPinTest(PINMAP_GPIO_TEST);
+
+DBG_SERIAL_TYPE    sSerialDebug(USBTX, USBRX);
 
 int main(void)
 {
-    CsrLocation  *pCsrLoc;
-
     sLedLocOn     = 0;
     sLedPosReport = 0;
     sPinTest      = 1;
@@ -94,19 +71,11 @@
     sSerialDebug.baud(APP_DBG_PORT_BAUD);
     sSerialDebug.attach(&_ConsoleRxHandler);
 
-    /* new the CsrLocation instance */
-    pCsrLoc = new CsrLocation(sSerialLoc, sPinOnoff, sPinReset, sWakeup, &sSerialDebug);
-    if (pCsrLoc == NULL) {
-        CSR_APP_LOG_INFO("Failed to new csrLocation.\r\n");
-        sSerialDebug.attach(NULL);
-        while (true)
-            ;
-    }
+    GPSProvider gps;
+    gps.setPowerMode(GPSProvider::POWER_FULL);
+    gps.reset();
     CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
 
-    /* Register output callback and event callback functions */
-    pCsrLoc->CsrLocRegOutput(_AppOutputCallback, _AppEventCallback);
-
     _AppShowCmd();
 
     while (true) {
@@ -115,105 +84,80 @@
                 sAppCmd = APP_CMD_IDLE;
                 _AppShowCmd();
                 break;
+            case APP_CMD_IDLE:
+                break;
             case APP_CMD_START:
                 sAppCmd = APP_CMD_IDLE;
                 CSR_APP_LOG_INFO("start location.\r\n");
+                gps.start();
                 sLedLocOn = 1;
-                pCsrLoc->CsrLocStart(sPwrMode, sProto);
                 break;
             case APP_CMD_STOP:
                 sAppCmd = APP_CMD_IDLE;
                 CSR_APP_LOG_INFO("stop location.\r\n");
+                gps.stop();
                 sLedLocOn = 0;
-                pCsrLoc->CsrLocStop();
-                break;
-            case APP_CMD_START_FAILED:
-                sAppCmd = APP_CMD_IDLE;
-                CSR_APP_LOG_INFO("reset as start failed.\r\n");
-                sLedLocOn = 0;
-                pCsrLoc->CsrLocStop();
-                pCsrLoc->CsrLocReset();
                 break;
-            case APP_CMD_STOP_FAILED:
-                sAppCmd = APP_CMD_IDLE;
-                CSR_APP_LOG_INFO("reset as stop failed.\r\n");
-                sLedLocOn = 0;
-                pCsrLoc->CsrLocStop();
-                pCsrLoc->CsrLocReset();
-                break;
-            case APP_CMD_IDLE:
-                pCsrLoc->CsrLocUpdate();
+            // case APP_CMD_START_FAILED:
+            //     sAppCmd = APP_CMD_IDLE;
+            //     CSR_APP_LOG_INFO("reset as start failed.\r\n");
+            //     sLedLocOn = 0;
+            //     pCsrLoc->CsrLocStop();
+            //     pCsrLoc->reset();
+            //     break;
+            // case APP_CMD_STOP_FAILED:
+            //     sAppCmd = APP_CMD_IDLE;
+            //     CSR_APP_LOG_INFO("reset as stop failed.\r\n");
+            //     sLedLocOn = 0;
+            //     pCsrLoc->CsrLocStop();
+            //     pCsrLoc->reset();
+            //     break;
+            case APP_CMD_RESET:
+                sAppCmd   = APP_CMD_IDLE;
+                gps.reset();
+                // sPinReset = 1;
+                CSR_APP_LOG_INFO("reset on.\r\n");
                 break;
-            case APP_CMD_ONOFF_ON:
-                CSR_APP_LOG_INFO("onoff on.\r\n");
-                sAppCmd   = APP_CMD_IDLE;
-                sPinOnoff = 1;
-                break;
-            case APP_CMD_ONOFF_OFF:
-                CSR_APP_LOG_INFO("onoff off.\r\n");
-                sAppCmd   = APP_CMD_IDLE;
-                sPinOnoff = 0;
-                break;
-            case APP_CMD_RESET_ON:
-                CSR_APP_LOG_INFO("reset on.\r\n");
-                sAppCmd   = APP_CMD_IDLE;
-                sPinReset = 1;
-                break;
-            case APP_CMD_RESET_OFF:
-                CSR_APP_LOG_INFO("reset off.\r\n");
-                sAppCmd   = APP_CMD_IDLE;
-                sPinReset = 0;
-                break;
-            case APP_CMD_PINTEST_ON:
-                CSR_APP_LOG_INFO("test pin on.\r\n");
+            // case APP_CMD_RESET_OFF:
+            //     CSR_APP_LOG_INFO("reset off.\r\n");
+            //     sAppCmd   = APP_CMD_IDLE;
+            //     sPinReset = 0;
+            //     break;
+            // case APP_CMD_PINTEST_ON:
+            //     CSR_APP_LOG_INFO("test pin on.\r\n");
+            //     sAppCmd  = APP_CMD_IDLE;
+            //     sPinTest = 1;
+            //     break;
+            // case APP_CMD_PINTEST_OFF:
+            //     CSR_APP_LOG_INFO("test pin off.\r\n");
+            //     sAppCmd  = APP_CMD_IDLE;
+            //     sPinTest = 0;
+            //     break;
+            // case APP_CMD_PINTEST_OFF_ON:
+            //     CSR_APP_LOG_INFO("test pin off and high.\r\n");
+            //     sAppCmd  = APP_CMD_IDLE;
+            //     sPinTest = 0;
+            //     wait_ms(100);
+            //     sPinTest = 1;
+            //     break;
+            // case APP_CMD_WAKEUP_STATUS:
+            //     CSR_APP_LOG_INFO("wakeup status : %d.\r\n", sWakeup.read());
+            //     sAppCmd = APP_CMD_IDLE;
+            //     break;
+            // case APP_CMD_PTF_GETPOS:
+            //     CSR_APP_LOG_INFO("lpm get pos.\r\n");
+            //     sAppCmd = APP_CMD_IDLE;
+            //     pCsrLoc->CsrLocLpmGetPos();
+            //     break;
+            case APP_CMD_PM_FULL:
                 sAppCmd  = APP_CMD_IDLE;
-                sPinTest = 1;
-                break;
-            case APP_CMD_PINTEST_OFF:
-                CSR_APP_LOG_INFO("test pin off.\r\n");
-                sAppCmd  = APP_CMD_IDLE;
-                sPinTest = 0;
-                break;
-            case APP_CMD_PINTEST_OFF_ON:
-                CSR_APP_LOG_INFO("test pin off and high.\r\n");
-                sAppCmd  = APP_CMD_IDLE;
-                sPinTest = 0;
-                wait_ms(100);
-                sPinTest = 1;
-                break;
-            case APP_CMD_WAKEUP_STATUS:
-                CSR_APP_LOG_INFO("wakeup status : %d.\r\n", sWakeup.read());
-                sAppCmd = APP_CMD_IDLE;
-                break;
-            case APP_CMD_PTF_GETPOS:
-                CSR_APP_LOG_INFO("lpm get pos.\r\n");
-                sAppCmd = APP_CMD_IDLE;
-                pCsrLoc->CsrLocLpmGetPos();
-                break;
-            case APP_CMD_NMEA:
-                CSR_APP_LOG_INFO("select NMEA protocol.\r\n");
-                sProto  = PROTO_NMEA;
-                sAppCmd = APP_CMD_IDLE;
-                break;
-            case APP_CMD_OSP:
-                CSR_APP_LOG_INFO("select OSP protocol.\r\n");
-                sProto  = PROTO_OSP;
-                sAppCmd = APP_CMD_IDLE;
-                break;
-            case APP_CMD_SWITCH_NMEA:
-                CSR_APP_LOG_INFO("switch to NMEA protocol.\r\n");
-                sAppCmd = APP_CMD_IDLE;
-                pCsrLoc->CsrLocDebugSwitch2Nmea();
-                break;
-            case APP_CMD_PM_FULL:
+                gps.setPowerMode(GPSProvider::POWER_FULL);
                 CSR_APP_LOG_INFO("fpm set.\r\n");
-                sAppCmd  = APP_CMD_IDLE;
-                sPwrMode = PWR_FULL;
                 break;
             case APP_CMD_PM_PTF:
+                sAppCmd  = APP_CMD_IDLE;
+                gps.setPowerMode(GPSProvider::POWER_LOW);
                 CSR_APP_LOG_INFO("lpm ptf set.\r\n");
-                sAppCmd  = APP_CMD_IDLE;
-                sPwrMode = PWR_PTF;
                 break;
         }
     }
@@ -228,8 +172,6 @@
     CSR_APP_LOG_INFO("    fpm      - full power mode\r\n");
     CSR_APP_LOG_INFO("    ptf      - ptf low power mode\r\n");
     CSR_APP_LOG_INFO("    getpos   - get location immediately in low power ptf mode\r\n");
-    CSR_APP_LOG_INFO("    osp      - OSP mode\r\n");
-    CSR_APP_LOG_INFO("    nmea     - NMEA mode\r\n");
 }
 
 static void _AppBtnPushed(void)
@@ -238,56 +180,6 @@
     //	sLedLocOn = !sLedLocOn;
 }
 
-static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength)
-{
-    switch (msgId) {
-        case LOC_OUTPUT_LOCATION:
-        {
-            tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData;
-            CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt);
-            sLedPosReport = 1;
-            wait_ms(10);
-            sLedPosReport = 0;
-            break;
-        }
-        case LOC_OUTPUT_SV_STATUS:
-        {
-            tLocSvStatus *pSvStatus = (tLocSvStatus *)pMsgData;
-            CSR_APP_LOG_INFO("SV:week=%u, tow=%lu, GPS Num=%u, GLO Num=%u, GPS Mask=0x%lx, GLO Mask=0x%lx\r\n",
-                             pSvStatus->gps_week, pSvStatus->tow, pSvStatus->numOfSVs, pSvStatus->numOfGloSVs,
-                             pSvStatus->svUsedInFixMask, pSvStatus->gloSvUsedInFixMask);
-            break;
-        }
-
-        default:
-            break;
-    }
-}
-
-static void _AppEventCallback(eCsrLocEventType event, uint32_t data)
-{
-    switch (event) {
-        case CSR_LOC_EVENT_START_RESULT:
-            if (data != 0) {
-                CSR_APP_LOG_INFO("start failed.\r\n");
-                sAppCmd = APP_CMD_START_FAILED;
-            } else {
-                CSR_APP_LOG_INFO("start OK.\r\n");
-            }
-            break;
-        case CSR_LOC_EVENT_STOP_RESULT:
-            if (data != 0) {
-                CSR_APP_LOG_INFO("stop failed.\r\n");
-                sAppCmd = APP_CMD_STOP_FAILED;
-            } else {
-                CSR_APP_LOG_INFO("stop OK.\r\n");
-            }
-            break;
-        default:
-            break;
-    }
-}
-
 static void _ConsoleRxHandler(void)
 {
     static char cmd[32] = {0};
@@ -320,30 +212,20 @@
         sAppCmd = APP_CMD_PM_PTF;
     } else if (strcmp(pCmd, "getpos") == 0) {
         sAppCmd = APP_CMD_PTF_GETPOS;
-    } else if (strcmp(pCmd, "nmea") == 0) {
-        sAppCmd = APP_CMD_NMEA;
-    } else if (strcmp(pCmd, "osp") == 0) {
-        sAppCmd = APP_CMD_OSP;
-    } else if (strcmp(pCmd, "switchnmea") == 0) {
-        sAppCmd = APP_CMD_SWITCH_NMEA;
-    } else if (strcmp(pCmd, "switchosp") == 0) {
-        sAppCmd = APP_CMD_SWITCH_OSP;
-    } else if (strcmp(pCmd, "onoffon") == 0) {
-        sAppCmd = APP_CMD_ONOFF_ON;
-    } else if (strcmp(pCmd, "onoffoff") == 0) {
-        sAppCmd = APP_CMD_ONOFF_OFF;
-    } else if (strcmp(pCmd, "reseton") == 0) {
-        sAppCmd = APP_CMD_RESET_ON;
-    } else if (strcmp(pCmd, "resetoff") == 0) {
-        sAppCmd = APP_CMD_RESET_OFF;
-    } else if (strcmp(pCmd, "pinteston") == 0) {
-        sAppCmd = APP_CMD_PINTEST_ON;
-    } else if (strcmp(pCmd, "pintestoff") == 0) {
-        sAppCmd = APP_CMD_PINTEST_OFF;
-    } else if (strcmp(pCmd, "pintestoffon") == 0) {
-        sAppCmd = APP_CMD_PINTEST_OFF_ON;
-    } else if (strcmp(pCmd, "iswakeup") == 0) {
-        sAppCmd = APP_CMD_WAKEUP_STATUS;
+    // } else if (strcmp(pCmd, "onoffon") == 0) {
+    //     sAppCmd = APP_CMD_ONOFF_ON;
+    // } else if (strcmp(pCmd, "onoffoff") == 0) {
+    //     sAppCmd = APP_CMD_ONOFF_OFF;
+    } else if (strcmp(pCmd, "reset") == 0) {
+        sAppCmd = APP_CMD_RESET;
+    // } else if (strcmp(pCmd, "pinteston") == 0) {
+    //     sAppCmd = APP_CMD_PINTEST_ON;
+    // } else if (strcmp(pCmd, "pintestoff") == 0) {
+    //     sAppCmd = APP_CMD_PINTEST_OFF;
+    // } else if (strcmp(pCmd, "pintestoffon") == 0) {
+    //     sAppCmd = APP_CMD_PINTEST_OFF_ON;
+    // } else if (strcmp(pCmd, "iswakeup") == 0) {
+    //     sAppCmd = APP_CMD_WAKEUP_STATUS;
     } else {
         CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
     }