dido.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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. #ifdef GW_AREA_MAIN_2021
  16. /*------------------------------- 宏定义 --------------------------------------
  17. */
  18. #define DIDO_MAX_DI_PER_SLOT 67 // DTUv5-DI
  19. #define DIDO_MAX_DO_PER_SLOT 16
  20. #define DIDO_TS_BITS 4
  21. #define DIDO_TS_NUM (1<<DIDO_TS_BITS) // 16
  22. /*------------------------------ 类型结构 -------------------------------------
  23. */
  24. // buffer 索引
  25. struct ts_index
  26. {
  27. volatile u8 n : DIDO_TS_BITS;
  28. };
  29. struct di
  30. {
  31. int bInited[3]; // 是否初始化
  32. u32 value[3]; // 开入值
  33. u32 inv[3]; // 是否反转
  34. struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT]; // 索引
  35. u32 ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
  36. u8 ts_v[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 值
  37. };
  38. struct _do
  39. {
  40. u32 on;
  41. u32 off;
  42. };
  43. struct do_time
  44. {
  45. u8 slot;
  46. u32 diff_out_count;
  47. u32 diff_min;
  48. u32 diff_max;
  49. };
  50. // 定义遥信防抖处理结构
  51. struct di_struct
  52. {
  53. // 设置值
  54. u32 tm_filter; // 防抖时间
  55. u8 owner; //归属:开关1~开关12、公共
  56. u8 type; //DI类型
  57. };
  58. /*------------------------------ 全局变量 -------------------------------------
  59. */
  60. extern struct di g_di[];
  61. extern u8 dido_buf[128];
  62. extern struct di_struct g_di_st[EQU_SLOT_NUM_MAX][DIDO_MAX_DI_PER_SLOT*2];
  63. /*------------------------------ 函数声明 -------------------------------------
  64. */
  65. int dido_init(void);
  66. int dido_exit(void);
  67. int dido_di_is_on(u8 slot,u8 index);
  68. int dido_di_is_on_ts(u8 slot,u8 index,u32 ts);
  69. int dido_di_update(u8 * buf);
  70. int dido_do_have_select(u32 slot,u32 index);
  71. int dido_do(u32 slot,u32 v,int is_on);
  72. int dido_do_time_recv(u8 * buf);
  73. void dido_do_poll(void);
  74. void dido_qd_set_keeptime(u32 us);
  75. int dido_printf(void);
  76. int dido_stat_reset(void);
  77. int dido_led_test(void);
  78. int dido_auto_test(char *buf,int num);
  79. int dido_single_test(u8 slot, u8 point);
  80. int dido_test(void);
  81. #else
  82. /*------------------------------- 宏定义 --------------------------------------
  83. */
  84. #define DIDO_MAX_DI_PER_SLOT 32
  85. #define DIDO_TS_BITS 4
  86. #define DIDO_TS_NUM (1<<DIDO_TS_BITS) // 16
  87. #define DIDO_TS_MODE
  88. /*------------------------------ 类型结构 -------------------------------------
  89. */
  90. // buffer 索引
  91. struct ts_index
  92. {
  93. volatile u8 n : DIDO_TS_BITS;
  94. };
  95. struct di
  96. {
  97. u32 value[2]; // 开入值
  98. u32 inv[2]; // 是否反转
  99. struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT]; // 索引
  100. u32 ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
  101. u8 ts_v[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 值
  102. };
  103. struct _do
  104. {
  105. u16 on;
  106. u16 off;
  107. };
  108. struct do_time
  109. {
  110. u8 slot;
  111. u32 diff_out_count;
  112. u32 diff_min;
  113. u32 diff_max;
  114. };
  115. // 定义遥信防抖处理结构
  116. struct di_struct
  117. {
  118. // 设置值
  119. u32 tm_filter; // 防抖时间
  120. u8 owner; //归属:开关1~开关12、公共
  121. u8 type; //DI类型
  122. // 滤波处理
  123. int b_first_change;
  124. u32 tm_keep; // 保持时间
  125. u32 tm_back; // 返回时间
  126. // 变位记录
  127. int b_on; // 滤波后的遥信状态
  128. u32 tm_di_time;
  129. u32 dt;
  130. struct timespec ts_di; // 滤波前的变位时刻
  131. #ifdef DIDO_TS_MODE
  132. struct timespec ts_tmp;
  133. uint32 acc_nsec;
  134. #endif
  135. };
  136. // 定义遥信防抖处理结构
  137. struct do_struct
  138. {
  139. u32 us_keep;
  140. u32 us_on;
  141. };
  142. /*------------------------------ 全局变量 -------------------------------------
  143. */
  144. extern struct di g_di[];
  145. extern u8 dido_buf[128];
  146. extern struct di_struct g_di_st[EQU_SLOT_NUM_MAX][DIDO_MAX_DI_PER_SLOT];
  147. extern struct do_struct g_do_st[];
  148. extern u16 g_do_status; // 开出状态
  149. /*------------------------------ 函数声明 -------------------------------------
  150. */
  151. int dido_init(void);
  152. int dido_exit(void);
  153. int dido_di_is_on(u8 slot,u8 index);
  154. int dido_di_is_on_ts(u8 slot,u8 index,u32 ts);
  155. int dido_do_have_select(u32 slot,u32 index);
  156. int dido_do(u32 slot,u16 v,int is_on);
  157. int dido_do_time_recv(u8 * buf);
  158. void dido_do_poll(void);
  159. void dido_qd_set_keeptime(u32 us);
  160. int dido_printf(void);
  161. int dido_stat_reset(void);
  162. int dido_led_test(void);
  163. int dido_auto_test(char *buf,int num);
  164. int dido_single_test(u8 slot, u8 point);
  165. int dido_test(void);
  166. int dido_do_kz(int on, unsigned int i);
  167. #endif // GW_AREA_MAIN_2021
  168. #endif //_DIDO_H
  169. /*------------------------------ 文件结束 -------------------------------------
  170. */