GPS GMS-6 Module

Dependents:   RwSDCard_Xml_GPS

GPSGms6.h

Committer:
nsrwsurasak
Date:
2016-05-10
Revision:
0:7ef27b349b37
Child:
1:dceb4eaf697e

File content as of revision 0:7ef27b349b37:



#define HEADER_SIZE                 5
#define GPRMC_TIME_SIZE             10
#define GPRMC_STATUS_SIZE           1
#define GPRMC_LATITUDE_SIZE         9
#define GPRMC_LATITUDE_HEMI_SIZE    1
#define GPRMC_LONGITUDE_SIZE        10
#define GPRMC_LONGITUDE_HEMI_SIZE   1
#define GPRMC_SPEED_SIZE            5
#define GPRMC_COURSE_SIZE           5
#define GPRMC_DATE_SIZE             6
#define GPRMC_MAGNETIC_SIZE         5
#define GPRMC_MAGNETIC_DIR_SIZE     1
#define GPRMC_INDICATOR_SIZE        1

#define INVALID_VALUE               0xFFFF
#define RX_BUF_SIZE                 100

typedef struct {
    char header[HEADER_SIZE+1];
    char time[GPRMC_TIME_SIZE+1];
    char status[GPRMC_TIME_SIZE+1];
    char latitude[GPRMC_LATITUDE_SIZE+1];
    char latitude_hemi[GPRMC_LATITUDE_HEMI_SIZE+1];
    char longitude[GPRMC_LONGITUDE_SIZE+1];
    char longitude_hemi[GPRMC_LATITUDE_HEMI_SIZE+1];
    char speed[GPRMC_SPEED_SIZE+1];
    char course[GPRMC_COURSE_SIZE+1];
    char date[GPRMC_DATE_SIZE+1];
    char magnetic[GPRMC_MAGNETIC_SIZE+1];
    char magnetic_dir[GPRMC_MAGNETIC_DIR_SIZE+1];
    char indicator[GPRMC_INDICATOR_SIZE+1];
} GPRMC_Data_TypeDef;

typedef enum GPS_ProcessState {
    GPS_Process_Start = 0,
    GPS_Process_Header,
    GPS_Process_Time,
    GPS_Process_Status,
    GPS_Process_Latitude,
    GPS_Process_Latitude_hemis,
    GPS_Process_Longitude,
    GPS_Process_Longitude_hemis,
    GPS_Process_Speed,
    GPS_Process_Course,
    GPS_Process_Date,
    GPS_Process_Magnetic,
    GPS_Process_Magnetic_Dir,
    GPS_Process_Indicator,
    GPS_Process_Complete ,
    GPS_Process_SIZE
} GPS_ProcessState;

typedef enum GPS_ProcessStatus {
    GPS_Status_Valid,
    GPS_Status_Empty,
    GPS_Status_NotEnough,
} GPS_ProcessStatus;

typedef struct {
    GPS_ProcessState state;
    int              size;
    char *           p_val;
} GPRMC_Tbl_TypeDef;



class GPSGms6
{
public:

    GPSGms6();

    void start_GPS();
    tm UTCTime();
    /** Get Latest GPRMC Data
     *
     * @returns
     *   Latest GPRMC Data
     */
    GPRMC_Data_TypeDef latestGPRMC();

    /**  Get Valid Data Interval
     *
     * @returns
     * Valid Data Interval
     */
    GPRMC_Data_TypeDef validGPRMC();

    /**  Get availability of gprmc
     *
     * @returns
     * 'true' - if data is available
     */
    bool available();


private:
    // States



    //Member variables



    //void GPS_ProcessGpsData(char * buf, unsigned int size, char * t, char * d);
    //GPS_ProcessStatus GPS_ProcessGprmcSection(GPS_ProcessState state,char * buf , unsigned int buf_index,unsigned int buf_size, unsigned int section_size, char * ret_value);

};