Csr location class shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.
Dependents: CsrLocationDemo CsrLocationDemo
Fork of CsrLocation by
createCSRGPS.cpp@18:5d72465991f5, 2014-11-18 (annotated)
- Committer:
- zhjcpi
- Date:
- Tue Nov 18 09:03:17 2014 +0000
- Revision:
- 18:5d72465991f5
- Parent:
- 17:05033198f8f3
- Child:
- 20:88db82cf3f0f
define utcTime as uint_64_t instead of float.
Who changed what in which revision?
User | Revision | Line number | New 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 | 18:5d72465991f5 | 59 | CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f, utctime=%llu, gps week=%d, gps tow=%d\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt, pPosRsp->utcTime, pPosRsp->gpsTime.gps_week, pPosRsp->gpsTime.tow); |
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 | } |