コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.14.x を参照.

SysTime

SysTime はデバイスの時刻を表す型. TransitionMode::SysTime や GpioOut::SysTimeEq などで用いる.

各デバイスは自身のクロックを持ち, 出力の切り替えなどはこの時刻で行う. この時刻は 64 bitの ns 単位のカウンタで, Client を開いたときから数える. ホストの時計 (日時) とは対応しない. 現在のデバイスの時刻は Client の device_time_now() で取得する.

なお, デバイス時刻を直接取得することはできないので, device_time_now()が返す値は推定値であることに注意する. この推定は送受信データサンプルが多く, かつ, 直前にデータを送受信していたほうが正確になる. 正確に推定したい場合は, heartbeatを定期的に送りつつ, device_time_nowを呼ぶ直前にも heartbeat を送ると良い.

SysTime は現在のデバイスの時刻, または生の ns から構築する.

let opened = SysTime::ZERO;
let now = client.device_time_now()?;
let raw = SysTime::from_nanos(1_000_000_000);
let ns: u64 = now.sys_time();
操作 説明
ZERO Client を開いた時点
Client::device_time_now() 現在のデバイスの時刻
from_nanos(ns) 開いてからの経過 ns から構築
sys_time() 開いてからの経過 ns

SysTime には時間差を加減算する演算が定義されている.

let future = client.device_time_now()? + Duration::from_millis(100);
let past = future - Duration::from_millis(50);
let elapsed: Duration = future - past;
let is_after: bool = future > past; // true
演算 結果 説明
SysTime + Duration SysTime 指定時間の加算
SysTime - Duration SysTime 指定時間の減算
SysTime - SysTime Duration 2 時刻の差 (負になる場合は 0)
比較 (< / > / == など) bool 比較