在Windows Mobile软件开发中.Net正扮演着日益重要的角色,我们已经可以看到很多用.Net CF开发的软件,这些软件涉及到了日常应用的方方面面。在智能设备的软件开发中,无线互联是一个相当重要的一块,我们可以看到,红外几乎是所有智能设备的标配,而蓝牙也日益在越来越多的智能设备上出现,有了硬件,显然要有相应的软件相关的应用。
  我们也知道,用.NET CF开发红外通信应用时相当轻松的,因为.NET CF中有一个命名空间System.Net.IrDA就是用于红外通信的通信模块。但是,.NET CF中还没有关于蓝牙通信的模块,所以目前来讲做这方面的开发还有一定的困难。下面,就谈谈如何用C#开发.NET CF蓝牙通信模块。
一. 基本要点
  首先明确一点,因为涉及到驱动硬件的问题,所以仅靠了解C#开发的相关知识显然是无法完成开发的,我们必须对C++开发有所了解。但是为了简单起见,我们不希望用C++写半行代码,所有的编码工作全部使用C#,也就是说,使用的开发环境只需要使用Visual Studio.net,不需要用其他的编辑器。
作为开发这类驱动硬件的程序的知识准备,您需要了解C++的基本知识,知道头文件是怎么一回事,知道托管代码如何与  非托管代码交互。因为本文的核心是说明如何开发.net CF蓝牙通信模块,所以前述这些准备知识并不作讲述。
  二. 关于蓝牙
  做蓝牙通信模块开发,自然先要知道蓝牙通信是怎么一回事。在我看来,蓝牙通信应该和红外通信模块类似,当然我是从开发者的角度来讲,抽象化以后应该就是这样,当然蓝牙和红外通信也有很多不一样的地方,这在面向对象设计里面怎么讲,我想一定有很多人理解的比我透彻。好了,这就是我们的基本思路了。我曾经在网上查过关于蓝牙开发的文章,很多人在.net CF开发中把蓝牙通信当作一个串行通信来处理,这也是不错的,但是我不是很喜欢,因为这样做的话,并不是针对蓝牙来开发的,换言之,在使用过程中,需要先手动开启蓝牙,配对,连接,建立串行通道,然后开启应用程序使用,你还要在应用程序中设置串行端口,对最终用户来讲,这是非常麻烦的。我觉得,这样的解决方案冠上蓝牙通信的名头简直就是……不多说了,书归正传。
  在红外通信中,我们知道,设备的DeviceID是一个Byte数组,那么蓝牙设备的DeviceID什么样子呢?我想这个大家都很清楚,是一串以“:”分隔的16进制数字。
  红外通信中,一般而言红外并没有开启、关闭之类的状态,但是蓝牙有开启、关闭、可发现三种状态。
  红外没有安全设置,而蓝牙有安全设置,所以我们需要对蓝牙设备进行配对,而红外通信这部需要。
  我们查看.net的Socket地址族里有IrDA,但是没有蓝牙相关的地址族,这是我们需要解决的问题。
  三. 获取设备ID
  1.获取本地设备的ID
  我们查看Window CE 4.2的SDK文档,得知获取本地设备ID的函数是BthReadLocalAddr,在btdrt.dll中。SDK文档中的英文原文是这样的:“This function retrieves the Bluetooth address of the current device.”好了,知道了这个就好说了:
  首先封装本地托管函数:
  这个函数得到的本地DeviceID也是一组byte数组,为了向人们显示出来,我们要把它变为String:
  2.获取远程设备的ID
  其实谈到获取远程设备的ID就涉及到如何去发现远程设备了,所以这里就一并把发现设备的方法也说明了吧。 发现设备需要用到三个Winsock API,分别是WSALookupServiceBegin、WSALookupServiceNext和WSALookupServiceEnd,这三个API到底起什么作用可以去查看Windows CE 4.2的SDK,这里就不详细解释了,只谈一下几个需要注意的地方。
  WSALookupServiceBegin的函数原形是这样的:
  我们用托管代码进行包装:
  可以看到,本来lpqsRestrictions是一个struct,经过包装后在托管代码中成为了byte[],我们计算好该struct大概要占用多少个byte,struct中每一个成员在byte数组中的位置是怎样的,装配出来就好了。
  由于是针对蓝牙作的开发,所以我们要查看一下这些参数应该是哪些值。Windows CE 4.2的SDK中说,蓝牙开发时,struct LPWSAQUERYSET中的如下成员应当为这些值:
  具体什么意思各位可以自己去理解,我想比我翻译出来要好些,毕竟我英语很差的。根据以上要求,我们这样装配pQuerySet:
  另外的两个API也照类似方法调用即可。
  在调用了WSALookupServiceNext之后,bytes数组pQuerySet中便包含了远程设备的地址信息,下面我们需要把它找出来。通过阅读SDK中WSAQUERYSET结构的说明和计算每个成员的位置之后,我们写出如下代码:
  因为.net框架的地址族里面没有蓝牙,所以我们这里用的是AddressFamily.Unspecified。
  然后的工作就是从中获取远程设备的ID了:
  前面我们已经计算出,这个Address里面的前六个字节是byte数组形式的设备ID,第七到第二十二个字节是蓝牙的Service Guid,在后面四个字节是端口号,所以我们只需要分别提取出来即可。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9403012/viewspace-1309/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9403012/viewspace-1309/

