科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件使用C#来开发.NET CF 蓝牙通信模块

使用C#来开发.NET CF 蓝牙通信模块

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在Windows Mobile软件开发中.Net正扮演着日益重要的角色,我们已经可以看到很多用.Net CF开发的软件,这些软件涉及到了日常应用的方方面面。

作者:I-soft 来源:CSDN 2007年11月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
我们看Windows CE 4.2的SDK,可以看到,在使用蓝牙进行连接的时候,需要使用WinSock扩展。我们还可以看到,在使用蓝牙进行连接的时候,三个参数分别应当是AF_BTH、SOCK_STREAM和BTHPROTO_RFCOMM,至于这三个参数分别代表什么,我们就要查看相关的头文件了。

  我们找到ws2bth.h头文件,可以看到AF_BTH代表十进制数32,而BTHPROTO_RFCOMM代表十六进制数0x0003,恰好和ProtocolType.Ggp代表的数值是一致的。所以,我们在实例化Socket时是这么写的:

以下是引用片段:
new Socket((AddressFamily) 0x20, SocketType.Stream, ProtocolType.Ggp);

  Socket实例化出来了,其他的当然就都好说了,这里不再赘述。

  六. 蓝牙的安全设置

  蓝牙比红外多了安全方面的设置,所以就需要多一些代码来处理这些。具体也就不多说了,其实也就是一些非托管代码的包装调用,这些API在Btdrt.dll中:

  获取配对码请求:

以下是引用片段:
 [DllImport("Btdrt.dll", SetLastError=true)]
  public static extern int BthGetPINRequest(byte[] pba);

  设置配对码:

以下是引用片段:
[DllImport("btdrt.dll", SetLastError=true)]
  public static extern int BthSetPIN(byte[] pba, int cPinLength, byte[] ppin);

  比较麻烦点的是配对,总共有三步操作:

  首先是创建ACL连接:

以下是引用片段:
[DllImport("Btdrt.dll", SetLastError=true)]
  public static extern int BthCreateACLConnection(byte[] pbt, ref ushort phandle);

  然后是配对码验证:

以下是引用片段:
[DllImport("Btdrt.dll", SetLastError=true)]
  public static extern int BthAuthenticate(byte[] pbt);

  然后一定要关闭连接:

以下是引用片段:
[DllImport("Btdrt.dll", SetLastError=true)]
  public static extern int BthCloseConnection(ushort handle);

  七. 设置蓝牙无线电状态

  我们知道,蓝牙无线电有打开、关闭、可发现三种状态,那么我们如何实现编程控制呢?

  我想这个一定大家都知道了,因为网上有很多关于这个的文章:

  先写一个枚举:

以下是引用片段:
public enum RadioMode
  {
  Connectable = 1,
  Discoverable = 2,
  PowerOff = 0
  }

  然后写一个函数调用非托管代码即可:

以下是引用片段:
[DllImport("BthUtil.dll", SetLastError=true)]
  public static extern int BthSetMode(RadioMode dwMode);

  获取无线电状态的话就用下面的函数:

以下是引用片段:
[DllImport("BthUtil.dll", SetLastError=true)]
  public static extern int BthGetMode(ref RadioMode dwMode);

  八. 已知的问题

  可能是因为蓝牙控制软件还没有实现标准化或者还是其他的问题,我们发现根据Windows CE 4.2 SDK 使用Winsock 扩展做的蓝牙开发有一个问题,而且不论是本文中所述的托管代码还是其他的非托管代码,只要是用的这种思路用Winsock 2做的开发都会存在这样一个问题,那就是不是在所有的Windows Mobile设备上都能正常运行。经过我的测试,我发现在很多使用另行开发的蓝牙控制软件的设备上,如联想ET560、华硕MyPAL A730上都无法运行,而在没有另行开发蓝牙控制软件的设备上是可以正常运行的,我不知道这是什么原因,初步推测可能是厂商另行开发的蓝牙控制软件屏蔽了微软的API的缘故,到底是不是这样,还得请高人指点。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章