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
CsrLocationDemo.cpp
- Committer:
- zhjcpi
- Date:
- 2014-11-27
- Revision:
- 25:ec6d97637e19
- Parent:
- 23:fd2cbb0900fd
File content as of revision 25:ec6d97637e19:
/* CSRLocation class for mbed Microcontroller * Copyright 2014 CSR plc */ #include "mbed.h" #include "CsrLocation.h" #include "GPSProvider.h" #define PINMAP_GPIO_BTN D5 #define PINMAP_GPIO_TEST D10 #define LOC_LED1 D7 #define LOC_LED2 D6 #define APP_DBG_PORT_BAUD 115200 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__) /* 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_NMEA, // protocol mode is NMEA APP_CMD_OSP, // protocol mode is OSP APP_CMD_RESET, // Debug command, pull reset pin high level APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level APP_CMD_ONOFF_PULSE, // Debug command, pull onoff pin high level and then 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_TEST_ON, // Debug command, pull test pin high level APP_CMD_TEST_OFF, // Debug command, pull test pin low level APP_CMD_TEST_PULSE, // Debug command, pull test pin low firstly, then pull high level } eAppCmd; static void _AppShowCmd(void); static void _AppBtnPushed(void); static void _ConsoleRxHandler(void); static void _AppCmdProcess(char *pCmd); static int sAppCmd = APP_CMD_IDLE; static DigitalOut sLedLocOn(LOC_LED1); static DigitalOut sLedPosReport(LOC_LED2); static InterruptIn sBtn(PINMAP_GPIO_BTN); static DigitalOut sPinTest(PINMAP_GPIO_TEST); Serial sSerialDebug(USBTX, USBRX); void locationHandler(const GPSProvider::LocationUpdateParams_t *params) { CSR_APP_LOG_INFO("received location update\r\n"); } int main(void) { sLedLocOn = 0; sLedPosReport = 0; sPinTest = 1; sBtn.mode(PullUp); sBtn.fall(&_AppBtnPushed); /* initialize the debug serial port */ sSerialDebug.baud(APP_DBG_PORT_BAUD); sSerialDebug.attach(&_ConsoleRxHandler); GPSProvider gps; gps.setPowerMode(GPSProvider::POWER_FULL); gps.reset(); gps.onLocationUpdate(locationHandler); CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); // _AppShowCmd(); while (true) { switch (sAppCmd) { case APP_CMD_HELP: sAppCmd = APP_CMD_IDLE; _AppShowCmd(); break; case APP_CMD_IDLE: gps.process(); #if DEVICE_SLEEP sleep(); #endif break; case APP_CMD_START: sAppCmd = APP_CMD_IDLE; CSR_APP_LOG_INFO("start location.\r\n"); gps.start(); sLedLocOn = 1; break; case APP_CMD_STOP: sAppCmd = APP_CMD_IDLE; CSR_APP_LOG_INFO("stop location.\r\n"); gps.stop(); sLedLocOn = 0; break; case APP_CMD_RESET: sAppCmd = APP_CMD_IDLE; gps.reset(); CSR_APP_LOG_INFO("reset on.\r\n"); break; case APP_CMD_PTF_GETPOS: CSR_APP_LOG_INFO("lpm get pos.\r\n"); sAppCmd = APP_CMD_IDLE; gps.lpmGetImmediateLocation(); break; case APP_CMD_NMEA: CSR_APP_LOG_INFO("select NMEA protocol.\r\n"); gps.ioctl(CSR_IOCTL_CMD_PROTO_NMEA, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_OSP: CSR_APP_LOG_INFO("select OSP protocol.\r\n"); gps.ioctl(CSR_IOCTL_CMD_PROTO_OSP, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_PM_FULL: sAppCmd = APP_CMD_IDLE; gps.setPowerMode(GPSProvider::POWER_FULL); CSR_APP_LOG_INFO("fpm set.\r\n"); break; case APP_CMD_PM_PTF: sAppCmd = APP_CMD_IDLE; gps.setPowerMode(GPSProvider::POWER_LOW); CSR_APP_LOG_INFO("lpm ptf set.\r\n"); break; case APP_CMD_WAKEUP_STATUS: gps.ioctl(CSR_IOCTL_CMD_WAKEUP_STATUS, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_ONOFF_ON: gps.ioctl(CSR_IOCTL_CMD_ONOFF_ON, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_ONOFF_OFF: gps.ioctl(CSR_IOCTL_CMD_ONOFF_OFF, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_ONOFF_PULSE: gps.ioctl(CSR_IOCTL_CMD_ONOFF_PULSE, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_RESET_ON: gps.ioctl(CSR_IOCTL_CMD_RESET_ON, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_RESET_OFF: gps.ioctl(CSR_IOCTL_CMD_RESET_OFF, NULL); sAppCmd = APP_CMD_IDLE; break; case APP_CMD_TEST_ON: sPinTest = 1; sAppCmd = APP_CMD_IDLE; break; case APP_CMD_TEST_OFF: sPinTest = 0; sAppCmd = APP_CMD_IDLE; break; case APP_CMD_TEST_PULSE: sPinTest = 0; wait_ms(100); sPinTest = 1; sAppCmd = APP_CMD_IDLE; break; } } } static void _AppShowCmd(void) { CSR_APP_LOG_INFO("Location commands:\r\n"); CSR_APP_LOG_INFO(" help - help to show supported commands\r\n"); CSR_APP_LOG_INFO(" start - begin location\r\n"); CSR_APP_LOG_INFO(" stop - end location\r\n"); 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(" nmea - NMEA mode\r\n"); CSR_APP_LOG_INFO(" osp - OSP mode\r\n"); CSR_APP_LOG_INFO(" wakesta - get chip wakeup status\r\n"); CSR_APP_LOG_INFO(" onoffon - pull high onoff pin\r\n"); CSR_APP_LOG_INFO(" onoffoff - pull low onoff pin\r\n"); CSR_APP_LOG_INFO(" onoffpul - pull onoff pin high and then low\r\n"); CSR_APP_LOG_INFO(" reseton - pull high reset pin\r\n"); CSR_APP_LOG_INFO(" resetoff - pull low reset pin\r\n"); CSR_APP_LOG_INFO(" teston - pull high test pin\r\n"); CSR_APP_LOG_INFO(" testoff - pull low test pin\r\n"); CSR_APP_LOG_INFO(" testpul - pull test pin high and then low\r\n"); } static void _AppBtnPushed(void) { sAppCmd = APP_CMD_PTF_GETPOS; // sLedLocOn = !sLedLocOn; } 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; } else if (strcmp(pCmd, "start") == 0) { sAppCmd = APP_CMD_START; } else if (strcmp(pCmd, "stop") == 0) { sAppCmd = APP_CMD_STOP; } else if (strcmp(pCmd, "fpm") == 0) { sAppCmd = APP_CMD_PM_FULL; } else if (strcmp(pCmd, "ptf") == 0) { 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, "reset") == 0) { sAppCmd = APP_CMD_RESET; } else if(strcmp(pCmd, "wakesta") == 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, "onoffpul") == 0) { sAppCmd = APP_CMD_ONOFF_PULSE; } else if(strcmp(pCmd, "resetfon") == 0) { sAppCmd = APP_CMD_RESET_ON; } else if(strcmp(pCmd, "resetoff") == 0) { sAppCmd = APP_CMD_RESET_OFF; } else if(strcmp(pCmd, "teston") == 0) { sAppCmd = APP_CMD_TEST_ON; } else if(strcmp(pCmd, "testoff") == 0) { sAppCmd = APP_CMD_TEST_OFF; } else if(strcmp(pCmd, "testpul") == 0) { sAppCmd = APP_CMD_TEST_PULSE; } else { CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd); } CSR_APP_LOG_INFO("\r\n"); }