浅析OpenNI2---Driver开发(2)

本文深入剖析OpenNI2底层驱动实现,涵盖DriverBase的设备管理,DeviceBase的传感器信息及StreamBase的图片处理流程。通过 DummyDevice 示例解释设备发现、设备状态管理及OpenCore的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章,介绍了OpenNI2底层与OpenCore的交互API以及各个驱动加载的过程,这篇文章介绍下OpenNI2底层驱动的实现;
上文中我们了解到底层驱动需要实现三个类DriverBase、DeviceBase、StreamBase,下面分析下各个类包含的功能同时结合DummyDevice分析下具体流程;

DriverBase
DriverServices 用于记录log
DriverBase 用于管理Device,包括设备发现,设备状态上报,以及deviceOpen、deviceClose等操作;
在DummyDevice 中 OzDriver 有一个m_devices的成员,用于保存连接在系统的设备信息,deviceOpen时会遍历其中的元素匹配uri,然后创建device后返回给OpenCore;m_devices中元素是在tryDevice中加入的;tryDevice扮演着设备发现的角色,在有些实现中是通过线程来发现设备的。

// log recorder
class DriverServices
{
public:
        DriverServices(OniDriverServices* pDriverServices) : m_pDriverServices(pDriverServices) {}

        void errorLoggerAppend(const char* format, ...)

        void errorLoggerClear()

        void log(int severity, const char* file, int line, const char* mask, const char* message)

private:
        OniDriverServices* m_pDriverServices;
};

class DriverBase
{
public:
        // 构造函数中传递记录log的DriverServices
        DriverBase(OniDriverServices* pDriverServices) : m_services(pDriverServices)
        {}

        virtual ~DriverBase() {}

        // 注册用于设备发现和状态上报的三个回调函数
        virtual OniStatus initialize(DeviceConnectedCallback connectedCallback, DeviceDisconnectedCallback disconnectedCallback, DeviceStateChangedCallback deviceStateChangedCallback, void* pCookie)
        {
                m_deviceConnectedEvent = connectedCallback;
                m_deviceDisconnectedEvent = disconnectedCallback;
                m_deviceStateChangedEvent = deviceStateChangedCallback;
                m_pCookie = pCookie;
                return ONI_STATUS_OK;
        }

        // 设备打开和关闭操作
        virtual DeviceBase* deviceOpen(const char* uri, const char* mode) = 0;
        virtual void deviceClose(DeviceBase* pDevice) = 0;

        virtual void shutdown() = 0;

        virtual OniStatus tryDevice(const 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值