Import of CSR's demo for SirfV. Has minor cleanup.
Dependencies: CsrLocation mbed GPSProvider
Fork of CsrLocationDemo by
CsrLocationDemo.cpp@21:398bb500bb37, 2014-11-05 (annotated)
- Committer:
- rgrover1
- Date:
- Wed Nov 05 13:25:15 2014 +0000
- Revision:
- 21:398bb500bb37
- Parent:
- 19:b8703d1c1b38
call sleep() after process(); and remove extraneous header.
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" |
rgrover1 | 16:24128dedf8db | 6 | #include "GPSProvider.h" |
zhjcpi | 0:789f6b6f710d | 7 | |
rgrover1 | 19:b8703d1c1b38 | 8 | #define PINMAP_GPIO_BTN D5 |
rgrover1 | 19:b8703d1c1b38 | 9 | #define PINMAP_GPIO_TEST D10 |
rgrover1 | 19:b8703d1c1b38 | 10 | #define LOC_LED1 D7 |
rgrover1 | 19:b8703d1c1b38 | 11 | #define LOC_LED2 D6 |
rgrover1 | 15:495c22f32cc6 | 12 | |
zhjcpi | 3:7a3ed8ae071d | 13 | #define APP_DBG_PORT_BAUD 115200 |
zhjcpi | 3:7a3ed8ae071d | 14 | #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__) |
zhjcpi | 3:7a3ed8ae071d | 15 | |
zhjcpi | 0:789f6b6f710d | 16 | /* appliation commands */ |
rgrover1 | 15:495c22f32cc6 | 17 | typedef enum AppCmd { |
rgrover1 | 15:495c22f32cc6 | 18 | APP_CMD_IDLE, // No special command |
rgrover1 | 15:495c22f32cc6 | 19 | APP_CMD_HELP, // Show the supported commands |
rgrover1 | 15:495c22f32cc6 | 20 | APP_CMD_START, // Start location |
rgrover1 | 15:495c22f32cc6 | 21 | APP_CMD_STOP, // Stop location |
rgrover1 | 15:495c22f32cc6 | 22 | APP_CMD_PM_FULL, // Set full power mode |
rgrover1 | 15:495c22f32cc6 | 23 | APP_CMD_PM_PTF, // Set low power PTF mode |
rgrover1 | 15:495c22f32cc6 | 24 | APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode |
rgrover1 | 16:24128dedf8db | 25 | APP_CMD_RESET, // Debug command, pull reset pin high level |
rgrover1 | 15:495c22f32cc6 | 26 | } eAppCmd; |
zhjcpi | 0:789f6b6f710d | 27 | |
zhjcpi | 0:789f6b6f710d | 28 | static void _AppShowCmd(void); |
zhjcpi | 9:87d1555b6219 | 29 | static void _AppBtnPushed(void); |
zhjcpi | 0:789f6b6f710d | 30 | static void _ConsoleRxHandler(void); |
zhjcpi | 0:789f6b6f710d | 31 | static void _AppCmdProcess(char *pCmd); |
zhjcpi | 0:789f6b6f710d | 32 | |
rgrover1 | 16:24128dedf8db | 33 | static int sAppCmd = APP_CMD_IDLE; |
zhjcpi | 0:789f6b6f710d | 34 | |
rgrover1 | 16:24128dedf8db | 35 | static DigitalOut sLedLocOn(LOC_LED1); |
rgrover1 | 16:24128dedf8db | 36 | static DigitalOut sLedPosReport(LOC_LED2); |
rgrover1 | 16:24128dedf8db | 37 | static InterruptIn sBtn(PINMAP_GPIO_BTN); |
rgrover1 | 16:24128dedf8db | 38 | static DigitalOut sPinTest(PINMAP_GPIO_TEST); |
rgrover1 | 16:24128dedf8db | 39 | |
rgrover1 | 18:c75558f5959f | 40 | Serial sSerialDebug(USBTX, USBRX); |
zhjcpi | 0:789f6b6f710d | 41 | |
rgrover1 | 17:ebf95368b2d8 | 42 | void |
rgrover1 | 17:ebf95368b2d8 | 43 | locationHandler(const GPSProvider::LocationUpdateParams_t *params) |
rgrover1 | 17:ebf95368b2d8 | 44 | { |
rgrover1 | 21:398bb500bb37 | 45 | if (params->valid) { |
rgrover1 | 21:398bb500bb37 | 46 | /* application specific handling of location data; */ |
rgrover1 | 21:398bb500bb37 | 47 | } |
rgrover1 | 17:ebf95368b2d8 | 48 | } |
rgrover1 | 17:ebf95368b2d8 | 49 | |
zhjcpi | 0:789f6b6f710d | 50 | int main(void) |
zhjcpi | 0:789f6b6f710d | 51 | { |
rgrover1 | 15:495c22f32cc6 | 52 | sLedLocOn = 0; |
rgrover1 | 15:495c22f32cc6 | 53 | sLedPosReport = 0; |
rgrover1 | 15:495c22f32cc6 | 54 | sPinTest = 1; |
rgrover1 | 15:495c22f32cc6 | 55 | sBtn.mode(PullUp); |
rgrover1 | 15:495c22f32cc6 | 56 | sBtn.fall(&_AppBtnPushed); |
rgrover1 | 15:495c22f32cc6 | 57 | |
rgrover1 | 15:495c22f32cc6 | 58 | /* initialize the debug serial port */ |
zhjcpi | 3:7a3ed8ae071d | 59 | sSerialDebug.baud(APP_DBG_PORT_BAUD); |
zhjcpi | 0:789f6b6f710d | 60 | sSerialDebug.attach(&_ConsoleRxHandler); |
zhjcpi | 0:789f6b6f710d | 61 | |
rgrover1 | 16:24128dedf8db | 62 | GPSProvider gps; |
rgrover1 | 16:24128dedf8db | 63 | gps.setPowerMode(GPSProvider::POWER_FULL); |
rgrover1 | 16:24128dedf8db | 64 | gps.reset(); |
rgrover1 | 17:ebf95368b2d8 | 65 | gps.onLocationUpdate(locationHandler); |
rgrover1 | 15:495c22f32cc6 | 66 | CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); |
zhjcpi | 0:789f6b6f710d | 67 | |
zhjcpi | 0:789f6b6f710d | 68 | _AppShowCmd(); |
zhjcpi | 0:789f6b6f710d | 69 | |
rgrover1 | 15:495c22f32cc6 | 70 | while (true) { |
rgrover1 | 15:495c22f32cc6 | 71 | switch (sAppCmd) { |
rgrover1 | 15:495c22f32cc6 | 72 | case APP_CMD_HELP: |
rgrover1 | 15:495c22f32cc6 | 73 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 74 | _AppShowCmd(); |
rgrover1 | 15:495c22f32cc6 | 75 | break; |
rgrover1 | 16:24128dedf8db | 76 | case APP_CMD_IDLE: |
rgrover1 | 17:ebf95368b2d8 | 77 | gps.process(); |
rgrover1 | 21:398bb500bb37 | 78 | sleep(); |
rgrover1 | 16:24128dedf8db | 79 | break; |
rgrover1 | 15:495c22f32cc6 | 80 | case APP_CMD_START: |
rgrover1 | 15:495c22f32cc6 | 81 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 82 | CSR_APP_LOG_INFO("start location.\r\n"); |
rgrover1 | 16:24128dedf8db | 83 | gps.start(); |
rgrover1 | 15:495c22f32cc6 | 84 | sLedLocOn = 1; |
rgrover1 | 15:495c22f32cc6 | 85 | break; |
rgrover1 | 15:495c22f32cc6 | 86 | case APP_CMD_STOP: |
rgrover1 | 15:495c22f32cc6 | 87 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 15:495c22f32cc6 | 88 | CSR_APP_LOG_INFO("stop location.\r\n"); |
rgrover1 | 16:24128dedf8db | 89 | gps.stop(); |
rgrover1 | 15:495c22f32cc6 | 90 | sLedLocOn = 0; |
rgrover1 | 15:495c22f32cc6 | 91 | break; |
rgrover1 | 16:24128dedf8db | 92 | case APP_CMD_RESET: |
rgrover1 | 16:24128dedf8db | 93 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 94 | gps.reset(); |
rgrover1 | 16:24128dedf8db | 95 | CSR_APP_LOG_INFO("reset on.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 96 | break; |
rgrover1 | 18:c75558f5959f | 97 | case APP_CMD_PTF_GETPOS: |
rgrover1 | 18:c75558f5959f | 98 | CSR_APP_LOG_INFO("lpm get pos.\r\n"); |
rgrover1 | 18:c75558f5959f | 99 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 18:c75558f5959f | 100 | gps.lpmGetImmediateLocation(); |
rgrover1 | 18:c75558f5959f | 101 | break; |
rgrover1 | 16:24128dedf8db | 102 | case APP_CMD_PM_FULL: |
rgrover1 | 15:495c22f32cc6 | 103 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 104 | gps.setPowerMode(GPSProvider::POWER_FULL); |
rgrover1 | 15:495c22f32cc6 | 105 | CSR_APP_LOG_INFO("fpm set.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 106 | break; |
rgrover1 | 15:495c22f32cc6 | 107 | case APP_CMD_PM_PTF: |
rgrover1 | 16:24128dedf8db | 108 | sAppCmd = APP_CMD_IDLE; |
rgrover1 | 16:24128dedf8db | 109 | gps.setPowerMode(GPSProvider::POWER_LOW); |
rgrover1 | 15:495c22f32cc6 | 110 | CSR_APP_LOG_INFO("lpm ptf set.\r\n"); |
rgrover1 | 15:495c22f32cc6 | 111 | break; |
zhjcpi | 0:789f6b6f710d | 112 | } |
zhjcpi | 0:789f6b6f710d | 113 | } |
zhjcpi | 0:789f6b6f710d | 114 | } |
zhjcpi | 0:789f6b6f710d | 115 | |
zhjcpi | 0:789f6b6f710d | 116 | static void _AppShowCmd(void) |
zhjcpi | 0:789f6b6f710d | 117 | { |
zhjcpi | 3:7a3ed8ae071d | 118 | CSR_APP_LOG_INFO("Location commands:\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 119 | CSR_APP_LOG_INFO(" help - help to show supported commands\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 120 | CSR_APP_LOG_INFO(" start - begin location\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 121 | CSR_APP_LOG_INFO(" stop - end location\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 122 | CSR_APP_LOG_INFO(" fpm - full power mode\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 123 | CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n"); |
zhjcpi | 3:7a3ed8ae071d | 124 | CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n"); |
zhjcpi | 0:789f6b6f710d | 125 | } |
zhjcpi | 0:789f6b6f710d | 126 | |
zhjcpi | 9:87d1555b6219 | 127 | static void _AppBtnPushed(void) |
zhjcpi | 9:87d1555b6219 | 128 | { |
rgrover1 | 15:495c22f32cc6 | 129 | sAppCmd = APP_CMD_PTF_GETPOS; |
rgrover1 | 15:495c22f32cc6 | 130 | // sLedLocOn = !sLedLocOn; |
zhjcpi | 9:87d1555b6219 | 131 | } |
zhjcpi | 9:87d1555b6219 | 132 | |
zhjcpi | 0:789f6b6f710d | 133 | static void _ConsoleRxHandler(void) |
zhjcpi | 0:789f6b6f710d | 134 | { |
rgrover1 | 15:495c22f32cc6 | 135 | static char cmd[32] = {0}; |
rgrover1 | 15:495c22f32cc6 | 136 | char ch; |
zhjcpi | 0:789f6b6f710d | 137 | |
zhjcpi | 0:789f6b6f710d | 138 | ch = sSerialDebug.getc(); |
zhjcpi | 0:789f6b6f710d | 139 | sSerialDebug.putc(ch); |
rgrover1 | 15:495c22f32cc6 | 140 | if (ch == '\r') { |
zhjcpi | 0:789f6b6f710d | 141 | sSerialDebug.putc('\n'); |
rgrover1 | 15:495c22f32cc6 | 142 | if (strlen(cmd) > 0) { |
rgrover1 | 15:495c22f32cc6 | 143 | _AppCmdProcess(cmd); |
rgrover1 | 15:495c22f32cc6 | 144 | memset(cmd, 0, sizeof(cmd)); |
zhjcpi | 0:789f6b6f710d | 145 | } |
rgrover1 | 15:495c22f32cc6 | 146 | } else { |
rgrover1 | 15:495c22f32cc6 | 147 | cmd[strlen(cmd)] = ch; |
rgrover1 | 15:495c22f32cc6 | 148 | } |
zhjcpi | 0:789f6b6f710d | 149 | } |
rgrover1 | 15:495c22f32cc6 | 150 | |
zhjcpi | 0:789f6b6f710d | 151 | static void _AppCmdProcess(char *pCmd) |
zhjcpi | 0:789f6b6f710d | 152 | { |
rgrover1 | 15:495c22f32cc6 | 153 | if (strcmp(pCmd, "help") == 0) { |
zhjcpi | 0:789f6b6f710d | 154 | sAppCmd = APP_CMD_HELP; |
rgrover1 | 15:495c22f32cc6 | 155 | } else if (strcmp(pCmd, "start") == 0) { |
zhjcpi | 0:789f6b6f710d | 156 | sAppCmd = APP_CMD_START; |
rgrover1 | 15:495c22f32cc6 | 157 | } else if (strcmp(pCmd, "stop") == 0) { |
zhjcpi | 0:789f6b6f710d | 158 | sAppCmd = APP_CMD_STOP; |
rgrover1 | 15:495c22f32cc6 | 159 | } else if (strcmp(pCmd, "fpm") == 0) { |
zhjcpi | 0:789f6b6f710d | 160 | sAppCmd = APP_CMD_PM_FULL; |
rgrover1 | 15:495c22f32cc6 | 161 | } else if (strcmp(pCmd, "ptf") == 0) { |
zhjcpi | 0:789f6b6f710d | 162 | sAppCmd = APP_CMD_PM_PTF; |
rgrover1 | 15:495c22f32cc6 | 163 | } else if (strcmp(pCmd, "getpos") == 0) { |
zhjcpi | 0:789f6b6f710d | 164 | sAppCmd = APP_CMD_PTF_GETPOS; |
rgrover1 | 16:24128dedf8db | 165 | } else if (strcmp(pCmd, "reset") == 0) { |
rgrover1 | 16:24128dedf8db | 166 | sAppCmd = APP_CMD_RESET; |
rgrover1 | 15:495c22f32cc6 | 167 | } else { |
zhjcpi | 3:7a3ed8ae071d | 168 | CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd); |
zhjcpi | 0:789f6b6f710d | 169 | } |
rgrover1 | 15:495c22f32cc6 | 170 | |
rgrover1 | 15:495c22f32cc6 | 171 | CSR_APP_LOG_INFO("\r\n"); |
zhjcpi | 0:789f6b6f710d | 172 | } |