AM Daemon ライブラリリファレンス
UsbIOPwmOutput.h
[詳解]
1 /// @file
2 /// @brief USB I/O のPWM出力処理を行うクラス UsbIOPwmOutput のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_USBIOPWMOUTPUT_H
7 #define AMDAEMON_USBIOPWMOUTPUT_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/RequestState.h"
11 
12 #include <algorithm>
13 #include <vector>
14 #include <cstdint>
15 #include <cstddef>
16 
17 namespace amdaemon
18 {
19 /// @addtogroup g_usbio
20 /// @{
21 
22  // 内部クラスの前方宣言
23  class InnerIndexHolder;
24 
25  /// @brief USB I/O のPWM出力処理を行うクラス。
26  /// @see UsbIO, UsbIONode
27  ///
28  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
29  /// UsbIONode クラスのメンバ関数 UsbIONode#getPwmOutput から取得すること。
30  ///
31  /// USB I/O のPWM(Pulse Width Modulation)出力を行う。
32  ///
33  /// AM Daemon が標準でサポートするPWM出力は、PWM出力専用ポートに対するものである。
34  /// PWM出力と汎用出力の切替ができるポートに対する出力はユニークコマンド扱いとなるため、
35  /// このクラスではなく UsbIOUniqueOutput クラスを用いて処理すること。
37  {
38  public:
39  /// @brief コンストラクタ。
40  /// @note アプリ側からは利用できない。
41  explicit UsbIOPwmOutput(InnerIndexHolder);
42 
43  // 下記は暗黙の定義を用いる。
44  //‾UsbIOPwmOutput();
45 
46  /// @brief PWM出力スロット数を取得する。
47  /// @return PWM出力スロット数。
48  std::size_t getSlotCount() const;
49 
50  /// @brief 出力するデューティ値配列を設定する。
51  /// @param[in] duties 出力するデューティ値配列。
52  /// @param[in] slotCount デューティ値配列の要素数。
53  /// @param[in] forceUpdate
54  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
55  /// @return 要求状態値。更新不要ならば無効値。
56  ///
57  /// @exception Exception
58  /// - 引数 duties に nullptr を指定した場合。
59  /// - 引数 slotCount にPWM出力スロット数より大きな値を指定した場合。
60  /// PWM出力スロット数はメンバ関数 #getSlotCount で取得できる。
61  ///
62  /// この関数を呼び出しても即座に出力されるわけではない。
63  /// 反映状況は戻り値の要求状態値で確認できる。
64  ///
65  /// 引数 forceUpdate が false かつ値が変化しない場合、更新不要と判断される。
66  /// その場合、戻り値の要求状態値は無効値となる。
67  ///
68  /// この関数を同一フレーム内で複数回呼びだした場合、
69  /// 最後の呼び出し時に指定した値のみが反映される。
71  const std::uint8_t* duties,
72  std::size_t slotCount,
73  bool forceUpdate = false);
74 
75  /// @brief 出力するデューティ値配列を設定する。
76  /// @param[in] duties 出力するデューティ値配列。
77  /// @param[in] slotCount
78  /// デューティ値配列の要素数。既定値は SIZE_MAX (std::size_t 型の最大値)。
79  /// この値と duties.size() のうち小さい方の値が実際のサイズとして利用される。
80  /// @param[in] forceUpdate
81  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
82  /// @return 要求状態値。更新不要ならば無効値。
83  ///
84  /// @exception Exception
85  /// 引数 slotCount にPWM出力スロット数より大きい値を指定し、
86  /// かつ引数 duties の要素数もPWM出力スロット数より大きい場合。
87  /// PWM出力スロット数はメンバ関数 #getSlotCount で取得できる。
88  ///
89  /// デューティ値を可変長配列型で指定するオーバロード。
90  /// 挙動は
91  /// setDuties(const std::uint8_t*, std::size_t, bool)
92  /// オーバロードに準ずる。
94  const std::vector<std::uint8_t>& duties,
95  std::size_t slotCount = SIZE_MAX,
96  bool forceUpdate = false)
97  {
98  return
99  this->setDuties(
100  duties.data(),
101  std::min(slotCount, duties.size()),
102  forceUpdate);
103  }
104 
105  /// @brief 出力するデューティ値配列を設定する。
106  /// @tparam Count デューティ値配列の要素数。
107  /// @param[in] duties 出力するデューティ値配列。
108  /// @param[in] forceUpdate
109  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
110  /// @return 要求状態値。更新不要ならば無効値。
111  ///
112  /// @exception Exception
113  /// 引数 duties の要素数がPWM出力スロット数より大きい場合。
114  /// PWM出力スロット数はメンバ関数 #getSlotCount で取得できる。
115  ///
116  /// デューティ値を固定長配列型で指定するオーバロード。
117  /// 挙動は
118  /// setDuties(const std::uint8_t*, std::size_t, bool)
119  /// オーバロードに準ずる。
120  template<std::size_t Count>
121  RequestState setDuties(const std::uint8_t (&duties)[Count], bool forceUpdate = false)
122  {
123  return this->setDuties(duties, Count, forceUpdate);
124  }
125 
126  /// @brief 全デューティ値を 0 に設定する。
127  /// @param[in] forceUpdate
128  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
129  /// @return 要求状態値。更新不要ならば無効値。
130  ///
131  /// メンバ関数 #setDuties に全要素が 0 のデューティ値配列を渡すことと同義。
132  RequestState resetDuties(bool forceUpdate = false);
133 
134  /// @brief 出力するデューティ値を設定する。
135  /// @param[in] slotIndex スロットインデックス。
136  /// @param[in] duty デューティ値。
137  /// @param[in] forceUpdate
138  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
139  /// @return 要求状態値。更新不要ならば無効値。
140  ///
141  /// @exception Exception
142  /// 引数 slotIndex にPWM出力スロット数以上の値を指定した場合。
143  /// PWM出力スロット数はメンバ関数 #getSlotCount で取得できる。
144  ///
145  /// この関数を呼び出しても即座に出力されるわけではない。
146  /// 反映状況は戻り値の要求状態値で確認できる。
147  ///
148  /// 引数 forceUpdate が false かつ値が変化しない場合、更新不要と判断される。
149  /// その場合、戻り値の要求状態値は無効値となる。
150  ///
151  /// この関数を同一フレーム内で同一スロットインデックスに対して複数回呼びだした場合、
152  /// 最後の呼び出し時に指定した値のみが反映される。
153  /// 異なるスロットインデックスに対して呼びだした場合はマージされる。
155  std::size_t slotIndex,
156  std::uint8_t duty,
157  bool forceUpdate = false);
158 
159  /// @brief 現在設定されているデューティ値配列を取得する。
160  /// @return 現在設定されているデューティ値配列。
161  ///
162  /// 現在ライブラリ内で保持しているデューティ値配列を返す。
163  /// 起動直後などは、実デバイスにこの値が設定されているとは限らない。
164  const std::uint8_t* getCurrentDuties() const;
165 
166  /// @brief 現在設定されているデューティ値を取得する。
167  /// @param[in] slotIndex スロットインデックス。
168  /// @return 現在設定されているデューティ値。
169  ///
170  /// @exception Exception
171  /// 引数 slotIndex にPWM出力スロット数以上の値を指定した場合。
172  /// PWM出力スロット数はメンバ関数 #getSlotCount で取得できる。
173  ///
174  /// 現在ライブラリ内で保持しているデューティ値を返す。
175  /// 起動直後などは、実デバイスにこの値が設定されているとは限らない。
176  std::uint8_t getCurrentDuty(std::size_t slotIndex) const;
177 
178  private:
179  std::size_t _nodeIndex; ///< ノードインデックス。
180 
181  private:
182  // コピー禁止
183  UsbIOPwmOutput(const UsbIOPwmOutput&); // 宣言のみ
184  UsbIOPwmOutput& operator=(const UsbIOPwmOutput&); // 宣言のみ
185  };
186 
187 /// @}
188 } // namespace amdaemon
189 
190 #endif // AMDAEMON_USBIOPWMOUTPUT_H
USB I/O のPWM出力処理を行うクラス。
Definition: UsbIOPwmOutput.h:36
UsbIOPwmOutput(InnerIndexHolder)
コンストラクタ。
const std::uint8_t * getCurrentDuties() const
現在設定されているデューティ値配列を取得する。
Daemonプロセスへの処理要求状態を保持するクラス。
Definition: RequestState.h:37
RequestState setDuty(std::size_t slotIndex, std::uint8_t duty, bool forceUpdate=false)
出力するデューティ値を設定する。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
RequestState setDuties(const std::vector< std::uint8_t > &duties, std::size_t slotCount=SIZE_MAX, bool forceUpdate=false)
出力するデューティ値配列を設定する。
Definition: UsbIOPwmOutput.h:93
Daemonプロセスへの処理要求状態を保持するクラス RequestState のヘッダ。
std::uint8_t getCurrentDuty(std::size_t slotIndex) const
現在設定されているデューティ値を取得する。
RequestState setDuties(const std::uint8_t(&duties)[Count], bool forceUpdate=false)
出力するデューティ値配列を設定する。
Definition: UsbIOPwmOutput.h:121
std::size_t getSlotCount() const
PWM出力スロット数を取得する。
RequestState setDuties(const std::uint8_t *duties, std::size_t slotCount, bool forceUpdate=false)
出力するデューティ値配列を設定する。
RequestState resetDuties(bool forceUpdate=false)
全デューティ値を 0 に設定する。