1993|0

1万

帖子

16

TA的资源

版主

楼主
 

【MXCHIP Open1081】库的研究 [复制链接]

我看了Open1081的库的说明,感觉轻了许多就不几个函数.但要真正地用起来绝非易事.
我前面学过蓝牙的库CC2541感觉比这个复杂.但所有的蓝牙,WIFI,和BIGBEE 涉及到编程时都有一个特点那就是库.
都有库,不但有库,而且蓝牙更严重连行为也都有这不一样的UUID.真是地就是把大家往它的协议上靠,你靠不上来就是完蛋货一个.通读失败!

mxchipWnet 软件库不需要使用操作系统即可运行,但是库的功能块必须被周期地调用才能保证网络通讯和wi-fi网络能正常工作.软件库的功能块和用户的应用程序在一个循环中先后被调用.同时,在软件库的运行中会产一些事件,如联网成功,网络断开,扫描完成等,这些事件都由软件库通过回调函数通知用户的应用程序.回调函数的功能由用户实现.

下边是一个例子:

#include "stdio.h"
#include "ctype.h"

#include "stm32f2xx.h"
#include "platform.h"
#include "mxchipWNET.h"

#define LowPowerMode
#define AP_NAME           "WaveshareNet"
#define AP_PASSWORD       "waveshare0755"

u8 wifiModeSwitch = 0;
u8 softAPStarted = 0;
u8 startScan = 0;
network_InitTypeDef_st wNetConfig; //无线网络运行参数

/* ========================================
        User provide callback functions
    ======================================== */
void RptConfigmodeRslt(network_InitTypeDef_st *nwkpara)
{
}
               
void userWatchDog(void)
{
}

void WifiStatusHandler(int event)  //这是一个回调函数,用于返回模块当前的无线网络连接的状态
{
  switch (event) {
    case MXCHIP_WIFI_UP:
      printf("Wi-Fi up \r\n");
                        if( wifiModeSwitch == 0)
                                wifiModeSwitch = 1;
      break;
    case MXCHIP_WIFI_DOWN:
      printf("Station down \r\n");
      break;
    default:
      break;
  }
  return;
}

void ApListCallback(UwtPara_str *pApList)  //这是个回调函数,用于返回模块搜索附近无线网络的结果
{
        int i;
  printf("Find %d APs: \r\n", pApList->ApNum);
  for (i=0;iApNum;i++)
    printf("    SSID: %s, Signal: %d%%\r\n", pApList->ApList[i].ssid, pApList->ApList[i].ApPower);
        startScan = 0;
}

void NetCallback(net_para_st *pnet)  //DHCP成功时,返回当前模块网络参数的回调函数
{
        printf("IP address: %s \r\n", pnet->ip);
        printf("NetMask address: %s \r\n", pnet->mask);
        printf("Gateway address: %s \r\n", pnet->gate);
        printf("DNS server address: %s \r\n", pnet->dns);
  printf("MAC address: %s \r\n", pnet->mac);
}

void stationModeStart(void)
{
        memset(&wNetConfig, 0x0, sizeof(network_InitTypeDef_st));
       
        wNetConfig.wifi_mode = Station;
        strcpy((char*)wNetConfig.wifi_ssid, AP_NAME);
        strcpy((char*)wNetConfig.wifi_key, AP_PASSWORD);
        wNetConfig.dhcpMode = DHCP_Client;
        StartNetwork(&wNetConfig);
        printf("connect to %s.....\r\n", wNetConfig.wifi_ssid);
}

void softAPModeStart(void)
{
  memset(&wNetConfig, 0x0, sizeof(network_InitTypeDef_st));
       
        wNetConfig.wifi_mode = Soft_AP;
  strcpy((char*)wNetConfig.wifi_ssid, "uAP");
  strcpy((char*)wNetConfig.wifi_key, "");
        strcpy((char*)wNetConfig.local_ip_addr, "192.168.0.1");
        strcpy((char*)wNetConfig.address_pool_start, "192.168.0.10");
        strcpy((char*)wNetConfig.address_pool_end, "192.168.0.177");
        wNetConfig.dhcpMode = DHCP_Server;
        StartNetwork(&wNetConfig);
        printf("Setup soft AP: %s\r\n", wNetConfig.wifi_ssid);
}

int main(void)
{
  mxchipInit();
  UART_Init();

  printf("\r\nStart scan\r\n");
        mxchipStartScan();
        startScan = 1;
  stationModeStart();
       

  while(1){
    mxchipTick();
    if(wifiModeSwitch==1&&softAPStarted==0){
      softAPModeStart();
                        softAPStarted = 1;
    }
  }
}


void Button_irq_handler(void *arg)
{
        if(startScan == 0){
                startScan = 1;
                printf("Start scanning by user...\r\n");
                mxchipStartScan();               
        }
        else
                printf("A scanning is pending...\r\n");
       
}



可见都是通过回调函数同用户的程序交互的,那么掌握了这些回调函数就等于掌控了库.


还有一个感悟就是,WIFI同互联网很象,总是要IP地址,而蓝牙不是这样,是靠协议进行联系,等ZIGBEE更松些但也是靠库才能完成通讯
此帖出自RF/无线论坛
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表