1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     mic_Api.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 25385 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_MIC_CTR_MIC_API_H_
17 #define NN_MIC_CTR_MIC_API_H_
18 
19 /*! @file
20     @brief      MIC に関する API の宣言
21 */
22 
23 #include <nn/os.h>
24 #include <nn/mic/CTR/mic_Types.h>
25 
26 #define NN_MIC_AMP_GAIN_MAX              119   // 10.5dB
27 #define NN_MIC_AMP_GAIN_MIN                0   // 70.0dB
28 #define NN_MIC_BUFFER_ALIGNMENT_SIZE    4096
29 #define NN_MIC_BUFFER_ALIGNMENT_ADDRESS 4096
30 
31 namespace nn {
32 namespace mic {
33 namespace CTR {
34 
35     /*!
36     @brief マイクアンプの最大ゲインを表す定数です。119 (70.0dB) です。
37     */
38     const u8 AMP_GAIN_MAX = NN_MIC_AMP_GAIN_MAX;
39 
40     /*!
41     @brief マイクアンプの最大ゲインを表す定数です。0 (10.5dB) です。
42     */
43     const u8 AMP_GAIN_MIN = NN_MIC_AMP_GAIN_MIN;
44 
45     /*!
46     @brief SetBuffer で設定するメモリ領域のアドレスのアライメントを表す定数です。4096 Byte です。
47     */
48     const s32 BUFFER_ALIGNMENT_ADDRESS = NN_MIC_BUFFER_ALIGNMENT_ADDRESS;
49 
50     /*!
51     @brief SetBuffer で設定するメモリ領域のサイズのアライメントを表す定数です。4096 Byte です。
52     */
53     const s32 BUFFER_ALIGNMENT_SIZE = NN_MIC_BUFFER_ALIGNMENT_SIZE;
54 
55     /*!
56     @brief      MIC ライブラリの初期化を行い、マイクを使用可能な状態にします。
57 
58     @return     処理の結果が返ってきます。<BR>
59                   LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
60                   LEVEL_INFO:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_ALREADY_INITIALIZED ・・・ 既に初期化されています。<BR>
61                   LEVEL_STATUS:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_BUSY ・・・ 他のプロセスが使用中です。
62     */
63     Result Initialize();
64 
65     /*!
66     @brief      MIC ライブラリを終了します。
67 
68                 Finalize を呼ぶと、サンプリング中であればサンプリングを止め、
69                 マイクアンプのゲインは@ref nn::mic::CTR::AMP_GAIN_DEFAULT_VALUEに設定して、マイクの電源をOFFにします。
70 
71     @return     処理の結果が返ってきます。<BR>
72                   LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
73                   LEVEL_INFO:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_NOT_INITIALIZED ・・・ 初期化されていません。
74     */
75     Result Finalize();
76 
77     /*!
78       @brief        サンプリング結果を格納するメモリ領域を設定します。
79 
80                     アプリケーションで取得したメモリを設定してください。
81                     デバイスメモリは使用できません。
82 
83                     SetBuffer を複数回呼ぶことはできません。
84                     再度SetBuffer を呼ぶ場合は一度@ref nn::mic::CTR::ResetBuffer を呼ぶ必要があります。
85 
86                     指定するメモリ領域のサイズは4096Byte アライメントしたサイズを指定してください。
87                     指定するメモリ領域のアドレスは4096Byte アライメントしたアドレスを指定してください。
88                     また指定したメモリ領域の終端部分を管理領域用に4Byte マイクライブラリが使用します。
89                     終端4Byteを上書きするなどしないように気をつけてください。
90                     実際にサンプリング結果が保存されるバッファのサイズは@ref nn::mic::CTR::GetSamplingBufferSize で取得したサイズです。
91 
92       @param[in]    address  メモリブロックの先頭アドレスを指定します。
93       @param[in]    size     メモリ領域の大きさを指定します。
94       @return       処理の結果が返ってきます。<BR>
95                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
96                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_ALREADY_INITIALIZED ・・・ メモリ領域が既に設定されています。<BR>
97                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_MISALIGNED_SIZE ・・・ 指定したメモリ領域のサイズは4096Byte アライメントしたサイズになっていません。<BR>
98                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_MISALIGNED_ADDRESS ・・・ 指定したメモリ領域のアドレスが4096Byte アライメントしたアドレスになっていません。
99     */
100     Result SetBuffer( void* address, size_t size );
101 
102     /*!
103       @brief        @ref nn::mic::CTR::SetBuffer で設定したメモリ領域をマイクライブラリが使用しないように設定します。
104 
105                     ResetBufferを 実行するにはマイクのサンプリングを停止してから行ってください。
106 
107       @return       処理の結果が返ってきます。<BR>
108                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
109                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_NOT_INITIALIZED ・・・ メモリ領域が設定されていません。<BR>
110                       LEVEL_STATUS:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_BUSY ・・・ サンプリング中です。
111     */
112     Result ResetBuffer( );
113 
114     /*!
115       @brief        @ref nn::mic::CTR::SetBuffer で設定したメモリ領域内で、サンプリング結果が保存されるサイズを返します
116 
117                     @ref nn::mic::CTR::SetBuffer で設定したメモリ領域の0 Byte目から GetSamplingBufferSize で取得したサイズ - 1 Byte目までに
118                     サンプリング結果が保存されます。
119 
120       @param[out]   pSize  サンプリング結果を保存するサイズを返します。単位はByteです。
121       @return       処理の結果が返ってきます。<BR>
122                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
123                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_NOT_INITIALIZED ・・・ メモリ領域が設定されていません。
124     */
125     Result GetSamplingBufferSize(size_t* pSize);
126 
127     /*!
128       @brief        マイクの自動サンプリングを開始します。
129 
130                     既にマイクの自動サンプリングが開始されている場合は停止して、新たに開始します。
131 
132       @param[in]    type      サンプリング種別を指定します。
133       @param[in]    rate      サンプリング周波数を指定します。
134       @param[in]    offset    サンプリング結果を格納し始めるメモリ領域の先頭から位置。単位はByteで必ず2の倍数の位置を指定してください。
135       @param[in]    size      サンプリング結果を格納するメモリ領域上のサイズ。@ref nn::mic::CTR::GetSamplingBufferSize で取得したサイズ以下を指定してください。<BR>
136                               また必ず2の倍数のサイズを指定してください。
137       @param[in]    loop      size 分サンプリングした後にメモリ領域をループさせるか指定するフラグ。<BR>
138                               trueであればループして連続してサンプリングします。<BR>
139                               size 分サンプリングした後、offset の位置から引き続きサンプリングが行われます。<BR>
140                               falseであればsize 分サンプリングした後に自動的に止まります。
141       @return       処理の結果が返ってきます。<BR>
142                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。<BR>
143                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_NOT_INITIALIZED ・・・ メモリ領域が確保されていません。<BR>
144                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_MISALIGNED_SIZE ・・・ 指定したoffset またはsize が2の倍数のサイズになっていません。<BR>
145                       LEVEL_PERMANENT:SUMMARY_NOTHING_HAPPENED:MODULE_NN_MIC:DESCRIPTION_OUT_OF_MEMORY ・・・ 指定したoffset + size が確保したメモリ領域よりも大きいです。
146     */
147     Result StartSampling( SamplingType type, SamplingRate rate, s32 offset, size_t size, bool loop );
148 
149     /*!
150       @brief        マイクの自動サンプリングを停止します
151 
152       @return       処理の結果が返ってきます。<BR>
153                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
154     */
155     Result StopSampling( void );
156 
157     /*!
158       @brief        マイクの自動サンプリングにおけるサンプリングレートを変更します。
159 
160                     既にマイクの自動サンプリングが開始されている場合は停止して、新たに開始します。
161                     またマイクが停止している場合は、新たに開始します。
162 
163                     @ref StartSampling で設定したoffset とsize を使用してサンプリングを行います。
164                     既にサンプリングが行われている場合は、現在書き込んでいる位置からサンプリングが再開します。
165 
166       @param[in]    rate      サンプリング周波数を指定します。
167       @return       処理の結果が返ってきます。<BR>
168                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
169     */
170     Result AdjustSampling( SamplingRate rate );
171 
172     /*!
173       @brief        マイクのサンプリングが行われているかを判定します。
174 
175       @param[out]   pSampling  サンプリングが行われていれば true, そうでなければ false を返します。
176       @return       処理の結果が返ってきます。<BR>
177                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
178     */
179     Result IsSampling( bool* pSampling );
180 
181     /*!
182       @brief        最新のマイクサンプリング結果の格納されたアドレスを取得します。
183 
184       @param[out]   pAddress  最新のマイクサンプリング結果の格納されたアドレスです。
185       @return       処理の結果が返ってきます。<BR>
186                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
187     */
188     Result GetLastSamplingAddress( uptr* pAddress );
189 
190     /*!
191       @brief        マイクのバッファの飽和を検知するための手動リセットイベントを取得します。
192 
193                     @ref StartSampling で指定したsize のデータを書き込むと@ref nn::os::Event がシグナル状態になります。<BR>
194                     @ref StartSampling でloop をtrue に設定した場合は、またoffset 位置からサンプリングを行い、
195                     size 分のデータを書き込んだ状態で再度@ref nn::os::Event がシグナル状態になります。<BR>
196 
197                     手動リセットイベントですので、イベントがシグナル状態になっていて、
198                     かつ再度イベントを取得したい場合は、@ref nn::os::Event::ClearSignal を呼ぶ必要があります。
199 
200       @param[out]   pEvent  バッファの飽和時に起こされる手動リセットイベントです。
201       @return       処理の結果が返ってきます。<BR>
202                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
203     */
204     Result GetBufferFullEvent( nn::os::Event* pEvent );
205 
206     /*!
207       @brief        マイクアンプのゲインを設定します。
208 
209                     マイクアンプのゲインの初期値は
210                     @ref nn::mic::CTR::AMP_GAIN_DEFAULT_VALUE に設定されています。
211 
212       @param[in]    gain    マイクアンプのゲインを設定します。0 ~ 119 (10.5dB ~ 70.0dB)の範囲で指定します。
213       @return       処理の結果が返ってきます。<BR>
214                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
215     */
216     Result SetAmpGain( u8 gain );
217 
218     /*!
219       @brief        マイクアンプのゲインを取得します。
220 
221       @param[out]   pGain マイクアンプのゲインを取得します。0 ~ 119 (10.5dB ~ 70.0dB)の範囲で取得します。
222       @return       処理の結果が返ってきます。<BR>
223                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
224     */
225     Result GetAmpGain( u8* pGain );
226 
227     /*!
228       @brief        マイク電源のON/OFF設定を設定します。
229 
230                     マイク電源ON時や、スリープから復帰した直後は1秒間マイク入力が安定しないため
231                     強制的に無音にしています。
232 
233                     サンプリング種別ごとの無音値は@ref nn::mic::CTR::SAMPLING_TYPE_8BIT_SILENT_DATA 、
234                     @ref nn::mic::CTR::SAMPLING_TYPE_16BIT_SILENT_DATA 、
235                     @ref nn::mic::CTR::SAMPLING_TYPE_SIGNED_8BIT_SILENT_DATA 、
236                     @ref nn::mic::CTR::SAMPLING_TYPE_SIGNED_16BIT を参照してください。
237 
238       @param[in]    enable   trueであればマイク電源をONにします。falseであればマイク電源をOFFにします。
239       @return       処理の結果が返ってきます。<BR>
240                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
241     */
242     Result SetAmp( bool enable );
243 
244     /*!
245       @brief        マイク電源のON/OFF設定を取得します。
246 
247       @param[out]   pEnable  マイク電源がONであればtrueが返ります。マイク電源がOFFであればfalseが返ります。
248       @return       処理の結果が返ってきます。<BR>
249                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
250     */
251     Result GetAmp( bool* pEnable );
252 
253     /*!
254       @brief        ゲインとサンプリング種別に対応した、マイク入力あり判定禁止領域の上限と下限の値を取得します。
255                     この上限と下限の間の値を、マイク入力ありと判定することは避けてください。
256 
257       @param[out]   upper  判定禁止領域の上限値です。
258       @param[out]   lower  判定禁止領域の下限値です。
259       @param[in]    type   サンプリング種別を指定します。
260       @param[in]    gain   マイクアンプのゲインを設定します。0 ~ 119 (10.5dB ~ 70.0dB)の範囲で指定します。
261       @return       領域が正しく取得できれば true, そうでなければ false を返します。
262     */
263     bool GetForbiddenArea( s32* upper, s32* lower, SamplingType type, u8 gain );
264 
265     /*!
266       @brief        マイク入力データへ適用するローパスフィルタの設定を行います。
267 
268                     ローパスフィルタのカットオフ周波数は、マイクサンプリングレートの45パーセントです。
269                     SAMPLING_RATE_32730の場合はオリジナルデータがローパスフィルタ適用済みであるため
270                     本関数でローパスフィルタを適用したとしても効果はありません。
271 
272       @param[in]    enable   ローパスフィルタを有効にする場合trueを指定します。(デフォルトはfalseです)
273       @return       処理の結果が返ってきます。<BR>
274                       LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
275     */
276     Result SetLowPassFilter( bool enable );
277 
278 }
279 }
280 }
281 
282 #endif  // ifndef NN_MIC_CTR_MIC_API_H_
283