Qualcomm Technologies International, Ltd. / Mbed 2 deprecated CsrLocationDemo

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by Qualcomm Technologies International, Ltd.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CsrLocationDemo.cpp Source File

CsrLocationDemo.cpp

00001 /* CSRLocation class for mbed Microcontroller
00002  * Copyright 2014 CSR plc
00003  */
00004 
00005 #include "mbed.h"
00006 #include "CsrLocation.h"
00007 #include "GPSProvider.h"
00008 
00009 #define PINMAP_GPIO_BTN  D5
00010 #define PINMAP_GPIO_TEST D10
00011 #define LOC_LED1         D7
00012 #define LOC_LED2         D6
00013 
00014 #define APP_DBG_PORT_BAUD       115200
00015 #define CSR_APP_LOG_INFO(...)   sSerialDebug.printf(__VA_ARGS__)
00016 
00017 /* appliation commands */
00018 typedef enum AppCmd {
00019     APP_CMD_IDLE,           // No special command
00020     APP_CMD_HELP,           // Show the supported commands
00021     APP_CMD_START,          // Start location
00022     APP_CMD_STOP,           // Stop location
00023     APP_CMD_PM_FULL,        // Set full power mode
00024     APP_CMD_PM_PTF,         // Set low power PTF mode
00025     APP_CMD_PTF_GETPOS,     // Get location immediately in low power PTF mode
00026     APP_CMD_NMEA,           // protocol mode is NMEA
00027     APP_CMD_OSP,            // protocol mode is OSP
00028     APP_CMD_RESET,          // Debug command, pull reset pin high level
00029     APP_CMD_WAKEUP_STATUS,  // Debug command, check wakeup pin status
00030     APP_CMD_ONOFF_ON,       // Debug command, pull onoff pin high level
00031     APP_CMD_ONOFF_OFF,      // Debug command, pull onoff pin low level
00032     APP_CMD_ONOFF_PULSE,    // Debug command, pull onoff pin high level and then low level
00033     APP_CMD_RESET_ON,       // Debug command, pull reset pin high level
00034     APP_CMD_RESET_OFF,      // Debug command, pull reset pin low level
00035     APP_CMD_TEST_ON,        // Debug command, pull test pin high level
00036     APP_CMD_TEST_OFF,       // Debug command, pull test pin low level
00037     APP_CMD_TEST_PULSE,     // Debug command, pull test pin low firstly, then pull high level
00038 } eAppCmd;
00039 
00040 static void _AppShowCmd(void);
00041 static void _AppBtnPushed(void);
00042 static void _ConsoleRxHandler(void);
00043 static void _AppCmdProcess(char *pCmd);
00044 
00045 static int         sAppCmd  = APP_CMD_IDLE;
00046 
00047 static DigitalOut  sLedLocOn(LOC_LED1);
00048 static DigitalOut  sLedPosReport(LOC_LED2);
00049 static InterruptIn sBtn(PINMAP_GPIO_BTN);
00050 static DigitalOut  sPinTest(PINMAP_GPIO_TEST);
00051 
00052 Serial             sSerialDebug(USBTX, USBRX);
00053 
00054 void
00055 locationHandler(const GPSProvider::LocationUpdateParams_t *params)
00056 {
00057     CSR_APP_LOG_INFO("received location update\r\n");
00058 }
00059 
00060 int main(void)
00061 {
00062     sLedLocOn     = 0;
00063     sLedPosReport = 0;
00064     sPinTest      = 1;
00065     sBtn.mode(PullUp);
00066     sBtn.fall(&_AppBtnPushed);
00067 
00068     /* initialize the debug serial port */
00069     sSerialDebug.baud(APP_DBG_PORT_BAUD);
00070     sSerialDebug.attach(&_ConsoleRxHandler);
00071 
00072     GPSProvider gps;
00073     gps.setPowerMode(GPSProvider::POWER_FULL);
00074     gps.reset();
00075     gps.onLocationUpdate(locationHandler);
00076     CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
00077 
00078 //    _AppShowCmd();
00079 
00080     while (true) {
00081         switch (sAppCmd) {
00082             case APP_CMD_HELP:
00083                 sAppCmd = APP_CMD_IDLE;
00084                 _AppShowCmd();
00085                 break;
00086             case APP_CMD_IDLE:
00087                 gps.process();
00088 #if DEVICE_SLEEP
00089                 sleep();
00090 #endif
00091                 break;
00092             case APP_CMD_START:
00093                 sAppCmd = APP_CMD_IDLE;
00094                 CSR_APP_LOG_INFO("start location.\r\n");
00095                 gps.start();
00096                 sLedLocOn = 1;
00097                 break;
00098             case APP_CMD_STOP:
00099                 sAppCmd = APP_CMD_IDLE;
00100                 CSR_APP_LOG_INFO("stop location.\r\n");
00101                 gps.stop();
00102                 sLedLocOn = 0;
00103                 break;
00104             case APP_CMD_RESET:
00105                 sAppCmd   = APP_CMD_IDLE;
00106                 gps.reset();
00107                 CSR_APP_LOG_INFO("reset on.\r\n");
00108                 break;
00109             case APP_CMD_PTF_GETPOS:
00110                 CSR_APP_LOG_INFO("lpm get pos.\r\n");
00111                 sAppCmd = APP_CMD_IDLE;
00112                 gps.lpmGetImmediateLocation();
00113                 break;
00114             case APP_CMD_NMEA:
00115                 CSR_APP_LOG_INFO("select NMEA protocol.\r\n");
00116                 gps.ioctl(CSR_IOCTL_CMD_PROTO_NMEA, NULL);
00117                 sAppCmd = APP_CMD_IDLE;
00118                 break;
00119             case APP_CMD_OSP:
00120                 CSR_APP_LOG_INFO("select OSP protocol.\r\n");
00121                 gps.ioctl(CSR_IOCTL_CMD_PROTO_OSP, NULL);
00122                 sAppCmd = APP_CMD_IDLE;
00123                 break;
00124             case APP_CMD_PM_FULL:
00125                 sAppCmd  = APP_CMD_IDLE;
00126                 gps.setPowerMode(GPSProvider::POWER_FULL);
00127                 CSR_APP_LOG_INFO("fpm set.\r\n");
00128                 break;
00129             case APP_CMD_PM_PTF:
00130                 sAppCmd  = APP_CMD_IDLE;
00131                 gps.setPowerMode(GPSProvider::POWER_LOW);
00132                 CSR_APP_LOG_INFO("lpm ptf set.\r\n");
00133                 break;
00134             case APP_CMD_WAKEUP_STATUS:
00135                 gps.ioctl(CSR_IOCTL_CMD_WAKEUP_STATUS, NULL);
00136                 sAppCmd = APP_CMD_IDLE;
00137                 break;
00138             case APP_CMD_ONOFF_ON:
00139                 gps.ioctl(CSR_IOCTL_CMD_ONOFF_ON, NULL);
00140                 sAppCmd = APP_CMD_IDLE;
00141                 break;
00142             case APP_CMD_ONOFF_OFF:
00143                 gps.ioctl(CSR_IOCTL_CMD_ONOFF_OFF, NULL);
00144                 sAppCmd = APP_CMD_IDLE;
00145                 break;
00146             case APP_CMD_ONOFF_PULSE:
00147                 gps.ioctl(CSR_IOCTL_CMD_ONOFF_PULSE, NULL);
00148                 sAppCmd = APP_CMD_IDLE;
00149                 break;
00150             case APP_CMD_RESET_ON:
00151                 gps.ioctl(CSR_IOCTL_CMD_RESET_ON, NULL);
00152                 sAppCmd = APP_CMD_IDLE;
00153                 break;
00154             case APP_CMD_RESET_OFF:
00155                 gps.ioctl(CSR_IOCTL_CMD_RESET_OFF, NULL);
00156                 sAppCmd = APP_CMD_IDLE;
00157                 break;
00158             case APP_CMD_TEST_ON:
00159                 sPinTest = 1;
00160                 sAppCmd = APP_CMD_IDLE;
00161                 break;
00162             case APP_CMD_TEST_OFF:
00163                 sPinTest = 0;
00164                 sAppCmd = APP_CMD_IDLE;
00165                 break;
00166             case APP_CMD_TEST_PULSE:
00167                 sPinTest = 0;
00168                 wait_ms(100);
00169                 sPinTest = 1;
00170                 sAppCmd = APP_CMD_IDLE;
00171                 break;
00172         }
00173     }
00174 }
00175 
00176 static void _AppShowCmd(void)
00177 {
00178     CSR_APP_LOG_INFO("Location commands:\r\n");
00179     CSR_APP_LOG_INFO("    help     - help to show supported commands\r\n");
00180     CSR_APP_LOG_INFO("    start    - begin location\r\n");
00181     CSR_APP_LOG_INFO("    stop     - end location\r\n");
00182     CSR_APP_LOG_INFO("    fpm      - full power mode\r\n");
00183     CSR_APP_LOG_INFO("    ptf      - ptf low power mode\r\n");
00184     CSR_APP_LOG_INFO("    getpos   - get location immediately in low power ptf mode\r\n");
00185     CSR_APP_LOG_INFO("    nmea     - NMEA mode\r\n");
00186     CSR_APP_LOG_INFO("    osp      - OSP mode\r\n");
00187     CSR_APP_LOG_INFO("    wakesta  - get chip wakeup status\r\n");
00188     CSR_APP_LOG_INFO("    onoffon  - pull high onoff pin\r\n");
00189     CSR_APP_LOG_INFO("    onoffoff - pull low onoff pin\r\n");
00190     CSR_APP_LOG_INFO("    onoffpul - pull onoff pin high and then low\r\n");
00191     CSR_APP_LOG_INFO("    reseton  - pull high reset pin\r\n");
00192     CSR_APP_LOG_INFO("    resetoff - pull low reset pin\r\n");
00193     CSR_APP_LOG_INFO("    teston   - pull high test pin\r\n");
00194     CSR_APP_LOG_INFO("    testoff  - pull low test pin\r\n");
00195     CSR_APP_LOG_INFO("    testpul  - pull test pin high and then low\r\n");
00196 }
00197 
00198 static void _AppBtnPushed(void)
00199 {
00200     sAppCmd = APP_CMD_PTF_GETPOS;
00201     //  sLedLocOn = !sLedLocOn;
00202 }
00203 
00204 static void _ConsoleRxHandler(void)
00205 {
00206     static char cmd[32] = {0};
00207     char        ch;
00208 
00209     ch = sSerialDebug.getc();
00210     sSerialDebug.putc(ch);
00211     if (ch == '\r') {
00212         sSerialDebug.putc('\n');
00213         if (strlen(cmd) > 0) {
00214             _AppCmdProcess(cmd);
00215             memset(cmd, 0, sizeof(cmd));
00216         }
00217     } else {
00218         cmd[strlen(cmd)] = ch;
00219     }
00220 }
00221 
00222 static void _AppCmdProcess(char *pCmd)
00223 {
00224     if (strcmp(pCmd, "help") == 0) {
00225         sAppCmd = APP_CMD_HELP;
00226     } else if (strcmp(pCmd, "start") == 0) {
00227         sAppCmd = APP_CMD_START;
00228     } else if (strcmp(pCmd, "stop") == 0) {
00229         sAppCmd = APP_CMD_STOP;
00230     } else if (strcmp(pCmd, "fpm") == 0) {
00231         sAppCmd = APP_CMD_PM_FULL;
00232     } else if (strcmp(pCmd, "ptf") == 0) {
00233         sAppCmd = APP_CMD_PM_PTF;
00234     } else if (strcmp(pCmd, "getpos") == 0) {
00235         sAppCmd = APP_CMD_PTF_GETPOS;
00236     } else if (strcmp(pCmd, "nmea") == 0) {
00237         sAppCmd = APP_CMD_NMEA;
00238     } else if (strcmp(pCmd, "osp") == 0) {
00239         sAppCmd = APP_CMD_OSP;
00240     } else if (strcmp(pCmd, "reset") == 0) {
00241         sAppCmd = APP_CMD_RESET;
00242     } else if(strcmp(pCmd, "wakesta") == 0) {
00243         sAppCmd = APP_CMD_WAKEUP_STATUS;
00244     } else if(strcmp(pCmd, "onoffon") == 0) {
00245         sAppCmd = APP_CMD_ONOFF_ON;
00246     } else if(strcmp(pCmd, "onoffoff") == 0) {
00247         sAppCmd = APP_CMD_ONOFF_OFF;
00248     } else if(strcmp(pCmd, "onoffpul") == 0) {
00249         sAppCmd = APP_CMD_ONOFF_PULSE;
00250     } else if(strcmp(pCmd, "resetfon") == 0) {
00251         sAppCmd = APP_CMD_RESET_ON;
00252     } else if(strcmp(pCmd, "resetoff") == 0) {
00253         sAppCmd = APP_CMD_RESET_OFF;
00254     } else if(strcmp(pCmd, "teston") == 0) {
00255         sAppCmd = APP_CMD_TEST_ON;
00256     } else if(strcmp(pCmd, "testoff") == 0) {
00257         sAppCmd = APP_CMD_TEST_OFF;
00258     } else if(strcmp(pCmd, "testpul") == 0) {
00259         sAppCmd = APP_CMD_TEST_PULSE;
00260     } else {
00261         CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
00262     }
00263 
00264     CSR_APP_LOG_INFO("\r\n");
00265 }
00266