用C#开发.NET CF蓝牙通信模块相关推荐

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

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

  2. Android蓝牙开发系列文章-蓝牙设备类型知多少?

    在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...

  3. Android蓝牙开发系列文章-蓝牙mesh(一)

    在<Android蓝牙开发系列文章-策划篇>中我们对蓝牙专题的内容进行整体规划,现在让我们一点点揭开他的面纱~ 本文是关于蓝牙mesh的首篇文章,由好友CSDN博主yk150915提供,在 ...

  4. Android 蓝牙开发(一) -- 传统蓝牙聊天室

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 一.蓝牙概览 以下是蓝牙的介绍,来自维基百科: 蓝牙(英语: ...

  5. 物联网开发笔记(53)- 使用Micropython开发ESP32开发板之蓝牙BLE通信

    一.目的 这一节我们学习如何使用我们的ESP32开发板通过蓝牙和手机进行通信. 二.环境 ESP32 + 手机(笔者用的小米10) + Thonny IDE 三.蓝牙介绍 这个知识大家自行百度吧,这里 ...

  6. APP Invertor 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP

    APP Invertor 2 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP 经过几天的学习,期间查找了许多的文章资料.经过研究和总结加实践,终于做出了一个实现简单的接收和发送的Demo.下面将分 ...

  7. android蓝牙开发代码,Android蓝牙开发(示例代码)

    Android蓝牙开发 近期做蓝牙小车,须要Android端来控制小车的运动.以此文记录开发过程. 使用HC-06无线蓝牙串口透传模块.对于其它的蓝牙设备本文相同适用. 蓝牙开发的流程: 获取本地蓝牙 ...

  8. 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)

    haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...

  9. Android 蓝牙开发(三) -- 低功耗蓝牙开发

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 前面已经学习了经典蓝牙开发,学习了蓝牙的配对连接和通信,又通 ...

  10. nrf52840开发套件_nRF52840蓝牙5.0模块有几个突出的优势

    nRF52840-PDK 是一款使用 nrf52840 SoC 的多功能单板开发套件,专用于蓝牙 5.蓝牙低功耗.ANT.802.15.4 和 2.4 GHz 专有应用.此套件支持 nRF52840 ...

最新文章

  1. 如何将Revit明细表导出为Excel文档
  2. asp.net chart美化+绑定数据--饼图
  3. 代码重构(五):继承关系重构规则
  4. LeetCode 1419. 数青蛙(脑洞题)
  5. BOOTSTRAP ---- 重要部分
  6. 使用UE4发布安卓平台游戏
  7. android studio 使用问题 解决方法
  8. 小区进入刷卡,快递不方便
  9. 新中大财务软件服务器路径修改,新中大软件最常用的操作手册
  10. ora01031权限不足linux,ORA-01031:权限不足
  11. Android网络优化--概括
  12. 北京地铁21号线_对接台湖地区 北京地铁17号线2022年试运营
  13. Red Hat 9.0 安装配置 zz
  14. 微信小程序---下载、打开及预览PDF文件的方法
  15. 冒险岛V79个人用私服搭建回顾
  16. Android 手势识别向左,右,上,下,滑动的方向
  17. 小白如何从零开始打造一台DIY脑控智能机器人
  18. vue中如何加入横线_vue
  19. (转)阿里宝宝的漫漫求职路
  20. Matlab概率论与数理统计实践-假设检验

热门文章

  1. 电力系统微型计算机继电保护试题及答案,2011年4月全国自学考试电力系统微型计算机继电保护试题答案...
  2. 从东南亚到中东,为什么社交类产品成为游戏出海的突破口?
  3. 京东数据分析SQL面试题
  4. SqlSugar-执行Sql语句查询实例
  5. AGM FPGA选型手册
  6. css文字上浮div,css文字样式与div
  7. lammps建模_LAMMPS常用建模方法总结
  8. 市场上常见电阻阻值表
  9. 1.2 数值分析 误差的来源和分类
  10. 再生核希尔伯特空间和核方法