ModemTask.c 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. /********************************************************************************
  2. * File Name: ModemTask.c
  3. * Function Describe: 完成串口与Modem的通讯
  4. * Explain:
  5. * Writer: ShiLiangWen
  6. * Date: 2015-8-2
  7. *******************************************************************************/
  8. #define THIS_FILE_ID 8
  9. /*******************************************************************************/
  10. #include "includes.h"
  11. OS_TID idModemTask=0;
  12. U64 stkModemTask[MODEM_TASK_STK_SIZE];
  13. OS_TID idModemUartTask=0;
  14. U64 stkModemUartTask[MODEM_UART_TASK_STK_SIZE];
  15. OS_SEM ModemUartSem;
  16. char g_ucModemTaskEn;
  17. unsigned char g_ucModemTaskSleep=0;
  18. //char ModemMsgQueueDataBuffer[MODEM_MSG_DATA_BUF_LEN];
  19. SUT_MSG_QUEUE ModemMsgQueue;
  20. /*******************************************************************
  21. *ModemUartTask
  22. ********************************************************************/
  23. __task void ModemUartTask(void)
  24. {
  25. os_sem_init (&ModemUartSem, 0);
  26. while(1){
  27. os_sem_wait (&ModemUartSem, 0xffff);
  28. FEED_EXTWATCHDOG();
  29. IWDG_ReloadCounter();
  30. //tsk_lock ();
  31. //sutModemStatus.UartInactiveCt=0;
  32. Uart2RecvProcess();
  33. //tsk_unlock ();
  34. }
  35. }
  36. /*******************************************************************
  37. *ModemTask
  38. ********************************************************************/
  39. __task void ModemTask(void)
  40. {
  41. //unsigned long ASN;
  42. //char temp[22];
  43. static char flag=0;
  44. char i=0;
  45. char sum=0;
  46. static unsigned int sucCt=0;
  47. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  48. WifiStatue=WIFIINVALID;
  49. //sutProductPara.ConnectType=1; //0---有线 1---无线
  50. while(1){ //无线未接才使用有线
  51. os_dly_wait(100);
  52. if(sutProductPara.ConnectType==1) break;
  53. }
  54. RunMake(THIS_FILE_ID);
  55. SlwTrace(DEBUG,"ModemTask Start...\r\n");
  56. memset(&sut_sys_status,0,sizeof(sut_sys_status));//初始化状态
  57. //1、模块初始化
  58. if(ModemInit())
  59. {//成功
  60. }else
  61. {//模块初始化失败,进入GT模式,为了升级模块
  62. SlwTrace(INF,"[01]Failed\r\nEnter GT Mode!\r\n");
  63. //EnterGTMode();
  64. while(1)
  65. {
  66. MODEM_LED4_HIGH;
  67. os_dly_wait(100);
  68. FEED_EXTWATCHDOG();
  69. IWDG_ReloadCounter();
  70. MODEM_LED4_LOW;
  71. }
  72. }
  73. //Uart2Init();
  74. //2、设置成STA模式
  75. ModemSetModel();
  76. //3、设置单链接或者多链接 0--单链接 1--多链接
  77. ModemSetSingleLink();
  78. WIFIRECONNECT:
  79. //设置为自动获取IP
  80. ModemSetDHCP();
  81. //4、wifi密码输入连接
  82. Wifi_Pwd_Input();
  83. //5、连接服务器
  84. if(WifiStatue==PWDOK) Server_Connect();
  85. // Uart2Init();
  86. // ComSelect(COM_SEL_MODEM);
  87. //sut_sys_status.Logined=1; ////////////////////测试用
  88. HeartTimeOut=20;
  89. while(1){
  90. os_dly_wait(1);
  91. // FEED_EXTWATCHDOG();
  92. // IWDG_ReloadCounter();
  93. /********************************************************/
  94. if(1==g_ucModemTaskEn ||g_ucUARTSel==COM_SEL_MODEM )
  95. {
  96. pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData));
  97. if(pMsg->MsgLen > 0)
  98. {
  99. SlwTrace(INF,(char *)pMsg->MsgData);
  100. //AtHandle(pMsg->MsgData);
  101. continue;
  102. }else if(pMsg->MsgLen < 0)
  103. {
  104. SlwTrace(INF, "QueueF1");
  105. continue;
  106. }
  107. else os_dly_wait(1);
  108. continue;
  109. }
  110. //Modem Uart消息处理,等待1个系统tick, 大约等待10ms
  111. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  112. {
  113. if(g_ucUARTSel==COM_SEL_MODEM)
  114. {
  115. os_dly_wait(100);
  116. FEED_EXTWATCHDOG();
  117. IWDG_ReloadCounter();
  118. continue;
  119. }
  120. if(pMsg->MsgData[0]=='+' && pMsg->MsgData[1] == 'I' && pMsg->MsgData[2]=='P')
  121. {
  122. //sutPocStatus.ModemInactiveCt=0;
  123. //SlwTrace(INF,(char *)pMsg->MsgData);
  124. TcpProcess((char *)pMsg->MsgData,0);
  125. }else if(((0==ModemStrCmp((char *)pMsg->MsgData,"ERROR"))||(0==ModemStrCmp((char *)pMsg->MsgData,"SEND FAIL")) ) && WifiStatue==CONNECTOK){
  126. sut_sys_status.Resend=1;
  127. SlwTrace(DEBUG,"/************重发**********/\r\n");
  128. os_dly_wait(30);//间隔 Recv
  129. }else if((0==ModemStrCmp((char *)pMsg->MsgData,"Recv"))&&WifiStatue==CONNECTOK){
  130. SlwTrace(DEBUG,"/*********接收成功**************/\r\n");
  131. sut_sys_status.Resend=0;
  132. }else if((0==ModemStrCmp((char *)pMsg->MsgData,"CLOSED"))&&WifiStatue==CONNECTOK){
  133. //服务器主动断开
  134. SlwTrace(DEBUG,"/*************断线重连***********/\r\n");
  135. WifiStatue=WIFIINVALID;
  136. }else if((0==ModemStrCmp((char *)pMsg->MsgData,"link is not valid"))&&WifiStatue==CONNECTOK){
  137. //服务器主动断开
  138. SlwTrace(DEBUG,"/*************断线重连***********/\r\n");
  139. WifiStatue=WIFIINVALID;
  140. }
  141. else{
  142. //不是则丢掉数据
  143. continue;
  144. }
  145. //收到服务器数据
  146. continue;
  147. }else os_dly_wait(1);
  148. Tcptick(); //////////////处理心跳 登录
  149. if( sut_sys_status.OnceFlag==1 && sut_sys_status.Logined==1)
  150. {
  151. /**********************接收完一次,发现数据改变立即上行******************************/
  152. //判断是否区别立即上传
  153. if(memcmp(&sut_device_read,&Device_Up.Devices,sizeof(sut_device_read)))
  154. {
  155. memcpy(&Device_Up.Devices,&sut_device_read,sizeof(sut_device_read));
  156. SlwTrace(DEBUG,"chang====================================\r\n");
  157. TSStatueSendPosition(TS_LOCATION_INFORMATION_REPORTING); //上行
  158. }
  159. sut_sys_status.OnceFlag=0;
  160. }else if(sut_sys_status.Resend==1)
  161. {
  162. memcpy(&Device_Up.Devices,&sut_device_read,sizeof(sut_device_read));
  163. SlwTrace(DEBUG,"重传====================================\r\n");
  164. TSStatueSendPosition(TS_LOCATION_INFORMATION_REPORTING); //上行
  165. }
  166. if( WifiStatue==WIFIINVALID)goto WIFIRECONNECT;
  167. if(os_time_get() < sucCt) continue;
  168. sucCt=os_time_get()+1000;
  169. for(i=0;i<MODBUS_REG_NUM_MAX;i++)
  170. {
  171. sum+=device_vailable[i];
  172. }
  173. printf("slave sum ====%d\r\n",sum);
  174. sum=0;
  175. //SlwTrace(DEBUG,"MODEM continue....\r\n");
  176. //ModemSendData("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\r\n",400);
  177. }
  178. }
  179. /*******************************************************************************/