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

Dependents:   CsrLocationDemo CsrLocationDemo

Fork of CsrLocation by jie zhao

Committer:
zhjcpi
Date:
Tue Nov 04 08:41:25 2014 +0000
Revision:
12:5fb829ce6b82
Child:
17:05033198f8f3
Fit into GPSProvider interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zhjcpi 12:5fb829ce6b82 1 /* mbed Microcontroller Library
zhjcpi 12:5fb829ce6b82 2 * Copyright (c) 2006-2014 ARM Limited
zhjcpi 12:5fb829ce6b82 3 *
zhjcpi 12:5fb829ce6b82 4 * Licensed under the Apache License, Version 2.0 (the "License");
zhjcpi 12:5fb829ce6b82 5 * you may not use this file except in compliance with the License.
zhjcpi 12:5fb829ce6b82 6 * You may obtain a copy of the License at
zhjcpi 12:5fb829ce6b82 7 *
zhjcpi 12:5fb829ce6b82 8 * http://www.apache.org/licenses/LICENSE-2.0
zhjcpi 12:5fb829ce6b82 9 *
zhjcpi 12:5fb829ce6b82 10 * Unless required by applicable law or agreed to in writing, software
zhjcpi 12:5fb829ce6b82 11 * distributed under the License is distributed on an "AS IS" BASIS,
zhjcpi 12:5fb829ce6b82 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
zhjcpi 12:5fb829ce6b82 13 * See the License for the specific language governing permissions and
zhjcpi 12:5fb829ce6b82 14 * limitations under the License.
zhjcpi 12:5fb829ce6b82 15 */
zhjcpi 12:5fb829ce6b82 16
zhjcpi 12:5fb829ce6b82 17 #include "mbed.h"
zhjcpi 12:5fb829ce6b82 18 #include "CsrLocation.h"
zhjcpi 12:5fb829ce6b82 19 #include "GPSProviderImplBase.h"
zhjcpi 12:5fb829ce6b82 20
zhjcpi 12:5fb829ce6b82 21 #define PINMAP_UART_LOC_TX D8
zhjcpi 12:5fb829ce6b82 22 #define PINMAP_UART_LOC_RX D2
zhjcpi 12:5fb829ce6b82 23 #define PINMAP_GPIO_LOC_ONOFF D9
zhjcpi 12:5fb829ce6b82 24 #define PINMAP_GPIO_LOC_RESET D4
zhjcpi 12:5fb829ce6b82 25 #define PINMAP_GPIO_LOC_WAKEUP D3
zhjcpi 12:5fb829ce6b82 26 #define PINMAP_GPIO_BTN D5
zhjcpi 12:5fb829ce6b82 27 #define PINMAP_GPIO_TEST D10
zhjcpi 12:5fb829ce6b82 28 #define LOC_LED1 D7
zhjcpi 12:5fb829ce6b82 29 #define LOC_LED2 D6
zhjcpi 12:5fb829ce6b82 30
zhjcpi 12:5fb829ce6b82 31 static RawSerial sSerialLoc(PINMAP_UART_LOC_TX, PINMAP_UART_LOC_RX);
zhjcpi 12:5fb829ce6b82 32 static DigitalOut sPinOnoff(PINMAP_GPIO_LOC_ONOFF);
zhjcpi 12:5fb829ce6b82 33 static DigitalOut sPinReset(PINMAP_GPIO_LOC_RESET);
zhjcpi 12:5fb829ce6b82 34 static DigitalIn sWakeup(PINMAP_GPIO_LOC_WAKEUP);
zhjcpi 12:5fb829ce6b82 35
zhjcpi 12:5fb829ce6b82 36 static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength);
zhjcpi 12:5fb829ce6b82 37 static void _AppEventCallback(eCsrLocEventType event, uint32_t data);
zhjcpi 12:5fb829ce6b82 38
zhjcpi 12:5fb829ce6b82 39 extern Serial sSerialDebug;
zhjcpi 12:5fb829ce6b82 40 #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__)
zhjcpi 12:5fb829ce6b82 41
zhjcpi 12:5fb829ce6b82 42 GPSProviderImplBase *
zhjcpi 12:5fb829ce6b82 43 createGPSProviderInstance(void)
zhjcpi 12:5fb829ce6b82 44 {
zhjcpi 12:5fb829ce6b82 45 static CSRLocation csrGPS(sSerialLoc, sPinOnoff, sPinReset, sWakeup, &sSerialDebug);
zhjcpi 12:5fb829ce6b82 46
zhjcpi 12:5fb829ce6b82 47 /* Register output callback and event callback functions */
zhjcpi 12:5fb829ce6b82 48 csrGPS.CsrLocRegOutput(_AppOutputCallback, _AppEventCallback);
zhjcpi 12:5fb829ce6b82 49
zhjcpi 12:5fb829ce6b82 50 return &csrGPS;
zhjcpi 12:5fb829ce6b82 51 }
zhjcpi 12:5fb829ce6b82 52
zhjcpi 12:5fb829ce6b82 53 void
zhjcpi 12:5fb829ce6b82 54 _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength)
zhjcpi 12:5fb829ce6b82 55 {
zhjcpi 12:5fb829ce6b82 56 switch (msgId) {
zhjcpi 12:5fb829ce6b82 57 case LOC_OUTPUT_LOCATION: {
zhjcpi 12:5fb829ce6b82 58 tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData;
zhjcpi 12:5fb829ce6b82 59 CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt);
zhjcpi 12:5fb829ce6b82 60 break;
zhjcpi 12:5fb829ce6b82 61 }
zhjcpi 12:5fb829ce6b82 62 case LOC_OUTPUT_SV_STATUS: {
zhjcpi 12:5fb829ce6b82 63 tLocSvStatus *pSvStatus = (tLocSvStatus *)pMsgData;
zhjcpi 12:5fb829ce6b82 64 CSR_APP_LOG_INFO("SV:week=%u, tow=%lu, GPS Num=%u, GLO Num=%u, GPS Mask=0x%lx, GLO Mask=0x%lx\r\n",
zhjcpi 12:5fb829ce6b82 65 pSvStatus->gps_week, pSvStatus->tow, pSvStatus->numOfSVs, pSvStatus->numOfGloSVs,
zhjcpi 12:5fb829ce6b82 66 pSvStatus->svUsedInFixMask, pSvStatus->gloSvUsedInFixMask);
zhjcpi 12:5fb829ce6b82 67 break;
zhjcpi 12:5fb829ce6b82 68 }
zhjcpi 12:5fb829ce6b82 69 case LOC_OUTPUT_NMEA: {
zhjcpi 12:5fb829ce6b82 70 CSR_APP_LOG_INFO("%s\r\n", (char *)pMsgData);
zhjcpi 12:5fb829ce6b82 71 break;
zhjcpi 12:5fb829ce6b82 72 }
zhjcpi 12:5fb829ce6b82 73
zhjcpi 12:5fb829ce6b82 74 default:
zhjcpi 12:5fb829ce6b82 75 break;
zhjcpi 12:5fb829ce6b82 76 }
zhjcpi 12:5fb829ce6b82 77 }
zhjcpi 12:5fb829ce6b82 78
zhjcpi 12:5fb829ce6b82 79 void _AppEventCallback(eCsrLocEventType event, uint32_t data)
zhjcpi 12:5fb829ce6b82 80 {
zhjcpi 12:5fb829ce6b82 81 switch (event) {
zhjcpi 12:5fb829ce6b82 82 case CSR_LOC_EVENT_START_RESULT:
zhjcpi 12:5fb829ce6b82 83 if (data != 0) {
zhjcpi 12:5fb829ce6b82 84 CSR_APP_LOG_INFO("start failed.\r\n");
zhjcpi 12:5fb829ce6b82 85 // sAppCmd = APP_CMD_START_FAILED;
zhjcpi 12:5fb829ce6b82 86 } else {
zhjcpi 12:5fb829ce6b82 87 CSR_APP_LOG_INFO("start OK.\r\n");
zhjcpi 12:5fb829ce6b82 88 }
zhjcpi 12:5fb829ce6b82 89 break;
zhjcpi 12:5fb829ce6b82 90 case CSR_LOC_EVENT_STOP_RESULT:
zhjcpi 12:5fb829ce6b82 91 if (data != 0) {
zhjcpi 12:5fb829ce6b82 92 CSR_APP_LOG_INFO("stop failed.\r\n");
zhjcpi 12:5fb829ce6b82 93 // sAppCmd = APP_CMD_STOP_FAILED;
zhjcpi 12:5fb829ce6b82 94 } else {
zhjcpi 12:5fb829ce6b82 95 CSR_APP_LOG_INFO("stop OK.\r\n");
zhjcpi 12:5fb829ce6b82 96 }
zhjcpi 12:5fb829ce6b82 97 break;
zhjcpi 12:5fb829ce6b82 98 default:
zhjcpi 12:5fb829ce6b82 99 break;
zhjcpi 12:5fb829ce6b82 100 }
zhjcpi 12:5fb829ce6b82 101 }