communication.c 29 KB

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