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
- Committer:
- zhjcpi
- Date:
- 2014-11-18
- Revision:
- 24:a0b23a9cb9ad
- Parent:
- 23:fd2cbb0900fd
File content as of revision 24:a0b23a9cb9ad:
/* CSRLocation class for mbed Microcontroller
* Copyright 2014 CSR plc
*/
#include "mbed.h"
#include "CsrLocation.h"
#include "GPSProvider.h"
#define PINMAP_GPIO_BTN D5
#define PINMAP_GPIO_TEST D10
#define LOC_LED1 D7
#define LOC_LED2 D6
#define APP_DBG_PORT_BAUD 115200
#define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__)
/* appliation commands */
typedef enum AppCmd {
APP_CMD_IDLE, // No special command
APP_CMD_HELP, // Show the supported commands
APP_CMD_START, // Start location
APP_CMD_STOP, // Stop location
APP_CMD_PM_FULL, // Set full power mode
APP_CMD_PM_PTF, // Set low power PTF mode
APP_CMD_PTF_GETPOS, // Get location immediately in low power PTF mode
APP_CMD_NMEA, // protocol mode is NMEA
APP_CMD_OSP, // protocol mode is OSP
APP_CMD_RESET, // Debug command, pull reset pin high level
APP_CMD_WAKEUP_STATUS, // Debug command, check wakeup pin status
APP_CMD_ONOFF_ON, // Debug command, pull onoff pin high level
APP_CMD_ONOFF_OFF, // Debug command, pull onoff pin low level
APP_CMD_ONOFF_PULSE, // Debug command, pull onoff pin high level and then low level
APP_CMD_RESET_ON, // Debug command, pull reset pin high level
APP_CMD_RESET_OFF, // Debug command, pull reset pin low level
APP_CMD_TEST_ON, // Debug command, pull test pin high level
APP_CMD_TEST_OFF, // Debug command, pull test pin low level
APP_CMD_TEST_PULSE, // Debug command, pull test pin low firstly, then pull high level
} eAppCmd;
static void _AppShowCmd(void);
static void _AppBtnPushed(void);
static void _ConsoleRxHandler(void);
static void _AppCmdProcess(char *pCmd);
static int sAppCmd = APP_CMD_IDLE;
static DigitalOut sLedLocOn(LOC_LED1);
static DigitalOut sLedPosReport(LOC_LED2);
static InterruptIn sBtn(PINMAP_GPIO_BTN);
static DigitalOut sPinTest(PINMAP_GPIO_TEST);
Serial sSerialDebug(USBTX, USBRX);
void
locationHandler(const GPSProvider::LocationUpdateParams_t *params)
{
CSR_APP_LOG_INFO("received location update\r\n");
}
int main(void)
{
sLedLocOn = 0;
sLedPosReport = 0;
sPinTest = 1;
sBtn.mode(PullUp);
sBtn.fall(&_AppBtnPushed);
/* initialize the debug serial port */
sSerialDebug.baud(APP_DBG_PORT_BAUD);
sSerialDebug.attach(&_ConsoleRxHandler);
GPSProvider gps;
gps.setPowerMode(GPSProvider::POWER_FULL);
gps.reset();
gps.onLocationUpdate(locationHandler);
CSR_APP_LOG_INFO("Success to new csrLocation.\r\n");
// _AppShowCmd();
while (true) {
switch (sAppCmd) {
case APP_CMD_HELP:
sAppCmd = APP_CMD_IDLE;
_AppShowCmd();
break;
case APP_CMD_IDLE:
gps.process();
#if DEVICE_SLEEP
sleep();
#endif
break;
case APP_CMD_START:
sAppCmd = APP_CMD_IDLE;
CSR_APP_LOG_INFO("start location.\r\n");
gps.start();
sLedLocOn = 1;
break;
case APP_CMD_STOP:
sAppCmd = APP_CMD_IDLE;
CSR_APP_LOG_INFO("stop location.\r\n");
gps.stop();
sLedLocOn = 0;
break;
case APP_CMD_RESET:
sAppCmd = APP_CMD_IDLE;
gps.reset();
CSR_APP_LOG_INFO("reset on.\r\n");
break;
case APP_CMD_PTF_GETPOS:
CSR_APP_LOG_INFO("lpm get pos.\r\n");
sAppCmd = APP_CMD_IDLE;
gps.lpmGetImmediateLocation();
break;
case APP_CMD_NMEA:
CSR_APP_LOG_INFO("select NMEA protocol.\r\n");
gps.ioctl(CSR_IOCTL_CMD_PROTO_NMEA, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_OSP:
CSR_APP_LOG_INFO("select OSP protocol.\r\n");
gps.ioctl(CSR_IOCTL_CMD_PROTO_OSP, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_PM_FULL:
sAppCmd = APP_CMD_IDLE;
gps.setPowerMode(GPSProvider::POWER_FULL);
CSR_APP_LOG_INFO("fpm set.\r\n");
break;
case APP_CMD_PM_PTF:
sAppCmd = APP_CMD_IDLE;
gps.setPowerMode(GPSProvider::POWER_LOW);
CSR_APP_LOG_INFO("lpm ptf set.\r\n");
break;
case APP_CMD_WAKEUP_STATUS:
gps.ioctl(CSR_IOCTL_CMD_WAKEUP_STATUS, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_ONOFF_ON:
gps.ioctl(CSR_IOCTL_CMD_ONOFF_ON, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_ONOFF_OFF:
gps.ioctl(CSR_IOCTL_CMD_ONOFF_OFF, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_ONOFF_PULSE:
gps.ioctl(CSR_IOCTL_CMD_ONOFF_PULSE, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_RESET_ON:
gps.ioctl(CSR_IOCTL_CMD_RESET_ON, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_RESET_OFF:
gps.ioctl(CSR_IOCTL_CMD_RESET_OFF, NULL);
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_TEST_ON:
sPinTest = 1;
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_TEST_OFF:
sPinTest = 0;
sAppCmd = APP_CMD_IDLE;
break;
case APP_CMD_TEST_PULSE:
sPinTest = 0;
wait_ms(100);
sPinTest = 1;
sAppCmd = APP_CMD_IDLE;
break;
}
}
}
static void _AppShowCmd(void)
{
CSR_APP_LOG_INFO("Location commands:\r\n");
CSR_APP_LOG_INFO(" help - help to show supported commands\r\n");
CSR_APP_LOG_INFO(" start - begin location\r\n");
CSR_APP_LOG_INFO(" stop - end location\r\n");
CSR_APP_LOG_INFO(" fpm - full power mode\r\n");
CSR_APP_LOG_INFO(" ptf - ptf low power mode\r\n");
CSR_APP_LOG_INFO(" getpos - get location immediately in low power ptf mode\r\n");
CSR_APP_LOG_INFO(" nmea - NMEA mode\r\n");
CSR_APP_LOG_INFO(" osp - OSP mode\r\n");
CSR_APP_LOG_INFO(" wakesta - get chip wakeup status\r\n");
CSR_APP_LOG_INFO(" onoffon - pull high onoff pin\r\n");
CSR_APP_LOG_INFO(" onoffoff - pull low onoff pin\r\n");
CSR_APP_LOG_INFO(" onoffpul - pull onoff pin high and then low\r\n");
CSR_APP_LOG_INFO(" reseton - pull high reset pin\r\n");
CSR_APP_LOG_INFO(" resetoff - pull low reset pin\r\n");
CSR_APP_LOG_INFO(" teston - pull high test pin\r\n");
CSR_APP_LOG_INFO(" testoff - pull low test pin\r\n");
CSR_APP_LOG_INFO(" testpul - pull test pin high and then low\r\n");
}
static void _AppBtnPushed(void)
{
sAppCmd = APP_CMD_PTF_GETPOS;
// sLedLocOn = !sLedLocOn;
}
static void _ConsoleRxHandler(void)
{
static char cmd[32] = {0};
char ch;
ch = sSerialDebug.getc();
sSerialDebug.putc(ch);
if (ch == '\r') {
sSerialDebug.putc('\n');
if (strlen(cmd) > 0) {
_AppCmdProcess(cmd);
memset(cmd, 0, sizeof(cmd));
}
} else {
cmd[strlen(cmd)] = ch;
}
}
static void _AppCmdProcess(char *pCmd)
{
if (strcmp(pCmd, "help") == 0) {
sAppCmd = APP_CMD_HELP;
} else if (strcmp(pCmd, "start") == 0) {
sAppCmd = APP_CMD_START;
} else if (strcmp(pCmd, "stop") == 0) {
sAppCmd = APP_CMD_STOP;
} else if (strcmp(pCmd, "fpm") == 0) {
sAppCmd = APP_CMD_PM_FULL;
} else if (strcmp(pCmd, "ptf") == 0) {
sAppCmd = APP_CMD_PM_PTF;
} else if (strcmp(pCmd, "getpos") == 0) {
sAppCmd = APP_CMD_PTF_GETPOS;
} else if (strcmp(pCmd, "nmea") == 0) {
sAppCmd = APP_CMD_NMEA;
} else if (strcmp(pCmd, "osp") == 0) {
sAppCmd = APP_CMD_OSP;
} else if (strcmp(pCmd, "reset") == 0) {
sAppCmd = APP_CMD_RESET;
} else if(strcmp(pCmd, "wakesta") == 0) {
sAppCmd = APP_CMD_WAKEUP_STATUS;
} else if(strcmp(pCmd, "onoffon") == 0) {
sAppCmd = APP_CMD_ONOFF_ON;
} else if(strcmp(pCmd, "onoffoff") == 0) {
sAppCmd = APP_CMD_ONOFF_OFF;
} else if(strcmp(pCmd, "onoffpul") == 0) {
sAppCmd = APP_CMD_ONOFF_PULSE;
} else if(strcmp(pCmd, "resetfon") == 0) {
sAppCmd = APP_CMD_RESET_ON;
} else if(strcmp(pCmd, "resetoff") == 0) {
sAppCmd = APP_CMD_RESET_OFF;
} else if(strcmp(pCmd, "teston") == 0) {
sAppCmd = APP_CMD_TEST_ON;
} else if(strcmp(pCmd, "testoff") == 0) {
sAppCmd = APP_CMD_TEST_OFF;
} else if(strcmp(pCmd, "testpul") == 0) {
sAppCmd = APP_CMD_TEST_PULSE;
} else {
CSR_APP_LOG_INFO("\r\nUnknown command %s\r\n", pCmd);
}
CSR_APP_LOG_INFO("\r\n");
}

GPS mbed Shield