AM Daemon ライブラリリファレンス
BoardIO.h
[詳解]
1 /// @file
2 /// @brief DipSwitch、PushSwitch、LEDの情報を提供するMonostateクラス BoardIO のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_BOARDIO_H
7 #define AMDAEMON_BOARDIO_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/BoardIODef.h"
11 
12 #include <cstdint>
13 #include <cstddef>
14 
15 namespace amdaemon
16 {
17 /// @addtogroup g_boardio
18 /// @{
19 
20  /// @brief DipSwitch、PushSwitch、LEDの情報を提供するMonostateクラス。
21  /// @see Input, Output
22  ///
23  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
24  ///
25  /// DipSwitchやPushSwitchの生入力値を取得したり、LEDを直接操作したい場合に用いる。
26  /// ID付けされた入出力処理を行う場合はこのクラスではなく
27  /// Input クラスや Output クラスを用いること。
28  ///
29  /// Output クラスとはLED出力値を共有しており、
30  /// どちらか一方で設定した出力値はもう一方にも反映される。
31  ///
32  /// @par ライブラリ利用アプリで実装すべきこと(Nuシリーズタイトルのみ)
33  /// - @ref #isPushSwitchOn "isPushSwitchOn(0)" が true を返した場合、
34  /// Sequence クラスのメンバ関数 Sequence#beginTest を呼び出し、
35  /// ゲームテストモードへ遷移すること。
36  /// - BoardIO クラス単体では「ちょうど押した時」の判定ができない。
37  /// また、I/Oボードが接続されている場合、
38  /// そのTESTスイッチがON状態になった場合にも同様の処理を行う必要がある。
39  /// これらを解決・一元化するために、 Input クラスの利用を推奨する。
40  ///
41  /// @par プラットフォーム情報
42  /// - ALLSシリーズにはPushSwitch、LEDが搭載されておらず、下記のように扱われる。
43  /// - すべてのPushSwitchは常にOFF状態として扱われる。
44  /// - すべてのLEDは常に消灯状態として扱われ、状態設定は必ず失敗する。
45  /// - ALLSシリーズにおけるDipSwitchは、
46  /// システムテストモードで設定できる汎用フラグ値のビット列を表す。
47  ///
48  /// @ingroup g_common
49  class BoardIO
50  {
51  // 下記は暗黙の定義を用いる。
52  //BoardIO() = default;
53  //‾BoardIO() = default;
54  //BoardIO(const BoardIO&) = default;
55  //BoardIO& operator=(const BoardIO&) = default;
56 
57  public:
58  // DipSwitch
59 
60  /// @brief DipSwitchのON/OFF状態ビット列を取得する。
61  /// @return DipSwitchのON/OFF状態ビット列。
62  ///
63  /// ON状態の場合、対応するビットは 1 になる。
64  /// OFF状態の場合、対応するビットは 0 となる。
65  /// 各ビットはDipSwitchのインデックスに対応している。
66  ///
67  /// iostream との親和性のために戻り値の型を std::uint16_t としているが、
68  /// 実際に値が入るのは下位 amdaemon::DipSwitchCount ビットまでとなる。
69  ///
70  /// ビット演算を行いたくない場合、メンバ関数 #isDipSwitchOn で各DipSwitchの
71  /// 状態を個別に取得するか、 std::bitset クラスで戻り値をラップするとよい。
72  ///
73  /// @code
74  /// amdaemon::System system;
75  ///
76  /// // メンバ関数 getDipSwitchBits の戻り値を bitset に変換
77  /// std::bitset<amdaemon::DipSwitchCount> bits(system.getDipSwitchBits());
78  /// @endcode
79  ///
80  /// @par プラットフォーム情報
81  /// - Nuシリーズの場合、この値はDaemonプロセスの起動時に取得され、
82  /// 以降DipSwitchを操作しても変化しない。
83  /// - 変更したDipSwitch状態を反映するためにはDaemonプロセスを再起動する必要がある。
84  /// - ALLSシリーズの場合、
85  /// この値はシステムテストモードで設定できる汎用フラグ値のビット列を表す。
86  std::uint16_t getDipSwitchBits() const;
87 
88  /// @brief DipSwitchのアプリ定義値を取得する。
89  /// @return DipSwitchのアプリ定義値。
90  ///
91  /// @par プラットフォーム情報
92  /// - Nuシリーズの場合、インデックス 0, 1, 2 のDipSwitch状態により表される値を返す。
93  /// - ALLSシリーズの場合、メンバ関数 #getDipSwitchBits と同じ値を返す。
94  std::uint16_t getDipSwitchAppValue() const;
95 
96  /// @brief DipSwitchのON/OFF状態を取得する。
97  /// @param[in] index DipSwitchインデックス。
98  /// @retval true ON状態である場合。
99  /// @retval false OFF状態である場合。
100  ///
101  /// @exception Exception
102  /// 引数 index に amdaemon::DipSwitchCount 以上の値を指定した場合。
103  bool isDipSwitchOn(std::size_t index) const;
104 
105  /// @brief DipSwitchのON/OFF状態を取得する。
106  /// @param[in] pos DipSwitch位置。
107  /// @retval true ON状態である場合。
108  /// @retval false OFF状態である場合。
109  ///
110  /// @exception Exception
111  /// 引数 pos に不正な値を指定した場合。
112  bool isDipSwitchOn(DipSwitchPos pos) const
113  {
114  return isDipSwitchOn(static_cast<std::size_t>(pos));
115  }
116 
117  public:
118  // PushSwitch
119 
120  /// @brief PushSwitchのON/OFF状態ビット列を取得する。
121  /// @return PushSwitchのON/OFF状態ビット列。
122  ///
123  /// ON状態の場合、対応するビットは 1 になる。
124  /// それ以外の場合、対応するビットは 0 となる。
125  /// 各ビットはPushSwitchのインデックスに対応している。
126  ///
127  /// iostream との親和性のために戻り値の型を std::uint16_t としているが、
128  /// 実際に値が入るのは下位 amdaemon::PushSwitchCount ビットまでとなる。
129  ///
130  /// ビット演算を行いたくない場合、メンバ関数 #isPushSwitchOn で各PushSwitchの
131  /// 状態を個別に取得するか、 std::bitset クラスで戻り値をラップするとよい。
132  std::uint16_t getPushSwitchBits() const;
133 
134  /// @brief PushSwitchのON/OFF状態を取得する。
135  /// @param[in] index PushSwitchインデックス。
136  /// @retval true ON状態である場合。
137  /// @retval false OFF状態である場合。
138  ///
139  /// @exception Exception
140  /// 引数 index に amdaemon::PushSwitchCount 以上の値を指定した場合。
141  bool isPushSwitchOn(std::size_t index) const;
142 
143  public:
144  // LED
145 
146  /// @brief LEDの状態を設定する。
147  /// @param[in] index LEDインデックス。
148  /// @param[in] on 点灯状態にするならば true 、消灯状態にするならば false 。
149  /// @param[in] forceUpdate
150  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
151  ///
152  /// @exception Exception
153  /// 引数 index に amdaemon::BoardLedCount 以上の値を指定した場合。
154  ///
155  /// この関数で指定しても即座に更新されるわけではなく、
156  /// Core クラスのメンバ関数 Core#execute 呼び出しによって更新される。
157  void setLedState(std::size_t index, bool on, bool forceUpdate = false);
158 
159  /// @brief 現在設定されているLED状態ビット列を取得する。
160  /// @return 現在設定されているLED状態ビット列。
161  ///
162  /// 現在ライブラリ内で保持しているLED状態を返す。
163  /// 起動直後などは、実際のLEDがこの状態になっているとは限らない。
164  ///
165  /// 点灯状態の場合、対応するビットは 1 になる。
166  /// 消灯状態の場合、対応するビットは 0 となる。
167  /// 各ビットはLEDのインデックスに対応している。
168  ///
169  /// iostream との親和性のために戻り値の型を std::uint16_t としているが、
170  /// 実際に値が入るのは下位 amdaemon::BoardLedCount ビットまでとなる。
171  ///
172  /// ビット演算を行いたくない場合、メンバ関数 #isCurrentLedStateOn で各LED状態を
173  /// 個別に取得するか、 std::bitset クラスで戻り値をラップするとよい。
174  std::uint16_t getCurrentLedStateBits() const;
175 
176  /// @brief 現在設定されているLED状態が点灯状態であるか否かを取得する。
177  /// @param[in] index LEDインデックス。
178  /// @retval true 点灯状態である場合。
179  /// @retval false 消灯状態である場合。
180  ///
181  /// @exception Exception
182  /// 引数 index に amdaemon::BoardLedCount 以上の値を指定した場合。
183  ///
184  /// 現在ライブラリ内で保持しているLED状態を返す。
185  /// 起動直後などは、実際のLEDがこの状態になっているとは限らない。
186  bool isCurrentLedStateOn(std::size_t index) const;
187  };
188 
189 /// @}
190 } // namespace amdaemon
191 
192 #endif // AMDAEMON_BOARDIO_H
std::uint16_t getPushSwitchBits() const
PushSwitchのON/OFF状態ビット列を取得する。
std::uint16_t getDipSwitchBits() const
DipSwitchのON/OFF状態ビット列を取得する。
bool isCurrentLedStateOn(std::size_t index) const
現在設定されているLED状態が点灯状態であるか否かを取得する。
bool isDipSwitchOn(std::size_t index) const
DipSwitchのON/OFF状態を取得する。
bool isPushSwitchOn(std::size_t index) const
PushSwitchのON/OFF状態を取得する。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
DipSwitchPos
DipSwitch位置定義列挙。
Definition: BoardIODef.h:22
DipSwitch、PushSwitch、LEDの定数定義を提供するヘッダ。
void setLedState(std::size_t index, bool on, bool forceUpdate=false)
LEDの状態を設定する。
DipSwitch、PushSwitch、LEDの情報を提供するMonostateクラス。
Definition: BoardIO.h:49
std::uint16_t getCurrentLedStateBits() const
現在設定されているLED状態ビット列を取得する。
std::uint16_t getDipSwitchAppValue() const
DipSwitchのアプリ定義値を取得する。
bool isDipSwitchOn(DipSwitchPos pos) const
DipSwitchのON/OFF状態を取得する。
Definition: BoardIO.h:112