common.c 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. #include "common.h"
  2. #include "board_cfg.h"
  3. #if EEPROM_TEST
  4. #define TEST_ADDR (120 * 32)
  5. #define LENTH (32)
  6. #endif
  7. void reset_config_for_eeprom(void)
  8. {
  9. board_t *board = get_board();
  10. if(board)
  11. {
  12. //board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.r_d.dev_chn,EEPROM_DEVICES_LENTH);
  13. //board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],EEPROM_STATUS_LENTH);
  14. #if (POWER_TYPE == POWER_AC_3_3)
  15. int p = 0;
  16. for(int i = 0; i < MAX_CHANNEL;i+=3)
  17. {
  18. board->md_data.rw_data.rw_d.delay_chn[i].delay_open = (1+p) *100;
  19. board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+p) *100;
  20. board->md_data.rw_data.rw_d.delay_chn[i+1].delay_open = (1+p) *100;
  21. board->md_data.rw_data.rw_d.delay_chn[i+1].delay_close = (1+p) *100;
  22. board->md_data.rw_data.rw_d.delay_chn[i+2].delay_open = (1+p) *100;
  23. board->md_data.rw_data.rw_d.delay_chn[i+2].delay_close = (1+p) *100;
  24. board->md_data.rw_data.rw_d.combin_chn[i/3].delay_open = (1+p) *100;
  25. board->md_data.rw_data.rw_d.combin_chn[i/3].delay_close = (1+p) *100;
  26. p++;
  27. }
  28. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  29. for(int i = 0; i < 3;i++)
  30. {
  31. board->md_data.rw_data.rw_d.zero_chn[i].delay_open = (1+i) *100;
  32. board->md_data.rw_data.rw_d.zero_chn[i].delay_close = (1+i) *100;
  33. }
  34. #endif
  35. #elif (POWER_TYPE == POWER_AC_3_2)
  36. #else
  37. for(int i = 0; i < MAX_CHANNEL;i++)
  38. {
  39. board->md_data.rw_data.rw_d.delay_chn[i].delay_open = (1+i) *100;
  40. board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+i) *100;
  41. }
  42. #endif
  43. memset(&board->md_data.rw_data.rw_d.delay_chn[0],0,sizeof(rw_data_t)-EEPROM_STATUS_LENTH);
  44. board->write_eeprom_page(EEPROM_OTHER_ADDR,(uint8_t *)&board->md_data.rw_data.rw_d.delay_chn[0], sizeof(rw_data_t)-EEPROM_STATUS_LENTH);
  45. //config phase information
  46. uint8_t buff[EEPROM_CHANNEL_LENTH] = {0};
  47. board->write_eeprom_page(EEPROM_CHANNEL_PHASE,buff,EEPROM_CHANNEL_LENTH);
  48. //for(int i = 0 ; i < MAX_ROW;i++)
  49. // board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),&board->con_da.iic_da.iic_con,CONSUM_PAGE);
  50. }
  51. }
  52. void read_config_from_eeprom(void)
  53. {
  54. board_t *board = get_board();
  55. if(board)
  56. {
  57. uint16_t device = 0;
  58. board->read_eeprom(EEPROM_DEVICES_ADDR,(uint8_t *)&device,EEPROM_DEVICES_LENTH);
  59. #if EEPROM_TEST
  60. uint8_t test_buff[32] ={0};
  61. for(int i =0;i < 32;i++)
  62. test_buff[i]=i;
  63. board->write_eeprom_page(TEST_ADDR,test_buff,LENTH);
  64. for(int i =0;i < 32;i++)
  65. test_buff[i]=0;
  66. board->read_eeprom_page(TEST_ADDR,test_buff,LENTH);
  67. #endif
  68. if(device != board->md_data.r_data.r_d.dev_chn)
  69. {
  70. //default write eeprom
  71. board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.r_d.dev_chn,EEPROM_DEVICES_LENTH);
  72. board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],EEPROM_STATUS_LENTH);
  73. #if (POWER_TYPE == POWER_AC_3_3)
  74. int p = 0;
  75. for(int i = 0; i < MAX_CHANNEL;i+=3)
  76. {
  77. board->md_data.rw_data.rw_d.delay_chn[i].delay_open = (1+p) *100;
  78. board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+p) *100;
  79. board->md_data.rw_data.rw_d.delay_chn[i+1].delay_open = (1+p) *100;
  80. board->md_data.rw_data.rw_d.delay_chn[i+1].delay_close = (1+p) *100;
  81. board->md_data.rw_data.rw_d.delay_chn[i+2].delay_open = (1+p) *100;
  82. board->md_data.rw_data.rw_d.delay_chn[i+2].delay_close = (1+p) *100;
  83. board->md_data.rw_data.rw_d.combin_chn[i/3].delay_open = (1+p) *100;
  84. board->md_data.rw_data.rw_d.combin_chn[i/3].delay_close = (1+p) *100;
  85. p++;
  86. }
  87. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  88. for(int i = 0; i < 3;i++)
  89. {
  90. board->md_data.rw_data.rw_d.zero_chn[i].delay_open = (1+i) *100;
  91. board->md_data.rw_data.rw_d.zero_chn[i].delay_close = (1+i) *100;
  92. }
  93. #endif
  94. #elif (POWER_TYPE == POWER_AC_3_2)
  95. int p = 0;
  96. for(int i = 0; i < PT_SUB_COUNT;i++)
  97. {
  98. board->md_data.rw_data.rw_d.delay_chn[i].delay_open = (1+p) *100;
  99. board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+p) *100;
  100. board->md_data.rw_data.rw_d.delay_chn[i+PT_SUB_COUNT].delay_open = (1+p) *100;
  101. board->md_data.rw_data.rw_d.delay_chn[i+PT_SUB_COUNT].delay_close = (1+p) *100;
  102. board->md_data.rw_data.rw_d.combin_chn[i].delay_open = (1+p) *100;
  103. board->md_data.rw_data.rw_d.combin_chn[i].delay_close = (1+p) *100;
  104. p++;
  105. }
  106. #else
  107. for(int i = 0; i < MAX_CHANNEL;i++)
  108. {
  109. board->md_data.rw_data.rw_d.delay_chn[i].delay_open = (1+i) *100;
  110. board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+i) *100;
  111. }
  112. #endif
  113. board->write_eeprom_page(EEPROM_OTHER_ADDR,(uint8_t *)&board->md_data.rw_data.rw_d.delay_chn[0], sizeof(rw_data_t)-EEPROM_STATUS_LENTH);
  114. //config phase information
  115. uint8_t buff[EEPROM_CHANNEL_LENTH] = {0};
  116. board->write_eeprom_page(EEPROM_CHANNEL_PHASE,buff,EEPROM_CHANNEL_LENTH);
  117. iic_data chache={0};
  118. for(int i = 0 ; i < MAX_ROW;i++)
  119. board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache.data[0],CONSUM_PAGE);
  120. for(int i = 0;i < MAX_CHANNEL;i++)
  121. {
  122. board->md_data.rw_data.rw_d.chn_ctrl[i] = CTRL_YES;
  123. }
  124. }
  125. {
  126. //channel open or close
  127. board->read_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],2*EEPROM_STATUS_LENTH);
  128. {
  129. for(int i =0 ;i < RelaySlaveChaNum;i++)
  130. {
  131. if(board->relay_staging_staus[i])
  132. {
  133. SET_RL_ON_DELAY_FLAG(board->relay_staging_staus[i]);
  134. CLEAR_RL_OFF_DELAY_FLAG(board->relay_staging_staus[i]);
  135. SET_RL_ORDER_FLAG(board->relay_staging_staus[i]);
  136. }
  137. }
  138. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  139. for(int i = 0; i < ZERO_CTRL_NUM;i++)
  140. {
  141. if(board->relay_zero_staging_status[i])
  142. {
  143. SET_RL_ON_DELAY_FLAG(board->relay_zero_staging_status[i]);
  144. CLEAR_RL_OFF_DELAY_FLAG(board->relay_zero_staging_status[i]);
  145. SET_RL_ORDER_FLAG(board->relay_zero_staging_status[i]);
  146. }
  147. }
  148. #endif
  149. }
  150. board->read_eeprom_page(EEPROM_OTHER_ADDR,(uint8_t *)&board->md_data.rw_data.rw_d.delay_chn[0],2*(START_RW_LENTH-EEPROM_STATUS_LENTH));
  151. //get phase information
  152. uint8_t buff[EEPROM_CHANNEL_LENTH] = {0};
  153. board->read_eeprom_page(EEPROM_CHANNEL_PHASE,buff,EEPROM_CHANNEL_LENTH);
  154. #if (POWER_TYPE == POWER_AC_3_3)
  155. for(int i = 0; i < 3; i++)
  156. {
  157. board->check_threshold(THRESHOLD_IN,i);
  158. }
  159. #else
  160. for(int i = 0 ; i < INPUT_PT_NUM;i++)
  161. {
  162. board->check_threshold(THRESHOLD_IN,i);
  163. }
  164. #endif
  165. for(int i = 0; i < RelaySlaveChaNum; i++)
  166. {
  167. board->md_data.r_data.r_d.ele_out[i].resever = buff[i]; //config phase information
  168. board->check_threshold(THRESHOLD_OUT,i);
  169. if(board->md_data.rw_data.rw_d.chn_ctrl[i] > 2)
  170. {
  171. board->md_data.rw_data.rw_d.chn_ctrl[i] = 0;
  172. }
  173. }
  174. iic_data chache={0};
  175. for(int i = 0 ; i < MAX_ROW;i++)
  176. {
  177. board->read_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),&chache,sizeof(iic_data));
  178. if(board->con_da.index > chache.iic_con.recode_index1)
  179. {
  180. }else
  181. {
  182. board->con_da.index = chache.iic_con.recode_index1;
  183. board->con_da.row = i;
  184. }
  185. }
  186. board->read_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*(board->con_da.row)),&chache,sizeof(iic_data));
  187. for(int i = 0 ; i < RelaySlaveChaNum;i++)
  188. {
  189. board->ele_restore[i] = chache.iic_con.iic_consumer[i];
  190. }
  191. board->con_da.row++; //point next write row
  192. if(board->con_da.row >= MAX_ROW)
  193. {
  194. board->con_da.row = 0;
  195. }
  196. board->con_da.index++; //point next write consumer index
  197. if(board->con_da.index > 0XFFFFFFFFFFFFFFFF)
  198. {
  199. iic_data chache1={0};
  200. board->con_da.index = 0;
  201. for(int i = 0 ; i < MAX_ROW;i++)
  202. board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),&chache1,CONSUM_PAGE);
  203. }
  204. //read chn ctrl
  205. }
  206. }
  207. }
  208. void set_relay_sta_async(async_data *data)
  209. {
  210. if(!data)
  211. goto failed;
  212. board_t *board = get_board();
  213. if(board)
  214. {
  215. if(data->fire_or_zero == _FIRE)
  216. {
  217. //if(board->md_data.rw_data.rw_d.chn_ctrl[data->channel] != 0) goto failed;
  218. if(data->w_eep_flag == FLAG_W_EEP)
  219. {
  220. w_eeprom_data_t da = {0};
  221. da.lenth =2;
  222. memcpy(&da.data,&data->status,2);
  223. da.start_addr = (EEPROM_STATUS_ADDR+(data->channel*2));
  224. board->q_cache.en_queue(&da);
  225. }
  226. }
  227. else if(data->fire_or_zero == _ZERO)
  228. {
  229. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  230. if(data->w_eep_flag == FLAG_W_EEP)
  231. {
  232. w_eeprom_data_t da = {0};
  233. da.lenth =2;
  234. memcpy(&da.data,&data->status,2);
  235. da.start_addr = (EEPROM_STATUS_ADDR+((data->channel+13)*2));
  236. board->q_cache.en_queue(&da);
  237. }
  238. #else
  239. goto failed;
  240. #endif
  241. }
  242. else
  243. {
  244. goto failed;
  245. }
  246. SET_RL_STATUS(*data->reg,data->status);
  247. if(data->method == DELAY_CTRL)
  248. {
  249. if(data->status)
  250. {
  251. SET_RL_ON_DELAY_FLAG(*(data->reg));
  252. CLEAR_RL_OFF_DELAY_FLAG(*(data->reg));
  253. }else
  254. {
  255. CLEAR_RL_ON_DELAY_FLAG(*(data->reg));
  256. SET_RL_OFF_DELAY_FLAG(*(data->reg));
  257. }
  258. }else
  259. {
  260. if(data->status)
  261. {
  262. CLEAR_RL_ON_DELAY_FLAG(*(data->reg));
  263. CLEAR_RL_OFF_DELAY_FLAG(*(data->reg));
  264. }else
  265. {
  266. CLEAR_RL_ON_DELAY_FLAG(*(data->reg));
  267. CLEAR_RL_OFF_DELAY_FLAG(*(data->reg));
  268. }
  269. }
  270. SET_RL_ORDER_FLAG(*(data->reg));
  271. }
  272. failed:
  273. return;
  274. }
  275. void set_relay_status_async(uint16_t *reg,uint8_t method,uint16_t status)
  276. {
  277. board_t *board = get_board();
  278. SET_RL_STATUS(*reg,status);
  279. if(method == DELAY_CTRL)
  280. {
  281. if(status)
  282. {
  283. SET_RL_ON_DELAY_FLAG(*reg);
  284. CLEAR_RL_OFF_DELAY_FLAG(*reg);
  285. }else
  286. {
  287. CLEAR_RL_ON_DELAY_FLAG(*reg);
  288. SET_RL_OFF_DELAY_FLAG(*reg);
  289. }
  290. }else
  291. {
  292. if(status)
  293. {
  294. CLEAR_RL_ON_DELAY_FLAG(*reg);
  295. CLEAR_RL_OFF_DELAY_FLAG(*reg);
  296. }else
  297. {
  298. CLEAR_RL_ON_DELAY_FLAG(*reg);
  299. CLEAR_RL_OFF_DELAY_FLAG(*reg);
  300. }
  301. }
  302. SET_RL_ORDER_FLAG(*reg);
  303. }