BlackBerry 蓝牙编程(一)

本文详细介绍了蓝牙概述及BlackBerry平台对蓝牙的支持,包括JSR082蓝牙接口的使用及其支持的功能,蓝牙协议和协议层的结构,以及客户端与服务端模式下蓝牙服务的实现方式。

作者: 俞伟

 

 

蓝牙 概述

 

Blu et o o th 即 我们通 常说 的蓝牙。 蓝牙的 构想源 于 P AN – P ers o n al A rea N e two r k , 个人区 域 网,目的 是在小 范围的区 域网络 内 实现蓝 牙设备之 间的通信 。这个 蓝牙设备 一般是指 带蓝 牙功能的 手机或 蓝牙 手持 设备,蓝 牙设备 之间的通 信距离在 5 -1 5 米 之间, 完全免费 。 常 见的蓝牙 应用包 括: 蓝牙 耳麦,文 件传输 ,数据通 信等等。

 

Bla ckBe rr y 平台 对蓝牙的 支持 包括 J SR 0 8 2 和 Bla ck Berry 平 台自身 提供的 Blu et o o thS erial P o rt

( 蓝牙串 口协议 ) 。其中 J S R0 8 2 是比 较流行 ,使用 比较广泛 的蓝牙 接口标准 ,由 J 2 M E 延续 而来。本 文主要 说明 J SR0 8 2 蓝 牙接口 的使用 。

   

JS R08 2 规定 的内容包括:

 

1 .     D ata Tran s m issions On ly - 仅数据传 输

 

2 .     通讯协议 :

·     L2 CA P ( 长连接 )

·     RFCOM M

·     SDP

·     Object Exc h ang e P r o t o c o l

 

3 .     功能简表 :

·     Generic Ac cess P r o fil e ( GA P )

·     Service D is co v er y App li cati o n P r o fil e ( SDA P )

·     Seri al P o rt P r o fil e (SP P )

·     Generic Object Exchang e P ro fil e (GOE P )

 

 

JS R 0 8 2 A PI 支持以下功能:

 

1 .     Register se r v ices – 注册服 务

2 .     D isc o v er d e v ices and se r v ic es –   发现蓝 牙设备 和设备 上的服务

3 .     Estab li sh RFC OM M , L 2 CA P an d OBEX co nn e ctio n s –   建 立   RFCO MM , L 2 CA P , OBE X 连接

4 .     Co ndu ct th ese a cti v ities in a se cur e fashi o n –   以 一种 安全的方 式来执 行以上操 作

 


1 列出了蓝牙协议 和协议层

 

蓝牙协议组

协议堆栈

蓝牙核心 协议

Baseband , L in k M an ag e r P r o t o co l , L 2 CA P , SD P

有线连接 取代协 议

RFCOM M

电话通讯 控制协 议

TCS Bin ary

已经采用 的协议

P P P , UD P / TCP / I P , OB EX , W AP

表 1

 

1 展现了各协议和 协议层的结构

 

 

 

图 1

 

H CI -H o st C o n tr o l In te rfa ce 以下为蓝 牙传输 底层协议 , H CI 之上为上 层协议, H CI 为上层协

议与底层 协议的 通信提供 了接口。 L2 CA P 是 长连接 协议,作 为其他 高级协议 的基础, 数据 传输以 b y te 流 为基础 。 R FCOMM 为连接 线取代协 议,模拟 RS -2 3 2 控 制, 数据传输 通过 Baseband 。 RFCO M M 协议 是其他使 用串口 通讯协议 的基础。 TCS Bin ary 定义 了通话控 制信 号,为蓝 牙设备 接收语音 数据提供 了通道 。 OBE X 协议为对 象级别 的传输提 供服务, 比如 文本文件 ,音频 文件,视 频文件 , 联系人 文件等各 种文件。

 

什么是蓝 牙简表 ( P r o fil es ) ?蓝牙简 表是指 对于某一 类 蓝牙功 能所需 协议的概 括,它 是 一个 标准,为 该类蓝 牙功能挑 选适合的 蓝牙通 讯协议 。

 

2 展示了常用的蓝 牙功能简表

 

 

 

图 2

 

如图   2   所示 , SP P   简表 支持电话 网络, 传真,耳 麦,网络 访问。 G OEP   简 表支持文 件传输 ,

对象推送 ,数据 同步。 TC S 简表支持无 线电话 等。

 

客户端与服务端模式 蓝牙服务 是指应 用服务程 序通过蓝 牙为客 户端提供 数据交互 。 比如 打印服务 就是一个 蓝牙

应用服务 ,该应 用服务程 序运行在 与打印 机相连的 服务器上 ,一旦 客户端通 过蓝牙给 服务 器发送打 印请求 ,该 应用 服务会执 行打印 操作。作 为蓝牙服 务端, 它的服务 需要定义 一个 Service Re co rd ( 服务 记录 ) 并添加该 记录到 S erv ic e D isco v er y D a tabase ( SD D B) 。

 

