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
Diff: CsrLocationDemo.cpp
- Revision:
- 21:69895894068a
- Parent:
- 19:f398544de093
- Child:
- 22:73338420d8a6
--- a/CsrLocationDemo.cpp Tue Oct 28 12:34:05 2014 +0000 +++ b/CsrLocationDemo.cpp Wed Nov 05 01:50:53 2014 +0000 @@ -1,211 +1,171 @@ - -/* CsrLocation class for mbed Microcontroller +/* 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, // proto mode is NMEA - APP_CMD_OSP, // proto mode is OSP - APP_CMD_SWITCH_NMEA, // Debug command, switch chip to NMEA protocol at 4800bps - APP_CMD_SWITCH_OSP, // Debug command, switch chip to NMEA protocol at 4800bps - APP_CMD_START_FAILED, // Process start failed case - APP_CMD_STOP_FAILED, // Process stop failed case - APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level +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_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 - APP_CMD_PINTEST_OFF_ON // Debug command, pull test pin low firstly, then pull high level - -}eAppCmd; - + 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 _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 int sAppCmd = APP_CMD_IDLE; -static ePowerMode sPwrMode = PWR_FULL; -static eProto sProto = PROTO_OSP; +static DigitalOut sLedLocOn(LOC_LED1); +static DigitalOut sLedPosReport(LOC_LED2); +static InterruptIn sBtn(PINMAP_GPIO_BTN); +static DigitalOut sPinTest(PINMAP_GPIO_TEST); -static DBG_SERIAL_TYPE sSerialDebug(PINMAP_UART_DEBUG_TX, PINMAP_UART_DEBUG_RX); -static LOC_SERIAL_TYPE 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); +Serial sSerialDebug(USBTX, USBRX); + +void +locationHandler(const GPSProvider::LocationUpdateParams_t *params) +{ + CSR_APP_LOG_INFO("received location update\r\n"); +} int main(void) { - CsrLocation *pCsrLoc; - tCsrLocConfig locConfig; + sLedLocOn = 0; + sLedPosReport = 0; + sPinTest = 1; + sBtn.mode(PullUp); + sBtn.fall(&_AppBtnPushed); - sLedLocOn = 0; - sLedPosReport = 0; - sPinTest = 1; - sBtn.mode(PullUp); - sBtn.fall(&_AppBtnPushed); - - /* initialize the debug serial port */ + /* initialize the debug serial port */ sSerialDebug.baud(APP_DBG_PORT_BAUD); sSerialDebug.attach(&_ConsoleRxHandler); - /* initialize the CsrLocConfig */ - locConfig.pSerialDebug = &sSerialDebug; - locConfig.pSerialLoc = &sSerialLoc; - locConfig.pPinOnoff = &sPinOnoff; - locConfig.pPinReset = &sPinReset; - locConfig.pWakeup = &sWakeup; + GPSProvider gps; + gps.setPowerMode(GPSProvider::POWER_FULL); + gps.reset(); + gps.onLocationUpdate(locationHandler); + CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); - /* new the CsrLocation instance */ - pCsrLoc = new CsrLocation(&locConfig); - if(pCsrLoc == NULL) - { - CSR_APP_LOG_INFO("Failed to new csrLocation.\r\n"); - sSerialDebug.attach(NULL); - return -1; - } - else - { - CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); - } - - /* Register output callback and event callback functions */ - pCsrLoc->CsrLocRegOutput(_AppOutputCallback, _AppEventCallback); +// _AppShowCmd(); - while(1) - { - switch(sAppCmd) - { - case APP_CMD_HELP: - sAppCmd = APP_CMD_IDLE; - _AppShowCmd(); - break; - case APP_CMD_START: - sAppCmd = APP_CMD_IDLE; - CSR_APP_LOG_INFO("start location.\r\n"); - sLedLocOn = 1; - pCsrLoc->CsrLocStart(sPwrMode, sProto); - break; - case APP_CMD_STOP: - sAppCmd = APP_CMD_IDLE; - CSR_APP_LOG_INFO("stop location.\r\n"); - 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(); - 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"); - 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: - CSR_APP_LOG_INFO("fpm set.\r\n"); - sAppCmd = APP_CMD_IDLE; - sPwrMode = PWR_FULL; - break; - case APP_CMD_PM_PTF: - CSR_APP_LOG_INFO("lpm ptf set.\r\n"); - sAppCmd = APP_CMD_IDLE; - sPwrMode = PWR_PTF; - break; + while (true) { + switch (sAppCmd) { + case APP_CMD_HELP: + sAppCmd = APP_CMD_IDLE; + _AppShowCmd(); + break; + case APP_CMD_IDLE: + gps.process(); + 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; } } } @@ -219,175 +179,85 @@ 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(" nmea - NMEA 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 _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; - } + sAppCmd = APP_CMD_PTF_GETPOS; + // sLedLocOn = !sLedLocOn; } static void _ConsoleRxHandler(void) { - static char cmd[32] = {0}; - char ch; + static char cmd[32] = {0}; + char ch; ch = sSerialDebug.getc(); sSerialDebug.putc(ch); - if(ch == '\r') - { + if (ch == '\r') { sSerialDebug.putc('\n'); - if(strlen(cmd) > 0) - { - _AppCmdProcess(cmd); - memset(cmd, 0, sizeof(cmd)); + if (strlen(cmd) > 0) { + _AppCmdProcess(cmd); + memset(cmd, 0, sizeof(cmd)); } - } - else - { - cmd[strlen(cmd)] = ch; - } + } else { + cmd[strlen(cmd)] = ch; + } } - + static void _AppCmdProcess(char *pCmd) { - if(strcmp(pCmd, "help") == 0) - { + if (strcmp(pCmd, "help") == 0) { sAppCmd = APP_CMD_HELP; - } - else if(strcmp(pCmd, "start") == 0) - { + } else if (strcmp(pCmd, "start") == 0) { sAppCmd = APP_CMD_START; - } - else if(strcmp(pCmd, "stop") == 0) - { + } else if (strcmp(pCmd, "stop") == 0) { sAppCmd = APP_CMD_STOP; - } - else if(strcmp(pCmd, "fpm") == 0) - { + } else if (strcmp(pCmd, "fpm") == 0) { sAppCmd = APP_CMD_PM_FULL; - } - else if(strcmp(pCmd, "ptf") == 0) - { + } else if (strcmp(pCmd, "ptf") == 0) { sAppCmd = APP_CMD_PM_PTF; - } - else if(strcmp(pCmd, "getpos") == 0) - { + } else if (strcmp(pCmd, "getpos") == 0) { sAppCmd = APP_CMD_PTF_GETPOS; - } - else if(strcmp(pCmd, "nmea") == 0) - { + } else if (strcmp(pCmd, "nmea") == 0) { sAppCmd = APP_CMD_NMEA; - } - else if(strcmp(pCmd, "osp") == 0) - { + } 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) - { + } 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) - { + } else if(strcmp(pCmd, "onoffoff") == 0) { sAppCmd = APP_CMD_ONOFF_OFF; - } - else if(strcmp(pCmd, "reseton") == 0) - { + } 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) - { + } 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 - { + } 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"); + + CSR_APP_LOG_INFO("\r\n"); } +