dido.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. int bInited; // 是否初始化
  31. u32 value[2]; // 开入值
  32. u32 inv[2]; // 是否反转
  33. struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT]; // 索引
  34. u32 ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
  35. u8 ts_v[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 值
  36. };
  37. struct _do
  38. {
  39. u16 on;
  40. u16 off;
  41. };
  42. struct do_time
  43. {
  44. u8 slot;
  45. u32 diff_out_count;
  46. u32 diff_min;
  47. u32 diff_max;
  48. };
  49. // 定义遥信防抖处理结构
  50. struct di_struct
  51. {
  52. // 设置值
  53. u32 tm_filter; // 防抖时间
  54. u8 owner; //归属:开关1~开关12、公共
  55. u8 type; //DI类型
  56. // 滤波处理
  57. #if !defined CPU_FUXI
  58. int b_first_change;
  59. u32 tm_keep; // 保持时间
  60. u32 tm_back; // 返回时间
  61. struct timespec ts_di; // 滤波前的变位时刻
  62. #ifdef DIDO_TS_MODE
  63. struct timespec ts_tmp;
  64. uint32 acc_nsec;
  65. #endif
  66. #endif
  67. // 变位记录
  68. int b_on; // 滤波后的遥信状态
  69. u32 dt;
  70. };
  71. // 定义遥信防抖处理结构
  72. struct do_struct
  73. {
  74. u32 us_keep;
  75. u32 us_on;
  76. };
  77. /*------------------------------ 全局变量 -------------------------------------
  78. */
  79. extern u8 g_di_slot;
  80. extern struct di g_di[];
  81. extern u8 dido_buf[128];
  82. extern struct di_struct g_di_st[EQU_SLOT_NUM_MAX][DIDO_MAX_DI_PER_SLOT];
  83. extern struct do_struct g_do_st[];
  84. extern u16 g_do_status; // 开出状态
  85. /*------------------------------ 函数声明 -------------------------------------
  86. */
  87. int dido_init(void);
  88. int dido_exit(void);
  89. int dido_di_is_on(u8 slot,u8 index);
  90. int dido_di_is_on_ts(u8 slot,u8 index,u32 ts);
  91. int dido_do_have_select(u32 slot,u32 index);
  92. int dido_do(u32 slot,u16 v,int is_on);
  93. int dido_do_time_recv(u8 * buf);
  94. void dido_do_poll(void);
  95. void dido_qd_set_keeptime(u32 us);
  96. int dido_printf(void);
  97. int dido_stat_reset(void);
  98. int dido_led_test(void);
  99. int dido_auto_test(char *buf,int num);
  100. int dido_single_test(u8 slot, u8 point);
  101. int dido_test(void);
  102. int dido_do_kz(int on, unsigned int i);
  103. #if !defined CPU_FUXI
  104. int dido_di_update(uint32_t _value_new, uint8_t _index, struct timespec *ts);
  105. #endif
  106. int get_shm_didata(void);
  107. #endif //_DIDO_H
  108. /*------------------------------ 文件结束 -------------------------------------
  109. */