AM Daemon ライブラリリファレンス
UsbIOSwitchInput.h
[詳解]
1 /// @file
2 /// @brief USB I/O のスイッチ入力情報を提供するクラス UsbIOSwitchInput のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_USBIOSWITCHINPUT_H
7 #define AMDAEMON_USBIOSWITCHINPUT_H
8 
9 #include "amdaemon/env.h"
11 
12 #include <vector>
13 #include <cstdint>
14 #include <cstddef>
15 
16 namespace amdaemon
17 {
18 /// @addtogroup g_usbio
19 /// @{
20 
21  // 内部クラスの前方宣言
22  class InnerIndexHolder;
23 
24  /// @brief USB I/O のスイッチ入力情報を提供するクラス。
25  /// @see UsbIO, UsbIONode
26  ///
27  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
28  /// UsbIONode クラスのメンバ関数 UsbIONode#getSwitchInput から取得すること。
30  {
31  public:
32  /// プレイヤー単位スイッチ入力の最大数。
33  static const std::size_t MaxPlayerBitCount = 64;
34 
35  public:
36  /// @brief コンストラクタ。
37  /// @note アプリ側からは利用できない。
38  explicit UsbIOSwitchInput(InnerIndexHolder);
39 
40  // 下記は暗黙の定義を用いる。
41  //‾UsbIOSwitchInput() = default;
42 
43  /// @brief テストスイッチの入力状態を取得する。
44  /// @retval true スイッチ入力がON状態である場合。
45  /// @retval false スイッチ入力がOFF状態である場合。
46  bool isTestOn() const;
47 
48  /// @brief チルトスイッチの入力状態を取得する。
49  /// @retval true スイッチ入力がON状態である場合。
50  /// @retval false スイッチ入力がOFF状態である場合。
51  bool isTiltOn() const;
52 
53  /// @brief プレイヤー数を取得する。
54  /// @return プレイヤー数。
55  ///
56  /// このプレイヤー数は USB I/O 規格のスイッチ入力におけるプレイヤー数であり、
57  /// Core#getPlayerCount で取得できるプレイヤー数とは異なる。
58  std::size_t getPlayerCount() const;
59 
60  /// @brief プレイヤー単位スイッチの入力状態ビット列を取得する。
61  /// @param[in] playerIndex プレイヤーインデックス。
62  /// @return プレイヤー単位スイッチの入力状態ビット列。
63  ///
64  /// @exception Exception
65  /// 引数 playerIndex にプレイヤー数以上の値を指定した場合。
66  /// プレイヤー数はメンバ関数 #getPlayerCount で取得できる。
67  ///
68  /// スイッチ入力がON状態の場合、対応するビットは 1 になる。
69  /// それ以外の場合、対応するビットは 0 となる。
70  /// 各ビットがどのボタンに対応しているかはデバイス依存である。
71  ///
72  /// ビット演算を行いたくない場合、メンバ関数 #isPlayerOn で各ビットの
73  /// 状態を個別に取得するか、 std::bitset クラスで戻り値をラップするとよい。
74  ///
75  /// @code
76  /// amdaemon::UsbIO usbIO;
77  ///
78  /// // メンバ関数 getPlayerBits の戻り値を bitset に変換
79  /// // std::bitset<sizeof(std::uint64_t) * 8> 型の値が返る
80  /// auto bits =
81  /// amdaemon::util::toBitset(
82  /// usbIO.getNode(0).getSwitchInput().getPlayerBits(0));
83  /// @endcode
84  std::uint64_t getPlayerBits(std::size_t playerIndex) const;
85 
86  /// @brief プレイヤー単位スイッチの入力状態を取得する。
87  /// @param[in] playerIndex プレイヤーインデックス。
88  /// @param[in] bitIndex ビットインデックス。
89  /// @retval true スイッチ入力がON状態である場合。
90  /// @retval false スイッチ入力がOFF状態である場合。
91  ///
92  /// @exception Exception
93  /// - 引数 playerIndex にプレイヤー数以上の値を指定した。
94  /// プレイヤー数はメンバ関数 #getPlayerCount で取得できる。
95  /// - 引数 bitIndex に #MaxPlayerBitCount 以上の値を指定した。
96  bool isPlayerOn(std::size_t playerIndex, std::size_t bitIndex) const;
97 
98  /// @brief プレイヤー単位スイッチの入力状態ビット列配列を取得する。
99  /// @return プレイヤー単位スイッチの入力状態ビット列配列。
100  ///
101  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
102  ///
103  /// - プレイヤー数を知りたいだけならばメンバ関数 #getPlayerCount を用いること。
104  /// - 特定プレイヤーのスイッチ入力状態ビット列を取得したいだけならばメンバ関数
105  /// #getPlayerBits を用いること。
106  std::vector<std::uint64_t> getPlayersBits() const
107  {
108  return
109  ::amdaemon::util::toContainer<decltype(getPlayersBits())>(
110  getPlayerCount(),
111  [this](std::size_t i) { return getPlayerBits(i); });
112  }
113 
114  private:
115  std::size_t _nodeIndex; ///< ノードインデックス。
116 
117  private:
118  // コピー禁止
119  UsbIOSwitchInput(const UsbIOSwitchInput&); // 宣言のみ
120  UsbIOSwitchInput& operator=(const UsbIOSwitchInput&); // 宣言のみ
121  };
122 
123 /// @}
124 } // namespace amdaemon
125 
126 #endif // AMDAEMON_USBIOSWITCHINPUT_H
bool isTestOn() const
テストスイッチの入力状態を取得する。
static const std::size_t MaxPlayerBitCount
プレイヤー単位スイッチ入力の最大数。
Definition: UsbIOSwitchInput.h:33
USB I/O のスイッチ入力情報を提供するクラス。
Definition: UsbIOSwitchInput.h:29
bool isTiltOn() const
チルトスイッチの入力状態を取得する。
Daemonライブラリの環境定義を行うヘッダ。
std::vector< std::uint64_t > getPlayersBits() const
プレイヤー単位スイッチの入力状態ビット列配列を取得する。
Definition: UsbIOSwitchInput.h:106
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
UsbIOSwitchInput(InnerIndexHolder)
コンストラクタ。
コンテナクラス関連の便利処理を提供するヘッダ。
std::uint64_t getPlayerBits(std::size_t playerIndex) const
プレイヤー単位スイッチの入力状態ビット列を取得する。
std::size_t getPlayerCount() const
プレイヤー数を取得する。
bool isPlayerOn(std::size_t playerIndex, std::size_t bitIndex) const
プレイヤー単位スイッチの入力状態を取得する。