/****************************************************************************** 版权所有: 文件名称: 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 { int bInited; // 是否初始化 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类型 // 滤波处理 #if !defined CPU_FUXI int b_first_change; u32 tm_keep; // 保持时间 u32 tm_back; // 返回时间 struct timespec ts_di; // 滤波前的变位时刻 #ifdef DIDO_TS_MODE struct timespec ts_tmp; uint32 acc_nsec; #endif #endif // 变位记录 int b_on; // 滤波后的遥信状态 u32 dt; }; // 定义遥信防抖处理结构 struct do_struct { u32 us_keep; u32 us_on; }; /*------------------------------ 全局变量 ------------------------------------- */ extern u8 g_di_slot; extern u8 g_do_slot; 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); #if !defined CPU_FUXI int dido_di_update(uint32_t _value_new, uint8_t _index, struct timespec *ts); #endif int get_shm_dintdata(void); int get_shm_didata(void); #endif //_DIDO_H /*------------------------------ 文件结束 ------------------------------------- */