Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CsrLocation mbed GPSProvider
Fork of CsrLocationDemo by
CsrLocationDemo.cpp
00001 /* CSRLocation class for mbed Microcontroller 00002 * Copyright 2014 CSR plc 00003 */ 00004 00005 #include "mbed.h" 00006 #include "CsrLocation.h" 00007 #include "GPSProvider.h" 00008 00009 #define PINMAP_GPIO_BTN D5 00010 #define PINMAP_GPIO_TEST D10 00011 #define LOC_LED1 D7 00012 #define LOC_LED2 D6 00013 00014 #define APP_DBG_PORT_BAUD 115200 00015 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__) 00016 00017 /* appliation commands */ 00018 typedef enum AppCmd { 00019 APP_CMD_IDLE, // No special command 00020 APP_CMD_HELP, // Show the supported commands 00021 APP_CMD_START, // Start location 00022 APP_CMD_STOP, // Stop location 00023 APP_CMD_PM_FULL, // Set full power mode 00024 APP_CMD_PM_PTF, // Set low power PTF mode 00025 APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode 00026 APP_CMD_NMEA, // protocol mode is NMEA 00027 APP_CMD_OSP, // protocol mode is OSP 00028 APP_CMD_RESET, // Debug command, pull reset pin high level 00029 APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status 00030 APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level 00031 APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level 00032 APP_CMD_ONOFF_PULSE, // Debug command, pull onoff pin high level and then low level 00033 APP_CMD_RESET_ON, // Debug command, pull reset pin high level 00034 APP_CMD_RESET_OFF, // Debug command, pull reset pin low level 00035 APP_CMD_TEST_ON, // Debug command, pull test pin high level 00036 APP_CMD_TEST_OFF, // Debug command, pull test pin low level 00037 APP_CMD_TEST_PULSE, // Debug command, pull test pin low firstly, then pull high level 00038 } eAppCmd; 00039 00040 static void _AppShowCmd(void); 00041 static void _AppBtnPushed(void); 00042 static void _ConsoleRxHandler(void); 00043 static void _AppCmdProcess(char *pCmd); 00044 00045 static int sAppCmd = APP_CMD_IDLE; 00046 00047 static DigitalOut sLedLocOn(LOC_LED1); 00048 static DigitalOut sLedPosReport(LOC_LED2); 00049 static InterruptIn sBtn(PINMAP_GPIO_BTN); 00050 static DigitalOut sPinTest(PINMAP_GPIO_TEST); 00051 00052 Serial sSerialDebug(USBTX, USBRX); 00053 00054 void 00055 locationHandler(const GPSProvider::LocationUpdateParams_t *params) 00056 { 00057 CSR_APP_LOG_INFO("received location update\r\n"); 00058 } 00059 00060 int main(void) 00061 { 00062 sLedLocOn = 0; 00063 sLedPosReport = 0; 00064 sPinTest = 1; 00065 sBtn.mode(PullUp); 00066 sBtn.fall(&_AppBtnPushed); 00067 00068 /* initialize the debug serial port */ 00069 sSerialDebug.baud(APP_DBG_PORT_BAUD); 00070 sSerialDebug.attach(&_ConsoleRxHandler); 00071 00072 GPSProvider gps; 00073 gps.setPowerMode(GPSProvider::POWER_FULL); 00074 gps.reset(); 00075 gps.onLocationUpdate(locationHandler); 00076 CSR_APP_LOG_INFO("Success to new csrLocation.\r\n"); 00077 00078 // _AppShowCmd(); 00079 00080 while (true) { 00081 switch (sAppCmd) { 00082 case APP_CMD_HELP: 00083 sAppCmd = APP_CMD_IDLE; 00084 _AppShowCmd(); 00085 break; 00086 case APP_CMD_IDLE: 00087 gps.process(); 00088 #if DEVICE_SLEEP 00089 sleep(); 00090 #endif 00091 break; 00092 case APP_CMD_START: 00093 sAppCmd = APP_CMD_IDLE; 00094 CSR_APP_LOG_INFO("start location.\r\n"); 00095 gps.start(); 00096 sLedLocOn = 1; 00097 break; 00098 case APP_CMD_STOP: 00099 sAppCmd = APP_CMD_IDLE; 00100 CSR_APP_LOG_INFO("stop location.\r\n"); 00101 gps.stop(); 00102 sLedLocOn = 0; 00103 break; 00104 case APP_CMD_RESET: 00105 sAppCmd = APP_CMD_IDLE; 00106 gps.reset(); 00107 CSR_APP_LOG_INFO("reset on.\r\n"); 00108 break; 00109 case APP_CMD_PTF_GETPOS: 00110 CSR_APP_LOG_INFO("lpm get pos.\r\n"); 00111 sAppCmd = APP_CMD_IDLE; 00112 gps.lpmGetImmediateLocation(); 00113 break; 00114 case APP_CMD_NMEA: 00115 CSR_APP_LOG_INFO("select NMEA protocol.\r\n"); 00116 gps.ioctl(CSR_IOCTL_CMD_PROTO_NMEA, NULL); 00117 sAppCmd = APP_CMD_IDLE; 00118 break; 00119 case APP_CMD_OSP: 00120 CSR_APP_LOG_INFO("select OSP protocol.\r\n"); 00121 gps.ioctl(CSR_IOCTL_CMD_PROTO_OSP, NULL); 00122 sAppCmd = APP_CMD_IDLE; 00123 break; 00124 case APP_CMD_PM_FULL: 00125 sAppCmd = APP_CMD_IDLE; 00126 gps.setPowerMode(GPSProvider::POWER_FULL); 00127 CSR_APP_LOG_INFO("fpm set.\r\n"); 00128 break; 00129 case APP_CMD_PM_PTF: 00130 sAppCmd = APP_CMD_IDLE; 00131 gps.setPowerMode(GPSProvider::POWER_LOW); 00132 CSR_APP_LOG_INFO("lpm ptf set.\r\n"); 00133 break; 00134 case APP_CMD_WAKEUP_STATUS: 00135 gps.ioctl(CSR_IOCTL_CMD_WAKEUP_STATUS, NULL); 00136 sAppCmd = APP_CMD_IDLE; 00137 break; 00138 case APP_CMD_ONOFF_ON: 00139 gps.ioctl(CSR_IOCTL_CMD_ONOFF_ON, NULL); 00140 sAppCmd = APP_CMD_IDLE; 00141 break; 00142 case APP_CMD_ONOFF_OFF: 00143 gps.ioctl(CSR_IOCTL_CMD_ONOFF_OFF, NULL); 00144 sAppCmd = APP_CMD_IDLE; 00145 break; 00146 case APP_CMD_ONOFF_PULSE: 00147 gps.ioctl(CSR_IOCTL_CMD_ONOFF_PULSE, NULL); 00148 sAppCmd = APP_CMD_IDLE; 00149 break; 00150 case APP_CMD_RESET_ON: 00151 gps.ioctl(CSR_IOCTL_CMD_RESET_ON, NULL); 00152 sAppCmd = APP_CMD_IDLE; 00153 break; 00154 case APP_CMD_RESET_OFF: 00155 gps.ioctl(CSR_IOCTL_CMD_RESET_OFF, NULL); 00156 sAppCmd = APP_CMD_IDLE; 00157 break; 00158 case APP_CMD_TEST_ON: 00159 sPinTest = 1; 00160 sAppCmd = APP_CMD_IDLE; 00161 break; 00162 case APP_CMD_TEST_OFF: 00163 sPinTest = 0; 00164 sAppCmd = APP_CMD_IDLE; 00165 break; 00166 case APP_CMD_TEST_PULSE: 00167 sPinTest = 0; 00168 wait_ms(100); 00169 sPinTest = 1; 00170 sAppCmd = APP_CMD_IDLE; 00171 break; 00172 } 00173 } 00174 } 00175 00176 static void _AppShowCmd(void) 00177 { 00178 CSR_APP_LOG_INFO("Location commands:\r\n"); 00179 CSR_APP_LOG_INFO(" help - help to show supported commands\r\n"); 00180 CSR_APP_LOG_INFO(" start - begin location\r\n"); 00181 CSR_APP_LOG_INFO(" stop - end location\r\n"); 00182 CSR_APP_LOG_INFO(" fpm - full power mode\r\n"); 00183 CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n"); 00184 CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n"); 00185 CSR_APP_LOG_INFO(" nmea - NMEA mode\r\n"); 00186 CSR_APP_LOG_INFO(" osp - OSP mode\r\n"); 00187 CSR_APP_LOG_INFO(" wakesta - get chip wakeup status\r\n"); 00188 CSR_APP_LOG_INFO(" onoffon - pull high onoff pin\r\n"); 00189 CSR_APP_LOG_INFO(" onoffoff - pull low onoff pin\r\n"); 00190 CSR_APP_LOG_INFO(" onoffpul - pull onoff pin high and then low\r\n"); 00191 CSR_APP_LOG_INFO(" reseton - pull high reset pin\r\n"); 00192 CSR_APP_LOG_INFO(" resetoff - pull low reset pin\r\n"); 00193 CSR_APP_LOG_INFO(" teston - pull high test pin\r\n"); 00194 CSR_APP_LOG_INFO(" testoff - pull low test pin\r\n"); 00195 CSR_APP_LOG_INFO(" testpul - pull test pin high and then low\r\n"); 00196 } 00197 00198 static void _AppBtnPushed(void) 00199 { 00200 sAppCmd = APP_CMD_PTF_GETPOS; 00201 // sLedLocOn = !sLedLocOn; 00202 } 00203 00204 static void _ConsoleRxHandler(void) 00205 { 00206 static char cmd[32] = {0}; 00207 char ch; 00208 00209 ch = sSerialDebug.getc(); 00210 sSerialDebug.putc(ch); 00211 if (ch == '\r') { 00212 sSerialDebug.putc('\n'); 00213 if (strlen(cmd) > 0) { 00214 _AppCmdProcess(cmd); 00215 memset(cmd, 0, sizeof(cmd)); 00216 } 00217 } else { 00218 cmd[strlen(cmd)] = ch; 00219 } 00220 } 00221 00222 static void _AppCmdProcess(char *pCmd) 00223 { 00224 if (strcmp(pCmd, "help") == 0) { 00225 sAppCmd = APP_CMD_HELP; 00226 } else if (strcmp(pCmd, "start") == 0) { 00227 sAppCmd = APP_CMD_START; 00228 } else if (strcmp(pCmd, "stop") == 0) { 00229 sAppCmd = APP_CMD_STOP; 00230 } else if (strcmp(pCmd, "fpm") == 0) { 00231 sAppCmd = APP_CMD_PM_FULL; 00232 } else if (strcmp(pCmd, "ptf") == 0) { 00233 sAppCmd = APP_CMD_PM_PTF; 00234 } else if (strcmp(pCmd, "getpos") == 0) { 00235 sAppCmd = APP_CMD_PTF_GETPOS; 00236 } else if (strcmp(pCmd, "nmea") == 0) { 00237 sAppCmd = APP_CMD_NMEA; 00238 } else if (strcmp(pCmd, "osp") == 0) { 00239 sAppCmd = APP_CMD_OSP; 00240 } else if (strcmp(pCmd, "reset") == 0) { 00241 sAppCmd = APP_CMD_RESET; 00242 } else if(strcmp(pCmd, "wakesta") == 0) { 00243 sAppCmd = APP_CMD_WAKEUP_STATUS; 00244 } else if(strcmp(pCmd, "onoffon") == 0) { 00245 sAppCmd = APP_CMD_ONOFF_ON; 00246 } else if(strcmp(pCmd, "onoffoff") == 0) { 00247 sAppCmd = APP_CMD_ONOFF_OFF; 00248 } else if(strcmp(pCmd, "onoffpul") == 0) { 00249 sAppCmd = APP_CMD_ONOFF_PULSE; 00250 } else if(strcmp(pCmd, "resetfon") == 0) { 00251 sAppCmd = APP_CMD_RESET_ON; 00252 } else if(strcmp(pCmd, "resetoff") == 0) { 00253 sAppCmd = APP_CMD_RESET_OFF; 00254 } else if(strcmp(pCmd, "teston") == 0) { 00255 sAppCmd = APP_CMD_TEST_ON; 00256 } else if(strcmp(pCmd, "testoff") == 0) { 00257 sAppCmd = APP_CMD_TEST_OFF; 00258 } else if(strcmp(pCmd, "testpul") == 0) { 00259 sAppCmd = APP_CMD_TEST_PULSE; 00260 } else { 00261 CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd); 00262 } 00263 00264 CSR_APP_LOG_INFO("\r\n"); 00265 } 00266
Generated on Wed Jul 13 2022 13:38:00 by
1.7.2

GPS mbed Shield