yb_arm/driver/tfu/lc98s/inc/lc98s_drv.h
2025-05-20 01:20:32 +08:00

126 lines
3.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*------------------------------------------------------------
// 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
/**********************************************************************/