/*---------------------------------------------------------------------------* Project: Revolution PMIC library File: pmic.h Copyright (C)2008-2009 Nintendo All Rights Reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Log: pmic.h,v $ Revision 1.24 2009/04/17 06:32:02 ozeki_kohei [Bug.531 fix] Removed PMICQuitAsync(). Revision 1.23 2009/04/10 07:13:53 aka Copied from SDK_3_2_DEV_BRANCH. Revision 1.22 2009/02/09 01:34:47 aka Revised Copyright. Revision 1.21 2009/01/07 04:49:50 ozeki_kohei Added PMICQuitAsync(). Revision 1.20 2008/12/22 08:01:41 aka Changed comments. Revision 1.19 2008/10/27 07:47:02 aka Changed returns of PMICExecEs(). Revision 1.18 2008/10/27 01:18:28 aka Change PMICExecEs(). Added PMICEsConference3_1, _2, _3, _4 and _5. Revision 1.17 2008/10/22 02:43:20 aka Removed some definitions for test. Revision 1.16 2008/10/15 02:16:52 aka Added PMICInitEx(). Revision 1.15 2008/09/13 04:30:44 aka Changed PMICExecEs(). Added 5 ES modes for trial. Revision 1.14 2008/08/28 05:24:20 aka Added PMICSet/GetEcReset(Async)(). Revision 1.13 2008/08/25 04:16:15 aka Removed PMIC_ERR_NOT_OPENED. Revision 1.12 2008/08/13 07:18:07 aka Added PMICRegisterErrorCallback(). Added PMIC_ERR_INVALID_DATA. Revision 1.11 2008/07/30 00:00:50 aka Added some debug funcs. Revision 1.10 2008/07/29 11:06:13 aka Removed PMICResetEsParam(). Changed from PMICSetEsParam() to PMICSetEsMode(). Changed from PMICGetEsParam() to PMICGetEsMode(). Revision 1.9 2008/07/21 06:17:20 aka Added PMICSetEsParam(). Added PMICGetEsParam(). Added PMICResetEsParam(). Added PMICIsReadOverwritten(). Added PMICIsWriteOverwritten(). Added PMICIsWriteEmpty(). Revision 1.8 2008/07/04 06:24:30 aka Removed PMICSetFirm(). Revision 1.7 2008/06/09 12:26:02 aka Added PMICSet/GetGain(Async)(). Revision 1.6 2008/04/25 02:43:30 aka Added PMICExecEs(). Revision 1.5 2008/04/23 06:47:42 aka Removed gain funcs. Revision 1.4 2008/04/23 06:26:25 aka Added Gain, SP and Level funcs. Revision 1.3 2008/04/16 08:05:13 aka Added PMICSet/GetFreq(Async)(). Revision 1.2 2008/01/22 04:59:34 aka modified comments. Revision 1.1 2008/01/22 02:43:20 aka initial check-in. $NoKeywords: $ *---------------------------------------------------------------------------*/ #ifndef __PMIC_H__ #define __PMIC_H__ #ifdef __cplusplus extern "C" { #endif #include /*---------------------------------------------------------------------------* definitions *---------------------------------------------------------------------------*/ // Working area size on MEM2 which P-MIC lib uses. #define PMIC_MEM2_WORK 17408 // 17KB #define PMIC_READ_BUFFER_MSEC (48) // 48msec #define PMIC_READ_BUFFER_SAMPLES (PMIC_READ_BUFFER_MSEC * 16) // @16KHz, @mono #define PMIC_READ_BUFFER_SIZE (PMIC_READ_BUFFER_SAMPLES * sizeof(s16)) // @s16 // // Returns // typedef enum { PMIC_ERR_OK = 0, // OK / no error PMIC_ERR_INVALID_ARGUMENTS = -1, // invalide arguments PMIC_ERR_NO_DEVICE = -2, // P-MIC is not inserted. PMIC_ERR_INVALID_DEVICE = -3, // (no use, but keep for compatibility). PMIC_ERR_INVALID_STATE = -4, // Can't execute on current state. PMIC_ERR_BUSY = -5, // Please re-call later. PMIC_ERR_USB_ERROR = -6, // Error is occured during enqueueing a USB request. PMIC_ERR_INVALID_DATA = -7, // Received data from P-MIC is invalid (may noise...). PMIC_ERR_FATAL = -100 // Unrecoverable error is occured. } PMIC_ERR; // // Arguments // // Sampling Frequency #define PMIC_FREQ_8KHZ 0x0000 #define PMIC_FREQ_11KHZ 0x0001 #define PMIC_FREQ_RESERVED 0x0002 #define PMIC_FREQ_16KHZ 0x0003 // Signal Processing State #define PMIC_SP_ON 0x0000 #define PMIC_SP_OFF 0x0001 // Echo Canceller Reset State #define PMIC_EC_RESET_ON 0x0001 #define PMIC_EC_RESET_OFF 0x0000 // Input Level #define PMIC_LEVEL_SIN 0x0000 #define PMIC_LEVEL_SOUT 0x0001 #define PMIC_LEVEL_RIN 0x0002 // Mic(ADC) Gain #define PMIC_GAIN_00dB 0x0000 #define PMIC_GAIN_15dB 0x0001 #define PMIC_GAIN_30dB 0x0002 #define PMIC_GAIN_36dB 0x0003 // // Callbacks // typedef void (*PMICCallback) ( PMIC_ERR result, void* arg ); // // Structures // typedef struct { f32 erl; f32 recv_vd_level; f32 send_loss_max; f32 send_loss_up; f32 send_loss_down; f32 recv_loss_max; f32 recv_loss_up; f32 recv_loss_down; } PMICEsMode; /*---------------------------------------------------------------------------* P-MIC fundamental functions *---------------------------------------------------------------------------*/ PMIC_ERR PMICInit ( void* mem2 ); PMIC_ERR PMICInitEx ( void* mem2, s32 size ); PMIC_ERR PMICQuit ( void ); PMIC_ERR PMICProbe ( void ); PMIC_ERR PMICOpenAsync ( PMICCallback cb, void* arg ); PMIC_ERR PMICOpen ( void ); PMIC_ERR PMICCloseAsync ( PMICCallback cb, void* arg ); PMIC_ERR PMICClose ( void ); PMIC_ERR PMICStartAsync ( PMICCallback cb, void* arg ); PMIC_ERR PMICStart ( void ); PMIC_ERR PMICStopAsync ( PMICCallback cb, void* arg ); PMIC_ERR PMICStop ( void ); /*---------------------------------------------------------------------------* P-MIC data transfer functions *---------------------------------------------------------------------------*/ s32 PMICGetReadableSamples ( void ); s32 PMICRead ( s16* buffer, s32 samples ); BOOL PMICIsReadOverwritten ( void ); s32 PMICGetWritableSamples ( void ); s32 PMICWrite ( s16* buffer, s32 samples ); BOOL PMICIsWriteOverwritten ( void ); BOOL PMICIsWriteEmpty ( void ); PMICCallback PMICRegisterErrorCallback ( PMICCallback cb, void* arg ); /*---------------------------------------------------------------------------* P-MIC data convert functions *---------------------------------------------------------------------------*/ s32 PMICChangeRate ( s16* input, s32 samples, u32 rate, s16* output, BOOL init ); /*---------------------------------------------------------------------------* P-MIC setting functions *---------------------------------------------------------------------------*/ //////////////// // Freq : Sampling Frequency Funcs //////////////// // SetFreq : Set Sampling Frequency PMIC_ERR PMICSetFreqAsync ( u16 freq, PMICCallback cb, void* arg ); PMIC_ERR PMICSetFreq ( u16 freq ); // GetFreq : Get Sampling Frequency PMIC_ERR PMICGetFreqAsync ( u16* freq, PMICCallback cb, void* arg ); PMIC_ERR PMICGetFreq ( u16* freq ); //////////////// // SP : Signal Processing Funcs //////////////// // SetSpState : Set Signal Processing State (ON or OFF) PMIC_ERR PMICSetSpStateAsync ( u16 state, PMICCallback cb, void* arg ); PMIC_ERR PMICSetSpState ( u16 state ); // GetSpState : Get Signal Processing State (ON or OFF) PMIC_ERR PMICGetSpStateAsync ( u16* state, PMICCallback cb, void* arg ); PMIC_ERR PMICGetSpState ( u16* state ); //////////////// // EcReset : Echo Canceller Resetting Funcs. //////////////// // SetEcReset : Set Echo Canceller Reset State (ON or OFF) PMIC_ERR PMICSetEcResetAsync ( u16 state, PMICCallback cb, void* arg ); PMIC_ERR PMICSetEcReset ( u16 state ); // GetEcReset : Get Echo Canceller Reset State (ON or OFF) PMIC_ERR PMICGetEcResetAsync ( u16* state, PMICCallback cb, void* arg ); PMIC_ERR PMICGetEcReset ( u16* state ); //////////////// // Level : Input Level Funcs //////////////// // GetLevel : Get Input Level PMIC_ERR PMICGetLevelAsync ( u16 addr, u16* level, PMICCallback cb, void* arg ); PMIC_ERR PMICGetLevel ( u16 addr, u16* level ); //////////////// // Gain : Mic(ADC) Gain Funcs //////////////// // SetGain : Set Mic(ADC) Gain PMIC_ERR PMICSetGainAsync ( u16 gain, PMICCallback cb, void* arg ); PMIC_ERR PMICSetGain ( u16 gain ); // GetGain : Get Mic(ADC) Gain PMIC_ERR PMICGetGainAsync ( u16* gain, PMICCallback cb, void* arg ); PMIC_ERR PMICGetGain ( u16* gain ); /*---------------------------------------------------------------------------* P-MIC utility (for VOIP) functions *---------------------------------------------------------------------------*/ // Echo Suppressor on Wii PMIC_ERR PMICExecEs ( s16* send, s16* recv, s32 samples, BOOL init, BOOL *vflag ); void PMICSetEsMode ( PMICEsMode* mode ); void PMICGetEsMode ( PMICEsMode* mode ); // pre-defined modes extern PMICEsMode PMICEsPhone; // for phone-mode extern PMICEsMode PMICEsConference2; // for conference-mode between 2 persons extern PMICEsMode PMICEsConference3; // for conference-mode between 3 persons extern PMICEsMode PMICEsConference3_1; // for conference-mode between 3 persons (deep loss than c3) extern PMICEsMode PMICEsConference3_2; // for conference-mode between 3 persons (deep loss than c3_1) extern PMICEsMode PMICEsConference3_3; // for conference-mode between 3 persons (fast decrease than c3) extern PMICEsMode PMICEsConference3_4; // for conference-mode between 3 persons (fast decrease than c3_1) extern PMICEsMode PMICEsConference3_5; // for conference-mode between 3 persons (fast decrease than c3_2) extern PMICEsMode PMICEsConference4; // for conference-mode between 4 persons #ifdef __cplusplus } #endif #endif // __PMIC_H__