<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
    久久精品国产导航| 9久热这里只有精品免费| 国产伦子系列麻豆精品| 国产内地精品毛片视频| 久久9精品久久久| 亚洲精品无码久久久久秋霞| 日本加勒比久久精品| 国产99视频精品免视看7| 久热中文字幕在线精品免费| 国产精品亚洲精品日韩电影| 国产三级精品三级在线专区1| 91精品无码久久久久久五月天| 国产精品自在线天天看片| 亚洲国产成人乱码精品女人久久久不卡 | 真实国产精品视频国产网| 国产91精品一区二区麻豆亚洲| 国产成人精品实拍在线| 精品国产91久久久久久久| 99精品热这里只有精品| 国产精品小视频免费无限app| 久久精品噜噜噜成人av| 久草热8精品视频在线观看| 亚洲国产精品久久久久婷婷老年 | 精品亚洲av无码一区二区柚蜜| 99久久99久久久精品齐齐| 久热香蕉精品视频在线播放| 国产精品无码一区二区在线观一| 嫩草影院久久国产精品| mm1313亚洲国产精品无码试看| 杨幂精品国产专区91在线| 2019天堂精品视频在线观看| 国产精品一区二区久久精品无码| 日韩精品国产另类专区| 国产精品亚洲专区一区| 久久夜色精品国产噜噜亚洲a| 久热爱精品视频在线| 精品一区二区三区自拍图片区| 国产日韩精品在线| 久久久不卡国产精品一区二区| 国产办公室秘书无码精品99| 亚洲精品视频免费观看|