⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uacsys.h

📁 cortex-m0 LCD1602程序
💻 H
字号:
/****************************************************************
 *                                                              *
 * Copyright (c) Nuvoton Technology Corp. All rights reserved.  *
 *                                                              *
 ****************************************************************/
#ifndef __UAC_SYS_H__
#define __UAC_SYS_H__


#ifdef  __cplusplus
extern "C"
{
#endif

#define UAC_MAJOR_NUM	1
#define UAC_MINOR_NUM	0
#define UAC_BUILD_NUM	1

#define UAC_MICROPHONE  0
#define UAC_SPEAKER		1

// Define module version number.
_SYSINFRA_VERSION_DEF(UAC, UAC_MAJOR_NUM, UAC_MINOR_NUM, UAC_BUILD_NUM)

// E_UAC_SAMPLE_NOT_SUPPORT       Do not support the sample rate
// E_UAC_BUFFER_OVERRUN           Received data is more than buffer size
// E_UAC_CTRL_REG_TAB_FULL        Control register table is full
// E_UAC_INVALID_EP_NUM           EndPoint number error
// E_UAC_NULL_POINTER             Callback function is NULL
// E_UAC_UNDEFINE                 Undefined error
#define E_UAC_UNDEFINE            _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 0)
#define E_UAC_NULL_POINTER        _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 1)
#define E_UAC_BUFFER_OVERRUN      _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 2)
#define E_UAC_INVALID_EP_NUM      _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 3)
#define E_UAC_CTRL_REG_TAB_FULL   _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 4)
#define E_UAC_SAMPLE_NOT_SUPPORT  _SYSINFRA_ERRCODE(TRUE, MODULE_ID_UAC, 5)


#define PLAY_RATE       16000   /* The audo play sampling rate. The setting is 16KHz */
#define PLAY_CHANNELS   2

#define REC_RATE        16000   /* The record sampling rate. It is 16KHz */
#define REC_CHANNELS    1


/* Define the endpoint number for relative endpoints. 
   The relative endpoint event callback should be implemented if
   the endpoint number setting is changed */
#define CTRL_EP_NUM      0x00
#define ISO_IN_EP_NUM    0x01
#define ISO_OUT_EP_NUM   0x02


#define ISO_OUT_MXPLD   PLAY_RATE*PLAY_CHANNELS*2/1000
#define ISO_IN_MXPLD    REC_RATE*REC_CHANNELS*2/1000

#define REC_FEATURE_UNITID  0x05
#define PLAY_FEATURE_UNITID  0x06

#define	UAC_MAX_PACKET_SIZE_EP0		64

#define LEN_CONFIG_AND_SUBORDINATE 0xC0


#define UAC_STOP_AUDIO_RECORD		0
#define UAC_START_AUDIO_RECORD		1
#define UAC_PROCESSING_AUDIO_RECORD	2
#define UAC_BUSY_AUDIO_RECORD		3

//***************************************************
//      Audio Class-Specific Request Codes
//***************************************************
#define UAC_REQUEST_CODE_UNDEFINED      0x00
#define UAC_SET_CUR      0x01
#define UAC_GET_CUR      0x81
#define UAC_SET_MIN      0x02
#define UAC_GET_MIN      0x82
#define UAC_SET_MAX      0x03
#define UAC_GET_MAX      0x83
#define UAC_SET_RES      0x04
#define UAC_GET_RES      0x84
#define UAC_SET_MEM      0x05
#define UAC_GET_MEM      0x85
#define UAC_GET_STAT     0xFF

#define MUTE_CONTROL             0x01
#define VOLUME_CONTROL           0x02

    
typedef struct
{	
	uint8_t u8AlternativeSetting;
	uint8_t u8AudioState;
	uint8_t u8IsoOutPacketSize;
	uint8_t u8IsoOutToggle;
	
	uint8_t  u8RecMute;
	int16_t  i16RecVolume;
	int16_t  i16RecMaxVolume;
	int16_t  i16RecMinVolume;
	int16_t  i16RecResVolume;	


	uint8_t  u8PlayMute;
	int16_t  i16PlayVolumeL;
	int16_t  i16PlayVolumeR;
	int16_t  i16PlayMaxVolume;
	int16_t  i16PlayMinVolume;
	int16_t  i16PlayResVolume;	

    void * *device;

} S_UAC_DEVICE;

extern S_UAC_DEVICE g_UAC_sDevice;

	
typedef void (*UAC_DEVICE_ENABLE)(uint8_t u8Object, uint8_t u8State);
typedef void (*UAC_DEVICE_DISABLE)(uint8_t u8Object);
typedef void (*UAC_ISO_IN)(void);
typedef void (*UAC_ISO_OUT)(int16_t *pi16src, int16_t i16size);


uint32_t UAC_GetVersion(void);
int32_t UAC_Open(void * pVoid);
void UAC_Close(void);
void UAC_Reset(void * *pVoid);
int32_t UAC_IsCfgId(uint8_t u8ConfigureValue);
void UAC_SendOneAudioPacket(uint8_t *pbyAudioData, uint8_t u8AudioSize);
void UAC_Init(
	UAC_DEVICE_ENABLE   pfnDeviceEnable,
	UAC_DEVICE_DISABLE  pfnDeviceDisable,
	UAC_ISO_IN          pfnSendRecData,
    UAC_ISO_OUT         pfnGetPlayData
);

void UAC_CtrlSetupGetInterface(void * pVoid);
void UAC_CtrlSetupSetInterface(void * pVoid);
void UAC_CtrlSetupGetDescriptor(void * pVoid);
void UAC_CtrlDataInGetDescriptor(void * pVoid);
	
void UAC_ClassCtrlSetCurRequest(void * pVoid);
void UAC_ClassCtrlGetCurRequest(void * pVoid);
void UAC_ClassCtrlGetMinRequest(void * pVoid);
void UAC_ClassCtrlGetResRequest(void * pVoid);
void UAC_ClassCtrlGetMaxRequest(void * pVoid);
void UAC_ClassCtrlSetCurOutData(void * pVoid);
uint16_t UAC_GetIsoOutPackeSize(const uint8_t *u8Cfg);
int32_t UAC_GetRecVolume(void);
int32_t UAC_GetPlayVolume(int32_t bIsRight);

#ifdef  __cplusplus
}
#endif

#endif // __UAC_SYS_H__




































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -