|
@@ -21,7 +21,7 @@
|
|
#include "debug_log.h"
|
|
#include "debug_log.h"
|
|
#include "slpman_ec616.h"
|
|
#include "slpman_ec616.h"
|
|
#include "plat_config.h"
|
|
#include "plat_config.h"
|
|
-
|
|
|
|
|
|
+#include "ec_tcpip_api.h"
|
|
|
|
|
|
//Main Area
|
|
//Main Area
|
|
#define PROC_MAIN_TASK_STACK_SIZE (1024)
|
|
#define PROC_MAIN_TASK_STACK_SIZE (1024)
|
|
@@ -39,26 +39,22 @@ static process_Main gProcess_Main_Task = PROCESS_STATE_IDLE;
|
|
#define PROC_MAIN_STATE_SWITCH(a) (gProcess_Main_Task = a)
|
|
#define PROC_MAIN_STATE_SWITCH(a) (gProcess_Main_Task = a)
|
|
|
|
|
|
//tcp area
|
|
//tcp area
|
|
-#define PROC_TCP_TASK_STACK_SIZE (1024)
|
|
|
|
|
|
+#define PROC_TCP_TASK_STACK_SIZE (1024*2)
|
|
static StaticTask_t gProcess_Tcp_Task_t;
|
|
static StaticTask_t gProcess_Tcp_Task_t;
|
|
static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
|
|
static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
|
|
static volatile UINT32 Event;
|
|
static volatile UINT32 Event;
|
|
static UINT8 gImsi[16] = {0};
|
|
static UINT8 gImsi[16] = {0};
|
|
static INT32 sockfd = -1;
|
|
static INT32 sockfd = -1;
|
|
static UINT32 gCellID = 0;
|
|
static UINT32 gCellID = 0;
|
|
-int TcpconnectID = -1;
|
|
|
|
-volatile uint8_t Tcp_statuts = 0;
|
|
|
|
-typedef enum
|
|
|
|
-{
|
|
|
|
- PROCESS_TCP_STATE_IDLE = 0,
|
|
|
|
- PROCESS_TCP_STATE_LINK,
|
|
|
|
- PROCESS_TCP_STATE_WORK,
|
|
|
|
- PROCESS_TCP_STATE_SLEEP
|
|
|
|
-}process_TCP;
|
|
|
|
-static process_TCP gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
|
|
|
|
-#define PROC_TCP_STATE_SWITCH(a) (gProcess_Tcp_Task = a)
|
|
|
|
-volatile bool Tcp_Sleep_Flag = false;
|
|
|
|
-
|
|
|
|
|
|
+static UINT8 Tcp_serviece;
|
|
|
|
+static QueueHandle_t psEventQueueHandle;//队列句柄
|
|
|
|
+#define APP_EVENT_QUEUE_SIZE (10)//队列大小
|
|
|
|
+static AppSocketConnectionContext socContext = {-1, APP_SOCKET_CONNECTION_CLOSED};
|
|
|
|
+//fota area
|
|
|
|
+Fota_Type Fota_S={0,0,0,0,0,0,0,0};
|
|
|
|
+//函数声明
|
|
|
|
+void Tcp_Recv_info(uint8_t* p);
|
|
|
|
+void Tcp_Recv_fota(uint8_t* p);
|
|
//睡眠进出函数
|
|
//睡眠进出函数
|
|
static void appBeforeHib(void *pdata, slpManLpState state)
|
|
static void appBeforeHib(void *pdata, slpManLpState state)
|
|
{
|
|
{
|
|
@@ -108,6 +104,20 @@ static void appAfterSlp2(void *pdata, slpManLpState state)
|
|
printf("sleep2 failed:%d \n",state);
|
|
printf("sleep2 failed:%d \n",state);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
+//Tcp 状态转换函数
|
|
|
|
+static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait)
|
|
|
|
+{
|
|
|
|
+ eventCallbackMessage_t *queueMsg = NULL;
|
|
|
|
+ queueMsg = malloc(sizeof(eventCallbackMessage_t));
|
|
|
|
+ queueMsg->messageId = msgId;
|
|
|
|
+ if (psEventQueueHandle)
|
|
|
|
+ {
|
|
|
|
+ if (pdTRUE != xQueueSend(psEventQueueHandle, &queueMsg, xTickstoWait))
|
|
|
|
+ {
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, sendQueueMsg_1, P_ERROR, 0, "xQueueSend error");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
// 主任务线程
|
|
// 主任务线程
|
|
static void Main_Task(void* arg)
|
|
static void Main_Task(void* arg)
|
|
{
|
|
{
|
|
@@ -186,13 +196,10 @@ static void Main_Task(void* arg)
|
|
Uart_index++;
|
|
Uart_index++;
|
|
Tcp_index++;
|
|
Tcp_index++;
|
|
sleep_index++;
|
|
sleep_index++;
|
|
- if (Tcp_index >=100)//Tcp 1s 调用一次
|
|
|
|
|
|
+ if(Tcp_index>5*100 && socContext.id>=0)
|
|
{
|
|
{
|
|
- #ifdef USING_PRINTF
|
|
|
|
- printf("[%d]_sleep count \r\n",sleep_index);
|
|
|
|
- #endif
|
|
|
|
|
|
+ sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
|
|
Tcp_index = 0;
|
|
Tcp_index = 0;
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
|
|
|
|
}
|
|
}
|
|
if (sleep_index >=sleep_time_flag*100)
|
|
if (sleep_index >=sleep_time_flag*100)
|
|
{
|
|
{
|
|
@@ -203,7 +210,8 @@ static void Main_Task(void* arg)
|
|
}
|
|
}
|
|
case PROCESS_STATE_SLEEP:
|
|
case PROCESS_STATE_SLEEP:
|
|
{
|
|
{
|
|
- osDelay(10000);
|
|
|
|
|
|
+ sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
|
|
|
|
+ osDelay(5000);
|
|
slpManSlpState_t State;
|
|
slpManSlpState_t State;
|
|
uint8_t cnt;
|
|
uint8_t cnt;
|
|
if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
|
|
if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
|
|
@@ -270,7 +278,6 @@ static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 pa
|
|
#ifdef USING_PRINTF
|
|
#ifdef USING_PRINTF
|
|
printf("RSSI signal=%d\n",rssi);
|
|
printf("RSSI signal=%d\n",rssi);
|
|
#endif
|
|
#endif
|
|
- ECOMM_TRACE(UNILOG_PLA_APP, socketRegisterPSUrcCallback_1, P_INFO, 1, "RSSI signal=%d", rssi);
|
|
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
case NB_URC_ID_PS_BEARER_ACTED:
|
|
case NB_URC_ID_PS_BEARER_ACTED:
|
|
@@ -300,150 +307,314 @@ static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 pa
|
|
{
|
|
{
|
|
netif = (NmAtiNetifInfo *)param;
|
|
netif = (NmAtiNetifInfo *)param;
|
|
if (netif->netStatus == NM_NETIF_ACTIVATED)
|
|
if (netif->netStatus == NM_NETIF_ACTIVATED)
|
|
- //sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
|
|
|
|
- Tcp_statuts = 1;
|
|
|
|
|
|
+ sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-static void Tcp_Task(void* arg)
|
|
|
|
|
|
+void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent)
|
|
{
|
|
{
|
|
- CHAR serverip[] = "120.26.68.165";
|
|
|
|
- CHAR serverport[] = "14319";
|
|
|
|
- struct addrinfo hints, *server_res;
|
|
|
|
- memset( &hints, 0, sizeof( hints ) );
|
|
|
|
- hints.ai_socktype = SOCK_STREAM;
|
|
|
|
- hints.ai_protocol = IPPROTO_TCP;
|
|
|
|
- uint8_t* TcpSendBuffer=NULL;
|
|
|
|
- uint8_t Reconnect_Num = 0;
|
|
|
|
- int TcpsendID = -1;
|
|
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
|
- while(true)
|
|
|
|
|
|
+ switch(connectionEventType)
|
|
{
|
|
{
|
|
- switch(gProcess_Tcp_Task)
|
|
|
|
|
|
+ case TCPIP_CONNECTION_STATUS_EVENT:
|
|
{
|
|
{
|
|
- case PROCESS_TCP_STATE_IDLE:
|
|
|
|
|
|
+ TcpipConnectionStatusInd *statusInd;
|
|
|
|
+ statusInd = (TcpipConnectionStatusInd *)bodyEvent;
|
|
|
|
+ if(statusInd != PNULL)
|
|
{
|
|
{
|
|
- osDelay(100);
|
|
|
|
- break;
|
|
|
|
|
|
+ if(statusInd->status == TCPIP_CONNECTION_STATUS_CLOSED)
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_1, P_ERROR, 2, "socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
|
|
|
|
+ if(statusInd->connectionId == socContext.id)
|
|
|
|
+ {
|
|
|
|
+ socContext.id = -1;
|
|
|
|
+ socContext.status = APP_SOCKET_CONNECTION_CLOSED;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTING)
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_2, P_INFO, 1, "socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
|
|
|
|
+ if(statusInd->connectionId == socContext.id)
|
|
|
|
+ {
|
|
|
|
+ socContext.status = APP_SOCKET_CONNECTION_CONNECTING;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTED)
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_3, P_ERROR, 1, "socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
|
|
|
|
+ if(statusInd->connectionId == socContext.id)
|
|
|
|
+ {
|
|
|
|
+ socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack invalid connection status event");
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_4, P_ERROR, 0, "socketAppConnectionCallBack invalid connection status event");
|
|
}
|
|
}
|
|
- case PROCESS_TCP_STATE_LINK:
|
|
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case TCPIP_CONNECTION_RECEIVE_EVENT:
|
|
|
|
+ {
|
|
|
|
+ TcpipConnectionRecvDataInd *rcvInd;
|
|
|
|
+ rcvInd = (TcpipConnectionRecvDataInd *)bodyEvent;
|
|
|
|
+ if(rcvInd != PNULL)
|
|
{
|
|
{
|
|
|
|
+ uint8_t* Ptr;
|
|
#ifdef USING_PRINTF
|
|
#ifdef USING_PRINTF
|
|
- printf("TCP_statuts:%d\n",Tcp_statuts);
|
|
|
|
|
|
+
|
|
|
|
+ Ptr=rcvInd->data;
|
|
|
|
+ printf("socketAppConnectionCallBack socket connection %u receive length %u data:", rcvInd->connectionId, rcvInd->length);
|
|
|
|
+ for(int i = 0;i<rcvInd->length;i++)
|
|
|
|
+ printf("%x",*(Ptr+i));
|
|
#endif
|
|
#endif
|
|
- switch(Tcp_statuts)
|
|
|
|
|
|
+ Tcp_Recv_info(Ptr);//Tcp 接收
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_5, P_INFO, 2, "socketAppConnectionCallBack socket connection %u receive length %u data", rcvInd->connectionId, rcvInd->length);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf( "socketAppConnectionCallBack invalid connection rcv event");
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_6, P_ERROR, 0, "socketAppConnectionCallBack invalid connection rcv event");
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case TCPIP_CONNECTION_UL_STATUS_EVENT:
|
|
|
|
+ {
|
|
|
|
+ TcpipConnectionUlDataStatusInd *ulStatusInd;
|
|
|
|
+ ulStatusInd = (TcpipConnectionUlDataStatusInd *)bodyEvent;
|
|
|
|
+ if(ulStatusInd != PNULL)
|
|
|
|
+ {
|
|
|
|
+ if(ulStatusInd->status == Tcpip_Connection_UL_DATA_SUCCESS)
|
|
{
|
|
{
|
|
- case 0://0代表网络为驻网前
|
|
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf( "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_7, P_INFO, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
|
|
|
|
+ }
|
|
|
|
+ else if(ulStatusInd->status == Tcpip_Connection_UL_DATA_FAIL)
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_8, P_WARNING, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack invalid connection ul status event");
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_9, P_ERROR, 0, "socketAppConnectionCallBack invalid connection ul status event");
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ default:
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socketAppConnectionCallBack invalid event type %u", connectionEventType);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_10, P_ERROR, 1, "socketAppConnectionCallBack invalid event type %u", connectionEventType);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+void Tcp_Recv_fota(uint8_t* P)
|
|
|
|
+{
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("fota data handle\n");
|
|
|
|
+ #endif
|
|
|
|
+}
|
|
|
|
+void Tcp_Recv_info(uint8_t* P)
|
|
|
|
+{
|
|
|
|
+ switch(*(P+1))
|
|
|
|
+ {
|
|
|
|
+ case 0x00://非应答
|
|
|
|
+ Tcp_serviece=01;
|
|
|
|
+ break;
|
|
|
|
+ case 0xfe://应答
|
|
|
|
+ Tcp_serviece=01;
|
|
|
|
+ switch(*(P))
|
|
|
|
+ {
|
|
|
|
+ case 0x80:
|
|
|
|
+ break;
|
|
|
|
+ case 0x82:
|
|
|
|
+ Fota_S.Fota_update_flag=true;
|
|
|
|
+ Tcp_Recv_fota(P);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ Fota_S.Fota_update_flag = false;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+uint8_t Fota_crc_chk(uint8_t* data,uint8_t length)
|
|
|
|
+{
|
|
|
|
+ uint8_t reg_crc=0x00;
|
|
|
|
+ while(length--)
|
|
|
|
+ {
|
|
|
|
+ reg_crc ^= *data++;
|
|
|
|
+ }
|
|
|
|
+ return reg_crc;
|
|
|
|
+}
|
|
|
|
+void Tcp_Send_fota()
|
|
|
|
+{
|
|
|
|
+ tcpipConnectionSend(socContext.id, "fota", 5, 0, 0, 0);
|
|
|
|
+}
|
|
|
|
+void Tcp_Send_info()
|
|
|
|
+{
|
|
|
|
+ static UINT8 send_counter=0;
|
|
|
|
+ int len;
|
|
|
|
+ if(send_counter%1==0)
|
|
|
|
+ {
|
|
|
|
+ len = tcpipConnectionSend(socContext.id, {02,00,80}, 4, 0, 0, 0);
|
|
|
|
+ }
|
|
|
|
+ if(send_counter%6==0)
|
|
|
|
+ {
|
|
|
|
+ len = tcpipConnectionSend(socContext.id, {01 00}, 3, 0, 0, 0);
|
|
|
|
+ }
|
|
|
|
+ if(send_counter>=6*10+1)
|
|
|
|
+ {
|
|
|
|
+ send_counter=1;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ send_counter++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(len > 0)
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("connection %u send len %u success", socContext.id, len);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_7, P_INFO, 2, "connection %u send len %u success", socContext.id, len);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("connection %u sent data fail", socContext.id);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_8, P_ERROR, 1, "connection %u sent data fail", socContext.id);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+static void Tcp_Task(void* arg)
|
|
|
|
+{
|
|
|
|
+ uint16 send_counter;
|
|
|
|
+ eventCallbackMessage_t *queueItem = NULL;
|
|
|
|
+ appSetEDRXSettingSync(0,5,1800000);
|
|
|
|
+ appSetPSMSettingSync(1,3*60*60,10);
|
|
|
|
+ CHAR APP_SOCKET_DAEMON_SERVER_IP[] = "120.26.68.165";
|
|
|
|
+ uint16_t APP_SOCKET_DAEMON_SERVER_PORT = 14319;
|
|
|
|
+ INT32 connectionId = -1;
|
|
|
|
+ INT32 len;
|
|
|
|
+ UINT8 data[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
|
|
|
|
+ psEventQueueHandle = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(eventCallbackMessage_t*));
|
|
|
|
+ if (psEventQueueHandle == NULL)
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ appSetCFUN(1);
|
|
|
|
+ while(1){
|
|
|
|
+ if (xQueueReceive(psEventQueueHandle, &queueItem, portMAX_DELAY))
|
|
|
|
+ {
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("Queue receive->0x%x\n", queueItem->messageId);
|
|
|
|
+ #endif
|
|
|
|
+ switch(queueItem->messageId)
|
|
|
|
+ {
|
|
|
|
+ case QMSG_ID_NW_IP_READY:
|
|
|
|
+ connectionId = tcpipConnectionCreate(TCPIP_CONNECTION_PROTOCOL_TCP, PNULL, 0, APP_SOCKET_DAEMON_SERVER_IP, APP_SOCKET_DAEMON_SERVER_PORT, socketAppConnectionCallBack);
|
|
|
|
+ if(connectionId >= 0)
|
|
|
|
+ {
|
|
|
|
+ socContext.id = connectionId;
|
|
|
|
+ socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("create connection %u success", socContext.id);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_2, P_INFO, 1, "create connection %u success", socContext.id);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
{
|
|
{
|
|
#ifdef USING_PRINTF
|
|
#ifdef USING_PRINTF
|
|
- printf("TCP Not Ready\n");
|
|
|
|
|
|
+ printf("create connection fail\n");
|
|
#endif
|
|
#endif
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
|
- break;
|
|
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_3, P_ERROR, 0, "create connection fail");
|
|
}
|
|
}
|
|
- case 1://1代表网络驻网
|
|
|
|
|
|
+ break;
|
|
|
|
+ case QMSG_ID_NW_IP_NOREACHABLE:
|
|
|
|
+ break;
|
|
|
|
+ case QMSG_ID_SOCK_SENDPKG:
|
|
|
|
+ if (socContext.id >= 0 && socContext.status == APP_SOCKET_CONNECTION_CONNECTED)
|
|
{
|
|
{
|
|
- if (getaddrinfo( serverip, serverport , &hints, &server_res ) != 0 )
|
|
|
|
|
|
+ if(Tcp_Servies)
|
|
{
|
|
{
|
|
- #ifdef USING_PRINTF
|
|
|
|
- printf("TCP connect unresolved dns\n");
|
|
|
|
- #endif
|
|
|
|
|
|
+ Tcp_Send_info();
|
|
}
|
|
}
|
|
- Tcp_statuts=2;
|
|
|
|
- break;
|
|
|
|
}
|
|
}
|
|
- case 2://2代表尝试建立连接
|
|
|
|
|
|
+ else
|
|
{
|
|
{
|
|
#ifdef USING_PRINTF
|
|
#ifdef USING_PRINTF
|
|
- printf("Connecting...!%d\n",TcpconnectID);
|
|
|
|
|
|
+ printf("connection %u or status invalid", socContext.id, socContext.status);
|
|
#endif
|
|
#endif
|
|
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
|
|
|
- if(sockfd<0)
|
|
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_9, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case QMSG_ID_NW_IP_SUSPEND:
|
|
|
|
+ if (socContext.id >= 0 && socContext.status != APP_SOCKET_CONNECTION_CLOSED)
|
|
|
|
+ {
|
|
|
|
+ if(tcpipConnectionClose(socContext.id) < 0)
|
|
{
|
|
{
|
|
|
|
+ socContext.id = -1;
|
|
|
|
+ socContext.status = APP_SOCKET_CONNECTION_CLOSED;
|
|
#ifdef USING_PRINTF
|
|
#ifdef USING_PRINTF
|
|
- printf("socket create error\n");
|
|
|
|
|
|
+ printf("close connection %u success", socContext.id);
|
|
#endif
|
|
#endif
|
|
- Tcp_statuts=1;
|
|
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_4, P_INFO, 1, "close connection %u success", socContext.id);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- TcpconnectID = connect(sockfd, (struct sockaddr *) server_res->ai_addr, server_res->ai_addrlen);
|
|
|
|
- if(TcpconnectID<0 && errno != EINPROGRESS)
|
|
|
|
- {
|
|
|
|
- #ifdef USING_PRINTF
|
|
|
|
- printf("Connect failed!%d,Reconnect:%d\n",TcpconnectID,Reconnect_Num);
|
|
|
|
- #endif
|
|
|
|
- // close(sockfd);
|
|
|
|
- Tcp_statuts=2;
|
|
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
|
- Reconnect_Num++;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- Tcp_statuts=3;
|
|
|
|
- Reconnect_Num = 0;
|
|
|
|
- }
|
|
|
|
- if(Reconnect_Num>=20)
|
|
|
|
- {
|
|
|
|
- appSetCFUN(0);
|
|
|
|
- osDelay(10);
|
|
|
|
- appSetCFUN(1);
|
|
|
|
- PSInitEventCallbackTable();
|
|
|
|
- Tcp_statuts=1;
|
|
|
|
- Reconnect_Num = 0;
|
|
|
|
- }
|
|
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("close connection %u fail", socContext.id);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_5, P_ERROR, 1, "close connection %u fail", socContext.id);
|
|
}
|
|
}
|
|
- break;
|
|
|
|
}
|
|
}
|
|
- case 3://3代表连接建立成功
|
|
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_WORK);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- case 4://4代表连接断开
|
|
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("connection %u or status invalid", socContext.id, socContext.status);
|
|
|
|
+ #endif
|
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_6, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case QMSG_ID_SOCK_EXIT:
|
|
|
|
+ #ifdef USING_PRINTF
|
|
|
|
+ printf("socket disconnect\n");
|
|
|
|
+ #endif
|
|
|
|
+ if (sockfd >= 0)
|
|
{
|
|
{
|
|
- Tcp_statuts=2;
|
|
|
|
- break;
|
|
|
|
|
|
+ close(sockfd);
|
|
|
|
+ sockfd = -1;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- case PROCESS_TCP_STATE_WORK:
|
|
|
|
- {
|
|
|
|
- TcpSendBuffer = (uint8_t *)malloc(3);
|
|
|
|
- *(TcpSendBuffer+0) = 0x23;
|
|
|
|
- *(TcpSendBuffer+1) = 0x23;
|
|
|
|
- *(TcpSendBuffer+2) = 0x02;
|
|
|
|
- TcpsendID = send(sockfd, TcpSendBuffer, 3, 0 );
|
|
|
|
- if (TcpsendID<0)
|
|
|
|
- {
|
|
|
|
- closesocket(sockfd);
|
|
|
|
- TcpconnectID = -1;
|
|
|
|
- Tcp_statuts = 4;
|
|
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- case PROCESS_TCP_STATE_SLEEP:
|
|
|
|
- {
|
|
|
|
- closesocket(sockfd);
|
|
|
|
- #ifdef USING_PRINTF
|
|
|
|
- printf("TCP_STATE_SLEEP\n");
|
|
|
|
- #endif
|
|
|
|
- Tcp_Sleep_Flag = TRUE;
|
|
|
|
- appSetCFUN(0);
|
|
|
|
- while(1)
|
|
|
|
- {
|
|
|
|
- osDelay(30000/portTICK_PERIOD_MS);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
|
|
+ appSetCFUN(0);
|
|
|
|
+ free(queueItem);
|
|
|
|
+ osThreadExit();
|
|
}
|
|
}
|
|
|
|
+ free(queueItem);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -461,8 +632,8 @@ void Tcp_Task_Init()
|
|
task_attr.cb_mem = &gProcess_Tcp_Task_t;
|
|
task_attr.cb_mem = &gProcess_Tcp_Task_t;
|
|
task_attr.cb_size = sizeof(StaticTask_t);
|
|
task_attr.cb_size = sizeof(StaticTask_t);
|
|
osThreadNew(Tcp_Task, NULL, &task_attr);
|
|
osThreadNew(Tcp_Task, NULL, &task_attr);
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
//主任务线程初始化
|
|
//主任务线程初始化
|
|
void Main_Task_Init()
|
|
void Main_Task_Init()
|
|
{
|
|
{
|
|
@@ -472,7 +643,6 @@ void Main_Task_Init()
|
|
HAL_UART_RecvFlowControl(false);
|
|
HAL_UART_RecvFlowControl(false);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
- //slpManDeepSlpTimerRegisterExpCb(slpManTimerCb);
|
|
|
|
osThreadAttr_t task_attr;
|
|
osThreadAttr_t task_attr;
|
|
memset(&task_attr,0,sizeof(task_attr));
|
|
memset(&task_attr,0,sizeof(task_attr));
|
|
memset(gProcess_Main_TaskStack, 0xA5, PROC_MAIN_TASK_STACK_SIZE);
|
|
memset(gProcess_Main_TaskStack, 0xA5, PROC_MAIN_TASK_STACK_SIZE);
|