| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- /*
- *
- */
- #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;
- }
- }
|