听香水榭

半壁草房待明月,一盏清茗酬知音
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

开发.NET CF 蓝牙的通信模块

Posted on 2005-09-09 09:49  清雷  阅读(3051)  评论(19编辑  收藏  举报

    最近在Windows CE.NET上要做一个蓝牙通讯模块,往网上搜索资料,发现了一篇用C# 来开发.NET CF 蓝牙的通信模块的文 章,http://it.sohu.com/20050331/n224948889.shtml,尝试着照他的思路做,才发现是如此艰难.非托管代码与托管代码之间的交互是最大的问题.这个项目也就一筹莫展.意外发现OpennetCF网站上有个蓝牙模块,我就出尝试用这个库来写,但是写的demo在我那款PDA 上不能运行,可是我这款PDA是支持微软stack的啊,问题出在哪呢?
     用Vault把OpennetCF中的关于Bluetooth模块的源代码下载下来研究一下,才发现OpennetCF中的Bluetooth中用到的本地API跟上面我找到的那篇论文中提到的API有些不一致,马上我就进行修改:

        #region 本地API代码
        
/// <summary>
        
/// 查找本地蓝牙DeviceID
        
/// </summary>
        
/// <param name="pba">本地蓝牙DeviceID</param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthReadLocalAddr(byte[] pba);

        
/// <summary>
        
/// 初始化查找周围设备
        
/// </summary>
        
/// <param name="pQuerySet"></param>
        
/// <param name="dwFlags"></param>
        
/// <param name="lphLookup"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceBegin(
            
byte[] pQuerySet,
            LookupFlags dwFlags,
            
ref int lphLookup);

        
/// <summary>
        
/// 开始查找蓝牙设备
        
/// </summary>
        
/// <param name="hLookup"></param>
        
/// <param name="dwFlags"></param>
        
/// <param name="lpdwBufferLength"></param>
        
/// <param name="pResults"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceNext(
            
int hLookup,
            LookupFlags dwFlags,
            
ref int lpdwBufferLength,
            
byte[] pResults);

        
/// <summary>
        
/// 查找周围蓝牙设备结束
        
/// </summary>
        
/// <param name="hLookup"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceEnd(    int hLookup);

        
/// <summary>
        
/// 获取配对码请求
        
/// </summary>
        
/// <param name="pba"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthGetPINRequest(byte[] pba);
        
        
/// <summary>
        
/// 设置配对码
        
/// </summary>
        
/// <param name="pba"></param>
        
/// <param name="cPinLength"></param>
        
/// <param name="ppin"></param>
        
/// <returns></returns>

        [DllImport("btdrt.dll", SetLastError=true)]
        
public static extern int BthSetPIN(byte[] pba, int cPinLength, byte[] ppin);
        
        
/// <summary>
        
/// 创建ACL连接
        
/// </summary>
        
/// <param name="pbt"></param>
        
/// <param name="phandle"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthCreateACLConnection(byte[] pbt, ref ushort phandle);
        
        
/// <summary>
        
/// 配对码验证
        
/// </summary>
        
/// <param name="pbt"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthAuthenticate(byte[] pbt);
        
        
/// <summary>
        
/// 关闭认证连接
        
/// </summary>
        
/// <param name="handle"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthCloseConnection(ushort handle);


        
        
//BthGetHardwareStatus

        [DllImport(
"Btdrt.dll", SetLastError=true)]
        
public static extern int BthGetHardwareStatus(ref HardwareStatus pistatus);


        
//BthRevokePin

        [DllImport(
"Btdrt.dll", SetLastError=true)]
        
public static extern int BthRevokePIN(byte[] pba);    

        [DllImport(
"ws2.dll", EntryPoint="WSAGetLastError", SetLastError=true)]
        
public static extern int CeGetLastError();

        [DllImport(
"ws2_32.dll", EntryPoint="WSAGetLastError", SetLastError=true)]
        
public static extern int XpGetLastError();

        
//SetService

        [DllImport(
"Btdrt.dll",SetLastError=true)]
        
public static extern int BthNsSetService(
            
byte[] lpqsRegInfo,
            WSAESETSERVICEOP essoperation,
            
int dwControlFlags);
        
#endregion
 

    改动相应的代码,再写Bluetooth的demo时,就能正常运行.