AM Daemon ライブラリリファレンス
Can.h
[詳解]
1 /// @file
2 /// @brief CAN通信処理を提供するMonostateクラス Can のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_CAN_H
7 #define AMDAEMON_CAN_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/CanPort.h"
11 
12 #include <functional>
13 #include <vector>
14 #include <cstddef>
15 
16 namespace amdaemon
17 {
18 /// @addtogroup g_can
19 /// @{
20 
21  /// @brief CAN通信処理を提供するMonostateクラス。
22  /// @see Input
23  ///
24  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
25  ///
26  /// CAN I/O ボード 837-15257 およびその互換ボードから自動送信されるスイッチ入力等を
27  /// 扱う場合は、このクラスではなく Input クラスを用いること。
28  ///
29  /// @par プラットフォーム情報
30  /// - ALLSシリーズではCAN機能は利用できない。
31  /// - ALLSシリーズの場合、常にポート定義数 0 として扱われる。
32  ///
33  /// @ingroup g_common
34  class Can
35  {
36  public:
37  // 下記は暗黙の定義を用いる。
38  //Can() = default;
39  //‾Can() = default;
40  //Can(const Can&) = default;
41  //Can& operator=(const Can&) = default;
42 
43  /// @brief CAN通信機能を利用可能であるか否かを取得する。
44  /// @retval true 利用可能である場合。
45  /// @retval false 機能が無効である場合。
46  ///
47  /// 条件式 (getPortCount() > 0) の結果を返す。
48  bool isAvailable() const
49  {
50  return (this->getPortCount() > 0);
51  }
52 
53  /// @brief 設定ファイルに記述したポート定義数を取得する。
54  /// @return ポート定義数。
55  std::size_t getPortCount() const;
56 
57  /// @brief ポート情報インスタンスを取得する。
58  /// @param[in] portIndex ポート定義インデックス。ポート番号ではないことに注意。
59  /// @return ポート情報インスタンス。
60  ///
61  /// @exception Exception
62  /// 引数 portIndex にポート定義数以上の値を指定した場合。
63  /// ポート定義数はメンバ関数 #getPortCount で取得できる。
64  CanPort& getPort(std::size_t portIndex);
65 
66  /// @copydoc getPort(std::size_t)
67  const CanPort& getPort(std::size_t portIndex) const;
68 
69  /// @brief ポート情報インスタンス配列を取得する。
70  /// @return ポート情報インスタンス配列。
71  ///
72  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
73  ///
74  /// - ポート定義数を知りたいだけならばメンバ関数 #getPortCount を用いること。
75  /// - 特定ポート情報を取得したいだけならばメンバ関数 #getPort を用いること。
76  std::vector<std::reference_wrapper<CanPort>> getPorts()
77  {
78  return
79  ::amdaemon::util::toContainer<decltype(getPorts())>(
80  getPortCount(),
81  [this](std::size_t i) -> CanPort& { return getPort(i); });
82  }
83 
84  /// @copydoc getPorts
85  std::vector<std::reference_wrapper<const CanPort>> getPorts() const
86  {
87  return
88  ::amdaemon::util::toContainer<decltype(getPorts())>(
89  getPortCount(),
90  [this](std::size_t i) -> const CanPort& { return getPort(i); });
91  }
92  };
93 
94 /// @}
95 } // namespace amdaemon
96 
97 #endif // AMDAEMON_CAN_H
std::size_t getPortCount() const
設定ファイルに記述したポート定義数を取得する。
CAN通信ポートの情報を提供するクラス CanPort のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
CAN通信ポートの情報を提供するクラス。
Definition: CanPort.h:29
std::vector< std::reference_wrapper< const CanPort > > getPorts() const
ポート情報インスタンス配列を取得する。
Definition: Can.h:85
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
bool isAvailable() const
CAN通信機能を利用可能であるか否かを取得する。
Definition: Can.h:48
CanPort & getPort(std::size_t portIndex)
ポート情報インスタンスを取得する。
CAN通信処理を提供するMonostateクラス。
Definition: Can.h:34
std::vector< std::reference_wrapper< CanPort > > getPorts()
ポート情報インスタンス配列を取得する。
Definition: Can.h:76