| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- /********************************************************************************
- * File Name: ModemTask.c
- * Function Describe: 完成串口与Modem的通讯
- * Explain:
- * Writer: ShiLiangWen
- * Date: 2015-8-2
- *******************************************************************************/
- #define THIS_FILE_ID 8
- /*******************************************************************************/
- #include "includes.h"
- OS_TID idModemTask=0;
- U64 stkModemTask[MODEM_TASK_STK_SIZE];
- OS_TID idModemUartTask=0;
- U64 stkModemUartTask[MODEM_UART_TASK_STK_SIZE];
- OS_SEM ModemUartSem;
- char g_ucModemTaskEn;
- unsigned char g_ucModemTaskSleep=0;
- //char ModemMsgQueueDataBuffer[MODEM_MSG_DATA_BUF_LEN];
- SUT_MSG_QUEUE ModemMsgQueue;
- /*******************************************************************
- *ModemUartTask
- ********************************************************************/
- __task void ModemUartTask(void)
- {
- os_sem_init (&ModemUartSem, 0);
- while(1){
- os_sem_wait (&ModemUartSem, 0xffff);
- FEED_EXTWATCHDOG();
- IWDG_ReloadCounter();
- //tsk_lock ();
- //sutModemStatus.UartInactiveCt=0;
- Uart2RecvProcess();
- //tsk_unlock ();
- }
- }
- /*******************************************************************
- *ModemTask
- ********************************************************************/
- __task void ModemTask(void)
- {
- //unsigned long ASN;
- //char temp[22];
- static char flag=0;
- char i=0;
- char sum=0;
- static unsigned int sucCt=0;
-
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- WifiStatue=WIFIINVALID;
-
- //sutProductPara.ConnectType=1; //0---有线 1---无线
-
- while(1){ //无线未接才使用有线
- os_dly_wait(100);
- if(sutProductPara.ConnectType==1) break;
-
- }
-
- RunMake(THIS_FILE_ID);
- SlwTrace(DEBUG,"ModemTask Start...\r\n");
- memset(&sut_sys_status,0,sizeof(sut_sys_status));//初始化状态
- //1、模块初始化
- if(ModemInit())
- {//成功
-
- }else
- {//模块初始化失败,进入GT模式,为了升级模块
- SlwTrace(INF,"[01]Failed\r\nEnter GT Mode!\r\n");
- //EnterGTMode();
-
- while(1)
- {
- MODEM_LED4_HIGH;
- os_dly_wait(100);
- FEED_EXTWATCHDOG();
- IWDG_ReloadCounter();
- MODEM_LED4_LOW;
- }
- }
-
- //Uart2Init();
- //2、设置成STA模式
- ModemSetModel();
- //3、设置单链接或者多链接 0--单链接 1--多链接
- ModemSetSingleLink();
-
- WIFIRECONNECT:
-
- //设置为自动获取IP
- ModemSetDHCP();
-
- //4、wifi密码输入连接
- Wifi_Pwd_Input();
- //5、连接服务器
- if(WifiStatue==PWDOK) Server_Connect();
- // Uart2Init();
- // ComSelect(COM_SEL_MODEM);
-
- //sut_sys_status.Logined=1; ////////////////////测试用
- HeartTimeOut=20;
-
- while(1){
- os_dly_wait(1);
- // FEED_EXTWATCHDOG();
- // IWDG_ReloadCounter();
- /********************************************************/
- if(1==g_ucModemTaskEn ||g_ucUARTSel==COM_SEL_MODEM )
- {
- pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData));
- if(pMsg->MsgLen > 0)
- {
- SlwTrace(INF,(char *)pMsg->MsgData);
- //AtHandle(pMsg->MsgData);
- continue;
- }else if(pMsg->MsgLen < 0)
- {
- SlwTrace(INF, "QueueF1");
- continue;
- }
- else os_dly_wait(1);
-
- continue;
- }
- //Modem Uart消息处理,等待1个系统tick, 大约等待10ms
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
-
-
- if(g_ucUARTSel==COM_SEL_MODEM)
- {
- os_dly_wait(100);
- FEED_EXTWATCHDOG();
- IWDG_ReloadCounter();
- continue;
- }
-
- if(pMsg->MsgData[0]=='+' && pMsg->MsgData[1] == 'I' && pMsg->MsgData[2]=='P')
- {
- //sutPocStatus.ModemInactiveCt=0;
- //SlwTrace(INF,(char *)pMsg->MsgData);
-
- TcpProcess((char *)pMsg->MsgData,0);
-
- }else if(((0==ModemStrCmp((char *)pMsg->MsgData,"ERROR"))||(0==ModemStrCmp((char *)pMsg->MsgData,"SEND FAIL")) ) && WifiStatue==CONNECTOK){
-
- sut_sys_status.Resend=1;
- SlwTrace(DEBUG,"/************重发**********/\r\n");
-
- os_dly_wait(30);//间隔 Recv
- }else if((0==ModemStrCmp((char *)pMsg->MsgData,"Recv"))&&WifiStatue==CONNECTOK){
- SlwTrace(DEBUG,"/*********接收成功**************/\r\n");
- sut_sys_status.Resend=0;
- }else if((0==ModemStrCmp((char *)pMsg->MsgData,"CLOSED"))&&WifiStatue==CONNECTOK){
- //服务器主动断开
- SlwTrace(DEBUG,"/*************断线重连***********/\r\n");
- WifiStatue=WIFIINVALID;
- }else if((0==ModemStrCmp((char *)pMsg->MsgData,"link is not valid"))&&WifiStatue==CONNECTOK){
- //服务器主动断开
- SlwTrace(DEBUG,"/*************断线重连***********/\r\n");
- WifiStatue=WIFIINVALID;
- }
- else{
- //不是则丢掉数据
- continue;
- }
- //收到服务器数据
- continue;
-
- }else os_dly_wait(1);
-
-
- Tcptick(); //////////////处理心跳 登录
-
- if( sut_sys_status.OnceFlag==1 && sut_sys_status.Logined==1)
- {
- /**********************接收完一次,发现数据改变立即上行******************************/
- //判断是否区别立即上传
- if(memcmp(&sut_device_read,&Device_Up.Devices,sizeof(sut_device_read)))
- {
- memcpy(&Device_Up.Devices,&sut_device_read,sizeof(sut_device_read));
- SlwTrace(DEBUG,"chang====================================\r\n");
- TSStatueSendPosition(TS_LOCATION_INFORMATION_REPORTING); //上行
- }
- sut_sys_status.OnceFlag=0;
- }else if(sut_sys_status.Resend==1)
- {
- memcpy(&Device_Up.Devices,&sut_device_read,sizeof(sut_device_read));
- SlwTrace(DEBUG,"重传====================================\r\n");
- TSStatueSendPosition(TS_LOCATION_INFORMATION_REPORTING); //上行
- }
-
- if( WifiStatue==WIFIINVALID)goto WIFIRECONNECT;
-
-
- if(os_time_get() < sucCt) continue;
- sucCt=os_time_get()+1000;
- for(i=0;i<MODBUS_REG_NUM_MAX;i++)
- {
- sum+=device_vailable[i];
- }
- printf("slave sum ====%d\r\n",sum);
- sum=0;
- //SlwTrace(DEBUG,"MODEM continue....\r\n");
- //ModemSendData("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\r\n",400);
-
-
- }
-
- }
- /*******************************************************************************/
|