240 lines
7.7 KiB
C
240 lines
7.7 KiB
C
/**
|
|
**************************************************************************
|
|
* @file audio_desc.h
|
|
* @version v2.0.2
|
|
* @date 2021-11-26
|
|
* @brief usb audio descriptor header file
|
|
**************************************************************************
|
|
* Copyright notice & Disclaimer
|
|
*
|
|
* The software Board Support Package (BSP) that is made available to
|
|
* download from Artery official website is the copyrighted work of Artery.
|
|
* Artery authorizes customers to use, copy, and distribute the BSP
|
|
* software and its related documentation for the purpose of design and
|
|
* development in conjunction with Artery microcontrollers. Use of the
|
|
* software is governed by this copyright notice and the following disclaimer.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
|
|
* GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
|
|
* TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
|
|
* STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
|
|
* INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
|
|
*
|
|
**************************************************************************
|
|
*/
|
|
|
|
/* define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef __AUDIO_DESC_H
|
|
#define __AUDIO_DESC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "audio_class.h"
|
|
#include "usbd_core.h"
|
|
#include "audio_conf.h"
|
|
|
|
/** @addtogroup AT32F435_437_middlewares_usbd_class
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup USB_audio_desc
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup USB_audio_desc_definition
|
|
* @{
|
|
*/
|
|
|
|
#define BCD_NUM 0x0100
|
|
|
|
#define USBD_VENDOR_ID 0x2E3C
|
|
#define USBD_PRODUCT_ID 0x5730
|
|
|
|
#define USBD_SIZ_STRING_LANGID 4
|
|
#define USBD_SIZ_STRING_SERIAL 0x1A
|
|
|
|
#define USBD_DESC_MANUFACTURER_STRING "Artery"
|
|
#define USBD_DESC_PRODUCT_STRING "AT32 Audio"
|
|
#define USBD_DESC_CONFIGURATION_STRING "Audio Config"
|
|
#define USBD_DESC_INTERFACE_STRING "Audio Interface"
|
|
|
|
/**
|
|
* @brief audio interface subclass codes
|
|
*/
|
|
#define AUDIO_SUBCLASS_UNDEFINED 0x00
|
|
#define AUDIO_SUBCLASS_AUDIOCONTROL 0x01
|
|
#define AUDIO_SUBCLASS_AUDIOSTREAMING 0x02
|
|
#define AUDIO_SUBCLASS_MIDISTREMING 0x03
|
|
|
|
/**
|
|
* @brief audio class-specific descriptor types
|
|
*/
|
|
#define AUDIO_CS_INTERFACE 0x24
|
|
#define AUDIO_CS_ENDPOINT 0x25
|
|
#define AUDIO_CS_STRING 0x23
|
|
#define AUDIO_CS_CONFIGURATION 0x22
|
|
#define AUDIO_CS_DEVICE 0x21
|
|
#define AUDIO_CS_UNDEFINED 0x20
|
|
|
|
/**
|
|
* @brief audio interface protocol codes
|
|
*/
|
|
#define AUDIO_PROTOCOL_UNDEFINED 0x00
|
|
|
|
/**
|
|
* @brief audio class-specific ac interface descriptor subtypes
|
|
*/
|
|
#define AUDIO_AC_DESCRIPTOR_UNDEFINED 0x00
|
|
#define AUDIO_AC_HEADER 0x01
|
|
#define AUDIO_AC_INPUT_TERMINAL 0x02
|
|
#define AUDIO_AC_OUTPUT_TERMINAL 0x03
|
|
#define AUDIO_AC_MIXER_UNIT 0x04
|
|
#define AUDIO_AC_SELECTOR_UNIT 0x05
|
|
#define AUDIO_AC_FEATURE_UNIT 0x06
|
|
#define AUDIO_AC_PROCESSING_UNIT 0x07
|
|
#define AUDIO_AC_EXTENSION_UNIT 0x08
|
|
|
|
/**
|
|
* @brief audio class-specific as interface descriptor subtypes
|
|
*/
|
|
#define AUDIO_AS_DESCRIPTOR_UNDEFINED 0x00
|
|
#define AUDIO_AS_GENERAL 0x01
|
|
#define AUDIO_AS_FORMAT_TYPE 0x02
|
|
#define AUDIO_AS_FORMAT_SPECIFIC 0x03
|
|
|
|
/**
|
|
* @brief audio class-specific request codes
|
|
*/
|
|
#define AUDIO_REQUEST_CODE_UNDEFINED 0x00
|
|
#define AUDIO_REQ_SET_CUR 0x01
|
|
#define AUDIO_REQ_GET_CUR 0x81
|
|
#define AUDIO_REQ_SET_MIN 0x02
|
|
#define AUDIO_REQ_GET_MIN 0x82
|
|
#define AUDIO_REQ_SET_MAX 0x03
|
|
#define AUDIO_REQ_GET_MAX 0x83
|
|
#define AUDIO_REQ_SET_RES 0x04
|
|
#define AUDIO_REQ_GET_RES 0x84
|
|
#define AUDIO_REQ_SET_MEM 0x05
|
|
#define AUDIO_REQ_GET_MEM 0x85
|
|
#define AUDIO_REQ_GET_STAT 0xFF
|
|
|
|
/**
|
|
* @brief audio feature unit control selectors
|
|
*/
|
|
#define AUDIO_FU_CONTROL_UNDEFINED 0x00
|
|
#define AUDIO_FU_MUTE_CONTROL 0x01
|
|
#define AUDIO_FU_VOLUME_CONTROL 0x02
|
|
#define AUDIO_FU_BASS_CONTROL 0x03
|
|
#define AUDIO_FU_MID_CONTROL 0x04
|
|
#define AUDIO_FU_TREBLE_CONTROL 0x05
|
|
|
|
/**
|
|
* @brief audio terminal type
|
|
*/
|
|
#define AUDIO_TERMINAL_TYPE_UNDEFINED 0x0100
|
|
#define AUDIO_TERMINAL_TYPE_STREAMING 0x0101
|
|
#define AUDIO_TERMINAL_TYPE_VENDOR 0x01FF
|
|
#define AUDIO_INPUT_TERMINAL_UNDEFINED 0x0200
|
|
#define AUDIO_INPUT_TERMINAL_MICROPHONE 0x0201
|
|
#define AUDIO_OUTPUT_TERMINAL_UNDEFINED 0x0300
|
|
#define AUDIO_OUTPUT_TERMINAL_SPEAKER 0x0301
|
|
|
|
/**
|
|
* @brief audio format type 1
|
|
*/
|
|
#define AUDIO_FORMAT_TYPE_I 0x01
|
|
|
|
/**
|
|
* @brief audio interface config
|
|
*/
|
|
#define AUDIO_INTERFACE_NUM (AUDIO_SUPPORT_SPK + AUDIO_SUPPORT_MIC)
|
|
#define AUDIO_INTERFACE_LEN ((0x08 + AUDIO_INTERFACE_NUM) + AUDIO_INTERFACE_NUM * 0x1E)
|
|
#define AUDIO_MIC_INTERFACE 0x01
|
|
#define AUDIO_SPK_INTERFACE 0x02
|
|
|
|
/**
|
|
* @brief audio interface descriptor size define
|
|
*/
|
|
#define AUDIO_INPUT_TERMINAL_SIZE 0x0C
|
|
#define AUDIO_OUTPUT_TERMINAL_SIZE 0x09
|
|
#define AUDIO_FEATURE_UNIT_SIZE 0x09
|
|
|
|
/**
|
|
* @brief audio terminal id define
|
|
*/
|
|
#define AUDIO_MIC_INPUT_TERMINAL_ID 0x01
|
|
#define AUDIO_MIC_FEATURE_UNIT_ID 0x02
|
|
#define AUDIO_MIC_OUTPUT_TERMINAL_ID 0x03
|
|
#define AUDIO_SPK_INPUT_TERMINAL_ID 0x04
|
|
#define AUDIO_SPK_FEATURE_UNIT_ID 0x05
|
|
#define AUDIO_SPK_OUTPUT_TERMINAL_ID 0x06
|
|
|
|
/**
|
|
* @brief audio interface number
|
|
*/
|
|
#define AUDIO_MIC_INTERFACE_NUMBER 0x01
|
|
#if (AUDIO_SUPPORT_MIC == 1)
|
|
#define AUDIO_SPK_INTERFACE_NUMBER 0x02
|
|
#else
|
|
#define AUDIO_SPK_INTERFACE_NUMBER 0x01
|
|
#endif
|
|
|
|
/**
|
|
* @brief audio support freq
|
|
*/
|
|
#define AT32_AUDIO_FREQ_16K 16000
|
|
#define AT32_AUDIO_FREQ_48K 48000
|
|
|
|
/**
|
|
* @brief audio microphone freq and channel config
|
|
*/
|
|
#define AUDIO_MIC_FREQ_SIZE (AUDIO_SUPPORT_FREQ)
|
|
#define AUDIO_MIC_CHR AUDIO_MIC_CHANEL_NUM
|
|
#define AUDIO_MIC_BITW (AUDIO_MIC_DEFAULT_BITW)
|
|
|
|
/**
|
|
* @brief audio speaker freq and channel config
|
|
*/
|
|
#define AUDIO_SPK_FREQ_SIZE (AUDIO_SUPPORT_FREQ)
|
|
#define AUDIO_SPK_CHR AUDIO_SPK_CHANEL_NUM
|
|
#define AUDIO_SPK_BITW (AUDIO_SPK_DEFAULT_BITW)
|
|
|
|
#define HID_BINTERVAL_TIME 0x01
|
|
|
|
|
|
#define USBD_CONFIG_DESC_SIZE ( 0x12 + AUDIO_INTERFACE_LEN + \
|
|
+ (0x31 + AUDIO_SPK_FREQ_SIZE * 3) \
|
|
+ (0x31 + AUDIO_MIC_FREQ_SIZE * 3) \
|
|
+ (9 * AUDIO_SUPPORT_FEEDBACK) \
|
|
)
|
|
#define SAMPLE_FREQ(frq) (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
|
|
|
|
#define MCU_ID1 (0x1FFFF7E8)
|
|
#define MCU_ID2 (0x1FFFF7EC)
|
|
#define MCU_ID3 (0x1FFFF7F0)
|
|
|
|
extern uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN];
|
|
extern uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE];
|
|
extern usbd_desc_handler audio_desc_handler;
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|