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

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by jie zhao

Committer:
rgrover1
Date:
Fri Nov 07 08:28:41 2014 +0000
Revision:
22:05eb1dc5da3c
Parent:
21:398bb500bb37
updating to the latest of GPSProvider.

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"
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 }