微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 库的研究

库的研究

时间:10-02 整理:3721RD 点击:
我看了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;i<pApList->ApNum;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更松些但也是靠库才能完成通讯

上一篇:跑LED程序的感悟
下一篇:摄像头走起

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top