⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.h

📁 根据GPS官方网站提供的gps定位方法而编写的C语言gps定位代码
💻 H
字号:
#define CURRENT_CHANNEL_ASSIGNMENT_DATA_REQUEST 	( (unsigned char)  6 )#define NAVIGATION_DATA_REQUEST_USER_COORDINATES 	( (unsigned char) ( 20  ) )#define NAVIGATION_DATA_REQUEST_GPS_COORDINATES		( (unsigned char) ( 21  ) )#define EPHEMERIS_REQUEST				( (unsigned char) ( 22  ) )#define MEASUREMENT_BLOCK_DATA_REQUEST			( (unsigned char) ( 23  ) )#define SATELLITE_VISIBILITY_DATA_AND_STATUS_REQUEST	( (unsigned char) ( 33  ) )#define DGPS_CONFIGURATION_REQUEST			( (unsigned char) ( 43  ) )#define SOFTWARE_IDENTIFICATION_INFORMATION_REQUEST	( (unsigned char) ( 45  ) )#define DIFFERENTIAL_MESSAGE_STATUS_REQUEST		( (unsigned char) ( 48  ) )#define INITIATE_LINK					( (unsigned char) 63 )#define SET_OPERATING_MODE				( (unsigned char) 80 )#define SET_GPS_CONFIGURATION				( (unsigned char) 83 )#define SELECT_DEFINE_DATUM				( (unsigned char) 88 )#define SET_DIFFERENTIAL_MESSAGE_CONFIGURATION		( (unsigned char) 91 )#define ERASE_MEMORY					( (unsigned char) 99 )#define CONFIGURE_MAIN_PORT_MODE			( (unsigned char) 110 )#define TEN_HERTZ	3#define FIVE_HERTZ	2#define TWO_HERTZ	1#define ONE_HERTZ	0#define GET_CHANNEL_ASSIGNMENT	REQUEST0(CURRENT_CHANNEL_ASSIGNMENT_DATA_REQUEST)#define GET_USER_NAVIGATION	REQUEST0(NAVIGATION_DATA_REQUEST_USER_COORDINATES)#define GET_GPS_NAVIGATION	REQUEST0(NAVIGATION_DATA_REQUEST_GPS_COORDINATES )#define GET_EPHEMERIS		REQUEST0(EPHEMERIS_REQUEST )/*#define GET_BLOCK_DATA		REQUEST1(MEASUREMENT_BLOCK_DATA_REQUEST,TEN_HERTZ)*/#define GET_BLOCK_DATA		REQUEST1(MEASUREMENT_BLOCK_DATA_REQUEST,ONE_HERTZ)#define GET_VISIBILITY_DATA	REQUEST0(SATELLITE_VISIBILITY_DATA_AND_STATUS_REQUEST)#define GET_GPS_CONFIGURATION	REQUEST0(DGPS_CONFIGURATION_REQUEST)#define GET_SOFTWARE_IDENTIFICATION REQUEST0(SOFTWARE_IDENTIFICATION_INFORMATION_REQUEST)#define GET_DIFFERENTIAL_MESSAGE_STATUS REQUEST0(DIFFERENTIAL_MESSAGE_STATUS_REQUEST)#define SET_GPS_CONFIG		set_dgps_configuration(fd)#define SET_DATUM		select_define_datum( fd, (unsigned char) datum )#define CURRENT_CHANNEL_ASSIGNMENT_DATA_1_6		( (unsigned char)  6   )#define CURRENT_CHANNEL_ASSIGNMENT_DATA_7_12		( (unsigned char)  7   )#define NAVIGATION_DATA_USER_COORDINATES 		( (unsigned char)  20  )#define NAVIGATION_DATA_GPS_COORDINATES			( (unsigned char)  21  )#define EPHEMERIS_DATA					( (unsigned char)  22 )#define MEASUREMENT_BLOCK_DATA				( (unsigned char)  23 )#define SATELLITE_VISIBILITY_DATA_AND_STATUS		( (unsigned char)  33 )#define DGPS_CONFIGURATION				( (unsigned char)  43 )#define SOFTWARE_IDENTIFICATION_INFORMATION		( (unsigned char)  45 )#define DIFFERENTIAL_MESSAGE_STATUS			( (unsigned char)  48 )#define ACKNOWLEDGE_MESSAGE				( (unsigned char) 126 )#define REQUEST0(R)	simple_request(fd, &mb, R)#define REQUEST1(R,H)	simple_request1(fd, &mb, R, H)typedef unsigned short CHECKSUM_TYPE;typedef struct{	int  port;	unsigned char header_buf[4];	int  SOH;	int  ID;		/* only seven bits */	int  MSB_ID;	int  Cmpl_ID;	int  Msg_Data_Length;	unsigned char Data[128];	int CheckSum;} MessageBlock;typedef struct {   unsigned char SOH;   unsigned char Id;   unsigned char NId;   unsigned char Seq;   } HEADER_TYPE;typedef struct {   unsigned char  SV;   unsigned char  Bytes[72];   } RAW_EPHEM_TYPE;typedef struct {   unsigned long Word3;   unsigned long Word4;   unsigned long Word5;   unsigned long Word6;   unsigned long Word7;   unsigned long Word8;   unsigned long Word9;   unsigned long Word10;   } SUBFRAME_ARRAY_TYPE;typedef struct {   double        X;   double        Y;   double        Z;   } SV_XYZ_POS_TYPE;typedef struct {   unsigned char  Hours;	/* 1	1	*/				/* bit 5 = 1 = True : Time not corrected by UTC parameters */				/* bits 6-7         : reserved				   */   unsigned char  Minutes;	/* 1	2	*/   double         Seconds;	/* 8	10	*/   unsigned char  Day;		/* 1	11	*/				/* bits 5-7	    : reserved */   unsigned char  Month;	/* 1	12	*/   unsigned short Year;		/* 2	14	*/   double         Latitude;	/* 8	22	*/				/* -PI/2 -> PI/2 */   double         Longitude;	/* 8	30	*/				/* -PI -> PI */   float          Altitude;	/* 4	34	*/   float          Speed;	/* 4	38	*/ 				/* Ground Speed in m/s */   float          Angle;	/* 4	42	*/				/* Track Angle  -PI -> PI */   float          N_Vel;	/* 4	46	*/				/* m/s 		*/   float          E_Vel;	/* 4	50	*/				/* m/s 		*/   float          V_Vel;	/* 4	54	*/				/* m/s 		*/   float          HFOM;		/* 4	58	*/   float          VFOM;		/* 4	62	*/   unsigned short HDOP;		/* 2	64	resolution 0.1 units */   unsigned short VDOP;		/* 2	66	resolution 0.1 units */   unsigned char  Nav_Mode;	/* 1	67	*/				/* bits 0-> 4 NAV mode						0 - Init requited						1 - Initialised						2 - Nav 3-D						3 - Alt. Hold (2-D)						4 - Diff 3-D						5 - Diff 3-D						6 - Dead Reckoning				   bit  5   solution confidence level						0 - Normal ( <  5 SVs)						1 - High   ( >= 5 SVs)				   bit 6  	reserved						   bit 7	GPS Time Alignent Mode						1 - Enable						0 - Disable				*/   unsigned char  Nb_SV;	/* 1	68	*/				/* bits 0 -> 3	 - no of SVs for solution */				/* bits 4 -> 7 coordinate system - lowest nibble */   unsigned char  Sys_Mode;	/* 1	69	*/				/* bits 4 -> 5  oordinate system - highest nibble */				/* bit 7 : reserved */				/* DATA = B69 b5, b4, B68 b7,b6,b5,b4 */    unsigned char  Reserved1;	/* 1	70	*/   unsigned char  Reserved2;	/* 1	71	*/   } NAV_USER_TYPE;typedef struct {   double         GPS_Time_Sec;		/* 8 	0->7	*/   unsigned short Week;			/* 2 	8->9	*/   double         X_Pos;		/* 8 	10->17	*/   double         Y_Pos;		/* 8 	18->25	*/   double         Z_Pos;		/* 8 	26->33	*/   float          X_Vel;		/* 4 	34->37	*/   float          Y_Vel;		/* 4 	38->41	*/   float          Z_Vel;		/* 4 	42->45	*/   double         Clock_Bias;		/* 8 	46->53	*/   double         Clock_Drift;		/* 8 	54	*/   float          HFOM;			/* 4 	62	*/   float          VFOM;			/* 4 	66	*/   unsigned short HDOP;			/* 2 	70	*/   unsigned short VDOP;			/* 2 	72	*/   unsigned char  Nav_Mode;		/* 1 	74	*/   unsigned char  Nb_SV;		/* 1 	75	*/   unsigned char  Resv1;		/* 1 	76	*/   unsigned char  Resv2;		/* 1 	77	*/   unsigned char  Resv3;		/* 1 	78	*/   CHECKSUM_TYPE Checksum;		/* 2 	79	*/   } NAV_GPS_TYPE;typedef struct {   unsigned char SV;			/* 0 	1 */   unsigned long Carrier_DCO;		/* 1 	4 */   float         C_No;			/* 5 	4 */   float         Reserved;		/* 9 	4 */   unsigned char Status;		/* 13 	1 */   } CHAN_ASSIGN_TYPE;typedef struct {   unsigned char    Set;		/* 0 	1 		*/   CHAN_ASSIGN_TYPE Chan[6];   		/* 1 	84 = 6 * 14	*/   CHECKSUM_TYPE    Checksum;		/* 85   2 		*/    } CHANS_ASSIGN_TYPE;typedef struct {   unsigned char SV;			/* 0	1 */   unsigned char SNR;			/* 1	1 */   unsigned long Code_Phase;		/* 2	4 */   unsigned long ICP;			/* 6	4 */   unsigned char Locktime;		/* 10	1 */   } FAST_MEAS_BLOCK_TYPE;	typedef struct {   int 			 port;   signed char           Reserved1;	/* 0	1 */   signed char           Reserved2;	/* 1	1 */   unsigned char         Nb_Blocks;	/* 2	1 */   double                GPS_Time;	/* 3	8 */   FAST_MEAS_BLOCK_TYPE Block[12];	/* 11	(12 * 11) */   CHECKSUM_TYPE         Checksum;	/* 143	2 */   } FAST_MEAS_BLOCKS_TYPE;typedef struct {   unsigned char String[80];   CHECKSUM_TYPE Checksum;   } ERROR_LOG_TYPE;typedef struct {	unsigned char SV_Num;	/* 	0	1 */	char Elevation;		/* 	1	1               -90 -> 90*/	short int Azimuth;	/* 	2	2 		  0 -> 360								bits 9->15 reserved */	char SNR;		/* 	4	1 		 0 -> 90 */		} Visibility_Datum;typedef struct {	unsigned char N_SV;	/* 	0	1	*/	Visibility_Datum vd[12];	/*	1	12 * 5  - listed in decreasing elevation order */ } Visibility_Data;typedef struct{		unsigned char status;			/*	0	1								BIT 0 - ENABLE								BIT 1-3 SHOULD BE 1								bit 4-6 should be 0								bit 7   port 0 = main, 1 =dedicated */		unsigned char Differential_Coast_Time;	/*	1	1 */		unsigned char Reserved;			/*	2	1 */		unsigned char Baud_Rate;		/*	3	1 */		unsigned char Msg_Req_ReTrans[8];	/*	4	8 */		unsigned char Byte;			/*	12	1 */		unsigned char Reserved8[8];		/*	13	8 */		} DGPS_Conf_Data;typedef struct{	char operational_sw_part_number[14];		/* 0	14	*/	char reserved_string[18];			/* 14	18	*/	char boot_sw_part_number[14];			/* 32	14	*/	char reserved40[40];				/* 46	40	*/	int boot_checksum;				/* 86	4	*/	int operational_checksum;			/* 90	4	*/	char reserved;					/* 94	1	*/} SW_Ident_Data;typedef struct{	unsigned char station_id_lo;			/* 0  1 */	unsigned char station_id_hi;			/* 1  1 */	unsigned char message_no_received[8];		/* 2  8 */	short int ValidWordCount;			/* 10 2 */	short int ParityErrorCount;			/* 12 2 */	char  Reserved6[6];				/* 14 6 */	short int ZCount;				/* 20 2 */	short int Reserved;				/* 22 2 */	short int checksum;				/* 24 2 */} Diff_Mesg_Data;#define SELECT_DATUM				((unsigned char) 0 )#define DEFINE_USER_DEFINED__DATUM		((unsigned char) 1 )#define SELECT_AND_DEFINE_USER_DEFINED_DATUM	((unsigned char) 2 )typedef struct{	unsigned char function;			/* 0  1 */	unsigned char datum_number;		/* 1  1 */	short int dx;				/* 2  2 */	short int dy;				/* 4  2 */	short int dz;				/* 6  2 */	double a;				/* 8  8 */						/* 8 bytes missing here */	unsigned char Reserved[8];		/* 24 8 */} Datum_Data;/*--------------------------------------------------------------------------Data use to compute satellite position and velocity---------------------------------------------------------------------------*//* -- Factors of the series expansion of the true anomaly V.                */typedef enum {   NO_DATA=0,   ALMANAC=1,   EPHEMERID=2   } SV_DATA_SOURCE_TYPE;typedef struct {   double                Root_A;   double		 del_N;	/* extended by David to carry raw ephemeris */   double                N;   double                C0;   double		 W;	/* extended by David to carry raw ephemeris */   double                Sin_W;    double                Cos_W;    double                I_Dot;   double                Omega_Dot;   double                Crc;   double                I_0;   double                Cis;   double                Omega_0;   double                Cic;   double                Toe;   double                Cus;   double                E;   double                Cuc;   double                M0;   double                Crs;   unsigned char         Curve_Interval;   SV_DATA_SOURCE_TYPE   SV_Data_Source;   unsigned long         IODE;   unsigned char         Valid_Ephem_Decoded;   } ORBIT_PARAMETERS_TYPE;typedef struct {   double Af0;   double Af1;   double Af2;   double Toc;   double Tgd;   } CLOCK_PARAMETERS_TYPE;extern int got_block_data[40];extern int got_ephemeris_data[40];extern char * nav_mode_names[32];extern char * system_mode_names[16];extern char * tracking_state_name[4];extern char * allocation_state_name[4];extern char * carrier_phase_staus_name[4];extern char * sv_status_name[4];extern char *  dgps_status_name[8];extern int messages_back[];extern unsigned char Ephem_Avaliable[];void Get_Visibility(MessageBlock * mb);void Get_GPS_Configuration(MessageBlock * mb);void select_define_datum(int fd, unsigned char datum);void configure_main_port(int fd,int datum);void set_operating_mode(int fd, int datum, double hours);/*	51 degrees 52' 22.1" N          0 degrees 57' 10.0" E*/ #define MY_LAT	( 51.0 + (52.0 / 60.0) + (22.1/3600.0) )#define MY_LON  (  0.0 + (57.0 / 60.0) + (10.0/3600.0) )#define MY_ALT  40.0#define REFERENCE_PORT	0#define MOBILE_PORT	1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -