您的当前位置:首页正文

OpenVibe|为采集服务器创建新驱动程序

来源:九壹网

为采集服务器创建新驱动程序
介绍
此页面指驱动开发人员,并显示如何为 OpenViBE采集服务器创建新的采集驱动程序。驱动程序是一个与硬件获取外围相互作用的对象,并以采集服务器的方式格式化已获得的测量和信息。一旦采集服务器收到测量和信息,它能够将其发送到一个或多个已连接的客户端。
硬件和驱动程序之间的连接类型对采集服务器来说并不重要。某些硬件制造商将提供 API,以便驱动程序通过物理连接(可能是 USB、串行端口等)直接访问外围区域。一些将提供专有的采集服务器,允许通过 TCP/IP 连接实时流式传输测量结果。无论您的硬件制造商提供什么,OpenViBE 驱动程序负责从设备中收集必要的信息和数据,并根据 OpenViBE 的格式对所有这些信息和数据进行格式化。
实施起点
基本上有两种方法来实现新的驱动程序。一种是将现有驱动程序(如通用振荡器或某些驱动程序用于真实设备)并修改其代码以适应您的目的。另一种选择是从"empty"驱动程序开始。为此,我们提供了一个名为Skeleton-generator的开发工具,它会生成空模板文件,您可以填写以满足您的需求。
在下面,我们首先描述驱动程序的主要部分,然后用发电机解释过程。许多开发人员可能会发现,首先与一些现有驱动程序一起玩,查看其代码,然后使用此文档作为解释驱动程序内容的参考,会更加直观。

驱动程序是如何使用的?
首先,驱动程序必须向采集服务器声明其名称。这将用于采集服务器GUI,以轻松识别用户正在使用的硬件。因此,您应该向驱动程序提供精确的名称,例如硬件制造商名称和硬件型号名称。
驱动程序主要处理两种数据:
标题
标题是数据中不会随时间变化的部分。它包含有关正在进行的实验的几个标识符、有关正在获取的渠道的信息等。
缓冲区
缓冲区是随时间变化的数据部分。它包含特定时间段内每个通道的不同样本,这取决于每个发送通道的样本数量。此值在初始化阶段授予驱动程序。
要处理这些数据,采集服务器在执行的不同阶段的驱动程序。
配置
配置阶段可供驱动程序使用,以便从硬件中无法获得的用户请求信息。根据硬件的不同,所有信息都可能在流式传输的数据中找到,从而产生不可配置的驱动程序(如果可能,对于采集服务器用户来说,这可能更容易)。例如,具有物理连接的驱动程序可能不提供主题年龄或性别。如果需要提供此类信息,则此类驱动程序将需要配置阶段。
初始化/非硝化
在初始化阶段,驱动程序向硬件请求就绪状态。 一旦驱动程序被初始化(这意味着 OpenViBEAcquisitionServer::IDriver::initialize 返回),驱动程序应该有一个完整的标题准备发送到采集服务器。 驱动程序的 OpenViBEAcquisitionServer::IDriver::loop 会定期调用,以便驱动程序能够保持与设备的连接,并在需要时丢弃一些数据。
采集
采集阶段在调用 OpenViBEAcquisitionServer::IDriver::start 时出现。 从这个阶段开始,驱动程序会定期请求在 OpenViBEAcquisitionServer::IDriver::loop 函数中提供新数据。
以下为驱动程序自动机的示意图表示:
驱动程序自动机

skeleton generatorGUI
每个字段都有自己的条件,使用"帮助"按钮进行详细示例。填充所有字段后,您必须按下专用按钮检查它。将显示报告,要求您修改错误的字段(如果有)。如果一切都很好,您可以按下按钮"生成!" 生成文件。
编码驱动程序
编码驱动程序包括实施 OpenViBEAcquisitionServer::IDriver 对象。
让我们看看驱动程序,例如从生成器获得的驱动程序。
标题
标题将看起来像这样:
#include “…/ovasIDriver.h”
#include “…/ovasCHeader.h”
#include <openvibe/ov_all.h>
namespace OpenViBEAcquisitionServer
{
class CDriverTestSkGenerator : public OpenViBEAcquisitionServer::IDriver
{
public:
CDriverTestSkGenerator(OpenViBEAcquisitionServer ::IDriverContext& rDriverContext);
virtual ~CDriverTestSkGenerator(void);
virtual const char* getName(void);
virtual OpenViBE::boolean initialize(
const OpenViBE::uint32 ui32SampleCountPerSentBlock,
OpenViBEAcquisitionServer::IDriverCallback& rCallback);
virtual OpenViBE::boolean uninitialize(void);
virtual OpenViBE::boolean start(void);
virtual OpenViBE::boolean stop(void);
virtual OpenViBE::boolean loop(void);
virtual OpenViBE::boolean isConfigurable(void);
virtual OpenViBE::boolean configure(void);
virtual const OpenViBEAcquisitionServer::IHeader* getHeader(void)
{
return &m_oHeader;
}

            virtual OpenViBE::boolean isFlagSet(
                    const OpenViBEAcquisitionServer::EDriverFlag eFlag) const
            {
                    return eFlag==DriverFlag_IsUnstable;
            }
    protected:
            SettingsHelper m_oSettings;
            OpenViBEAcquisitionServer::IDriverCallback* m_pCallback;
            // Replace this generic Header with any specific
            // header you might have written
            OpenViBEAcquisitionServer::CHeader m_oHeader;
            OpenViBE::uint32 m_ui32SampleCountPerSentBlock;
            OpenViBE::float32* m_pSample;
    private:
            /*
             * Insert here all specific attributes, such as USB port
             * number or device ID.
             * Example :
             */
            // OpenViBE::uint32 m_ui32USBPort;
    };

有需求可以和我们联系

因篇幅问题不能全部显示,请点此查看更多更全内容

Top