Import of CSR's demo for SirfV. Has minor cleanup.
Dependencies: CsrLocation mbed GPSProvider
Fork of CsrLocationDemo by
CsrLocationDemo.cpp@17:ebf95368b2d8, 2014-10-31 (annotated)
- Committer:
- rgrover1
- Date:
- Fri Oct 31 13:36:57 2014 +0000
- Revision:
- 17:ebf95368b2d8
- Parent:
- 16:24128dedf8db
- Child:
- 18:c75558f5959f
updating the app due to improvements to GPSProvider and CSRLocation
Who changed what in which revision?
User | Revision | Line number | New 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 | |
rgrover1 | 17:ebf95368b2d8 | 62 | void |
rgrover1 | 17:ebf95368b2d8 | 63 | locationHandler(const GPSProvider::LocationUpdateParams_t *params) |
rgrover1 | 17:ebf95368b2d8 | 64 | { |
rgrover1 | 17:ebf95368b2d8 | 65 | CSR_APP_LOG_INFO("received location update\r\n"); |
rgrover1 | 17:ebf95368b2d8 | 66 | } |
rgrover1 | 17:ebf95368b2d8 | 67 | |
zhjcpi | 0:789f6b6f710d | 68 | int main(void) |
zhjcpi | 0:789f6b6f710d | 69 | { |
rgrover1 | 15:495c22f32cc6 | 70 | sLedLocOn = 0; |
rgrover1 | 15:495c22f32cc6 | 71 | sLedPosReport = 0; |
rgrover1 | 15:495c22f32cc6 | 72 | sPinTest = 1; |
rgrover1 | 15:495c22f32cc6 | 73 | sBtn.mode(PullUp); |
rgrover1 | 15:495c22f32cc6 | 74 | sBtn.fall(&_AppBtnPushed); |
rgrover1 | 15:495c22f32cc6 | 75 | |
rgrover1 | 15:495c22f32cc6 | 76 | /* initialize the debug serial port */ |
zhjcpi | 3:7a3ed8ae071d | 77 | sSerialDebug.baud(APP_DBG_PORT_BAUD); |
zhjcpi | 0:789f6b6f710d | 78 | sSerialDebug.attach(&_ConsoleRxHandler); |
zhjcpi | 0:789f6b6f710d | 79 | |
rgrover1 | 16:24128dedf8db | 80 | GPSProvider gps; |
rgrover1 | 16:24128dedf8db | 81 | gps.setPowerMode(GPSProvider::POWER_FULL); |
rgrover1 | 16:24128dedf8db | 82 | gps.reset(); |
rgrover1 | 17:ebf95368b2d8 | 83 | gps.onLocationUpdate(locationHandler); |
rgrover1 | 15:495c22f32cc6 | 84 | CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); |
zhjcpi | 0:789f6b6f710d | 85 | |
zhjcpi | 0:789f6b6f710d | 86 | _AppShowCmd(); |
zhjcpi | 0:789f6b6f710d | 87 | |
rgrover1 | 15:495c22f32cc6 | 88 | while (true) { |
rgrover1 | 15:495c22f32cc6 | 89 | switch (sAppCmd) { |
rgrover1 | 15:495c22f32cc6 | 90 | case APP_CMD_HELP: |
rgrover1 | 15:495c22f32cc6 | 91 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 92 | _AppShowCmd(); |
rgrover1 | 15:495c22f32cc6 | 93 | break; |
rgrover1 | 16:24128dedf8db | 94 | case APP_CMD_IDLE: |
rgrover1 | 17:ebf95368b2d8 | 95 | gps.process(); |
rgrover1 | 16:24128dedf8db | 96 | break; |
rgrover1 | 15:495c22f32cc6 | 97 | case APP_CMD_START: |
rgrover1 | 15:495c22f32cc6 | 98 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 99 | CSR_APP_LOG_INFO("start location.\r\n"); |
rgrover1 | 16:24128dedf8db | 100 | gps.start(); |
rgrover1 | 15:495c22f32cc6 | 101 | sLedLocOn = 1; |
rgrover1 | 15:495c22f32cc6 | 102 | break; |
rgrover1 | 15:495c22f32cc6 | 103 | case APP_CMD_STOP: |
rgrover1 | 15:495c22f32cc6 | 104 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 105 | CSR_APP_LOG_INFO("stop location.\r\n"); |
rgrover1 | 16:24128dedf8db | 106 | gps.stop(); |
rgrover1 | 15:495c22f32cc6 | 107 | sLedLocOn = 0; |
rgrover1 | 15:495c22f32cc6 | 108 | break; |
rgrover1 | 16:24128dedf8db | 109 | // case APP_CMD_START_FAILED: |
rgrover1 | 16:24128dedf8db | 110 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 111 | // CSR_APP_LOG_INFO("reset as start failed.\r\n"); |
rgrover1 | 16:24128dedf8db | 112 | // sLedLocOn = 0; |
rgrover1 | 16:24128dedf8db | 113 | // pCsrLoc->CsrLocStop(); |
rgrover1 | 16:24128dedf8db | 114 | // pCsrLoc->reset(); |
rgrover1 | 16:24128dedf8db | 115 | // break; |
rgrover1 | 16:24128dedf8db | 116 | // case APP_CMD_STOP_FAILED: |
rgrover1 | 16:24128dedf8db | 117 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 118 | // CSR_APP_LOG_INFO("reset as stop failed.\r\n"); |
rgrover1 | 16:24128dedf8db | 119 | // sLedLocOn = 0; |
rgrover1 | 16:24128dedf8db | 120 | // pCsrLoc->CsrLocStop(); |
rgrover1 | 16:24128dedf8db | 121 | // pCsrLoc->reset(); |
rgrover1 | 16:24128dedf8db | 122 | // break; |
rgrover1 | 16:24128dedf8db | 123 | case APP_CMD_RESET: |
rgrover1 | 16:24128dedf8db | 124 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 125 | gps.reset(); |
rgrover1 | 16:24128dedf8db | 126 | // sPinReset = 1; |
rgrover1 | 16:24128dedf8db | 127 | CSR_APP_LOG_INFO("reset on.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 128 | break; |
rgrover1 | 16:24128dedf8db | 129 | // case APP_CMD_RESET_OFF: |
rgrover1 | 16:24128dedf8db | 130 | // CSR_APP_LOG_INFO("reset off.\r\n"); |
rgrover1 | 16:24128dedf8db | 131 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 132 | // sPinReset = 0; |
rgrover1 | 16:24128dedf8db | 133 | // break; |
rgrover1 | 16:24128dedf8db | 134 | // case APP_CMD_PINTEST_ON: |
rgrover1 | 16:24128dedf8db | 135 | // CSR_APP_LOG_INFO("test pin on.\r\n"); |
rgrover1 | 16:24128dedf8db | 136 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 137 | // sPinTest = 1; |
rgrover1 | 16:24128dedf8db | 138 | // break; |
rgrover1 | 16:24128dedf8db | 139 | // case APP_CMD_PINTEST_OFF: |
rgrover1 | 16:24128dedf8db | 140 | // CSR_APP_LOG_INFO("test pin off.\r\n"); |
rgrover1 | 16:24128dedf8db | 141 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 142 | // sPinTest = 0; |
rgrover1 | 16:24128dedf8db | 143 | // break; |
rgrover1 | 16:24128dedf8db | 144 | // case APP_CMD_PINTEST_OFF_ON: |
rgrover1 | 16:24128dedf8db | 145 | // CSR_APP_LOG_INFO("test pin off and high.\r\n"); |
rgrover1 | 16:24128dedf8db | 146 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 147 | // sPinTest = 0; |
rgrover1 | 16:24128dedf8db | 148 | // wait_ms(100); |
rgrover1 | 16:24128dedf8db | 149 | // sPinTest = 1; |
rgrover1 | 16:24128dedf8db | 150 | // break; |
rgrover1 | 16:24128dedf8db | 151 | // case APP_CMD_WAKEUP_STATUS: |
rgrover1 | 16:24128dedf8db | 152 | // CSR_APP_LOG_INFO("wakeup status : %d.\r\n", sWakeup.read()); |
rgrover1 | 16:24128dedf8db | 153 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 154 | // break; |
rgrover1 | 16:24128dedf8db | 155 | // case APP_CMD_PTF_GETPOS: |
rgrover1 | 16:24128dedf8db | 156 | // CSR_APP_LOG_INFO("lpm get pos.\r\n"); |
rgrover1 | 16:24128dedf8db | 157 | // sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 158 | // pCsrLoc->CsrLocLpmGetPos(); |
rgrover1 | 16:24128dedf8db | 159 | // break; |
rgrover1 | 16:24128dedf8db | 160 | case APP_CMD_PM_FULL: |
rgrover1 | 15:495c22f32cc6 | 161 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 162 | gps.setPowerMode(GPSProvider::POWER_FULL); |
rgrover1 | 15:495c22f32cc6 | 163 | CSR_APP_LOG_INFO("fpm set.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 164 | break; |
rgrover1 | 15:495c22f32cc6 | 165 | case APP_CMD_PM_PTF: |
rgrover1 | 16:24128dedf8db | 166 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 167 | gps.setPowerMode(GPSProvider::POWER_LOW); |
rgrover1 | 15:495c22f32cc6 | 168 | CSR_APP_LOG_INFO("lpm ptf set.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 169 | break; |
zhjcpi | 0:789f6b6f710d | 170 | } |
zhjcpi | 0:789f6b6f710d | 171 | } |
zhjcpi | 0:789f6b6f710d | 172 | } |
zhjcpi | 0:789f6b6f710d | 173 | |
zhjcpi | 0:789f6b6f710d | 174 | static void _AppShowCmd(void) |
zhjcpi | 0:789f6b6f710d | 175 | { |
zhjcpi | 3:7a3ed8ae071d | 176 | CSR_APP_LOG_INFO("Location commands:\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 177 | CSR_APP_LOG_INFO(" help - help to show supported commands\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 178 | CSR_APP_LOG_INFO(" start - begin location\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 179 | CSR_APP_LOG_INFO(" stop - end location\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 180 | CSR_APP_LOG_INFO(" fpm - full power mode\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 181 | CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 182 | CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n"); |
zhjcpi | 0:789f6b6f710d | 183 | } |
zhjcpi | 0:789f6b6f710d | 184 | |
zhjcpi | 9:87d1555b6219 | 185 | static void _AppBtnPushed(void) |
zhjcpi | 9:87d1555b6219 | 186 | { |
rgrover1 | 15:495c22f32cc6 | 187 | sAppCmd = APP_CMD_PTF_GETPOS; |
rgrover1 | 15:495c22f32cc6 | 188 | // sLedLocOn = !sLedLocOn; |
zhjcpi | 9:87d1555b6219 | 189 | } |
zhjcpi | 9:87d1555b6219 | 190 | |
zhjcpi | 0:789f6b6f710d | 191 | static void _ConsoleRxHandler(void) |
zhjcpi | 0:789f6b6f710d | 192 | { |
rgrover1 | 15:495c22f32cc6 | 193 | static char cmd[32] = {0}; |
rgrover1 | 15:495c22f32cc6 | 194 | char ch; |
zhjcpi | 0:789f6b6f710d | 195 | |
zhjcpi | 0:789f6b6f710d | 196 | ch = sSerialDebug.getc(); |
zhjcpi | 0:789f6b6f710d | 197 | sSerialDebug.putc(ch); |
rgrover1 | 15:495c22f32cc6 | 198 | if (ch == '\r') { |
zhjcpi | 0:789f6b6f710d | 199 | sSerialDebug.putc('\n'); |
rgrover1 | 15:495c22f32cc6 | 200 | if (strlen(cmd) > 0) { |
rgrover1 | 15:495c22f32cc6 | 201 | _AppCmdProcess(cmd); |
rgrover1 | 15:495c22f32cc6 | 202 | memset(cmd, 0, sizeof(cmd)); |
zhjcpi | 0:789f6b6f710d | 203 | } |
rgrover1 | 15:495c22f32cc6 | 204 | } else { |
rgrover1 | 15:495c22f32cc6 | 205 | cmd[strlen(cmd)] = ch; |
rgrover1 | 15:495c22f32cc6 | 206 | } |
zhjcpi | 0:789f6b6f710d | 207 | } |
rgrover1 | 15:495c22f32cc6 | 208 | |
zhjcpi | 0:789f6b6f710d | 209 | static void _AppCmdProcess(char *pCmd) |
zhjcpi | 0:789f6b6f710d | 210 | { |
rgrover1 | 15:495c22f32cc6 | 211 | if (strcmp(pCmd, "help") == 0) { |
zhjcpi | 0:789f6b6f710d | 212 | sAppCmd = APP_CMD_HELP; |
rgrover1 | 15:495c22f32cc6 | 213 | } else if (strcmp(pCmd, "start") == 0) { |
zhjcpi | 0:789f6b6f710d | 214 | sAppCmd = APP_CMD_START; |
rgrover1 | 15:495c22f32cc6 | 215 | } else if (strcmp(pCmd, "stop") == 0) { |
zhjcpi | 0:789f6b6f710d | 216 | sAppCmd = APP_CMD_STOP; |
rgrover1 | 15:495c22f32cc6 | 217 | } else if (strcmp(pCmd, "fpm") == 0) { |
zhjcpi | 0:789f6b6f710d | 218 | sAppCmd = APP_CMD_PM_FULL; |
rgrover1 | 15:495c22f32cc6 | 219 | } else if (strcmp(pCmd, "ptf") == 0) { |
zhjcpi | 0:789f6b6f710d | 220 | sAppCmd = APP_CMD_PM_PTF; |
rgrover1 | 15:495c22f32cc6 | 221 | } else if (strcmp(pCmd, "getpos") == 0) { |
zhjcpi | 0:789f6b6f710d | 222 | sAppCmd = APP_CMD_PTF_GETPOS; |
rgrover1 | 16:24128dedf8db | 223 | // } else if (strcmp(pCmd, "onoffon") == 0) { |
rgrover1 | 16:24128dedf8db | 224 | // sAppCmd = APP_CMD_ONOFF_ON; |
rgrover1 | 16:24128dedf8db | 225 | // } else if (strcmp(pCmd, "onoffoff") == 0) { |
rgrover1 | 16:24128dedf8db | 226 | // sAppCmd = APP_CMD_ONOFF_OFF; |
rgrover1 | 16:24128dedf8db | 227 | } else if (strcmp(pCmd, "reset") == 0) { |
rgrover1 | 16:24128dedf8db | 228 | sAppCmd = APP_CMD_RESET; |
rgrover1 | 16:24128dedf8db | 229 | // } else if (strcmp(pCmd, "pinteston") == 0) { |
rgrover1 | 16:24128dedf8db | 230 | // sAppCmd = APP_CMD_PINTEST_ON; |
rgrover1 | 16:24128dedf8db | 231 | // } else if (strcmp(pCmd, "pintestoff") == 0) { |
rgrover1 | 16:24128dedf8db | 232 | // sAppCmd = APP_CMD_PINTEST_OFF; |
rgrover1 | 16:24128dedf8db | 233 | // } else if (strcmp(pCmd, "pintestoffon") == 0) { |
rgrover1 | 16:24128dedf8db | 234 | // sAppCmd = APP_CMD_PINTEST_OFF_ON; |
rgrover1 | 16:24128dedf8db | 235 | // } else if (strcmp(pCmd, "iswakeup") == 0) { |
rgrover1 | 16:24128dedf8db | 236 | // sAppCmd = APP_CMD_WAKEUP_STATUS; |
rgrover1 | 15:495c22f32cc6 | 237 | } else { |
zhjcpi | 3:7a3ed8ae071d | 238 | CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd); |
zhjcpi | 0:789f6b6f710d | 239 | } |
rgrover1 | 15:495c22f32cc6 | 240 | |
rgrover1 | 15:495c22f32cc6 | 241 | CSR_APP_LOG_INFO("\r\n"); |
zhjcpi | 0:789f6b6f710d | 242 | } |