库的研究
时间: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更松些但也是靠库才能完成通讯
我前面学过蓝牙的库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更松些但也是靠库才能完成通讯