<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 串口WiFi在WinCE工控主板上的編程方法

     2017-4-5     作者:楊陽         
    文章標簽:C/C++WiFi

      ETA6103工作時,對軟件來說,完全當作串口來操作,發送AT指令建立互聯網連接。配置信息、網絡數據傳輸均通過一個串口傳輸。為方便用戶編程,英創公司封裝了一個CUartWifi類,提供了配置無線網絡和建立TCP/UDP傳輸的公共函數,用戶不用關心具體的AT指令即可進行開發。


    使用說明


      參考例程uart_wifi,工程中添加Serial.h , Serial.cpp, ETA6103.h, ETA6103.cpp共4個文件。


      添加引用#include "ETA6103.h"

      即可創建類并使用CUartWifi myWifi;


    WiFi連接管理


      參考例程APConnect,該例程簡單展示如何進行AP連接的管理


      調用Open,AutoCfg方法初始化模塊

      調用GetAPList方法查詢附近的AP

      調用ConnectAP方法連接AP

      調用SetDefAP設置上電后默認連接的AP(不能在該AP無法連接時設置)

      調用DisconnectAP方法斷開AP連接

      調用GetCurIP查詢AP分配到的IP地址


    UDP通信


      參考例程Udp。


      調用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調用ConnectUdp打開UDP連接,并創建線程用來等待消息接收

      ip = “192.168.201.248”;

      rport = 6000;

      lport = 5000;

      bRet = m_ETA6103.ConnectUdp(0, ip, rport, lport);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向遠端發送數據

      char str[32] = “test udp”;

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(0, str, len);


      接收線程處理

      DWORD CUdpDlg::RecvTread(LPVOID lparam)

      {

            CUdpDlg *pDlg = (CUdpDlg*)lparam;

            DWORD dwLen;

            char recvBuf[1024];

            while(!pDlg->m_bThreadStop)

            {      

                pDlg->m_ETA6103.WaitMsg();      //等待消息

                if (dwRet == WAIT_OBJECT_0)

                {

                    pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1023, &dwLen); 

      //讀數據

                    while(dwLen>0)

                    {

                        //處理代碼

                        pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);

                        //循環讀直到讀完buffer

                    }  

                }

            }//while(!pDlg->m_bThreadStop)

            return 0;

      };


    TCP客戶端通信


      參考例程TcpClient。


      調用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調用ConnectUdp打開UDP連接,并創建線程用來等待消息接收

      ip = “192.168.201.248”;

      port = 6000;

      bRet = m_ETA6103. ConnectTcpServer (0, ip, port);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向遠端發送數據

      char str[32] = “test tcpclient”;

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(0, str, len);


      接收線程處理

      DWORD CUdpDlg::RecvTread(LPVOID lparam)

      {

            CUdpDlg *pDlg = (CUdpDlg*)lparam;

            DWORD dwLen;

            char recvBuf[1024];

            while(!pDlg->m_bThreadStop)

            {      

                pDlg->m_ETA6103.WaitMsg();      //等待消息

                if (dwRet == WAIT_OBJECT_0)

                {

                    pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1023, &dwLen); 

      //讀數據

                    while(dwLen>0)

                    {

                        //處理代碼

                        pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen);

                        //循環讀直到讀完buffer

                    }  

                }

            }//while(!pDlg->m_bThreadStop)

            return 0;

      };


      可以看到,TCP客戶端的使用和UDP幾乎一樣,只是連接時調用的函數不一樣


    TCP服務端通信


      參考例程TcpClient。


      調用Open,AutoCfg方法初始化模塊

      CUartWifi  m_ETA6103;

      m_ETA6103.Open();

      m_ETA6103.AutoCfg();


      調用CreateTcpServer打開服務端連接,并創建線程用來偵聽客戶端連接和數據接收

      port = 6000;

      bRet = m_ETA6103. CreateTcpServer(port);

      m_hRecvThread = CreateThread(0, 0, RecvTread, this, 0, NULL);


      向對應的客戶端發送數據

      char str[32] = “test tcpserver”;

      int id = 1;     //向鏈接號為1的客戶端發送信息

      len = strlen(str);

      bRet = m_ETA6103.SendMsg(id, str, len);


      接收線程處理


      在例程中,將客戶端連接和消息接收,封裝到同一個事件中,然后通過標記位判斷事件的類型,客戶可以根據需要,修改封裝代碼,改為各自事件分別處理,或者修改為多個線程來處理連接事件,和消息接收事件。


      DWORD CTcpServerDlg::RecvTread(LPVOID lparam)

      {

          CTcpServerDlg *pDlg = (CTcpServerDlg*)lparam;

          DWORD dwLen;

          char recvBuf[1024];

          DWORD dwRet;

          int len;

          int i;

          int n;

          while(!pDlg->m_bThreadStop)

          {      

              dwRet = pDlg->m_ETA6103.WaitMsg();

              if (dwRet == WAIT_OBJECT_0)

              {

                  for(i=0; i<5; i++)

                  {

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_STAT)  //狀態變化

                      {

                          if(pDlg->m_ETA6103.m_link[i].stat == 0)//close

                          {

                              //用戶斷開代碼處理

                          }

                          else//connected

                          {

                              //用戶連接代碼處理

                          }

                      }

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_RECV)  //數據接收

                      {

                          pDlg->m_ETA6103.ReadMsg(i, recvBuf, 1020, &dwLen);

                          while(dwLen>0)

                          {

                              //數據接收代碼處理

                              pDlg->m_ETA6103.ReadMsg(0, recvBuf, 1024, &dwLen); 

                          }

                      }

                      if(pDlg->m_ETA6103.m_link[i].eventFlag & EVT_ERR)   //錯誤事件

                      {

                          //錯誤事件代碼處理

                      }

                      pDlg->m_ETA6103.m_link[i].eventFlag = 0;

                  }      

              }

          }//while(!pDlg->m_bThreadStop)

          return 0;

      }


    速度測試例程


      例程TestSpeed用于測試文件接收速度。通過SetCurUart可以設置波特率(最大460800,建議默認115200),用戶可以選定最適合自己應用的配置。


      注意,在高速傳輸過程中,如果接收BUFFER收滿來不及處理,將發生數據丟包。建議參考例程,在對應位置添加處理代碼。

    文章標簽:C/C++WiFi
    无码国产69精品久久久久孕妇 | 1024你懂的国产精品| 日韩精品一区二区午夜成人版| 精品免费人成视频app| 日本无码小泬粉嫩精品图| 国产91精品不卡在线| 国产成人精品久久亚洲高清不卡| 久久久无码精品亚洲日韩按摩 | 2022精品天堂在线视频| 久久精品国产72国产精| porn在线精品视频| 99久久人妻精品免费一区| 中文字幕久久精品无码| 国产91精品一区二区麻豆亚洲| 337P日本欧洲亚洲大胆精品| 国产乱码精品一区二区三区中| 99re66热这里只有精品首页| 久久精品国产乱子伦| 国产麻豆一精品一AV一免费| 国产福利精品在线观看| 国产精品午夜无码体验区| 亚洲精品无码专区| 99视频精品全部在线观看| 国产精品久久久久影院色| 久久久久久亚洲精品中文字幕| 国内精品久久久久久久影视麻豆| 国产91精品一区二区麻豆亚洲| 国产精品另类激情久久久免费| 久热国产精品视频一区二区三区| 国产精品亚洲四区在线观看| 91国内揄拍国内精品对白不卡| 久久精品无码午夜福利理论片| 国产精品免费一区二区三区四区| 兽交精品99高清毛片| 久久久久国产精品麻豆AR影院| heyzo高无码国产精品| 精品国产免费一区二区三区| freesexvideos精品老师毛多| 国产精品无码DVD在线观看| 精品久人妻去按摩店被黑人按中出| 精品成人一区二区三区四区 |