/*------------------------------------------------------------ // Copyright (c) 2022 SmartLogic. // ALL RIGHTS RESERVED // ----------------------------------------------------------------- // Filename : stc_drv.c // Author : weihua.li // Created On : 2022-11-23 // Last Modified : // ----------------------------------------------------------------- // Description: // // // ----------------------------------------------------------------*/ #ifndef __LC98S_DRV_H__ #define __LC98S_DRV_H__ #define NUMCHN 20 #define GPS_TX_BUF_SIZE 256 #define GPS_RX_BUF_SIZE 1024 #define GPS_SEM_NUM 13 #define HALF_BUFSIZE 511 #define MY_IPCKEY 0x10005500 #define MIN(x,y) ((x)<(y)?(x):(y)) #define MAX(x,y) ((x)>(y)?(x):(y)) #define GPS_SECONDS(tow,wnum) (604800*(wnum) + (tow)) #define MOD_2N(x,y) ((x) & (y-1)) #define GPS_FIX_OK 0x03 #define NAV_ALMANACH 0x04 /* arg for semctl system calls. */ union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ unsigned short *array; /* array for GETALL & SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; typedef struct { int32_t latitude; /*degree 1e-7*/ int32_t longitude;/*degree 1e-7*/ int32_t altitude; /*millimeter*/ uint8_t gps_fix; uint8_t fix_flag; uint32_t time_of_week; uint8_t valid_flag; int8_t leap_sec; uint16_t week_number; uint8_t num_ch; int16_t cab_dly; /*cable delay time,uint:ns*/ uint32_t pulse_width; /*Length of time pulse*/ int8_t pps_status; /*PPS: >0,postive; =0,no;<0, negative*/ uint8_t ant_state; uint8_t sw_version[30]; uint8_t hw_version[10]; uint8_t sta_id[NUMCHN]; /*satellite ID*/ uint8_t cno[NUMCHN]; /*Carrier to Noise Ratio (Signal Strength)*/ uint8_t tracking_num; uint8_t visable_num; uint8_t sig_over_high; uint8_t lock_state; /*1: gps lock 0: gps unlock*/ }drv_gps_msg_s; /********************************************************************/ typedef struct { uint8_t recv_buf[GPS_RX_BUF_SIZE]; /*union { uint32_t whole; struct { uint16_t recv_ptr; //接收指针 uint16_t deal_ptr; //处理指针 } }*/ uint16_t recv_ptr; /*接收指针*/ uint16_t deal_ptr; /*处理指针*/ uint16_t recv_cnt; /*最新接收到的消息长?*/ uint16_t deal_cnt; /*未处理消息长?*/ int32_t send_sem; uint8_t *send_buf_ptr; uint16_t send_cnt; /*待发送消息长?*/ uint16_t frame_flag; //帧头 }gps_uart_s; typedef struct { int32_t latitude; //纬度 单位:度/1e-7 int32_t longitude; //经度 单位:度/1e-7 int32_t altitude; //高度 单位:毫? }location_info_s; typedef struct { uint8_t lock_flag; /* GPS Fixed ok */ uint8_t leap_valid; /* leap second valid */ uint8_t view_sats; /* Satellites in view */ uint8_t track_sats; /* Satellites under tracking */ uint8_t survey_in; /*0 not in Survey-in mode*/ uint8_t alma_complete; /* 0 Calendar not complete */ uint8_t resv[2]; /* resv*/ float sig_level[12]; /* signal level of satellites */ }tracking_info_s; int32_t drv_tfu_gps_init(void); void drv_gps_recv_task(void); int32_t init_clock_module(void); int32_t get_receiver_fix_status(); int32_t get_src_time(time_t* time_ptr); #ifdef __cplusplus #if __cplusplus } #endif #endif #endif /**********************************************************************/