外接设备模拟手柄方法、数据处理设备及头戴式设备
文献发布时间:2024-04-18 20:00:50
技术领域
本发明涉及虚拟现实技术领域,尤其涉及外接设备模拟手柄方法、数据处理设备及头戴式设备。
背景技术
近年来,计算机图形学、计算机动画、显示硬件等取得了迅速发展,三维模型处理技术的应用由原先的设计为主,逐渐加入新的主题:模拟现实世界,虚拟和现实交互。即从以前的“把计算机设计的模型做到现实世界中”逐渐增加“把现实世界物体放入计算机的虚拟环境中”和“让现实世界和虚拟世界进行交互”。现在,三维模型处理可以应用于虚拟现实(VR)、增强现实(AR)、混合现实(MR)、工业产品设计、影视特效、模拟仿真、计算机视觉、虚拟人、机器人、三维游戏、影视动画、广告设计等。
当前随着XR技术的发展,各行各业都开始尝试引入XR技术来达到更好的效果。目前XR设备主流还是以游戏娱乐以及办公为主。现实生活中有很多的人热爱玩游戏,那么就会有非常大的用户场景,那么各种游戏杰作将慢慢涌现。传统使用XR设备手柄来操作,虽然比较简单,但是其操作比较单一,显得比较枯燥乏味。那么外设模拟功能将会大大提高其有趣性,提高好的操作性,提高好的体验性等。同时对办公而言,使用键盘将大大提高工作效率,提高准确率。现有技术虽然在一定程度上可以通过蓝牙协议连接设备,但是无法实现具体的功能,无法映射手柄功能。
发明内容
本发明提供一种外接设备模拟手柄方法、数据处理设备及头戴式设备,用以解决现有技术无法通过蓝牙设备实现手柄的具体功能的问题。
为了解决上述技术问题,本发明公开了如下技术方案:
本发明提供了一种外接设备模拟手柄方法,包括按键自定义步骤,按键检索步骤,通信建立步骤,按键追踪步骤以及按键响应步骤。
所述按键自定义步骤是基于android系统中的Key Event自定义一外接设备的至少一个虚拟按键;所述按键检索步骤是基于所述虚拟按键与手柄服务中的手柄索引之间的映射关系,得到手柄索引值与手柄真实按键之间的映射索引,通过所述映射索引计算出所述虚拟按键对应的手柄的真实按键;所述通信建立步骤是将所述真实按键以及所述真实按键的状态与手柄服务建立进程间通信;所述按键追踪步骤是基于所述手柄服务追踪所述虚拟按键,将追踪到的虚拟按键映射为相应的真实按键,且将该真实按键存储至所述手柄服务;所述按键响应步骤是基于open XR标准的API接口获取存储至所述手柄服务中的真实按键,进而实现所述外接设备的虚拟按键模拟手柄的真实按键功能。
进一步地,所述按键自定义步骤之前还包括按键映射表建立步骤以及按键映射表存储步骤。
所述按键映射表建立步骤用以建立一按键映射表,所述按键映射表包括至少一个虚拟按键的虚拟标签,每个虚拟按键标签对应一个手柄索引,每个手柄手柄索引对应一个手柄的真实按键;所述按键映射表存储步骤用以将所述按键映射表存储至一外置存储的数据库中。
进一步地,所述按键检索步骤包括第一遍历查找步骤以及按键传递步骤。
所述第一遍历查找步骤是先拦截所述虚拟按键,遍历查找所述虚拟按键在按键映射表内是否存在所述虚拟按键与手柄服务中的手柄索引之间的映射关系,若否,则执行下一步骤;所述按键传递步骤是将所述按键映射表内不存在的虚拟按键传递到具体应用,(且该虚拟按键会被当作所述应用中的一个真实按键,但该真实按键并不是所述手柄的真实按键)。
进一步地,所述第一遍历查找步骤之后还包括第二遍历查找步骤,若存在所述虚拟按键与手柄服务中的手柄索引之间的映射关系,遍历查找所述按键映射表内所述虚拟按键对应的手柄索引值与手柄真实按键之间的映射索引,得到所述虚拟按键对应的真实按键。
进一步地,所述按键检索步骤还包括第一转化步骤以及第二转化步骤。
所述第一转化步骤是基于只读存储器,将所述虚拟按键转化为对应的手柄索引;所述第二转化步骤是基于只读存储器,将所述虚拟按键对应的手柄索引转换为真实按键。
本发明还提供一种数据处理设备,包括存储器以及处理器。所述存储器用以存储可执行程序代码;所述处理器用以读取所述可执行程序代码,以运行与所述可执行程序代码对应的计算机程序,以执行所述的外接设备模拟手柄方法中的至少一步骤。
本发明还提供一种头戴式设备,包括所述数据处理设备以及所述外接设备,所述外接设备电连接至所述数据处理设备,所述外接设备包括一蓝牙。
与现有技术相比,本发明至少具备以下技术效果:
本发明提供一种外接设备模拟手柄的方法、数据处理设备及头戴式设备,实现各种各样的蓝牙设备(键盘,游戏手柄,蓝牙手枪等)进行连接后模拟手柄的行为,用户可以根据自己需求自定义要模拟的按键,设置虚拟按键,通过虚拟按键模拟手柄的真实按键,进而实现手柄的具体功能,提高XR设备的有趣性,操作性,体验性以及高效性。
附图说明
下面结合附图和具体实施例,对本发明的技术方案进行详细的说明。
图1为本发明实施例所述的头戴式设备的具体结构图;
图2为本发明实施例所述的数据处理设备的具体结构图;
图3为本发明实施例所述的外接设备模拟手柄方法的流程图;
图4为本发明实施例所述按键映射表对应关系图;
图5为本发明实施例所述的按键检索步骤的流程图;
图6为本发明实施例所述的按键检索步骤的流程图。
图中部件标识如下:
200数据处理设备,210存储器,220处理器;300头戴式设备,310外接设备。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在附图中,结构相同的部件以相同数字标号表示。当某些部件被描述为“在”另一部件“上”时,所述部件可以直接置于所述另一部件上;也可以存在一中间部件,所述部件置于所述中间部件上,且所述中间部件置于另一部件上。当一个部件被描述为“安装至”或“连接至”另一部件时,二者可以理解为直接“安装”或“连接”,或者一个部件通过一中间部件间接“安装至”或“连接至”另一个部件。
如图1所示,本发明还提供一种头戴式设备300,包括一数据处理设备200以及外接设备310,外接设备310电连接至数据处理设备200,外接设备310包括一蓝牙,外接设备310可以是键盘,游戏手柄,蓝牙手枪等,外接设备310通过蓝牙连接至头戴式设备300,头戴式设备300能够建立外接设备310的虚拟按键模拟手柄的真实按键,提高头戴式设备300的可玩性。
如图2所示,数据处理设备200包括存储器210以及处理器220。存储器210用以存储可执行程序代码;处理器200用以读取所述可执行程序代码,以运行与所述可执行程序代码对应的计算机程序,以执行外接设备模拟手柄方法中的至少一步骤。
如图3所示,外接设备模拟手柄方法包括步骤S1)按键映射表建立步骤,步骤S2)按键映射表存储步骤,步骤S3)按键自定义步骤,步骤S4)按键检索步骤,步骤S5)通信建立步骤,步骤S6)按键追踪步骤以及步骤S7)按键响应步骤。
步骤S1)按键映射表建立步骤,建立一按键映射表,所述按键映射表包括至少一个虚拟按键的虚拟标签,每个虚拟按键标签对应一个手柄索引,每个手柄索引对应一个手柄的真实按键。
步骤S2)按键映射表存储步骤,将所述按键映射表存储至一外置存储的数据库中。
在本实施例中,具体地,定义key Map.txt文件,存放在外置存储卡路径/storage/emulated/0下,key Map内容是key:value的格式,key表示蓝牙设备发送的key code,为了简便直接只需填KEYCODE_后面的内容,例如KEYCODE_A填A或a即可,定义的列表需要遵循KEYCODE_XXX的方式,因为到系统里面所有的虚拟按键都是KEYCODE开头。
步骤S3)按键自定义步骤,基于android系统中的Key Event自定义一外接设备的至少一个虚拟按键。
在本实施例中,当一外接设备100连接至头戴式设备300时,用户可自定义至少一个虚拟按键,所述虚拟按键有可能对应一个真实按键,也有可能是一个单独存在的虚拟按键,若是一个单独的虚拟按键,则该单独的虚拟按键按照原生逻辑进入正常的按键处理流程。
步骤S4)按键检索步骤,基于所述虚拟按键与手柄服务中的手柄索引之间的映射关系,得到手柄索引值与手柄真实按键之间的映射索引,通过所述映射索引计算出所述虚拟按键对应的手柄的真实按键。
如图4所示,在本实施例中,系统开机后检索/storage/emulated/0/keyMap.txt文件,把key和value保存到HashMap中,取名为fileKeyMap。手柄的索引和真实手柄按键对应的列表取名为keyMaps。fileKeyMap的value和keyMaps的key是相同的,这样可以一一对应。
例如,手柄索引对应的外设按键为:a:BUTTON_X,b:BUTTON_Y,c:BUTTON_START,d:BUTTON_L_THUMB_STICK,e:BUTTON_L_HAND_TRIGGER,f:BUTTON_L_INDEX_TRIGGER,g:KBUTTON_L_THUMB_STICK_LEFT,h:KBUTTON_L_THUMB_STICK_RIGHT,i:KBUTTON_L_THUMB_STICK_UP,j:KBUTTON_L_THUMB_STICK_DOWN,k:BUTTON_A,l:BUTTON_B,m:BUTTON_RESERVE,n:BUTTON_R_THUMB_STICK,o:BUTTON_R_HAND_TRIGGER,p:BUTTON_R_INDEX_TRIGGER,q:KBUTTON_R_THUMB_STICK_LEFT,r:KBUTTON_R_THUMB_STICK_RIGHT,s:KBUTTON_R_THUMB_STICK_UP,t:KBUTTON_R_THUMB_STICK_DOWN。
其中手柄索引对应的手柄真实按键为:#BUTTON_X对应左手柄X键,#BUTTON_Y对应左手柄Y键,#BUTTON_START对应左手柄MENU键#BUTTON_L_THUMB_STICK对应左手柄摇杆键,#BUTTON_L_HAND_TRIGGER对应左手柄侧键,#BUTTON_L_INDEX_TRIGGER对应左手柄Trigger键,#KBUTTON_L_THUMB_STICK_LEFT对应左手柄摇杆左,#KBUTTON_L_THUMB_STICK_RIGHT对应 左手柄摇杆右,#KBUTTON_L_THUMB_STICK_UP对应左手柄摇杆上,#KBUTTON_L_THUMB_STICK_DOWN对应左手柄摇杆下,#BUTTON_A对应右手柄A键,#BUTTON_B对应右手柄B键,#BUTTON_RESERVE对应右手柄Home键,#BUTTON_R_THUMB_STICK对应右手柄摇杆键,#BUTTON_R_HAND_TRIGGER对应右手柄侧键,#BUTTON_R_INDEX_TRIGGER对应右手柄Trigger键,#KBUTTON_R_THUMB_STICK_LEFT对应右手柄摇杆左,#KBUTTON_R_THUMB_STICK_RIGHT对应右手柄摇杆右,#KBUTTON_R_THUMB_STICK_UP对应右手柄摇杆上,#KBUTTON_R_THUMB_STICK_DOWN对应右手柄摇杆下。
如图5所示,步骤S4)按键检索步骤包括步骤S41)第一遍历查找步骤以及步骤S42)按键传递步骤。
步骤S41)第一遍历查找步骤,先拦截所述虚拟按键,然后遍历查找所述虚拟按键在按键映射表内是否存在所述虚拟按键与手柄服务中的手柄索引之间的映射关系,若否,则执行下一步骤。
步骤S42)按键传递步骤,将所述按键映射表内不存在的虚拟按键传递到具体应用,且该虚拟按键会被当作所述应用中的一个真实按键,但该真实按键并不是所述手柄的真实按键。
具体地,在本实施例中,PhoneWindowManager的interceptKeyBeforeDispatchingInner中拦截接收到的虚拟按键,进行检测是否在fileKeyMap中,即虚拟按键是否相对应的手柄索引,如果存在,则是属于自定义按键,需要根据fileKeyMap的value作为key,在手柄索引map中进行查找,查找手柄索引是否有相对应的手柄的真实按键。
步骤S41)第一遍历查找步骤之后还包括步骤S43)第二遍历查找步骤,若存在所述虚拟按键与手柄服务中的手柄索引之间的映射关系,遍历查找所述按键映射表内所述虚拟按键对应的手柄索引值与手柄真实按键之间的映射索引,得到所述虚拟按键对应的真实按键。
在本实施例中,若步骤S41)第一遍历查找步骤没有遍历查找到所述虚拟按键与手柄服务中的手柄索引之间的映射关系和/或步骤S43)第二遍历查找步骤没有遍历查找到所述按键映射表内所述虚拟按键对应的手柄索引值与手柄真实按键之间的映射索引,则虚拟按键按照原生逻辑进入正常的按键处理流程,即系统如果没有消费掉该虚拟按键,就往当前的应用分发按键,如果应用监听了按键回调,就可以根据接收的事情做业务流程。
如图6所示,步骤S4)按键检索步骤还包括步骤S44)第一转化步骤以及步骤S45)第二转化步骤。
步骤S44)第一转化步骤,基于只读存储器,将所述虚拟按键转化为对应的手柄索引。
步骤S45)第二转化步骤,基于只读存储器,将所述虚拟按键对应的手柄索引转换为真实按键。
步骤S5)通信建立步骤,将所述真实按键以及所述真实按键的状态与手柄服务建立进程间通信。
在本实施例中,通过两个map,即fileKeyMap以及keyMaps,fileKeyMap为用户定义好的按键映射表,keyMaps是手柄映射值和手柄索引的对应关系,fileKeyMap的value值和keyMaps的key值是相同的,由此建立一个binder通信,获取trackingservice的服务发送按键,YvrImuController.getInstance().setKeyCodeValue(yvrKeycode, down ? ACTION_DOWN : ACTION_UP);如果没有找到定义的虚拟按键,那么按照原生逻辑进入正常的按键处理流程。
步骤S6)按键追踪步骤,基于所述手柄服务追踪所述虚拟按键,将追踪到的虚拟按键映射为相应的真实按键,且将该真实按键存储至所述手柄服务。
在本实施例中,手柄追踪服务trackingservice接收手柄驱动上报的实体按键值存储至按键数据包mControllerState; 同时也可以接收AndroidRom setKeyCodeValue下发的虚拟按键并将其映射对应的实体按键值存储至按键数据mControllerState,虚拟按键就等同了真实按键效果。
步骤S7)按键响应步骤,基于open XR标准的API接口获取存储至所述手柄服务中的真实按键,进而实现所述外接设备的虚拟按键模拟手柄的真实按键功能。
在本实施例中,按键数据包写入共享内存ShMemoryManager::GetInstance().saveControllerState(&mControllerState[node]), Unity应用通过OpenXR Api(xrGetActionStateBoolean/xrGetActionStateFloat/xrGetActionStateVector2f等接口)读取共享内存中按键包获取相应的真实按键值,实现响应相应按键功能。
本申请的优点在于,提供一种外接设备模拟手柄的方法、数据处理设备及头戴式设备,实现各种各样的蓝牙设备(键盘,游戏手柄,蓝牙手枪等)进行连接后模拟手柄的行为,用户可以根据自己需求自定义要模拟的按键,设置虚拟按键,通过虚拟按键模拟手柄的真实按键,进而实现手柄的具体功能,提高XR设备的有趣性,操作性,体验性以及高效性。
以上对本发明实施例所提供的外接设备模拟手柄的方法、数据处理设备及头戴式设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的范围。
- 一种智能设备的功耗优化方法、系统及智能设备
- 一种智能体感互动方法、设备、系统及存储设备
- 一种用电设备智能控制方法及系统、计算机设备及介质
- 一种智能巡检方法、电子设备、智能巡检系统和存储介质
- 一种船舶巡航方法、终端设备及计算机可读介质
- 智能巡航控制系统和智能巡航控制方法
- 智能寻车方法、装置、系统、服务器和巡航智能设备