TcpTask.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. /****************************************************************************
  2. *
  3. * Copy right: Qx.Chen jie
  4. * File name: TcpTask.c
  5. * Description: 网络发送接收任务
  6. * History: 2021-03-07
  7. *
  8. ****************************************************************************/
  9. #include "bsp.h"
  10. #include "bsp_custom.h"
  11. #include "osasys.h"
  12. #include "ostask.h"
  13. #include "queue.h"
  14. #include "ps_event_callback.h"
  15. #include "app.h"
  16. #include "cmisim.h"
  17. #include "cmimm.h"
  18. #include "cmips.h"
  19. #include "sockets.h"
  20. #include "psifevent.h"
  21. #include "ps_lib_api.h"
  22. #include "lwip/netdb.h"
  23. //#include <cis_def.h>
  24. #include "debug_log.h"
  25. #include "slpman_ec616.h"
  26. #include "plat_config.h"
  27. #include "ec_tcpip_api.h"
  28. #include "MainTask.h"
  29. #include "TcpTask.h"
  30. #include "UartTask.h"
  31. #include "GpsTask.h"
  32. #include "Fota.h"
  33. #include "Signal.h"
  34. //全局变量输出区
  35. UINT32 TcpService = 0;
  36. UINT8 WorkFlag=0;
  37. //全局变量输入区
  38. extern UINT32 Timer_count;
  39. extern volatile BOOL Sleep_flag;
  40. extern osMutexId_t GpsMutex;
  41. extern UINT8 GpsData[20];
  42. extern AppNVMDataType AppNVMData;
  43. extern AppDataBody AppDataInfo;
  44. extern QueueHandle_t UartWriteCmdHandle;
  45. extern BOOL UartBattInfoRecvFlag;
  46. //局部变量申请
  47. AppSocketConnectionContext socContext = {-1, APP_SOCKET_CONNECTION_CLOSED};
  48. static StaticTask_t gProcess_Tcp_Task_t;
  49. static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
  50. static QueueHandle_t psEventQueueHandle;//状态转换队列句柄
  51. static osThreadId_t TcpTaskId = NULL;
  52. static process_TCP gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
  53. #define PROC_TCP_STATE_SWITCH(a) (gProcess_Tcp_Task = a)
  54. static eventCallbackMessage_t *queueItem = NULL;
  55. static UINT8 gImsi[16] = {0};
  56. static UINT32 gCellID = 0;
  57. static QueueHandle_t TcpRecvHandle = NULL;
  58. static UINT8 TcpRecvEnd = 0;
  59. //Tcp线程堆栈申请区
  60. //函数声明区
  61. static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait);
  62. static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen);
  63. static void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent);
  64. static void TcpDataInfoAssembleSend();
  65. static void TcpDataInfoRecvHandle();
  66. UINT8 bcc_chk(UINT8* data, UINT8 length);
  67. //线程任务区
  68. static void TcpTask(void* arg)
  69. {
  70. appSetEDRXSettingSync(0,5,1800000);
  71. appSetPSMSettingSync(1,3*60*60,10);
  72. appSetCFUN(1);
  73. psEventQueueHandle = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(eventCallbackMessage_t*));
  74. PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
  75. if (psEventQueueHandle == NULL)
  76. {
  77. return;
  78. }
  79. if(TcpRecvHandle == NULL)
  80. {
  81. TcpRecvHandle = osMessageQueueNew(1,sizeof(TcpipConnectionRecvDataInd*), NULL);
  82. }
  83. if(Error_Mutex == NULL)
  84. {
  85. Error_Mutex = osMutexNew(NULL);
  86. }
  87. osDelay(5000);//等待驻网延时5s
  88. while (true)
  89. {
  90. osDelay(100);
  91. if(Sleep_flag)
  92. {
  93. sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
  94. sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
  95. }
  96. else if(Timer_count%50==0 && TcpService==0x00 && AppNVMData.EOLState==1)
  97. {
  98. sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
  99. }
  100. else if(Timer_count%10==0)
  101. {
  102. TcpRecvEnd++;
  103. }
  104. if(TcpRecvEnd>=20)
  105. {
  106. TcpService = 0x00;
  107. TcpRecvEnd=0;
  108. }
  109. if (xQueueReceive(psEventQueueHandle, &queueItem, 0))
  110. {
  111. switch(queueItem->messageId)
  112. {
  113. case QMSG_ID_NW_IP_READY:
  114. if(socContext.id < 0)
  115. {
  116. struct addrinfo hints;
  117. struct addrinfo *servinfo = NULL;
  118. char *Tcp_ip_des;
  119. memset(&hints, 0, sizeof(hints));
  120. hints.ai_family = AF_INET;
  121. hints.ai_socktype = SOCK_STREAM;
  122. getaddrinfo(QX_TCP_ADD, NULL, &hints, &servinfo);
  123. Tcp_ip_des = ip4addr_ntoa((const ip4_addr_t *)(&(servinfo->ai_addr->sa_data[2])));
  124. #ifdef USING_PRINTF1
  125. printf("\nservinfo-%d:\n",servinfo->ai_addr->sa_len);
  126. for(int i=0;i<4;i++)
  127. printf("%d ",servinfo->ai_addr->sa_data[2+i]);
  128. printf("\nTcp_ip_des-%d:\n",sizeof(Tcp_ip_des));
  129. for(int i=0;i<16;i++)
  130. printf("%c",*(Tcp_ip_des+i));
  131. #endif
  132. socContext.id = tcpipConnectionCreate(TCPIP_CONNECTION_PROTOCOL_TCP, PNULL, 0, Tcp_ip_des, QX_TCP_PORT, socketAppConnectionCallBack);
  133. if (NULL != servinfo) {
  134. freeaddrinfo(servinfo);
  135. }
  136. }
  137. if(socContext.id >= 0)
  138. {
  139. socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
  140. #ifdef USING_PRINTF
  141. printf("create connection %u success", socContext.id);
  142. #endif
  143. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_2, P_INFO, 1, "create connection %u success", socContext.id);
  144. }
  145. else
  146. {
  147. sendQueueMsg(QMSG_ID_NW_IP_NOREACHABLE, 0);
  148. #ifdef USING_PRINTF
  149. printf("create connection fail\n");
  150. #endif
  151. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_3, P_ERROR, 0, "create connection fail");
  152. }
  153. break;
  154. case QMSG_ID_NW_IP_NOREACHABLE:
  155. {
  156. Error_count++;
  157. appSetCFUN(0);
  158. osDelay(5000);
  159. appSetCFUN(1);
  160. osDelay(5000);
  161. }
  162. break;
  163. case QMSG_ID_SOCK_SENDPKG:
  164. if (socContext.id >= 0 && socContext.status == APP_SOCKET_CONNECTION_CONNECTED)
  165. {
  166. TcpDataInfoAssembleSend();
  167. }
  168. else
  169. {
  170. sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
  171. #ifdef USING_PRINTF
  172. printf("connection %u or status invalid", socContext.id, socContext.status);
  173. #endif
  174. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_9, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status);
  175. }
  176. break;
  177. case QMSG_ID_SOCK_RECVPKG:
  178. TcpDataInfoRecvHandle();
  179. osDelay(100);
  180. TcpRecvEnd = 0;
  181. break;
  182. case QMSG_ID_NW_IP_SUSPEND:
  183. if (socContext.id >= 0 && socContext.status != APP_SOCKET_CONNECTION_CLOSED)
  184. {
  185. if(tcpipConnectionClose(socContext.id) < 0)
  186. {
  187. socContext.id = -1;
  188. socContext.status = APP_SOCKET_CONNECTION_CLOSED;
  189. #ifdef USING_PRINTF
  190. printf("close connection %u success", socContext.id);
  191. #endif
  192. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_4, P_INFO, 1, "close connection %u success", socContext.id);
  193. }
  194. else
  195. {
  196. #ifdef USING_PRINTF
  197. printf("close connection %u fail", socContext.id);
  198. #endif
  199. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_5, P_ERROR, 1, "close connection %u fail", socContext.id);
  200. }
  201. }
  202. else
  203. {
  204. #ifdef USING_PRINTF
  205. printf("connection %u or status invalid", socContext.id, socContext.status);
  206. #endif
  207. ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_6, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status);
  208. }
  209. break;
  210. case QMSG_ID_SOCK_EXIT:
  211. #ifdef USING_PRINTF
  212. printf("QMSG_ID_SOCK_EXIT queueItem->messageId:%x\n",queueItem->messageId);
  213. #endif
  214. #ifdef USING_PRINTF
  215. printf("socket exit\n");
  216. #endif
  217. appSetCFUN(0);
  218. free(queueItem);
  219. osDelay(1000);
  220. TcpTaskDeInit(arg);
  221. break;
  222. }
  223. free(queueItem);
  224. }
  225. }//while 循环
  226. }
  227. //Tcp线程初始化
  228. void TcpTaskInit(void *arg)
  229. {
  230. osThreadAttr_t task_attr;
  231. registerPSEventCallback(NB_GROUP_ALL_MASK, socketRegisterPSUrcCallback);
  232. memset(&task_attr,0,sizeof(task_attr));
  233. memset(gProcess_Tcp_TaskStack, 0xA5, PROC_TCP_TASK_STACK_SIZE);
  234. task_attr.name = "Tcp_Task";
  235. task_attr.stack_mem = gProcess_Tcp_TaskStack;
  236. task_attr.stack_size = PROC_TCP_TASK_STACK_SIZE;
  237. task_attr.priority = osPriorityBelowNormal7;
  238. task_attr.cb_mem = &gProcess_Tcp_Task_t;
  239. task_attr.cb_size = sizeof(StaticTask_t);
  240. TcpTaskId = osThreadNew(TcpTask, NULL, &task_attr);
  241. }
  242. void TcpTaskDeInit(void *arg)
  243. {
  244. osThreadTerminate(TcpTaskId);
  245. TcpTaskId = NULL;
  246. }
  247. /*------------------------------函数区域----------------------------------------------------------------------------------------------*/
  248. static void TcpDataInfoAssembleSend()
  249. { static UINT32 send_counter = 0;
  250. OsaUtcTimeTValue TimeStracture;
  251. UINT8 csq=0;
  252. INT8 snr=0;
  253. INT8 rsnr=0;
  254. INT16 Batt_current=0;
  255. UINT16 BattU=0;
  256. UINT8 temp=0;
  257. UINT16 DataLen=0;
  258. UINT8 BattSendFreq=6;
  259. UINT8 GpsSendFreq=1;
  260. UINT8 WorkState=0;
  261. UINT16 year;
  262. UINT8 month,day,hour,minute,sec;
  263. UINT16 ErrorTemp;
  264. UTC8TimeType UTC8TimeTcp;
  265. int i = 0;
  266. INT8 len = -1;
  267. WorkState = battWorkState;
  268. if(WorkState==0x00 && WorkFlag==0x01)
  269. {
  270. if(send_counter%(RUN_END_DELAY/5)==0)
  271. {
  272. WorkFlag=0x00;
  273. }
  274. }
  275. else if(WorkState==0x00 && WorkFlag==0x02)
  276. {
  277. if(send_counter%(CHRG_END_DELAY/5)==0)
  278. {
  279. WorkFlag=0x00;
  280. }
  281. }
  282. else
  283. {
  284. WorkFlag=WorkState;
  285. }
  286. switch(WorkFlag)
  287. {
  288. case 0x00:
  289. BattSendFreq = AppDataInfo.BmsDisChrgInfoSendFreq/5;
  290. GpsSendFreq = AppDataInfo.GpsChrgInfoSendFreq/5;
  291. break;
  292. case 0x01:
  293. GpsSendFreq = AppDataInfo.GpsDisChrgInfoSendFreq/5;
  294. BattSendFreq = AppDataInfo.BmsDisChrgInfoSendFreq/5;
  295. break;
  296. case 0x02:
  297. BattSendFreq = AppDataInfo.BmsChrgInfoSendFreq/5;
  298. GpsSendFreq = AppDataInfo.GpsChrgInfoSendFreq/5;
  299. break;
  300. default:
  301. BattSendFreq = AppDataInfo.BmsDisChrgInfoSendFreq/5;
  302. GpsSendFreq = AppDataInfo.GpsChrgInfoSendFreq/5;
  303. break;
  304. }
  305. if(send_counter%BattSendFreq==0)
  306. {
  307. BattMsgtoTcpType BattToTcpInfo;
  308. //osStatus_t result = osMutexAcquire(UartMutex, osWaitForever);
  309. appGetSystemTimeUtcSync(&TimeStracture);
  310. year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
  311. month=(TimeStracture.UTCtimer1&0xff00)>>8;
  312. day=TimeStracture.UTCtimer1&0xff;
  313. hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
  314. minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
  315. sec=(TimeStracture.UTCtimer2&0xff00)>>8;
  316. UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
  317. appGetSignalInfoSync(&csq,&snr,&rsnr);
  318. DataLen= (UINT16)sizeof(BattToTcpInfo.battInfo);
  319. BattToTcpInfo.startSymbol[0] = TCP_START_SYM1;
  320. BattToTcpInfo.startSymbol[1] = TCP_START_SYM2;
  321. BattToTcpInfo.cmdSymbol = TCP_CMD_SYM;
  322. BattToTcpInfo.ansSymbol = TCP_ANS_SYM;
  323. memcpy(BattToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
  324. BattToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
  325. BattToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
  326. BattToTcpInfo.dataLength[1] = DataLen & 0xFF;
  327. #ifdef USING_PRINTF1
  328. printf("year:%x,month:%d,day:%d,hour:%d,minute:%d,second:%d\n",UTC8TimeTcp.year,UTC8TimeTcp.month,UTC8TimeTcp.day,UTC8TimeTcp.hour,UTC8TimeTcp.minute,UTC8TimeTcp.second);
  329. #endif
  330. BattToTcpInfo.battInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  331. BattToTcpInfo.battInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  332. BattToTcpInfo.battInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  333. BattToTcpInfo.battInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  334. BattToTcpInfo.battInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  335. BattToTcpInfo.battInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF; //sec
  336. BattToTcpInfo.battInfo.msgMark = BATTMSG;
  337. BattToTcpInfo.battInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  338. BattToTcpInfo.battInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  339. BattToTcpInfo.battInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  340. BattToTcpInfo.battInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  341. BattToTcpInfo.battInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  342. BattToTcpInfo.battInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF; //sec
  343. BattToTcpInfo.battInfo.signalStrength = csq ;
  344. //故障等级故障代码上传
  345. if(osOK==osMutexAcquire(Error_Mutex, 100))
  346. {
  347. UINT16 ErrorTemp=0x00;
  348. ErrorTemp = GetErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum));
  349. #ifdef USING_PRINTF1
  350. printf("Temp-Error:%d\n",ErrorTemp);
  351. #endif
  352. BattToTcpInfo.battInfo.errClass = 0x00;
  353. BattToTcpInfo.battInfo.errCode[0] = ErrorTemp>>8;
  354. BattToTcpInfo.battInfo.errCode[1] = ErrorTemp;
  355. }
  356. else
  357. {
  358. #ifdef USING_PRINTF1
  359. printf("Temp-Error:%d\n",ErrorTemp);
  360. #endif
  361. BattToTcpInfo.battInfo.errClass = 0x00;
  362. BattToTcpInfo.battInfo.errCode[0] = 0x00;
  363. BattToTcpInfo.battInfo.errCode[1] = 0x00;
  364. }
  365. osMutexRelease(Error_Mutex);
  366. BattToTcpInfo.battInfo.battI[0] = battI>>8;
  367. BattToTcpInfo.battInfo.battI[1] = battI & 0xFF;
  368. //电池内外电压保持一致
  369. BattToTcpInfo.battInfo.battLinkVol[0] = battPackVol >> 8;
  370. BattToTcpInfo.battInfo.battLinkVol[1] = battPackVol & 0xFF;
  371. BattToTcpInfo.battInfo.battPackVol[0] = battPackVol >> 8;
  372. BattToTcpInfo.battInfo.battPackVol[1] = battPackVol & 0xFF;
  373. BattToTcpInfo.battInfo.switchState = battMOSSwitchState;
  374. BattToTcpInfo.battInfo.battSOC = battSOC;
  375. BattToTcpInfo.battInfo.battSOH = battSOH;
  376. memcpy(BattToTcpInfo.battInfo.batCellBalenceState,&battBalanceoInfo,4);
  377. BattToTcpInfo.battInfo.battCellNum= BATT_CELL_VOL_NUM ;
  378. for(i=0;i<BATT_CELL_VOL_NUM;i++)
  379. {
  380. BattToTcpInfo.battInfo.battCellU[i*2] = (battCellU[i]>>8) & 0xFF;
  381. BattToTcpInfo.battInfo.battCellU[i*2+1] = battCellU[i] & 0xFF;
  382. }
  383. BattToTcpInfo.battInfo.battTempNum = BATT_TEMP_NUM;
  384. for(i=0; i<BATT_TEMP_NUM; i++)
  385. {
  386. BattToTcpInfo.battInfo.battCellTemp[i] = battCellTemp[i];
  387. }
  388. BattToTcpInfo.battInfo.battWorkState = battWorkState;//电池状态,0表示静置,1表示放电,2表示充电
  389. BattToTcpInfo.battInfo.battHeatEnableState = battHeatEnableState;
  390. BattToTcpInfo.battInfo.battotherTempNum = BATT_OTHER_TEMP_NUM+NB_OTHER_TEMP_NUM;//其他温度编号(包含环境温度mos温度以及接插件温度)2021-03-24其他温度修改
  391. BattToTcpInfo.battInfo.battotherTemp[0] = MOSTemp;
  392. BattToTcpInfo.battInfo.battotherTemp[1] = packTemp;
  393. BattToTcpInfo.battInfo.battotherTemp[2] = fastChargeTemp;
  394. BattToTcpInfo.battInfo.battotherTemp[3] = normalChargeTemp;
  395. BattToTcpInfo.battInfo.battotherTemp[4] = heatTemp1;
  396. BattToTcpInfo.battInfo.battotherTemp[5] = heatTemp2;
  397. BattToTcpInfo.CRC = bcc_chk((UINT8 *)&BattToTcpInfo, sizeof(BattMsgtoTcpType)-1 );
  398. //osMutexRelease(UartMutex);
  399. if(UartBattInfoRecvFlag)
  400. {
  401. len = tcpipConnectionSend(socContext.id, (UINT8 *)&BattToTcpInfo, sizeof(BattToTcpInfo), 0, 0, 0);
  402. if(len>0)
  403. {
  404. TcpSendLen = 0x02 | TcpSendLen;
  405. }
  406. else
  407. {
  408. TcpSendLen = 0xFD & TcpSendLen;
  409. sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
  410. }
  411. }
  412. }
  413. if(send_counter%GpsSendFreq==0)
  414. {
  415. GPSMsgtoTcpType GpsToTcpInfo;
  416. osStatus_t result = osMutexAcquire(GpsMutex, osWaitForever);
  417. appGetSystemTimeUtcSync(&TimeStracture);
  418. year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
  419. month=(TimeStracture.UTCtimer1&0xff00)>>8;
  420. day=TimeStracture.UTCtimer1&0xff;
  421. hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
  422. minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
  423. sec=(TimeStracture.UTCtimer2&0xff00)>>8;
  424. UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
  425. DataLen= (UINT16)sizeof(GpsToTcpInfo.gpsInfo);
  426. GpsToTcpInfo.startSymbol[0] = TCP_START_SYM1;
  427. GpsToTcpInfo.startSymbol[1] = TCP_START_SYM2;
  428. GpsToTcpInfo.cmdSymbol = TCP_CMD_SYM;
  429. GpsToTcpInfo.ansSymbol = TCP_ANS_SYM;
  430. memcpy(GpsToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
  431. GpsToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
  432. GpsToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
  433. GpsToTcpInfo.dataLength[1] = DataLen & 0xFF;
  434. GpsToTcpInfo.gpsInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  435. GpsToTcpInfo.gpsInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  436. GpsToTcpInfo.gpsInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  437. GpsToTcpInfo.gpsInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  438. GpsToTcpInfo.gpsInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  439. GpsToTcpInfo.gpsInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF; //sec
  440. GpsToTcpInfo.gpsInfo.msgMark = GPSMSG;
  441. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  442. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  443. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  444. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  445. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  446. GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;
  447. memcpy((UINT8 *)&GpsToTcpInfo.gpsInfo.locateMark, GpsData,sizeof(GpsData));
  448. GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType)-1 );
  449. osMutexRelease(GpsMutex);
  450. //if(GpsToTcpInfo.gpsInfo.locateMark==0x01)
  451. if(1)
  452. {
  453. len = tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
  454. if(len>0)
  455. {
  456. TcpSendLen = 0x04 | TcpSendLen;
  457. }
  458. else
  459. {
  460. TcpSendLen = 0xFB & TcpSendLen;
  461. sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
  462. }
  463. }
  464. #ifdef USING_PRINTF1
  465. printf("GpsMsg:\n");
  466. UINT8* p = (UINT8 *)&GpsToTcpInfo;
  467. for(int i =0 ;i<sizeof(GpsToTcpInfo);i++)
  468. printf("%x ",*(p+i));
  469. #endif
  470. }
  471. if(send_counter==1)//版本信息上报
  472. {
  473. VersionMsgtoTcpType VerMsgToTcpInfo;
  474. CHAR iccid[20];
  475. CHAR imei[15];
  476. appGetIccidNumSync(iccid);
  477. appGetImeiNumSync(imei);
  478. appGetSystemTimeUtcSync(&TimeStracture);
  479. year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
  480. month=(TimeStracture.UTCtimer1&0xff00)>>8;
  481. day=TimeStracture.UTCtimer1&0xff;
  482. hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
  483. minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
  484. sec=(TimeStracture.UTCtimer2&0xff00)>>8;
  485. UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
  486. DataLen= (UINT16)sizeof(VerMsgToTcpInfo.VerInfo);
  487. VerMsgToTcpInfo.startSymbol[0] = TCP_START_SYM1;
  488. VerMsgToTcpInfo.startSymbol[1] = TCP_START_SYM2;
  489. VerMsgToTcpInfo.cmdSymbol = TCP_CMD_SYM;
  490. VerMsgToTcpInfo.ansSymbol = TCP_ANS_SYM;
  491. memcpy(VerMsgToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
  492. VerMsgToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
  493. VerMsgToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
  494. VerMsgToTcpInfo.dataLength[1] = DataLen & 0xFF;
  495. VerMsgToTcpInfo.VerInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  496. VerMsgToTcpInfo.VerInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  497. VerMsgToTcpInfo.VerInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  498. VerMsgToTcpInfo.VerInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  499. VerMsgToTcpInfo.VerInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  500. VerMsgToTcpInfo.VerInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF; //sec
  501. VerMsgToTcpInfo.VerInfo.msgMark = VERSIONMSG;
  502. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  503. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  504. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  505. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  506. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  507. VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;
  508. memcpy(VerMsgToTcpInfo.VerInfo.ICCID,iccid,20);
  509. memcpy(VerMsgToTcpInfo.VerInfo.IMEI,imei,15);
  510. //osMutexAcquire(UartMutex, osWaitForever);//Bms版本号上传2021-03-24修改
  511. VerMsgToTcpInfo.VerInfo.BMSHwVersion[0] = bmsHwVersion /10;
  512. VerMsgToTcpInfo.VerInfo.BMSHwVersion[1] = bmsHwVersion%10;
  513. VerMsgToTcpInfo.VerInfo.BMSSwVersion[0] = 0;
  514. VerMsgToTcpInfo.VerInfo.BMSSwVersion[1] = 0;
  515. VerMsgToTcpInfo.VerInfo.BMSSwVersion[2] = bmsSwVersion/10;
  516. VerMsgToTcpInfo.VerInfo.BMSSwVersion[3] = bmsSwVersion%10;
  517. //osMutexRelease(UartMutex);
  518. VerMsgToTcpInfo.VerInfo.NBHwVersion[0] = (HWVERSION>>8)& 0xFF;
  519. VerMsgToTcpInfo.VerInfo.NBHwVersion[1] = (HWVERSION)& 0xFF;
  520. VerMsgToTcpInfo.VerInfo.BLVersion[0] = (BLSWVERSION>>24)& 0xFF;
  521. VerMsgToTcpInfo.VerInfo.BLVersion[1] = (BLSWVERSION>>16)& 0xFF;
  522. VerMsgToTcpInfo.VerInfo.BLVersion[2] = (BLSWVERSION>>8)& 0xFF;
  523. VerMsgToTcpInfo.VerInfo.BLVersion[3] = (BLSWVERSION)& 0xFF;
  524. VerMsgToTcpInfo.VerInfo.DRVVersion[0] = (DRVSWVERSION>>24)& 0xFF;
  525. VerMsgToTcpInfo.VerInfo.DRVVersion[1] = (DRVSWVERSION>>16)& 0xFF;
  526. VerMsgToTcpInfo.VerInfo.DRVVersion[2] = (DRVSWVERSION>>8)& 0xFF;
  527. VerMsgToTcpInfo.VerInfo.DRVVersion[3] = (DRVSWVERSION)& 0xFF;
  528. VerMsgToTcpInfo.VerInfo.APPVersion[0] = (APPSWVERSION>>24)& 0xFF;
  529. VerMsgToTcpInfo.VerInfo.APPVersion[1] = (APPSWVERSION>>16)& 0xFF;
  530. VerMsgToTcpInfo.VerInfo.APPVersion[2] = (APPSWVERSION>>8)& 0xFF;
  531. VerMsgToTcpInfo.VerInfo.APPVersion[3] = (APPSWVERSION)& 0xFF;
  532. VerMsgToTcpInfo.VerInfo.BmsType = BMS_MANUFACTURE;
  533. VerMsgToTcpInfo.VerInfo.BmsInfo = BMS_INFO;
  534. VerMsgToTcpInfo.VerInfo.DataModuleType = DATA_MODULE_TYPE;
  535. VerMsgToTcpInfo.CRC = bcc_chk((UINT8 *)&VerMsgToTcpInfo, sizeof(VerMsgToTcpInfo)-1 );
  536. if(UartBattInfoRecvFlag==TRUE&&NB_Fota_update_flag==FALSE)
  537. {
  538. len = tcpipConnectionSend(socContext.id, (UINT8 *)&VerMsgToTcpInfo, sizeof(VerMsgToTcpInfo), 0, 0, 0);
  539. if(len>0)
  540. {
  541. TcpSendLen = 0x01 | TcpSendLen;
  542. }
  543. else
  544. {
  545. TcpSendLen = 0xFE & TcpSendLen;
  546. sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
  547. }
  548. }
  549. else
  550. {
  551. send_counter = 1;
  552. return;
  553. }
  554. }
  555. if(send_counter==0)//发送本次文件中的调试信息
  556. {
  557. DebugMsgtoTcpType DebugMsgInfo;
  558. UINT8 *SendBuffer = PNULL;
  559. UINT16 BufferLen = 0;
  560. BufferLen = Debug_GetSize();
  561. if(BufferLen>200)
  562. {
  563. Debug_Del_Logfile();
  564. #ifdef DEBUGLOG
  565. Debug_printf("Sys:%d\n",AppDataInfo.SysReStart);
  566. #endif
  567. BufferLen = Debug_GetSize();
  568. }
  569. UINT8 rbuf[BufferLen];
  570. Debug_Read_Logfile(rbuf,BufferLen);
  571. SendBuffer = malloc(BufferLen+sizeof(DebugMsgInfo));
  572. memcpy(SendBuffer+sizeof(DebugMsgInfo)-1, rbuf,BufferLen);
  573. appGetSystemTimeUtcSync(&TimeStracture);
  574. year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
  575. month=(TimeStracture.UTCtimer1&0xff00)>>8;
  576. day=TimeStracture.UTCtimer1&0xff;
  577. hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
  578. minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
  579. sec=(TimeStracture.UTCtimer2&0xff00)>>8;
  580. UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
  581. DataLen=sizeof(DebugMsgInfo.DebugInfo) + BufferLen;
  582. DebugMsgInfo.startSymbol[0] = TCP_START_SYM1;
  583. DebugMsgInfo.startSymbol[1] = TCP_START_SYM2;
  584. DebugMsgInfo.cmdSymbol = TCP_CMD_SYM;
  585. DebugMsgInfo.ansSymbol = TCP_ANS_SYM;
  586. memcpy(DebugMsgInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
  587. DebugMsgInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
  588. DebugMsgInfo.dataLength[0] = (DataLen>>8) & 0xFF;
  589. DebugMsgInfo.dataLength[1] = DataLen & 0xFF;
  590. DebugMsgInfo.DebugInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; //year
  591. DebugMsgInfo.DebugInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF; //month
  592. DebugMsgInfo.DebugInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF; //day
  593. DebugMsgInfo.DebugInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; //hour
  594. DebugMsgInfo.DebugInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF; //mins
  595. DebugMsgInfo.DebugInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF; //sec
  596. DebugMsgInfo.DebugInfo.msgMark = DEBUGMSG;
  597. DebugMsgInfo.DebugInfo.DebugLen[0] = BufferLen>>8;
  598. DebugMsgInfo.DebugInfo.DebugLen[1] = BufferLen;
  599. memcpy(SendBuffer,(UINT8 *)&DebugMsgInfo,sizeof(DebugMsgInfo)-1);
  600. DebugMsgInfo.CRC = bcc_chk(SendBuffer, BufferLen+sizeof(DebugMsgInfo)-1);
  601. memcpy(SendBuffer+BufferLen+sizeof(DebugMsgInfo)-1,&DebugMsgInfo.CRC,1);
  602. len = tcpipConnectionSend(socContext.id, SendBuffer, BufferLen+sizeof(DebugMsgInfo), 0, 0, 0);
  603. #ifdef USING_PRINTF1
  604. printf("DebugMsgInfo!\n");
  605. UINT8* p = SendBuffer;
  606. for(i =0 ;i<BufferLen+sizeof(DebugMsgInfo);i++)
  607. printf("%x ",*(p+i));
  608. #endif
  609. Debug_Del_Logfile();
  610. free(SendBuffer);
  611. }
  612. if(send_counter>0xffff)
  613. {
  614. send_counter = 0;
  615. }
  616. else
  617. {
  618. send_counter++;
  619. }
  620. }
  621. //Tcp数据接收处理函数
  622. static void TcpDataInfoRecvHandle()
  623. {
  624. TcpipConnectionRecvDataInd *TcpRecvData;
  625. osMessageQueueGet(TcpRecvHandle,&TcpRecvData,0,0);
  626. osDelay(100);
  627. Uart_Write_Data_Type UartWriteCmd;
  628. OsaUtcTimeTValue TimeStracture;
  629. UINT8 DataLen;
  630. UINT8 Tcp_Cmd;
  631. UINT8 Control_Cmd;
  632. UINT8 *Ptr;
  633. UINT8 TcpCmdAnswer[31];
  634. TcpCmdAnswer[0] = TCP_START_SYM1;
  635. TcpCmdAnswer[1] = TCP_START_SYM1;
  636. if(TcpRecvData != PNULL)
  637. {
  638. Ptr = TcpRecvData->data;
  639. if((*(Ptr+0)==TCP_START_SYM1)&&(*(Ptr+1)==TCP_START_SYM2))//服务器起始信息
  640. {
  641. Tcp_Cmd = *(Ptr+2);//命令标志
  642. if(*(Ptr+3)==0xFE)
  643. {
  644. TcpService=0x01;
  645. }
  646. switch (Tcp_Cmd)
  647. {
  648. case TCP_QUERY_SYM:
  649. break;
  650. case TCP_SETCMD_SYM:
  651. break;
  652. case TCP_CONCMD_SYM:
  653. {
  654. TcpCmdAnswer[2] = TCP_CONCMD_SYM;
  655. if(*(Ptr+30)==0x01)//远程升级命令
  656. {
  657. Fota_Func(Ptr,socContext.id);
  658. }
  659. else if(*(Ptr+30)==0x88)//BMS远程升级数据传输命令
  660. {
  661. Fota_Func(Ptr,socContext.id);
  662. }
  663. else if(*(Ptr+30)==0x80)//远程锁定命令
  664. {
  665. //osMutexAcquire(UartMutex, osWaitForever);
  666. TcpCmdAnswer[3] = 0x01;
  667. memcpy(&TcpCmdAnswer[4],(Ptr+4),BATT_SN_LEN);
  668. TcpCmdAnswer[21] = TCP_ENCPT_DISABLE;
  669. TcpCmdAnswer[22] = 0x00;
  670. TcpCmdAnswer[23] = 0x06;
  671. memcpy(&TcpCmdAnswer[24],(Ptr+24),6);
  672. TcpCmdAnswer[30] = bcc_chk(TcpCmdAnswer,30);
  673. if(*(Ptr+31)==0x01)//0x01代表锁定
  674. {
  675. AppNVMData.appDataModify = TRUE;
  676. AppNVMData.isBattLocked = TRUE;
  677. UartWriteCmd.WriteCmd = 0x01;
  678. UartWriteCmd.Data[0] = 0x00;
  679. UartWriteCmd.Data[1] = 0x00;
  680. if(battWorkState ==0x00)
  681. {
  682. osMessageQueuePut(UartWriteCmdHandle,&UartWriteCmd,0,1000);
  683. }
  684. tcpipConnectionSend(socContext.id,TcpCmdAnswer,31,0,0,0);
  685. }
  686. else //0x02代表解锁
  687. {
  688. AppNVMData.appDataModify = TRUE;
  689. AppNVMData.isBattLocked = FALSE;
  690. UartWriteCmd.WriteCmd = 0x01;
  691. UartWriteCmd.Data[0] = 0x00;
  692. UartWriteCmd.Data[1] = 0x03;
  693. osMessageQueuePut(UartWriteCmdHandle,&UartWriteCmd,0,1000);
  694. tcpipConnectionSend(socContext.id,TcpCmdAnswer,31,0,0,0);
  695. }
  696. //osMutexRelease(UartMutex);
  697. TcpService=0x00;
  698. }
  699. else
  700. {
  701. TcpCmdAnswer[3] = 0x0f;
  702. memcpy(&TcpCmdAnswer[4],(Ptr+4),BATT_SN_LEN);
  703. TcpCmdAnswer[21] = TCP_ENCPT_DISABLE;
  704. TcpCmdAnswer[22] = 0x00;
  705. TcpCmdAnswer[23] = 0x06;
  706. memcpy(&TcpCmdAnswer[24],(Ptr+24),6);
  707. TcpCmdAnswer[30] = bcc_chk(TcpCmdAnswer,30);
  708. tcpipConnectionSend(socContext.id,TcpCmdAnswer,31,0,0,0);
  709. }
  710. break;
  711. }
  712. default:
  713. {
  714. break;
  715. }
  716. }
  717. }
  718. free(TcpRecvData);
  719. }
  720. }
  721. //TCP发送校验函数
  722. UINT8 bcc_chk(UINT8* data, UINT8 length)
  723. {
  724. UINT8 bcc_chk_return = 0x00;
  725. UINT8 count = 0;
  726. while (count<length)
  727. {
  728. bcc_chk_return^=data[count];
  729. count++;
  730. }
  731. return bcc_chk_return;
  732. }
  733. //Tcp 状态转换函数
  734. static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait)
  735. {
  736. eventCallbackMessage_t *queueMsg = NULL;
  737. queueMsg = malloc(sizeof(eventCallbackMessage_t));
  738. queueMsg->messageId = msgId;
  739. if (psEventQueueHandle)
  740. {
  741. if (pdTRUE != xQueueSend(psEventQueueHandle, &queueMsg, xTickstoWait))
  742. {
  743. ECOMM_TRACE(UNILOG_PLA_APP, sendQueueMsg_1, P_ERROR, 0, "xQueueSend error");
  744. }
  745. }
  746. }
  747. //Tcp状态注册函数
  748. static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen)
  749. {
  750. CmiSimImsiStr *imsi = NULL;
  751. CmiPsCeregInd *cereg = NULL;
  752. UINT8 rssi = 0, index = 0;
  753. NmAtiNetifInfo *netif = NULL;
  754. switch(eventID)
  755. {
  756. case NB_URC_ID_SIM_READY:
  757. {
  758. imsi = (CmiSimImsiStr *)param;
  759. memcpy(gImsi, imsi->contents, imsi->length);
  760. #ifdef USING_PRINTF
  761. printf("SIM ready(imsi=%s)\n",(UINT8 *)imsi->contents);
  762. #endif
  763. break;
  764. }
  765. case NB_URC_ID_MM_SIGQ:
  766. {
  767. rssi = *(UINT8 *)param;
  768. #ifdef USING_PRINTF
  769. printf("RSSI signal=%d\n",rssi);
  770. #endif
  771. break;
  772. }
  773. case NB_URC_ID_PS_BEARER_ACTED:
  774. {
  775. #ifdef USING_PRINTF
  776. printf("Default bearer activated\n");
  777. #endif
  778. break;
  779. }
  780. case NB_URC_ID_PS_BEARER_DEACTED:
  781. {
  782. #ifdef USING_PRINTF
  783. printf("Default bearer Deactivated\n");
  784. #endif
  785. break;
  786. }
  787. case NB_URC_ID_PS_CEREG_CHANGED:
  788. {
  789. cereg = (CmiPsCeregInd *)param;
  790. gCellID = cereg->celId;
  791. #ifdef USING_PRINTF
  792. printf("URCCallBack:CEREG changed act:%d celId:%d locPresent:%d tac:%d\n", cereg->act, cereg->celId, cereg->locPresent, cereg->tac);
  793. #endif
  794. break;
  795. }
  796. case NB_URC_ID_PS_NETINFO:
  797. {
  798. netif = (NmAtiNetifInfo *)param;
  799. if (netif->netStatus == NM_NETIF_ACTIVATED)
  800. sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
  801. break;
  802. }
  803. }
  804. return 0;
  805. }
  806. //Tcpz连接状态回调函数
  807. static void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent)
  808. {
  809. switch(connectionEventType)
  810. {
  811. case TCPIP_CONNECTION_STATUS_EVENT:
  812. {
  813. TcpipConnectionStatusInd *statusInd;
  814. statusInd = (TcpipConnectionStatusInd *)bodyEvent;
  815. if(statusInd != PNULL)
  816. {
  817. if(statusInd->status == TCPIP_CONNECTION_STATUS_CLOSED)
  818. {
  819. #ifdef USING_PRINTF
  820. printf("socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
  821. #endif
  822. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_1, P_ERROR, 2, "socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
  823. if(statusInd->connectionId == socContext.id)
  824. {
  825. socContext.id = -1;
  826. socContext.status = APP_SOCKET_CONNECTION_CLOSED;
  827. }
  828. }
  829. else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTING)
  830. {
  831. #ifdef USING_PRINTF
  832. printf("socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
  833. #endif
  834. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_2, P_INFO, 1, "socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
  835. if(statusInd->connectionId == socContext.id)
  836. {
  837. socContext.status = APP_SOCKET_CONNECTION_CONNECTING;
  838. }
  839. }
  840. else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTED)
  841. {
  842. #ifdef USING_PRINTF
  843. printf("socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
  844. #endif
  845. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_3, P_ERROR, 1, "socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
  846. if(statusInd->connectionId == socContext.id)
  847. {
  848. socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
  849. }
  850. }
  851. }
  852. else
  853. {
  854. #ifdef USING_PRINTF
  855. printf("socketAppConnectionCallBack invalid connection status event");
  856. #endif
  857. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_4, P_ERROR, 0, "socketAppConnectionCallBack invalid connection status event");
  858. }
  859. break;
  860. }
  861. case TCPIP_CONNECTION_RECEIVE_EVENT:
  862. {
  863. TcpipConnectionRecvDataInd *rcvInd;
  864. TcpipConnectionRecvDataInd *rcvbuffer = NULL;
  865. rcvInd = (TcpipConnectionRecvDataInd *)bodyEvent;
  866. if(rcvInd != PNULL)
  867. {
  868. rcvbuffer = malloc(sizeof(TcpipConnectionRecvDataInd));
  869. memcpy(rcvbuffer,rcvInd,sizeof(TcpipConnectionRecvDataInd));
  870. osMessageQueuePut(TcpRecvHandle,&rcvbuffer,0,1000);
  871. sendQueueMsg(QMSG_ID_SOCK_RECVPKG, 0);
  872. #ifdef USING_PRINTF
  873. uint8_t* Ptr;
  874. Ptr=rcvInd->data;
  875. printf("socket connection %u receive length %u data:", rcvInd->connectionId, rcvInd->length);
  876. for(int i = 0;i<rcvInd->length;i++)
  877. printf("%x ",*(Ptr+i));
  878. printf("\n");
  879. #endif
  880. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_5, P_INFO, 2, "socketAppConnectionCallBack socket connection %u receive length %u data", rcvInd->connectionId, rcvInd->length);
  881. }
  882. else
  883. {
  884. #ifdef USING_PRINTF
  885. printf( "socketAppConnectionCallBack invalid connection rcv event");
  886. #endif
  887. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_6, P_ERROR, 0, "socketAppConnectionCallBack invalid connection rcv event");
  888. }
  889. break;
  890. }
  891. case TCPIP_CONNECTION_UL_STATUS_EVENT:
  892. {
  893. TcpipConnectionUlDataStatusInd *ulStatusInd;
  894. ulStatusInd = (TcpipConnectionUlDataStatusInd *)bodyEvent;
  895. if(ulStatusInd != PNULL)
  896. {
  897. if(ulStatusInd->status == Tcpip_Connection_UL_DATA_SUCCESS)
  898. {
  899. #ifdef USING_PRINTF
  900. printf( "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
  901. #endif
  902. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_7, P_INFO, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
  903. }
  904. else if(ulStatusInd->status == Tcpip_Connection_UL_DATA_FAIL)
  905. {
  906. #ifdef USING_PRINTF
  907. printf("socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
  908. #endif
  909. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_8, P_WARNING, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
  910. }
  911. }
  912. else
  913. {
  914. #ifdef USING_PRINTF
  915. printf("socketAppConnectionCallBack invalid connection ul status event");
  916. #endif
  917. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_9, P_ERROR, 0, "socketAppConnectionCallBack invalid connection ul status event");
  918. }
  919. break;
  920. }
  921. default:
  922. #ifdef USING_PRINTF
  923. printf("socketAppConnectionCallBack invalid event type %u", connectionEventType);
  924. #endif
  925. ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_10, P_ERROR, 1, "socketAppConnectionCallBack invalid event type %u", connectionEventType);
  926. break;
  927. }
  928. }