communication.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. #include "onechip_include_header.h"
  2. char DeviceNum[64] = "mini7 2312230001 v1.1, ";
  3. uint8_t pc_send_wait = 0; //数据发送等待,0可以立即发送;>0正在发送请等待
  4. uint8_t pc_send_cmd = 0; //当前发送cmd
  5. static unsigned char seq =0;
  6. extern uint8_t wifi_tx_buf[WIFI_TX_BUF_SIZE];
  7. extern uint16_t wifi_tx_len;
  8. unsigned int check_to_pc_busy(void){
  9. /*判断是否可以发送,缓冲区为空或者索引为0*/
  10. CmdMessage *pMessage = (CmdMessage *)wifi_tx_buf;
  11. if(pMessage->seq == 0 || pMessage->len == 0){
  12. return 1;
  13. }
  14. return 0;
  15. }
  16. /********************************************************************
  17. * uint16_t data_send_to_pc(enum pc_cmd_type cmd, char *data, uint16_t len)
  18. *
  19. *描述:发生数据到PC
  20. *参数:Devicenum 0-发至主机,1发至从机
  21. *返回:无
  22. *其他:无
  23. *--------------------------------------------------------------------
  24. *记录:
  25. ********************************************************************/
  26. CmdMessage msg;
  27. int data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len)
  28. {
  29. uint16_t check;
  30. int ret = -1;
  31. msg.head = 0x55aa;
  32. msg.seq = CDM_FRAME_TYPE_REQ;
  33. msg.cmd = cmd;
  34. msg.tail = 0x5a;
  35. msg.len = len;
  36. msg.data = data;
  37. if((len+8) > WIFI_TX_BUF_SIZE){
  38. Van_Device_Printf(VAN_LOG_COMM,"send_to_pc :%x len:%d error ", cmd, len);
  39. return ret;
  40. }
  41. if(sysinf.pc_channel_recv == PC_CONNECT_TYPE_NULL && cmd != PC_CMD_SETIP){
  42. /*无链接情况,只考虑*/
  43. return ret;
  44. }
  45. if((sysinf.pc_channel_recv == PC_CONNECT_TYPE_WIFI && PC_CMD_DATASCOPE == cmd)|| /*网口不上报数据*/
  46. (sysinf.pc_channel_recv == PC_CONNECT_TYPE_UART && PC_CMD_SETIP == cmd)) /*串口不广播UDP*/{
  47. return ret;
  48. }
  49. switch(cmd)
  50. {
  51. case PC_CMD_QRCODE:
  52. case PC_CMD_DATA_UPLOAD:
  53. case PC_CMD_REPORT_RESULT:
  54. seq++;
  55. if(0xff == seq){
  56. seq =1;
  57. }
  58. msg.seq = seq;
  59. break;
  60. default: //应答
  61. break;
  62. }
  63. check = checkSum((const unsigned char *)&msg.seq, 4);
  64. check += checkSum((const unsigned char *)data, len);
  65. msg.checksum = check & 0xFF;
  66. msg.tail = (check >> 8);
  67. if(check_to_pc_busy()){
  68. memcpy(&wifi_tx_buf[0], (uint8_t*)&msg, MSG_CMDFRAME_LEN);
  69. memcpy(&wifi_tx_buf[MSG_CMDFRAME_LEN], data, len);
  70. memcpy(&wifi_tx_buf[MSG_CMDFRAME_LEN+len], (uint8_t*)&check, 2);
  71. wifi_tx_len = MSG_CMDFRAME_LEN+len+2;
  72. }else{
  73. return ret;
  74. }
  75. if((sysinf.pc_channel_recv == PC_CONNECT_TYPE_WIFI || cmd == PC_CMD_SETIP ) && PC_CMD_SETWIFI != cmd)
  76. {
  77. return WIFI_ReSend();
  78. }
  79. else
  80. {
  81. Van_Debug_UART_Send_DMA((unsigned char *)wifi_tx_buf, wifi_tx_len); //将收到的信息发送出
  82. memset(wifi_tx_buf, 0, sizeof(wifi_tx_buf));
  83. }
  84. return 0;
  85. }
  86. void PackDeviceNum(void){
  87. int len = 0;
  88. memset((uint8_t *)&DeviceNum, 0 ,sizeof(DeviceNum));
  89. uint32_t uid[3];
  90. uid[0] = HAL_GetUIDw0(); // 读取低32位[reference:16]
  91. uid[1] = HAL_GetUIDw1(); // 读取中间32位[reference:17]
  92. uid[2] = HAL_GetUIDw2(); // 读取高32位[reference:18]
  93. #ifdef ONECHIP_MINI_ONE
  94. my_sprintf(&DeviceNum[len],sizeof(DeviceNum), "Mini7-one,V%d.%d.%d.%d",SOFT_VERSION_1,SOFT_VERSION_2,SOFT_VERSION_3,SOFT_VERSION_4);
  95. #else
  96. #ifdef ONECHIP_MINI_PLUS
  97. my_sprintf(&DeviceNum[len],sizeof(DeviceNum), "Mini7-plus,V%d.%d.%d.%d",SOFT_VERSION_1,SOFT_VERSION_2,SOFT_VERSION_3,SOFT_VERSION_4);
  98. #else
  99. my_sprintf(&DeviceNum[len],sizeof(DeviceNum), "Mini7,V%d.%d.%d.%d",SOFT_VERSION_1,SOFT_VERSION_2,SOFT_VERSION_3,SOFT_VERSION_4);
  100. #endif //ONECHIP_MINI_PLUS
  101. #endif //ONECHIP_MINI_ONE
  102. strcat(DeviceNum, ",");
  103. len = strlen(DeviceNum);
  104. hex_to_ascii((const void *)uid, &DeviceNum[len], 12); //uid
  105. strcat(DeviceNum, ",");
  106. strcat(DeviceNum, (const char *)sysinf.SN);
  107. strcat(DeviceNum, " ");
  108. Van_Device_Printf(VAN_LOG_INFO,"DeviceNum:%s\n", DeviceNum);
  109. }
  110. /********************************************************************
  111. * uint16_t send_Devinf_pc(void)
  112. *
  113. *描述:发送设备信息到主机,便于主机下法TCP信息
  114. *参数:无
  115. *返回:无
  116. *其他:无
  117. *--------------------------------------------------------------------
  118. *记录:
  119. ********************************************************************/
  120. void send_Devinf_pc(void)
  121. {
  122. uint16_t len = 0;
  123. len = strlen(DeviceNum);
  124. data_send_to_pc(PC_CMD_SETIP,DeviceNum,len);
  125. }
  126. /********************************************************************
  127. * int handshake_action(unsigned char cmd, unsigned char *parg)
  128. *
  129. *描述:握手命令处理
  130. *参数:无
  131. *返回:无
  132. *其他:无
  133. *--------------------------------------------------------------------
  134. *记录:
  135. ********************************************************************/
  136. int handshake_action(unsigned char cmd, unsigned char *parg)
  137. {
  138. sysinf.system_OnlineFlag = true;
  139. return 0;
  140. }
  141. void char_replace(unsigned char *str, int size, unsigned char ch, unsigned char replace)
  142. {
  143. for(int i = 0; i < size; i++)
  144. {
  145. if(str[i] == ch)
  146. str[i] = replace;
  147. }
  148. }
  149. /********************************************************************
  150. * int wifi_action(unsigned char cmd, unsigned char *parg)
  151. *
  152. *描述:设置wifi命令处理
  153. *参数:无
  154. *返回:无
  155. *其他:无
  156. *--------------------------------------------------------------------
  157. *记录:
  158. ********************************************************************/
  159. int wifi_action(unsigned char cmd, unsigned char *parg)
  160. {
  161. strcpy(sysinf.wifiname, (const char *)parg);
  162. strcpy(sysinf.password, (const char *)(parg + WIFI_AP_NAME_MAX_LEN));
  163. // wifi用户名和密码设置
  164. WIFI_set_ssid();
  165. return 1;
  166. }
  167. int setState_action(unsigned char cmd, unsigned char *parg)
  168. {
  169. unsigned char block = *parg++;
  170. unsigned char nextState = *parg;
  171. if(SYS_STATE_WORKEND == nextState){
  172. if(block==0){
  173. sysinf.psmMaster.state = SW_move_card;
  174. }else{
  175. /*下发命令,改变从模块状态*/
  176. sysinf.psmSlave.state = SW_move_card;
  177. }
  178. }
  179. return 1;
  180. }
  181. /********************************************************************
  182. * int wifi_action(unsigned char cmd, unsigned char *parg)
  183. *
  184. *描述:设置wifi命令处理
  185. *参数:无
  186. *返回:无
  187. *其他:无
  188. *--------------------------------------------------------------------
  189. *记录:
  190. ********************************************************************/
  191. int SN_action(unsigned char cmd, unsigned char *parg)
  192. {
  193. parg[15] = 0;
  194. strcpy((char *)sysinf.SN, (const char *)parg);
  195. // PackDeviceNum();
  196. return cfg_save_cfg_param();
  197. }
  198. /********************************************************************
  199. * int seq_selftest_action(unsigned char cmd, unsigned char *parg)
  200. *
  201. *描述:设备自检处理
  202. *参数:无
  203. *返回:无
  204. *其他:无
  205. *--------------------------------------------------------------------
  206. *记录:
  207. ********************************************************************/
  208. int seq_selftest_action(unsigned char cmd, unsigned char *parg)
  209. {
  210. return 0;
  211. }
  212. /********************************************************************
  213. * int confirm_result_action(unsigned char cmd, unsigned char *parg)
  214. *
  215. *描述:设备收到pc的结果响应
  216. *参数:无
  217. *返回:无
  218. *其他:无
  219. *--------------------------------------------------------------------
  220. *记录:
  221. ********************************************************************/
  222. int confirm_result_action(unsigned char cmd, unsigned char *parg)
  223. {
  224. // if(0 == memcmp(parg,sysinf.psmMaster.card_param_info.pid, 10 )){
  225. // sysinf.psmMaster.state = SW_move_card;
  226. // }else if (0 == memcmp(parg,sysinf.psmSlave.card_param_info.pid, 10 ))
  227. // {
  228. // sysinf.psmSlave.state = SW_move_card;
  229. // }
  230. return 0;
  231. }
  232. /********************************************************************
  233. * int default_pc_response(struct CmdMessage *pMsg, unsigned char result)
  234. *
  235. *描述:默认回应PC
  236. *参数:无
  237. *返回:成功->0 失败->-1
  238. *其他:无
  239. *--------------------------------------------------------------------
  240. *记录:
  241. ********************************************************************/
  242. int default_pc_response(CmdMessage *pMsg, unsigned char result)
  243. {
  244. return data_send_to_pc((pc_cmd_type)pMsg->cmd, (char *)&result, 1);
  245. }
  246. /********************************************************************
  247. * int handshake_response(struct CmdMessage *pMsg, unsigned char result)
  248. *
  249. *描述:握手回应
  250. *参数:无
  251. *返回:无
  252. *其他:无
  253. *--------------------------------------------------------------------
  254. *记录:
  255. ********************************************************************/
  256. int handshake_response(CmdMessage *pMsg, unsigned char result)
  257. {
  258. unsigned short len = 0;
  259. PackDeviceNum();
  260. len = strlen(DeviceNum);
  261. return data_send_to_pc((pc_cmd_type)pMsg->cmd, (char*)DeviceNum, len);
  262. }
  263. int AskState_response(CmdMessage *pMsg, unsigned char result)
  264. {
  265. stateinfDef st;
  266. st.amplifState =sysinf.amplifState;
  267. st.lysisState =sysinf.lysisState;
  268. memcpy(st.SN, &sysinf.SN, 7);
  269. data_send_to_pc(PC_CMD_ASKSTATE, (char *)&st, sizeof(stateinfDef));
  270. return 0;
  271. }
  272. int set_response(CmdMessage *pMsg, unsigned char result)
  273. {
  274. // char wifi_result = 1;
  275. // data_send_to_pc(PC_CMD_SETWIFI, &wifi_result, 1);
  276. return 0;
  277. }
  278. int setState_response(CmdMessage *pMsg, unsigned char result)
  279. {
  280. // char result = 1;
  281. data_send_to_pc(PC_CMD_SETSTATE, (char *)&result, 1);
  282. return 0;
  283. }
  284. int ans_response(CmdMessage *pMsg, unsigned char result)
  285. {
  286. /*清空需要上位机应答的消息*/
  287. switch(pMsg->cmd){
  288. case PC_CMD_REPORT_REEOR:
  289. sysinf.updateError = 0;
  290. break;
  291. case PC_CMD_UPDATESTATE:
  292. sysinf.updateSt = 0;
  293. break;
  294. case PC_CMD_QRCODE:
  295. sysinf.updateQR = false;
  296. break;
  297. case PC_CMD_DATA_UPLOAD:{
  298. unsigned char *data = (unsigned char *)pMsg->data;
  299. unsigned int recdex = 0xfffffff;
  300. // unsigned char result = *data;
  301. // unsigned char part = *(data+1);
  302. if( pMsg->len == 6){
  303. recdex = *(data+5);
  304. recdex = recdex<<8;
  305. recdex += *(data+4);
  306. recdex = recdex<<8;
  307. recdex += *(data+3);
  308. recdex = recdex<<8;
  309. recdex += *(data+2);
  310. }else{
  311. if(seq == pMsg->seq){
  312. recdex = 0;
  313. }
  314. }
  315. updateData_next(recdex,data);
  316. }
  317. break;
  318. case PC_CMD_REPORT_RESULT:{
  319. // unsigned char result = *data;
  320. // unsigned char part = *(data+1);
  321. clean_reult_next((unsigned char *)pMsg->data);
  322. // if(result){
  323. // /*消息成功,进行跟新*/
  324. // clean_reult_next(part);
  325. // }
  326. }
  327. break;
  328. }
  329. return 0;
  330. }
  331. int confirm_qrcode_action(unsigned char cmd, unsigned char *parg)
  332. {
  333. //先判断主模块,优先给主模块,扫描上报上报也是相同处理
  334. svanner_receive_Rec_Start(sysinf.scannerUart);
  335. if(*parg == 1)
  336. {
  337. if((sysinf.psmMaster.state == SW_Scan_Qrcode || sysinf.psmMaster.state == SW_Chip_Id )) //主机空闲,给自己
  338. {
  339. sysinf.psmMaster.controlword = Scan_Qrcode_cmd;
  340. Van_Device_Printf(VAN_LOG_INFO,"Master rec start\n\r:");
  341. return 0;
  342. }else {
  343. #ifdef ONECHIP_MINI_PLUSE
  344. if((sysinf.psmSlave.state == SW_Scan_Qrcode || sysinf.psmSlave.state == SW_Chip_Id )){
  345. sysinf.psmSlave.controlword = Scan_Qrcode_cmd;
  346. Van_Device_Printf(VAN_LOG_INFO,"Slave rec start\n\r:");
  347. return 0;
  348. }
  349. #endif
  350. }
  351. Van_Device_Printf(VAN_LOG_INFO, "master:%d slave:%d Not in startState\n\r:",sysinf.psmMaster.state,sysinf.psmSlave.state );
  352. return -1;
  353. }
  354. Van_Device_Printf(VAN_LOG_INFO, "rec no macth\n\r:");
  355. return -1;
  356. }
  357. int confirm_error_action(unsigned char cmd, unsigned char *parg)
  358. {
  359. return 0;
  360. }
  361. int confirm_data_action(unsigned char cmd, unsigned char *parg)
  362. {
  363. return 0;
  364. }
  365. /********************************************************************
  366. * int set_IP_action(uint8_t cmd, uint8_t *parg)
  367. *
  368. *描述:设置IP
  369. *参数:无
  370. *返回:无
  371. *其他:无
  372. *--------------------------------------------------------------------
  373. *记录:
  374. ********************************************************************/
  375. int set_IP_action(uint8_t cmd, uint8_t *parg)
  376. {
  377. if(sysinf.connectTcpFlag == 0){
  378. /*TCP 链接状态下,不跟新IP地址*/
  379. memset(sysinf.TCP_IP_Addr,0,sizeof(sysinf.TCP_IP_Addr));
  380. memset(sysinf.TCP_IP_PORT,0,sizeof(sysinf.TCP_IP_PORT));
  381. unsigned int data_len = strlen((const char *)parg);
  382. unsigned int i=0;
  383. if(parg[i]<'0' || parg[i]>'9'){
  384. return 0;
  385. }
  386. for(;i<data_len;i++){
  387. if(parg[i] != ':'){
  388. sysinf.TCP_IP_Addr[i] = parg[i];
  389. }else{
  390. break;
  391. }
  392. }
  393. i++;
  394. unsigned int j =0;
  395. if(parg[i]<'0' || parg[i]>'9'){
  396. return 0;
  397. }
  398. for(;i<data_len;i++){
  399. if(parg[i] != ':'){
  400. sysinf.TCP_IP_PORT[j++] = parg[i];
  401. }else{
  402. break;
  403. }
  404. }
  405. if(sysinf.TCP_IP_Addr[0]){
  406. sysinf.connectTcpFlag = 1;
  407. }
  408. WIFI_set_CloseConnect();
  409. }
  410. return 0;
  411. }
  412. int send_temp_parm(uint8_t cmd, uint8_t *parg)
  413. {
  414. /*设置温度*/
  415. sysinf.lysis.idletemp = *(float *)(parg+4);
  416. sysinf.lysis.pid.goal = *(float *)(parg+8);
  417. sysinf.lysis.worktime = *(float *)(parg+12);
  418. sysinf.lysis.worktime *= 10;
  419. sysinf.lysis.recGoalFlag = 1;
  420. return 1;
  421. }
  422. int setTemp_response(CmdMessage *pMsg, uint8_t result)
  423. {
  424. // char result = 1;
  425. data_send_to_pc(PC_CMD_SETRUNTEMP, (char *)&result, 1);
  426. return 0;
  427. }
  428. const struct PCActionPack mPCActionPack[] =
  429. {
  430. {
  431. .cmd = PC_CMD_HANDSHAKE,
  432. .action = handshake_action,
  433. .response = handshake_response,
  434. .datalen = 0,
  435. },
  436. {
  437. .cmd = PC_CMD_SETWIFI,
  438. .action = wifi_action,
  439. .response = set_response,
  440. .datalen = 0xff,
  441. },
  442. {
  443. .cmd = PC_CMD_SETSN,
  444. .action = SN_action,
  445. .response = handshake_response,
  446. .datalen = 7,
  447. },
  448. {
  449. .cmd = PC_CMD_QRCODE,
  450. .action = confirm_qrcode_action,
  451. .response = ans_response,
  452. .datalen = 0xff,
  453. },
  454. {
  455. .cmd = PC_CMD_SNANDCARD,
  456. .action = confirm_error_action,
  457. .datalen = 1,
  458. },
  459. {
  460. .cmd = PC_CMD_REPORT_RESULT,
  461. .action = confirm_result_action,
  462. .response = ans_response,
  463. .datalen = 0xff,
  464. },
  465. {
  466. .cmd = PC_CMD_REPORT_REEOR,
  467. .action = confirm_error_action,
  468. .response = ans_response,
  469. .datalen = 0xff,
  470. },
  471. {
  472. .cmd = PC_CMD_DATA_UPLOAD,
  473. .action = confirm_data_action,
  474. .response = ans_response,
  475. .datalen = 0xff,
  476. },
  477. {
  478. .cmd = PC_CMD_SETIP,
  479. .action = set_IP_action,
  480. .response = NULL,
  481. .datalen = 0xff,
  482. },
  483. {
  484. .cmd = PC_CMD_UPDATESTATE,
  485. .action = confirm_data_action,
  486. .response = ans_response,
  487. .datalen = 0xff,
  488. },
  489. {
  490. .cmd = PC_CMD_ASKSTATE,
  491. .action = confirm_data_action,
  492. .response = AskState_response,
  493. .datalen = 0xff,
  494. },
  495. {
  496. .cmd = PC_CMD_SETSTATE,
  497. .action = setState_action,
  498. .response = setState_response,
  499. .datalen = 0xff,
  500. },
  501. {
  502. .cmd = PC_CMD_SETRUNTEMP,
  503. .action = send_temp_parm,
  504. .response = setTemp_response,
  505. .datalen = 0xff,
  506. },
  507. };
  508. void pc_resend_del(uint8_t seq){
  509. // struct CmdMessage *pMessage = (struct CmdMessage *)wifi_tx_buf;
  510. // if(pMessage->seq == seq){
  511. // wifi_tx_len = 0;
  512. // memset(wifi_tx_buf, 0, sizeof(wifi_tx_buf));
  513. // }
  514. }
  515. /********************************************************************
  516. * void query_pc_cmd(struct CmdMessage *pMsg)
  517. *
  518. *描述:处理PC命令
  519. *参数:无
  520. *返回:无
  521. *其他:无
  522. *--------------------------------------------------------------------
  523. *记录:
  524. ********************************************************************/
  525. void query_pc_cmd(CmdMessage *pMsg)
  526. {
  527. for (unsigned char i = 0; i < sizeof(mPCActionPack)/sizeof(mPCActionPack[0]); i++)
  528. {
  529. if (mPCActionPack[i].cmd == pMsg->cmd && (mPCActionPack[i].datalen == pMsg->len || mPCActionPack[i].datalen == 0xff)) //防止接收到其他设备的数据帧
  530. {
  531. if(pc_send_cmd == mPCActionPack[i].cmd)
  532. pc_send_wait = 0;
  533. if(mPCActionPack[i].cmd != 1)
  534. {
  535. pc_resend_del(pMsg->seq);
  536. Van_Device_Printf(VAN_LOG_INFO,"\n<-- pc cmd %x %d \n", pMsg->cmd, pMsg->seq);
  537. }
  538. pMsg->data[pMsg->len] = 0;
  539. unsigned char ret = mPCActionPack[i].action(mPCActionPack[i].cmd, (unsigned char *)pMsg->data);
  540. if (mPCActionPack[i].response)
  541. {
  542. mPCActionPack[i].response(pMsg, ret);
  543. }
  544. break;
  545. }
  546. }
  547. }
  548. /********************************************************************
  549. * int handshake_action(uint8_t cmd, uint8_t *parg)
  550. *
  551. *描述:握手命令处理
  552. *参数:无
  553. *返回:无
  554. *其他:无
  555. *--------------------------------------------------------------------
  556. *记录:
  557. ********************************************************************/
  558. int con_heat_action(uint8_t cmd, uint8_t *parg )
  559. {
  560. // CmdMessage *pMsg = (CmdMessageDef *)parg;
  561. CmdMessage *pMsg = (CmdMessage *)parg;;
  562. miniConfigPram *pram = (miniConfigPram *)pMsg->data;
  563. uint8_t * pdata = (uint8_t *)pMsg->data;
  564. switch(pMsg->cmd){
  565. case UINON_CMD_MOTORMOVE:{
  566. sysinf.timeinner = *(float *)(pMsg->data+4) * 100;
  567. sysinf.swingspeed = *(float *)(pMsg->data+8);
  568. sysinf.swingtime = *(float *)(pMsg->data+12) * 100;
  569. sysinf.swingtimeRight = *(float *)(pMsg->data+16) * 100;
  570. sysinf.swingtimePause = *(float *)(pMsg->data+20) * 100;
  571. if((1 == *(int *)(pMsg->data+pMsg->len - 4))){
  572. cfg_save_cfg_param();
  573. Motor_Init();
  574. }else{
  575. Motor_mix(sysinf.timeinner,sysinf.swingspeed,sysinf.swingtime,sysinf.swingtimeRight,sysinf.swingtimePause);
  576. }
  577. data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  578. }break;
  579. case UINON_CMD_MOTORTRETURN:{
  580. Motor_reset();
  581. data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  582. }break;
  583. case UINON_CMD_THEROM_GET:{
  584. char data[40];
  585. *(float *)(data+0) = 0;
  586. *(float *)(data+4) = sysinf.lysis_offset;
  587. *(float *)(data+8) = sysinf.lysis_overHeat;
  588. *(float *)(data+12) = sysinf.lysis_overHeatTime;
  589. *(float *)(data+16) = sysinf.lysis_Kp;
  590. *(float *)(data+20) = sysinf.lysis_Ki;
  591. *(float *)(data+24) = sysinf.lysis_Kd;
  592. *(float *)(data+28) = sysinf.lysis.pid.goal;
  593. *(float *)(data+32) = sysinf.lysis.idletemp;
  594. *(float *)(data+36) = sysinf.lysis.worktime/10;
  595. pMsg->data = data;
  596. pMsg->len = sizeof(data);
  597. data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  598. }break;
  599. case UINON_CMD_THEROM_OFFSET:{
  600. sysinf.lysis_Kp = *(float *)(pdata+4);
  601. sysinf.lysis_Ki = *(float *)(pdata+8);
  602. sysinf.lysis_Kd = *(float *)(pdata+12);
  603. sysinf.lysis_overHeat = *(float *)(pdata+16);
  604. sysinf.lysis_overHeatTime = *(float *)(pdata+20);
  605. sysinf.lysis_offset = *(float *)(pdata+24);
  606. data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  607. updatParm_lysis();
  608. cfg_save_cfg_param();
  609. }break;
  610. case UINON_CMD_AMPLIF_GET:{
  611. char data[44];
  612. *(float *)(data+0) = 0;
  613. *(float *)(data+4) = sysinf.amplif_Kp;
  614. *(float *)(data+8) = sysinf.amplif_Ki;
  615. *(float *)(data+12) = sysinf.amplif_Kd;
  616. *(float *)(data+16) = sysinf.PreHeatTime;
  617. *(float *)(data+20) = sysinf.holdTemp;
  618. *(float *)(data+24) = sysinf.readyTemp;
  619. *(float *)(data+28) = sysinf.PresetTempVal;
  620. *(float *)(data+32) = sysinf.PresetTempTime;
  621. *(float *)(data+36) = sysinf.adJTarget;
  622. *(float *)(data+40) = sysinf.SetTempVal;
  623. pMsg->data = data;
  624. pMsg->len = sizeof(data);
  625. data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  626. }break;
  627. case UINON_CMD_AMPLIF_SET:{
  628. sysinf.amplif_Kp = *(float *)(pdata+4);
  629. sysinf.amplif_Ki = *(float *)(pdata+8);
  630. sysinf.amplif_Kd = *(float *)(pdata+12);
  631. sysinf.PreHeatTime = *(float *)(pdata+16);
  632. sysinf.holdTemp = *(float *)(pdata+20);
  633. sysinf.readyTemp = *(float *)(pdata+24);
  634. sysinf.PresetTempVal = *(float *)(pdata+28);
  635. sysinf.PresetTempTime = *(float *)(pdata+32);
  636. sysinf.adJTarget = *(float *)(pdata+36);
  637. sysinf.SetTempVal = *(float *)(pdata+40);
  638. data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  639. updatParm_heater_master();
  640. cfg_save_cfg_param();
  641. }break;
  642. case UINON_CMD_THEROM_GOAL:{
  643. float goal = *(float *)(pMsg->data+4) ;
  644. set_lysis(goal);
  645. data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  646. }break;
  647. // case UINON_CMD_THEROM_CHECK:{
  648. // pMsg->data[0] =Therm_Check();
  649. // data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data, pMsg->len);
  650. // }break;
  651. }
  652. return 0;
  653. }
  654. const struct PCActionPack mUnionActionPack[] =
  655. { {
  656. .cmd = UINON_CMD_MOTORMOVE,
  657. .action = con_heat_action,
  658. },
  659. {
  660. .cmd = UINON_CMD_MOTORTRETURN,
  661. .action = con_heat_action,
  662. },
  663. {
  664. .cmd = UINON_CMD_TEMP_ADJ,
  665. .action = con_heat_action,
  666. },
  667. {
  668. .cmd = UINON_CMD_TEMP_PID,
  669. .action = con_heat_action,
  670. },
  671. {
  672. .cmd = UINON_CMD_TEMP_ADJ_GET,
  673. .action = con_heat_action,
  674. },
  675. {
  676. .cmd = UINON_CMD_TEMP_PID_GET,
  677. .action = con_heat_action,
  678. },
  679. {
  680. .cmd = UINON_CMD_TEMP_START,
  681. .action = con_heat_action,
  682. },
  683. {
  684. .cmd = UINON_CMD_TEMP_STOP,
  685. .action = con_heat_action,
  686. },
  687. {
  688. .cmd = UINON_CMD_THEROM_GOAL,
  689. .action = con_heat_action,
  690. },
  691. {
  692. .cmd = UINON_CMD_THEROM_OFFSET,
  693. .action = con_heat_action,
  694. },
  695. {
  696. .cmd = UINON_CMD_THEROM_GET,
  697. .action = con_heat_action,
  698. },
  699. {
  700. .cmd = UINON_CMD_AMPLIF_SET,
  701. .action = con_heat_action,
  702. },
  703. {
  704. .cmd = UINON_CMD_AMPLIF_GET,
  705. .action = con_heat_action,
  706. },
  707. {
  708. .cmd = UINON_CMD_THEROM_PID,
  709. .action = con_heat_action,
  710. },
  711. {
  712. .cmd = UINON_CMD_THEROM_OVERHEAT,
  713. .action = con_heat_action,
  714. },
  715. {
  716. .cmd = UINON_CMD_THEROM_OVERCOOL,
  717. .action = con_heat_action,
  718. },
  719. {
  720. .cmd = UINON_CMD_TEMP_DEBUG,
  721. .response = handshake_response,
  722. },
  723. };
  724. void deal_mUnion_cmd(CmdMessage *pMsg)
  725. {
  726. for (uint8_t i = 0; i < sizeof(mUnionActionPack)/sizeof(mUnionActionPack[0]); i++)
  727. {
  728. if (mUnionActionPack[i].cmd == pMsg->cmd )
  729. {
  730. uint8_t ret = mUnionActionPack[i].action( pMsg->cmd,(uint8_t *)pMsg);
  731. if (mUnionActionPack[i].response)
  732. {
  733. mUnionActionPack[i].response(pMsg, ret);
  734. }
  735. break;
  736. }
  737. }
  738. }
  739. void update_work(void) {
  740. float temp;
  741. unsigned int st;
  742. char data[20];
  743. get_master_st(&temp,&st);
  744. *(unsigned int *)(data+0) = st;
  745. *(float *)(data+4) =temp;
  746. get_lysis_st(&temp,&st);
  747. *(unsigned int *)(data+8) = st;
  748. *(float *)(data+12) = temp;
  749. // data_send_to_pc(PC_CMD_UPDATETEMP, data,sizeof(data));
  750. Van_Device_Printf(VAN_LOG_TEMP,"st:%d %f %d %f\n\r",sysinf.psmMaster.state,sysinf.heaterMaster.pid.realtemp,sysinf.lysis.thermostat_st,sysinf.lysis.pid.realtemp);
  751. return ;
  752. }