ハンドル
Haply::HardwareAPI::Devices::Handle
Haply ハンドルとのやりとりに必要なロジックをカプセル化します。
警告ハンドルはまだ活発に開発されている分野であり、APIは安定していませんし、後方互換性も保証されていません。
このクラスは、特定のイベントがデバイスから受信されたときに呼び出される保護された仮想メソッドの1つをオーバーライドするように特殊化されていなければならない:
- OnReceiveHandleInfo:デバイスのウェイクアップ後に呼び出される。
- OnReceiveHandleStatusMessage デバイスから新しい状態更新を受信したときに呼び出される。
- OnReceiveHandleErrorResponse デバイスがエラーを報告したときに呼び出される。
コンストラクタのパラメータとして、ハンドルのシリアル・ポートを表すSerialStreamクラスのインスタンスが必要です。コンストラクタが構築されると、SendDeviceWakeupコマンドによってハンドルがウェイクアップされ、RequestStatusコマンドを送信して最新のデバイス・ステータスを取得できるようになります。Receiveメソッドは、デバイスの応答を処理し、オーバーロードされた仮想メソッドのいずれかをトリガするために、どのコマンドメソッドにも続く必要があります。
ハンドルの実装は、デバイスのステータスのフィールドを使用してカスタマイズ可能で、その長さはフィールドによって決定される。Haply Quillのユーザーフィールドは以下のように定義されています:
- :ハンドルの平らな面にあるボタンの状態で、1が押されていることを示す。
- :電池残量:100は満充電を意味する。
このクラス内のすべてのメソッドは、それぞれのIO操作が完了するかエラーになるまでブロックされる。ハンドルの動作周波数は約50Hzである。複数のデバイスが同じスレッドで管理されている場合、全体の処理周波数は、すべてのデバイスの中で最も低い周波数になります。したがって、同じスレッド内でハンドルとInverse3を混在させることは推奨されません。
インデックス
クラス
メンバー
名称 | タイプ | 説明 |
---|---|---|
USER_DATA_MAX | 静的 constexpr uint8_t | ...に含めることができるバイトの最大量です。 |
方法
名称 | タイプ | 説明 |
---|---|---|
ハンドル | (std::iostream *) | ...からHandleオブジェクトを構築します。 |
SendDeviceWakeup | void() | ハンドルをウェイクアップして追加コマンドを可能にする。 |
リクエストステータス | void() | ハンドルに最新の状態を要求する。 |
センドハンドルステート | void(const uint16_t, const uint8_t, ...) | 提供されたハンドル固有のユーザー状態を更新する。 |
SendHandleErrorRequest | void(const uint16_t) | ハンドルに最新のエラー情報を要求する。 |
受け取る | int() | ハンドルからの応答を受け取り、処理する。 |
グリップの状態 | VersegripStatusResponse(...) |
メンバー
USER_DATA_MAX
static constexpr uint8_t USER_DATA_MAX = 255
Haplyハンドルの特殊な実装のユーザーフィールドに含めることができる最大バイト量。
方法
ハンドル
ハンドル(std::iostream * stream)
指定されたストリームからHandleオブジェクトを構築します。
パラメータ
- streamデバイスに関連付けられたシリアル・ポートを表すストリーム・オブジェクト。ストリームの有効期間は、Handleオブジェクトの有効期間と同じか、それ以上でなければなりません。このストリームは、SerialStreamクラスを使用して構築することをお勧めします。
SendDeviceWakeup
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_lengthuser_dataから読み込むバイト数。USER_DATA_MAXより小さくなければならない。
-
user_dataハンドル固有の状態を更新するために読み込まれ、使用されるバイト。これらのバイトをどのようにフォーマットするかは、ハンドルのドキュメントを参照してください。
SendHandleErrorRequest
void SendHandleErrorRequest(const uint16_t device_id)
ハンドルに最新のエラー情報を要求する。
ハンドルの応答を処理するためにReceiveをコールし、その後にOnReceiveHandleErrorResponseオーバーロードメソッドをコールしなければならない。
パラメータ
- device_idデバイスのID。このフィールドは現在ハンドルによって無視されるため、安全に0に設定することができる。
受け取る
int Receive()
ハンドルからの応答を受け取り、処理する。
以下のメソッドの呼び出しの後に続かなければならず、関連するオーバーロードされたメソッドを呼び出す:
- SendDeviceWakeup-> OnReceiveHandleInfo
- リクエストステータス-> OnReceiveHandleStatusMessage
- SendHandleState-> OnReceiveHandleStatusMessage
- SendHandleErrorRequest-> OnReceiveHandleErrorResponse
デバイスからメッセージを受信するか、エラーが発生するまでブロックされる。
リターン
操作が正常に完了した場合は0を返します。エラーが発生した場合、メソッドは負の値を返し、エラーは標準エラー出力に出力され、false を返すこともあります。
グリップの状態
VersegripStatusResponseGetVersegripStatus()