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:
2:d4fe184925f2
Parent:
1:bbaf9b8d646a
Child:
3:71690f7bb480
--- a/CsrLocation.h	Tue Mar 25 05:26:26 2014 +0000
+++ b/CsrLocation.h	Wed Mar 26 09:16:55 2014 +0000
@@ -10,47 +10,9 @@
 
 #define CSR_LOC_SDK_VER                 "CSR-LOC-SDK-0.5"
 
-/* Data type definitions */
-#undef  FALSE
-#define FALSE (0)
-
-#undef  TRUE
-#define TRUE (1)
-
-/* Unsigned fixed width types */
-typedef unsigned char CsrUint8;
-typedef unsigned short CsrUint16;
-typedef unsigned int CsrUint32;
-
-/* Signed fixed width types */
-typedef signed char CsrInt8;
-typedef signed short CsrInt16;
-typedef signed int CsrInt32;
-
-/* Boolean */
-typedef CsrUint8 CsrBool;
-
-/* String types */
-typedef char CsrCharString;
-typedef CsrUint8 CsrUtf8String;
-typedef CsrUint16 CsrUtf16String;   /* 16-bit UTF16 strings */
-typedef CsrUint32 CsrUint24;
-
-/*
- * Floating point
- *
- * Note: If a given compiler does not support floating point, it is
- * OK to omit these definitions;  alternative versions of the code using
- * these types may be available.  Consult the relevant documentation
- * or the customer support group for information on this.
- */
-typedef float CsrFloat;
-typedef double CsrDouble;
-
-typedef CsrUint16 CsrResult;
+typedef uint16_t CsrResult;
 #define CSR_RESULT_SUCCESS  ((CsrResult) 0x0000)
 #define CSR_RESULT_FAILURE  ((CsrResult) 0xFFFF)
-/* The end of data type definitions */
 
 /* OSP protocol related definitions */
 #define MAX_VERSION_LENGTH 80
@@ -68,21 +30,21 @@
 /* NMEA message footer */
 #define NMEA_MSG_TAIL0                  ('*')
 
-#define CSR_SWAPIN16(bytestream) (((CsrUint16)*((bytestream)+0) << 8) | ((CsrUint16)*((bytestream)+1)))
+#define CSR_SWAPIN16(bytestream) (((uint16_t)*((bytestream)+0) << 8) | ((uint16_t)*((bytestream)+1)))
 
 #define CSR_SWAPIN32(bytestream)\
-   ( ((CsrUint32)*((bytestream)+0) << 24)\
-   | ((CsrUint32)*((bytestream)+1) << 16)\
-   | ((CsrUint32)*((bytestream)+2) <<  8)\
-   | ((CsrUint32)*((bytestream)+3)      ))
+   ( ((uint32_t)*((bytestream)+0) << 24)\
+   | ((uint32_t)*((bytestream)+1) << 16)\
+   | ((uint32_t)*((bytestream)+2) <<  8)\
+   | ((uint32_t)*((bytestream)+3)      ))
 
 
 /* import macros for little endian: */
 /* NOTE: must use {} around these macros when calling in a loop */
 #define BINARY_IMPORT_UINT8(bytestream) (                      *((bytestream)++))
-#define BINARY_IMPORT_UINT16(bytestream) ((CsrUint16) CSR_SWAPIN16((bytestream))); bytestream+=2
-#define BINARY_IMPORT_UINT32(bytestream) ((CsrUint32) CSR_SWAPIN32((bytestream))); bytestream+=4
-#define BINARY_IMPORT_SINT32(bytestream) ((CsrInt32)  CSR_SWAPIN32((bytestream))); bytestream+=4
+#define BINARY_IMPORT_UINT16(bytestream) ((uint16_t) CSR_SWAPIN16((bytestream))); bytestream+=2
+#define BINARY_IMPORT_UINT32(bytestream) ((uint32_t) CSR_SWAPIN32((bytestream))); bytestream+=4
+#define BINARY_IMPORT_SINT32(bytestream) ((int32_t)  CSR_SWAPIN32((bytestream))); bytestream+=4
 
 
 #define OSP_MAKE_MSG_ID(mid, sid) ((((mid) & 0xFF) << 8) | ((sid) & 0xFF))