服务记录 注册后 ,服务应 用等待客 户端发 起的访问 。如果服 务端应 用与客户 端匹配, 双方 会建立蓝 牙通讯 连接。客 户端向发 服务端 发送请求 ,服务端 响应请 求。

 


蓝牙 客户 端

 

蓝牙应用 客户端 与蓝牙服 务端实现 交互的 步骤 :

 

1 .     搜索蓝牙 设备 – D ev i ce D is co v ery

2 .     搜索服务   –   Se rvic e Sear ch

3 .     获取连接   URL –   Ob tain Blu et o o th URL

4 .     建立连接   (RFCOM M , L 2 CA P , OB EX ) –   E stabl ish C o nn e ctio n

5 .     数据交互   –   D ata T ran s m iss io n

 

 

搜索蓝牙设备

 

启动设备 搜索之 前,首先 要获取本 地蓝牙 设备 M A C ID , 搜索代 理,和 最大 服务搜索 数。

 

 

 

public   class BlueEngine   implements   Runnable,   DiscoveryListener {

 

private DiscoveryAgent agent = null ;

private StreamConnection streamConnection = null ;

private   DataInputStream   dis   =   null ;

private DataOutputStream dos = null ;

private   Thread   thread   =   null ;

private   int maxServiceSearches   =   0;

private int serviceSearchCount ; private ServiceRecord record = null ; private Vector deviceList ;

 

public String command = null ; public String url = null ; public String macId = null ;

 

private Object bluelock = new Object();

 

public BlueEngine() {}

 

public void initBluetooth() throws Exception {

 

// 获取本地 设备

LocalDevice local = LocalDevice. getLocalDevice ();

//   获取本地 蓝牙设 备     MA C   I D

macId = local.getBluetoothAddress();

//   获取蓝牙 设备搜 索代理

agent = local.getDiscoveryAgent();

 

try { // 获取最大 服务搜 索数

maxServiceSearches = Integer.parseInt (LocalDevice. getProperty ( "bluetooth.sd.trans.max" ));

}   catch   (NumberFormatException   e) {}

 

deviceList   =   new   Vector();   //   蓝牙设备 队列

}

 

 


 

类 Blu eEng in e 需要 实现 D i sco v er yL ist ener 接 口来执 行和完成 蓝牙设 备搜索 。 调用搜索 代理 ag ent.startInqu iry( D isc o v er y Ag ent.GI AC , thi s) 启动蓝 牙搜索。 参数 GIA C 指明 搜索所有 能够发 现的蓝牙 设备。 参数 thi s 是 D isc o v er yL ist ener ,当 搜索完成 后系统 调用 D isc o v ery L isten er 的 接口回调 处理。 搜完成后 如果蓝牙 设备队 列不为空 ,启动服 务搜索 。

   

public   void getBluetoothUrl()   throws   Exception   {

record = findService();

url   =   record .getConnectionURL(ServiceRecord. NOAUTHENTICATE_NOENCRYPT ,

false );

}

 

public ServiceRecord findService() {

 

try {

//   启动搜索 代理发 现设备 并与 DiscoveryListener 注册回调

agent .startInquiry(DiscoveryAgent. GIAC ,   this );

 

// 设备搜索 过程是 异步的 ,这里需 要同步 搜索过 程

//   设备搜索 完毕会 通知主 线程继续 运行

synchronized   ( bluelock )   {

try {

bluelock .wait();

}   catch   (Exception   e) {}

}

}   catch   (BluetoothStateException   e) {

System. out .println( "Unable to find devices to search" );

}

 

// 蓝牙设备 队列不为 空,启动 服务搜 索

if   ( deviceList .size()   > 0) {

if   (searchServices( deviceList ))   {

return record ;

}

}

 

return   null ;

}

D isc o v ery L isten er 的两个 回调接口 。接口 d ev ic eD is co v ered( Re m o te D e v ice, D e v iceClas s) 收入 被发现的 蓝牙设 备。接 口 inqu iryCo m p let ed(in t) 通知程序 设备搜 索完毕, 通知主线 程继续 。

 

 

public   void deviceDiscovered(RemoteDevice   btDevice, DeviceClass cod) {

//   当发现蓝 牙设备 时,如 果该设备 蓝牙模 块的 id 以 0 00 27 开头

//   则收入该 设备

if   (btDevice.getBluetoothAddress().startsWith( "00027" ))   {

deviceList .addElement(btDevice);

}

}

 

public   void inquiryCompleted( int   discType)   {

//   蓝牙搜索 执行完 毕,通 知主线程 继续

synchronized   ( bluelock )   {

try   {

bluelock .notify();

}   catch   (Exception   e) {

}

}

}

  

 

BlackBerry SDK下载

 

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值