Csr location demo application shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.

Dependencies:   CsrLocation mbed GPSProvider

Fork of CsrLocationDemo by Qualcomm Technologies International, Ltd.

Committer:
zhjcpi
Date:
Tue Nov 18 02:43:59 2014 +0000
Revision:
23:fd2cbb0900fd
Parent:
22:73338420d8a6
Seperate UTC time and GPS time into 2 independent fields.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zhjcpi 21:69895894068a 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"
zhjcpi 21:69895894068a 7 #include "GPSProvider.h"
zhjcpi 21:69895894068a 8
zhjcpi 21:69895894068a 9 #define PINMAP_GPIO_BTN D5
zhjcpi 21:69895894068a 10 #define PINMAP_GPIO_TEST D10
zhjcpi 21:69895894068a 11 #define LOC_LED1 D7
zhjcpi 21:69895894068a 12 #define LOC_LED2 D6
zhjcpi 0:789f6b6f710d 13
zhjcpi 3:7a3ed8ae071d 14 #define APP_DBG_PORT_BAUD 115200
zhjcpi 3:7a3ed8ae071d 15 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__)
zhjcpi 3:7a3ed8ae071d 16
zhjcpi 0:789f6b6f710d 17 /* appliation commands */
zhjcpi 21:69895894068a 18 typedef enum AppCmd {
zhjcpi 21:69895894068a 19 APP_CMD_IDLE, // No special command
zhjcpi 21:69895894068a 20 APP_CMD_HELP, // Show the supported commands
zhjcpi 21:69895894068a 21 APP_CMD_START, // Start location
zhjcpi 21:69895894068a 22 APP_CMD_STOP, // Stop location
zhjcpi 21:69895894068a 23 APP_CMD_PM_FULL, // Set full power mode
zhjcpi 21:69895894068a 24 APP_CMD_PM_PTF, // Set low power PTF mode
zhjcpi 21:69895894068a 25 APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode
zhjcpi 21:69895894068a 26 APP_CMD_NMEA, // protocol mode is NMEA
zhjcpi 21:69895894068a 27 APP_CMD_OSP, // protocol mode is OSP
zhjcpi 21:69895894068a 28 APP_CMD_RESET, // Debug command, pull reset pin high level
zhjcpi 21:69895894068a 29 APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status
zhjcpi 21:69895894068a 30 APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level
zhjcpi 0:789f6b6f710d 31 APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level
zhjcpi 21:69895894068a 32 APP_CMD_ONOFF_PULSE, // Debug command, pull onoff pin high level and then low level
zhjcpi 0:789f6b6f710d 33 APP_CMD_RESET_ON, // Debug command, pull reset pin high level
zhjcpi 9:87d1555b6219 34 APP_CMD_RESET_OFF, // Debug command, pull reset pin low level
zhjcpi 21:69895894068a 35 APP_CMD_TEST_ON, // Debug command, pull test pin high level
zhjcpi 21:69895894068a 36 APP_CMD_TEST_OFF, // Debug command, pull test pin low level
zhjcpi 21:69895894068a 37 APP_CMD_TEST_PULSE, // Debug command, pull test pin low firstly, then pull high level
zhjcpi 21:69895894068a 38 } eAppCmd;
zhjcpi 0:789f6b6f710d 39
zhjcpi 0:789f6b6f710d 40 static void _AppShowCmd(void);
zhjcpi 9:87d1555b6219 41 static void _AppBtnPushed(void);
zhjcpi 0:789f6b6f710d 42 static void _ConsoleRxHandler(void);
zhjcpi 0:789f6b6f710d 43 static void _AppCmdProcess(char *pCmd);
zhjcpi 0:789f6b6f710d 44
zhjcpi 21:69895894068a 45 static int sAppCmd = APP_CMD_IDLE;
zhjcpi 0:789f6b6f710d 46
zhjcpi 21:69895894068a 47 static DigitalOut sLedLocOn(LOC_LED1);
zhjcpi 21:69895894068a 48 static DigitalOut sLedPosReport(LOC_LED2);
zhjcpi 21:69895894068a 49 static InterruptIn sBtn(PINMAP_GPIO_BTN);
zhjcpi 21:69895894068a 50 static DigitalOut sPinTest(PINMAP_GPIO_TEST);
zhjcpi 0:789f6b6f710d 51
zhjcpi 21:69895894068a 52 Serial sSerialDebug(USBTX, USBRX);
zhjcpi 21:69895894068a 53
zhjcpi 21:69895894068a 54 void
zhjcpi 21:69895894068a 55 locationHandler(const GPSProvider::LocationUpdateParams_t *params)
zhjcpi 21:69895894068a 56 {
zhjcpi 21:69895894068a 57 CSR_APP_LOG_INFO("received location update\r\n");
zhjcpi 21:69895894068a 58 }
zhjcpi 0:789f6b6f710d 59
zhjcpi 0:789f6b6f710d 60 int main(void)
zhjcpi 0:789f6b6f710d 61 {
zhjcpi 21:69895894068a 62 sLedLocOn = 0;
zhjcpi 21:69895894068a 63 sLedPosReport = 0;
zhjcpi 21:69895894068a 64 sPinTest = 1;
zhjcpi 21:69895894068a 65 sBtn.mode(PullUp);
zhjcpi 21:69895894068a 66 sBtn.fall(&_AppBtnPushed);
zhjcpi 0:789f6b6f710d 67
zhjcpi 21:69895894068a 68 /* initialize the debug serial port */
zhjcpi 3:7a3ed8ae071d 69 sSerialDebug.baud(APP_DBG_PORT_BAUD);
zhjcpi 0:789f6b6f710d 70 sSerialDebug.attach(&_ConsoleRxHandler);
zhjcpi 0:789f6b6f710d 71
zhjcpi 21:69895894068a 72 GPSProvider gps;
zhjcpi 21:69895894068a 73 gps.setPowerMode(GPSProvider::POWER_FULL);
zhjcpi 21:69895894068a 74 gps.reset();
zhjcpi 21:69895894068a 75 gps.onLocationUpdate(locationHandler);
zhjcpi 21:69895894068a 76 CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
zhjcpi 0:789f6b6f710d 77
zhjcpi 21:69895894068a 78 // _AppShowCmd();
zhjcpi 0:789f6b6f710d 79
zhjcpi 21:69895894068a 80 while (true) {
zhjcpi 21:69895894068a 81 switch (sAppCmd) {
zhjcpi 21:69895894068a 82 case APP_CMD_HELP:
zhjcpi 21:69895894068a 83 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 84 _AppShowCmd();
zhjcpi 21:69895894068a 85 break;
zhjcpi 21:69895894068a 86 case APP_CMD_IDLE:
zhjcpi 21:69895894068a 87 gps.process();
zhjcpi 23:fd2cbb0900fd 88 #if DEVICE_SLEEP
zhjcpi 22:73338420d8a6 89 sleep();
zhjcpi 23:fd2cbb0900fd 90 #endif
zhjcpi 21:69895894068a 91 break;
zhjcpi 21:69895894068a 92 case APP_CMD_START:
zhjcpi 21:69895894068a 93 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 94 CSR_APP_LOG_INFO("start location.\r\n");
zhjcpi 21:69895894068a 95 gps.start();
zhjcpi 21:69895894068a 96 sLedLocOn = 1;
zhjcpi 21:69895894068a 97 break;
zhjcpi 21:69895894068a 98 case APP_CMD_STOP:
zhjcpi 21:69895894068a 99 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 100 CSR_APP_LOG_INFO("stop location.\r\n");
zhjcpi 21:69895894068a 101 gps.stop();
zhjcpi 21:69895894068a 102 sLedLocOn = 0;
zhjcpi 21:69895894068a 103 break;
zhjcpi 21:69895894068a 104 case APP_CMD_RESET:
zhjcpi 21:69895894068a 105 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 106 gps.reset();
zhjcpi 21:69895894068a 107 CSR_APP_LOG_INFO("reset on.\r\n");
zhjcpi 21:69895894068a 108 break;
zhjcpi 21:69895894068a 109 case APP_CMD_PTF_GETPOS:
zhjcpi 21:69895894068a 110 CSR_APP_LOG_INFO("lpm get pos.\r\n");
zhjcpi 21:69895894068a 111 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 112 gps.lpmGetImmediateLocation();
zhjcpi 21:69895894068a 113 break;
zhjcpi 21:69895894068a 114 case APP_CMD_NMEA:
zhjcpi 21:69895894068a 115 CSR_APP_LOG_INFO("select NMEA protocol.\r\n");
zhjcpi 21:69895894068a 116 gps.ioctl(CSR_IOCTL_CMD_PROTO_NMEA, NULL);
zhjcpi 21:69895894068a 117 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 118 break;
zhjcpi 21:69895894068a 119 case APP_CMD_OSP:
zhjcpi 21:69895894068a 120 CSR_APP_LOG_INFO("select OSP protocol.\r\n");
zhjcpi 21:69895894068a 121 gps.ioctl(CSR_IOCTL_CMD_PROTO_OSP, NULL);
zhjcpi 21:69895894068a 122 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 123 break;
zhjcpi 21:69895894068a 124 case APP_CMD_PM_FULL:
zhjcpi 21:69895894068a 125 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 126 gps.setPowerMode(GPSProvider::POWER_FULL);
zhjcpi 21:69895894068a 127 CSR_APP_LOG_INFO("fpm set.\r\n");
zhjcpi 21:69895894068a 128 break;
zhjcpi 21:69895894068a 129 case APP_CMD_PM_PTF:
zhjcpi 21:69895894068a 130 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 131 gps.setPowerMode(GPSProvider::POWER_LOW);
zhjcpi 21:69895894068a 132 CSR_APP_LOG_INFO("lpm ptf set.\r\n");
zhjcpi 21:69895894068a 133 break;
zhjcpi 21:69895894068a 134 case APP_CMD_WAKEUP_STATUS:
zhjcpi 21:69895894068a 135 gps.ioctl(CSR_IOCTL_CMD_WAKEUP_STATUS, NULL);
zhjcpi 21:69895894068a 136 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 137 break;
zhjcpi 21:69895894068a 138 case APP_CMD_ONOFF_ON:
zhjcpi 21:69895894068a 139 gps.ioctl(CSR_IOCTL_CMD_ONOFF_ON, NULL);
zhjcpi 21:69895894068a 140 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 141 break;
zhjcpi 21:69895894068a 142 case APP_CMD_ONOFF_OFF:
zhjcpi 21:69895894068a 143 gps.ioctl(CSR_IOCTL_CMD_ONOFF_OFF, NULL);
zhjcpi 21:69895894068a 144 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 145 break;
zhjcpi 21:69895894068a 146 case APP_CMD_ONOFF_PULSE:
zhjcpi 21:69895894068a 147 gps.ioctl(CSR_IOCTL_CMD_ONOFF_PULSE, NULL);
zhjcpi 21:69895894068a 148 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 149 break;
zhjcpi 21:69895894068a 150 case APP_CMD_RESET_ON:
zhjcpi 21:69895894068a 151 gps.ioctl(CSR_IOCTL_CMD_RESET_ON, NULL);
zhjcpi 21:69895894068a 152 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 153 break;
zhjcpi 21:69895894068a 154 case APP_CMD_RESET_OFF:
zhjcpi 21:69895894068a 155 gps.ioctl(CSR_IOCTL_CMD_RESET_OFF, NULL);
zhjcpi 21:69895894068a 156 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 157 break;
zhjcpi 21:69895894068a 158 case APP_CMD_TEST_ON:
zhjcpi 21:69895894068a 159 sPinTest = 1;
zhjcpi 21:69895894068a 160 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 161 break;
zhjcpi 21:69895894068a 162 case APP_CMD_TEST_OFF:
zhjcpi 21:69895894068a 163 sPinTest = 0;
zhjcpi 21:69895894068a 164 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 165 break;
zhjcpi 21:69895894068a 166 case APP_CMD_TEST_PULSE:
zhjcpi 21:69895894068a 167 sPinTest = 0;
zhjcpi 21:69895894068a 168 wait_ms(100);
zhjcpi 21:69895894068a 169 sPinTest = 1;
zhjcpi 21:69895894068a 170 sAppCmd = APP_CMD_IDLE;
zhjcpi 21:69895894068a 171 break;
zhjcpi 0:789f6b6f710d 172 }
zhjcpi 0:789f6b6f710d 173 }
zhjcpi 0:789f6b6f710d 174 }
zhjcpi 0:789f6b6f710d 175
zhjcpi 0:789f6b6f710d 176 static void _AppShowCmd(void)
zhjcpi 0:789f6b6f710d 177 {
zhjcpi 3:7a3ed8ae071d 178 CSR_APP_LOG_INFO("Location commands:\r\n");
zhjcpi 3:7a3ed8ae071d 179 CSR_APP_LOG_INFO(" help - help to show supported commands\r\n");
zhjcpi 3:7a3ed8ae071d 180 CSR_APP_LOG_INFO(" start - begin location\r\n");
zhjcpi 3:7a3ed8ae071d 181 CSR_APP_LOG_INFO(" stop - end location\r\n");
zhjcpi 3:7a3ed8ae071d 182 CSR_APP_LOG_INFO(" fpm - full power mode\r\n");
zhjcpi 3:7a3ed8ae071d 183 CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n");
zhjcpi 3:7a3ed8ae071d 184 CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n");
zhjcpi 21:69895894068a 185 CSR_APP_LOG_INFO(" nmea - NMEA mode\r\n");
zhjcpi 3:7a3ed8ae071d 186 CSR_APP_LOG_INFO(" osp - OSP mode\r\n");
zhjcpi 21:69895894068a 187 CSR_APP_LOG_INFO(" wakesta - get chip wakeup status\r\n");
zhjcpi 21:69895894068a 188 CSR_APP_LOG_INFO(" onoffon - pull high onoff pin\r\n");
zhjcpi 21:69895894068a 189 CSR_APP_LOG_INFO(" onoffoff - pull low onoff pin\r\n");
zhjcpi 21:69895894068a 190 CSR_APP_LOG_INFO(" onoffpul - pull onoff pin high and then low\r\n");
zhjcpi 21:69895894068a 191 CSR_APP_LOG_INFO(" reseton - pull high reset pin\r\n");
zhjcpi 21:69895894068a 192 CSR_APP_LOG_INFO(" resetoff - pull low reset pin\r\n");
zhjcpi 21:69895894068a 193 CSR_APP_LOG_INFO(" teston - pull high test pin\r\n");
zhjcpi 21:69895894068a 194 CSR_APP_LOG_INFO(" testoff - pull low test pin\r\n");
zhjcpi 21:69895894068a 195 CSR_APP_LOG_INFO(" testpul - pull test pin high and then low\r\n");
zhjcpi 0:789f6b6f710d 196 }
zhjcpi 0:789f6b6f710d 197
zhjcpi 9:87d1555b6219 198 static void _AppBtnPushed(void)
zhjcpi 9:87d1555b6219 199 {
zhjcpi 21:69895894068a 200 sAppCmd = APP_CMD_PTF_GETPOS;
zhjcpi 21:69895894068a 201 // sLedLocOn = !sLedLocOn;
zhjcpi 0:789f6b6f710d 202 }
zhjcpi 0:789f6b6f710d 203
zhjcpi 0:789f6b6f710d 204 static void _ConsoleRxHandler(void)
zhjcpi 0:789f6b6f710d 205 {
zhjcpi 21:69895894068a 206 static char cmd[32] = {0};
zhjcpi 21:69895894068a 207 char ch;
zhjcpi 0:789f6b6f710d 208
zhjcpi 0:789f6b6f710d 209 ch = sSerialDebug.getc();
zhjcpi 0:789f6b6f710d 210 sSerialDebug.putc(ch);
zhjcpi 21:69895894068a 211 if (ch == '\r') {
zhjcpi 0:789f6b6f710d 212 sSerialDebug.putc('\n');
zhjcpi 21:69895894068a 213 if (strlen(cmd) > 0) {
zhjcpi 21:69895894068a 214 _AppCmdProcess(cmd);
zhjcpi 21:69895894068a 215 memset(cmd, 0, sizeof(cmd));
zhjcpi 0:789f6b6f710d 216 }
zhjcpi 21:69895894068a 217 } else {
zhjcpi 21:69895894068a 218 cmd[strlen(cmd)] = ch;
zhjcpi 21:69895894068a 219 }
zhjcpi 0:789f6b6f710d 220 }
zhjcpi 21:69895894068a 221
zhjcpi 0:789f6b6f710d 222 static void _AppCmdProcess(char *pCmd)
zhjcpi 0:789f6b6f710d 223 {
zhjcpi 21:69895894068a 224 if (strcmp(pCmd, "help") == 0) {
zhjcpi 0:789f6b6f710d 225 sAppCmd = APP_CMD_HELP;
zhjcpi 21:69895894068a 226 } else if (strcmp(pCmd, "start") == 0) {
zhjcpi 0:789f6b6f710d 227 sAppCmd = APP_CMD_START;
zhjcpi 21:69895894068a 228 } else if (strcmp(pCmd, "stop") == 0) {
zhjcpi 0:789f6b6f710d 229 sAppCmd = APP_CMD_STOP;
zhjcpi 21:69895894068a 230 } else if (strcmp(pCmd, "fpm") == 0) {
zhjcpi 0:789f6b6f710d 231 sAppCmd = APP_CMD_PM_FULL;
zhjcpi 21:69895894068a 232 } else if (strcmp(pCmd, "ptf") == 0) {
zhjcpi 0:789f6b6f710d 233 sAppCmd = APP_CMD_PM_PTF;
zhjcpi 21:69895894068a 234 } else if (strcmp(pCmd, "getpos") == 0) {
zhjcpi 0:789f6b6f710d 235 sAppCmd = APP_CMD_PTF_GETPOS;
zhjcpi 21:69895894068a 236 } else if (strcmp(pCmd, "nmea") == 0) {
zhjcpi 0:789f6b6f710d 237 sAppCmd = APP_CMD_NMEA;
zhjcpi 21:69895894068a 238 } else if (strcmp(pCmd, "osp") == 0) {
zhjcpi 3:7a3ed8ae071d 239 sAppCmd = APP_CMD_OSP;
zhjcpi 21:69895894068a 240 } else if (strcmp(pCmd, "reset") == 0) {
zhjcpi 21:69895894068a 241 sAppCmd = APP_CMD_RESET;
zhjcpi 21:69895894068a 242 } else if(strcmp(pCmd, "wakesta") == 0) {
zhjcpi 21:69895894068a 243 sAppCmd = APP_CMD_WAKEUP_STATUS;
zhjcpi 21:69895894068a 244 } else if(strcmp(pCmd, "onoffon") == 0) {
zhjcpi 0:789f6b6f710d 245 sAppCmd = APP_CMD_ONOFF_ON;
zhjcpi 21:69895894068a 246 } else if(strcmp(pCmd, "onoffoff") == 0) {
zhjcpi 0:789f6b6f710d 247 sAppCmd = APP_CMD_ONOFF_OFF;
zhjcpi 21:69895894068a 248 } else if(strcmp(pCmd, "onoffpul") == 0) {
zhjcpi 21:69895894068a 249 sAppCmd = APP_CMD_ONOFF_PULSE;
zhjcpi 21:69895894068a 250 } else if(strcmp(pCmd, "resetfon") == 0) {
zhjcpi 0:789f6b6f710d 251 sAppCmd = APP_CMD_RESET_ON;
zhjcpi 21:69895894068a 252 } else if(strcmp(pCmd, "resetoff") == 0) {
zhjcpi 0:789f6b6f710d 253 sAppCmd = APP_CMD_RESET_OFF;
zhjcpi 21:69895894068a 254 } else if(strcmp(pCmd, "teston") == 0) {
zhjcpi 21:69895894068a 255 sAppCmd = APP_CMD_TEST_ON;
zhjcpi 21:69895894068a 256 } else if(strcmp(pCmd, "testoff") == 0) {
zhjcpi 21:69895894068a 257 sAppCmd = APP_CMD_TEST_OFF;
zhjcpi 21:69895894068a 258 } else if(strcmp(pCmd, "testpul") == 0) {
zhjcpi 21:69895894068a 259 sAppCmd = APP_CMD_TEST_PULSE;
zhjcpi 21:69895894068a 260 } else {
zhjcpi 3:7a3ed8ae071d 261 CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
zhjcpi 0:789f6b6f710d 262 }
zhjcpi 21:69895894068a 263
zhjcpi 21:69895894068a 264 CSR_APP_LOG_INFO("\r\n");
zhjcpi 0:789f6b6f710d 265 }
zhjcpi 21:69895894068a 266