Csr location demo application shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by Qualcomm Technologies International, Ltd.

Files at this revision

API Documentation at this revision

Comitter:
zhjcpi
Date:
Mon Mar 24 08:26:27 2014 +0000
Child:
1:e6c96c984e2b
Commit message:
The Csr Location demo application to show the location and satellite information.

Changed in this revision

CsrLocation.lib Show annotated file Show diff for this revision Revisions of this file
CsrLocationDemo.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CsrLocation.lib	Mon Mar 24 08:26:27 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/zhjcpi/code/CsrLocation/#aba381fc8158
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CsrLocationDemo.cpp	Mon Mar 24 08:26:27 2014 +0000
@@ -0,0 +1,325 @@
+
+/* CsrLocation class for mbed Microcontroller
+ * Copyright 2014 CSR plc
+ */
+
+
+#include "mbed.h"
+#include "CsrLocation.h"
+
+/* appliation commands */
+typedef enum AppCmd
+{
+    APP_CMD_IDLE, 			// No special command
+    APP_CMD_HELP,			// Show the supported commands
+    APP_CMD_START,			// Start location
+    APP_CMD_STOP,			// Stop location
+    APP_CMD_PM_FULL,		// Set full power mode
+    APP_CMD_PM_PTF,			// Set low power PTF mode
+    APP_CMD_PTF_GETPOS,		// Get location immediately in low power PTF mode
+    APP_CMD_START_FAILED,	// Process start failed case
+    APP_CMD_STOP_FAILED,	// Process stop failed case
+    APP_CMD_NMEA,			// Debug command, switch chip to NMEA protocol at 4800bps
+    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
+}eAppCmd;
+
+
+static void _AppShowCmd(void);
+static void _AppOutputCallback(CsrUint32  msgId, void * const pMsgData, CsrUint32 msgLength);
+static void _AppEventCallback(eCsrLocEventType event, CsrUint32 data);
+static void _ConsoleRxHandler(void);
+static void _AppCmdProcess(char *pCmd);
+
+
+static int sAppCmd  = APP_CMD_IDLE;
+ePowerMode sPwrMode = PWR_FULL;
+
+
+static Serial			sSerialDebug(USBTX, USBRX);
+static Serial			sSerialLoc(p9, p10);;
+static DigitalOut		sPinOnoff(p5);
+static DigitalOut		sPinReset(p6);
+static DigitalOut		sLedLocOn(LED1);
+static DigitalOut		sLedPosReport(LED2);
+
+
+int main(void)
+{
+    CsrLocation  *pCsrLoc;
+	tCsrLocConfig locConfig;
+
+	/* initialize the debug serial port */
+    sSerialDebug.baud(115200);
+    sSerialDebug.attach(&_ConsoleRxHandler);
+
+	/* initialize the CsrLocConfig */
+	locConfig.pSerialDebug 	= &sSerialDebug;
+	locConfig.pSerialLoc 	= &sSerialLoc;
+	locConfig.pPinOnoff 	= &sPinOnoff;
+	locConfig.pPinReset 	= &sPinReset;
+
+	/* new the CsrLocation instance */
+    pCsrLoc = new CsrLocation(&locConfig);
+    if(pCsrLoc == NULL)
+    {
+        sSerialDebug.printf("Failed to new csrLocation.\r\n");
+        sSerialDebug.attach(NULL);
+        return -1;
+    }
+
+    /* Register output callback and event callback functions */
+    pCsrLoc->CsrLocRegOutput(_AppOutputCallback, _AppEventCallback);
+
+    sSerialDebug.printf("mbed initialized OK.\r\n");
+    _AppShowCmd();
+
+    while(1)
+    {
+        switch(sAppCmd)
+        {
+        case APP_CMD_HELP:
+            sAppCmd = APP_CMD_IDLE;
+            _AppShowCmd();
+            break;
+        case APP_CMD_START:
+            sAppCmd = APP_CMD_IDLE;
+            sSerialDebug.printf("start location.\r\n");
+            sLedLocOn = 1;
+            pCsrLoc->CsrLocStart(sPwrMode);
+            break;
+        case APP_CMD_STOP:
+            sAppCmd = APP_CMD_IDLE;
+            sSerialDebug.printf("stop location.\r\n");
+            sLedLocOn = 0;
+            pCsrLoc->CsrLocStop();
+            break;
+        case APP_CMD_START_FAILED:
+            sAppCmd = APP_CMD_IDLE;
+            sSerialDebug.printf("reset as start failed.\r\n");
+            sLedLocOn = 0;
+            pCsrLoc->CsrLocStop();
+            pCsrLoc->CsrLocReset();
+            break;
+        case APP_CMD_STOP_FAILED:
+            sAppCmd = APP_CMD_IDLE;
+            sSerialDebug.printf("reset as stop failed.\r\n");
+            sLedLocOn = 0;
+            pCsrLoc->CsrLocStop();
+            pCsrLoc->CsrLocReset();
+            break;
+        case APP_CMD_IDLE:
+            pCsrLoc->CsrLocUpdate();
+            break;
+        case APP_CMD_ONOFF_ON:
+            sSerialDebug.printf("onoff on.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPinOnoff = 1;
+            break;
+        case APP_CMD_ONOFF_OFF:
+            sSerialDebug.printf("onoff off.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPinOnoff = 0;
+            break;
+        case APP_CMD_RESET_ON:
+            sSerialDebug.printf("reset on.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPinReset = 1;
+            break;
+        case APP_CMD_RESET_OFF:
+            sSerialDebug.printf("reset off.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPinReset = 0;
+            break;
+        case APP_CMD_PTF_GETPOS:
+            sSerialDebug.printf("lpm get pos.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            pCsrLoc->CsrLocLpmGetPos();
+            break;
+        case APP_CMD_NMEA:
+            sSerialDebug.printf("switch to nmea.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            pCsrLoc->CsrLocDebugSwitch2Nmea();
+            break;
+        case APP_CMD_PM_FULL:
+            sSerialDebug.printf("fpm set.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPwrMode = PWR_FULL;
+            break;
+        case APP_CMD_PM_PTF:
+            sSerialDebug.printf("lpm ptf set.\r\n");
+            sAppCmd = APP_CMD_IDLE;
+            sPwrMode = PWR_PTF;
+            break;
+        }
+    }
+    delete pCsrLoc;
+}
+
+static void _AppShowCmd(void)
+{
+    sSerialDebug.printf("Location commands:\r\n");
+    sSerialDebug.printf("    help     - help to show supported commands\r\n");
+    sSerialDebug.printf("    start    - begin location\r\n");
+    sSerialDebug.printf("    stop     - end location\r\n");
+    sSerialDebug.printf("    fpm      - full power mode\r\n");
+    sSerialDebug.printf("    ptf      - ptf low power mode\r\n");
+    sSerialDebug.printf("    getpos   - get location immediately in low power ptf mode\r\n");
+    
+}
+
+static void _AppOutputCallback(CsrUint32  msgId, void * const pMsgData, CsrUint32 msgLength)
+{
+    switch(msgId)
+    {
+    case LOC_OUTPUT_LOCATION:
+    {
+        tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData;
+        sSerialDebug.printf("Loc: lat=%f, lon=%f, alt=%f\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt);
+        sLedPosReport = !sLedPosReport;
+        break;
+    }
+    case LOC_OUTPUT_SV_STATUS:
+    {
+        tLocSvStatus *pSvStatus = (tLocSvStatus *)pMsgData;
+        sSerialDebug.printf("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, CsrUint32 data)
+{
+    switch(event)
+    {
+    case CSR_LOC_EVENT_START_RESULT:
+        if(data != 0)
+        {
+            sSerialDebug.printf("start failed.\r\n");
+            sAppCmd = APP_CMD_START_FAILED;
+        }
+        else
+        {
+            sSerialDebug.printf("start OK.\r\n");
+        }
+        break;
+    case CSR_LOC_EVENT_STOP_RESULT:
+        if(data != 0)
+        {
+            sSerialDebug.printf("stop failed.\r\n");
+            sAppCmd = APP_CMD_STOP_FAILED;
+        }
+        else
+        {
+            sSerialDebug.printf("stop OK.\r\n");
+        }
+        break;
+    default:
+        break;
+    }
+}
+
+static void _ConsoleRxHandler(void)
+{
+	static char cmd[32] = {0};
+    char ch;
+
+    ch = sSerialDebug.getc();
+    sSerialDebug.putc(ch);
+	if(ch == '\r')
+	{
+        sSerialDebug.putc('\n');
+        if(strlen(cmd) > 0)
+        {
+	        _AppCmdProcess(cmd);
+	        memset(cmd, 0, sizeof(cmd));
+        }
+	}
+	else
+	{
+		cmd[strlen(cmd)] = ch;
+	}
+}
+	
+static void _AppCmdProcess(char *pCmd)
+{
+	if(strcmp(pCmd, "help") == 0)
+    {
+        sAppCmd = APP_CMD_HELP;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "start") == 0)
+    {
+        sAppCmd = APP_CMD_START;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "stop") == 0)
+    {
+        sAppCmd = APP_CMD_STOP;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "fpm") == 0)
+    {
+        sAppCmd = APP_CMD_PM_FULL;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "ptf") == 0)
+    {
+        sAppCmd = APP_CMD_PM_PTF;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "getpos") == 0)
+    {
+        sAppCmd = APP_CMD_PTF_GETPOS;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "nmea") == 0)
+    {
+        sAppCmd = APP_CMD_NMEA;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "onoffon") == 0)
+    {
+        sAppCmd = APP_CMD_ONOFF_ON;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "onoffoff") == 0)
+    {
+        sAppCmd = APP_CMD_ONOFF_OFF;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "reseton") == 0)
+    {
+        sAppCmd = APP_CMD_RESET_ON;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else if(strcmp(pCmd, "resetoff") == 0)
+    {
+        sAppCmd = APP_CMD_RESET_OFF;
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+    }
+    else
+    {
+        sSerialDebug.putc('\r');
+        sSerialDebug.putc('\n');
+        sSerialDebug.printf("Unknown command %s\r\n", pCmd);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Mar 24 08:26:27 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/7d30d6019079
\ No newline at end of file