yb_arm/driver/tfu/lc98s/inc/lc98s_drv.h

126 lines
3.6 KiB
C
Raw Normal View History

2025-05-20 01:20:32 +08:00
/*------------------------------------------------------------
// 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; /*最新接收到的消息长<E681AF><E995BF>?*/
uint16_t deal_cnt; /*未处理消息长<E681AF><E995BF>?*/
int32_t send_sem;
uint8_t *send_buf_ptr;
uint16_t send_cnt; /*待发送消息长<E681AF><E995BF>?*/
uint16_t frame_flag; //帧头
}gps_uart_s;
typedef struct
{
int32_t latitude; //纬度 单位:度/1e-7
int32_t longitude; //经度 单位:度/1e-7
int32_t altitude; //高度 单位<EFBC9A><E6AFAB>?
}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
/**********************************************************************/