Import of CSR's demo for SirfV. Has minor cleanup.
Dependencies: CsrLocation mbed GPSProvider
Fork of CsrLocationDemo by
CsrLocationDemo.cpp@16:24128dedf8db, 2014-10-30 (annotated)
- 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?
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 | |
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 | } |