| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /******************************************************************************
- 版权所有:
- 文件名称: dido.h
- 文件版本: 01.01
- 创建作者: sunxi
- 创建日期: 2013-02-28
- 功能说明: 开入开出
- 其它说明:
- 修改记录:
- */
- #ifndef _DIDO_H
- #define _DIDO_H
- /*------------------------------- 头文件 --------------------------------------
- */
- /*------------------------------- 宏定义 --------------------------------------
- */
- #define DIDO_MAX_DI_PER_SLOT 32
- #define DIDO_TS_BITS 4
- #define DIDO_TS_NUM (1<<DIDO_TS_BITS) // 16
- #define DIDO_TS_MODE
- /*------------------------------ 类型结构 -------------------------------------
- */
- // buffer 索引
- struct ts_index
- {
- volatile u8 n : DIDO_TS_BITS;
- };
- struct di
- {
- u32 value[2]; // 开入值
- u32 inv[2]; // 是否反转
- struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT]; // 索引
- u32 ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
- u8 ts_v[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 值
- };
- struct _do
- {
- u16 on;
- u16 off;
- };
- struct do_time
- {
- u8 slot;
- u32 diff_out_count;
- u32 diff_min;
- u32 diff_max;
- };
- // 定义遥信防抖处理结构
- struct di_struct
- {
- // 设置值
- u32 tm_filter; // 防抖时间
- u8 owner; //归属:开关1~开关12、公共
- u8 type; //DI类型
- // 滤波处理
- int b_first_change;
- u32 tm_keep; // 保持时间
- u32 tm_back; // 返回时间
- // 变位记录
- int b_on; // 滤波后的遥信状态
- u32 tm_di_time;
- u32 dt;
- struct timespec ts_di; // 滤波前的变位时刻
- #ifdef DIDO_TS_MODE
- struct timespec ts_tmp;
- uint32 acc_nsec;
- #endif
- };
- // 定义遥信防抖处理结构
- struct do_struct
- {
- u32 us_keep;
- u32 us_on;
- };
- /*------------------------------ 全局变量 -------------------------------------
- */
- extern struct di g_di[];
- extern u8 dido_buf[128];
- extern struct di_struct g_di_st[EQU_SLOT_NUM_MAX][DIDO_MAX_DI_PER_SLOT];
- extern struct do_struct g_do_st[];
- extern u16 g_do_status; // 开出状态
- /*------------------------------ 函数声明 -------------------------------------
- */
- int dido_init(void);
- int dido_exit(void);
- int dido_di_is_on(u8 slot,u8 index);
- int dido_di_is_on_ts(u8 slot,u8 index,u32 ts);
- int dido_do_have_select(u32 slot,u32 index);
- int dido_do(u32 slot,u16 v,int is_on);
- int dido_do_time_recv(u8 * buf);
- void dido_do_poll(void);
- void dido_qd_set_keeptime(u32 us);
- int dido_printf(void);
- int dido_stat_reset(void);
- int dido_led_test(void);
- int dido_auto_test(char *buf,int num);
- int dido_single_test(u8 slot, u8 point);
- int dido_test(void);
- int dido_do_kz(int on, unsigned int i);
- #endif //_DIDO_H
- /*------------------------------ 文件结束 -------------------------------------
- */
|