コンテンツにスキップ

Client

Client はコマンドの送信・状態の読み出しを行う中心的なオブジェクト. Client を含む基礎・コマンドの API は本体パッケージが提供する. 実機等への接続には, これとは別に Link が必要.

Client::open(&geometry, link, option).await?;
引数 説明
geometry &Geometry デバイスの物理配置
link impl IntoLink リンク
config ClientConfig 下記参照

リンクの稼働状態を継続的に監視したい場合は open_with_checker を使い, 返り値の Checker を駆動する (リンクの状態監視 参照).

let num_devices = client.num_devices();
let firmware = client.read_firmware_version().await?;
let fpga_state = client.read_fpga_state().await?;
let error_detail = client.read_error_detail().await?;
let datagram_builder = client.datagram_builder();
let resp = client.send(frame).await?.await?;
client.send_checked(frame).await?;
client.stop().await?;
client.close().await?;
メソッド async 返り値 説明
num_devices() usize 接続中のデバイス台数
read_firmware_version() Result<Vec<FirmwareVersion>, Error> 各デバイスの CPU/FPGA ファームウェアバージョン
read_fpga_state() Result<Vec<FpgaState>, Error> 各デバイスの FPGA 状態
read_error_detail() Result<Vec<u8>, Error> 各デバイスのエラー詳細
datagram_builder() DatagramBuilder DatagramBuilder
send(frame) Result<ResponseFuture, Error> フレームを送信キューにいれる. ResponseFuture を await すると応答 (Response) が得られる
send_checked(frame) Result<(), Error> 送信し, 応答確認まで行う
stop() Result<(), Error> 全振動子を停止
close() Result<(), Error> 接続を閉じる

send_checked(frame).await? は, send(frame).await?.await?.check() と等価である.

ClientConfig {
timeout_cycles: NonZeroU32::new(10).unwrap(),
max_inflight: NonZeroUsize::new(MAX_INFLIGHT).unwrap(),
max_resync_rounds: NonZeroU32::new(8).unwrap(),
low_latency: false,
reset_resend_cycles: NonZeroU32::new(2).unwrap(),
rt_priority: Some(ThreadPriority::Crossplatform(
ThreadPriorityValue::try_from(80).unwrap(),
)),
rt_policy: RtSchedulePolicy::Fifo,
rt_affinity: None,
validate_state: true,
require_supported_firmware: false,
..Default::default()
}
フィールド デフォルト 説明
timeout_cycles NonZeroU32 10 応答待ちのタイムアウト (送信サイクル数)
max_inflight NonZeroUsize 127 送信キューサイズ
max_resync_rounds NonZeroU32 8 再同期を試みる最大ラウンド数
low_latency bool false 低レイテンシモード
reset_resend_cycles NonZeroU32 2 リセット命令の送信サイクル数
rt_priority Option<ThreadPriority> Windows: TimeCritical / その他: 80 RT スレッドの優先度. None にすると OS 既定.
rt_policy RtSchedulePolicy Fifo rt_priority 指定時のスケジューリングポリシー. Normal, Fifo (SCHED_FIFO), RoundRobin (SCHED_RR)
rt_affinity Option<CoreId> None RT スレッドの CPU affinity (None なら OS 既定)
validate_state bool true 送信前検証を有効にする
require_supported_firmware bool false trueなら接続時にファームウェアがサポートされているか検査する

max_inflightMAX_INFLIGHT (127) を超えるとエラーになる.

low_latency を有効にすると, ファームウェア内部での受信バッファをバイパスするため, レイテンシが改善する. ただし, 動作が不安定になる可能性がある.