ComputerKnowledgeandTechnology电脑知识与技术第9卷第13期(2013年05月)
本栏目责任编辑:唐一东人工智能及识别技术
智能手机模拟蓝牙键盘——基于Android平台的实现研究
刘锦伟
(湖南城建职业技术学院公共基础课部,湖南湘潭411101)
摘要:该文主要分析如何在现今非常红火的Android平台上,利用Android现有架构实现智能手机模拟蓝牙键盘的功能。
侧重点在于其原理及实现方案要点,不深入探讨实现的代码细节。
关键词:智能手机;模拟;蓝牙键盘;Android平台
中图分类号:TN929文献标识码:A文章编号:1009-3044(2013)13-3136-04
1蓝牙在Android平台上的应用
2007年6月,苹果公司在美国推出iphone,由此拉开了智能手机的时代。随后,Google公司推出基于Linux平台的开源智能手
机操作系统—Android,其市场份额很快直追iOS和RIM。除了智能手机,平板电脑厂商也相继推出Android平台的产品。Android从最初的1.0发展到现在的2.3,以及专门面向平板电脑的3.0版本,功能越来越丰富,系统也越来越稳定。随着无线技
术的广泛应用,蓝牙技术在手机上应用也非常广泛,如蓝牙耳机听音乐、打电话;手机间通过蓝牙传输文件或联系人;笔记本电脑通
过蓝牙利用手机拨号上网。该文则重点介绍怎样在Android平台上实现将手机模拟成蓝牙键盘,通过蓝牙连接支持蓝牙HID的电
脑,便可以通过手机操作电脑或向电脑输入数据。
2蓝牙键盘的通信原理
2.1协议栈
蓝牙键盘是基于蓝牙HIDprofile来实现。其协议栈如图1所示。
图1HCI:主机控制接口,与蓝牙适配器间传递数据
L2CAP:逻辑链路层
HID:人机接口设备服务。
2.2通信原理
HID设备(如蓝牙键盘或鼠标等)与HID主机(如电脑)间需要建立2个L2CAP通道:控制通道和中断通道。
图2
控制通道:用于传输一些控制信息,如断开虚拟缆线。
中断通道:传输HID设备的报告数据,如按键等。
连接过程可以由HID主机或HID设备发起,先建立控制通道,然后中断通道。两个通道都建立好后,HID设备即可开始传输事
件(如键盘按键等)。
3蓝牙键盘模拟应用的功能场景
3.1配对/解除配对
配对是两个蓝牙设备间建立信任关系的过程;
收稿日期:2013-03-12
E-mail:eduf@
Tel:+86-551-6569
ISSN1009-3044
ComputerKnowledgeandTechnology电脑知识与技术
Vol.9,No.13,May2013.
3136
ComputerKnowledgeandTechnology电脑知识与技术第9卷第13期(2013年05月)
人工智能及识别技术本栏目责任编辑:唐一东
一般由HIDhost发起这个配对过程。HIDhost搜索周边HID设备;
HIDhost发起配对
HIDhost端输入pin码验证
键盘端输入pin验证
如果host和键盘的pin码一致,验证通过,双方建立好信任关系(生成linkkey);
解除配对的过程可以由host或者蓝牙键盘任何一方发起,解除配对的一方会将自己保存的对方的linkkey删除,信任关系解
除。
3.2可被发现模式
蓝牙键盘需要置为可被发现模式,才能被没有配对蓝牙键盘的设备搜索发现;
3.3连接/断开连接
由Host发起连接:Host发起连接请求,键盘接受请求,即可完成连接;
由蓝牙键盘发起连接:蓝牙键盘虽然无法搜索或显示周围的host,但如果上次连接的Host的信任关系还保存着,只要有按键操
作,键盘也会主动尝试连接最后一次连接的Host。Host和键盘都可以发起断开连接操作。
3.4键盘输入
键盘与Host建立好连接后,在键盘按键输入就可以反映到Host端,操作就同通过usb连接到电脑的键盘对电脑进行输入一样。
4蓝牙键盘模拟应用的实现
4.1Android平台蓝牙协议栈实现现状
在标准的Android平台2.0及其之后,已提供了基于Bluez的开源蓝牙协议栈,并实现了A2DP、HFP、OPP等服务。
图3Bluez支持主机连接HID设备,但将手机模拟成键盘,就需要实现手机作为HID设备,不过不要紧,HID所依赖的L2CAP层协议
都已经实现好了,只需要基于L2CAP便可以实现HID层。
4.2软件架构及功能模块
图4
带星号标注的模块是实现此功能需要新增或改造的模块:深蓝色为新增功能,天蓝色带星号模块为需要改造的模块。
由于Android是基于Linux平台的,其平台总体架构可分为:LinuxKernel/Driver
LinuxNative层(用户空间)
3137
ComputerKnowledgeandTechnology电脑知识与技术第9卷第13期(2013年05月)
本栏目责任编辑:唐一东人工智能及识别技术
JavaFramework
Javaapplication
其中在Native部分有Java虚拟机,Java应用都在虚拟机上运行。
实现此功能所牵涉到的模块:Native层Bluez协议栈
Bluez是一个开源的Linux蓝牙协议栈,其中既实现了底层HCI、L2CAP、Rfcomm等底层协议,在Native也实现了a2dp、hfp、hsp、
hid等服务。其中的hid服务实现在bluez的插件中,主要是支持Host去连接蓝牙HID设备,如键盘、鼠标等。
这回我们实现的是HID设备端的角色,需要在bluez中实现相应协议。Bluez主要通过D-Bus接口向外提供接口(D-Bus是一种轻量级的进程间通信技术)。新增的HID设备端实现也需要对外提供
相应的D-Bus接口。JavaFramework/JNI层HIDDeviceService服务
JNI是用于java和Nativec之间相互调用的技术。
Service是Android中用于后台控制的服务。在该功能实现中我们需要增加一个HIDDeviceService通过JNI去调用Bluez提供的
新增的HID设备角色的D-Bus接口。Java应用层键盘模拟应用(Keyboardsimulationapp)
提供用户操作的界面。通过该应用,用户可以控制与主机的连接;连接状态可以通过界面进行键盘输入。
4.3模块实现细节
4.3.1Bluez
在Bluez中主要需要实现以下内容:SDP记录注册
SDP,全称ServiceDiscoverprotocol,用于宣称设备所支持的服务及搜索周边设备所支持的服务。将手机模拟成蓝牙键盘,就需
要将蓝牙键盘在手机上注册相应SDP记录,使得主机可以识别手机为蓝牙键盘设备,并了解键盘所支持的功能特性。HID设备端通信协议实现
主要处理蓝牙键盘与Host的连接、键盘事件的封装和发送等;
对外D-Bus接口实现
提供给上层JNI调用的接口
4.3.1.1Bluez中SDP记录注册
将手机模拟成蓝牙键盘,需要注册一条服务记录,包含蓝牙键盘所具备的特性。HID设备相关的SDP属性如下:
HIDParrVersion:属性ID0x0201,16位无符号整型,表示所使用的USBHID规范的版本
HIDDeviceSubclass:属性ID0x0202,8位整型数。子HID类,如键盘、鼠标等
HIDCountryCode:属性ID0x0203,8位整型,国家编号,表示设备面向哪个国家。
HIDVirtualCable:属性ID0x0204,8位布尔型,表示是否支持虚拟连接。
HIDReconnectInitiate:属性ID0x0205,8位布尔型,表示当与主机的连接断开的时候,HID设备是否支持发起自动重连。
HIDDescriptorList:属性ID0x0206,数据序列,HID描述符。详细参考HID规范6.2节。这个属性非常重要,主机能否识别该设
备为蓝牙键盘主要靠这个属性的设置。HIDLANGIDBaList:属性ID0x0207,为支持多国语言提供关联字符串。
HIDProfileVersion:属性ID0x020B,16位无符号整型,表示蓝牙HID协议版本。
HIDBootDevice:属性ID0x020E,8位布尔型,表示是否支持
这些属性在Bluez的服务启动时应该注册到SDP数据库中,便可以被主机识别。
4.3.1.2HID设备角色的协议实现
HID设备角色的实现主要包括两方面:
连接管理
连接过程可以由HID主机发起,也可以由HID设备发起(连接最后一次连接过的HID主机)。过程分别如下:HID主机发起连接的情况
为了能接收来自HID主机发出的连接请求,手机端作为HID设备,需要监听主机来的连接请求,对控制通道和中断通道进行
监听,如果有主机对这两个端口发起请求,就接受其请求,直到中断通道连接完毕,连接过程成功。HID设备发起连接的情况
手机端依次主动对最后一次连接过的HID主机的控制通道和中断通道发起连接,中断通道连接成功,则整个连接过程成功。
连接成功后,手机即可开始向HID主机发送按键事件。2)按键事件发送到Host。
3138
ComputerKnowledgeandTechnology电脑知识与技术第9卷第13期(2013年05月)
人工智能及识别技术本栏目责任编辑:唐一东
4.3.1.3提供给应用层的DBus接口
命令接口:
管理连接GetConnectionState(),获取HID设备与主机的连接状态。
True:与某HID主机已连接上。
Fal:没有与任何HID主机连接。
Disconnect(),断开与主机的连接。
SendKey(Keys[]),为应用层提供发送按键事件的接口。
如果在无任何连接的状态下接收到应用层的发送按键的请求,Bluez中会主动连接最后一次连接过的主机。2)事件接口:
ConnectionStateChanged
0:Disconnected
1:Connected
4.3.2HIDDeviceService
通过JNI调用Bluez的HID设备的D-Bus接口。
提供给Java应用调用接口。
蓝牙键盘模拟应用通过AIDL接口与Service通信,调用HIDDeviceService提供的接口。
主要接口:getConnectionState(),获取HID设备的连接状态。
disconnect(),断开与HID主机的连接。
ndKeys(keys[]),发送按键;
广播事件:HidDeviceStateChangedIntent
当与主机的连接状态发生变化时,Bluez会发出ConnectionStateChanged的事件HIDDeviceService监听到该事件后会发出Hid⁃DeviceStateChangedIntent广播。
Intent参数:
状态值:整型。0:没有任何连
1:连接上某主机
4.3.3Keyboard模拟应用
图5蓝牙键盘模拟程序界面
键盘模拟程序主要提供用户操作的界面,主要功能:
显示模拟键盘与HID主机的连接状态
绿色:以连接到某HID主机,在连接状态按下Connected按钮,可以断开与主机的连接;
灰色:没有与任何HID主机连接
显示CapsLock的状态
绿色:CapsLock状态;在非CapsLock状态按下Caps键,将进入该状态;
灰色:非CapsLock状态;在CapsLock状态按下Caps键,将进入该状态;
提供各按键的操作按钮
4.3.4其他
将手机置为可被其他设备搜索到的模式的功能已经在标准Android的BluetoothSetting中实现,利用既有功能即可。
(下转第3145页)
3139
ComputerKnowledgeandTechnology电脑知识与技术第9卷第13期(2013年05月)
人工智能及识别技术本栏目责任编辑:唐一东
图(b)所示。显然,随着细分次数的增加,模型的数据量成4倍速度增长,这必然会影响模型处理的速度。如果对初始控制网格进行
自适应Loop细分,取ε=0.02时细分后输出的控制网格如图(c)所示,采用该算法可以比较准确地区分光滑和非光滑区域,并且只针
对非光滑的区域进行Loop细分,其三角片数为2137,与传统的Loop细分比较,模型数据量有了明显的减少。另外,在该模型中的
大多数区域都是相对平坦的,只有在一些转角、凸点和边缘区域需要用Loop细分。可见,如果一个模型中相对光滑的区域较大时,
采用这种自适应算法有着明显的优越性。
4结论
综上所述,本文提出的算法在进行自适应细分的时能较好地实现降低模型中的存储量和运算量;能准确的分辨模型的较光滑
和较粗糙区域。另外,作者在后续研究工作中,将对算法的规则和设计进行适当修改,使其能更广泛应用于其他细分曲面模式中。
参考文献:
[1]SubdivisionSurfacesBadonTriangles[D].Utah,USA:UniversityofUtah,1987.
[2]CatmulE,ivelygeneratedB-splinesurfacesOiltopologicalmeshes[J].ComputerAidedDesign,
1978,l0(6):350-355.
[3]DooD,rypoints[J].ComputerAidedDesign,1978,10(6):156-160.
[4]AmreshA,FarinG,ortriangleMesh-es[M].ArizonaStateUniversity,October5.2000.
[5]Hamid-RezaPakdel,-mentalAdaptiveLoopSubdivision[J].ICCSA2004(3045):237-246.
[6]李桂清,吴壮志,马维银.自适应细分技术研究进展[J].计算机辅助设计与图形学报,2006,18(12):1789-1799.
[7]朱巍.细分曲面理论及其应用研究[D].博士学位论文.中国科学计算大学,精密仪器及机械,2011.
[8]王艳艳,张荣国,王蓉,等.向量线性相关的三角网格自适应Loop细分方法[J].工程图学学报,2009(1):91-96.
[9]吴剑煌,刘伟军,王天然.面向三角网格的自适应细分[J].计算机工程,2006,32(12):14-16
[10]李李,王亚平.裁剪曲面自适应三角化剖分[J].计算机应用,2006(26):2-13.
[11]赵宏庆,彭国华,叶正麟,等.自适应细分方法进行曲面造型[J].计算机应用研究,2006(9):72-76.
[12]钟大平,周来水,周海.自适应混合细分算法研究[J].机械科学与技术,2004,23(9):1090-1092.
[13]孙大松,鞠志涛,孙立镌.约束自适应Loop曲面细分[J].计算机应用研究,2012,29(9):3506-3508.
(上接第3139页)
5结束语
本文重点介绍了智能手机模拟蓝牙键盘的实现方法,进而可以通过蓝牙键盘远程控制电脑。随着智能手机的推广,人们对移
动性的充分利用的需求将会越来越多,可以进行近距离通信的蓝牙方式必将成为开发的热点。该文所实现的功能将为移动学习
和办公带来极大地便利。
参考文献:
[1]BluetoothHUMANINTERFACEDEVICE(HID)PROFILEV1.0,BluetoothSpecialInterestGroup(SIG)[Z].
[2]UniversalSerialBusDeviceClassDefinitionforHumanInterfaceDevices(HID),Version1.11[Z].
3145
智能手机模拟蓝牙键盘--基于Android平台的实现研究
作者:刘锦伟
作者单位:湖南城建职业技术学院公共基础课部,湖南湘潭411101
刊名:
电脑知识与技术
英文刊名:ComputerKnowledgeandTechnology
年,卷(期):2013(13)
othHUMANINTERFACEDEVICE(HID)PROFILEV1.0,BluetoothSpecialInterestGroup(SIG)
salSerialBusDeviceClassDefinitionforHumanInterfaceDevices(HID),Version1.11
引用本文格式:刘锦伟智能手机模拟蓝牙键盘--基于Android平台的实现研究[期刊论文]-电脑知识与技术2013(13)
本文发布于:2023-03-06 09:26:34,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678065995155942.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:手机虚拟按键.doc
本文 PDF 下载地址:手机虚拟按键.pdf
留言与评论(共有 0 条评论) |