cascade_slave.c 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  1. #include "modbus.h"
  2. #include "common.h"
  3. #include "list.h"
  4. #include "switch_ctrl.h"
  5. #include "cascade.h"
  6. #include "sqlite_handle.h"
  7. #define DEV_CHN_REG (4000)
  8. #define OUT_INFO_REG (4001)
  9. #define IN_TOTAL_REG (4768)
  10. #define TEM_HUMAN_REG (4777)
  11. #define CHN_SWITCH_REG (4779)
  12. #define CHN_OPEN_DLA_REG (4843)
  13. #define CHN_CLOSE_DLA_REG (4907)
  14. #define SENSOR_REG (4971)
  15. #define DRY_REG (4987)
  16. #define BREAKER (4991)
  17. #define CHN_SET_OPEN_DLA_REG (5000)
  18. #define CHN_SET_CLOSE_DLA_REG (5064)
  19. #define CHN_SET_SWITCH_STA_REG (5128)
  20. #define ALL_SET_SWITCH_REG (5192)
  21. #ifdef NORTH_USER_SPECILS
  22. #define SPAECIL_USER_TOTAL_CONSUMER (40 )
  23. #define SPAECIL_USER_TOTAL_POWER (49 )
  24. #define SPAECIL_USER_STATUS (100 )
  25. #define SPAECIL_USER_STATUS_64 (103 )
  26. #define SPAECIL_USER_WANING (2000)
  27. #define SPAECIL_USER_FATAL_64 (2005)
  28. #define SPAECIL_USER_SET_1 (3001)
  29. #define SPAECIL_USER_SET_64 (3004)
  30. enum{
  31. N_SPAECIL_CON = 0,
  32. N_SPAECIL_STA,
  33. N_SPAECIL_WANING,
  34. N_SPAECIL_SET,
  35. };
  36. static mmap_modbus_t north_specil[] = {
  37. [N_SPAECIL_CON ]{.offset = SPAECIL_USER_TOTAL_CONSUMER },
  38. [N_SPAECIL_STA ]{.offset = SPAECIL_USER_STATUS },
  39. [N_SPAECIL_WANING ]{.offset = SPAECIL_USER_WANING },
  40. [N_SPAECIL_SET ]{.offset = SPAECIL_USER_SET_1 },
  41. };
  42. #endif
  43. enum{
  44. TYPE_U16,
  45. TYPE_U32
  46. };
  47. enum{
  48. NO_OPPERATION = 0,
  49. OPEN,
  50. CLOSE,
  51. };
  52. enum {
  53. DS_R_DEV_CHN = 0,
  54. DS_R_OUT_INFO,
  55. DS_R_IN_TOTAL,
  56. DS_R_TEMP_HUM,
  57. DS_R_SWITCH_STA,
  58. DS_R_OPEN_DELAY,
  59. DS_R_CLOSE_DELAY,
  60. DS_R_SENSOR,
  61. DS_R_DRY,
  62. DS_R_BREAKER,
  63. DS_W_OPEN_DELAY,
  64. DS_W_CLOSE_DELAY,
  65. DS_W_CHN_SWITCH_STA,
  66. DS_W_ALL_CHN_STA
  67. };
  68. #define TREE_DEV_CHN_REG (6000)
  69. #define TREE_INPUT_A_REG (6001)
  70. #define TREE_INPUT_B_REG (6009)
  71. #define TREE_INPUT_C_REG (6017)
  72. #define TREE_CHN_TOTAL_REG (6025)
  73. #define TREE_CHN_PH_REG (6665)
  74. #define TREE_TEMP_HUM_REG (8585)
  75. #define TREE_CHN_SWITCH_STA_REG (8587)
  76. #define TREE_CHN_OPEN_DLA_REG (8651)
  77. #define TREE_CHN_CLOSE_DLA_REG (8715)
  78. #define TREE_SENSOR_REG (8779)
  79. #define TREE_DRY_REG (8795)
  80. #define TREE_BREKAER (8799)
  81. #define TREE_CHN_SET_OPEN_DLA_REG (9000)
  82. #define TREE_CHN_SET_CLOSE_DLA_REG (9064)
  83. #define TREE_CHN_SET_SWITCH_STA_REG (9128)
  84. #define TREE_ALL_SET_SWITCH_REG (9192)
  85. enum {
  86. TREE_R_DEV_CHN,
  87. TREE_R_INPUT_ALL_A,
  88. TREE_R_INPUT_ALL_B,
  89. TREE_R_INPUT_ALL_C,
  90. TREE_R_CHN_TOTAL,
  91. TREE_R_CHN_PH_INFO,
  92. TREE_R_TEMP_HUM,
  93. TREE_R_SWITCH_STA,
  94. TREE_R_OPEN_DELAY,
  95. TREE_R_CLOSE_DELAY,
  96. TREE_R_SENSOR,
  97. TREE_R_DRY,
  98. TREE_R_BREAKER,
  99. TREE_W_OPEN_DELAY,
  100. TREE_W_CLOSE_DELAY,
  101. TREE_W_CHN_SWITCH_STA,
  102. TREE_W_ALL_CHN_STA
  103. };
  104. static inline GlobalDeviceManager* get_dm(void)
  105. {
  106. return &__globalDeviceManage;
  107. }
  108. static inline GlobalDeviceManager* get_dm2(void)
  109. {
  110. return &__globalDeviceManage2;
  111. }
  112. static mmap_modbus_t modbus_single[] = {
  113. [DS_R_DEV_CHN ]{.offset = DEV_CHN_REG },
  114. [DS_R_OUT_INFO ]{.offset = OUT_INFO_REG },
  115. [DS_R_IN_TOTAL ]{.offset = IN_TOTAL_REG },
  116. [DS_R_TEMP_HUM ]{.offset = TEM_HUMAN_REG },
  117. [DS_R_SWITCH_STA ]{.offset = CHN_SWITCH_REG },
  118. [DS_R_OPEN_DELAY ]{.offset = CHN_OPEN_DLA_REG },
  119. [DS_R_CLOSE_DELAY ]{.offset = CHN_CLOSE_DLA_REG },
  120. [DS_R_SENSOR ]{.offset = SENSOR_REG },
  121. [DS_R_DRY ]{.offset = DRY_REG },
  122. [DS_R_BREAKER ]{.offset = BREAKER },
  123. [DS_W_OPEN_DELAY ]{.offset = CHN_SET_OPEN_DLA_REG },
  124. [DS_W_CLOSE_DELAY ]{.offset = CHN_SET_CLOSE_DLA_REG },
  125. [DS_W_CHN_SWITCH_STA]{.offset = CHN_SET_SWITCH_STA_REG },
  126. [DS_W_ALL_CHN_STA ]{.offset = ALL_SET_SWITCH_REG },
  127. };
  128. static mmap_modbus_t modbus_three[] = {
  129. [TREE_R_DEV_CHN ]{.offset = TREE_DEV_CHN_REG},
  130. [TREE_R_INPUT_ALL_A ]{.offset = TREE_INPUT_A_REG },
  131. [TREE_R_INPUT_ALL_B ]{.offset = TREE_INPUT_B_REG },
  132. [TREE_R_INPUT_ALL_C ]{.offset = TREE_INPUT_C_REG },
  133. [TREE_R_CHN_TOTAL ]{.offset = TREE_CHN_TOTAL_REG },
  134. [TREE_R_CHN_PH_INFO ]{.offset = TREE_CHN_PH_REG },
  135. [TREE_R_TEMP_HUM ]{.offset = TREE_TEMP_HUM_REG },
  136. [TREE_R_SWITCH_STA ]{.offset = TREE_CHN_SWITCH_STA_REG},
  137. [TREE_R_OPEN_DELAY ]{.offset = TREE_CHN_OPEN_DLA_REG },
  138. [TREE_R_CLOSE_DELAY ]{.offset = TREE_CHN_CLOSE_DLA_REG },
  139. [TREE_R_SENSOR ]{.offset = TREE_SENSOR_REG },
  140. [TREE_R_DRY ]{.offset = TREE_DRY_REG },
  141. [TREE_R_BREAKER ]{.offset = TREE_BREKAER },
  142. [TREE_W_OPEN_DELAY ]{.offset = TREE_CHN_SET_OPEN_DLA_REG},
  143. [TREE_W_CLOSE_DELAY ]{.offset = TREE_CHN_SET_CLOSE_DLA_REG},
  144. [TREE_W_CHN_SWITCH_STA ]{.offset = TREE_CHN_SET_SWITCH_STA_REG},
  145. [TREE_W_ALL_CHN_STA ]{.offset = TREE_ALL_SET_SWITCH_REG }
  146. };
  147. typedef struct {
  148. modbus_mapping_t *map;
  149. }slave_handle_t;
  150. static slave_handle_t slHandle;
  151. modbus_mapping_t *cascade_slave_map()
  152. {
  153. return slHandle.map;
  154. }
  155. int cascade_slave_init(void)
  156. {
  157. slave_handle_t *sh=&slHandle;
  158. GlobalDeviceManager* mgr=get_dm();
  159. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
  160. mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC) // single AC
  161. {
  162. if(sh->map)
  163. {
  164. free(sh->map);
  165. sh->map = NULL;
  166. }
  167. sh->map = modbus_mapping_new_start_address(0,0,0,0,DEV_CHN_REG,5000,0,0); //3000 ge
  168. modbus_single[DS_R_DEV_CHN ].addr = &mgr->single_mmap->dev_chn;
  169. modbus_single[DS_R_OUT_INFO ].addr = &mgr->single_mmap->all_ch;
  170. modbus_single[DS_R_IN_TOTAL ].addr = &mgr->single_mmap->total_valtage;
  171. modbus_single[DS_R_TEMP_HUM ].addr = &mgr->single_mmap->total_temp;
  172. modbus_single[DS_R_SWITCH_STA ].addr = &mgr->single_mmap->chn_status;
  173. modbus_single[DS_R_OPEN_DELAY ].addr = &mgr->single_mmap->open_delay;
  174. modbus_single[DS_R_CLOSE_DELAY ].addr = &mgr->single_mmap->close_delay;
  175. modbus_single[DS_R_SENSOR ].addr = &mgr->single_mmap->cas_sensor[0];
  176. modbus_single[DS_R_DRY ].addr = &mgr->single_mmap->d_node[0];
  177. modbus_single[DS_R_BREAKER ].addr = &mgr->single_mmap->breaker_value;
  178. modbus_single[DS_W_OPEN_DELAY ].addr = &mgr->single_mmap->set_chn_open_delay;
  179. modbus_single[DS_W_CLOSE_DELAY ].addr = &mgr->single_mmap->set_chn_close_delay;
  180. modbus_single[DS_W_CHN_SWITCH_STA ].addr = &mgr->single_mmap->set_chn_switch_status;
  181. modbus_single[DS_W_ALL_CHN_STA ].addr = &mgr->single_mmap->set_chn_all_switch_status;
  182. printf("single dc address init 4000\n");
  183. }else
  184. {
  185. if(sh->map)
  186. {
  187. free(sh->map);
  188. sh->map = NULL;
  189. }
  190. #ifndef NORTH_USER_SPECILS
  191. sh->map = modbus_mapping_new_start_address(0,0,0,0,TREE_DEV_CHN_REG,7000,0,0);
  192. modbus_three[TREE_R_DEV_CHN ].addr = &mgr->triphasic_mmap->dev_chn;
  193. modbus_three[TREE_R_INPUT_ALL_A ].addr = &mgr->triphasic_mmap->i_total.pw_i_total[0];
  194. modbus_three[TREE_R_INPUT_ALL_B ].addr = &mgr->triphasic_mmap->i_total.pw_i_total[1];
  195. modbus_three[TREE_R_INPUT_ALL_C ].addr = &mgr->triphasic_mmap->i_total.pw_i_total[2];
  196. modbus_three[TREE_R_CHN_TOTAL ].addr = &mgr->triphasic_mmap->chn_info;
  197. modbus_three[TREE_R_CHN_PH_INFO ].addr = &mgr->triphasic_mmap->pw_o_chn;
  198. modbus_three[TREE_R_TEMP_HUM ].addr = &mgr->triphasic_mmap->temperature;
  199. modbus_three[TREE_R_SWITCH_STA ].addr = &mgr->triphasic_mmap->chn_status;
  200. modbus_three[TREE_R_OPEN_DELAY ].addr = &mgr->triphasic_mmap->open_delay;
  201. modbus_three[TREE_R_CLOSE_DELAY ].addr = &mgr->triphasic_mmap->close_delay;
  202. modbus_three[TREE_R_SENSOR ].addr = &mgr->triphasic_mmap->cas_sensor[0];
  203. modbus_three[TREE_R_DRY ].addr = &mgr->triphasic_mmap->d_node[0];
  204. modbus_three[TREE_R_BREAKER ].addr = &mgr->triphasic_mmap->breaker_value;
  205. modbus_three[TREE_W_OPEN_DELAY ].addr = &mgr->triphasic_mmap->set_chn_open_delay;
  206. modbus_three[TREE_W_CLOSE_DELAY ].addr = &mgr->triphasic_mmap->set_chn_close_delay;
  207. modbus_three[TREE_W_CHN_SWITCH_STA ].addr = &mgr->triphasic_mmap->set_chn_switch_status;
  208. modbus_three[TREE_W_ALL_CHN_STA ].addr = &mgr->triphasic_mmap->set_chn_all_switch_status;
  209. #else
  210. sh->map = modbus_mapping_new_start_address(0,0,0,0,SPAECIL_USER_TOTAL_CONSUMER,4000,0,0);
  211. north_specil[N_SPAECIL_CON ].addr = &mgr->north_user.total_elec_energy;
  212. north_specil[N_SPAECIL_STA ].addr = &mgr->north_user.status_1_16;
  213. north_specil[N_SPAECIL_WANING ].addr = &mgr->north_user.total_wanning;
  214. north_specil[N_SPAECIL_SET ].addr = &mgr->north_user.set_1_16 ;
  215. #endif
  216. printf("triphasic address init 6000\n");
  217. //return -1;
  218. }
  219. return 0;
  220. }
  221. static void slave_read(slave_handle_t *sh, uint32_t addr,int num,uint32_t reg_type,uint32_t type)
  222. {
  223. GlobalDeviceManager* mgr=get_dm();
  224. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
  225. mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC){
  226. if(addr >= DEV_CHN_REG && addr <= ALL_SET_SWITCH_REG)
  227. {
  228. if(type == TYPE_U16)
  229. {
  230. uint16_t *base_addr = (uint16_t *)modbus_single[reg_type].addr;
  231. uint32_t step = addr - sh->map->start_registers;
  232. base_addr = base_addr + (addr - modbus_single[reg_type].offset);
  233. uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
  234. if(num < 126)
  235. {
  236. memcpy(map_addr, base_addr,2*num);
  237. }
  238. }else
  239. {
  240. uint32_t *base_addr = (uint32_t *)modbus_single[reg_type].addr;
  241. uint32_t step = addr - sh->map->start_registers;
  242. base_addr = base_addr + (addr - modbus_single[reg_type].offset) / 2;
  243. uint32_t *map_addr = (uint32_t *)&(sh->map->tab_registers[step]);
  244. if(num < 126)
  245. {
  246. memcpy(map_addr, base_addr,2*num);
  247. }
  248. }
  249. }
  250. }else
  251. {
  252. if(addr >= TREE_DEV_CHN_REG && addr <= TREE_ALL_SET_SWITCH_REG) {
  253. if(type == TYPE_U16)
  254. {
  255. uint16_t *base_addr = (uint16_t *)modbus_three[reg_type].addr;
  256. uint32_t step = addr - sh->map->start_registers;
  257. base_addr = base_addr + (addr - modbus_three[reg_type].offset);
  258. uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
  259. if(num < 126)
  260. {
  261. memcpy(map_addr, base_addr,2*num);
  262. }
  263. }else
  264. {
  265. uint32_t *base_addr = (uint32_t *)modbus_three[reg_type].addr;
  266. uint32_t step = addr - sh->map->start_registers;
  267. base_addr = base_addr + (addr - modbus_three[reg_type].offset) / 2;
  268. uint32_t *map_addr = (uint32_t *)&(sh->map->tab_registers[step]);
  269. if(num < 126)
  270. {
  271. memcpy(map_addr, base_addr,2*num);
  272. }
  273. }
  274. }
  275. }
  276. }
  277. void cascade_slave_read(uint32_t addr,uint32_t lenth)
  278. #ifdef NORTH_USER_SPECILS
  279. {
  280. slave_handle_t *sh=&slHandle;
  281. GlobalDeviceManager* mgr=get_dm();
  282. /*
  283. #define SPAECIL_USER_TOTAL_CONSUMER (40 )
  284. #define SPAECIL_USER_TOTAL_POWER (49 )
  285. #define SPAECIL_USER_STATUS (100 )
  286. #define SPAECIL_USER_STATUS_64 (103 )
  287. #define SPAECIL_USER_WANING (2000)
  288. #define SPAECIL_USER_FATAL_64 (2005)
  289. #define SPAECIL_USER_SET_1 (3001)
  290. #define SPAECIL_USER_SET_64 (3004)
  291. */
  292. switch(addr)
  293. {
  294. case SPAECIL_USER_TOTAL_CONSUMER ... SPAECIL_USER_TOTAL_POWER:
  295. {
  296. int step = addr - SPAECIL_USER_TOTAL_CONSUMER;
  297. uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[addr - SPAECIL_USER_TOTAL_CONSUMER]);
  298. uint16_t *offset_addr = (uint16_t*)(north_specil[N_SPAECIL_CON].addr) + step;
  299. memcpy(map_addr,offset_addr,lenth*2);
  300. }
  301. break;
  302. case SPAECIL_USER_STATUS ... SPAECIL_USER_STATUS_64:
  303. {
  304. int step = addr - SPAECIL_USER_STATUS;
  305. uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[addr - SPAECIL_USER_TOTAL_CONSUMER]);
  306. uint16_t *offset_addr = (uint16_t*)(north_specil[N_SPAECIL_STA].addr) + step;
  307. memcpy(map_addr,offset_addr,lenth*2);
  308. }
  309. break;
  310. case SPAECIL_USER_WANING ... SPAECIL_USER_FATAL_64:
  311. {
  312. int step = addr - SPAECIL_USER_WANING;
  313. uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[addr - SPAECIL_USER_TOTAL_CONSUMER]);
  314. uint16_t *offset_addr = (uint16_t*)(north_specil[N_SPAECIL_WANING].addr) + step;
  315. memcpy(map_addr,offset_addr,lenth*2);
  316. }
  317. break;
  318. default:
  319. break;
  320. }
  321. }
  322. #else
  323. {
  324. slave_handle_t *sh=&slHandle;
  325. switch (addr)
  326. {
  327. case 4000:
  328. slave_read(sh,addr,lenth,DS_R_DEV_CHN,TYPE_U16);
  329. break;
  330. case 4001 ... 4768:
  331. slave_read(sh,addr,lenth,DS_R_OUT_INFO,TYPE_U32);
  332. break;
  333. case 4769 ... 4776:
  334. slave_read(sh,addr,lenth,DS_R_IN_TOTAL,TYPE_U32);
  335. break;
  336. case 4777 ... 4778:
  337. slave_read(sh,addr,lenth,DS_R_TEMP_HUM,TYPE_U16);
  338. case 4779 ... 4842:
  339. slave_read(sh,addr,lenth,DS_R_SWITCH_STA,TYPE_U16);
  340. break;
  341. case 4843 ... 4906:
  342. slave_read(sh,addr,lenth,DS_R_OPEN_DELAY,TYPE_U16);
  343. break;
  344. case 4907 ... 4970:
  345. slave_read(sh,addr,lenth,DS_R_CLOSE_DELAY,TYPE_U16);
  346. break;
  347. case SENSOR_REG ... (DRY_REG-1):
  348. slave_read(sh,addr,lenth,DS_R_SENSOR,TYPE_U32);
  349. break;
  350. case DRY_REG ... BREAKER:
  351. slave_read(sh,addr,lenth,DS_R_DRY,TYPE_U16);
  352. break;
  353. case 5000 ... 5063:
  354. slave_read(sh,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
  355. break;
  356. case 5064 ... 5127:
  357. slave_read(sh,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
  358. break;
  359. case 5128 ... 5191:
  360. slave_read(sh,addr,lenth,DS_W_CHN_SWITCH_STA,TYPE_U16);
  361. break;
  362. case 5192 :
  363. slave_read(sh,addr,lenth,DS_W_ALL_CHN_STA,TYPE_U16);
  364. break;
  365. // triple
  366. case 6000:
  367. slave_read(sh,addr,lenth,TREE_R_DEV_CHN,TYPE_U16);
  368. break;
  369. case 6001 ... 6008:
  370. slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_A,TYPE_U32);
  371. break;
  372. case 6009 ... 6016:
  373. slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_B,TYPE_U32);
  374. break;
  375. case 6017 ... 6024:
  376. slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_C,TYPE_U32);
  377. break;
  378. case 6025 ... 6664:
  379. slave_read(sh,addr,lenth,TREE_R_CHN_TOTAL,TYPE_U32);
  380. break;
  381. case 6665 ... 8584:
  382. slave_read(sh,addr,lenth,TREE_R_CHN_PH_INFO,TYPE_U32);
  383. break;
  384. case 8585 ... 8586:
  385. slave_read(sh,addr,lenth,TREE_R_TEMP_HUM,TYPE_U16);
  386. break;
  387. case 8587 ... 8650:
  388. slave_read(sh,addr,lenth,TREE_R_SWITCH_STA,TYPE_U16);
  389. break;
  390. case 8651 ... 8714:
  391. slave_read(sh,addr,lenth,TREE_R_OPEN_DELAY,TYPE_U16);
  392. break;
  393. case 8715 ... 8778:
  394. slave_read(sh,addr,lenth,TREE_R_CLOSE_DELAY,TYPE_U16);
  395. break;
  396. case TREE_SENSOR_REG ... (TREE_DRY_REG-1):
  397. slave_read(sh,addr,lenth,TREE_R_SENSOR,TYPE_U32);
  398. break;
  399. case TREE_DRY_REG ... TREE_BREKAER:
  400. slave_read(sh,addr,lenth,TREE_R_DRY,TYPE_U16);
  401. break;
  402. default:
  403. break;
  404. }
  405. }
  406. #endif
  407. void cascade_slave_write(uint32_t addr, uint16_t val)
  408. #ifdef NORTH_USER_SPECILS
  409. {
  410. GlobalDeviceManager* mgr=get_dm();
  411. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC
  412. || mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC)
  413. {
  414. }else
  415. {
  416. switch(addr)
  417. {
  418. case SPAECIL_USER_SET_1 ... SPAECIL_USER_SET_64:
  419. {
  420. int step = addr - SPAECIL_USER_SET_1;
  421. uint16_t * offset_addr = (uint16_t*)(north_specil[N_SPAECIL_STA].addr + step);
  422. uint16_t buff[16] = {0};
  423. if(*offset_addr != val)
  424. {
  425. uint16_t data = (*offset_addr ^ val);
  426. for(int i = 0; i < 16;i++)
  427. {
  428. if(data & (1 << i))
  429. {
  430. //buff[i] = 1;
  431. if(val & (1 << i))
  432. {
  433. // open
  434. buff[i] = OPEN;
  435. }else
  436. {
  437. // close
  438. buff[i] = CLOSE;
  439. }
  440. }
  441. }
  442. for(int i = 0; i < 16;i++)
  443. {
  444. if(buff[i])
  445. {
  446. int start_chn = step*16 + i;
  447. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  448. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list){
  449. if(_globalPowerMangerTemp==NULL)
  450. break;
  451. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  452. {
  453. int t_ac_CtrlType=0;
  454. int nRet = 0;
  455. uint16_t write_data = buff[i] == OPEN ? 1 : 0;
  456. _globalPowerMangerTemp->product_ch_status = write_data;
  457. GlobalTreeACManager *_globalTACManager = NULL;
  458. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  459. {
  460. t_ac_CtrlType=_globalTACManager->product_ph_outputType;
  461. }
  462. if (t_ac_CtrlType == 2&&(__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
  463. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
  464. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B))
  465. {
  466. if(_globalPowerMangerTemp->product_ch_type == AC_SINGLE_S_TYPE || _globalPowerMangerTemp->product_ch_type == AC_SINGLE_B_TYPE)
  467. {
  468. if (write_data == 1)
  469. {
  470. if (_globalPowerMangerTemp->global_over_manager.product_vol_upper_enable == 1)
  471. write_data |= ENABLE_TAC_V_UP;
  472. if (_globalPowerMangerTemp->global_over_manager.product_vol_lower_enable == 1)
  473. write_data |= ENABLE_TAC_V_DOWN;
  474. if (_globalPowerMangerTemp->global_over_manager.product_cur_upper_enable == 1)
  475. write_data |= ENABLE_TAC_A_UP;
  476. if (_globalPowerMangerTemp->global_over_manager.product_pwr_upper_enable == 1)
  477. write_data |= ENABLE_TAC_W_UP;
  478. if (_globalPowerMangerTemp->global_over_manager.product_pwrcon_upper_enable == 1)
  479. write_data |= ENABLE_TAC_P_UP;
  480. }
  481. g_switch_set_ac_single_s_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr,
  482. (_globalPowerMangerTemp->product_ch_addr- 1), write_data);
  483. break;
  484. }
  485. unsigned short phsts=0;
  486. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  487. {
  488. if (write_data == 1 && _globalTACManager->product_ph_outputStatus==1)
  489. {
  490. phsts=1;
  491. if (_globalTACManager->global_over_manager.product_vol_upper_enable == 1)
  492. phsts |= ENABLE_TAC_V_UP;
  493. if (_globalTACManager->global_over_manager.product_vol_lower_enable == 1)
  494. phsts |= ENABLE_TAC_V_DOWN;
  495. if (_globalTACManager->global_over_manager.product_cur_upper_enable == 1)
  496. phsts |= ENABLE_TAC_A_UP;
  497. if (_globalTACManager->global_over_manager.product_pwr_upper_enable == 1)
  498. phsts |= ENABLE_TAC_W_UP;
  499. if (_globalTACManager->global_over_manager.product_pwrcon_upper_enable == 1)
  500. phsts |= ENABLE_TAC_P_UP;
  501. }else{
  502. phsts=0;
  503. }
  504. nRet= g_switch_set_t_ac_phchn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  505. _globalTACManager->product_saddr,
  506. _globalTACManager->product_ch_addr - 1,
  507. phsts);
  508. }
  509. g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, write_data);
  510. break;
  511. }else
  512. {
  513. if (write_data == 1)
  514. {
  515. if (_globalPowerMangerTemp->global_over_manager.product_vol_upper_enable == 1)
  516. write_data |= ENABLE_TAC_V_UP;
  517. if (_globalPowerMangerTemp->global_over_manager.product_vol_lower_enable == 1)
  518. write_data |= ENABLE_TAC_V_DOWN;
  519. if (_globalPowerMangerTemp->global_over_manager.product_cur_upper_enable == 1)
  520. write_data |= ENABLE_TAC_A_UP;
  521. if (_globalPowerMangerTemp->global_over_manager.product_pwr_upper_enable == 1)
  522. write_data |= ENABLE_TAC_W_UP;
  523. if (_globalPowerMangerTemp->global_over_manager.product_pwrcon_upper_enable == 1)
  524. write_data |= ENABLE_TAC_P_UP;
  525. }
  526. /*
  527. if (isgroup)
  528. {
  529. sts |= ENABLE_TAC_STIME;
  530. sts |= ENABLE_TAC_ETIME;
  531. }*/
  532. if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
  533. {
  534. g_switch_set_t_ac_phchn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  535. _globalPowerMangerTemp->product_saddr,
  536. _globalPowerMangerTemp->product_ch_addr - 1,
  537. write_data);
  538. }else{
  539. g_switch_set_t_ac_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  540. _globalPowerMangerTemp->product_saddr,
  541. _globalPowerMangerTemp->product_ch_addr - 1,
  542. write_data);
  543. }
  544. }
  545. }
  546. }
  547. ////////////////////////////////////////////////////////////////
  548. // if(buff[i] == OPEN)
  549. // {
  550. // *offset_addr |= (1 << i);
  551. // }else
  552. // {
  553. // *offset_addr &= ~(1 << i);
  554. // }
  555. buff[i] = 0;
  556. }
  557. }
  558. }
  559. }
  560. break;
  561. default:
  562. break;
  563. }
  564. }
  565. }
  566. #else
  567. {
  568. slave_handle_t *sh=&slHandle;
  569. GlobalDeviceManager* mgr=get_dm();
  570. uint16_t buff[128] = {0};
  571. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC
  572. || mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC)
  573. {
  574. switch(addr)
  575. {
  576. case 5000 ... 5063:
  577. {
  578. int start_chn = addr - modbus_single[DS_W_OPEN_DELAY].offset;
  579. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  580. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  581. {
  582. if(_globalPowerMangerTemp==NULL)
  583. break;
  584. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  585. {
  586. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC){
  587. _globalPowerMangerTemp->product_ch_start_delay=val;
  588. g_switch_set_ac_single_s_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
  589. _globalPowerMangerTemp->product_ch_addr,val);
  590. }else
  591. {
  592. _globalPowerMangerTemp->product_ch_start_delay=val;
  593. g_switch_set_dcpdu_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
  594. _globalPowerMangerTemp->product_ch_addr,val/1000);
  595. }
  596. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  597. {
  598. log_e("update pwr general data err.");
  599. }
  600. printf("val = %d start_chn = %d\n",val,start_chn);
  601. // *(uint16_t *)((uint16_t*)(modbus_single[6].addr) + start_chn) = val;
  602. break;
  603. }
  604. }
  605. }
  606. break;
  607. case 5064 ... 5127:
  608. {
  609. int start_chn = addr - modbus_single[DS_W_CLOSE_DELAY].offset;
  610. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  611. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  612. {
  613. if(_globalPowerMangerTemp==NULL)
  614. break;
  615. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  616. {
  617. if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC){
  618. _globalPowerMangerTemp->product_ch_stop_delay=val;
  619. g_switch_set_ac_single_s_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
  620. _globalPowerMangerTemp->product_ch_addr,val);
  621. }else
  622. {
  623. _globalPowerMangerTemp->product_ch_stop_delay=val;
  624. g_switch_set_dcpdu_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
  625. _globalPowerMangerTemp->product_ch_addr,val/1000);
  626. }
  627. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  628. {
  629. log_e("update pwr general data err.");
  630. }
  631. printf("val = %d",val);
  632. //*(uint16_t *)((uint16_t*)(modbus_single[7].addr) + start_chn) = val;
  633. //printf("modbus_single[7].addr = %d ",modbus_single[7].addr);
  634. break;
  635. }
  636. }
  637. }
  638. break;
  639. case 5128 ... 5191:
  640. {
  641. int start_chn = addr - modbus_single[DS_W_CHN_SWITCH_STA].offset;
  642. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  643. if (val == 0 || val == 1)
  644. {
  645. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  646. {
  647. if (_globalPowerMangerTemp == NULL)
  648. break;
  649. if ((start_chn + 1) == _globalPowerMangerTemp->product_ch_id)
  650. {
  651. int ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
  652. _globalPowerMangerTemp->product_saddr,
  653. _globalPowerMangerTemp->product_ch_addr,
  654. val, false);
  655. // printf("ret = %d 0x%x\n",ret,val);
  656. *(uint16_t *)((uint16_t *)(modbus_single[DS_W_CHN_SWITCH_STA].addr) + start_chn) = val;
  657. break;
  658. }
  659. }
  660. }
  661. }
  662. break;
  663. case 5192:
  664. {
  665. if (val == 0 || val == 1)
  666. {
  667. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  668. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  669. {
  670. if (_globalPowerMangerTemp == NULL)
  671. break;
  672. int rec = g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_ch_type, _globalPowerMangerTemp->product_saddr, val);
  673. // printf("rec = %d 0x%x\n",rec,val);
  674. }
  675. *(uint16_t *)(modbus_single[DS_W_ALL_CHN_STA].addr) = val;
  676. }
  677. }
  678. break;
  679. default:
  680. break;
  681. }
  682. }else{
  683. switch(addr)
  684. {
  685. case 9000 ... 9063:
  686. {
  687. int start_chn = addr - modbus_three[TREE_W_OPEN_DELAY].offset;
  688. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  689. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list){
  690. if(_globalPowerMangerTemp==NULL)
  691. break;
  692. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  693. {
  694. int ret = 0;
  695. _globalPowerMangerTemp->product_ch_start_delay = val;
  696. if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
  697. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
  698. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B
  699. )
  700. {
  701. printf("hwllo every one stop time !!!!\n");
  702. ret = g_switch_set_t_ac_start_time_delay(&__globalDeviceManage._globalRelaySampManger,
  703. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3, val / 1000);
  704. ret = g_switch_set_t_ac_start_time_delay(&__globalDeviceManage._globalRelaySampManger,
  705. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3 + 1, val / 1000);
  706. ret = g_switch_set_t_ac_start_time_delay(&__globalDeviceManage._globalRelaySampManger,
  707. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3 + 2, val / 1000);
  708. }
  709. else
  710. {
  711. ret = g_switch_set_t_ac_start_time_delay(&__globalDeviceManage._globalRelaySampManger,
  712. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3, val / 1000);
  713. }
  714. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  715. {
  716. log_e("update pwr general data err.");
  717. }
  718. break;
  719. }
  720. }
  721. }
  722. break;
  723. case 9064 ... 9127:
  724. {
  725. int start_chn = addr - modbus_three[TREE_W_CLOSE_DELAY].offset;
  726. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  727. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  728. {
  729. if(_globalPowerMangerTemp==NULL)
  730. break;
  731. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  732. {
  733. int ret = 0;
  734. _globalPowerMangerTemp->product_ch_stop_delay = val;
  735. if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
  736. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
  737. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
  738. {
  739. ret = g_switch_set_t_ac_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,
  740. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3, val / 1000);
  741. ret = g_switch_set_t_ac_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,
  742. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3 + 1, val / 1000);
  743. ret = g_switch_set_t_ac_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,
  744. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3 + 2, val / 1000);
  745. }
  746. else
  747. {
  748. ret = g_switch_set_t_ac_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,
  749. _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3, val / 1000);
  750. }
  751. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  752. {
  753. log_e("update pwr general data err.");
  754. }
  755. break;
  756. }
  757. }
  758. }
  759. break;
  760. case 9128 ... 9191:
  761. {
  762. int start_chn = addr - modbus_three[TREE_W_CHN_SWITCH_STA].offset;
  763. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  764. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list){
  765. if(_globalPowerMangerTemp==NULL)
  766. break;
  767. if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
  768. {
  769. int t_ac_CtrlType=0;
  770. int nRet = 0;
  771. _globalPowerMangerTemp->product_ch_status = val;
  772. GlobalTreeACManager *_globalTACManager = NULL;
  773. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  774. {
  775. t_ac_CtrlType=_globalTACManager->product_ph_outputType;
  776. }
  777. if (t_ac_CtrlType == 2&&(__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
  778. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
  779. ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B))
  780. {
  781. if(_globalPowerMangerTemp->product_ch_type == AC_SINGLE_S_TYPE || _globalPowerMangerTemp->product_ch_type == AC_SINGLE_B_TYPE)
  782. {
  783. if (val == 1)
  784. {
  785. if (_globalPowerMangerTemp->global_over_manager.product_vol_upper_enable == 1)
  786. val |= ENABLE_TAC_V_UP;
  787. if (_globalPowerMangerTemp->global_over_manager.product_vol_lower_enable == 1)
  788. val |= ENABLE_TAC_V_DOWN;
  789. if (_globalPowerMangerTemp->global_over_manager.product_cur_upper_enable == 1)
  790. val |= ENABLE_TAC_A_UP;
  791. if (_globalPowerMangerTemp->global_over_manager.product_pwr_upper_enable == 1)
  792. val |= ENABLE_TAC_W_UP;
  793. if (_globalPowerMangerTemp->global_over_manager.product_pwrcon_upper_enable == 1)
  794. val |= ENABLE_TAC_P_UP;
  795. }
  796. g_switch_set_ac_single_s_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr,
  797. (_globalPowerMangerTemp->product_ch_addr- 1), val);
  798. break;
  799. }
  800. unsigned short phsts=0;
  801. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  802. {
  803. if (val == 1 && _globalTACManager->product_ph_outputStatus==1)
  804. {
  805. phsts=1;
  806. if (_globalTACManager->global_over_manager.product_vol_upper_enable == 1)
  807. phsts |= ENABLE_TAC_V_UP;
  808. if (_globalTACManager->global_over_manager.product_vol_lower_enable == 1)
  809. phsts |= ENABLE_TAC_V_DOWN;
  810. if (_globalTACManager->global_over_manager.product_cur_upper_enable == 1)
  811. phsts |= ENABLE_TAC_A_UP;
  812. if (_globalTACManager->global_over_manager.product_pwr_upper_enable == 1)
  813. phsts |= ENABLE_TAC_W_UP;
  814. if (_globalTACManager->global_over_manager.product_pwrcon_upper_enable == 1)
  815. phsts |= ENABLE_TAC_P_UP;
  816. }else{
  817. phsts=0;
  818. }
  819. nRet= g_switch_set_t_ac_phchn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  820. _globalTACManager->product_saddr,
  821. _globalTACManager->product_ch_addr - 1,
  822. phsts);
  823. }
  824. g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, val);
  825. break;
  826. }else
  827. {
  828. if (val == 1)
  829. {
  830. if (_globalPowerMangerTemp->global_over_manager.product_vol_upper_enable == 1)
  831. val |= ENABLE_TAC_V_UP;
  832. if (_globalPowerMangerTemp->global_over_manager.product_vol_lower_enable == 1)
  833. val |= ENABLE_TAC_V_DOWN;
  834. if (_globalPowerMangerTemp->global_over_manager.product_cur_upper_enable == 1)
  835. val |= ENABLE_TAC_A_UP;
  836. if (_globalPowerMangerTemp->global_over_manager.product_pwr_upper_enable == 1)
  837. val |= ENABLE_TAC_W_UP;
  838. if (_globalPowerMangerTemp->global_over_manager.product_pwrcon_upper_enable == 1)
  839. val |= ENABLE_TAC_P_UP;
  840. }
  841. /*
  842. if (isgroup)
  843. {
  844. sts |= ENABLE_TAC_STIME;
  845. sts |= ENABLE_TAC_ETIME;
  846. }*/
  847. if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
  848. {
  849. g_switch_set_t_ac_phchn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  850. _globalPowerMangerTemp->product_saddr,
  851. _globalPowerMangerTemp->product_ch_addr - 1,
  852. val);
  853. }else{
  854. g_switch_set_t_ac_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  855. _globalPowerMangerTemp->product_saddr,
  856. _globalPowerMangerTemp->product_ch_addr - 1,
  857. val);
  858. }
  859. }
  860. }
  861. }
  862. }
  863. break;
  864. case 9192:
  865. {
  866. if (val == 0 || val == 1)
  867. {
  868. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  869. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  870. {
  871. if (_globalPowerMangerTemp == NULL)
  872. break;
  873. _globalPowerMangerTemp->product_ch_status = val;
  874. int rec = g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_ch_type, _globalPowerMangerTemp->product_saddr, val);
  875. // printf("rec = %d 0x%x\n",rec,val);
  876. g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, val);
  877. }
  878. }
  879. }
  880. break;
  881. default:
  882. break;
  883. }
  884. }
  885. }
  886. #endif