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
Revision 0:789f6b6f710d, committed 2014-03-24
- 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
--- /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

GPS mbed Shield