AppTcpPart.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. #include "includes.h"
  2. #define LOCATIONTIME 30
  3. TUPSEND_DEF tupCtl;
  4. NET_DEF netWork;
  5. APP_STATUS app_status;
  6. #define LOC_PWD "000000"
  7. //user BH4TDV-9 pass 16808 vers APRS-51G2-20171220\r\n
  8. void LoginPackSend(TUPSEND_DEF *para)
  9. {
  10. char data[100]={0};
  11. snprintf(data,sizeof(data), "user %s pass %s vers APRS-51G2-20171220\r\n",sutApp.UserInfo.Firm_CallID,LOC_PWD);
  12. //snprintf(data,sizeof(data), "user %s pass %d vers APRS-51G2-20171220\r\n","MYCALL",12726);
  13. trySendTup(data,strlen(data), TUP_TCP,para);
  14. MSG_INFO(1, "LoginPackSend-->%s",data);
  15. }
  16. //BH4TDV-9>51G2:!3134.36N/12019.93EY304/002/A=00007551G2 13.8V S08\r\n
  17. void ApplocationSend(TUPSEND_DEF *para){
  18. char data[100]={0};
  19. char tempbuf[20];
  20. char len=0;
  21. float Vbat=0;
  22. memcpy(data,sutApp.UserInfo.Firm_CallID,strlen(sutApp.UserInfo.Firm_CallID));
  23. strcat(data,">");
  24. strcat(data,OHPOC_APP_NAME);
  25. strcat(data,":");
  26. strcat(data,"!");
  27. len=strlen(data);
  28. snprintf(data+len, sizeof(data)-len,"%.2f%c",sutGpsInfo.App_latitue,sutGpsInfo.NSFlag);
  29. //strcat(data,"2237.22N");//wd
  30. strcat(data,"/");
  31. len=strlen(data);
  32. snprintf(data+len, sizeof(data)-len,"%.2f%c",sutGpsInfo.App_longitue,sutGpsInfo.EWFlag);
  33. //strcat(data,"11402.12E");//jd
  34. strcat(data,"Y304/002/A=00007551G2");//jd
  35. Vbat=sutApp.g_iBAT;
  36. Vbat=Vbat/100;
  37. snprintf(tempbuf,sizeof(tempbuf)," %0.3fV S08\r\n",Vbat);
  38. strcat(data,tempbuf);
  39. trySendTup(data,strlen(data),TUP_TCP,para);
  40. MSG_INFO(1, "ApplocationSend-->%s",data);
  41. }
  42. void Applocation_Tick(TUPSEND_DEF *para){
  43. static char LocationCnt=0;
  44. switch(app_status.login){
  45. case 0://未登录
  46. //1min try
  47. if(++app_status.app_netcnt>20){
  48. LoginPackSend(para);
  49. app_status.app_netcnt=0;
  50. }
  51. LocationCnt=0;
  52. break;
  53. case 1://已登录
  54. if(LocationCnt==0)ApplocationSend(para);
  55. if(++LocationCnt>LOCATIONTIME){
  56. LocationCnt=0;
  57. }
  58. if(++app_status.hearttick>40){
  59. tupCtl.tupStatus=CNNT_READY;
  60. userCloseSocket(&para->fd);
  61. }
  62. break;
  63. }
  64. }
  65. #define APP_TCP_THREAD_STACK 4*1024 //
  66. void Tup_Process(int interva){
  67. static int cnt=0;
  68. static unsigned char reconcnt=0;
  69. char AppIp[40]={0};
  70. unsigned short AppPort=0;
  71. if(netWork.netReady!=1)return;
  72. if(!newPara.Xinbiao_IpEnable)return;
  73. if(++cnt<(1*1000/interva)) return;
  74. cnt=0;
  75. if(CNNT_READY==tupCtl.tupStatus){
  76. if(sutApp.UserInfo.IP[0]==0)return;
  77. tupParaSet(&tupCtl,sutApp.UserInfo.port,ApplocationCallBack,APP_TCP_THREAD_STACK);
  78. app_status.app_netcnt=40;
  79. switch(tryConnectTup(sutApp.UserInfo.IP,TUP_TCP,&tupCtl)){
  80. case TUP_STATUS_FALSE:
  81. wlog_info("App cnnt failed");
  82. break;
  83. case TUP_STATUS_WAIT:
  84. wlog_info("App wait result");
  85. tupCtl.tupStatus=CNNT_BUSY;
  86. break;
  87. }
  88. }else if(CNNT_OK==tupCtl.tupStatus){
  89. Applocation_Tick(&tupCtl);
  90. }else if(CNNT_ERROR==tupCtl.tupStatus){
  91. wlog_info("APP cnnt err");
  92. if(++reconcnt<40)return;
  93. reconcnt=0;
  94. tupCtl.tupStatus=CNNT_READY;
  95. }else if(CNNT_CLOSED==tupCtl.tupStatus){
  96. if(++reconcnt<40)return;
  97. reconcnt=0;
  98. tupCtl.tupStatus=CNNT_READY;
  99. }
  100. }
  101. void MS5700_Networking(unsigned int interval){
  102. uint32_t nRet;
  103. static int nAttstate,nActstate;
  104. static int LastnAttstate=0,LastnActstate=0;
  105. bool netIf;
  106. static bool lastNetIf=FALSE;
  107. //static unsigned short cnt=0;
  108. static unsigned short regCnt=0;
  109. static unsigned short tickcnt=0;
  110. if(++tickcnt<(1000/interval)) return;//1���һ��ADC����
  111. tickcnt=0;
  112. nRet = LSAPI_NET_GetGprsAttState(&nAttstate);
  113. if(nRet!=0){
  114. MSG_WARN(1,"Get REG status failed");
  115. return;
  116. }
  117. if(nAttstate!=1){
  118. if(LastnAttstate!=nAttstate){ MSG_WARN(1,"reg off");}
  119. netWork.reg=0;
  120. netWork.pdp=0;
  121. netWork.netReady=0;
  122. MSG_INFO(1,"wait reg");
  123. if(regCnt==60){
  124. MSG_WARN(1,"!!!CFUN=0");
  125. LSAPI_NET_CFUN(0);
  126. }else if(regCnt>=61) {
  127. regCnt=0;
  128. MSG_WARN(1,"!!!CFUN=1");
  129. LSAPI_NET_CFUN(1);
  130. }
  131. ++regCnt;
  132. }else{
  133. regCnt=0;
  134. if(LastnAttstate!=nAttstate){ MSG_WARN(1,"reg on");}
  135. netWork.reg=1;
  136. nRet = LSAPI_NET_GetGprsActState(&nActstate);
  137. if(nRet!=0){
  138. MSG_WARN(1,"LSAPI_NET_GetGprsActState get failed:%d",nRet);
  139. }else{
  140. if(nActstate!=1){
  141. if(LastnActstate != nActstate){ MSG_WARN(1,"pdp off");}
  142. netWork.pdp=0;
  143. netWork.netReady=0;
  144. // ls_PdpActive(); HYL
  145. }else{
  146. if(LastnActstate != nActstate){ MSG_WARN(1,"pdp on");}
  147. netWork.pdp=1;
  148. netIf=LSAPI_NET_GET_GprsNetIf();
  149. if(false==netIf){
  150. if(lastNetIf!=netIf){ MSG_WARN(1,"netif off");}
  151. netWork.netReady=0;
  152. MSG_INFO(1,"netif start create");
  153. LSAPI_NET_NetIf_Create();
  154. MSG_INFO(1,"netif create done");
  155. }else{
  156. if(lastNetIf!=netIf){ MSG_WARN(1,"netif on");}
  157. netWork.netReady=1;
  158. }
  159. lastNetIf=netIf;
  160. }
  161. LastnActstate=nActstate;
  162. }
  163. }
  164. LastnAttstate=nAttstate;
  165. }
  166. void ApplocationRecDataHandler(T_UINT8 *info, T_UINT32 length){
  167. static T_UINT8 msg[100];
  168. static T_UINT32 len=0;
  169. T_UINT32 tlen,i;
  170. // # logresp bh4tdv-9 verified, server T2XWT\r\n 登录成功
  171. // # aprsc 2.1.2-gc90ee9c 29 Mar 2017 15:42:15 GMT T2XWT 192.168.88.253:14580\r\n 心跳
  172. if(msgCmp(info,"# logresp")){
  173. app_status.login=1;
  174. MSG_INFO(1,"login OK");
  175. }
  176. if(msgCmp(info,"# aprsc")){
  177. app_status.hearttick=0;
  178. MSG_INFO(1,"aprs tick");
  179. }
  180. }
  181. void ApplocationCallBack(void *param){
  182. T_UINT8 buffer[512];//512
  183. LSAPI_OSI_Event_t *pEvent = (LSAPI_OSI_Event_t *)param;
  184. TUPSEND_DEF *para=(TUPSEND_DEF *)pEvent->param3;
  185. T_BOOL needExitThread=FALSE;
  186. T_INT32 len_ret;
  187. showTupEventInfo("ApplocationCallBack",pEvent->id,para,0);
  188. switch(pEvent->id){
  189. case LSAPI_SOCK_TCPIP_SOCKET_CONNECT_RSP:
  190. break;
  191. case LSAPI_SOCK_TCPIP_REV_DATA_IND:
  192. while(1){
  193. len_ret=LSAPI_SOCK_Recv(para->fd,buffer, sizeof(buffer),0);
  194. if(len_ret>0){
  195. wlog_info("ApplocationCallBack Rec:%d,%d",para->fd,len_ret);
  196. ApplocationRecDataHandler(buffer, len_ret);
  197. }else if(len_ret==0) break;
  198. else{
  199. wlog_info("ApplocationCallBack failed");
  200. break;
  201. }
  202. }
  203. break;
  204. case LSAPI_SOCK_TCPIP_SOCKET_CLOSE_RSP:
  205. case LSAPI_SOCK_TCPIP_CLOSE_IND:
  206. case LSAPI_SOCK_TCPIP_ERR_IND:
  207. needExitThread=true;
  208. break;
  209. default: break;
  210. }
  211. if(needExitThread)threadPostEvent(LSAPI_OSI_ThreadCurrent(),USER_EVENT_EXIT);
  212. }