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 30 14:44:13 2014 +0000
Revision:
16:24128dedf8db
Parent:
15:495c22f32cc6
Child:
17:ebf95368b2d8
update CSRLocation based on GPSProvider. The demo still doesn't work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 16:24128dedf8db 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"
rgrover1 16:24128dedf8db 7 #include "GPSProvider.h"
zhjcpi 0:789f6b6f710d 8
rgrover1 15:495c22f32cc6 9 #ifdef TARGET_LPC1768
rgrover1 16:24128dedf8db 10 #define PINMAP_GPIO_BTN D6
rgrover1 16:24128dedf8db 11 #define PINMAP_GPIO_TEST D10
rgrover1 16:24128dedf8db 12 #define LOC_LED1 LED1
rgrover1 16:24128dedf8db 13 #define LOC_LED2 LED2
rgrover1 15:495c22f32cc6 14 #elif defined(TARGET_LPC1549) || defined(TARGET_NUCLEO_F103RB)
rgrover1 16:24128dedf8db 15 #define PINMAP_GPIO_BTN D5
rgrover1 16:24128dedf8db 16 #define PINMAP_GPIO_TEST D10
rgrover1 16:24128dedf8db 17 #define LOC_LED1 D7
rgrover1 16:24128dedf8db 18 #define LOC_LED2 D6
rgrover1 15:495c22f32cc6 19 #endif // ifdef TARGET_LPC1768
rgrover1 15:495c22f32cc6 20
zhjcpi 3:7a3ed8ae071d 21 #define APP_DBG_PORT_BAUD 115200
zhjcpi 3:7a3ed8ae071d 22 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__)
zhjcpi 3:7a3ed8ae071d 23
zhjcpi 0:789f6b6f710d 24 /* appliation commands */
rgrover1 15:495c22f32cc6 25 typedef enum AppCmd {
rgrover1 15:495c22f32cc6 26 APP_CMD_IDLE, // No special command
rgrover1 15:495c22f32cc6 27 APP_CMD_HELP, // Show the supported commands
rgrover1 15:495c22f32cc6 28 APP_CMD_START, // Start location
rgrover1 15:495c22f32cc6 29 APP_CMD_STOP, // Stop location
rgrover1 15:495c22f32cc6 30 APP_CMD_PM_FULL, // Set full power mode
rgrover1 15:495c22f32cc6 31 APP_CMD_PM_PTF, // Set low power PTF mode
rgrover1 15:495c22f32cc6 32 APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode
rgrover1 15:495c22f32cc6 33 APP_CMD_NMEA, // proto mode is NMEA
zhjcpi 3:7a3ed8ae071d 34 APP_CMD_OSP, // proto mode is OSP
zhjcpi 3:7a3ed8ae071d 35 APP_CMD_SWITCH_NMEA, // Debug command, switch chip to NMEA protocol at 4800bps
zhjcpi 3:7a3ed8ae071d 36 APP_CMD_SWITCH_OSP, // Debug command, switch chip to NMEA protocol at 4800bps
zhjcpi 3:7a3ed8ae071d 37 APP_CMD_START_FAILED, // Process start failed case
zhjcpi 3:7a3ed8ae071d 38 APP_CMD_STOP_FAILED, // Process stop failed case
rgrover1 15:495c22f32cc6 39 APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level
zhjcpi 0:789f6b6f710d 40 APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level
rgrover1 16:24128dedf8db 41 APP_CMD_RESET, // Debug command, pull reset pin high level
zhjcpi 11:4e0bba518108 42 APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status
zhjcpi 9:87d1555b6219 43 APP_CMD_PINTEST_ON, // Debug command, pull test pin high level
zhjcpi 9:87d1555b6219 44 APP_CMD_PINTEST_OFF, // Debug command, pull test pin low level
zhjcpi 9:87d1555b6219 45 APP_CMD_PINTEST_OFF_ON // Debug command, pull test pin low firstly, then pull high level
rgrover1 15:495c22f32cc6 46 } eAppCmd;
zhjcpi 0:789f6b6f710d 47
zhjcpi 0:789f6b6f710d 48 static void _AppShowCmd(void);
zhjcpi 9:87d1555b6219 49 static void _AppBtnPushed(void);
zhjcpi 0:789f6b6f710d 50 static void _ConsoleRxHandler(void);
zhjcpi 0:789f6b6f710d 51 static void _AppCmdProcess(char *pCmd);
zhjcpi 0:789f6b6f710d 52
rgrover1 16:24128dedf8db 53 static int sAppCmd = APP_CMD_IDLE;
zhjcpi 0:789f6b6f710d 54
rgrover1 16:24128dedf8db 55 static DigitalOut sLedLocOn(LOC_LED1);
rgrover1 16:24128dedf8db 56 static DigitalOut sLedPosReport(LOC_LED2);
rgrover1 16:24128dedf8db 57 static InterruptIn sBtn(PINMAP_GPIO_BTN);
rgrover1 16:24128dedf8db 58 static DigitalOut sPinTest(PINMAP_GPIO_TEST);
rgrover1 16:24128dedf8db 59
rgrover1 16:24128dedf8db 60 DBG_SERIAL_TYPE sSerialDebug(USBTX, USBRX);
zhjcpi 0:789f6b6f710d 61
zhjcpi 0:789f6b6f710d 62 int main(void)
zhjcpi 0:789f6b6f710d 63 {
rgrover1 15:495c22f32cc6 64 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 65 sLedPosReport = 0;
rgrover1 15:495c22f32cc6 66 sPinTest = 1;
rgrover1 15:495c22f32cc6 67 sBtn.mode(PullUp);
rgrover1 15:495c22f32cc6 68 sBtn.fall(&_AppBtnPushed);
rgrover1 15:495c22f32cc6 69
rgrover1 15:495c22f32cc6 70 /* initialize the debug serial port */
zhjcpi 3:7a3ed8ae071d 71 sSerialDebug.baud(APP_DBG_PORT_BAUD);
zhjcpi 0:789f6b6f710d 72 sSerialDebug.attach(&_ConsoleRxHandler);
zhjcpi 0:789f6b6f710d 73
rgrover1 16:24128dedf8db 74 GPSProvider gps;
rgrover1 16:24128dedf8db 75 gps.setPowerMode(GPSProvider::POWER_FULL);
rgrover1 16:24128dedf8db 76 gps.reset();
rgrover1 15:495c22f32cc6 77 CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
zhjcpi 0:789f6b6f710d 78
zhjcpi 0:789f6b6f710d 79 _AppShowCmd();
zhjcpi 0:789f6b6f710d 80
rgrover1 15:495c22f32cc6 81 while (true) {
rgrover1 15:495c22f32cc6 82 switch (sAppCmd) {
rgrover1 15:495c22f32cc6 83 case APP_CMD_HELP:
rgrover1 15:495c22f32cc6 84 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 85 _AppShowCmd();
rgrover1 15:495c22f32cc6 86 break;
rgrover1 16:24128dedf8db 87 case APP_CMD_IDLE:
rgrover1 16:24128dedf8db 88 break;
rgrover1 15:495c22f32cc6 89 case APP_CMD_START:
rgrover1 15:495c22f32cc6 90 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 91 CSR_APP_LOG_INFO("start location.\r\n");
rgrover1 16:24128dedf8db 92 gps.start();
rgrover1 15:495c22f32cc6 93 sLedLocOn = 1;
rgrover1 15:495c22f32cc6 94 break;
rgrover1 15:495c22f32cc6 95 case APP_CMD_STOP:
rgrover1 15:495c22f32cc6 96 sAppCmd = APP_CMD_IDLE;
rgrover1 15:495c22f32cc6 97 CSR_APP_LOG_INFO("stop location.\r\n");
rgrover1 16:24128dedf8db 98 gps.stop();
rgrover1 15:495c22f32cc6 99 sLedLocOn = 0;
rgrover1 15:495c22f32cc6 100 break;
rgrover1 16:24128dedf8db 101 // case APP_CMD_START_FAILED:
rgrover1 16:24128dedf8db 102 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 103 // CSR_APP_LOG_INFO("reset as start failed.\r\n");
rgrover1 16:24128dedf8db 104 // sLedLocOn = 0;
rgrover1 16:24128dedf8db 105 // pCsrLoc->CsrLocStop();
rgrover1 16:24128dedf8db 106 // pCsrLoc->reset();
rgrover1 16:24128dedf8db 107 // break;
rgrover1 16:24128dedf8db 108 // case APP_CMD_STOP_FAILED:
rgrover1 16:24128dedf8db 109 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 110 // CSR_APP_LOG_INFO("reset as stop failed.\r\n");
rgrover1 16:24128dedf8db 111 // sLedLocOn = 0;
rgrover1 16:24128dedf8db 112 // pCsrLoc->CsrLocStop();
rgrover1 16:24128dedf8db 113 // pCsrLoc->reset();
rgrover1 16:24128dedf8db 114 // break;
rgrover1 16:24128dedf8db 115 case APP_CMD_RESET:
rgrover1 16:24128dedf8db 116 sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 117 gps.reset();
rgrover1 16:24128dedf8db 118 // sPinReset = 1;
rgrover1 16:24128dedf8db 119 CSR_APP_LOG_INFO("reset on.\r\n");
rgrover1 15:495c22f32cc6 120 break;
rgrover1 16:24128dedf8db 121 // case APP_CMD_RESET_OFF:
rgrover1 16:24128dedf8db 122 // CSR_APP_LOG_INFO("reset off.\r\n");
rgrover1 16:24128dedf8db 123 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 124 // sPinReset = 0;
rgrover1 16:24128dedf8db 125 // break;
rgrover1 16:24128dedf8db 126 // case APP_CMD_PINTEST_ON:
rgrover1 16:24128dedf8db 127 // CSR_APP_LOG_INFO("test pin on.\r\n");
rgrover1 16:24128dedf8db 128 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 129 // sPinTest = 1;
rgrover1 16:24128dedf8db 130 // break;
rgrover1 16:24128dedf8db 131 // case APP_CMD_PINTEST_OFF:
rgrover1 16:24128dedf8db 132 // CSR_APP_LOG_INFO("test pin off.\r\n");
rgrover1 16:24128dedf8db 133 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 134 // sPinTest = 0;
rgrover1 16:24128dedf8db 135 // break;
rgrover1 16:24128dedf8db 136 // case APP_CMD_PINTEST_OFF_ON:
rgrover1 16:24128dedf8db 137 // CSR_APP_LOG_INFO("test pin off and high.\r\n");
rgrover1 16:24128dedf8db 138 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 139 // sPinTest = 0;
rgrover1 16:24128dedf8db 140 // wait_ms(100);
rgrover1 16:24128dedf8db 141 // sPinTest = 1;
rgrover1 16:24128dedf8db 142 // break;
rgrover1 16:24128dedf8db 143 // case APP_CMD_WAKEUP_STATUS:
rgrover1 16:24128dedf8db 144 // CSR_APP_LOG_INFO("wakeup status : %d.\r\n", sWakeup.read());
rgrover1 16:24128dedf8db 145 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 146 // break;
rgrover1 16:24128dedf8db 147 // case APP_CMD_PTF_GETPOS:
rgrover1 16:24128dedf8db 148 // CSR_APP_LOG_INFO("lpm get pos.\r\n");
rgrover1 16:24128dedf8db 149 // sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 150 // pCsrLoc->CsrLocLpmGetPos();
rgrover1 16:24128dedf8db 151 // break;
rgrover1 16:24128dedf8db 152 case APP_CMD_PM_FULL:
rgrover1 15:495c22f32cc6 153 sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 154 gps.setPowerMode(GPSProvider::POWER_FULL);
rgrover1 15:495c22f32cc6 155 CSR_APP_LOG_INFO("fpm set.\r\n");
rgrover1 15:495c22f32cc6 156 break;
rgrover1 15:495c22f32cc6 157 case APP_CMD_PM_PTF:
rgrover1 16:24128dedf8db 158 sAppCmd = APP_CMD_IDLE;
rgrover1 16:24128dedf8db 159 gps.setPowerMode(GPSProvider::POWER_LOW);
rgrover1 15:495c22f32cc6 160 CSR_APP_LOG_INFO("lpm ptf set.\r\n");
rgrover1 15:495c22f32cc6 161 break;
zhjcpi 0:789f6b6f710d 162 }
zhjcpi 0:789f6b6f710d 163 }
zhjcpi 0:789f6b6f710d 164 }
zhjcpi 0:789f6b6f710d 165
zhjcpi 0:789f6b6f710d 166 static void _AppShowCmd(void)
zhjcpi 0:789f6b6f710d 167 {
zhjcpi 3:7a3ed8ae071d 168 CSR_APP_LOG_INFO("Location commands:\r\n");
zhjcpi 3:7a3ed8ae071d 169 CSR_APP_LOG_INFO(" help - help to show supported commands\r\n");
zhjcpi 3:7a3ed8ae071d 170 CSR_APP_LOG_INFO(" start - begin location\r\n");
zhjcpi 3:7a3ed8ae071d 171 CSR_APP_LOG_INFO(" stop - end location\r\n");
zhjcpi 3:7a3ed8ae071d 172 CSR_APP_LOG_INFO(" fpm - full power mode\r\n");
zhjcpi 3:7a3ed8ae071d 173 CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n");
zhjcpi 3:7a3ed8ae071d 174 CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n");
zhjcpi 0:789f6b6f710d 175 }
zhjcpi 0:789f6b6f710d 176
zhjcpi 9:87d1555b6219 177 static void _AppBtnPushed(void)
zhjcpi 9:87d1555b6219 178 {
rgrover1 15:495c22f32cc6 179 sAppCmd = APP_CMD_PTF_GETPOS;
rgrover1 15:495c22f32cc6 180 // sLedLocOn = !sLedLocOn;
zhjcpi 9:87d1555b6219 181 }
zhjcpi 9:87d1555b6219 182
zhjcpi 0:789f6b6f710d 183 static void _ConsoleRxHandler(void)
zhjcpi 0:789f6b6f710d 184 {
rgrover1 15:495c22f32cc6 185 static char cmd[32] = {0};
rgrover1 15:495c22f32cc6 186 char ch;
zhjcpi 0:789f6b6f710d 187
zhjcpi 0:789f6b6f710d 188 ch = sSerialDebug.getc();
zhjcpi 0:789f6b6f710d 189 sSerialDebug.putc(ch);
rgrover1 15:495c22f32cc6 190 if (ch == '\r') {
zhjcpi 0:789f6b6f710d 191 sSerialDebug.putc('\n');
rgrover1 15:495c22f32cc6 192 if (strlen(cmd) > 0) {
rgrover1 15:495c22f32cc6 193 _AppCmdProcess(cmd);
rgrover1 15:495c22f32cc6 194 memset(cmd, 0, sizeof(cmd));
zhjcpi 0:789f6b6f710d 195 }
rgrover1 15:495c22f32cc6 196 } else {
rgrover1 15:495c22f32cc6 197 cmd[strlen(cmd)] = ch;
rgrover1 15:495c22f32cc6 198 }
zhjcpi 0:789f6b6f710d 199 }
rgrover1 15:495c22f32cc6 200
zhjcpi 0:789f6b6f710d 201 static void _AppCmdProcess(char *pCmd)
zhjcpi 0:789f6b6f710d 202 {
rgrover1 15:495c22f32cc6 203 if (strcmp(pCmd, "help") == 0) {
zhjcpi 0:789f6b6f710d 204 sAppCmd = APP_CMD_HELP;
rgrover1 15:495c22f32cc6 205 } else if (strcmp(pCmd, "start") == 0) {
zhjcpi 0:789f6b6f710d 206 sAppCmd = APP_CMD_START;
rgrover1 15:495c22f32cc6 207 } else if (strcmp(pCmd, "stop") == 0) {
zhjcpi 0:789f6b6f710d 208 sAppCmd = APP_CMD_STOP;
rgrover1 15:495c22f32cc6 209 } else if (strcmp(pCmd, "fpm") == 0) {
zhjcpi 0:789f6b6f710d 210 sAppCmd = APP_CMD_PM_FULL;
rgrover1 15:495c22f32cc6 211 } else if (strcmp(pCmd, "ptf") == 0) {
zhjcpi 0:789f6b6f710d 212 sAppCmd = APP_CMD_PM_PTF;
rgrover1 15:495c22f32cc6 213 } else if (strcmp(pCmd, "getpos") == 0) {
zhjcpi 0:789f6b6f710d 214 sAppCmd = APP_CMD_PTF_GETPOS;
rgrover1 16:24128dedf8db 215 // } else if (strcmp(pCmd, "onoffon") == 0) {
rgrover1 16:24128dedf8db 216 // sAppCmd = APP_CMD_ONOFF_ON;
rgrover1 16:24128dedf8db 217 // } else if (strcmp(pCmd, "onoffoff") == 0) {
rgrover1 16:24128dedf8db 218 // sAppCmd = APP_CMD_ONOFF_OFF;
rgrover1 16:24128dedf8db 219 } else if (strcmp(pCmd, "reset") == 0) {
rgrover1 16:24128dedf8db 220 sAppCmd = APP_CMD_RESET;
rgrover1 16:24128dedf8db 221 // } else if (strcmp(pCmd, "pinteston") == 0) {
rgrover1 16:24128dedf8db 222 // sAppCmd = APP_CMD_PINTEST_ON;
rgrover1 16:24128dedf8db 223 // } else if (strcmp(pCmd, "pintestoff") == 0) {
rgrover1 16:24128dedf8db 224 // sAppCmd = APP_CMD_PINTEST_OFF;
rgrover1 16:24128dedf8db 225 // } else if (strcmp(pCmd, "pintestoffon") == 0) {
rgrover1 16:24128dedf8db 226 // sAppCmd = APP_CMD_PINTEST_OFF_ON;
rgrover1 16:24128dedf8db 227 // } else if (strcmp(pCmd, "iswakeup") == 0) {
rgrover1 16:24128dedf8db 228 // sAppCmd = APP_CMD_WAKEUP_STATUS;
rgrover1 15:495c22f32cc6 229 } else {
zhjcpi 3:7a3ed8ae071d 230 CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
zhjcpi 0:789f6b6f710d 231 }
rgrover1 15:495c22f32cc6 232
rgrover1 15:495c22f32cc6 233 CSR_APP_LOG_INFO("\r\n");
zhjcpi 0:789f6b6f710d 234 }