PPC上如何实现无线路由器的自动切换

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

回复评论 (5)

这个还真么接触过,帮顶。
点赞  2009-10-20 06:57

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;
}


加分给源码。。。。。。。。。。。
点赞  2009-11-17 10:49
思路应该是:枚举所有有效网络,得到各个网络的信号进行比较。
枚举网络是可能做到的,有API支持。但是如何得到各个网络的信号强度,不清楚。
点赞  2009-11-17 10:58
你是做应用还是驱动的?
如果是做应用的话,你只需要用conneection manager API建立无线网络连接就可以了,无线网络的信号切换是由驱动做的事情,应用程序不需要也不应该管的。
点赞  2009-11-17 13:37
LZ说的是无线漫游功能吧

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

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

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

LZ如果要做的话,改改驱动吧,微软给的那些API在重新连接时会切断连接的,而且响应速度比较慢
点赞  2009-11-18 09:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复