Browse Source

NB网络接收问题:未解决,涉及指针,重启

CHENJIE-PC\QiXiang_CHENJIE 4 years ago
parent
commit
03c60b0e2e
1 changed files with 57 additions and 2 deletions
  1. 57 2
      src/TcpTask.c

+ 57 - 2
src/TcpTask.c

@@ -30,6 +30,7 @@
 #include "app.h"
 #include "app.h"
 #include "UartTask.h"
 #include "UartTask.h"
 #include "GpsTask.h"
 #include "GpsTask.h"
+#include "Fota.h"
 //全局变量输出区
 //全局变量输出区
 
 
 //全局变量输入区
 //全局变量输入区
@@ -51,6 +52,8 @@ static process_TCP 		    gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
 static   eventCallbackMessage_t *queueItem = NULL;
 static   eventCallbackMessage_t *queueItem = NULL;
 static UINT8                    gImsi[16] = {0};
 static UINT8                    gImsi[16] = {0};
 static UINT32                   gCellID = 0;
 static UINT32                   gCellID = 0;
+static UINT32                   TcpService = 0;
+static QueueHandle_t TcpRecvHandle = NULL;
 //Tcp线程堆栈申请区
 //Tcp线程堆栈申请区
 
 
 //函数声明区
 //函数声明区
@@ -59,6 +62,7 @@ static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait);
 static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen);
 static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen);
 void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent);
 void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent);
 void TcpDataInfoAssembleSend();
 void TcpDataInfoAssembleSend();
+void TcpDataInfoRecvHandle();
 UINT8 bcc_chk(UINT8* data, UINT8 length);
 UINT8 bcc_chk(UINT8* data, UINT8 length);
 //线程任务区
 //线程任务区
 static void TcpTask(void* arg)
 static void TcpTask(void* arg)
@@ -73,6 +77,10 @@ static void TcpTask(void* arg)
     {
     {
         return;
         return;
     }
     }
+    if(TcpRecvHandle == NULL)
+	{
+		TcpRecvHandle = osMessageQueueNew(2,sizeof(TcpipConnectionRecvDataInd), NULL);
+	}
     while (true)
     while (true)
     {
     {
         osDelay(100);
         osDelay(100);
@@ -81,7 +89,7 @@ static void TcpTask(void* arg)
             sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
             sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
             sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
             sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
         }
         }
-        else if(Timer_count%50==0)
+        else if(Timer_count%50==0 && TcpService==0x00)
         {
         {
             sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
             sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
         }
         }
@@ -128,6 +136,12 @@ static void TcpTask(void* arg)
                         ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_9, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status); 
                         ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_9, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status); 
                     }
                     }
                     break;
                     break;
+                case QMSG_ID_SOCK_RECVPKG:
+                    #ifdef USING_PRINTF
+                        printf("QMSG_ID_SOCK_RECVPKG\n");
+                    #endif
+                    TcpDataInfoRecvHandle();
+                    break;
                 case QMSG_ID_NW_IP_SUSPEND:
                 case QMSG_ID_NW_IP_SUSPEND:
                     if (socContext.id >= 0 && socContext.status != APP_SOCKET_CONNECTION_CLOSED)
                     if (socContext.id >= 0 && socContext.status != APP_SOCKET_CONNECTION_CLOSED)
                     {
                     {
@@ -385,6 +399,46 @@ static void TcpDataInfoAssembleSend()
     }
     }
 
 
     
     
+}
+//Tcp数据接收处理函数
+static void TcpDataInfoRecvHandle()
+{
+    UINT8* Ptr;
+    TcpipConnectionRecvDataInd* TcpRecvData;
+    TcpService = 0x01;//应答标志
+    // if(TcpRecvData == NULL)
+    // {
+    //     // #ifdef USING_PRINTF
+    //     //     printf("before TcpRecvData is vacant\n");
+    //     // #endif    
+    // }
+    // else
+    // {
+    //     #ifdef USING_PRINTF
+    //         printf(" before TcpRecvData is not vacant\n");
+    //     #endif 
+    // }
+    osMessageQueueGet(TcpRecvHandle,TcpRecvData,0,2000);
+    
+    if(TcpRecvData == NULL)
+    {
+        // #ifdef USING_PRINTF
+        //     printf("TcpRecvData is vacant\n");
+        // #endif
+    }
+    else
+    {
+
+        #ifdef USING_PRINTF
+        //printf("TcpRecvData:%x\n",TcpRecvData);
+        Ptr=TcpRecvData->data;
+        printf("TcpDataInfoRecvHandle socket connection %u receive length %u data:", TcpRecvData->connectionId, TcpRecvData->length);
+        for(int i = 0;i<TcpRecvData->length;i++)
+            printf("%x  ",*(Ptr+i));
+        #endif   
+    }
+    
+
 }
 }
 //TCP发送校验函数
 //TCP发送校验函数
 UINT8 bcc_chk(UINT8* data, UINT8 length)
 UINT8 bcc_chk(UINT8* data, UINT8 length)
@@ -536,8 +590,9 @@ void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent)
             if(rcvInd != PNULL)
             if(rcvInd != PNULL)
             {
             {
                 uint8_t* Ptr;
                 uint8_t* Ptr;
+                osMessageQueuePut(TcpRecvHandle,rcvInd,0,2000);
+                sendQueueMsg(QMSG_ID_SOCK_RECVPKG, 0);
                 #ifdef USING_PRINTF
                 #ifdef USING_PRINTF
-                
                     Ptr=rcvInd->data;
                     Ptr=rcvInd->data;
                     printf("socketAppConnectionCallBack socket connection %u receive length %u data:", rcvInd->connectionId, rcvInd->length);
                     printf("socketAppConnectionCallBack socket connection %u receive length %u data:", rcvInd->connectionId, rcvInd->length);
                     for(int i = 0;i<rcvInd->length;i++)
                     for(int i = 0;i<rcvInd->length;i++)