mirror of
https://github.com/ArteryTek/AT32F403A_407_Firmware_Library.git
synced 2026-05-21 09:22:19 +00:00
update version to v2.0.6
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -190,11 +190,11 @@ usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup)
|
||||
}
|
||||
break;
|
||||
case USB_STD_REQ_GET_INTERFACE:
|
||||
audio_get_interface(pudev, setup);
|
||||
audio_get_interface(udev, setup);
|
||||
break;
|
||||
|
||||
case USB_STD_REQ_SET_INTERFACE:
|
||||
audio_set_interface(pudev, setup);
|
||||
audio_set_interface(udev, setup);
|
||||
usbd_ctrl_send_status(pudev);
|
||||
break;
|
||||
|
||||
@@ -302,7 +302,6 @@ usb_sts_type class_ept0_rx_handler(void *udev)
|
||||
usb_sts_type class_in_handler(void *udev, uint8_t ept_num)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
uint32_t len = 0;
|
||||
|
||||
/* ...user code...
|
||||
@@ -311,13 +310,13 @@ usb_sts_type class_in_handler(void *udev, uint8_t ept_num)
|
||||
if((ept_num & 0x7F) == (USBD_AUDIO_MIC_IN_EPT & 0x7F))
|
||||
{
|
||||
len = audio_codec_mic_get_data(audio_struct.audio_mic_data);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_MIC_IN_EPT, audio_struct.audio_mic_data, len);
|
||||
usbd_ept_send(udev, USBD_AUDIO_MIC_IN_EPT, audio_struct.audio_mic_data, len);
|
||||
}
|
||||
|
||||
else if((ept_num & 0x7F) == (USBD_AUDIO_FEEDBACK_EPT & 0x7F))
|
||||
{
|
||||
len = audio_codec_spk_feedback(audio_struct.audio_feed_back);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, len);
|
||||
usbd_ept_send(udev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, len);
|
||||
}
|
||||
|
||||
return status;
|
||||
@@ -411,22 +410,26 @@ void audio_req_get_cur(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
|
||||
{
|
||||
usbd_ctrl_send(pudev, &audio_struct.spk_mute, setup->wLength);
|
||||
audio_struct.g_audio_cur[0] = audio_struct.spk_mute;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.spk_volume, setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
|
||||
{
|
||||
usbd_ctrl_send(pudev, &audio_struct.mic_mute, setup->wLength);
|
||||
audio_struct.g_audio_cur[0] = audio_struct.mic_mute;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.mic_volume, setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -482,11 +485,13 @@ void audio_req_get_min(void *udev, usb_setup_type *setup)
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.spk_volume_limits[0], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[0];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.mic_volume_limits[0], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[0];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,11 +506,13 @@ void audio_req_get_max(void *udev, usb_setup_type *setup)
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.spk_volume_limits[1], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[1];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.mic_volume_limits[1], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[1];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -520,11 +527,13 @@ void audio_req_get_res(void *udev, usb_setup_type *setup)
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.spk_volume_limits[2], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[2];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&audio_struct.mic_volume_limits[2], setup->wLength);
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[2];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -544,8 +553,9 @@ void audio_set_interface(void *udev, usb_setup_type *setup)
|
||||
audio_codec_spk_alt_setting(audio_struct.spk_alt_setting);
|
||||
if(audio_struct.spk_alt_setting )
|
||||
{
|
||||
int len = audio_codec_spk_feedback(audio_struct.audio_feed_back);
|
||||
usbd_ept_recv(pudev, USBD_AUDIO_SPK_OUT_EPT, audio_struct.audio_spk_data, AUDIO_SPK_OUT_MAXPACKET_SIZE);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, 3);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, len);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio class file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -58,11 +58,11 @@ extern "C" {
|
||||
/**
|
||||
* @brief endpoint support max size
|
||||
*/
|
||||
#define AUDIO_REMAIN_SIZE 8
|
||||
#define AUDIO_REMAIN_SIZE 40
|
||||
#define AUDIO_MIC_IN_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_MIC_CHANEL_NUM * (AUDIO_MIC_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
|
||||
#define AUDIO_SPK_OUT_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_SPK_CHANEL_NUM * (AUDIO_SPK_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
|
||||
#define AUDIO_FEEDBACK_MAXPACKET_SIZE 0x3
|
||||
|
||||
#define FEEDBACK_REFRESH_TIME 0x8
|
||||
/**
|
||||
* @brief request type define
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_conf.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio config
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -78,7 +78,10 @@ usbd_desc_handler audio_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -361,8 +367,8 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
0x11, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HID_BINTERVAL_TIME, /* bInterval: interval for polling endpoint for data transfers */
|
||||
0x08, /* bRefresh: this field indicates the rate at which an iso syncronization
|
||||
1, /* bInterval: interval for polling endpoint for data transfers */
|
||||
FEEDBACK_REFRESH_TIME, /* bRefresh: this field indicates the rate at which an iso syncronization
|
||||
pipe provides new syncronization feedback data. this rate must be a power of
|
||||
2, therefore only the power is reported back and the range of this field is from
|
||||
1(2ms) to 9(512ms) */
|
||||
@@ -375,7 +381,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -386,7 +395,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
92
middlewares/usbd_class/audio_hid/audio_conf.h
Normal file
92
middlewares/usbd_class/audio_hid/audio_conf.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_conf.h
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio config
|
||||
**************************************************************************
|
||||
* 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_CONF_H
|
||||
#define __AUDIO_CONF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/** @addtogroup AT32F403A_407_middlewares_usbd_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup USB_audio_hid_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_device_audio_hid_config_definition
|
||||
* @{
|
||||
*/
|
||||
#define AUDIO_SUPPORT_SPK 1
|
||||
#define AUDIO_SUPPORT_MIC 1
|
||||
#define AUDIO_SUPPORT_FEEDBACK 1
|
||||
|
||||
#define AUDIO_SUPPORT_FREQ_16K 0
|
||||
#define AUDIO_SUPPORT_FREQ_48K 1
|
||||
|
||||
|
||||
#define AUDIO_SUPPORT_FREQ (AUDIO_SUPPORT_FREQ_16K + \
|
||||
AUDIO_SUPPORT_FREQ_48K \
|
||||
)
|
||||
|
||||
#define AUDIO_FREQ_16K 16000
|
||||
#define AUDIO_FREQ_48K 48000
|
||||
#define AUDIO_BITW_16 16
|
||||
|
||||
#define AUDIO_MIC_CHANEL_NUM 2
|
||||
#define AUDIO_MIC_DEFAULT_BITW AUDIO_BITW_16
|
||||
|
||||
#define AUDIO_SPK_CHANEL_NUM 2
|
||||
#define AUDIO_SPK_DEFAULT_BITW AUDIO_BITW_16
|
||||
|
||||
|
||||
#define AUDIO_SUPPORT_MAX_FREQ 48
|
||||
#define AUDIO_DEFAULT_FREQ AUDIO_FREQ_48K
|
||||
#define AUDIO_DEFAULT_BITW AUDIO_BITW_16
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
846
middlewares/usbd_class/audio_hid/audio_hid_class.c
Normal file
846
middlewares/usbd_class/audio_hid/audio_hid_class.c
Normal file
@@ -0,0 +1,846 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_class.c
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio class type
|
||||
**************************************************************************
|
||||
* 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.
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
#include "usbd_core.h"
|
||||
#include "audio_hid_class.h"
|
||||
#include "audio_hid_desc.h"
|
||||
#include "audio_codec.h"
|
||||
|
||||
/** @addtogroup AT32F403A_407_middlewares_usbd_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_class
|
||||
* @brief usb device class audio hid demo
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_class_private_functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
usb_sts_type class_init_handler(void *udev);
|
||||
usb_sts_type class_clear_handler(void *udev);
|
||||
usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup);
|
||||
usb_sts_type class_ept0_tx_handler(void *udev);
|
||||
usb_sts_type class_ept0_rx_handler(void *udev);
|
||||
usb_sts_type class_in_handler(void *udev, uint8_t ept_num);
|
||||
usb_sts_type class_out_handler(void *udev, uint8_t ept_num);
|
||||
usb_sts_type class_sof_handler(void *udev);
|
||||
usb_sts_type class_event_handler(void *udev, usbd_event_type event);
|
||||
|
||||
void audio_req_get_cur(void *udev, usb_setup_type *setup);
|
||||
void audio_req_set_cur(void *udev, usb_setup_type *setup);
|
||||
void audio_req_get_min(void *udev, usb_setup_type *setup);
|
||||
void audio_req_get_max(void *udev, usb_setup_type *setup);
|
||||
void audio_req_get_res(void *udev, usb_setup_type *setup);
|
||||
void audio_get_interface(void *udev, usb_setup_type *setup);
|
||||
void audio_set_interface(void *udev, usb_setup_type *setup);
|
||||
void usb_hid_buf_process(void *udev, uint8_t *report, uint16_t len);
|
||||
/* usb hid rx and tx buffer */
|
||||
static uint8_t g_rxhid_buff[USBD_OUT_MAXPACKET_SIZE];
|
||||
static uint8_t g_txhid_buff[USBD_IN_MAXPACKET_SIZE];
|
||||
|
||||
usb_audio_type audio_struct = {0, 0, 0, 0, 0, 0x1400, 0, 0, 0, {0x0000, 0x1400, 0x33}, {0x0000, 0x1400, 0x33}};
|
||||
/* custom hid static variable */
|
||||
static uint32_t hid_protocol = 0;
|
||||
static uint32_t hid_set_idle = 0;
|
||||
static uint32_t alt_setting = 0;
|
||||
static uint8_t hid_state;
|
||||
uint8_t hid_set_report[64];
|
||||
static __IO uint16_t audio_feedback_state = 0;
|
||||
static __IO uint8_t audio_spk_out_stage = 0;
|
||||
/* usb device class handler */
|
||||
usbd_class_handler audio_hid_class_handler =
|
||||
{
|
||||
class_init_handler,
|
||||
class_clear_handler,
|
||||
class_setup_handler,
|
||||
class_ept0_tx_handler,
|
||||
class_ept0_rx_handler,
|
||||
class_in_handler,
|
||||
class_out_handler,
|
||||
class_sof_handler,
|
||||
class_event_handler,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief initialize usb custom hid endpoint
|
||||
* @param udev: usb device core handler type
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_init_handler(void *udev)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
|
||||
/* enable microphone in endpoint double buffer mode */
|
||||
usbd_ept_dbuffer_enable(pudev, USBD_AUDIO_MIC_IN_EPT);
|
||||
|
||||
/* open microphone in endpoint */
|
||||
usbd_ept_open(pudev, USBD_AUDIO_MIC_IN_EPT, EPT_ISO_TYPE, AUDIO_MIC_IN_MAXPACKET_SIZE);
|
||||
|
||||
/* enable speaker out endpoint double buffer mode */
|
||||
usbd_ept_dbuffer_enable(pudev, USBD_AUDIO_SPK_OUT_EPT);
|
||||
|
||||
/* open speaker out endpoint */
|
||||
usbd_ept_open(pudev, USBD_AUDIO_SPK_OUT_EPT, EPT_ISO_TYPE, AUDIO_SPK_OUT_MAXPACKET_SIZE);
|
||||
#if AUDIO_SUPPORT_FEEDBACK
|
||||
/* enable speaker feedback endpoint double buffer mode */
|
||||
usbd_ept_dbuffer_enable(pudev, USBD_AUDIO_FEEDBACK_EPT);
|
||||
|
||||
/* open speaker feedback endpoint */
|
||||
usbd_ept_open(pudev, USBD_AUDIO_FEEDBACK_EPT, EPT_ISO_TYPE, AUDIO_FEEDBACK_MAXPACKET_SIZE);
|
||||
#endif
|
||||
/* start receive speaker out data */
|
||||
usbd_ept_recv(pudev, USBD_AUDIO_SPK_OUT_EPT, audio_struct.audio_spk_data, AUDIO_SPK_OUT_MAXPACKET_SIZE);
|
||||
|
||||
/*open hid endpoint */
|
||||
|
||||
/* open custom hid in endpoint */
|
||||
usbd_ept_open(pudev, USBD_HID_IN_EPT, EPT_INT_TYPE, USBD_IN_MAXPACKET_SIZE);
|
||||
|
||||
/* open custom hid out endpoint */
|
||||
usbd_ept_open(pudev, USBD_HID_OUT_EPT, EPT_INT_TYPE, USBD_OUT_MAXPACKET_SIZE);
|
||||
|
||||
/* set out endpoint to receive status */
|
||||
usbd_ept_recv(pudev, USBD_HID_OUT_EPT, g_rxhid_buff, USBD_OUT_MAXPACKET_SIZE);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief clear endpoint or other state
|
||||
* @param udev: usb device core handler type
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_clear_handler(void *udev)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
|
||||
/* close in endpoint */
|
||||
usbd_ept_close(pudev, USBD_AUDIO_MIC_IN_EPT);
|
||||
|
||||
#if AUDIO_SUPPORT_FEEDBACK
|
||||
/* close in endpoint */
|
||||
usbd_ept_close(pudev, USBD_AUDIO_FEEDBACK_EPT);
|
||||
#endif
|
||||
|
||||
/* close out endpoint */
|
||||
usbd_ept_close(pudev, USBD_AUDIO_SPK_OUT_EPT);
|
||||
|
||||
/* close custom hid in endpoint */
|
||||
usbd_ept_close(pudev, USBD_HID_IN_EPT);
|
||||
|
||||
/* close custom hid out endpoint */
|
||||
usbd_ept_close(pudev, USBD_HID_OUT_EPT);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device class setup request handler
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup packet
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_audio_setup_handler(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
uint16_t len;
|
||||
|
||||
switch(setup->bmRequestType & USB_REQ_TYPE_RESERVED)
|
||||
{
|
||||
/* class request */
|
||||
case USB_REQ_TYPE_CLASS:
|
||||
switch(setup->bRequest)
|
||||
{
|
||||
case AUDIO_REQ_GET_CUR:
|
||||
audio_req_get_cur(pudev, setup);
|
||||
break;
|
||||
|
||||
case AUDIO_REQ_SET_CUR:
|
||||
audio_req_set_cur(pudev, setup);
|
||||
break;
|
||||
|
||||
case AUDIO_REQ_GET_MIN:
|
||||
audio_req_get_min(pudev, setup);
|
||||
break;
|
||||
|
||||
case AUDIO_REQ_GET_MAX:
|
||||
audio_req_get_max(pudev, setup);
|
||||
break;
|
||||
|
||||
case AUDIO_REQ_GET_RES:
|
||||
audio_req_get_res(pudev, setup);
|
||||
break;
|
||||
|
||||
default:
|
||||
usbd_ctrl_unsupport(pudev);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
/* standard request */
|
||||
case USB_REQ_TYPE_STANDARD:
|
||||
switch(setup->bRequest)
|
||||
{
|
||||
case USB_STD_REQ_GET_DESCRIPTOR:
|
||||
if((setup->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE)
|
||||
{
|
||||
len = MIN(AUDIO_DESCRIPTOR_SIZE, setup->wLength);
|
||||
usbd_ctrl_send(pudev, g_usbd_configuration+18, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
usbd_ctrl_unsupport(pudev);
|
||||
}
|
||||
break;
|
||||
case USB_STD_REQ_GET_INTERFACE:
|
||||
audio_get_interface(udev, setup);
|
||||
break;
|
||||
|
||||
case USB_STD_REQ_SET_INTERFACE:
|
||||
audio_set_interface(udev, setup);
|
||||
usbd_ctrl_send_status(pudev);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
usbd_ctrl_unsupport(pudev);
|
||||
break;
|
||||
}
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device class setup request handler
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup packet
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_hid_setup_handler(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
uint16_t len;
|
||||
uint8_t *buf;
|
||||
|
||||
switch(setup->bmRequestType & USB_REQ_TYPE_RESERVED)
|
||||
{
|
||||
/* class request */
|
||||
case USB_REQ_TYPE_CLASS:
|
||||
switch(setup->bRequest)
|
||||
{
|
||||
case HID_REQ_SET_PROTOCOL:
|
||||
hid_protocol = (uint8_t)setup->wValue;
|
||||
break;
|
||||
case HID_REQ_GET_PROTOCOL:
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&hid_protocol, 1);
|
||||
break;
|
||||
case HID_REQ_SET_IDLE:
|
||||
hid_set_idle = (uint8_t)(setup->wValue >> 8);
|
||||
break;
|
||||
case HID_REQ_GET_IDLE:
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&hid_set_idle, 1);
|
||||
break;
|
||||
case HID_REQ_SET_REPORT:
|
||||
hid_state = HID_REQ_SET_REPORT;
|
||||
usbd_ctrl_recv(pudev, hid_set_report, setup->wLength);
|
||||
break;
|
||||
default:
|
||||
usbd_ctrl_unsupport(pudev);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
/* standard request */
|
||||
case USB_REQ_TYPE_STANDARD:
|
||||
switch(setup->bRequest)
|
||||
{
|
||||
case USB_STD_REQ_GET_DESCRIPTOR:
|
||||
if(setup->wValue >> 8 == HID_REPORT_DESC)
|
||||
{
|
||||
len = MIN(USBD_HID_SIZ_REPORT_DESC, setup->wLength);
|
||||
buf = (uint8_t *)g_usbd_hid_report;
|
||||
}
|
||||
else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE)
|
||||
{
|
||||
len = MIN(9, setup->wLength);
|
||||
buf = (uint8_t *)g_hid_usb_desc;
|
||||
}
|
||||
usbd_ctrl_send(pudev, (uint8_t *)buf, len);
|
||||
break;
|
||||
case USB_STD_REQ_GET_INTERFACE:
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&alt_setting, 1);
|
||||
break;
|
||||
case USB_STD_REQ_SET_INTERFACE:
|
||||
alt_setting = setup->wValue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
usbd_ctrl_unsupport(pudev);
|
||||
break;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
/**
|
||||
* @brief usb device class setup request handler
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup packet
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
switch(setup->bmRequestType & USB_REQ_RECIPIENT_MASK)
|
||||
{
|
||||
case USB_REQ_RECIPIENT_INTERFACE:
|
||||
if(setup->wIndex == HID_INTERFACE_NUMBER)
|
||||
{
|
||||
class_hid_setup_handler(udev, setup);
|
||||
}
|
||||
else
|
||||
{
|
||||
class_audio_setup_handler(pudev, setup);
|
||||
}
|
||||
break;
|
||||
case USB_REQ_RECIPIENT_ENDPOINT:
|
||||
class_audio_setup_handler(pudev, setup);
|
||||
break;
|
||||
|
||||
}
|
||||
return status;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device endpoint 0 in status stage complete
|
||||
* @param udev: usb device core handler type
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_ept0_tx_handler(void *udev)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
|
||||
/* ...user code... */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device endpoint 0 out status stage complete
|
||||
* @param udev: usb device core handler type
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_ept0_rx_handler(void *udev)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
usb_setup_type *setup = &pudev->setup;
|
||||
uint32_t recv_len = usbd_get_recv_len(pudev, 0);
|
||||
|
||||
/* ...user code... */
|
||||
if(setup->wIndex == HID_INTERFACE_NUMBER)
|
||||
{
|
||||
if( hid_state == HID_REQ_SET_REPORT)
|
||||
{
|
||||
/* hid buffer process */
|
||||
usb_hid_buf_process(udev, hid_set_report, recv_len);
|
||||
hid_state = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ...user code... */
|
||||
if( audio_struct.audio_cmd == AUDIO_REQ_SET_CUR)
|
||||
{
|
||||
/* class process */
|
||||
switch(audio_struct.request_no)
|
||||
{
|
||||
case AUDIO_VOLUME_CONTROL:
|
||||
if(audio_struct.interface == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
audio_struct.spk_volume = (uint16_t)(audio_struct.g_audio_cur[0] |
|
||||
(audio_struct.g_audio_cur[1] << 8));
|
||||
/* set volume */
|
||||
audio_codec_set_spk_volume(audio_struct.spk_volume*100/audio_struct.spk_volume_limits[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio_struct.mic_volume = (uint16_t)(audio_struct.g_audio_cur[0] |
|
||||
(audio_struct.g_audio_cur[1] << 8));
|
||||
|
||||
audio_codec_set_mic_volume(audio_struct.mic_volume*256/audio_struct.mic_volume_limits[1]);
|
||||
}
|
||||
break;
|
||||
case AUDIO_MUTE_CONTROL:
|
||||
if(audio_struct.interface == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
audio_struct.spk_mute = audio_struct.g_audio_cur[0];
|
||||
audio_codec_set_spk_mute(audio_struct.spk_mute);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio_struct.mic_mute = audio_struct.g_audio_cur[0];
|
||||
audio_codec_set_mic_mute(audio_struct.mic_mute);
|
||||
}
|
||||
|
||||
break;
|
||||
case AUDIO_FREQ_SET_CONTROL:
|
||||
if(audio_struct.enpd == USBD_AUDIO_MIC_IN_EPT)
|
||||
{
|
||||
audio_struct.mic_freq = (audio_struct.g_audio_cur[0] |
|
||||
(audio_struct.g_audio_cur[1] << 8) |
|
||||
(audio_struct.g_audio_cur[2] << 16));
|
||||
audio_codec_set_mic_freq(audio_struct.mic_freq);
|
||||
}
|
||||
else
|
||||
{
|
||||
audio_struct.spk_freq = (audio_struct.g_audio_cur[0] |
|
||||
(audio_struct.g_audio_cur[1] << 8) |
|
||||
(audio_struct.g_audio_cur[2] << 16));
|
||||
audio_codec_set_spk_freq(audio_struct.spk_freq);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device transmision complete handler
|
||||
* @param udev: usb device core handler type
|
||||
* @param ept_num: endpoint number
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_in_handler(void *udev, uint8_t ept_num)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
uint32_t len = 0;
|
||||
|
||||
/* ...user code...
|
||||
trans next packet data
|
||||
*/
|
||||
if((ept_num & 0x7F) == (USBD_AUDIO_MIC_IN_EPT & 0x7F))
|
||||
{
|
||||
len = audio_codec_mic_get_data(audio_struct.audio_mic_data);
|
||||
usbd_ept_send(udev, USBD_AUDIO_MIC_IN_EPT, audio_struct.audio_mic_data, len);
|
||||
}
|
||||
#if AUDIO_SUPPORT_FEEDBACK
|
||||
else if((ept_num & 0x7F) == (USBD_AUDIO_FEEDBACK_EPT & 0x7F))
|
||||
{
|
||||
len = audio_codec_spk_feedback(audio_struct.audio_feed_back);
|
||||
usbd_ept_send(udev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, len);
|
||||
}
|
||||
#endif
|
||||
else if((ept_num & 0x7F) == (USBD_HID_IN_EPT & 0x7F))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device endpoint receive data
|
||||
* @param udev: usb device core handler type
|
||||
* @param ept_num: endpoint number
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_out_handler(void *udev, uint8_t ept_num)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
uint16_t g_rxlen;
|
||||
|
||||
/* get endpoint receive data length */
|
||||
g_rxlen = usbd_get_recv_len(pudev, ept_num);
|
||||
|
||||
if((ept_num & 0x7F) == (USBD_AUDIO_SPK_OUT_EPT & 0x7F))
|
||||
{
|
||||
/* speaker data*/
|
||||
audio_codec_spk_fifo_write(audio_struct.audio_spk_data, g_rxlen);
|
||||
|
||||
/* get next data */
|
||||
usbd_ept_recv(pudev, USBD_AUDIO_SPK_OUT_EPT, audio_struct.audio_spk_data, AUDIO_SPK_OUT_MAXPACKET_SIZE);
|
||||
}
|
||||
else if((ept_num & 0x7F) == (USBD_HID_OUT_EPT & 0x7F))
|
||||
{
|
||||
/* hid buffer process */
|
||||
usb_hid_buf_process(udev, g_rxhid_buff, g_rxlen);
|
||||
|
||||
/* start receive next packet */
|
||||
usbd_ept_recv(pudev, USBD_HID_OUT_EPT, g_rxhid_buff, USBD_OUT_MAXPACKET_SIZE);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device sof handler
|
||||
* @param udev: usb device core handler type
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_sof_handler(void *udev)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
|
||||
/* ...user code... */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device event handler
|
||||
* @param udev: usb device core handler type
|
||||
* @param event: usb device event
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_event_handler(void *udev, usbd_event_type event)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
switch(event)
|
||||
{
|
||||
case USBD_RESET_EVENT:
|
||||
|
||||
/* ...user code... */
|
||||
|
||||
break;
|
||||
case USBD_SUSPEND_EVENT:
|
||||
audio_struct.spk_alt_setting = 0;
|
||||
audio_codec_spk_alt_setting(audio_struct.spk_alt_setting);
|
||||
audio_struct.mic_alt_setting = 0;
|
||||
audio_codec_mic_alt_setting(audio_struct.spk_alt_setting);
|
||||
/* ...user code... */
|
||||
|
||||
break;
|
||||
case USBD_WAKEUP_EVENT:
|
||||
/* ...user code... */
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio request get cur
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_req_get_cur(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
|
||||
{
|
||||
audio_struct.g_audio_cur[0] = audio_struct.spk_mute;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
|
||||
{
|
||||
audio_struct.g_audio_cur[0] = audio_struct.mic_mute;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume;
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio request set cur
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_req_set_cur(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(setup->wLength > 0)
|
||||
{
|
||||
usbd_ctrl_recv(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
|
||||
audio_struct.audio_cmd = AUDIO_REQ_SET_CUR;
|
||||
audio_struct.audio_cmd_len = setup->wLength;
|
||||
|
||||
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
|
||||
{
|
||||
case AUDIO_REQ_CONTROL_INTERFACE:
|
||||
audio_struct.interface = HBYTE(setup->wIndex);
|
||||
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
|
||||
{
|
||||
audio_struct.request_no = AUDIO_MUTE_CONTROL;
|
||||
}
|
||||
else
|
||||
{
|
||||
audio_struct.request_no = AUDIO_VOLUME_CONTROL;
|
||||
}
|
||||
break;
|
||||
case AUDIO_REQ_CONTROL_ENDPOINT:
|
||||
audio_struct.enpd = setup->wIndex;
|
||||
audio_struct.request_no = AUDIO_FREQ_SET_CONTROL;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio request get min
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_req_get_min(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[0];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[0];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio request get max
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_req_get_max(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[1];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[1];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio request get res
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_req_get_res(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.spk_volume_limits[2];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t *)audio_struct.g_audio_cur) = audio_struct.mic_volume_limits[2];
|
||||
usbd_ctrl_send(pudev, audio_struct.g_audio_cur, setup->wLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb audio set interface
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_set_interface(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
uint32_t len;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
if(LBYTE(setup->wIndex) == AUDIO_SPK_INTERFACE_NUMBER)
|
||||
{
|
||||
audio_struct.spk_alt_setting = setup->wValue;
|
||||
audio_codec_spk_alt_setting(audio_struct.spk_alt_setting);
|
||||
if(audio_struct.spk_alt_setting )
|
||||
{
|
||||
int len = audio_codec_spk_feedback(audio_struct.audio_feed_back);
|
||||
usbd_ept_recv(pudev, USBD_AUDIO_SPK_OUT_EPT, audio_struct.audio_spk_data, AUDIO_SPK_OUT_MAXPACKET_SIZE);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_FEEDBACK_EPT, audio_struct.audio_feed_back, len);
|
||||
}
|
||||
|
||||
}
|
||||
else if(LBYTE(setup->wIndex) == AUDIO_MIC_INTERFACE_NUMBER)
|
||||
{
|
||||
audio_struct.mic_alt_setting = setup->wValue;
|
||||
audio_codec_mic_alt_setting(audio_struct.mic_alt_setting);
|
||||
if(audio_struct.mic_alt_setting)
|
||||
{
|
||||
len = audio_codec_mic_get_data(audio_struct.audio_mic_data);
|
||||
usbd_ept_send(pudev, USBD_AUDIO_MIC_IN_EPT, audio_struct.audio_mic_data, len);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief usb audio get interface
|
||||
* @param udev: usb device core handler type
|
||||
* @param setup: setup class
|
||||
* @retval none
|
||||
*/
|
||||
void audio_get_interface(void *udev, usb_setup_type *setup)
|
||||
{
|
||||
if(LBYTE(setup->wIndex) == AUDIO_SPK_INTERFACE_NUMBER)
|
||||
{
|
||||
usbd_ctrl_send((usbd_core_type *)udev, (uint8_t *)&audio_struct.spk_alt_setting, 1);
|
||||
}
|
||||
else if(LBYTE(setup->wIndex) == AUDIO_MIC_INTERFACE_NUMBER)
|
||||
{
|
||||
usbd_ctrl_send((usbd_core_type *)udev, (uint8_t *)&audio_struct.mic_alt_setting, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb device class send report
|
||||
* @param udev: to the structure of usbd_core_type
|
||||
* @param report: report buffer
|
||||
* @param len: report length
|
||||
* @retval status of usb_sts_type
|
||||
*/
|
||||
usb_sts_type class_send_report(void *udev, uint8_t *report, uint16_t len)
|
||||
{
|
||||
usb_sts_type status = USB_OK;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
|
||||
if(usbd_connect_state_get(pudev) == USB_CONN_STATE_CONFIGURED)
|
||||
usbd_ept_send(pudev, USBD_HID_IN_EPT, report, len);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief usb device report function
|
||||
* @param udev: to the structure of usbd_core_type
|
||||
* @param report: report buffer
|
||||
* @param len: report length
|
||||
* @retval none
|
||||
*/
|
||||
void usb_hid_buf_process(void *udev, uint8_t *report, uint16_t len)
|
||||
{
|
||||
uint32_t i_index;
|
||||
usbd_core_type *pudev = (usbd_core_type *)udev;
|
||||
|
||||
switch(report[0])
|
||||
{
|
||||
case HID_REPORT_ID_2:
|
||||
if(g_rxhid_buff[1] == 0)
|
||||
{
|
||||
at32_led_off(LED2);
|
||||
}
|
||||
else
|
||||
{
|
||||
at32_led_on(LED2);
|
||||
}
|
||||
break;
|
||||
case HID_REPORT_ID_3:
|
||||
if(g_rxhid_buff[1] == 0)
|
||||
{
|
||||
at32_led_off(LED3);
|
||||
}
|
||||
else
|
||||
{
|
||||
at32_led_on(LED3);
|
||||
}
|
||||
break;
|
||||
case HID_REPORT_ID_4:
|
||||
if(g_rxhid_buff[1] == 0)
|
||||
{
|
||||
at32_led_off(LED4);
|
||||
}
|
||||
else
|
||||
{
|
||||
at32_led_on(LED4);
|
||||
}
|
||||
break;
|
||||
case HID_REPORT_ID_6:
|
||||
for(i_index = 0; i_index < len; i_index ++)
|
||||
{
|
||||
g_txhid_buff[i_index] = report[i_index];
|
||||
}
|
||||
usbd_ept_send(pudev, USBD_HID_IN_EPT, g_txhid_buff, len);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
170
middlewares/usbd_class/audio_hid/audio_hid_class.h
Normal file
170
middlewares/usbd_class/audio_hid/audio_hid_class.h
Normal file
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_class.h
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio class 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_CLASS_H
|
||||
#define __AUDIO_CLASS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "usb_std.h"
|
||||
#include "usbd_core.h"
|
||||
#include "audio_conf.h"
|
||||
|
||||
/** @addtogroup AT32F403A_407_middlewares_usbd_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup USB_audio_hid_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_class_definition
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief endpoint define
|
||||
*/
|
||||
#define USBD_AUDIO_MIC_IN_EPT 0x81
|
||||
#define USBD_AUDIO_SPK_OUT_EPT 0x02
|
||||
#define USBD_AUDIO_FEEDBACK_EPT 0x83
|
||||
|
||||
/**
|
||||
* @brief usb custom hid use endpoint define
|
||||
*/
|
||||
#define USBD_HID_IN_EPT 0x84
|
||||
#define USBD_HID_OUT_EPT 0x05
|
||||
|
||||
/**
|
||||
* @brief usb custom hid in and out max packet size define
|
||||
*/
|
||||
#define USBD_IN_MAXPACKET_SIZE 0x40
|
||||
#define USBD_OUT_MAXPACKET_SIZE 0x40
|
||||
|
||||
/**
|
||||
* @brief endpoint support max size
|
||||
*/
|
||||
#define AUDIO_REMAIN_SIZE 40
|
||||
#define AUDIO_MIC_IN_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_MIC_CHANEL_NUM * (AUDIO_MIC_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
|
||||
#define AUDIO_SPK_OUT_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_SPK_CHANEL_NUM * (AUDIO_SPK_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
|
||||
#define AUDIO_FEEDBACK_MAXPACKET_SIZE 0x3
|
||||
#define FEEDBACK_REFRESH_TIME 0x8
|
||||
/**
|
||||
* @brief request type define
|
||||
*/
|
||||
#define AUDIO_REQ_CONTROL_INTERFACE 0x01
|
||||
#define AUDIO_REQ_CONTROL_ENDPOINT 0x02
|
||||
#define AUDIO_REQ_CONTROL_MASK 0x03
|
||||
|
||||
/**
|
||||
* @brief audio set cur type define
|
||||
*/
|
||||
#define AUDIO_MUTE_CONTROL 0x01
|
||||
#define AUDIO_VOLUME_CONTROL 0x02
|
||||
#define AUDIO_FREQ_SET_CONTROL 0x03
|
||||
|
||||
/**
|
||||
* @brief audio descriptor type
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief audio set cur type define
|
||||
*/
|
||||
#define AUDIO_MUTE_CONTROL 0x01
|
||||
#define AUDIO_VOLUME_CONTROL 0x02
|
||||
#define AUDIO_FREQ_SET_CONTROL 0x03
|
||||
|
||||
/**
|
||||
* @brief audio descriptor type
|
||||
*/
|
||||
#define AUDIO_DESCRIPTOR_TYPE 0x21
|
||||
#define AUDIO_DESCRIPTOR_SIZE 0x09
|
||||
|
||||
/**
|
||||
* @brief usb custom hid class request code define
|
||||
*/
|
||||
#define HID_REQ_SET_PROTOCOL 0x0B
|
||||
#define HID_REQ_GET_PROTOCOL 0x03
|
||||
#define HID_REQ_SET_IDLE 0x0A
|
||||
#define HID_REQ_GET_IDLE 0x02
|
||||
#define HID_REQ_SET_REPORT 0x09
|
||||
#define HID_REQ_GET_REPORT 0x01
|
||||
#define HID_DESCRIPTOR_TYPE 0x21
|
||||
#define HID_REPORT_DESC 0x22
|
||||
|
||||
|
||||
/**
|
||||
* @brief usb audio control struct
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t enpd;
|
||||
uint8_t interface;
|
||||
uint8_t request_no;
|
||||
uint8_t spk_mute;
|
||||
uint8_t mic_mute;
|
||||
uint16_t spk_volume;
|
||||
uint16_t mic_volume;
|
||||
uint32_t spk_freq;
|
||||
uint32_t mic_freq;
|
||||
uint16_t spk_volume_limits[3]; /*[0] is mininum value, [1] is maxnum value, [2] is volume resolution */
|
||||
uint16_t mic_volume_limits[3]; /*[0] is mininum value, [1] is maxnum value, [2] is volume resolution */
|
||||
|
||||
uint8_t audio_cmd;
|
||||
uint32_t audio_cmd_len;
|
||||
uint32_t spk_alt_setting;
|
||||
uint32_t mic_alt_setting;
|
||||
uint8_t g_audio_cur[64];
|
||||
uint8_t audio_spk_data[AUDIO_SPK_OUT_MAXPACKET_SIZE];
|
||||
uint8_t audio_mic_data[AUDIO_MIC_IN_MAXPACKET_SIZE];
|
||||
uint8_t audio_feed_back[AUDIO_FEEDBACK_MAXPACKET_SIZE+1];
|
||||
}usb_audio_type;
|
||||
|
||||
extern usbd_class_handler audio_hid_class_handler;
|
||||
|
||||
usb_sts_type class_send_report(void *udev, uint8_t *report, uint16_t len);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
786
middlewares/usbd_class/audio_hid/audio_hid_desc.c
Normal file
786
middlewares/usbd_class/audio_hid/audio_hid_desc.c
Normal file
@@ -0,0 +1,786 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_desc.c
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb audio device descriptor
|
||||
**************************************************************************
|
||||
* 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.
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
#include "usb_std.h"
|
||||
#include "usbd_sdr.h"
|
||||
#include "usbd_core.h"
|
||||
#include "audio_hid_desc.h"
|
||||
|
||||
/** @addtogroup AT32F403A_407_middlewares_usbd_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_desc
|
||||
* @brief usb device audio hid descriptor
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_desc_private_functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
usbd_desc_t *get_device_descriptor(void);
|
||||
usbd_desc_t *get_device_qualifier(void);
|
||||
usbd_desc_t *get_device_configuration(void);
|
||||
usbd_desc_t *get_device_other_speed(void);
|
||||
usbd_desc_t *get_device_lang_id(void);
|
||||
usbd_desc_t *get_device_manufacturer_string(void);
|
||||
usbd_desc_t *get_device_product_string(void);
|
||||
usbd_desc_t *get_device_serial_string(void);
|
||||
usbd_desc_t *get_device_interface_string(void);
|
||||
usbd_desc_t *get_device_config_string(void);
|
||||
|
||||
uint16_t usbd_unicode_convert(uint8_t *string, uint8_t *unicode_buf);
|
||||
static void usbd_int_to_unicode (uint32_t value , uint8_t *pbuf , uint8_t len);
|
||||
static void get_serial_num(void);
|
||||
static uint8_t g_usbd_desc_buffer[256];
|
||||
|
||||
/**
|
||||
* @brief device descriptor handler structure
|
||||
*/
|
||||
usbd_desc_handler audio_hid_desc_handler =
|
||||
{
|
||||
get_device_descriptor,
|
||||
get_device_qualifier,
|
||||
get_device_configuration,
|
||||
get_device_other_speed,
|
||||
get_device_lang_id,
|
||||
get_device_manufacturer_string,
|
||||
get_device_product_string,
|
||||
get_device_serial_string,
|
||||
get_device_interface_string,
|
||||
get_device_config_string,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
0x00, /* bcdUSB */
|
||||
0x02,
|
||||
0x00, /* bDeviceClass */
|
||||
0x00, /* bDeviceSubClass */
|
||||
0x00, /* bDeviceProtocol */
|
||||
USB_MAX_EP0_SIZE, /* bMaxPacketSize */
|
||||
LBYTE(USBD_VENDOR_ID), /* idVendor */
|
||||
HBYTE(USBD_VENDOR_ID), /* idVendor */
|
||||
LBYTE(USBD_PRODUCT_ID), /* idProduct */
|
||||
HBYTE(USBD_PRODUCT_ID), /* idProduct */
|
||||
0x00, /* bcdDevice rel. 2.00 */
|
||||
0x02,
|
||||
USB_MFC_STRING, /* Index of manufacturer string */
|
||||
USB_PRODUCT_STRING, /* Index of product string */
|
||||
USB_SERIAL_STRING, /* Index of serial number string */
|
||||
0x01 /* bNumConfigurations */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
LBYTE(USBD_CONFIG_DESC_SIZE), /* wTotalLength: bytes returned */
|
||||
HBYTE(USBD_CONFIG_DESC_SIZE), /* wTotalLength: bytes returned */
|
||||
0x1 + AUDIO_INTERFACE_NUM + 0x1, /* bNumInterfaces: n interface */
|
||||
0x01, /* bConfigurationValue: configuration value */
|
||||
0x00, /* iConfiguration: index of string descriptor describing
|
||||
the configuration */
|
||||
0xC0, /* bmAttributes: self powered */
|
||||
0x32, /* MaxPower 100 mA: this current is used for detecting vbus */
|
||||
|
||||
USB_DEVICE_IF_DESC_LEN, /* bLength: interface descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: number of interface */
|
||||
0x00, /* bAlternateSetting: alternate set */
|
||||
0x00, /* bNumEndpoints: number of endpoints */
|
||||
USB_CLASS_CODE_AUDIO, /* bInterfaceClass: audio class code */
|
||||
AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass: audio control */
|
||||
AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol: undefined */
|
||||
0x00, /* iInterface: index of string descriptor */
|
||||
|
||||
0x08+AUDIO_INTERFACE_NUM, /* bLength: size of this descriptor, in bytes 8+n */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: cs interface descriptor type */
|
||||
AUDIO_AC_HEADER, /* bDescriptorSubtype: Header function Descriptor*/
|
||||
LBYTE(BCD_NUM),
|
||||
HBYTE(BCD_NUM), /* bcdCDC: audio device class specification release number */
|
||||
LBYTE(AUDIO_INTERFACE_LEN),
|
||||
HBYTE(AUDIO_INTERFACE_LEN), /* wTotalLength: total number of bytes returned for the class-specific audio control interface */
|
||||
AUDIO_INTERFACE_NUM, /* bInClollection: the number of audio streaming */
|
||||
#if (AUDIO_INTERFACE_NUM == 2) /* two interface */
|
||||
0x02,
|
||||
0x01,
|
||||
#else
|
||||
0x01,
|
||||
#endif
|
||||
|
||||
/* usb microphone config */
|
||||
#if (AUDIO_SUPPORT_MIC == 1)
|
||||
AUDIO_INPUT_TERMINAL_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_INPUT_TERMINAL, /* bDescriptorSubtype: input_terminal type*/
|
||||
AUDIO_MIC_INPUT_TERMINAL_ID, /* bTerminalID: id of this input terminal*/
|
||||
LBYTE(AUDIO_INPUT_TERMINAL_MICROPHONE),
|
||||
HBYTE(AUDIO_INPUT_TERMINAL_MICROPHONE),/* wTerminalType: terminal is microphone */
|
||||
0x00, /* bAssocTerminal: no association */
|
||||
AUDIO_MIC_CHR, /* bNrChannels: two channel */
|
||||
#if (AUDIO_MIC_CHR == 2)
|
||||
0x03, /* wChannelConfig: left front and right front */
|
||||
#endif
|
||||
#if (AUDIO_MIC_CHR == 1)
|
||||
0x00, /* wChannelConfig */
|
||||
#endif
|
||||
0x00, /* wChannelConfig */
|
||||
0x00, /* iChannelNames: unused */
|
||||
0x00, /* iTerminal: unused */
|
||||
|
||||
AUDIO_FEATURE_UNIT_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_FEATURE_UNIT, /* bDescriptorSubtype: feature unit type*/
|
||||
AUDIO_MIC_FEATURE_UNIT_ID, /* bUnitID: id of this feature unit */
|
||||
AUDIO_MIC_INPUT_TERMINAL_ID, /* bSourceID: from input terminal */
|
||||
0x01, /* bControlSize: 1 byte */
|
||||
0x01, /* bmaControls0: mute */
|
||||
0x02, /* bmaControls1: volume */
|
||||
0x00, /* iFeature: unused */
|
||||
|
||||
AUDIO_OUTPUT_TERMINAL_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_OUTPUT_TERMINAL, /* bDescriptorSubtype: output_terminal type*/
|
||||
AUDIO_MIC_OUTPUT_TERMINAL_ID, /* bTerminalID: id of this output terminal*/
|
||||
LBYTE(AUDIO_TERMINAL_TYPE_STREAMING),
|
||||
HBYTE(AUDIO_TERMINAL_TYPE_STREAMING), /* wTerminalType: usb streaming */
|
||||
0x00, /* bAssocTerminal: unused */
|
||||
AUDIO_MIC_FEATURE_UNIT_ID, /* bSourceID: from feature unit terminal */
|
||||
0x00, /* iTerminal: unused */
|
||||
#endif
|
||||
|
||||
#if (AUDIO_SUPPORT_SPK == 1)
|
||||
/* speaker config */
|
||||
AUDIO_INPUT_TERMINAL_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_INPUT_TERMINAL, /* bDescriptorSubtype: input_terminal type*/
|
||||
AUDIO_SPK_INPUT_TERMINAL_ID, /* bTerminalID: id of this input terminal*/
|
||||
LBYTE(AUDIO_TERMINAL_TYPE_STREAMING), /* wTerminalType: usb streaming */
|
||||
HBYTE(AUDIO_TERMINAL_TYPE_STREAMING), /* wTerminalType: usb streaming */
|
||||
0x00, /* bAssocTerminal: no association */
|
||||
AUDIO_SPK_CHR, /* bNrChannels: two channel */
|
||||
#if (AUDIO_SPK_CHR == 2)
|
||||
0x03, /* wChannelConfig: left front and right front */
|
||||
#endif
|
||||
#if (AUDIO_SPK_CHR == 1)
|
||||
0x00, /* wChannelConfig */
|
||||
#endif
|
||||
0x00, /* wChannelConfig */
|
||||
0x00, /* iChannelNames: unused */
|
||||
0x00, /* iTerminal: unused */
|
||||
|
||||
AUDIO_FEATURE_UNIT_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_FEATURE_UNIT, /* bDescriptorSubtype: feature unit type*/
|
||||
AUDIO_SPK_FEATURE_UNIT_ID, /* bUnitID: id of this feature unit */
|
||||
AUDIO_SPK_INPUT_TERMINAL_ID, /* bSourceID: from input terminal */
|
||||
0x01, /* bControlSize: 1 byte */
|
||||
0x01, /* bmaControls0: mute*/
|
||||
0x02, /* bmaControls1: volume */
|
||||
0x00, /* iFeature: unused */
|
||||
|
||||
AUDIO_OUTPUT_TERMINAL_SIZE, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: configuration */
|
||||
AUDIO_AC_OUTPUT_TERMINAL, /* bDescriptorSubtype: output_terminal type*/
|
||||
AUDIO_SPK_OUTPUT_TERMINAL_ID, /* bTerminalID: id of this output terminal*/
|
||||
LBYTE(AUDIO_OUTPUT_TERMINAL_SPEAKER), /* wTerminalType: usb speaker */
|
||||
HBYTE(AUDIO_OUTPUT_TERMINAL_SPEAKER), /* wTerminalType: usb speaker */
|
||||
0x00, /* bAssocTerminal: unused */
|
||||
AUDIO_SPK_FEATURE_UNIT_ID, /* bSourceID: from feature unit terminal */
|
||||
0x00, /* iTerminal: unused */
|
||||
#endif
|
||||
|
||||
#if (AUDIO_SUPPORT_MIC == 1)
|
||||
/* microphone interface */
|
||||
0x09, /* bLength: descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_MIC_INTERFACE_NUMBER, /* bInterfaceNumber: index of this interface */
|
||||
0x00, /* bAlternateSetting: index of this setting */
|
||||
0x00, /* bNumEndpoints: 0 endpoints */
|
||||
USB_CLASS_CODE_AUDIO, /* bInterfaceClass: audio */
|
||||
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubclass: audio streaming */
|
||||
0x00, /* bInterfaceProtocol: unused */
|
||||
0x00, /* iInterface: unused */
|
||||
|
||||
0x09, /* bLength: descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_MIC_INTERFACE_NUMBER, /* bInterfaceNumber: index of this interface */
|
||||
0x01, /* bAlternateSetting: index of this setting */
|
||||
0x01, /* bNumEndpoints: 1 endpoints */
|
||||
USB_CLASS_CODE_AUDIO, /* bInterfaceClass: audio */
|
||||
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubclass: audio streaming */
|
||||
0x00, /* bInterfaceProtocol: unused */
|
||||
0x00, /* iInterface: unused */
|
||||
|
||||
0x07, /* bLength: configuration descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_AS_GENERAL, /* bDescriptorSubtype: general sub type*/
|
||||
AUDIO_MIC_OUTPUT_TERMINAL_ID, /* bTerminalLink: unit id of the output terminal */
|
||||
0x01, /* bDelay: interface delay */
|
||||
0x01, /* wFormatTag: pcm format*/
|
||||
0x00, /* wFormatTag: pcm format*/
|
||||
|
||||
0x08 + AUDIO_MIC_FREQ_SIZE * 3, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_AS_FORMAT_TYPE, /* bDescriptorSubtype: format subtype */
|
||||
AUDIO_FORMAT_TYPE_I, /* bFormatType: format type 1 */
|
||||
AUDIO_MIC_CHR, /* bNrChannels: channel number */
|
||||
AUDIO_MIC_BITW / 8, /* bSubFrameSize: per audio subframe */
|
||||
AUDIO_MIC_BITW, /* bBitResolution: n bits per sample */
|
||||
AUDIO_MIC_FREQ_SIZE, /* bSamFreqType: n frequency supported */
|
||||
#if (AUDIO_SUPPORT_FREQ_16K == 1)
|
||||
SAMPLE_FREQ(AT32_AUDIO_FREQ_16K), /* tSamFreq: 16000hz */
|
||||
#endif
|
||||
#if (AUDIO_SUPPORT_FREQ_48K == 1)
|
||||
SAMPLE_FREQ(AT32_AUDIO_FREQ_48K), /* tSamFreq: 48000hz */
|
||||
#endif
|
||||
|
||||
0x09, /* bLength: size of endpoint descriptor in bytes */
|
||||
USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
|
||||
USBD_AUDIO_MIC_IN_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */
|
||||
USB_EPT_DESC_ISO | USB_ETP_DESC_ASYNC, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(AUDIO_MIC_IN_MAXPACKET_SIZE),
|
||||
HBYTE(AUDIO_MIC_IN_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HID_BINTERVAL_TIME, /* bInterval: interval for polling endpoint for data transfers */
|
||||
0x00, /* bRefresh: unused */
|
||||
0x00, /* bSynchAddress: unused */
|
||||
|
||||
0x07, /* bLength: size of endpoint descriptor in bytes */
|
||||
AUDIO_CS_ENDPOINT, /* bDescriptorType: cs endpoint descriptor type */
|
||||
0x01, /* bDescriptorSubtype: general subtype */
|
||||
0x01, /* bmAttributes */
|
||||
0x00, /* bLockDelayUnits: unused */
|
||||
0x00, /* wLockDelay: unused */
|
||||
0x00, /* wLockDelay: unused */
|
||||
#endif
|
||||
|
||||
#if (AUDIO_SUPPORT_SPK == 1)
|
||||
/* speaker interface */
|
||||
0x09, /* bLength: descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_SPK_INTERFACE_NUMBER, /* bInterfaceNumber: index of this interface */
|
||||
0x00, /* bAlternateSetting: index of this setting */
|
||||
0x00, /* bNumEndpoints: 0 endpoints */
|
||||
USB_CLASS_CODE_AUDIO, /* bInterfaceClass: audio */
|
||||
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubclass: audio streaming */
|
||||
0x00, /* bInterfaceProtocol: unused */
|
||||
0x00, /* iInterface: unused */
|
||||
|
||||
0x09, /* bLength: descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_SPK_INTERFACE_NUMBER, /* bInterfaceNumber: index of this interface */
|
||||
0x01, /* bAlternateSetting: index of this setting */
|
||||
0x01 + AUDIO_SUPPORT_FEEDBACK, /* bNumEndpoints: endpoints */
|
||||
USB_CLASS_CODE_AUDIO, /* bInterfaceClass: audio */
|
||||
AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubclass: audio streaming */
|
||||
0x00, /* bInterfaceProtocol: unused */
|
||||
0x00, /* iInterface: unused */
|
||||
|
||||
0x07, /* bLength: configuration descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_AS_GENERAL, /* bDescriptorSubtype: general sub type*/
|
||||
AUDIO_SPK_INPUT_TERMINAL_ID, /* bTerminalLink: unit id of the input terminal */
|
||||
0x01, /* bDelay: interface delay */
|
||||
0x01, /* wFormatTag: pcm format*/
|
||||
0x00, /* wFormatTag: pcm format*/
|
||||
|
||||
0x08 + AUDIO_SPK_FREQ_SIZE * 3, /* bLength: descriptor size */
|
||||
AUDIO_CS_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
AUDIO_AS_FORMAT_TYPE, /* bDescriptorSubtype: format subtype */
|
||||
AUDIO_FORMAT_TYPE_I, /* bFormatType: format type 1 */
|
||||
AUDIO_SPK_CHR, /* bNrChannels: channel number */
|
||||
AUDIO_SPK_BITW / 8, /* bSubFrameSize: per audio subframe */
|
||||
AUDIO_SPK_BITW, /* bBitResolution: n bits per sample */
|
||||
AUDIO_SPK_FREQ_SIZE, /* bSamFreqType: n frequency supported */
|
||||
#if (AUDIO_SUPPORT_FREQ_16K == 1)
|
||||
SAMPLE_FREQ(AT32_AUDIO_FREQ_16K), /* tSamFreq: 16000hz */
|
||||
#endif
|
||||
#if (AUDIO_SUPPORT_FREQ_48K == 1)
|
||||
SAMPLE_FREQ(AT32_AUDIO_FREQ_48K), /* tSamFreq: 48000hz */
|
||||
#endif
|
||||
|
||||
0x09, /* bLength: size of endpoint descriptor in bytes */
|
||||
USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
|
||||
USBD_AUDIO_SPK_OUT_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */
|
||||
USB_EPT_DESC_ISO | USB_ETP_DESC_ASYNC, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(AUDIO_SPK_OUT_MAXPACKET_SIZE),
|
||||
HBYTE(AUDIO_SPK_OUT_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HID_BINTERVAL_TIME, /* bInterval: interval for polling endpoint for data transfers */
|
||||
0x00, /* bRefresh: unused */
|
||||
#if (AUDIO_SUPPORT_FEEDBACK == 1)
|
||||
USBD_AUDIO_FEEDBACK_EPT, /* bSynchAddress: feedback endpoint */
|
||||
#else
|
||||
0x00, /* bSynchAddress: unused */
|
||||
#endif
|
||||
|
||||
0x07, /* bLength: size of endpoint descriptor in bytes */
|
||||
AUDIO_CS_ENDPOINT, /* bDescriptorType: cs endpoint descriptor type */
|
||||
0x01, /* bDescriptorSubtype: general subtype */
|
||||
0x01, /* bmAttributes */
|
||||
0x00, /* bLockDelayUnits: unused */
|
||||
0x00, /* wLockDelay: unused */
|
||||
0x00, /* wLockDelay: unused */
|
||||
|
||||
#if (AUDIO_SUPPORT_FEEDBACK == 1)
|
||||
0x09, /* bLength: size of endpoint descriptor in bytes */
|
||||
USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
|
||||
USBD_AUDIO_FEEDBACK_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */
|
||||
0x11, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
1, /* bInterval: interval for polling endpoint for data transfers */
|
||||
FEEDBACK_REFRESH_TIME, /* bRefresh: this field indicates the rate at which an iso syncronization
|
||||
pipe provides new syncronization feedback data. this rate must be a power of
|
||||
2, therefore only the power is reported back and the range of this field is from
|
||||
1(2ms) to 9(512ms) */
|
||||
0x00, /* bSynchAddress: 0x00*/
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
USB_DEVICE_IF_DESC_LEN, /* bLength: interface descriptor size */
|
||||
USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */
|
||||
HID_INTERFACE_NUMBER, /* bInterfaceNumber: number of interface */
|
||||
0x00, /* bAlternateSetting: alternate set */
|
||||
0x02, /* bNumEndpoints: number of endpoints */
|
||||
USB_CLASS_CODE_HID, /* bInterfaceClass: class code hid */
|
||||
0x00, /* bInterfaceSubClass: subclass code */
|
||||
0x00, /* bInterfaceProtocol: protocol code */
|
||||
0x00, /* iInterface: index of string descriptor */
|
||||
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
LBYTE(HID_BCD_NUM),
|
||||
HBYTE(HID_BCD_NUM), /* bcdHID: HID class specification release number */
|
||||
0x00, /* bCountryCode: hardware target conutry */
|
||||
0x01, /* bNumDescriptors: number of HID class descriptor to follow */
|
||||
HID_CLASS_DESC_REPORT, /* bDescriptorType: report descriptor type */
|
||||
LBYTE(sizeof(g_usbd_hid_report)),
|
||||
HBYTE(sizeof(g_usbd_hid_report)), /* wDescriptorLength: total length of reprot descriptor */
|
||||
|
||||
USB_DEVICE_EPT_LEN, /* bLength: size of endpoint descriptor in bytes */
|
||||
USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
|
||||
USBD_HID_IN_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */
|
||||
USB_EPT_DESC_INTERRUPT, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(USBD_IN_MAXPACKET_SIZE),
|
||||
HBYTE(USBD_IN_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HID_BINTERVAL_TIME, /* bInterval: interval for polling endpoint for data transfers */
|
||||
|
||||
USB_DEVICE_EPT_LEN, /* bLength: size of endpoint descriptor in bytes */
|
||||
USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
|
||||
USBD_HID_OUT_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */
|
||||
USB_EPT_DESC_INTERRUPT, /* bmAttributes: endpoint attributes */
|
||||
LBYTE(USBD_OUT_MAXPACKET_SIZE),
|
||||
HBYTE(USBD_OUT_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
|
||||
HID_BINTERVAL_TIME, /* bInterval: interval for polling endpoint for data transfers */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb hid report descriptor
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x06, 0xFF, 0x00, /* USAGE_PAGE(Vendor Page:0xFF00) */
|
||||
0x09, 0x01, /* USAGE (Demo Kit) */
|
||||
0xa1, 0x01, /* COLLECTION (Application) */
|
||||
/* 7 */
|
||||
|
||||
/* Led 2 */
|
||||
0x85, HID_REPORT_ID_2, /* REPORT_ID 2 */
|
||||
0x09, 0x02, /* USAGE (LED 2) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x3F, /* REPORT_COUNT (1) */
|
||||
0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */
|
||||
|
||||
0x85, 0x02, /* REPORT_ID (2) */
|
||||
0x09, 0x02, /* USAGE (LED 2) */
|
||||
0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */
|
||||
/* 27 */
|
||||
|
||||
/* Led 3 */
|
||||
0x85, HID_REPORT_ID_3, /* REPORT_ID (3) */
|
||||
0x09, 0x03, /* USAGE (LED 3) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x3F, /* REPORT_COUNT (1) */
|
||||
0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */
|
||||
|
||||
0x85, 0x03, /* REPORT_ID (3) */
|
||||
0x09, 0x03, /* USAGE (LED 3) */
|
||||
0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */
|
||||
/* 47 */
|
||||
|
||||
/* Led 4 */
|
||||
0x85, HID_REPORT_ID_4, /* REPORT_ID 4) */
|
||||
0x09, 0x04, /* USAGE (LED 4) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x3F, /* REPORT_COUNT (1) */
|
||||
0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */
|
||||
|
||||
0x85, 0x04, /* REPORT_ID (4) */
|
||||
0x09, 0x04, /* USAGE (LED 4) */
|
||||
0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */
|
||||
/* 67 */
|
||||
|
||||
/* key Push Button */
|
||||
0x85, HID_REPORT_ID_5, /* REPORT_ID (5) */
|
||||
0x09, 0x05, /* USAGE (Push Button) */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0x81, 0x82, /* INPUT (Data,Var,Abs,Vol) */
|
||||
|
||||
0x09, 0x05, /* USAGE (Push Button) */
|
||||
0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
0xb1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */
|
||||
|
||||
0x75, 0x07, /* REPORT_SIZE (7) */
|
||||
0x81, 0x83, /* INPUT (Cnst,Var,Abs,Vol) */
|
||||
0x85, 0x05, /* REPORT_ID (5) */
|
||||
|
||||
0x75, 0x07, /* REPORT_SIZE (7) */
|
||||
0xb1, 0x83, /* FEATURE (Cnst,Var,Abs,Vol) */
|
||||
/* 95 */
|
||||
|
||||
/* Data OUT */
|
||||
0x85, HID_REPORT_ID_6, /* REPORT_ID (0xF0) */
|
||||
0x09, 0x06, /* USAGE */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x26, 0x00,0xff, /* LOGICAL_MAXIMUM (255) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x3F, /* REPORT_COUNT (64) */
|
||||
0x91, 0x02, /* OUTPUT(Data,Var,Abs,Vol) */
|
||||
/* 110 */
|
||||
|
||||
/* Data IN */
|
||||
0x85, HID_REPORT_ID_6, /* REPORT_ID (0xF0) */
|
||||
0x09, 0x07, /* USAGE */
|
||||
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
0x26, 0x00,0xff, /* LOGICAL_MAXIMUM (255) */
|
||||
0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
0x95, 0x3F, /* REPORT_COUNT (64) */
|
||||
0x81, 0x82, /* INPUT(Data,Var,Abs,Vol) */
|
||||
|
||||
/* 125 */
|
||||
0xc0 /* END_COLLECTION */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
LBYTE(HID_BCD_NUM),
|
||||
HBYTE(HID_BCD_NUM), /* bcdHID: HID class specification release number */
|
||||
0x00, /* bCountryCode: hardware target conutry */
|
||||
0x01, /* bNumDescriptors: number of HID class descriptor to follow */
|
||||
HID_CLASS_DESC_REPORT, /* bDescriptorType: report descriptor type */
|
||||
LBYTE(sizeof(g_usbd_hid_report)),
|
||||
HBYTE(sizeof(g_usbd_hid_report)), /* wDescriptorLength: total length of reprot descriptor */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
0x09,
|
||||
0x04,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
};
|
||||
|
||||
|
||||
/* device descriptor */
|
||||
usbd_desc_t device_descriptor =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN,
|
||||
g_usbd_descriptor
|
||||
};
|
||||
|
||||
/* config descriptor */
|
||||
usbd_desc_t config_descriptor =
|
||||
{
|
||||
USBD_CONFIG_DESC_SIZE,
|
||||
g_usbd_configuration
|
||||
};
|
||||
|
||||
/* langid descriptor */
|
||||
usbd_desc_t langid_descriptor =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
g_string_lang_id
|
||||
};
|
||||
|
||||
/* serial descriptor */
|
||||
usbd_desc_t serial_descriptor =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
g_string_serial
|
||||
};
|
||||
|
||||
usbd_desc_t vp_desc;
|
||||
|
||||
/**
|
||||
* @brief standard usb unicode convert
|
||||
* @param string: source string
|
||||
* @param unicode_buf: unicode buffer
|
||||
* @retval length
|
||||
*/
|
||||
uint16_t usbd_unicode_convert(uint8_t *string, uint8_t *unicode_buf)
|
||||
{
|
||||
uint16_t str_len = 0, id_pos = 2;
|
||||
uint8_t *tmp_str = string;
|
||||
|
||||
while(*tmp_str != '\0')
|
||||
{
|
||||
str_len ++;
|
||||
unicode_buf[id_pos ++] = *tmp_str ++;
|
||||
unicode_buf[id_pos ++] = 0x00;
|
||||
}
|
||||
|
||||
str_len = str_len * 2 + 2;
|
||||
unicode_buf[0] = str_len;
|
||||
unicode_buf[1] = USB_DESCIPTOR_TYPE_STRING;
|
||||
|
||||
return str_len;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb int convert to unicode
|
||||
* @param value: int value
|
||||
* @param pbus: unicode buffer
|
||||
* @param len: length
|
||||
* @retval none
|
||||
*/
|
||||
static void usbd_int_to_unicode (uint32_t value , uint8_t *pbuf , uint8_t len)
|
||||
{
|
||||
uint8_t idx = 0;
|
||||
|
||||
for( idx = 0 ; idx < len ; idx ++)
|
||||
{
|
||||
if( ((value >> 28)) < 0xA )
|
||||
{
|
||||
pbuf[2 * idx] = (value >> 28) + '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
pbuf[2 * idx] = (value >> 28) + 'A' - 10;
|
||||
}
|
||||
|
||||
value = value << 4;
|
||||
|
||||
pbuf[2 * idx + 1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb get serial number
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
static void get_serial_num(void)
|
||||
{
|
||||
uint32_t serial0, serial1, serial2;
|
||||
|
||||
serial0 = *(uint32_t*)MCU_ID1;
|
||||
serial1 = *(uint32_t*)MCU_ID2;
|
||||
serial2 = *(uint32_t*)MCU_ID3;
|
||||
|
||||
serial0 += serial2;
|
||||
|
||||
if (serial0 != 0)
|
||||
{
|
||||
usbd_int_to_unicode (serial0, &g_string_serial[2] ,8);
|
||||
usbd_int_to_unicode (serial1, &g_string_serial[18] ,4);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get device descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_descriptor(void)
|
||||
{
|
||||
return &device_descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get device qualifier
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t * get_device_qualifier(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get config descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_configuration(void)
|
||||
{
|
||||
return &config_descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get other speed descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_other_speed(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get lang id descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_lang_id(void)
|
||||
{
|
||||
return &langid_descriptor;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief get manufacturer descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_manufacturer_string(void)
|
||||
{
|
||||
vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_DESC_MANUFACTURER_STRING, g_usbd_desc_buffer);
|
||||
vp_desc.descriptor = g_usbd_desc_buffer;
|
||||
return &vp_desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get product descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_product_string(void)
|
||||
{
|
||||
vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_DESC_PRODUCT_STRING, g_usbd_desc_buffer);
|
||||
vp_desc.descriptor = g_usbd_desc_buffer;
|
||||
return &vp_desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get serial descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_serial_string(void)
|
||||
{
|
||||
get_serial_num();
|
||||
return &serial_descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get interface descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_interface_string(void)
|
||||
{
|
||||
vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_DESC_INTERFACE_STRING, g_usbd_desc_buffer);
|
||||
vp_desc.descriptor = g_usbd_desc_buffer;
|
||||
return &vp_desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get device config descriptor
|
||||
* @param none
|
||||
* @retval usbd_desc
|
||||
*/
|
||||
usbd_desc_t *get_device_config_string(void)
|
||||
{
|
||||
vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_DESC_CONFIGURATION_STRING, g_usbd_desc_buffer);
|
||||
vp_desc.descriptor = g_usbd_desc_buffer;
|
||||
return &vp_desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
266
middlewares/usbd_class/audio_hid/audio_hid_desc.h
Normal file
266
middlewares/usbd_class/audio_hid/audio_hid_desc.h
Normal file
@@ -0,0 +1,266 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file audio_desc.h
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @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_hid_class.h"
|
||||
#include "usbd_core.h"
|
||||
#include "audio_conf.h"
|
||||
|
||||
/** @addtogroup AT32F403A_407_middlewares_usbd_class
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup USB_audio_hid_desc
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_audio_hid_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
|
||||
#define HID_INTERFACE_NUMBER 0x03
|
||||
|
||||
/**
|
||||
* @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
|
||||
|
||||
/**
|
||||
* @brief usb bcd number define
|
||||
*/
|
||||
#define HID_BCD_NUM 0x0110
|
||||
|
||||
/**
|
||||
* @brief usb hid class descriptor define
|
||||
*/
|
||||
#define HID_CLASS_DESC_HID 0x21
|
||||
#define HID_CLASS_DESC_REPORT 0x22
|
||||
#define HID_CLASS_DESC_PHYSICAL 0x23
|
||||
|
||||
/**
|
||||
* @brief usb hid report id define
|
||||
*/
|
||||
#define HID_REPORT_ID_1 0x01
|
||||
#define HID_REPORT_ID_2 0x02
|
||||
#define HID_REPORT_ID_3 0x03
|
||||
#define HID_REPORT_ID_4 0x04
|
||||
#define HID_REPORT_ID_5 0x05
|
||||
#define HID_REPORT_ID_6 0xF0
|
||||
|
||||
#define USBD_HID_DESC_SIZE 32
|
||||
#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) \
|
||||
+ USBD_HID_DESC_SIZE)
|
||||
#define USBD_HID_SIZ_REPORT_DESC 126
|
||||
|
||||
#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_hid_report[USBD_HID_SIZ_REPORT_DESC];
|
||||
extern uint8_t g_hid_usb_desc[9];
|
||||
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_hid_desc_handler;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc class file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -77,7 +77,10 @@ usbd_desc_handler desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -187,7 +193,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -198,7 +207,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_keyboard_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc and keyboard class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -66,7 +66,7 @@ static uint8_t g_req;
|
||||
static uint16_t g_len, g_rxlen;
|
||||
__IO uint8_t g_tx_completed = 1, g_rx_completed = 0;
|
||||
|
||||
uint8_t g_keyboard_tx_completed = 0;
|
||||
__IO uint8_t g_keyboard_tx_completed = 0;
|
||||
|
||||
#define SHIFT 0x80
|
||||
const unsigned char _asciimap[128] =
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_keyboard_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc and keyboard class file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -106,7 +106,7 @@ typedef struct
|
||||
* @{
|
||||
*/
|
||||
extern usbd_class_handler cdc_keyboard_class_handler;
|
||||
extern uint8_t g_keyboard_tx_completed;
|
||||
extern __IO uint8_t g_keyboard_tx_completed;
|
||||
uint16_t usb_vcp_get_rxdata(void *udev, uint8_t *recv_data);
|
||||
error_status usb_vcp_send_data(void *udev, uint8_t *send_data, uint16_t len);
|
||||
usb_sts_type class_send_report(void *udev, uint8_t *report, uint16_t len);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_keyboard_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc and keyboard device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -76,7 +76,10 @@ usbd_desc_handler cdc_keyboard_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -101,7 +104,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -232,7 +238,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
uint8_t g_hid_usb_desc[9] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
@@ -248,7 +257,10 @@ uint8_t g_hid_usb_desc[9] =
|
||||
/**
|
||||
* @brief usb hid keyboard report descriptor
|
||||
*/
|
||||
uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
|
||||
0x09, 0x06, // USAGE (Keyboard)
|
||||
@@ -286,7 +298,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -297,7 +312,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file cdc_keyboard_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb cdc and keyboard descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file custom_hid_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb custom hid class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file custom_hid_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb custom hid header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file custom_hid_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -77,7 +77,10 @@ usbd_desc_handler hid_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -155,7 +161,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb hid report descriptor
|
||||
*/
|
||||
uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x06, 0xFF, 0x00, /* USAGE_PAGE(Vendor Page:0xFF00) */
|
||||
0x09, 0x01, /* USAGE (Demo Kit) */
|
||||
@@ -250,7 +259,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
uint8_t g_hid_usb_desc[9] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
@@ -267,7 +279,10 @@ uint8_t g_hid_usb_desc[9] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -278,7 +293,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file custom_hid_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb custom hid descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file hid_iap_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid iap class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file hid_iap_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid iap header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file hid_iap_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -77,7 +77,10 @@ usbd_desc_handler hid_iap_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -155,7 +161,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb hid report descriptor
|
||||
*/
|
||||
uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x06, 0xFF, 0x00, /* USAGE_PAGE(Vendor Page:0xFF00) */
|
||||
0x09, 0x01, /* USAGE (Demo Kit) */
|
||||
@@ -183,7 +192,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
uint8_t g_hid_usb_desc[9] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
@@ -200,7 +212,10 @@ uint8_t g_hid_usb_desc[9] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -211,7 +226,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file hid_iap_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file keyboard_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid keyboard class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -55,9 +55,9 @@ static uint32_t hid_protocol = 0;
|
||||
static uint32_t hid_set_idle = 0;
|
||||
static uint32_t alt_setting = 0;
|
||||
static uint8_t hid_state;
|
||||
uint8_t hid_suspend_flag = 0;
|
||||
__IO uint8_t hid_suspend_flag = 0;
|
||||
uint8_t hid_set_report[64];
|
||||
uint8_t g_u8tx_completed = 0;
|
||||
__IO uint8_t g_u8tx_completed = 0;
|
||||
|
||||
#define SHIFT 0x80
|
||||
const unsigned char _asciimap[128] =
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file keyboard_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid keyboard header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -86,7 +86,7 @@ extern "C" {
|
||||
* @{
|
||||
*/
|
||||
extern usbd_class_handler keyboard_class_handler;
|
||||
extern uint8_t g_u8tx_completed;
|
||||
extern __IO uint8_t g_u8tx_completed;
|
||||
|
||||
usb_sts_type class_send_report(void *udev, uint8_t *report, uint16_t len);
|
||||
void usb_hid_keyboard_send_char(void *udev, uint8_t ascii_code);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file keyboard_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid keyboard device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -77,7 +77,10 @@ usbd_desc_handler keyboard_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -147,7 +153,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb mouse report descriptor
|
||||
*/
|
||||
uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
|
||||
0x09, 0x06, // USAGE (Keyboard)
|
||||
@@ -186,7 +195,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
uint8_t g_hid_usb_desc[9] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
@@ -203,7 +215,10 @@ uint8_t g_hid_usb_desc[9] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -214,7 +229,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file keyboard_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb keyboard descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file mouse_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid mouse class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -55,7 +55,7 @@ static uint32_t hid_protocol = 0;
|
||||
static uint32_t hid_set_idle = 0;
|
||||
static uint32_t alt_setting = 0;
|
||||
static uint8_t hid_state;
|
||||
uint8_t hid_suspend_flag = 0;
|
||||
__IO uint8_t hid_suspend_flag = 0;
|
||||
uint8_t hid_set_report[64];
|
||||
|
||||
/* usb device class handler */
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file mouse_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid mouse header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file mouse_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb hid mouse device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -77,7 +77,10 @@ usbd_desc_handler mouse_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -147,7 +153,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb mouse report descriptor
|
||||
*/
|
||||
uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] ALIGNED_TAIL =
|
||||
{
|
||||
0x05,0x01,
|
||||
0x09,0x02,
|
||||
@@ -200,7 +209,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
|
||||
/**
|
||||
* @brief usb hid descriptor
|
||||
*/
|
||||
uint8_t g_hid_usb_desc[9] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_hid_usb_desc[9] ALIGNED_TAIL =
|
||||
{
|
||||
0x09, /* bLength: size of HID descriptor in bytes */
|
||||
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
|
||||
@@ -217,7 +229,10 @@ uint8_t g_hid_usb_desc[9] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -228,7 +243,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file mouse_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb mouse descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_bot_scsi.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb mass storage bulk-only transport and scsi command
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -49,7 +49,10 @@ csw_type csw_struct =
|
||||
CSW_BCSWSTATUS_PASS,
|
||||
};
|
||||
|
||||
uint8_t page00_inquiry_data[] = {
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t page00_inquiry_data[] ALIGNED_TAIL = {
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
@@ -57,7 +60,11 @@ uint8_t page00_inquiry_data[] = {
|
||||
0x00,
|
||||
|
||||
};
|
||||
sense_type sense_data =
|
||||
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD sense_type sense_data ALIGNED_TAIL =
|
||||
{
|
||||
0x70,
|
||||
0x00,
|
||||
@@ -70,8 +77,10 @@ sense_type sense_data =
|
||||
0x00000000
|
||||
};
|
||||
|
||||
|
||||
uint8_t mode_sense6_data[8] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t mode_sense6_data[8] ALIGNED_TAIL =
|
||||
{
|
||||
0x00,
|
||||
0x00,
|
||||
@@ -83,7 +92,10 @@ uint8_t mode_sense6_data[8] =
|
||||
0x00
|
||||
};
|
||||
|
||||
uint8_t mode_sense10_data[8] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t mode_sense10_data[8] ALIGNED_TAIL =
|
||||
{
|
||||
0x00,
|
||||
0x06,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_bot_scsi.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb mass storage bulk-only transport and scsi command header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -194,7 +194,7 @@ typedef struct
|
||||
{
|
||||
uint8_t msc_state;
|
||||
uint8_t bot_status;
|
||||
uint8_t max_lun;
|
||||
uint32_t max_lun;
|
||||
|
||||
uint32_t blk_nbr[MSC_SUPPORT_MAX_LUN];
|
||||
uint32_t blk_size[MSC_SUPPORT_MAX_LUN];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb msc class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -130,7 +130,7 @@ usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup)
|
||||
switch(setup->bRequest)
|
||||
{
|
||||
case MSC_REQ_GET_MAX_LUN:
|
||||
usbd_ctrl_send(pudev, &msc_struct.max_lun, 1);
|
||||
usbd_ctrl_send(pudev, (uint8_t *)&msc_struct.max_lun, 1);
|
||||
break;
|
||||
case MSC_REQ_BO_RESET:
|
||||
bot_scsi_reset(udev);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb msc class file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb msc device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -78,7 +78,10 @@ usbd_desc_handler msc_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -146,7 +152,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -157,7 +166,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file msc_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb msc descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file printer_class.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb printer class type
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -62,7 +62,7 @@ uint8_t PRINTER_DEVICE_ID[PRINTER_DEVICE_ID_LEN] =
|
||||
'M', 'F', 'G',':','A','r','t','e', 'r', 'y' ,' ',
|
||||
'C','M', 'D', ':', 'E', 'S', 'C', 'P', 'O', 'S',' ',
|
||||
};
|
||||
static uint8_t g_printer_port_status = 0x18;
|
||||
static uint32_t g_printer_port_status = 0x18;
|
||||
uint8_t g_printer_data[USBD_OUT_MAXPACKET_SIZE];
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file printer_class.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb printer class file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file printer_desc.c
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb printer device descriptor
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
@@ -78,7 +78,10 @@ usbd_desc_handler printer_desc_handler =
|
||||
/**
|
||||
* @brief usb device standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_DESC_LEN, /* bLength */
|
||||
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
|
||||
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
|
||||
/**
|
||||
* @brief usb configuration standard descriptor
|
||||
*/
|
||||
uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] ALIGNED_TAIL =
|
||||
{
|
||||
USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
|
||||
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
|
||||
@@ -146,7 +152,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
|
||||
/**
|
||||
* @brief usb string lang id
|
||||
*/
|
||||
uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_LANGID,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
@@ -157,7 +166,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
|
||||
/**
|
||||
* @brief usb string serial
|
||||
*/
|
||||
uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] =
|
||||
#if defined ( __ICCARM__ ) /* iar compiler */
|
||||
#pragma data_alignment=4
|
||||
#endif
|
||||
ALIGNED_HEAD uint8_t g_string_serial[USBD_SIZ_STRING_SERIAL] ALIGNED_TAIL =
|
||||
{
|
||||
USBD_SIZ_STRING_SERIAL,
|
||||
USB_DESCIPTOR_TYPE_STRING,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file printer_desc.h
|
||||
* @version v2.0.4
|
||||
* @date 2021-11-26
|
||||
* @version v2.0.6
|
||||
* @date 2021-12-31
|
||||
* @brief usb printer descriptor header file
|
||||
**************************************************************************
|
||||
* Copyright notice & Disclaimer
|
||||
|
||||
Reference in New Issue
Block a user