/* * gps.h * * Created on: 2012-8-9 * Author: Administrator */ #ifndef GPS_UART_H_ #define GPS_UART_H_ #define GPS_LINE_LEN 256 //?車那?辰?DD那y?Y米?3∟?豕 #define GPS_UART_MAX_LEN 160 #if defined(ADD_ATGM366_GPS_FUN) || defined(DEV_GPS_ATGM366) || defined(DEV_GPS_ATGM332D) enum GpsCtrlCmdEnum_ { GPS_SET_BUADRATE0_CMD=0, GPS_SET_BUADRATE1_CMD, GPS_SET_BUADRATE2_CMD, GPS_SET_BUADRATE3_CMD, GPS_SET_BUADRATE4_CMD, GPS_SET_BUADRATE5_CMD, GPS_SEL_UPLOAD_RMC_CMD, GPS_SEL_NAVI_SYS_CMD, GPS_SEL_UPDATE_FREQ_CMD, GPS_SEL_FACTOR_SET_CMD, GPS_SEL_BD_SYS_CMD, GPS_SEL_GPS_SYS_CMD, }; typedef enum GpsCtrlCmdEnum_ GpsCtrlCmdEnumType; enum GpsModuleRunStep_ { GPS_MODULE_INIT_STEP=0, GPS_MODULE_BAUD_CHECK_STEP, GPS_MODULE_BAUD_SET_STEP, GPS_MODULE_BAUD_FINISH_STEP, GPS_MODULE_NEMA_SEL_STEP, GPS_MODULE_NAVI_SYS_STEP, GPS_MODULE_UPDATE_FREQ_STEP, GPS_MODULE_SYS_STEP, GPS_MODULE_NORMAL_RUN_STEP, }; typedef enum GpsModuleRunStep_ GpsModuleRunStepEnum; enum GpsRecvFrameStep_ { GPS_FRAME_HEAD=0, GPS_FRAME_DATA, GPS_FRAME_CHECK, GPS_FRAME_TAIL, }; #pragma pack(4) struct GpsNmeaDataType_ { bool VaildFlag; //那1車?㊣那?? unsigned char nmea[10]; }; typedef struct GpsNmeaDataType_ GpsNmeaDataType; #pragma pack() typedef struct { int id; //?角D?㊣角o? int ele; //???? int az; //﹞????? int cn0; //﹞????? int valid; }GPS_GSV_ST; #define GPS_NUM_MAX 128 struct GpsNmeaRmcDataType_ { char SingleType[6]; unsigned char UtcTime[11]; unsigned char DataValidFlag; char data_vaild; char slave_vaild; uint32_t data_vaild_time; uint32_t pluse_count; uint32_t gsv_time; char wait_sync; float Latitude; unsigned char LatitudeDir; float Longtitude; unsigned char LongtitudeDir; u32 Longtitude_dd; u32 Longtitude_mm; float Longtitude_ss; u32 Latitude_dd; u32 Latitude_mm; float Latitude_ss; float Spd; //??米??迄?豕 float cog; //??米???o??辰 unsigned char Date[7]; struct timespec ts; u64 MsOffset; int bd_sv_num; int bd_msg_num; int bd_msg_no; int gp_sv_num; int gp_msg_num; int gp_msg_no; uint32_t gps_soe_time; uint32_t bd_online_time[GPS_NUM_MAX]; uint32_t gp_online_time[GPS_NUM_MAX]; GPS_GSV_ST bd_gsv[GPS_NUM_MAX];//㊣㊣?﹞?角D?D?o? GPS_GSV_ST gp_gsv[GPS_NUM_MAX];//gps?角D?D?o? }; typedef struct GpsNmeaRmcDataType_ GpsNmeaRmcDataType; typedef struct gps_comm { u8 chnl; u8 type; BYTE cTypeCounter; //?車那邦??角角D赤 BYTE cRecvLenth; //?車那?那y?Y3∟?豕 unsigned char cRecvCnt; //?車那??? bool bData; //車D㊣“??那y?Y unsigned char *arrSendBuf; //﹞⊿?赤buf unsigned char arrRecvBuf[GPS_LINE_LEN]; //?車那?buf bool bRecv; bool bErrComm; DWORD dTwait; DWORD dTApp; GpsModuleRunStepEnum GpsModuleRunStep; uint32_t recv_wait_time; //3?那??‘赤那3谷o車米豕∩yx??∩|角赤那y?Y uint32_t recv_handle; } GPS_COMM; typedef struct { TIMERELAY time; u8 sync_flag; }GPS_SYNC_DELAY; extern GpsNmeaRmcDataType GpsNmeaRmcData; extern GPS_SYNC_DELAY gps_sync; extern union u_RsIEC g_tRsIEC[CFG_UART_NUM_MAX]; void GPSCommInit(GPS_COMM* p,u8 chnl); void ResetUartGPSLink(GPS_COMM* p); void GPS_Recv(GPS_COMM* p,BYTE byRevData); void GPS_Comm_App(GPS_COMM* p); void GPS_CommRecv(BYTE *ps); void GPS_test(void); void uart_gps_isr(void); extern int GpsRecvDataFrameHandler(GPS_COMM* data); extern void GpsSendBaudrateCmd(GPS_COMM* p); extern void GPS_Comm_Send(GPS_COMM* p,char* data,unsigned char datalen); extern void GpsModuleFunInit(GPS_COMM* data); extern int GpsAdjustTimeFun(struct rtc_time_t* psrtc); extern void GenerateSecdPluse(void); char gps_data_valid_get(void); void gps_info_printf(void); void gps_sync_delay(u32 dStep); int is_gps_alive(void); int gps_slave_sync(struct timespec* ts); void GPS_Timer(void); void gps_pluse_clear(void); void gps_init_step_set(u8 step); #endif #endif /* GPS_H_ */