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@20:88db82cf3f0f, 2014-11-27 (annotated)
- Committer:
- zhjcpi
- Date:
- Thu Nov 27 10:28:35 2014 +0000
- Revision:
- 20:88db82cf3f0f
- Parent:
- 18:5d72465991f5
Support Freescale FDRM platform.
; Location uart cannot use D8/D2, it is changed to D1/D0.
; Trigger on/off before open UART. Otherwise, FDRM will halt when doing the second start(start,then stop, then start again).
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 | 20:88db82cf3f0f | 21 | #ifdef TARGET_K64F |
zhjcpi | 20:88db82cf3f0f | 22 | #define PINMAP_UART_LOC_TX D1 |
zhjcpi | 20:88db82cf3f0f | 23 | #define PINMAP_UART_LOC_RX D0 |
zhjcpi | 20:88db82cf3f0f | 24 | #else |
zhjcpi | 12:5fb829ce6b82 | 25 | #define PINMAP_UART_LOC_TX D8 |
zhjcpi | 12:5fb829ce6b82 | 26 | #define PINMAP_UART_LOC_RX D2 |
zhjcpi | 20:88db82cf3f0f | 27 | #endif |
zhjcpi | 12:5fb829ce6b82 | 28 | #define PINMAP_GPIO_LOC_ONOFF D9 |
zhjcpi | 12:5fb829ce6b82 | 29 | #define PINMAP_GPIO_LOC_RESET D4 |
zhjcpi | 12:5fb829ce6b82 | 30 | #define PINMAP_GPIO_LOC_WAKEUP D3 |
zhjcpi | 12:5fb829ce6b82 | 31 | #define PINMAP_GPIO_BTN D5 |
zhjcpi | 12:5fb829ce6b82 | 32 | #define PINMAP_GPIO_TEST D10 |
zhjcpi | 12:5fb829ce6b82 | 33 | #define LOC_LED1 D7 |
zhjcpi | 12:5fb829ce6b82 | 34 | #define LOC_LED2 D6 |
zhjcpi | 12:5fb829ce6b82 | 35 | |
zhjcpi | 12:5fb829ce6b82 | 36 | static RawSerial sSerialLoc(PINMAP_UART_LOC_TX, PINMAP_UART_LOC_RX); |
zhjcpi | 12:5fb829ce6b82 | 37 | static DigitalOut sPinOnoff(PINMAP_GPIO_LOC_ONOFF); |
zhjcpi | 12:5fb829ce6b82 | 38 | static DigitalOut sPinReset(PINMAP_GPIO_LOC_RESET); |
zhjcpi | 12:5fb829ce6b82 | 39 | static DigitalIn sWakeup(PINMAP_GPIO_LOC_WAKEUP); |
zhjcpi | 12:5fb829ce6b82 | 40 | |
zhjcpi | 12:5fb829ce6b82 | 41 | static void _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength); |
zhjcpi | 12:5fb829ce6b82 | 42 | static void _AppEventCallback(eCsrLocEventType event, uint32_t data); |
zhjcpi | 12:5fb829ce6b82 | 43 | |
zhjcpi | 12:5fb829ce6b82 | 44 | extern Serial sSerialDebug; |
zhjcpi | 12:5fb829ce6b82 | 45 | #define CSR_APP_LOG_INFO(...) sSerialDebug.printf(__VA_ARGS__) |
zhjcpi | 12:5fb829ce6b82 | 46 | |
zhjcpi | 12:5fb829ce6b82 | 47 | GPSProviderImplBase * |
zhjcpi | 12:5fb829ce6b82 | 48 | createGPSProviderInstance(void) |
zhjcpi | 12:5fb829ce6b82 | 49 | { |
zhjcpi | 12:5fb829ce6b82 | 50 | static CSRLocation csrGPS(sSerialLoc, sPinOnoff, sPinReset, sWakeup, &sSerialDebug); |
zhjcpi | 12:5fb829ce6b82 | 51 | |
zhjcpi | 12:5fb829ce6b82 | 52 | /* Register output callback and event callback functions */ |
zhjcpi | 12:5fb829ce6b82 | 53 | csrGPS.CsrLocRegOutput(_AppOutputCallback, _AppEventCallback); |
zhjcpi | 12:5fb829ce6b82 | 54 | |
zhjcpi | 12:5fb829ce6b82 | 55 | return &csrGPS; |
zhjcpi | 12:5fb829ce6b82 | 56 | } |
zhjcpi | 12:5fb829ce6b82 | 57 | |
zhjcpi | 12:5fb829ce6b82 | 58 | void |
zhjcpi | 12:5fb829ce6b82 | 59 | _AppOutputCallback(uint32_t msgId, void *const pMsgData, uint32_t msgLength) |
zhjcpi | 12:5fb829ce6b82 | 60 | { |
zhjcpi | 12:5fb829ce6b82 | 61 | switch (msgId) { |
zhjcpi | 12:5fb829ce6b82 | 62 | case LOC_OUTPUT_LOCATION: { |
zhjcpi | 12:5fb829ce6b82 | 63 | tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData; |
zhjcpi | 18:5d72465991f5 | 64 | 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 | 65 | break; |
zhjcpi | 12:5fb829ce6b82 | 66 | } |
zhjcpi | 12:5fb829ce6b82 | 67 | case LOC_OUTPUT_SV_STATUS: { |
zhjcpi | 12:5fb829ce6b82 | 68 | tLocSvStatus *pSvStatus = (tLocSvStatus *)pMsgData; |
zhjcpi | 12:5fb829ce6b82 | 69 | 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 | 70 | pSvStatus->gps_week, pSvStatus->tow, pSvStatus->numOfSVs, pSvStatus->numOfGloSVs, |
zhjcpi | 12:5fb829ce6b82 | 71 | pSvStatus->svUsedInFixMask, pSvStatus->gloSvUsedInFixMask); |
zhjcpi | 12:5fb829ce6b82 | 72 | break; |
zhjcpi | 12:5fb829ce6b82 | 73 | } |
zhjcpi | 12:5fb829ce6b82 | 74 | case LOC_OUTPUT_NMEA: { |
zhjcpi | 12:5fb829ce6b82 | 75 | CSR_APP_LOG_INFO("%s\r\n", (char *)pMsgData); |
zhjcpi | 12:5fb829ce6b82 | 76 | break; |
zhjcpi | 12:5fb829ce6b82 | 77 | } |
zhjcpi | 12:5fb829ce6b82 | 78 | |
zhjcpi | 12:5fb829ce6b82 | 79 | default: |
zhjcpi | 12:5fb829ce6b82 | 80 | break; |
zhjcpi | 12:5fb829ce6b82 | 81 | } |
zhjcpi | 12:5fb829ce6b82 | 82 | } |
zhjcpi | 12:5fb829ce6b82 | 83 | |
zhjcpi | 12:5fb829ce6b82 | 84 | void _AppEventCallback(eCsrLocEventType event, uint32_t data) |
zhjcpi | 12:5fb829ce6b82 | 85 | { |
zhjcpi | 12:5fb829ce6b82 | 86 | switch (event) { |
zhjcpi | 12:5fb829ce6b82 | 87 | case CSR_LOC_EVENT_START_RESULT: |
zhjcpi | 12:5fb829ce6b82 | 88 | if (data != 0) { |
zhjcpi | 12:5fb829ce6b82 | 89 | CSR_APP_LOG_INFO("start failed.\r\n"); |
zhjcpi | 12:5fb829ce6b82 | 90 | // sAppCmd = APP_CMD_START_FAILED; |
zhjcpi | 12:5fb829ce6b82 | 91 | } else { |
zhjcpi | 12:5fb829ce6b82 | 92 | CSR_APP_LOG_INFO("start OK.\r\n"); |
zhjcpi | 12:5fb829ce6b82 | 93 | } |
zhjcpi | 12:5fb829ce6b82 | 94 | break; |
zhjcpi | 12:5fb829ce6b82 | 95 | case CSR_LOC_EVENT_STOP_RESULT: |
zhjcpi | 12:5fb829ce6b82 | 96 | if (data != 0) { |
zhjcpi | 12:5fb829ce6b82 | 97 | CSR_APP_LOG_INFO("stop failed.\r\n"); |
zhjcpi | 12:5fb829ce6b82 | 98 | // sAppCmd = APP_CMD_STOP_FAILED; |
zhjcpi | 12:5fb829ce6b82 | 99 | } else { |
zhjcpi | 12:5fb829ce6b82 | 100 | CSR_APP_LOG_INFO("stop OK.\r\n"); |
zhjcpi | 12:5fb829ce6b82 | 101 | } |
zhjcpi | 12:5fb829ce6b82 | 102 | break; |
zhjcpi | 12:5fb829ce6b82 | 103 | default: |
zhjcpi | 12:5fb829ce6b82 | 104 | break; |
zhjcpi | 12:5fb829ce6b82 | 105 | } |
zhjcpi | 12:5fb829ce6b82 | 106 | } |