好记性不如烂笔头。最近需要用VRPN获取设备数据,有些设备不在VRPN现有支持设备列表里,就想着自己改一下源码添加一下。在网上找了一段时间发现包括官网上的教程基本都是教你怎么用的,没找到告诉你怎么改的,所以就自己摸索了一下,简单记录一下,以防以后用到忘了。
鉴于介绍啥是VRPN以及VRPN的基本使用方法的文章已经有了,我在这就不多写了,可以参考这篇博客https://blog.csdn.net/huhaoxuan2010/article/details/77015017
等我用一阵子如果发现有坑的话我再自己写一篇。
1.工程建立与结构树分析
我用的是7.33的版本,在win10环境下用vs2019编译。源码github上就能搜到或者用我上传的这份(https://download.csdn.net/download/qq_21539825/14021934),获取源码后使用CMAKE构建一下,得到一个VRPN.sln的工程。打开工程,里面的结构如下,看了一遍发现需要更改的代码都在Library的Core VRPN Server Library里,后边的修改都是在这里面。
!注意:我编译的时候出了点问题,首先是提示我有些lib找不到,看了提示后发现是Core VRPN Server Library这个project没有编译通过,我单独编译发现是有部分syntax error,然后我把win10 SDK改成了Win8.1的就好了。
再编译的时候就没有lib的问题了,但是vrpn_server这个project编译不过去,跟之前是同样的问题,我改了SDK也就好了。
2.添加一个设备
想要添加一个设备最简单的方式就是找个相似的然后照着改。为了方便验证,我尝试添加一个自定义的鼠标进去(鼠标所有机子都有,方便验证是否生效,而且鼠标包含了Analog和Button两个类别的输入,比较具有代表性),找了工程里已有的Mouse作为参照。我首先通过在全工程中检索Mouse关键词,找到所有相关的代码,然后筛选出需要修改的相关文件如下:
2.1 Core VRPN Server Library---Header Files---vrpn_Generic_server_object.h文件
这个文件是管理定义设备代码的头文件,需要在其中声明设备的设置函数,以Mouse为例,函数名为setup_Mouse,这个函数用来读取Config文件中的设置并在全局设备中添加一个鼠标的实例。对于鼠标来说,没什么配置,只用获取名字就行,所以会比较简单,如果是像Dtrack这种追踪设备,就需要设置端口,追踪刚体数目等一系列参数,那种就麻烦了。
int setup_Mouse(char *&pch, char *line, FILE * /*config_file*/);
在下边依样画葫芦,复制这行,改个名字声明我们自己的setup函数。
int setup_MyMouse(char *&pch, char *line, FILE * /*config_file*/);
2.2 Core VRPN Server Library---Source Files---vrpn_Generic_server_object.c文件
这是对应的C文件,需要修改的地方会多一点,
1) 首先:添加我们设备的头文件(先写上,找不到正常,后边我们会添加这些文件),找到Mouse的头文件引用位置
#include "vrpn_Mouse.h" // for vrpn_Button_SerialMouse, etc
复制一个在下边,改成我们的
#include "vrpn_MyMouse.h" // for vrpn_Button_SerialMouse, etc
2) 然后:找到头文件中声明setup函数的具体定义,