@@ -206,87 +168,87 @@
 typedef struct LocPosResp
 {
     /** Week part of GPS time */
-    CsrUint16            gps_week;
+    uint16_t            gps_week;
     /** Time of second part of GPS time */
-    CsrUint32            tow;
+    uint32_t            tow;
     /** Latitude */
-    CsrDouble            lat;
+    double            lat;
     /** Longitude */
-    CsrDouble            lon;
+    double            lon;
     /** Altitude */
-    CsrDouble            alt;
+    double            alt;
 } tLocPosResp;
 
 /** Structure to hold Satellite Information. */
 typedef struct LocSvInfo
 {
     /** Prn or svId */
-    CsrUint8             prn;
+    uint8_t             prn;
     /** The ratio of carrier and noise */
-    CsrFloat             cno;
+    float             cno;
     /** elevation */
-    CsrFloat             elevation;
+    float             elevation;
     /** azimuth */
-    CsrFloat             azimuth;
+    float             azimuth;
     /** satellite state */
-    CsrUint16            state;
+    uint16_t            state;
 } tLocSvInfo;
 
 /** Structure to hold Satellite Information for GLONASS */
 typedef struct LocGloSvInfo
 {
     /** Prn or svId */
-    CsrUint8             prn;
+    uint8_t             prn;
     /** Slot number */
-    CsrUint8             sno;
+    uint8_t             sno;
     /** The ratio of carrier and noise */
-    CsrFloat             cno;
+    float             cno;
     /** elevation */
-    CsrFloat             elevation;
+    float             elevation;
     /** azimuth */
-    CsrFloat             azimuth;
+    float             azimuth;
     /** satellite state */
-    CsrUint16            state;
+    uint16_t            state;
 } tLocGloSvInfo;
 
 /** Structure to hold Satellite Status Information. */
 typedef struct LocSvStatus
 {
     /** Week part of GPS time */
-    CsrUint16           gps_week;
+    uint16_t           gps_week;
     /** Time of second part of GPS time */
-    CsrUint32           tow;
+    uint32_t           tow;
     /** Time of millisecond part of GPS time */
-    CsrUint32           tow_sub_ms;
+    uint32_t           tow_sub_ms;
    
     /**Number of GPS SVs currently visible **/
-    CsrUint8            numOfSVs;
+    uint8_t            numOfSVs;
     /**Number of GLONASS SVs currently visible **/
-    CsrUint8            numOfGloSVs;
+    uint8_t            numOfGloSVs;
     /** GPS SVs information */
     tLocSvInfo          svList[LOC_MAX_GNSS_SVS];
     /** GLONASS SVs information */
     tLocGloSvInfo       gloSvList[LOC_NUM_OF_GLO_FREQ_CHANNELS];
     /** Bit mask indicating which SVs have ephemeris data **/
-    CsrUint32           ephemerisMask;
+    uint32_t           ephemerisMask;
     /** Bit mask indicating which GLONASS SVs have ephemeris data **/
-    CsrUint32           gloEphemerisMask;
+    uint32_t           gloEphemerisMask;
     /** Bit mask indicating which SVs were used in latest sent fix **/
-    CsrUint32           svUsedInFixMask;
+    uint32_t           svUsedInFixMask;
     /** Bit mask indicating which GLONASS SVs were used in latest sent fix **/
-    CsrUint32           gloSvUsedInFixMask;
+    uint32_t           gloSvUsedInFixMask;
     /** Bit mask indicating which QZSS SVs were used in latest sent fix **/   
-    CsrUint32           qzssSvUsedInFixMask;
+    uint32_t           qzssSvUsedInFixMask;
     /** Bit mask indicating which SBAS SVs were used in latest sent fix **/   
-    CsrUint32           sbasSvUsedInFixMask;
+    uint32_t           sbasSvUsedInFixMask;
 } tLocSvStatus;
 
 
 /** Applicaiton register this out callback function and CsrLocaiton class will pass outputted information to application */
-typedef void (*csr_app_output_callback)(CsrUint32  msgId, void * const pMsgData, CsrUint32 msgLength);
+typedef void (*csr_app_output_callback)(uint32_t  msgId, void * const pMsgData, uint32_t msgLength);
 
 /** Applicaiton register this event callback function and CsrLocaiton class will pass internal porcessing event to application */
