# 驱动 SDK

# 准备工作

# 设备连接

连接小派的头显设备到电脑,安装Pimax客户端软件。假设安装路径为C:\Program Files\Pimax\,确认Pimax客户端软件已识别并连接到小派设备即可以体验Pimax软件中的内容。

# SDK安装

从小派开发者网站下载PC Windows SDK,并安装。假设安装路径为C:\Program Files\Pimax\Sdk\ (本文后续将以此为sdk安装路径)如果开发者将SDK安装到不同目录,在相关的步骤中将此路径替换即可。

# 相关基础知识

本文假定开发者已具备基本的c、c++编程技能。

# 编译选项设置

需要新建一个动态链接库项目,生成动态链接库程序(windows是.dll文件)。假设开发者要开发的驱动程序名为simple,则要确保生成名为driver_simple.dll的动态链接库。 将C:\Program Files\Pimax\Sdk\Include添加到开发者编译工程的头文件包含路径中,没有额外的Lib进行链接,只需要在代码中包含相关的头文件即可。

# 相关术语

  1. VR:虚拟现实
  2. PVR:Pimax VR
  3. HMD:头显设备
  4. PVR Runtime: 对小派设备进行管理使用的进程,并负责处理App的相关请求
  5. IPVRDriverContext:PVR Runtime提供给每个驱动程序的功能接口, 驱动程序可以添加设备,移除设备,获取内部HMD的姿态等功能,具体参见pvr_driver.h 中 IPVRDriverContext。

# 主要功能介绍

# 头文件使用

在相关的代码中只要包含pvr_driver.h即可。

# 实现接口IPVRDriver

每一个驱动程序都要一个实现IPVRDriver接口的类, 这是第一个PVR Runtime和驱动程序交互的类, PVR Runtime启动时会加载驱动程序,并调用IPVRDriver的init接口来做初始化工作, 在PVR Runtime退出时会调用IPVRDriver的cleanup接口做清理工作。

# 实现IPVRDevice

PVR Driver SDK目前支持HMD(只用于track), Controller, Tracker等设备类型(具体参见pvr_driver.h中PVRDeviceClass枚举类型), 驱动程序中可以根据需要实现不同类型的类来代表不同的设备,但都要实现IPVRDevice接口。

# 实现Component

驱动程序中每个IPVRDevice不提供具体的功能,具体的功能由这个IPVRDevice所包含的component来提供,PVR Runtime会通过IPVRDevice的getComponent接口来获取相应功能的接口,目前PVR Driver SDK 支持的Component有IPVRTrackedComponent(用于提供所在设备的姿态相关数据),IPVRPropertyComponent(用于提供所在设备的相关属性),IPVRControllerComponent(用于提供设备按键,震动等功能,只是用于控制器类型设备),

# 添加设备

调用IPVRDriverContext的addDevice接口添加设备到PVR Runtime, 并同时指定设备类型,注意一旦一个IPVRDevice实例对象被添加,这个实例的生命周期将由PVR Runtime控制,只到驱动程序调用IPVRDriverContext的removeDevice接口后,PVR Runtime将调用此实例的destroy接口来结束这个实例的生命周期。

# 移除设备

调用IPVRDriverContext的removeDevice接口通知PVR Runtime移除此设备, 注意需要在此设备实现的destroy接口中做此设备相关的资源释放动作,比如delete 此设备。切记不要在removeDevice调用后释放此设备实例。

# 实现驱动程序导出接口

添加DECLAR_PVRDRIVER_INTERFACE_VERSIONS(), 并实现PVRDRIVER_CREATE_ENTRY(interface_name)函数用于返回驱动程序的IPVRDriver实例。

# 多线程的处理

驱动程序中实现各个接口函数可能被在任何线程环境中调用,所以开发者需要自己保证相关的共享资源的线程安全问题。

# 驱动程序的安装

以驱动程序simple为例,在C:\Program Files\Pimax\Runtime\drivers路径中新建simple目录, 进入simple目录,再新建bin目录, 进入bin目录在新建win32和win64目录,然后将开发者生成的32位和64位的driver_simple.dll分别拷贝到对应目录中, 然后重新启动服务PiServiceLauncher以便PVR Runtime加载驱动, 如有问题,可以查看PVR Runtime的log(在C:\Users{当前用户名}\AppData\Local\Pimax\runtime\pvr_srv_log.txt)。

# Samples

SimplePVRDriver: 一个简单的驱动程序实现。