dido.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: dido.h
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2013-02-28
  7. 功能说明: 开入开出
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _DIDO_H
  12. #define _DIDO_H
  13. /*------------------------------- 头文件 --------------------------------------
  14. */
  15. /*------------------------------- 宏定义 --------------------------------------
  16. */
  17. #define DIDO_MAX_DI_PER_SLOT 32
  18. #define DIDO_TS_BITS 4
  19. #define DIDO_TS_NUM (1<<DIDO_TS_BITS) // 16
  20. #define DIDO_TS_MODE
  21. /*------------------------------ 类型结构 -------------------------------------
  22. */
  23. // buffer 索引
  24. struct ts_index
  25. {
  26. volatile u8 n : DIDO_TS_BITS;
  27. };
  28. struct di
  29. {
  30. u32 value[2]; // 开入值
  31. u32 inv[2]; // 是否反转
  32. struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT]; // 索引
  33. u32 ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
  34. u8 ts_v[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 值
  35. };
  36. struct _do
  37. {
  38. u16 on;
  39. u16 off;
  40. };
  41. struct do_time
  42. {
  43. u8 slot;
  44. u32 diff_out_count;
  45. u32 diff_min;
  46. u32 diff_max;
  47. };
  48. // 定义遥信防抖处理结构
  49. struct di_struct
  50. {
  51. // 设置值
  52. u32 tm_filter; // 防抖时间
  53. u8 owner; //归属:开关1~开关12、公共
  54. u8 type; //DI类型
  55. // 滤波处理
  56. int b_first_change;
  57. u32 tm_keep; // 保持时间
  58. u32 tm_back; // 返回时间
  59. // 变位记录
  60. int b_on; // 滤波后的遥信状态
  61. u32 tm_di_time;
  62. u32 dt;
  63. struct timespec ts_di; // 滤波前的变位时刻
  64. #ifdef DIDO_TS_MODE
  65. struct timespec ts_tmp;
  66. uint32 acc_nsec;
  67. #endif
  68. };
  69. // 定义遥信防抖处理结构
  70. struct do_struct
  71. {
  72. u32 us_keep;
  73. u32 us_on;
  74. };
  75. /*------------------------------ 全局变量 -------------------------------------
  76. */
  77. extern struct di g_di[];
  78. extern u8 dido_buf[128];
  79. extern struct di_struct g_di_st[EQU_SLOT_NUM_MAX][DIDO_MAX_DI_PER_SLOT];
  80. extern struct do_struct g_do_st[];
  81. extern u16 g_do_status; // 开出状态
  82. /*------------------------------ 函数声明 -------------------------------------
  83. */
  84. int dido_init(void);
  85. int dido_exit(void);
  86. int dido_di_is_on(u8 slot,u8 index);
  87. int dido_di_is_on_ts(u8 slot,u8 index,u32 ts);
  88. int dido_do_have_select(u32 slot,u32 index);
  89. int dido_do(u32 slot,u16 v,int is_on);
  90. int dido_do_time_recv(u8 * buf);
  91. void dido_do_poll(void);
  92. void dido_qd_set_keeptime(u32 us);
  93. int dido_printf(void);
  94. int dido_stat_reset(void);
  95. int dido_led_test(void);
  96. int dido_auto_test(char *buf,int num);
  97. int dido_single_test(u8 slot, u8 point);
  98. int dido_test(void);
  99. int dido_do_kz(int on, unsigned int i);
  100. #endif //_DIDO_H
  101. /*------------------------------ 文件结束 -------------------------------------
  102. */