Turn on/turn off BlueTooth Radio mode in Windows CE(如何在wince中设置蓝牙的无线模式,以使其可被查找到)

     最近发现,公司的设备,不能被相互查找到,我试了几台,发现确实如此,想了想,猜测可能没有设置蓝牙的可查找状态,以至于不能被其他设备找到,由于最近也比较忙,就没有时间去解决它。

     昨天,台湾那边又提到这个问题,所以就只好抽时间去看这个问题。因为是猜测,所以就需要证明是这个原因,在网上下载了一个wince下可以运行的蓝牙应用程序,当我设置可被其他设备查找时,之前不能被查到的设备,就可以正常被查找到,看来确实是这个问题。然后就去看蓝牙相关的文档和动态链接库,看有没有函数可以实现。很容易就能找到BthGetMode和BthSetMode这两个函数,但是写好测试代码的时候,编译的时候,却说没有这个头文件(bthutil.h),也没有lib(bthutil.lib),很郁闷。文档说CE6已经对他支持了,但就是不能用。上网寻找帮助,发现很多人都有相同的疑问,但却没有一个可行的方法。

 

   接下来我就想,如果没有对这两个函数支持的话,就自己去实现一个,看了btd.dll和btdrt.dll 导出的接口函数,发现几个比较可能有帮助的函数:BthGetCurrentMode、BthReadScanEnableMask、BthWriteScanEnableMask。然后就一个个看文档,觉得后两个应该有帮助,但是对文档上的理解的不够透彻,使得拿到的这几个可能有帮助的函数,现在也没有多大用处。后来在网上看到一个博客对这方面有描述,和我想的比较相近,但是终究不是自己搞出来的。链接地址:http://www.cnblogs.com/procoder/archive/2009/05/11/1454396.html

受到启发。于是也就照猫画虎,自己写了两个函数。

int BthGetMode(int& mode)
{
    HMODULE hM = LoadLibrary(L"btdrt.dll");
    if (hM == NULL)
    {
        return ERROR_INVALID_HANDLE;

    }
    pfuncBthReadScanEnableMask pBthReadScanEnableMask =          (pfuncBthReadScanEnableMask)GetProcAddress(hM,L"BthReadScanEnableMask");
    unsigned char mask = 0;
    int iRet = pBthReadScanEnableMask(&mask);
    switch(mask)
    {
    case 0x0:
        mode = BTH_POWER_OFF;
        break;
    case 0x2:
        mode = BTH_CONNECTABLE;
        break;
    case 0x3:
        mode = BTH_DISCOVERABLE;
        break;
    default:
        break;
    }
    FreeLibrary(hM);
    return iRet;
}

 

int BthSetMode(int mode)
{
    HMODULE hM = LoadLibrary(L"btdrt.dll");
    if (hM == NULL)
    {
       return ERROR_INVALID_HANDLE;
    }
    pfuncBthWriteScanEnableMask pBthWriteScanEnableMask = (pfuncBthWriteScanEnableMask)GetProcAddress(hM,L"BthWriteScanEnableMask");
    unsigned char mask = 0;
    switch(mode)
    {
    case BTH_POWER_OFF:
        mask = 0x0;
        break;
    case BTH_CONNECTABLE:
        mask = 0x2;
        break;
    case BTH_DISCOVERABLE:
        mask = 0x3;
        break;
    default:
        break;
    }
    int iRet = pBthWriteScanEnableMask(mask);
    FreeLibrary(hM);
    return iRet;
}

  这样就可以利用上面实现的两个函数来设置蓝牙的radio mode。

现在的情况就是经常能够很快的定位问题出现在什么地方,但是解决问题却并不那么容易。在网上看到很多人在应用开发方面都在用C#,虽然我不是做应用开发的,还是有必要去学习C#,实现一些有意思的小程序。学习应用程序的开发!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值