-typedef void (*csr_app_event_callback)(eCsrLocEventType event, CsrUint32 data);
+typedef void (*csr_app_event_callback)(eCsrLocEventType event, uint32_t data);
 
 /** tCsrLocConfig structure
  * Application needs to decides and pass the configuration into CsrLocation class.
@@ -294,7 +256,7 @@
 typedef struct CsrLocConfig
 {
     /** Debug serial port to print debug information */
-    Serial          *pSerialDebug;
+    RawSerial       *pSerialDebug;
     /** location serail port to communicate between mbed host side and location chip */
     RawSerial       *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 */
@@ -306,42 +268,42 @@
 /* General OSP mesasge format */
 typedef struct OspMsg
 {
-   CsrUint32        msgId;   
-   CsrUint32        length;
-   CsrUint8         payload[4];
+   uint32_t        msgId;   
+   uint32_t        length;
+   uint8_t         payload[4];
 } tOspMsg;
 
 /* keep the internal data of CsrLocation class */
 typedef struct CsrLocInst
 {
-    CsrBool         bStopFlag;
-    CsrBool         bPwrModeRsp;
-    CsrBool         bVerRsp;
+    bool            bStopFlag;
+    bool            bPwrModeRsp;
+    bool            bVerRsp;
 
     eCsrLocState    locState;
     eProtoState     protoState;
     ePowerMode      pwrMode;
-    CsrUint32       baudRate;
-    CsrInt32        computedCheckSum;
-    CsrInt32        checksum;
-    CsrInt32        msgSize;
-    CsrInt32        decodeIndex;
+    uint32_t        baudRate;
+    int32_t         computedCheckSum;
+    int32_t         checksum;
+    int32_t         msgSize;
+    int32_t         decodeIndex;
     eProtoDetState  protoDetState;
     Timeout         *pTimeoutChk;    /* timeout process */
-    CsrBool         bTimeoutFlag;
+    bool            bTimeoutFlag;
     eEngineStatus   engStatus;
 
     tLocSvStatus    svStatus;   /* 2 kind of messages contribute the svStaus */
 
-    Serial          *pSerialDebug;
+    RawSerial       *pSerialDebug;
     RawSerial       *pSerialLoc;
     DigitalOut      *pPinOnoff;
     DigitalOut      *pPinReset;
 
-    CsrUint8        serialBuf[MAX_SERIAL_BUF_LEN]; /* buffer the serial data from uart callback function */
-    CsrUint8        serialPkt[MAX_SERIAL_PKT_LEN]; /* decoded osp data */
-    CsrUint32       in;
-    CsrUint32       out;
+    uint8_t         serialBuf[MAX_SERIAL_BUF_LEN]; /* buffer the serial data from uart callback function */
+    uint8_t         serialPkt[MAX_SERIAL_PKT_LEN]; /* decoded osp data */
+    uint32_t        in;
+    uint32_t        out;
     
     csr_app_output_callback appOutCb;
     csr_app_event_callback  appEventCb;
@@ -403,22 +365,22 @@
     void _CsrLocProcessRawStream(void);
 
     /* Detect the OSP protocol outputted from location serial port */
-    void _CsrLocDetProtoOsp(CsrUint8 data);
+    void _CsrLocDetProtoOsp(uint8_t data);
 
     /* Detect the NMEA protocol outputted from location serial port */
-    void _CsrLocDetProtoNmea(CsrUint8 data);
+    void _CsrLocDetProtoNmea(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(CsrUint8 data);
+    void _CsrLocProcessRawOspStream(uint8_t data);
 
     /* Process the saved OSP data and decode them */
     void _CsrLocProcessRawOspPkt(void);
 
     /* Calculate the OSP message size to allcate buffer to save the decoded OSP data */
-    CsrUint32 _CsrLocCalcMsgSize(void);
+    uint32_t _CsrLocCalcMsgSize(void);
 
     /* Decode OSP data into pakcet data structure */
-    CsrResult _CsrLocDecodeOspPkt( CsrUint8 *payload, CsrUint32 payload_length, CsrUint32 *message_id, void   *message_structure, CsrUint32 *message_length);
+    CsrResult _CsrLocDecodeOspPkt( uint8_t *payload, uint32_t payload_length, uint32_t *message_id, void   *message_structure, uint32_t *message_length);
 
     /* Process the decode OSP packet and pass to application when needed */
     void _CsrLocProcessOspPkt(tOspMsg *pOspMsg);