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

Revision:
3:71690f7bb480
Parent:
2:d4fe184925f2
Child:
4:0d9b711fb646
--- a/CsrLocation.h	Wed Mar 26 09:16:55 2014 +0000
+++ b/CsrLocation.h	Wed May 21 08:55:55 2014 +0000
@@ -14,6 +14,31 @@
 #define CSR_RESULT_SUCCESS  ((CsrResult) 0x0000)
 #define CSR_RESULT_FAILURE  ((CsrResult) 0xFFFF)
 
+#ifdef TARGET_LPC1768
+#define PINMAP_UART_DEBUG_TX        USBTX
+#define PINMAP_UART_DEBUG_RX        USBRX
+#define PINMAP_UART_LOC_TX          D8
+#define PINMAP_UART_LOC_RX          D9
+#define PINMAP_GPIO_LOC_ONOFF       D11
+#define PINMAP_GPIO_LOC_RESET       D12
+#define LOC_LED1                    LED1
+#define LOC_LED2                    LED2
+#define DBG_SERIAL_TYPE             RawSerial
+#define LOC_SERIAL_TYPE             RawSerial
+#elif defined(TARGET_LPC1549) || defined(TARGET_NUCLEO_F103RB)
+#define PINMAP_UART_DEBUG_TX        D1
+#define PINMAP_UART_DEBUG_RX        D0
+#define PINMAP_UART_LOC_TX          D8
+#define PINMAP_UART_LOC_RX          D2
+#define PINMAP_GPIO_LOC_ONOFF       D3
+#define PINMAP_GPIO_LOC_RESET       D4
+#define LOC_LED1                    LED1
+#define LOC_LED2                    LED2
+#define DBG_SERIAL_TYPE             Serial
+#define LOC_SERIAL_TYPE             RawSerial
+#endif
+
+
 /* OSP protocol related definitions */
 #define MAX_VERSION_LENGTH 80
 
@@ -86,6 +111,9 @@
 /* Indicates the outputted sv status information */
 #define LOC_OUTPUT_SV_STATUS            (2)
 
+#if 0
+#define CSR_LOG_INFO    printf
+#else
 #define CSR_LOG_INFO(...) \
 {\
     if(csrLocInst.pSerialDebug != NULL)\
@@ -93,6 +121,7 @@
         (csrLocInst.pSerialDebug->printf(__VA_ARGS__));\
     }\
 }
+#endif
 
 /** Location enent definitions */
 typedef enum
@@ -112,6 +141,15 @@
     PWR_PTF,
 }ePowerMode;
 
+/** Power mode selection */
+typedef enum
+{
+    /** NMEA protocol */
+    PROTO_NMEA,
+    /** OSP protocol */
+    PROTO_OSP,
+}eProto;
+
 /* Protocol detection state */
 typedef enum
 {
@@ -139,8 +177,10 @@
    PROTO_STATE_DET_INVALID = 0,
    PROTO_STATE_DET_OSP,
    PROTO_STATE_DET_NMEA,
-   PROTO_STATE_SWI_OSP_FROM_NMEA,
+//   PROTO_STATE_SWI_OSP_FROM_NMEA,
    PROTO_STATE_DET_OSP_FROM_NMEA,
+//   PROTO_STATE_SWI_NMEA_FROM_OSP,
+   PROTO_STATE_DET_NMEA_FROM_OSP,
    PROTO_STATE_DET_OK,
 }eProtoState;
 
@@ -161,16 +201,26 @@
     SEND_DATA_TYPE_OSP_LPM_REQ,
     SEND_DATA_TYPE_OSP_FPM_REQ,
     SEND_DATA_TYPE_OSP_SWITCH2NMEA_REQ,
-    SEND_DATA_TYPE_NMEA_SWITCH2OSP_REQ
+    SEND_DATA_TYPE_NMEA_SWITCH2OSP_REQ,
+    SEND_DATA_TYPE_NMEA_STOP_REQ
 }eSendDataType;
 
-/** Structure to hold Position Response Message Information. */
-typedef struct LocPosResp
+typedef struct GpsTime
 {
     /** Week part of GPS time */
     uint16_t            gps_week;
     /** Time of second part of GPS time */
     uint32_t            tow;
+}tGpsTime;
+
+/** Structure to hold Position Response Message Information. */
+typedef struct LocPosResp
+{
+    union
+    {
+        tGpsTime      gpsTime;
+        float         utcTime;
+    }u;
     /** Latitude */
     double            lat;
     /** Longitude */
@@ -256,9 +306,9 @@
 typedef struct CsrLocConfig
 {
     /** Debug serial port to print debug information */
-    RawSerial       *pSerialDebug;
+    DBG_SERIAL_TYPE *pSerialDebug;
     /** location serail port to communicate between mbed host side and location chip */
-    RawSerial       *pSerialLoc;
+    LOC_SERIAL_TYPE *pSerialLoc;
     /** GPIO pin to control location chip on, a rising edge is uset to activate location chip. Please note, before activate chip, reset pin should be pull high */
     DigitalOut      *pPinOnoff;
     /** GPIO pin to control location chip reset, low level will keep location chip in hibernation state and high level will permit location chip to be activated */
@@ -280,6 +330,7 @@
     bool            bPwrModeRsp;
     bool            bVerRsp;
 
+    eProto          proto;
     eCsrLocState    locState;
     eProtoState     protoState;
     ePowerMode      pwrMode;
@@ -295,8 +346,8 @@
 
     tLocSvStatus    svStatus;   /* 2 kind of messages contribute the svStaus */
 
-    RawSerial       *pSerialDebug;
-    RawSerial       *pSerialLoc;
+    DBG_SERIAL_TYPE *pSerialDebug;
+    LOC_SERIAL_TYPE *pSerialLoc;
     DigitalOut      *pPinOnoff;
     DigitalOut      *pPinReset;
 
@@ -336,7 +387,7 @@
     void CsrLocReset(void);
 
     /** Start location request, activate location chip */
-    void CsrLocStart(ePowerMode pwrMode);
+    void CsrLocStart(ePowerMode pwrMode, eProto proto);
 
     /** Process location data from chip and update location and satellite information */
     void CsrLocUpdate(void);
@@ -364,15 +415,21 @@
     /* Process the raw stream from location seraial port */
     void _CsrLocProcessRawStream(void);
 
-    /* Detect the OSP protocol outputted from location serial port */
-    void _CsrLocDetProtoOsp(uint8_t data);
+    /* Detect the OSP protocol detection timeout */
+    void _CsrLocDetProtoOspTimeout(void);
 
     /* Detect the NMEA protocol outputted from location serial port */
-    void _CsrLocDetProtoNmea(uint8_t data);
+    void _CsrLocDetProtoNmeaTimeout(void);
+
+    /* Process the raw NMEA stream, remove the NMEA header, tail, and save the NMEA data into interal buffer */
+    void _CsrLocProcessRawNmeaStream(uint8_t data);
 
     /* Process the raw OSP stream, remove the OSP header, size, check sum, and save the OSP data into interal buffer */
     void _CsrLocProcessRawOspStream(uint8_t data);
 
+    /* Process the saved nmea data and decode them */
+    void _CsrLocProcessRawNmeaPkt(void);
+
     /* Process the saved OSP data and decode them */
     void _CsrLocProcessRawOspPkt(void);
 
@@ -404,3 +461,4 @@
 
 
 #endif /* CSRLOCATION_H */
+