main.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. /*********************************************************************************************************
  2. * Module : main.h
  3. * Abstract : main modules is defined data structure!
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-02-16
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #ifndef __MAIN_H
  11. #define __MAIN_H
  12. #include "stdint.h"
  13. #define STS_TYPE 0x07
  14. #define STS_R_START 4000
  15. #define STS_RW_START 4161
  16. #define STS_OUTPUT_STATUS (STS_RW_START)
  17. #define STS_CHOISE_INPUT (STS_OUTPUT_STATUS + 1)
  18. #define STS_INPUT_THRESHOLD (STS_CHOISE_INPUT + 1)
  19. #define STS_OUTPUT_THRESHOLD (STS_INPUT_THRESHOLD + 16)
  20. #define STS_TEMP_THRESHOLD (STS_OUTPUT_THRESHOLD + 10)
  21. #define STS_OVER_FUNC (STS_TEMP_THRESHOLD +2)
  22. #define STS_V_I_K (STS_OVER_FUNC + 1)
  23. #define STS_CLEAR_CONSUMER (STS_V_I_K + 6)
  24. #define STS_CLEAR_BEEP (STS_CLEAR_CONSUMER + 1)
  25. #define EEPROM_SATRT_DEVICE (0)
  26. #define EEPROM_SATRT_DEVICE_LENTH (2)
  27. #define EEPROM_ENABLE_SATRT (3)
  28. #define EEPROM_ENABLE_LENTH (8)
  29. #define EEPROM_INPUT_THRESHOLD_START (32)
  30. #define EEPROM_INPUT_THRESHOLD_LENTH (32)
  31. #define EEPROM_OUTPUT_THRESHOLD_START (96)
  32. #define EEPROM_OUTPUT_THRESHOLD_LENTH (80)
  33. #define EEPROM_TEMPRATURE_THRESHOLD_START (192)
  34. #define EEPROM_TEMPRATURE_THRESHOLD_LENTH (8)
  35. #define EEPROM_INPUT_THRESHOLD_START (0)
  36. #define EEPROM_INPUT_THRESHOLD_LENTH (16)
  37. #define EEPROM_OUTPUT_THRESHOLD_START (32)
  38. #define EEPROM_OUTPUT_THRESHOLD_LENTH (24)
  39. #define EEPROM_TEMPRATURE_THRESHOLD_START (64)
  40. #define EEPROM_TEMPRATURE_THRESHOLD_LENTH (8)
  41. #define EEPROM_OVER_FUNC_START (96)
  42. #define EEPROM_OVER_FUNC_LENTH (2)
  43. #define IIC_DEVICE_INFO (0)
  44. #define IIC_INPUT_THRESHOLD_START (10)
  45. #define IIC_OUTPUT_THRESHOLD_START (50)
  46. #define IIC_TEMPRATURE_THRESHOLD_START (150)
  47. #define IIC_OVER_FUNC_START (170)
  48. #define IIC_OVER_FUNC_LENTH (1)
  49. #define IIC_K_START (180)
  50. #define IIC_K_LENTH (12)
  51. //#define IIC_CONSUMER_START (200)
  52. #define IIC_OUT_CHANNEL (210)
  53. #define MAX_ROW (40)
  54. #define IIC_CONSUMER_START (2048)
  55. #define IIC_CONSUMER_LENTH (12)
  56. #define IIC_CONSUMER_PAGE (32)
  57. #define IIC_CONSUMER_MAX_NUM (30)
  58. #define INVALID_VALUE (40000000000)
  59. #define SMALL_VALUE (500)
  60. #define LOST_COUNT 100
  61. #define WANNING_COUNT 1000
  62. enum{
  63. INPUT_CHANNEL_1 = 0,
  64. INPUT_CHANNEL_2,
  65. };
  66. enum {
  67. CH448_CHANNEL_1 = 0,
  68. CH448_CHANNEL_2,
  69. CH448_CHANNEL_3,
  70. CH448_CHANNEL_NONE,
  71. };
  72. #define VOLTAGE_MAX_EN (0x01)
  73. #define VOLTAGE_MIN_EN (0x02)
  74. #define CURRENT_MAX_EN (0x04)
  75. #define POWER_MAX_EN (0x08)
  76. #define CONSUMER_MAX_EN (0x10)
  77. #define FREQ_MAX_EN (0x20)
  78. #define FREQ_MIN_EN (0x40)
  79. #define VOLTAGLE_MAX_DIS_EN (~(VOLTAGE_MAX_EN))
  80. #define VOLTAGLE_MIN_DIS_EN (~(VOLTAGE_MIN_EN))
  81. #define CURRENT_MAX_DIS_EN (~(CURRENT_MAX_EN))
  82. #define POWER_MAX_DIS_EN (~(POWER_MAX_EN))
  83. #define CONSUMER_MAX_DIS_EN (~(CONSUMER_MAX_EN))
  84. #define FREQ_MAX_DIS_EN (~(FREQ_MAX_EN))
  85. #define FREQ_MIN_DIS_EN (~(FREQ_MIN_EN))
  86. #define IS_VOLTAGE_MAX_EN(reg) ((reg) & VOLTAGE_MAX_EN)
  87. #define IS_VOLTAGE_MIN_EN(reg) ((reg) & VOLTAGE_MIN_EN)
  88. #define IS_CURRENT_MAX_EN(reg) ((reg) & CURRENT_MAX_EN)
  89. #define IS_POWER_MAX_EN(reg) ((reg) & POWER_MAX_EN)
  90. #define IS_CONSUMER_MAX_EN(reg) ((reg) & CONSUMER_MAX_EN)
  91. #define IS_FREQ_MAX_EN(reg) ((reg) & FREQ_MAX_EN)
  92. #define IS_FREQ_MIN_EN(reg) ((reg) & FREQ_MIN_EN)
  93. #define SET_VOLTAGE_MAX_EN(reg) ((reg) |= VOLTAGE_MAX_EN)
  94. #define SET_VOLTAGE_MIN_EN(reg) ((reg) |= VOLTAGE_MIN_EN)
  95. #define SET_CURRENT_MAX_EN(reg) ((reg) |= CURRENT_MAX_EN)
  96. #define SET_POWER_MAX_EN(reg) ((reg) |= POWER_MAX_EN)
  97. #define SET_CONSUMER_MAX_EN(reg) ((reg) |= CONSUMER_MAX_EN)
  98. #define SET_FREQ_MAX_EN(reg) ((reg) |= FREQ_MAX_EN)
  99. #define SET_FREQ_MIN_EN(reg) ((reg) |= FREQ_MIN_EN)
  100. #define UNSET_VOLTAGE_MAX_EN(reg) ((reg) &= VOLTAGLE_MAX_DIS_EN)
  101. #define UNSET_VOLTAGE_MIN_EN(reg) ((reg) &= VOLTAGLE_MIN_DIS_EN)
  102. #define UNSET_CURRENT_MAX_EN(reg) ((reg) &= CURRENT_MAX_DIS_EN)
  103. #define UNSET_POWER_MAX_EN(reg) ((reg) &= POWER_MAX_DIS_EN)
  104. #define UNSET_CONSUMER_MAX_EN(reg) ((reg) &= CONSUMER_MAX_DIS_EN)
  105. #define UNSET_FREQ_MAX_EN(reg) ((reg) &= FREQ_MAX_DIS_EN)
  106. #define UNSET_FREQ_MIN_EN(reg) ((reg) &= FREQ_MIN_DIS_EN)
  107. #define SET_WANNING_VOLTAGE_MAX(reg) SET_VOLTAGE_MAX_EN(reg)
  108. #define SET_WANNING_VOLTAGE_MIN(reg) SET_VOLTAGE_MIN_EN(reg)
  109. #define SET_WANNING_CURRENT_MAX(reg) SET_CURRENT_MAX_EN(reg)
  110. #define SET_WANNING_POWER_MAX(reg) SET_POWER_MAX_EN(reg)
  111. #define SET_WANNING_CONSUMER_MAX(reg) SET_CONSUMER_MAX_EN(reg)
  112. #define SET_WANNING_FREQ_MAX(reg) SET_FREQ_MAX_EN(reg)
  113. #define SET_WANNING_FREQ_MIN(reg) SET_FREQ_MIN_EN(reg)
  114. #define UNSET_WANNING_VOLTAGE_MAX(reg) UNSET_VOLTAGE_MAX_EN(reg)
  115. #define UNSET_WANNING_VOLTAGE_MIN(reg) UNSET_VOLTAGE_MIN_EN(reg)
  116. #define UNSET_WANNING_CURRENT_MAX(reg) UNSET_CURRENT_MAX_EN(reg)
  117. #define UNSET_WANNING_POWER_MAX(reg) UNSET_POWER_MAX_EN(reg)
  118. #define UNSET_WANNING_CONSUMER_MAX(reg) UNSET_CONSUMER_MAX_EN(reg)
  119. #define UNSET_WANNING_FREQ_MAX(reg) UNSET_FREQ_MAX_EN(reg)
  120. #define UNSET_WANNING_FREQ_MIN(reg) UNSET_FREQ_MIN_EN(reg)
  121. #define IS_WANNING_VOLTAGE_MAX(reg) IS_VOLTAGE_MAX_EN(reg)
  122. #define IS_WANNING_VOLTAGE_MIN(reg) IS_VOLTAGE_MIN_EN(reg)
  123. #define IS_WANNING_CURRENT_MAX(reg) IS_CURRENT_MAX_EN(reg)
  124. #define IS_WANNING_POWER_MAX(reg) IS_POWER_MAX_EN(reg)
  125. #define IS_WANNING_CONSUMER_MAX(reg) IS_CONSUMER_MAX_EN(reg)
  126. #define IS_WANNING_FREQ_MAX(reg) IS_FREQ_MAX_EN(reg)
  127. #define IS_WANNING_FREQ_MIN(reg) IS_FREQ_MIN_EN(reg)
  128. #define STS_INPUT_HAS_WANNING(reg) ((IS_WANNING_VOLTAGE_MAX(reg)) || (IS_WANNING_VOLTAGE_MIN(reg)) \
  129. || (IS_WANNING_FREQ_MAX(reg)) || (IS_WANNING_FREQ_MIN(reg)) )
  130. #define IS_OVERFUNC_VOLTAGE_MAX(reg) IS_VOLTAGE_MAX_EN(reg)
  131. #define IS_OVERFUNC_VOLTAGE_MIN(reg) IS_VOLTAGE_MIN_EN(reg)
  132. #define IS_OVERFUNC_CURRENT_MAX(reg) IS_CURRENT_MAX_EN(reg)
  133. #define IS_OVERFUNC_POWER_MAX(reg) IS_POWER_MAX_EN(reg)
  134. #define IS_OVERFUNC_CONSUMER_MAX(reg) IS_CONSUMER_MAX_EN(reg)
  135. #pragma pack (2)
  136. typedef struct {
  137. uint32_t uniq_ID_64_95;
  138. uint32_t uniq_ID_32_63;
  139. uint32_t uniq_ID_00_31;
  140. uint32_t channels;
  141. char ver[12];
  142. char date[32];
  143. }md_information_t;
  144. typedef struct {
  145. uint32_t voltage;
  146. uint32_t current;
  147. uint32_t power;
  148. uint32_t consumer;
  149. uint32_t freq;
  150. uint32_t factor;
  151. uint32_t angle;
  152. }md_out_power_info;
  153. typedef struct {
  154. uint32_t voltage;
  155. uint32_t freq;
  156. }md_input_info;
  157. typedef struct{
  158. uint16_t choise_ch;
  159. }md_chiose_ch;
  160. typedef struct{
  161. uint16_t input_status[2];
  162. }md_input_status;
  163. typedef struct{
  164. uint16_t fan_status;
  165. }md_fans;
  166. typedef struct{
  167. uint16_t waning[2]; /* two input */
  168. }md_in_wanning;
  169. typedef struct {
  170. float iic_consumer;
  171. uint64_t recode_index1;
  172. }iic_consumer_data_t;
  173. typedef struct{
  174. iic_consumer_data_t iic_da;
  175. uint64_t index;
  176. uint16_t row;
  177. }consumer_data;
  178. typedef struct {
  179. uint16_t waning;
  180. }md_out_wanning;
  181. typedef struct {
  182. uint32_t voltage_max;
  183. uint32_t voltage_min;
  184. uint32_t current_max;
  185. uint32_t power_max;
  186. uint32_t consumer_max;
  187. }iic_out_threshold_t;
  188. typedef struct {
  189. uint32_t voltage_max;
  190. uint32_t voltage_min;
  191. uint32_t freq_max;
  192. uint32_t freq_min;
  193. }iic_in_threshold_t;
  194. typedef struct
  195. {
  196. uint8_t o_v_max : 1;
  197. uint8_t o_v_min : 1;
  198. uint8_t o_i_max : 1;
  199. uint8_t o_p_max : 1;
  200. uint8_t o_c_max : 1;
  201. uint8_t : 3;
  202. }wanning_o_t;
  203. typedef union
  204. {
  205. uint8_t beep_waning;
  206. wanning_o_t o_t;
  207. }wanning_o_beep_t;
  208. typedef wanning_o_beep_t wanning_o_beep_flag_t;
  209. typedef struct
  210. {
  211. uint8_t i_v_max : 1;
  212. uint8_t i_v_min : 1;
  213. uint8_t i_hz_max : 1;
  214. uint8_t i_hz_min : 1;
  215. uint8_t : 4;
  216. }wanning_i_t;
  217. typedef union
  218. {
  219. uint8_t beep_waning;
  220. wanning_i_t i_t;
  221. }wanning_i_beep_t;
  222. typedef wanning_i_beep_t wanning_i_beep_flag_t;
  223. typedef struct{
  224. uint16_t fans_max_temp;
  225. uint16_t fans_min_temp;
  226. }iic_temp_threshold_t;
  227. typedef uint16_t iic_over_func;
  228. typedef struct{
  229. uint16_t dev; //4000
  230. md_information_t info; //4001 - 4030
  231. md_input_info input[2]; //4031 - 4038
  232. md_input_status input_status; //4039 - 4040
  233. md_in_wanning input_wanning; //4041
  234. md_out_wanning output_waning; //4042
  235. md_out_power_info out_power; //4043 - 4057
  236. int16_t temprature; //4058
  237. uint16_t temprature_flag; //4059
  238. uint16_t fans_status; //4060
  239. uint16_t resurved[100]; //
  240. uint16_t out_status; //r_w //4061
  241. md_chiose_ch md_choise; //4062
  242. iic_in_threshold_t input_th[2];
  243. iic_out_threshold_t output_th;
  244. iic_temp_threshold_t temprature_th;
  245. iic_over_func over_func;
  246. uint16_t input_v_k[2];
  247. uint16_t input_i_k[2];
  248. uint16_t output_v_k;
  249. uint16_t output_i_k;
  250. }md_data_t;
  251. #pragma pack ()
  252. typedef struct sts_data{
  253. uint8_t flag_1000ms;
  254. uint8_t flag_100ms;
  255. uint8_t beep_flag;
  256. uint32_t beep_count;
  257. uint32_t lost_count;
  258. uint32_t wanning_count;
  259. uint8_t exit_init_flag;
  260. uint8_t switch_status;
  261. md_data_t m_data;
  262. consumer_data kwh;
  263. float iic_consumer;
  264. float temprature;
  265. uint8_t input_wanning_en[2];
  266. uint8_t output_wanning_en;
  267. uint8_t input_beep;
  268. wanning_o_beep_t o_beep;
  269. wanning_o_beep_flag_t o_beep_flag;
  270. wanning_i_beep_t i_beep[2];
  271. wanning_i_beep_flag_t i_beep_flag[2];
  272. void (*choise_input)(uint8_t channel);
  273. void (*open_output)();
  274. void (*close_output)();
  275. void (*read_ele)(uint8_t channel);
  276. void (*read_switch_level)();
  277. uint8_t (*get_input1_level)();
  278. uint8_t (*get_input2_level)();
  279. void (*fans)(uint8_t on_off);
  280. void (*beep)();
  281. void (*clear_beep)();
  282. void (*led_flash)();
  283. void (*key_clear_beep)();
  284. void (*read_eeprom)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
  285. void (*write_eeprom)(uint16_t addr,uint8_t *w_buff,uint16_t lenth);
  286. void (*read_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
  287. void (*write_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
  288. float (*read_temp)();
  289. void (*check_wanning)(uint8_t channel);
  290. }sts_data_t;
  291. sts_data_t *get_sts(void);
  292. #endif