|
@@ -0,0 +1,540 @@
|
|
|
+/****************************************************************************
|
|
|
+ *
|
|
|
+ * Copy right: Qx.Chen jie
|
|
|
+ * File name: TcpTask.c
|
|
|
+ * Description: 网络发送接收任务
|
|
|
+ * History: 2021-03-07
|
|
|
+ *
|
|
|
+ ****************************************************************************/
|
|
|
+#include "bsp.h"
|
|
|
+#include "bsp_custom.h"
|
|
|
+#include "osasys.h"
|
|
|
+#include "ostask.h"
|
|
|
+#include "queue.h"
|
|
|
+#include "ps_event_callback.h"
|
|
|
+#include "app.h"
|
|
|
+#include "cmisim.h"
|
|
|
+#include "cmimm.h"
|
|
|
+#include "cmips.h"
|
|
|
+#include "sockets.h"
|
|
|
+#include "psifevent.h"
|
|
|
+#include "ps_lib_api.h"
|
|
|
+#include "lwip/netdb.h"
|
|
|
+//#include <cis_def.h>
|
|
|
+#include "debug_log.h"
|
|
|
+#include "slpman_ec616.h"
|
|
|
+#include "plat_config.h"
|
|
|
+#include "ec_tcpip_api.h"
|
|
|
+#include "MainTask.h"
|
|
|
+#include "TcpTask.h"
|
|
|
+#include "app.h"
|
|
|
+#include "UartTask.h"
|
|
|
+#include "GpsTask.h"
|
|
|
+//全局变量输出区
|
|
|
+
|
|
|
+//全局变量输入区
|
|
|
+extern UINT32 Timer_count;
|
|
|
+extern volatile bool Sleep_flag;
|
|
|
+extern UartReadMsgType UartReadMsg;
|
|
|
+extern osMutexId_t UartMutex;
|
|
|
+extern osMutexId_t GpsMutex;
|
|
|
+extern UINT8 GpsData[16];
|
|
|
+CHAR BattSN[BATT_SN_LEN] = "GYTEST00000000003";//SN仍在测试
|
|
|
+//局部变量申请
|
|
|
+static AppSocketConnectionContext socContext = {-1, APP_SOCKET_CONNECTION_CLOSED};
|
|
|
+static StaticTask_t gProcess_Tcp_Task_t;
|
|
|
+static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
|
|
|
+static QueueHandle_t psEventQueueHandle;//状态转换队列句柄
|
|
|
+static osThreadId_t TcpTaskId = NULL;
|
|
|
+static process_TCP gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
|
|
|
+#define PROC_TCP_STATE_SWITCH(a) (gProcess_Tcp_Task = a)
|
|
|
+static eventCallbackMessage_t *queueItem = NULL;
|
|
|
+static UINT8 gImsi[16] = {0};
|
|
|
+static UINT32 gCellID = 0;
|
|
|
+//Tcp线程堆栈申请区
|
|
|
+
|
|
|
+//函数声明区
|
|
|
+static void TcpWorkStatus(void *arg);
|
|
|
+static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait);
|
|
|
+static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen);
|
|
|
+void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent);
|
|
|
+void TcpDataInfoAssembleSend();
|
|
|
+UINT8 bcc_chk(UINT8* data, UINT8 length);
|
|
|
+//线程任务区
|
|
|
+static void TcpTask(void* arg)
|
|
|
+{
|
|
|
+ INT32 connectionId = -1;
|
|
|
+ appSetEDRXSettingSync(0,5,1800000);
|
|
|
+ appSetPSMSettingSync(1,3*60*60,10);
|
|
|
+ appSetCFUN(1);
|
|
|
+ psEventQueueHandle = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(eventCallbackMessage_t*));
|
|
|
+ PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
+ if (psEventQueueHandle == NULL)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ osDelay(100);
|
|
|
+ if(Sleep_flag)
|
|
|
+ {
|
|
|
+ sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
|
|
|
+ sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
|
|
|
+ }
|
|
|
+ else if(Timer_count%50==0)
|
|
|
+ {
|
|
|
+ sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
|
|
|
+ }
|
|
|
+ if (xQueueReceive(psEventQueueHandle, &queueItem, 0))
|
|
|
+ {
|
|
|
+ switch(queueItem->messageId)
|
|
|
+ {
|
|
|
+ case QMSG_ID_NW_IP_READY:
|
|
|
+ if(connectionId < 0)
|
|
|
+ {
|
|
|
+ connectionId = tcpipConnectionCreate(TCPIP_CONNECTION_PROTOCOL_TCP, PNULL, 0, QX_TCP_IPADRRES, QX_TCP_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
|
|
|
+ {
|
|
|
+ sendQueueMsg(QMSG_ID_NW_IP_NOREACHABLE, 0);
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("create connection fail\n");
|
|
|
+ #endif
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_3, P_ERROR, 0, "create connection fail");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case QMSG_ID_NW_IP_NOREACHABLE:
|
|
|
+ break;
|
|
|
+ case QMSG_ID_SOCK_SENDPKG:
|
|
|
+ if (socContext.id >= 0 && socContext.status == APP_SOCKET_CONNECTION_CONNECTED)
|
|
|
+ {
|
|
|
+ TcpDataInfoAssembleSend();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("connection %u or status invalid", socContext.id, socContext.status);
|
|
|
+ #endif
|
|
|
+ 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
|
|
|
+ printf("close connection %u success", socContext.id);
|
|
|
+ #endif
|
|
|
+ ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_4, P_INFO, 1, "close connection %u success", socContext.id);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ #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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ #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("QMSG_ID_SOCK_EXIT queueItem->messageId:%x\n",queueItem->messageId);
|
|
|
+ #endif
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("socket exit\n");
|
|
|
+ #endif
|
|
|
+ appSetCFUN(0);
|
|
|
+ free(queueItem);
|
|
|
+ osDelay(1000);
|
|
|
+ TcpTaskDeInit(arg);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ free(queueItem);
|
|
|
+ }
|
|
|
+ }//while 循环
|
|
|
+}
|
|
|
+//Tcp线程初始化
|
|
|
+void TcpTaskInit(void *arg)
|
|
|
+{
|
|
|
+ osThreadAttr_t task_attr;
|
|
|
+ registerPSEventCallback(NB_GROUP_ALL_MASK, socketRegisterPSUrcCallback);
|
|
|
+ memset(&task_attr,0,sizeof(task_attr));
|
|
|
+ memset(gProcess_Tcp_TaskStack, 0xA5, PROC_TCP_TASK_STACK_SIZE);
|
|
|
+ task_attr.name = "Tcp_Task";
|
|
|
+ task_attr.stack_mem = gProcess_Tcp_TaskStack;
|
|
|
+ task_attr.stack_size = PROC_TCP_TASK_STACK_SIZE;
|
|
|
+ task_attr.priority = osPriorityBelowNormal7;
|
|
|
+ task_attr.cb_mem = &gProcess_Tcp_Task_t;
|
|
|
+ task_attr.cb_size = sizeof(StaticTask_t);
|
|
|
+ TcpTaskId = osThreadNew(TcpTask, NULL, &task_attr);
|
|
|
+}
|
|
|
+void TcpTaskDeInit(void *arg)
|
|
|
+{
|
|
|
+ osThreadTerminate(TcpTaskId);
|
|
|
+ TcpTaskId = NULL;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+/*------------------------------函数区域-----------------------*/
|
|
|
+static void TcpDataInfoAssembleSend()
|
|
|
+{ static UINT8 send_counter = 0;
|
|
|
+ BattMsgtoTcpType BattToTcpInfo;
|
|
|
+ GPSMsgtoTcpType GpsToTcpInfo;
|
|
|
+ OsaUtcTimeTValue TimeStracture;
|
|
|
+ UINT8 csq=0;
|
|
|
+ INT8 snr=0;
|
|
|
+ INT8 rsnr=0;
|
|
|
+ INT16 Batt_current;
|
|
|
+ UINT16 BattU;
|
|
|
+ UINT8 temp=0;
|
|
|
+ UINT8 TEMP_NUM=0;
|
|
|
+ UINT16 DataLen;
|
|
|
+ if(send_counter%1==0)
|
|
|
+ {
|
|
|
+ osStatus_t result = osMutexAcquire(UartMutex, osWaitForever);
|
|
|
+ appGetSystemTimeUtcSync(&TimeStracture);
|
|
|
+ appGetSignalInfoSync(&csq,&snr,&rsnr);
|
|
|
+ DataLen= (UINT16)sizeof(BattToTcpInfo.battInfo);
|
|
|
+ BattToTcpInfo.startSymbol[0] = TCP_START_SYM1;
|
|
|
+ BattToTcpInfo.startSymbol[1] = TCP_START_SYM2;
|
|
|
+ BattToTcpInfo.cmdSymbol = TCP_CMD_SYM;
|
|
|
+ BattToTcpInfo.ansSymbol = TCP_ANS_SYM;
|
|
|
+ memcpy(BattToTcpInfo.SN, BattSN,BATT_SN_LEN);
|
|
|
+ BattToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
|
|
|
+ BattToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
|
|
|
+ BattToTcpInfo.dataLength[1] = DataLen & 0xFF;
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[0] = ((((TimeStracture.UTCtimer1) >> 16) & 0xFFFF) - 0x07D0) & 0xFF; //year
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[1] = ((TimeStracture.UTCtimer1) >> 8 ) & 0xFF; //month
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[2] = (TimeStracture.UTCtimer1) & 0xFF; //day
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[3] = ((TimeStracture.UTCtimer2) >> 24 ) & 0xFF; //hour
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[4] = ((TimeStracture.UTCtimer2) >> 16 ) & 0xFF; //mins
|
|
|
+ BattToTcpInfo.battInfo.sendTimeUTC[5] = ((TimeStracture.UTCtimer2) >> 8 ) & 0xFF; //sec
|
|
|
+ BattToTcpInfo.battInfo.msgMark = BATTMSG;
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[0] = ((((TimeStracture.UTCtimer1) >> 16) & 0xFFFF) - 0x07D0) & 0xFF; //year
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[1] = ((TimeStracture.UTCtimer1) >> 8 ) & 0xFF; //month
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[2] = (TimeStracture.UTCtimer1) & 0xFF; //day
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[3] = ((TimeStracture.UTCtimer2) >> 24 ) & 0xFF; //hour
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[4] = ((TimeStracture.UTCtimer2) >> 16 ) & 0xFF; //mins
|
|
|
+ BattToTcpInfo.battInfo.msgCollectionTimeUTC[5] = ((TimeStracture.UTCtimer2) >> 8 ) & 0xFF; //sec
|
|
|
+ BattToTcpInfo.battInfo.signalStrength = csq ;
|
|
|
+ //故障等级故障代码未定义
|
|
|
+ TEMP_NUM = UartReadMsg.data[3];//TEMP_NUM为温度总检测数量
|
|
|
+ BattToTcpInfo.battInfo.errClass = 0x00;
|
|
|
+ BattToTcpInfo.battInfo.errCode[0] = 0x00;
|
|
|
+ BattToTcpInfo.battInfo.errCode[1] = 0x00;
|
|
|
+ Batt_current = (UartReadMsg.data[(0x02+BATT_CELL_VOL_NUM)*2]<<8)|(UartReadMsg.data[(0x02+BATT_CELL_VOL_NUM)*2+1]);
|
|
|
+ if (Batt_current>0x8000)
|
|
|
+ {
|
|
|
+ Batt_current = Batt_current|0x7fff;
|
|
|
+ Batt_current = Batt_current/10;
|
|
|
+ Batt_current = 0x2710 - Batt_current;
|
|
|
+ Batt_current = Batt_current;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Batt_current = Batt_current/10;
|
|
|
+ Batt_current = Batt_current+0x2710;
|
|
|
+ Batt_current = Batt_current;
|
|
|
+ }
|
|
|
+ BattToTcpInfo.battInfo.battI[0] = Batt_current>>8;
|
|
|
+ BattToTcpInfo.battInfo.battI[1] = Batt_current & 0xFF;
|
|
|
+ BattU =( (UartReadMsg.data[(0x18+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<8|(UartReadMsg.data[(0x18+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]))/10;
|
|
|
+ //电池内外电压保持一致
|
|
|
+ BattToTcpInfo.battInfo.battLinkVol[0] = BattU >> 8;
|
|
|
+ BattToTcpInfo.battInfo.battLinkVol[1] = BattU & 0xFF;
|
|
|
+ BattToTcpInfo.battInfo.battPackVol[0] = BattU >> 8;
|
|
|
+ BattToTcpInfo.battInfo.battPackVol[1] = BattU & 0xFF;
|
|
|
+ temp = ((UartReadMsg.data[(0x09+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1])>>1)&0x03;
|
|
|
+ BattToTcpInfo.battInfo.chrgState = ((temp&0x01)<<01)|(temp>>0x01);
|
|
|
+ BattToTcpInfo.battInfo.battSOC = UartReadMsg.data[(0x0B+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
|
|
|
+ BattToTcpInfo.battInfo.battSOH = UartReadMsg.data[(0x0C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
|
|
|
+ memcpy(BattToTcpInfo.battInfo.batCellBalenceState,&UartReadMsg.data[(0x06+BATT_CELL_VOL_NUM+TEMP_NUM)*2],4);
|
|
|
+ BattToTcpInfo.battInfo.battCellNum= BATT_CELL_VOL_NUM ;
|
|
|
+ memcpy(BattToTcpInfo.battInfo.battCellU,&UartReadMsg.data[0x04],BATT_CELL_VOL_NUM_2);
|
|
|
+ BattToTcpInfo.battInfo.battTempNum = BATT_TEMP_NUM;
|
|
|
+ for(int i=0; i<BATT_TEMP_NUM; i++)
|
|
|
+ {
|
|
|
+ BattToTcpInfo.battInfo.battCellTemp[i] = UartReadMsg.data[(0x06+BATT_CELL_VOL_NUM+i)*2+1];
|
|
|
+ }
|
|
|
+ BattToTcpInfo.battInfo.battWorkState =UartReadMsg.data[(0x03+BATT_CELL_VOL_NUM)*2+1]&0x03;//电池状态,0表示静置,1表示放电,2表示充电
|
|
|
+ BattToTcpInfo.battInfo.battHeatState = UartReadMsg.data[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
|
|
|
+ BattToTcpInfo.battInfo.battMosTemp = UartReadMsg.data[(0x06+BATT_CELL_VOL_NUM+BATT_TEMP_NUM)*2+1];
|
|
|
+ BattToTcpInfo.battInfo.battEnvTemp = UartReadMsg.data[(0x06+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+1)*2+1];
|
|
|
+ BattToTcpInfo.CRC = bcc_chk((UINT8 *)&BattToTcpInfo, sizeof(BattMsgtoTcpType)-1 );
|
|
|
+ osMutexRelease(UartMutex);
|
|
|
+ tcpipConnectionSend(socContext.id, (UINT8 *)&BattToTcpInfo, sizeof(BattToTcpInfo), 0, 0, 0);
|
|
|
+
|
|
|
+ }
|
|
|
+ if(send_counter%6==0)
|
|
|
+ {
|
|
|
+ osStatus_t result = osMutexAcquire(GpsMutex, osWaitForever);
|
|
|
+ appGetSystemTimeUtcSync(&TimeStracture);
|
|
|
+ DataLen= (UINT16)sizeof(GpsToTcpInfo.gpsInfo);
|
|
|
+ GpsToTcpInfo.startSymbol[0] = TCP_START_SYM1;
|
|
|
+ GpsToTcpInfo.startSymbol[1] = TCP_START_SYM2;
|
|
|
+ GpsToTcpInfo.cmdSymbol = TCP_CMD_SYM;
|
|
|
+ GpsToTcpInfo.ansSymbol = TCP_ANS_SYM;
|
|
|
+ memcpy(GpsToTcpInfo.SN, BattSN,BATT_SN_LEN);
|
|
|
+ GpsToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
|
|
|
+ GpsToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
|
|
|
+ GpsToTcpInfo.dataLength[1] = DataLen & 0xFF;
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[0] = ((((TimeStracture.UTCtimer1) >> 16) & 0xFFFF) - 0x07D0) & 0xFF; //year
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[1] = ((TimeStracture.UTCtimer1) >> 8 ) & 0xFF; //month
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[2] = (TimeStracture.UTCtimer1) & 0xFF; //day
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[3] = ((TimeStracture.UTCtimer2) >> 24 ) & 0xFF; //hour
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[4] = ((TimeStracture.UTCtimer2) >> 16 ) & 0xFF; //mins
|
|
|
+ GpsToTcpInfo.gpsInfo.sendTimeUTC[5] = ((TimeStracture.UTCtimer2) >> 8 ) & 0xFF; //sec
|
|
|
+ GpsToTcpInfo.gpsInfo.msgMark = GPSMSG;
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[0] = ((((TimeStracture.UTCtimer1) >> 16) & 0xFFFF) - 0x07D0) & 0xFF; //year
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[1] = ((TimeStracture.UTCtimer1) >> 8 ) & 0xFF; //month
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[2] = (TimeStracture.UTCtimer1) & 0xFF; //day
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[3] = ((TimeStracture.UTCtimer2) >> 24 ) & 0xFF; //hour
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[4] = ((TimeStracture.UTCtimer2) >> 16 ) & 0xFF; //mins
|
|
|
+ GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[5] = ((TimeStracture.UTCtimer2) >> 8 ) & 0xFF;
|
|
|
+ memcpy((UINT8 *)&GpsToTcpInfo.gpsInfo.locateMark, GpsData,sizeof(GpsData));
|
|
|
+ GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType)-1 );
|
|
|
+ osMutexRelease(GpsMutex);
|
|
|
+ if(GpsToTcpInfo.gpsInfo.locateMark==0x01)
|
|
|
+ {
|
|
|
+ tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(send_counter>=6*10+1)
|
|
|
+ {
|
|
|
+ send_counter=1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ send_counter++;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+//TCP发送校验函数
|
|
|
+UINT8 bcc_chk(UINT8* data, UINT8 length)
|
|
|
+{
|
|
|
+ UINT8 bcc_chk_return = 0x00;
|
|
|
+ UINT8 count = 0;
|
|
|
+ while (count<length)
|
|
|
+ {
|
|
|
+ bcc_chk_return^=data[count];
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ return bcc_chk_return;
|
|
|
+}
|
|
|
+//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");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+//Tcp状态注册函数
|
|
|
+static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen)
|
|
|
+{
|
|
|
+ CmiSimImsiStr *imsi = NULL;
|
|
|
+ CmiPsCeregInd *cereg = NULL;
|
|
|
+
|
|
|
+ UINT8 rssi = 0, index = 0;
|
|
|
+ NmAtiNetifInfo *netif = NULL;
|
|
|
+
|
|
|
+ switch(eventID)
|
|
|
+ {
|
|
|
+ case NB_URC_ID_SIM_READY:
|
|
|
+ {
|
|
|
+ imsi = (CmiSimImsiStr *)param;
|
|
|
+ memcpy(gImsi, imsi->contents, imsi->length);
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("SIM ready(imsi=%s)\n",(UINT8 *)imsi->contents);
|
|
|
+ #endif
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case NB_URC_ID_MM_SIGQ:
|
|
|
+ {
|
|
|
+ rssi = *(UINT8 *)param;
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("RSSI signal=%d\n",rssi);
|
|
|
+ #endif
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case NB_URC_ID_PS_BEARER_ACTED:
|
|
|
+ {
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("Default bearer activated\n");
|
|
|
+ #endif
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case NB_URC_ID_PS_BEARER_DEACTED:
|
|
|
+ {
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("Default bearer Deactivated\n");
|
|
|
+ #endif
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case NB_URC_ID_PS_CEREG_CHANGED:
|
|
|
+ {
|
|
|
+ cereg = (CmiPsCeregInd *)param;
|
|
|
+ gCellID = cereg->celId;
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("URCCallBack:CEREG changed act:%d celId:%d locPresent:%d tac:%d\n", cereg->act, cereg->celId, cereg->locPresent, cereg->tac);
|
|
|
+ #endif
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case NB_URC_ID_PS_NETINFO:
|
|
|
+ {
|
|
|
+ netif = (NmAtiNetifInfo *)param;
|
|
|
+ if (netif->netStatus == NM_NETIF_ACTIVATED)
|
|
|
+ sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+//Tcpz连接状态回调函数
|
|
|
+void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent)
|
|
|
+{
|
|
|
+ switch(connectionEventType)
|
|
|
+ {
|
|
|
+ case TCPIP_CONNECTION_STATUS_EVENT:
|
|
|
+ {
|
|
|
+ TcpipConnectionStatusInd *statusInd;
|
|
|
+ statusInd = (TcpipConnectionStatusInd *)bodyEvent;
|
|
|
+ if(statusInd != PNULL)
|
|
|
+ {
|
|
|
+ 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");
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case TCPIP_CONNECTION_RECEIVE_EVENT:
|
|
|
+ {
|
|
|
+ TcpipConnectionRecvDataInd *rcvInd;
|
|
|
+ rcvInd = (TcpipConnectionRecvDataInd *)bodyEvent;
|
|
|
+ if(rcvInd != PNULL)
|
|
|
+ {
|
|
|
+ uint8_t* Ptr;
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+
|
|
|
+ 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
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ #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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|