3407|5

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PPC上如何实现无线路由器的自动切换 [复制链接]

根据无线路由器信号强弱 自动切换到信号强的无线路由器。
  小弟是菜鸟,只懂得MFC和socket方面的简单知识,对于无线更是没有研究过,
  请教要 实现这一个功能 需要哪些方面的知识?
  各位大虾 能不能给点建议?

最新回复

LZ说的是无线漫游功能吧 大概的思路就是先设一个门限,这个门限可以是信号强度也可以是别的参数比如beacon,低于这个门限的时候开始搜索周围符合条件(SSID或MAC)的AP,找到了就切过去 功能实现比较简单,在驱动或是应用层都可以做,应用层CE下的话微软给了一些API比如WZCXXX或者用NDIS的ioctl都可以实现,驱动的话就要看看模块商给的代码了 问题在于大多数消费级的WIFI模块在搜索AP的时候会造成通信中断(因为Channel换了),如果模块不支持,又不能改firmware的话,这个问题就比较难解决 LZ如果要做的话,改改驱动吧,微软给的那些API在重新连接时会切断连接的,而且响应速度比较慢  详情 回复 发表于 2009-11-18 09:12
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个还真么接触过,帮顶。
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

void WifiOn()
{
        DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D0, POWER_NAME);
        SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D0);
}

void WifiOff()
{
        DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D4, POWER_NAME);
        SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D4);
}




//实现部分的电源功能

#include "pwrmgr.h"

typedef DWORD  (__stdcall *DevicePowerNotifyProc)(PVOID,CEDEVICE_POWER_STATE,DWORD);
typedef DWORD (__stdcall *SetDevicePowerProc)(PVOID,DWORD,CEDEVICE_POWER_STATE);

DWORD DevicePowerNotify(PVOID pvDevice,CEDEVICE_POWER_STATE DeviceState,DWORD Flags)
{
        HINSTANCE hCoreDll = LoadLibrary(_T("coredll.dll"));
        DevicePowerNotifyProc procSet =
                (DevicePowerNotifyProc)GetProcAddress(hCoreDll, _T("DevicePowerNotify"));
        DWORD dwResult = procSet(pvDevice,DeviceState,Flags);
        ::FreeLibrary(hCoreDll);

        return dwResult;
}

DWORD SetDevicePower(PVOID pvDevice,DWORD dwDeviceFlags,CEDEVICE_POWER_STATE dwState)
{
        HINSTANCE hCoreDll = LoadLibrary(_T("coredll.dll"));
        SetDevicePowerProc procSet =
                (SetDevicePowerProc)GetProcAddress(hCoreDll, _T("SetDevicePower"));
        DWORD dwResult = procSet(pvDevice,dwDeviceFlags,dwState);
        ::FreeLibrary(hCoreDll);

        return dwResult;
}


加分给源码。。。。。。。。。。。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
思路应该是:枚举所有有效网络,得到各个网络的信号进行比较。
枚举网络是可能做到的,有API支持。但是如何得到各个网络的信号强度,不清楚。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
你是做应用还是驱动的?
如果是做应用的话,你只需要用conneection manager API建立无线网络连接就可以了,无线网络的信号切换是由驱动做的事情,应用程序不需要也不应该管的。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
LZ说的是无线漫游功能吧

大概的思路就是先设一个门限,这个门限可以是信号强度也可以是别的参数比如beacon,低于这个门限的时候开始搜索周围符合条件(SSID或MAC)的AP,找到了就切过去

功能实现比较简单,在驱动或是应用层都可以做,应用层CE下的话微软给了一些API比如WZCXXX或者用NDIS的ioctl都可以实现,驱动的话就要看看模块商给的代码了

问题在于大多数消费级的WIFI模块在搜索AP的时候会造成通信中断(因为Channel换了),如果模块不支持,又不能改firmware的话,这个问题就比较难解决

LZ如果要做的话,改改驱动吧,微软给的那些API在重新连接时会切断连接的,而且响应速度比较慢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表