/* * */ #include "stdint.h" #include "string.h" #include "bsp.h" #include "usart.h" #include "esp8266at.h" #include "tcpclient.h" #include "utils.h" #include "wificonfig.h" uint8_t wifiEspbuffer[1400]; typedef enum _wifi_state_ { WIFIDEVICENOTFOUND = 0x00000000, WIFICONFIGCOMMAND=0x00000001, WIFIINITSTA_AP, WIFIINITCONNECTTCP, WIFIENTERTRANSPARENT, WIFICOMMUNICATION, }eWifiState; static volatile eWifiState wifiState = WIFIDEVICENOTFOUND; //char* wifistr = "test usart6 string\r\n"; static uint8_t wifiAppBuffer[1028]={0}; #define WIFIESP_SENDBUFFER_COUNT 32 typedef struct wifiEspBuffer { int16_t len; int16_t index; uint8_t buffer[256]; }stWifiEspBuffer; static stWifiEspBuffer wifiEspSndBufQ[WIFIESP_SENDBUFFER_COUNT]; static uint8_t wifiEspSndIndex = 0; static uint8_t wifiEspRecIndex = 0; static volatile unsigned int wifiSendFlag=0; char bFirstCommunication = 0; // first run ccommunication signal int SendMessageWifi_Fast(uint8_t* buf,int len) { if(wifiState != WIFICOMMUNICATION || buf==NULL || len<=0) { return -1; } int n=Wifi_SendData(buf, len); if(n >= 0) { wifiSendFlag=1; } return 0; } int SendMessageWifi(uint8_t* buf,int len) { if(wifiState != WIFICOMMUNICATION || buf==NULL || len<=0) { return -1; } memcpy((void*)wifiEspSndBufQ[wifiEspRecIndex].buffer, buf, len); wifiEspSndBufQ[wifiEspRecIndex].len = len; wifiEspSndBufQ[wifiEspRecIndex].index = 1; wifiEspRecIndex = (wifiEspRecIndex + 1) % WIFIESP_SENDBUFFER_COUNT; return 0; } int SendWifiMsgQueue() { if(wifiState != WIFICOMMUNICATION) { wifiEspSndIndex = wifiEspRecIndex; return -1; } while (wifiEspSndIndex != wifiEspRecIndex) { if (wifiEspSndBufQ[wifiEspSndIndex].index > 0) { int n=Wifi_SendData(wifiEspSndBufQ[wifiEspSndIndex].buffer, wifiEspSndBufQ[wifiEspSndIndex].len); if(n >= 0) { wifiSendFlag=1; } } wifiEspSndBufQ[wifiEspSndIndex].index = 0; wifiEspSndIndex = (wifiEspSndIndex + 1) % WIFIESP_SENDBUFFER_COUNT; } return 0; } void TcpClientWifiRun(void) { int n = 0; switch(wifiState) { case WIFIDEVICENOTFOUND: bFirstCommunication = 0; n=Wifi_testWorkState(); //if(n>=0&&n<3) if(n>0) { wifiState = WIFICONFIGCOMMAND; n = sprintf((char*)wifiAppBuffer,"WIFICONFIGCOMMAND\r\n"); ReportMessage(wifiAppBuffer,n); } break; case WIFICONFIGCOMMAND: if (wifiConfig.type == WIFITYPE_STA_TCP || wifiConfig.type == WIFITYPE_STA_UDP) { n = Wifi_ConfigSta(); if(n>0) { wifiState = WIFIINITSTA_AP; n = sprintf((char*)wifiAppBuffer,"WIFI_INIT_STA\r\n"); ReportMessage(wifiAppBuffer,n); } } else { n = Wifi_ConfigAp(); if(n>0) { wifiState = WIFIINITSTA_AP; n = sprintf((char*)wifiAppBuffer,"WIFI_INIT_AP\r\n"); ReportMessage(wifiAppBuffer,n); } } break; case WIFIINITSTA_AP: if (wifiConfig.type == WIFITYPE_STA_TCP || wifiConfig.type == WIFITYPE_STA_UDP) { n = Wifi_ConnectAp(); if(n>0) { wifiState = WIFIINITCONNECTTCP; n = sprintf((char*)wifiAppBuffer,"WIFI_INIT_CONNECT_AP\r\n"); ReportMessage(wifiAppBuffer,n); } } else { n = Wifi_CreateAp(); if(n>0) { wifiState = WIFIINITCONNECTTCP; n = sprintf((char*)wifiAppBuffer,"WIFI_INIT_CREATE_AP\r\n"); ReportMessage(wifiAppBuffer,n); } } break; case WIFIINITCONNECTTCP: if (wifiConfig.type == WIFITYPE_AP_UDP || wifiConfig.type == WIFITYPE_STA_UDP) { n = Wifi_ConnectUdp(); } else { n = Wifi_ConnectTcp(); } #if (WIFI_TRANSPARENT_ENABLED==1) if(n>0) { wifiState = WIFIENTERTRANSPARENT; n = sprintf((char*)wifiAppBuffer,"WIFIENTERTRANSPARENT\r\n"); ReportMessage(wifiAppBuffer,n); } break; case WIFIENTERTRANSPARENT: n=Wifi_EnterTransparentMode(); #endif if(n>0) { wifiState = WIFICOMMUNICATION; //n=Wifi_SendData(wifistr, strlen(wifistr)); n = sprintf((char*)wifiAppBuffer,"WIFICOMMUNICATION\r\n"); ReportMessage(wifiAppBuffer,n); //Wifi_SendData(wifiAppBuffer, n); } break; case WIFICOMMUNICATION: /*if(flag==0) { n=Wifi_SendData(wifistr, strlen( wifistr)); if(n>=0) { flag=1; } }*/ if (bFirstCommunication == 0) { bFirstCommunication = 1; int txLen = 0; BuildResponse(0x1f, wifiEspbuffer, &txLen); SendMessageWifi(wifiEspbuffer, txLen); } SendWifiMsgQueue(); n = Wifi_ReceiveData(wifiAppBuffer, 1028); if( n > 0) { //flag=0; int retval = DataPackageHeadHandler(wifiAppBuffer, n); if(0 < retval) { int txLen = 0; retval = DataPackageCompleteHandler(wifiAppBuffer, n, wifiEspbuffer, &txLen); if(0 < retval || txLen > 0) { retval = SendMessageWifi(wifiEspbuffer, txLen); } } } break; default: wifiState = WIFIDEVICENOTFOUND; break; } }