跳至主要内容
版本: 0.1.5

手柄

Haply::HardwareAPI::Devices::Handle

封装了与 Haply 句柄交互所需的逻辑。

警告句柄仍处于开发阶段,API 不稳定,也不能保证向后兼容。

必须对该类进行专门化,以覆盖其中一个受保护的虚拟方法,当从设备接收到特定事件时,将调用该方法:

  • OnReceiveHandleInfo:唤醒设备后调用。
  • OnReceiveHandleStatusMessage 从设备接收到新的状态更新时调用。
  • 设备报告错误时调用 OnReceiveHandleErrorResponse。

构造函数需要一个代表句柄串行端口的SerialStream类实例作为参数。构建完成后,发送设备唤醒(SendDeviceWakeup)命令将唤醒句柄,并允许发送请求状态(RequestStatus)命令以获取最新的设备状态。接收方法应跟随任何命令方法,以处理设备的响应并触发其中一个重载虚拟方法。

手柄实现可通过设备状态中的字段自定义,字段的长度由字段决定。Haply Quill 的用户字段定义如下:

  • :手柄平面上按钮的状态,其中 1 表示按住按钮。
  • :电池电量,数值 100 表示电池已充满。

该类中的所有方法都将阻塞,直到各自的 IO 操作完成或出错。处理操作的频率约为 50Hz。如果多个设备由同一线程管理,则整体处理频率将以所有设备的最低频率为上限。因此,不建议在同一线程中混合使用处理程序和Inverse3

索引

班级

成员

名称类型说明
USER_DATA_MAXstatic constexpr uint8_t文件中可包含的最大字节数 ...

方法

名称类型说明
手柄(std::iostream *)从...中构造一个句柄对象。
发送设备唤醒void()唤醒句柄,以便执行其他命令。
请求状态void()从句柄中获取最新状态。
发送手柄状态void(const uint16_t, const uint8_t, ...)使用所提供的信息更新特定于句柄的用户状态 ...
发送错误处理请求void(const uint16_t)从句柄中获取最新的错误信息。
接收int()接收并处理来自句柄的回复。
获取横握状态VersegripStatusResponse(...)

成员

USER_DATA_MAX

静态 constexpr uint8_t USER_DATA_MAX = 255

任何 Haply 句柄专门实现的用户字段所能包含的最大字节数。

方法

手柄

处理(std::iostream * 流)

根据提供的数据流构造一个句柄对象。

参数

  • 表示与设备相关联的串行端口的流对象。流的生命周期必须与句柄对象的生命周期相匹配或超过。我们建议使用SerialStream类构建该流。

发送设备唤醒

void SendDeviceWakeup()

唤醒句柄,以便执行其他命令。

必须先向设备发送该命令,然后才能发送其他命令。

之后必须调用Receive来处理句柄的响应,然后再调用 OnReceiveHandleInfo 重载方法。

请求状态

void RequestStatus()

从句柄中获取最新状态。

之后必须调用Receive来处理句柄的响应,然后再调用 OnReceiveHandleStatusMessage 重载方法。

发送手柄状态

void SendHandleState( const uint16_t device_id、 const uint8_t user_data_length、 const uint8_t * user_data)

使用提供的参数更新特定于句柄的用户状态。

之后必须调用Receive来处理句柄的响应,然后再调用 OnReceiveHandleStatusMessage 重载方法。

参数

  • device_id设备的 ID。该字段目前被句柄忽略,可以安全地设置为 0。

  • user_data_length从 user_data 中读取的字节数。必须小于USER_DATA_MAX

  • user_data将被读取并用于更新句柄特定状态的字节。请查阅句柄的相关文档,以确定如何格式化这些字节。

发送错误处理请求

void SendHandleErrorRequest(const uint16_t device_id)

从句柄中获取最新的错误信息。

之后必须调用Receive来处理句柄的响应,然后再调用 OnReceiveHandleErrorResponse 重载方法。

参数

  • device_id设备的 ID。该字段目前被句柄忽略,可以安全地设置为 0。

接收

int Receive()

接收并处理来自句柄的回复。

必须跟随对以下方法之一的任何调用,并将调用相关的重载方法:

将阻塞,直到收到设备发送的信息或遇到错误。

返回

如果操作成功完成,则返回 0。如果发生错误,该方法将返回负值,错误信息将被打印到 stderr,并可能返回 false。

获取横握状态

VersegripStatusResponseGetVersegripStatus()