Import of CSR's demo for SirfV. Has minor cleanup.

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by jie zhao

Committer:
rgrover1
Date:
Thu Oct 16 12:42:11 2014 +0000
Revision:
15:495c22f32cc6
Parent:
14:fca7e09f5b78
Child:
16:24128dedf8db
minor review and cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zhjcpi 0:789f6b6f710d 1 /* CsrLocation class for mbed Microcontroller
zhjcpi 0:789f6b6f710d 2 * Copyright 2014 CSR plc
zhjcpi 0:789f6b6f710d 3 */
zhjcpi 0:789f6b6f710d 4
zhjcpi 0:789f6b6f710d 5 #include "mbed.h"
zhjcpi 0:789f6b6f710d 6 #include "CsrLocation.h"
zhjcpi 0:789f6b6f710d 7
rgrover1 15:495c22f32cc6 8 #ifdef TARGET_LPC1768
rgrover1 15:495c22f32cc6 9 #define PINMAP_UART_DEBUG_TX USBTX
rgrover1 15:495c22f32cc6 10 #define PINMAP_UART_DEBUG_RX USBRX
rgrover1 15:495c22f32cc6 11 #define PINMAP_UART_LOC_TX D8
rgrover1 15:495c22f32cc6 12 #define PINMAP_UART_LOC_RX D9
rgrover1 15:495c22f32cc6 13 #define PINMAP_GPIO_LOC_ONOFF D11
rgrover1 15:495c22f32cc6 14 #define PINMAP_GPIO_LOC_RESET D12
rgrover1 15:495c22f32cc6 15 #define PINMAP_GPIO_LOC_WAKEUP D3
rgrover1 15:495c22f32cc6 16 #define PINMAP_GPIO_BTN D6
rgrover1 15:495c22f32cc6 17 #define PINMAP_GPIO_TEST D10
rgrover1 15:495c22f32cc6 18 #define LOC_LED1 LED1
rgrover1 15:495c22f32cc6 19 #define LOC_LED2 LED2
rgrover1 15:495c22f32cc6 20 #elif defined(TARGET_LPC1549) || defined(TARGET_NUCLEO_F103RB)
rgrover1 15:495c22f32cc6 21 #define PINMAP_UART_DEBUG_TX D1
rgrover1 15:495c22f32cc6 22 #define PINMAP_UART_DEBUG_RX D0
rgrover1 15:495c22f32cc6 23 #define PINMAP_UART_LOC_TX D8
rgrover1 15:495c22f32cc6 24 #define PINMAP_UART_LOC_RX D2
rgrover1 15:495c22f32cc6 25 #define PINMAP_GPIO_LOC_ONOFF D9
rgrover1 15:495c22f32cc6 26 #define PINMAP_GPIO_LOC_RESET D4
rgrover1 15:495c22f32cc6 27 #define PINMAP_GPIO_LOC_WAKEUP D3
rgrover1 15:495c22f32cc6 28 #define PINMAP_GPIO_BTN D5
rgrover1 15:495c22f32cc6 29 #define PINMAP_GPIO_TEST D10
rgrover1 15:495c22f32cc6 30 #define LOC_LED1 D7
rgrover1 15:495c22f32cc6 31 #define LOC_LED2 D6
rgrover1 15:495c22f32cc6 32 #endif // ifdef TARGET_LPC1768
rgrover1 15:495c22f32cc6 33
zhjcpi 3:7a3ed8ae071d 34 #define APP_DBG_PORT_BAUD 115200
zhjcpi 3:7a3ed8ae071d 35 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__)
zhjcpi 3:7a3ed8ae071d 36
zhjcpi 0:789f6b6f710d 37 /* appliation commands */
rgrover1 15:495c22f32cc6 38 typedef enum AppCmd {
rgrover1 15:495c22f32cc6 39 APP_CMD_IDLE, // No special command
rgrover1 15:495c22f32cc6 40 APP_CMD_HELP, // Show the supported commands
rgrover1 15:495c22f32cc6 41 APP_CMD_START, // Start location
rgrover1 15:495c22f32cc6 42 APP_CMD_STOP, // Stop location
rgrover1 15:495c22f32cc6 43 APP_CMD_PM_FULL, // Set full power mode
rgrover1 15:495c22f32cc6 44 APP_CMD_PM_PTF, // Set low power PTF mode
rgrover1 15:495c22f32cc6 45 APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode
rgrover1 15:495c22f32cc6 46 APP_CMD_NMEA, // proto mode is NMEA
zhjcpi 3:7a3ed8ae071d 47 APP_CMD_OSP, // proto mode is OSP
zhjcpi 3:7a3ed8ae071d 48 APP_CMD_SWITCH_NMEA, // Debug command, switch chip to NMEA protocol at 4800bps
zhjcpi 3:7a3ed8ae071d 49 APP_CMD_SWITCH_OSP, // Debug command, switch chip to NMEA protocol at 4800bps
zhjcpi 3:7a3ed8ae071d 50 APP_CMD_START_FAILED, // Process start failed case
zhjcpi 3:7a3ed8ae071d 51 APP_CMD_STOP_FAILED, // Process stop failed case
rgrover1 15:495c22f32cc6 52 APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level
zhjcpi 0:789f6b6f710d 53 APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level
zhjcpi 0:789f6b6f710d 54 APP_CMD_RESET_ON, // Debug command, pull reset pin high level
zhjcpi 9:87d1555b6219 55 APP_CMD_RESET_OFF, // Debug command, pull reset pin low level
zhjcpi 11:4e0bba518108 56 APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status
zhjcpi 9:87d1555b6219 57 APP_CMD_PINTEST_ON, // Debug command, pull test pin high level
zhjcpi 9:87d1555b6219 58 APP_CMD_PINTEST_OFF, // Debug command, pull test pin low level
zhjcpi 9:87d1555b6219 59 APP_CMD_PINTEST_OFF_ON // Debug command, pull test pin low firstly, then pull high level
rgrover1 15:495c22f32cc6 60 } eAppCmd;
zhjcpi 0:789f6b6f710d 61
zhjcpi 0:789f6b6f710d 62 static void _AppShowCmd(void);
zhjcpi 9:87d1555b6219 63 static void _AppBtnPushed(void);
rgrover1 15:495c22f32cc6 64 static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength);
zhjcpi 2:b70e3a839116 65 static void _AppEventCallback(eCsrLocEventType event, uint32_t data);
zhjcpi 0:789f6b6f710d 66 static void _ConsoleRxHandler(void);
zhjcpi 0:789f6b6f710d 67 static void _AppCmdProcess(char *pCmd);
zhjcpi 0:789f6b6f710d 68
rgrover1 15:495c22f32cc6 69 static int sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 70 static ePowerMode sPwrMode = PWR_FULL;
rgrover1 15:495c22f32cc6 71 static eProto sProto = PROTO_OSP;
zhjcpi 0:789f6b6f710d 72
rgrover1 15:495c22f32cc6 73 static DBG_SERIAL_TYPE sSerialDebug(PINMAP_UART_DEBUG_TX, PINMAP_UART_DEBUG_RX);
rgrover1 15:495c22f32cc6 74 static RawSerial sSerialLoc(PINMAP_UART_LOC_TX, PINMAP_UART_LOC_RX);
rgrover1 15:495c22f32cc6 75 static DigitalOut sPinOnoff(PINMAP_GPIO_LOC_ONOFF);
rgrover1 15:495c22f32cc6 76 static DigitalOut sPinReset(PINMAP_GPIO_LOC_RESET);
rgrover1 15:495c22f32cc6 77 static DigitalOut sLedLocOn(LOC_LED1);
rgrover1 15:495c22f32cc6 78 static DigitalOut sLedPosReport(LOC_LED2);
rgrover1 15:495c22f32cc6 79 static DigitalIn sWakeup(PINMAP_GPIO_LOC_WAKEUP);
rgrover1 15:495c22f32cc6 80 static InterruptIn sBtn(PINMAP_GPIO_BTN);
rgrover1 15:495c22f32cc6 81 static DigitalOut sPinTest(PINMAP_GPIO_TEST);
zhjcpi 0:789f6b6f710d 82
zhjcpi 0:789f6b6f710d 83 int main(void)
zhjcpi 0:789f6b6f710d 84 {
zhjcpi 0:789f6b6f710d 85 CsrLocation *pCsrLoc;
zhjcpi 0:789f6b6f710d 86
rgrover1 15:495c22f32cc6 87 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 88 sLedPosReport = 0;
rgrover1 15:495c22f32cc6 89 sPinTest = 1;
rgrover1 15:495c22f32cc6 90 sBtn.mode(PullUp);
rgrover1 15:495c22f32cc6 91 sBtn.fall(&_AppBtnPushed);
rgrover1 15:495c22f32cc6 92
rgrover1 15:495c22f32cc6 93 /* initialize the debug serial port */
zhjcpi 3:7a3ed8ae071d 94 sSerialDebug.baud(APP_DBG_PORT_BAUD);
zhjcpi 0:789f6b6f710d 95 sSerialDebug.attach(&_ConsoleRxHandler);
zhjcpi 0:789f6b6f710d 96
rgrover1 15:495c22f32cc6 97 /* new the CsrLocation instance */
rgrover1 15:495c22f32cc6 98 pCsrLoc = new CsrLocation(sSerialLoc, sPinOnoff, sPinReset, sWakeup, &sSerialDebug);
rgrover1 15:495c22f32cc6 99 if (pCsrLoc == NULL) {
zhjcpi 3:7a3ed8ae071d 100 CSR_APP_LOG_INFO("Failed to new csrLocation.\r\n");
zhjcpi 0:789f6b6f710d 101 sSerialDebug.attach(NULL);
rgrover1 15:495c22f32cc6 102 while (true)
rgrover1 15:495c22f32cc6 103 ;
zhjcpi 0:789f6b6f710d 104 }
rgrover1 15:495c22f32cc6 105 CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
zhjcpi 0:789f6b6f710d 106
zhjcpi 0:789f6b6f710d 107 /* Register output callback and event callback functions */
zhjcpi 0:789f6b6f710d 108 pCsrLoc->CsrLocRegOutput(_AppOutputCallback, _AppEventCallback);
zhjcpi 0:789f6b6f710d 109
zhjcpi 0:789f6b6f710d 110 _AppShowCmd();
zhjcpi 0:789f6b6f710d 111
rgrover1 15:495c22f32cc6 112 while (true) {
rgrover1 15:495c22f32cc6 113 switch (sAppCmd) {
rgrover1 15:495c22f32cc6 114 case APP_CMD_HELP:
rgrover1 15:495c22f32cc6 115 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 116 _AppShowCmd();
rgrover1 15:495c22f32cc6 117 break;
rgrover1 15:495c22f32cc6 118 case APP_CMD_START:
rgrover1 15:495c22f32cc6 119 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 120 CSR_APP_LOG_INFO("start location.\r\n");
rgrover1 15:495c22f32cc6 121 sLedLocOn = 1;
rgrover1 15:495c22f32cc6 122 pCsrLoc->CsrLocStart(sPwrMode, sProto);
rgrover1 15:495c22f32cc6 123 break;
rgrover1 15:495c22f32cc6 124 case APP_CMD_STOP:
rgrover1 15:495c22f32cc6 125 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 126 CSR_APP_LOG_INFO("stop location.\r\n");
rgrover1 15:495c22f32cc6 127 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 128 pCsrLoc->CsrLocStop();
rgrover1 15:495c22f32cc6 129 break;
rgrover1 15:495c22f32cc6 130 case APP_CMD_START_FAILED:
rgrover1 15:495c22f32cc6 131 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 132 CSR_APP_LOG_INFO("reset as start failed.\r\n");
rgrover1 15:495c22f32cc6 133 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 134 pCsrLoc->CsrLocStop();
rgrover1 15:495c22f32cc6 135 pCsrLoc->CsrLocReset();
rgrover1 15:495c22f32cc6 136 break;
rgrover1 15:495c22f32cc6 137 case APP_CMD_STOP_FAILED:
rgrover1 15:495c22f32cc6 138 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 139 CSR_APP_LOG_INFO("reset as stop failed.\r\n");
rgrover1 15:495c22f32cc6 140 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 141 pCsrLoc->CsrLocStop();
rgrover1 15:495c22f32cc6 142 pCsrLoc->CsrLocReset();
rgrover1 15:495c22f32cc6 143 break;
rgrover1 15:495c22f32cc6 144 case APP_CMD_IDLE:
rgrover1 15:495c22f32cc6 145 pCsrLoc->CsrLocUpdate();
rgrover1 15:495c22f32cc6 146 break;
rgrover1 15:495c22f32cc6 147 case APP_CMD_ONOFF_ON:
rgrover1 15:495c22f32cc6 148 CSR_APP_LOG_INFO("onoff on.\r\n");
rgrover1 15:495c22f32cc6 149 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 150 sPinOnoff = 1;
rgrover1 15:495c22f32cc6 151 break;
rgrover1 15:495c22f32cc6 152 case APP_CMD_ONOFF_OFF:
rgrover1 15:495c22f32cc6 153 CSR_APP_LOG_INFO("onoff off.\r\n");
rgrover1 15:495c22f32cc6 154 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 155 sPinOnoff = 0;
rgrover1 15:495c22f32cc6 156 break;
rgrover1 15:495c22f32cc6 157 case APP_CMD_RESET_ON:
rgrover1 15:495c22f32cc6 158 CSR_APP_LOG_INFO("reset on.\r\n");
rgrover1 15:495c22f32cc6 159 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 160 sPinReset = 1;
rgrover1 15:495c22f32cc6 161 break;
rgrover1 15:495c22f32cc6 162 case APP_CMD_RESET_OFF:
rgrover1 15:495c22f32cc6 163 CSR_APP_LOG_INFO("reset off.\r\n");
rgrover1 15:495c22f32cc6 164 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 165 sPinReset = 0;
rgrover1 15:495c22f32cc6 166 break;
rgrover1 15:495c22f32cc6 167 case APP_CMD_PINTEST_ON:
rgrover1 15:495c22f32cc6 168 CSR_APP_LOG_INFO("test pin on.\r\n");
rgrover1 15:495c22f32cc6 169 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 170 sPinTest = 1;
rgrover1 15:495c22f32cc6 171 break;
rgrover1 15:495c22f32cc6 172 case APP_CMD_PINTEST_OFF:
rgrover1 15:495c22f32cc6 173 CSR_APP_LOG_INFO("test pin off.\r\n");
rgrover1 15:495c22f32cc6 174 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 175 sPinTest = 0;
rgrover1 15:495c22f32cc6 176 break;
rgrover1 15:495c22f32cc6 177 case APP_CMD_PINTEST_OFF_ON:
rgrover1 15:495c22f32cc6 178 CSR_APP_LOG_INFO("test pin off and high.\r\n");
rgrover1 15:495c22f32cc6 179 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 180 sPinTest = 0;
rgrover1 15:495c22f32cc6 181 wait_ms(100);
rgrover1 15:495c22f32cc6 182 sPinTest = 1;
rgrover1 15:495c22f32cc6 183 break;
rgrover1 15:495c22f32cc6 184 case APP_CMD_WAKEUP_STATUS:
rgrover1 15:495c22f32cc6 185 CSR_APP_LOG_INFO("wakeup status : %d.\r\n", sWakeup.read());
rgrover1 15:495c22f32cc6 186 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 187 break;
rgrover1 15:495c22f32cc6 188 case APP_CMD_PTF_GETPOS:
rgrover1 15:495c22f32cc6 189 CSR_APP_LOG_INFO("lpm get pos.\r\n");
rgrover1 15:495c22f32cc6 190 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 191 pCsrLoc->CsrLocLpmGetPos();
rgrover1 15:495c22f32cc6 192 break;
rgrover1 15:495c22f32cc6 193 case APP_CMD_NMEA:
rgrover1 15:495c22f32cc6 194 CSR_APP_LOG_INFO("select NMEA protocol.\r\n");
rgrover1 15:495c22f32cc6 195 sProto = PROTO_NMEA;
rgrover1 15:495c22f32cc6 196 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 197 break;
rgrover1 15:495c22f32cc6 198 case APP_CMD_OSP:
rgrover1 15:495c22f32cc6 199 CSR_APP_LOG_INFO("select OSP protocol.\r\n");
rgrover1 15:495c22f32cc6 200 sProto = PROTO_OSP;
rgrover1 15:495c22f32cc6 201 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 202 break;
rgrover1 15:495c22f32cc6 203 case APP_CMD_SWITCH_NMEA:
rgrover1 15:495c22f32cc6 204 CSR_APP_LOG_INFO("switch to NMEA protocol.\r\n");
rgrover1 15:495c22f32cc6 205 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 206 pCsrLoc->CsrLocDebugSwitch2Nmea();
rgrover1 15:495c22f32cc6 207 break;
rgrover1 15:495c22f32cc6 208 case APP_CMD_PM_FULL:
rgrover1 15:495c22f32cc6 209 CSR_APP_LOG_INFO("fpm set.\r\n");
rgrover1 15:495c22f32cc6 210 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 211 sPwrMode = PWR_FULL;
rgrover1 15:495c22f32cc6 212 break;
rgrover1 15:495c22f32cc6 213 case APP_CMD_PM_PTF:
rgrover1 15:495c22f32cc6 214 CSR_APP_LOG_INFO("lpm ptf set.\r\n");
rgrover1 15:495c22f32cc6 215 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 216 sPwrMode = PWR_PTF;
rgrover1 15:495c22f32cc6 217 break;
zhjcpi 0:789f6b6f710d 218 }
zhjcpi 0:789f6b6f710d 219 }
zhjcpi 0:789f6b6f710d 220 }
zhjcpi 0:789f6b6f710d 221
zhjcpi 0:789f6b6f710d 222 static void _AppShowCmd(void)
zhjcpi 0:789f6b6f710d 223 {
zhjcpi 3:7a3ed8ae071d 224 CSR_APP_LOG_INFO("Location commands:\r\n");
zhjcpi 3:7a3ed8ae071d 225 CSR_APP_LOG_INFO(" help - help to show supported commands\r\n");
zhjcpi 3:7a3ed8ae071d 226 CSR_APP_LOG_INFO(" start - begin location\r\n");
zhjcpi 3:7a3ed8ae071d 227 CSR_APP_LOG_INFO(" stop - end location\r\n");
zhjcpi 3:7a3ed8ae071d 228 CSR_APP_LOG_INFO(" fpm - full power mode\r\n");
zhjcpi 3:7a3ed8ae071d 229 CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n");
zhjcpi 3:7a3ed8ae071d 230 CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n");
zhjcpi 3:7a3ed8ae071d 231 CSR_APP_LOG_INFO(" osp - OSP mode\r\n");
zhjcpi 3:7a3ed8ae071d 232 CSR_APP_LOG_INFO(" nmea - NMEA mode\r\n");
zhjcpi 0:789f6b6f710d 233 }
zhjcpi 0:789f6b6f710d 234
zhjcpi 9:87d1555b6219 235 static void _AppBtnPushed(void)
zhjcpi 9:87d1555b6219 236 {
rgrover1 15:495c22f32cc6 237 sAppCmd = APP_CMD_PTF_GETPOS;
rgrover1 15:495c22f32cc6 238 // sLedLocOn = !sLedLocOn;
zhjcpi 9:87d1555b6219 239 }
zhjcpi 9:87d1555b6219 240
rgrover1 15:495c22f32cc6 241 static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength)
zhjcpi 0:789f6b6f710d 242 {
rgrover1 15:495c22f32cc6 243 switch (msgId) {
rgrover1 15:495c22f32cc6 244 case LOC_OUTPUT_LOCATION:
rgrover1 15:495c22f32cc6 245 {
rgrover1 15:495c22f32cc6 246 tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData;
rgrover1 15:495c22f32cc6 247 CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt);
rgrover1 15:495c22f32cc6 248 sLedPosReport = 1;
rgrover1 15:495c22f32cc6 249 wait_ms(10);
rgrover1 15:495c22f32cc6 250 sLedPosReport = 0;
rgrover1 15:495c22f32cc6 251 break;
rgrover1 15:495c22f32cc6 252 }
rgrover1 15:495c22f32cc6 253 case LOC_OUTPUT_SV_STATUS:
rgrover1 15:495c22f32cc6 254 {
rgrover1 15:495c22f32cc6 255 tLocSvStatus *pSvStatus = (tLocSvStatus *)pMsgData;
rgrover1 15:495c22f32cc6 256 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",
rgrover1 15:495c22f32cc6 257 pSvStatus->gps_week, pSvStatus->tow, pSvStatus->numOfSVs, pSvStatus->numOfGloSVs,
rgrover1 15:495c22f32cc6 258 pSvStatus->svUsedInFixMask, pSvStatus->gloSvUsedInFixMask);
rgrover1 15:495c22f32cc6 259 break;
rgrover1 15:495c22f32cc6 260 }
rgrover1 15:495c22f32cc6 261
rgrover1 15:495c22f32cc6 262 default:
rgrover1 15:495c22f32cc6 263 break;
zhjcpi 0:789f6b6f710d 264 }
zhjcpi 0:789f6b6f710d 265 }
zhjcpi 0:789f6b6f710d 266
zhjcpi 2:b70e3a839116 267 static void _AppEventCallback(eCsrLocEventType event, uint32_t data)
zhjcpi 0:789f6b6f710d 268 {
rgrover1 15:495c22f32cc6 269 switch (event) {
rgrover1 15:495c22f32cc6 270 case CSR_LOC_EVENT_START_RESULT:
rgrover1 15:495c22f32cc6 271 if (data != 0) {
rgrover1 15:495c22f32cc6 272 CSR_APP_LOG_INFO("start failed.\r\n");
rgrover1 15:495c22f32cc6 273 sAppCmd = APP_CMD_START_FAILED;
rgrover1 15:495c22f32cc6 274 } else {
rgrover1 15:495c22f32cc6 275 CSR_APP_LOG_INFO("start OK.\r\n");
rgrover1 15:495c22f32cc6 276 }
rgrover1 15:495c22f32cc6 277 break;
rgrover1 15:495c22f32cc6 278 case CSR_LOC_EVENT_STOP_RESULT:
rgrover1 15:495c22f32cc6 279 if (data != 0) {
rgrover1 15:495c22f32cc6 280 CSR_APP_LOG_INFO("stop failed.\r\n");
rgrover1 15:495c22f32cc6 281 sAppCmd = APP_CMD_STOP_FAILED;
rgrover1 15:495c22f32cc6 282 } else {
rgrover1 15:495c22f32cc6 283 CSR_APP_LOG_INFO("stop OK.\r\n");
rgrover1 15:495c22f32cc6 284 }
rgrover1 15:495c22f32cc6 285 break;
rgrover1 15:495c22f32cc6 286 default:
rgrover1 15:495c22f32cc6 287 break;
zhjcpi 0:789f6b6f710d 288 }
zhjcpi 0:789f6b6f710d 289 }
zhjcpi 0:789f6b6f710d 290
zhjcpi 0:789f6b6f710d 291 static void _ConsoleRxHandler(void)
zhjcpi 0:789f6b6f710d 292 {
rgrover1 15:495c22f32cc6 293 static char cmd[32] = {0};
rgrover1 15:495c22f32cc6 294 char ch;
zhjcpi 0:789f6b6f710d 295
zhjcpi 0:789f6b6f710d 296 ch = sSerialDebug.getc();
zhjcpi 0:789f6b6f710d 297 sSerialDebug.putc(ch);
rgrover1 15:495c22f32cc6 298 if (ch == '\r') {
zhjcpi 0:789f6b6f710d 299 sSerialDebug.putc('\n');
rgrover1 15:495c22f32cc6 300 if (strlen(cmd) > 0) {
rgrover1 15:495c22f32cc6 301 _AppCmdProcess(cmd);
rgrover1 15:495c22f32cc6 302 memset(cmd, 0, sizeof(cmd));
zhjcpi 0:789f6b6f710d 303 }
rgrover1 15:495c22f32cc6 304 } else {
rgrover1 15:495c22f32cc6 305 cmd[strlen(cmd)] = ch;
rgrover1 15:495c22f32cc6 306 }
zhjcpi 0:789f6b6f710d 307 }
rgrover1 15:495c22f32cc6 308
zhjcpi 0:789f6b6f710d 309 static void _AppCmdProcess(char *pCmd)
zhjcpi 0:789f6b6f710d 310 {
rgrover1 15:495c22f32cc6 311 if (strcmp(pCmd, "help") == 0) {
zhjcpi 0:789f6b6f710d 312 sAppCmd = APP_CMD_HELP;
rgrover1 15:495c22f32cc6 313 } else if (strcmp(pCmd, "start") == 0) {
zhjcpi 0:789f6b6f710d 314 sAppCmd = APP_CMD_START;
rgrover1 15:495c22f32cc6 315 } else if (strcmp(pCmd, "stop") == 0) {
zhjcpi 0:789f6b6f710d 316 sAppCmd = APP_CMD_STOP;
rgrover1 15:495c22f32cc6 317 } else if (strcmp(pCmd, "fpm") == 0) {
zhjcpi 0:789f6b6f710d 318 sAppCmd = APP_CMD_PM_FULL;
rgrover1 15:495c22f32cc6 319 } else if (strcmp(pCmd, "ptf") == 0) {
zhjcpi 0:789f6b6f710d 320 sAppCmd = APP_CMD_PM_PTF;
rgrover1 15:495c22f32cc6 321 } else if (strcmp(pCmd, "getpos") == 0) {
zhjcpi 0:789f6b6f710d 322 sAppCmd = APP_CMD_PTF_GETPOS;
rgrover1 15:495c22f32cc6 323 } else if (strcmp(pCmd, "nmea") == 0) {
zhjcpi 0:789f6b6f710d 324 sAppCmd = APP_CMD_NMEA;
rgrover1 15:495c22f32cc6 325 } else if (strcmp(pCmd, "osp") == 0) {
zhjcpi 3:7a3ed8ae071d 326 sAppCmd = APP_CMD_OSP;
rgrover1 15:495c22f32cc6 327 } else if (strcmp(pCmd, "switchnmea") == 0) {
zhjcpi 3:7a3ed8ae071d 328 sAppCmd = APP_CMD_SWITCH_NMEA;
rgrover1 15:495c22f32cc6 329 } else if (strcmp(pCmd, "switchosp") == 0) {
zhjcpi 3:7a3ed8ae071d 330 sAppCmd = APP_CMD_SWITCH_OSP;
rgrover1 15:495c22f32cc6 331 } else if (strcmp(pCmd, "onoffon") == 0) {
zhjcpi 0:789f6b6f710d 332 sAppCmd = APP_CMD_ONOFF_ON;
rgrover1 15:495c22f32cc6 333 } else if (strcmp(pCmd, "onoffoff") == 0) {
zhjcpi 0:789f6b6f710d 334 sAppCmd = APP_CMD_ONOFF_OFF;
rgrover1 15:495c22f32cc6 335 } else if (strcmp(pCmd, "reseton") == 0) {
zhjcpi 0:789f6b6f710d 336 sAppCmd = APP_CMD_RESET_ON;
rgrover1 15:495c22f32cc6 337 } else if (strcmp(pCmd, "resetoff") == 0) {
zhjcpi 0:789f6b6f710d 338 sAppCmd = APP_CMD_RESET_OFF;
rgrover1 15:495c22f32cc6 339 } else if (strcmp(pCmd, "pinteston") == 0) {
zhjcpi 9:87d1555b6219 340 sAppCmd = APP_CMD_PINTEST_ON;
rgrover1 15:495c22f32cc6 341 } else if (strcmp(pCmd, "pintestoff") == 0) {
zhjcpi 9:87d1555b6219 342 sAppCmd = APP_CMD_PINTEST_OFF;
rgrover1 15:495c22f32cc6 343 } else if (strcmp(pCmd, "pintestoffon") == 0) {
zhjcpi 9:87d1555b6219 344 sAppCmd = APP_CMD_PINTEST_OFF_ON;
rgrover1 15:495c22f32cc6 345 } else if (strcmp(pCmd, "iswakeup") == 0) {
rgrover1 15:495c22f32cc6 346 sAppCmd = APP_CMD_WAKEUP_STATUS;
rgrover1 15:495c22f32cc6 347 } else {
zhjcpi 3:7a3ed8ae071d 348 CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
zhjcpi 0:789f6b6f710d 349 }
rgrover1 15:495c22f32cc6 350
rgrover1 15:495c22f32cc6 351 CSR_APP_LOG_INFO("\r\n");
zhjcpi 0:789f6b6f710d 352 }