AM Daemon ライブラリリファレンス
|
CANボード単体の通信処理を提供するクラス。 [詳解]
#include <CanTarget.h>
公開メンバ関数 | |
CanTarget (InnerIndexHolder, InnerIndexHolder) | |
コンストラクタ。 [詳解] | |
const CanTargetProperty & | getProperty () const |
ボード情報を取得する。 [詳解] | |
RequestState | send (std::uint8_t command, const void *data, std::size_t dataSize, std::uint8_t priority=DefaultCanPacketPriority) |
リクエストパケットの送信を要求する。 [詳解] | |
RequestState | send (std::uint8_t command, const std::vector< std::uint8_t > &data, std::size_t dataSize=SIZE_MAX, std::uint8_t priority=DefaultCanPacketPriority) |
リクエストパケットの送信を要求する。 [詳解] | |
template<class Data > | |
auto | send (std::uint8_t command, Data &&data, std::size_t dataSize=sizeof(Data), std::uint8_t priority=DefaultCanPacketPriority) -> typename std::enable_if< ::amdaemon::util::IsBinaryCopyable< typename std::remove_reference< Data >::type >::value, RequestState >::type |
リクエストパケットの送信を要求する。 [詳解] | |
RequestState | send (std::uint8_t command) |
リクエストパケットの送信を要求する。 [詳解] | |
const void * | getLastSentData (std::uint8_t command, std::size_t *dataSize=nullptr) const |
直近の送信要求において指定したパケットデータを取得する。 [詳解] | |
const CanAck & | getAck (std::uint8_t command) const |
アクノリッジパケット情報を取得する。 [詳解] | |
CANボード単体の通信処理を提供するクラス。
このクラスのインスタンスをアプリ側で直接生成することはできない。 CanPort クラスのメンバ関数 CanPort::getTarget から取得すること。
amdaemon::CanTarget::CanTarget | ( | InnerIndexHolder | , |
InnerIndexHolder | |||
) |
コンストラクタ。
const CanTargetProperty& amdaemon::CanTarget::getProperty | ( | ) | const |
ボード情報を取得する。
RequestState amdaemon::CanTarget::send | ( | std::uint8_t | command, |
const void * | data, | ||
std::size_t | dataSize, | ||
std::uint8_t | priority = DefaultCanPacketPriority |
||
) |
リクエストパケットの送信を要求する。
[in] | command | 命令コード。 |
[in] | data | パケットデータ。不要ならば nullptr を指定可能。 |
[in] | dataSize | パケットデータサイズ。 amdaemon::MaxCanPacketDataSize 以下。データが不要ならば 0 。 |
[in] | priority | パケットのプライオリティ値。 0 以上 amdaemon::MaxCanPacketPriority 以下。 通常は指定を省略し、既定値 amdaemon::DefaultCanPacketPriority を用いること。 |
Exception |
|
この関数で任意の命令コードをリクエスト可能であるが、 いくつかの命令コードについては呼び出すべきでない等、注意すべき点がある。 詳しくは CanTarget クラスの説明を参照すること。
この関数の呼び出しに成功した場合、 引数 command と同じ命令コードを持つアクノリッジパケット情報が破棄される。 過去のアクノリッジパケットを今回のリクエストパケットに対するものと 誤認しないようにこのような挙動となっている。
この関数を呼び出す度に要求が内部キューに蓄えられ、順次Daemonプロセスへ送られる。 複数の要求はまとめられ、最大 16 要求まで一度に送信されるが、 あまりに多くの要求を高頻度で行うと送信が追い付かない可能性がある。 1 フレームあたり最大でも 8 要求程度に留めること。
戻り値の要求状態値は、DaemonプロセスがCANポートへリクエストパケットを送信した 時点で処理完了状態となり、送信処理の成否を確認できるようになる。 コマンド自体の成否を確認できるわけではないことに注意。
個々のコマンドの成否は、メンバ関数 getAck でアクノリッジパケットを取得可能に なってから、そのメンバ関数 CanAck::isError を用いて確認すること。
|
inline |
リクエストパケットの送信を要求する。
[in] | command | 命令コード。 |
[in] | data | パケットデータ。 |
[in] | dataSize | パケットデータサイズ。既定値は SIZE_MAX (std::size_t 型の最大値)。 この値と data.size() のうち小さい方の値が実際のサイズとして利用される。 |
[in] | priority | パケットのプライオリティ値。 0 以上 amdaemon::MaxCanPacketPriority 以下。 通常は指定を省略し、既定値 amdaemon::DefaultCanPacketPriority を用いること。 |
Exception |
|
パケットデータを可変長配列型で指定するオーバロード。 挙動は send(std::uint8_t, const void*, std::size_t, std::uint8_t) オーバロードに準ずる。
|
inline |
リクエストパケットの送信を要求する。
Data | パケットデータ型。後述の要件を満たす型でなければならない。 |
[in] | command | 命令コード。 |
[in] | data | パケットデータ。 |
[in] | dataSize | パケットデータサイズ。既定値は sizeof(Data) 。 この値と sizeof(data) のうち小さい方の値が実際のサイズとして利用される。 |
[in] | priority | パケットのプライオリティ値。 0 以上 amdaemon::MaxCanPacketPriority 以下。 通常は指定を省略し、既定値 amdaemon::DefaultCanPacketPriority を用いること。 |
Exception |
|
パケットデータを任意のデータ型(固定長配列等)で指定するオーバロード。 挙動は send(std::uint8_t, const void*, std::size_t, std::uint8_t) オーバロードに準ずる。
型 Data から参照性を取り除いた型(例えば型 Data が int& ならば int)は 下記の要件をすべて満たす必要がある。
要するに、安全に std::memcpy によるコピーが可能な型である必要がある。 1つでも満たしていない場合はコンパイルエラーとなる。
|
inline |
リクエストパケットの送信を要求する。
[in] | command | 命令コード。 |
パケットデータを持たないコマンド用のオーバロード。 挙動は send(std::uint8_t, const void*, std::size_t, std::uint8_t) オーバロードに準ずる。
パケットのプライオリティ値は amdaemon::DefaultCanPacketPriority 固定となる。
const void* amdaemon::CanTarget::getLastSentData | ( | std::uint8_t | command, |
std::size_t * | dataSize = nullptr |
||
) | const |
直近の送信要求において指定したパケットデータを取得する。
[in] | command | 対象の命令コード。 |
[out] | dataSize | パケットデータサイズの設定先。不要ならば nullptr 。 |
送信要求の開始にさえ成功していれば、送信処理自体の成否は問わない。
パケットデータを持たないコマンドを送信要求した場合でも、サイズ 0 のデータが返る。 一度も送信要求の開始に成功していない場合を除き、 nullptr が返ることはない。
const CanAck& amdaemon::CanTarget::getAck | ( | std::uint8_t | command | ) | const |
アクノリッジパケット情報を取得する。
[in] | command | 対象の命令コード。 |
引数 command で指定した命令コードを持つアクノリッジパケットを取得する。 存在しない場合、戻り値のメンバ関数 CanAck::exists が false を返す。
この関数が返すアクノリッジパケット情報が更新されるタイミングは次の2通りとなる。
なお、コマンド処理に失敗した場合、CAN通信の仕様により エラーレポート取得コマンド(命令コード値は amdaemon::CanErrorReportCommand)の アクノリッジパケットが返ってくるが、 その情報についてもこの関数の戻り値が内包している。 そのためエラーレポート取得コマンドのアクノリッジパケットを監視する必要はない。
アクノリッジパケットを返さないコマンドの処理に成功した場合、 通信仕様通り、この関数がアクノリッジパケット情報を返すことはない。 処理に失敗した場合は他のコマンドと同じくエラーレポート情報を返す。