update version to v2.0.2

This commit is contained in:
Artery-MCU
2022-01-21 15:48:36 +08:00
parent 33daa3b304
commit 052a4b7d94
1150 changed files with 13749 additions and 30701 deletions

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413.h * @file at32f413.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 header file * @brief at32f413 header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -57,7 +57,7 @@ extern "C" {
!defined (AT32F413CCT7) && !defined (AT32F413RBT7) && !defined (AT32F413RCT7) && \ !defined (AT32F413CCT7) && !defined (AT32F413RBT7) && !defined (AT32F413RCT7) && \
!defined (AT32FEBKC8T7) && !defined (AT32F413TBU7) !defined (AT32FEBKC8T7) && !defined (AT32F413TBU7)
#error "Please select first the target at32f4xx device used in your application (in at32f4xx.h file)" #error "Please select first the target device used in your application (in at32f413.h file)"
#endif #endif
#if defined (AT32F413KBU7_4) || defined (AT32F413KCU7_4) || defined (AT32F413CBU7) || \ #if defined (AT32F413KBU7_4) || defined (AT32F413KCU7_4) || defined (AT32F413CBU7) || \
@@ -87,7 +87,7 @@ extern "C" {
*/ */
#define __AT32F413_LIBRARY_VERSION_MAJOR (0x02) /*!< [31:24] major version */ #define __AT32F413_LIBRARY_VERSION_MAJOR (0x02) /*!< [31:24] major version */
#define __AT32F413_LIBRARY_VERSION_MIDDLE (0x00) /*!< [23:16] middle version */ #define __AT32F413_LIBRARY_VERSION_MIDDLE (0x00) /*!< [23:16] middle version */
#define __AT32F413_LIBRARY_VERSION_MINOR (0x00) /*!< [15:8] minor version */ #define __AT32F413_LIBRARY_VERSION_MINOR (0x02) /*!< [15:8] minor version */
#define __AT32F413_LIBRARY_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __AT32F413_LIBRARY_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __AT32F413_LIBRARY_VERSION ((__AT32F413_LIBRARY_VERSION_MAJOR << 24) | \ #define __AT32F413_LIBRARY_VERSION ((__AT32F413_LIBRARY_VERSION_MAJOR << 24) | \
(__AT32F413_LIBRARY_VERSION_MIDDLE << 16) | \ (__AT32F413_LIBRARY_VERSION_MIDDLE << 16) | \
@@ -372,6 +372,7 @@ typedef enum {ERROR = 0, SUCCESS = !ERROR} error_status;
* @} * @}
*/ */
#include "at32f413_def.h"
#include "at32f413_conf.h" #include "at32f413_conf.h"
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_conf.h * @file at32f413_conf.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 config header file * @brief at32f413 config header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
****************************************************************************** ******************************************************************************
* @file startup_at32f413.s * @file startup_at32f413.s
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413xx devices vector table for gcc toolchain. * @brief at32f413xx devices vector table for gcc toolchain.
* this module performs: * this module performs:
* - set the initial sp * - set the initial sp

View File

@@ -1,7 +1,7 @@
;************************************************************************** ;**************************************************************************
;* @file startup_at32f413.s ;* @file startup_at32f413.s
;* @version v2.0.0 ;* @version v2.0.2
;* @date 2021-11-26 ;* @date 2021-12-31
;* @brief at32f413 startup file for IAR Systems ;* @brief at32f413 startup file for IAR Systems
;************************************************************************** ;**************************************************************************
; ;

View File

@@ -1,7 +1,7 @@
;************************************************************************** ;**************************************************************************
;* @file startup_at32f403a_407.s ;* @file startup_at32f403a_407.s
;* @version v2.0.0 ;* @version v2.0.2
;* @date 2021-11-26 ;* @date 2021-12-31
;* @brief at32f403a_407 startup file for keil ;* @brief at32f403a_407 startup file for keil
;************************************************************************** ;**************************************************************************
; ;

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file system_at32f413.c * @file system_at32f413.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for cmsis cortex-m4 system source file * @brief contains all the functions for cmsis cortex-m4 system source file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file system_at32f413.h * @file system_at32f413.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief cmsis cortex-m4 system header file. * @brief cmsis cortex-m4 system header file.
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_acc.h * @file at32f413_acc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 acc header file * @brief at32f413 acc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_adc.h * @file at32f413_adc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 adc header file * @brief at32f413 adc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_bpr.h * @file at32f413_bpr.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 bpr header file * @brief at32f413 bpr header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_can.h * @file at32f413_can.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 can header file * @brief at32f413 can header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -110,16 +110,21 @@ extern "C" {
/** /**
* @brief can flag clear operation macro definition val * @brief can flag clear operation macro definition val
*/ */
#define CAN_MSTS_EOIF_VAL ((uint32_t)0x00000004) /*!< eoif bit w1 */ #define CAN_MSTS_EOIF_VAL ((uint32_t)0x00000004) /*!< eoif bit value, it clear by writing 1 */
#define CAN_MSTS_QDZIF_VAL ((uint32_t)0x00000008) /*!< qdzif bit w1 */ #define CAN_MSTS_QDZIF_VAL ((uint32_t)0x00000008) /*!< qdzif bit value, it clear by writing 1 */
#define CAN_MSTS_EDZIF_VAL ((uint32_t)0x00000010) /*!< edzif bit w1 */ #define CAN_MSTS_EDZIF_VAL ((uint32_t)0x00000010) /*!< edzif bit value, it clear by writing 1 */
#define CAN_TSTS_TM0TCF_VAL ((uint32_t)0x00000001) /*!< tm0tcf bit w1 */ #define CAN_TSTS_TM0TCF_VAL ((uint32_t)0x00000001) /*!< tm0tcf bit value, it clear by writing 1 */
#define CAN_TSTS_TM1TCF_VAL ((uint32_t)0x00000100) /*!< tm1tcf bit w1 */ #define CAN_TSTS_TM1TCF_VAL ((uint32_t)0x00000100) /*!< tm1tcf bit value, it clear by writing 1 */
#define CAN_TSTS_TM2TCF_VAL ((uint32_t)0x00010000) /*!< tm2tcf bit w1 */ #define CAN_TSTS_TM2TCF_VAL ((uint32_t)0x00010000) /*!< tm2tcf bit value, it clear by writing 1 */
#define CAN_RF0_RF0FF_VAL ((uint32_t)0x00000008) /*!< rf0ff bit w1 */ #define CAN_TSTS_TM0CT_VAL ((uint32_t)0x00000080) /*!< tm0ct bit value, it clear by writing 1 */
#define CAN_RF0_RF0OF_VAL ((uint32_t)0x00000010) /*!< rf0of bit w1 */ #define CAN_TSTS_TM1CT_VAL ((uint32_t)0x00008000) /*!< tm1ct bit value, it clear by writing 1 */
#define CAN_RF1_RF1FF_VAL ((uint32_t)0x00000008) /*!< rf1ff bit w1 */ #define CAN_TSTS_TM2CT_VAL ((uint32_t)0x00800000) /*!< tm2ct bit value, it clear by writing 1 */
#define CAN_RF1_RF1OF_VAL ((uint32_t)0x00000010) /*!< rf1of bit w1 */ #define CAN_RF0_RF0FF_VAL ((uint32_t)0x00000008) /*!< rf0ff bit value, it clear by writing 1 */
#define CAN_RF0_RF0OF_VAL ((uint32_t)0x00000010) /*!< rf0of bit value, it clear by writing 1 */
#define CAN_RF0_RF0R_VAL ((uint32_t)0x00000020) /*!< rf0r bit value, it clear by writing 1 */
#define CAN_RF1_RF1FF_VAL ((uint32_t)0x00000008) /*!< rf1ff bit value, it clear by writing 1 */
#define CAN_RF1_RF1OF_VAL ((uint32_t)0x00000010) /*!< rf1of bit value, it clear by writing 1 */
#define CAN_RF1_RF1R_VAL ((uint32_t)0x00000020) /*!< rf1r bit value, it clear by writing 1 */
/** @defgroup CAN_exported_types /** @defgroup CAN_exported_types
* @{ * @{

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_crc.h * @file at32f413_crc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 crc header file * @brief at32f413 crc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_crm.h * @file at32f413_crm.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 crm header file * @brief at32f413 crm header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_debug.h * @file at32f413_debug.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 debug header file * @brief at32f413 debug header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -133,7 +133,7 @@ typedef struct
* @} * @}
*/ */
#define DEBUG ((debug_type *) DEBUG_BASE) #define DEBUGMCU ((debug_type *) DEBUG_BASE)
/** @defgroup DEBUG_exported_functions /** @defgroup DEBUG_exported_functions
* @{ * @{

View File

@@ -0,0 +1,69 @@
/**
**************************************************************************
* @file at32f413_def.h
* @version v2.0.2
* @date 2021-12-31
* @brief at32f413 macros 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 __AT32F413_DEF_H
#define __AT32F413_DEF_H
#ifdef __cplusplus
extern "C" {
#endif
/* gnu compiler */
#if defined (__GNUC__)
#ifndef ALIGNED_HEAD
#define ALIGNED_HEAD
#endif
#ifndef ALIGNED_TAIL
#define ALIGNED_TAIL __attribute__ ((aligned (4)))
#endif
#endif
/* arm compiler */
#if defined (__CC_ARM)
#ifndef ALIGNED_HEAD
#define ALIGNED_HEAD __align(4)
#endif
#ifndef ALIGNED_TAIL
#define ALIGNED_TAIL
#endif
#endif
/* iar compiler */
#if defined (__ICCARM__)
#ifndef ALIGNED_HEAD
#define ALIGNED_HEAD
#endif
#ifndef ALIGNED_TAIL
#define ALIGNED_TAIL
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_dma.h * @file at32f413_dma.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 dma header file * @brief at32f413 dma header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_exint.h * @file at32f413_exint.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 exint header file * @brief at32f413 exint header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_flash.h * @file at32f413_flash.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 flash header file * @brief at32f413 flash header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_gpio.h * @file at32f413_gpio.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 gpio header file * @brief at32f413 gpio header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -409,7 +409,7 @@ typedef struct
}; };
/** /**
* @brief gpio wcr register, offset:0x10 * @brief gpio scr register, offset:0x10
*/ */
union union
{ {

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_i2c.h * @file at32f413_i2c.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 i2c header file * @brief at32f413 i2c header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_misc.h * @file at32f413_misc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 misc header file * @brief at32f413 misc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -64,11 +64,11 @@ extern "C" {
*/ */
typedef enum typedef enum
{ {
NVIC_PRIORITY_GROUP_0 = ((uint32_t)0x700), /*!< 0 bits for preemption priority, 4 bits for subpriority */ NVIC_PRIORITY_GROUP_0 = ((uint32_t)0x7), /*!< 0 bits for preemption priority, 4 bits for subpriority */
NVIC_PRIORITY_GROUP_1 = ((uint32_t)0x600), /*!< 1 bits for preemption priority, 3 bits for subpriority */ NVIC_PRIORITY_GROUP_1 = ((uint32_t)0x6), /*!< 1 bits for preemption priority, 3 bits for subpriority */
NVIC_PRIORITY_GROUP_2 = ((uint32_t)0x500), /*!< 2 bits for preemption priority, 2 bits for subpriority */ NVIC_PRIORITY_GROUP_2 = ((uint32_t)0x5), /*!< 2 bits for preemption priority, 2 bits for subpriority */
NVIC_PRIORITY_GROUP_3 = ((uint32_t)0x400), /*!< 3 bits for preemption priority, 1 bits for subpriority */ NVIC_PRIORITY_GROUP_3 = ((uint32_t)0x4), /*!< 3 bits for preemption priority, 1 bits for subpriority */
NVIC_PRIORITY_GROUP_4 = ((uint32_t)0x300) /*!< 4 bits for preemption priority, 0 bits for subpriority */ NVIC_PRIORITY_GROUP_4 = ((uint32_t)0x3) /*!< 4 bits for preemption priority, 0 bits for subpriority */
} nvic_priority_group_type; } nvic_priority_group_type;
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_pwc.h * @file at32f413_pwc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 pwc header file * @brief at32f413 pwc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -57,6 +57,11 @@ extern "C" {
* @} * @}
*/ */
/**
* @brief pwc wakeup pin num definition
*/
#define PWC_WAKEUP_PIN_1 ((uint32_t)0x00000100) /*!< standby wake-up pin1 */
/** @defgroup PWC_exported_types /** @defgroup PWC_exported_types
* @{ * @{
*/ */
@@ -159,7 +164,7 @@ void pwc_reset(void);
void pwc_battery_powered_domain_access(confirm_state new_state); void pwc_battery_powered_domain_access(confirm_state new_state);
void pwc_pvm_level_select(pwc_pvm_voltage_type pvm_voltage); void pwc_pvm_level_select(pwc_pvm_voltage_type pvm_voltage);
void pwc_power_voltage_monitor_enable(confirm_state new_state); void pwc_power_voltage_monitor_enable(confirm_state new_state);
void pwc_wakeup_pin_enable(confirm_state new_state); void pwc_wakeup_pin_enable(uint32_t pin_num, confirm_state new_state);
void pwc_flag_clear(uint32_t pwc_flag); void pwc_flag_clear(uint32_t pwc_flag);
flag_status pwc_flag_get(uint32_t pwc_flag); flag_status pwc_flag_get(uint32_t pwc_flag);
void pwc_sleep_mode_enter(pwc_sleep_enter_type pwc_sleep_enter); void pwc_sleep_mode_enter(pwc_sleep_enter_type pwc_sleep_enter);

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_rtc.h * @file at32f413_rtc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 rtc header file * @brief at32f413 rtc header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_sdio.h * @file at32f413_sdio.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 sdio header file * @brief at32f413 sdio header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_spi.h * @file at32f413_spi.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 spi header file * @brief at32f413 spi header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -122,8 +122,8 @@ typedef enum
*/ */
typedef enum typedef enum
{ {
SPI_CS_HARDWARE_MODE = 0x00, /*!< cs is software mode */ SPI_CS_HARDWARE_MODE = 0x00, /*!< cs is hardware mode */
SPI_CS_SOFTWARE_MODE = 0x01 /*!< cs is hardware mode */ SPI_CS_SOFTWARE_MODE = 0x01 /*!< cs is software mode */
} spi_cs_mode_type; } spi_cs_mode_type;
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_tmr.h * @file at32f413_tmr.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 tmr header file * @brief at32f413 tmr header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_usart.h * @file at32f413_usart.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 usart header file * @brief at32f413 usart header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_usb.h * @file at32f413_usb.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 usb header file * @brief at32f413 usb header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -689,6 +689,7 @@ void usb_remote_wkup_clear(usbd_type *usbx);
uint16_t usb_buffer_malloc(uint16_t maxpacket); uint16_t usb_buffer_malloc(uint16_t maxpacket);
void usb_buffer_free(void); void usb_buffer_free(void);
flag_status usb_flag_get(usbd_type *usbx, uint16_t flag); flag_status usb_flag_get(usbd_type *usbx, uint16_t flag);
void usb_flag_clear(usbd_type *usbx, uint16_t flag);
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_wdt.h * @file at32f413_wdt.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 wdt header file * @brief at32f413 wdt header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_wwdt.h * @file at32f413_wwdt.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief at32f413 wwdt header file * @brief at32f413 wwdt header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_acc.c * @file at32f413_acc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the acc firmware library * @brief contains all the functions for the acc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_adc.c * @file at32f413_adc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the adc firmware library * @brief contains all the functions for the adc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -918,7 +918,7 @@ flag_status adc_flag_get(adc_type *adc_x, uint8_t adc_flag)
*/ */
void adc_flag_clear(adc_type *adc_x, uint32_t adc_flag) void adc_flag_clear(adc_type *adc_x, uint32_t adc_flag)
{ {
adc_x->sts &= ~adc_flag; adc_x->sts = ~adc_flag;
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_bpr.c * @file at32f413_bpr.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the bpr firmware library * @brief contains all the functions for the bpr firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_can.c * @file at32f413_can.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the can firmware library * @brief contains all the functions for the can firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -591,13 +591,13 @@ void can_transmit_cancel(can_type* can_x, can_tx_mailbox_num_type transmit_mailb
switch (transmit_mailbox) switch (transmit_mailbox)
{ {
case CAN_TX_MAILBOX0: case CAN_TX_MAILBOX0:
can_x->tsts_bit.tm0ct = TRUE; can_x->tsts = CAN_TSTS_TM0CT_VAL;
break; break;
case CAN_TX_MAILBOX1: case CAN_TX_MAILBOX1:
can_x->tsts_bit.tm1ct = TRUE; can_x->tsts = CAN_TSTS_TM1CT_VAL;
break; break;
case CAN_TX_MAILBOX2: case CAN_TX_MAILBOX2:
can_x->tsts_bit.tm2ct = TRUE; can_x->tsts = CAN_TSTS_TM2CT_VAL;
break; break;
default: default:
break; break;
@@ -668,10 +668,10 @@ void can_receive_fifo_release(can_type* can_x, can_rx_fifo_num_type fifo_number)
switch (fifo_number) switch (fifo_number)
{ {
case CAN_RX_FIFO0: case CAN_RX_FIFO0:
can_x->rf0_bit.rf0r = TRUE; can_x->rf0 = CAN_RF0_RF0R_VAL;
break; break;
case CAN_RX_FIFO1: case CAN_RX_FIFO1:
can_x->rf1_bit.rf1r = TRUE; can_x->rf1 = CAN_RF1_RF1R_VAL;
break; break;
default: default:
break; break;

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_crc.c * @file at32f413_crc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the crc firmware library * @brief contains all the functions for the crc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_crm.c * @file at32f413_crm.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the crm firmware library * @brief contains all the functions for the crm firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_debug.c * @file at32f413_debug.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the debug firmware library * @brief contains all the functions for the debug firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -48,7 +48,7 @@
*/ */
uint32_t debug_device_id_get(void) uint32_t debug_device_id_get(void)
{ {
return DEBUG->pid; return DEBUGMCU->pid;
} }
/** /**
@@ -81,11 +81,11 @@ void debug_periph_mode_set(uint32_t periph_debug_mode, confirm_state new_state)
if(new_state != FALSE) if(new_state != FALSE)
{ {
DEBUG->ctrl |= periph_debug_mode; DEBUGMCU->ctrl |= periph_debug_mode;
} }
else else
{ {
DEBUG->ctrl &= ~periph_debug_mode; DEBUGMCU->ctrl &= ~periph_debug_mode;
} }
} }

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_dma.c * @file at32f413_dma.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the dma firmware library * @brief contains all the functions for the dma firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -215,7 +215,6 @@ void dma_channel_enable(dma_channel_type* dmax_channely, confirm_state new_state
* - FLEX_CHANNEL5 * - FLEX_CHANNEL5
* - FLEX_CHANNEL6 * - FLEX_CHANNEL6
* - FLEX_CHANNEL7 * - FLEX_CHANNEL7
* - DMA2_CHANNEL8
* @param flexible_request: every peripheral have specified hardware_id. * @param flexible_request: every peripheral have specified hardware_id.
* this parameter can be one of the following values: * this parameter can be one of the following values:
* - DMA_FLEXIBLE_ADC1 - DMA_FLEXIBLE_SPI1_RX - DMA_FLEXIBLE_SPI1_TX - DMA_FLEXIBLE_SPI2_RX * - DMA_FLEXIBLE_ADC1 - DMA_FLEXIBLE_SPI1_RX - DMA_FLEXIBLE_SPI1_TX - DMA_FLEXIBLE_SPI2_RX
@@ -344,9 +343,9 @@ flag_status dma_flag_get(uint32_t dmax_flag)
*/ */
void dma_flag_clear(uint32_t dmax_flag) void dma_flag_clear(uint32_t dmax_flag)
{ {
if(dmax_flag > 0x10000000) if(dmax_flag > ((uint32_t)0x10000000))
{ {
DMA2->clr = dmax_flag; DMA2->clr = (uint32_t)(dmax_flag & 0x0FFFFFFF);
} }
else else
{ {

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_exint.c * @file at32f413_exint.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the exint firmware library * @brief contains all the functions for the exint firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -52,7 +52,7 @@ void exint_reset(void)
EXINT->polcfg1 = 0x00000000; EXINT->polcfg1 = 0x00000000;
EXINT->polcfg2 = 0x00000000; EXINT->polcfg2 = 0x00000000;
EXINT->evten = 0x00000000; EXINT->evten = 0x00000000;
EXINT->intsts = 0x007FFFFF; EXINT->intsts = 0x0007FFFF;
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_flash.c * @file at32f413_flash.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the flash firmware library * @brief contains all the functions for the flash firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_gpio.c * @file at32f413_gpio.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the gpio firmware library * @brief contains all the functions for the gpio firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_i2c.c * @file at32f413_i2c.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the i2c firmware library * @brief contains all the functions for the i2c firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_misc.c * @file at32f413_misc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the misc firmware library * @brief contains all the functions for the misc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_pwc.c * @file at32f413_pwc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the pwc firmware library * @brief contains all the functions for the pwc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -94,15 +94,25 @@ void pwc_power_voltage_monitor_enable(confirm_state new_state)
/** /**
* @brief enable or disable pwc standby wakeup pin * @brief enable or disable pwc standby wakeup pin
* @param pin_num: choose the wakeup pin.
* this parameter can be be any combination of the following values:
* - PWC_WAKEUP_PIN_1
* @param new_state: new state of the standby wakeup pin. * @param new_state: new state of the standby wakeup pin.
* this parameter can be one of the following values: * this parameter can be one of the following values:
* - TRUE <wakeup pin is used for wake up cpu from standby mode> * - TRUE <wakeup pin is used for wake up cpu from standby mode>
* - FALSE <wakeup pin is used for general purpose I/O> * - FALSE <wakeup pin is used for general purpose I/O>
* @retval none * @retval none
*/ */
void pwc_wakeup_pin_enable(confirm_state new_state) void pwc_wakeup_pin_enable(uint32_t pin_num, confirm_state new_state)
{ {
PWC->ctrlsts_bit.swpen = new_state; if(new_state == TRUE)
{
PWC->ctrlsts |= pin_num;
}
else
{
PWC->ctrlsts &= ~pin_num;
}
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_rtc.c * @file at32f413_rtc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the rtc firmware library * @brief contains all the functions for the rtc firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -49,14 +49,14 @@
void rtc_counter_set(uint32_t counter_value) void rtc_counter_set(uint32_t counter_value)
{ {
/* enter rtc config mode */ /* enter rtc config mode */
RTC->ctrll_bit.cfgen = TRUE; RTC->ctrll = 0x003F;
/* set rtc counter */ /* set rtc counter */
RTC->cnth_bit.cnt = (uint16_t)(counter_value >> 16); RTC->cnth_bit.cnt = (uint16_t)(counter_value >> 16);
RTC->cntl_bit.cnt = (uint16_t)(counter_value & 0x0000FFFF); RTC->cntl_bit.cnt = (uint16_t)(counter_value & 0x0000FFFF);
/* exit rtc config mode */ /* exit rtc config mode */
RTC->ctrll_bit.cfgen = FALSE; RTC->ctrll = 0x000F;
} }
/** /**
@@ -82,14 +82,14 @@ uint32_t rtc_counter_get(void)
void rtc_divider_set(uint32_t div_value) void rtc_divider_set(uint32_t div_value)
{ {
/* enter rtc config mode */ /* enter rtc config mode */
RTC->ctrll_bit.cfgen = TRUE; RTC->ctrll = 0x003F;
/* set rtc divider */ /* set rtc divider */
RTC->divh_bit.div = (uint16_t)(div_value >> 16); RTC->divh_bit.div = (uint16_t)(div_value >> 16);
RTC->divl_bit.div = (uint16_t)(div_value & 0x0000FFFF); RTC->divl_bit.div = (uint16_t)(div_value & 0x0000FFFF);
/* exit rtc config mode */ /* exit rtc config mode */
RTC->ctrll_bit.cfgen = FALSE; RTC->ctrll = 0x000F;
} }
/** /**
@@ -115,14 +115,14 @@ uint32_t rtc_divider_get(void)
void rtc_alarm_set(uint32_t alarm_value) void rtc_alarm_set(uint32_t alarm_value)
{ {
/* enter rtc config mode */ /* enter rtc config mode */
RTC->ctrll_bit.cfgen = TRUE; RTC->ctrll = 0x003F;
/* set rtc alarm value */ /* set rtc alarm value */
RTC->tah_bit.ta = (uint16_t)(alarm_value >> 16); RTC->tah_bit.ta = (uint16_t)(alarm_value >> 16);
RTC->tal_bit.ta = (uint16_t)(alarm_value & 0x0000FFFF); RTC->tal_bit.ta = (uint16_t)(alarm_value & 0x0000FFFF);
/* exit rtc config mode */ /* exit rtc config mode */
RTC->ctrll_bit.cfgen = FALSE; RTC->ctrll = 0x000F;
} }
/** /**
@@ -186,7 +186,7 @@ flag_status rtc_flag_get(uint16_t flag)
*/ */
void rtc_flag_clear(uint16_t flag) void rtc_flag_clear(uint16_t flag)
{ {
RTC->ctrll &= ~flag; RTC->ctrll = ~(flag | 0x10) | (RTC->ctrll_bit.cfgen << 4);
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_sdio.c * @file at32f413_sdio.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the sdio firmware library * @brief contains all the functions for the sdio firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -325,7 +325,7 @@ flag_status sdio_flag_get(sdio_type *sdio_x, uint32_t flag)
*/ */
void sdio_flag_clear(sdio_type *sdio_x, uint32_t flag) void sdio_flag_clear(sdio_type *sdio_x, uint32_t flag)
{ {
sdio_x->intclr |= flag; sdio_x->intclr = flag;
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_spi.c * @file at32f413_spi.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the spi firmware library * @brief contains all the functions for the spi firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -580,9 +580,9 @@ flag_status spi_i2s_flag_get(spi_type* spi_x, uint32_t spi_i2s_flag)
void spi_i2s_flag_clear(spi_type* spi_x, uint32_t spi_i2s_flag) void spi_i2s_flag_clear(spi_type* spi_x, uint32_t spi_i2s_flag)
{ {
volatile uint32_t temp = 0; volatile uint32_t temp = 0;
temp = temp;
if(spi_i2s_flag == SPI_CCERR_FLAG) if(spi_i2s_flag == SPI_CCERR_FLAG)
spi_x->sts_bit.ccerr = FALSE; spi_x->sts = ~SPI_CCERR_FLAG;
else if(spi_i2s_flag == SPI_I2S_RDBF_FLAG) else if(spi_i2s_flag == SPI_I2S_RDBF_FLAG)
temp = REG32(&spi_x->dt); temp = REG32(&spi_x->dt);
else if(spi_i2s_flag == I2S_TUERR_FLAG) else if(spi_i2s_flag == I2S_TUERR_FLAG)

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_tmr.c * @file at32f413_tmr.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the tmr firmware library * @brief contains all the functions for the tmr firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -1381,7 +1381,7 @@ flag_status tmr_flag_get(tmr_type *tmr_x, uint32_t tmr_flag)
*/ */
void tmr_flag_clear(tmr_type *tmr_x, uint32_t tmr_flag) void tmr_flag_clear(tmr_type *tmr_x, uint32_t tmr_flag)
{ {
tmr_x->ists &= ~tmr_flag; tmr_x->ists = ~tmr_flag;
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_usart.c * @file at32f413_usart.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the usart firmware library * @brief contains all the functions for the usart firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_usb.c * @file at32f413_usb.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains the functions for the usb firmware library * @brief contains the functions for the usb firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -323,7 +323,11 @@ void usb_write_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes)
uint16_t *pbuf = (uint16_t *)pusr_buf; uint16_t *pbuf = (uint16_t *)pusr_buf;
for(n_index = 0; n_index < nhbytes; n_index ++) for(n_index = 0; n_index < nhbytes; n_index ++)
{ {
#if defined (__ICCARM__) && (__VER__ < 7000000)
*d_addr++ = *(__packed uint16_t *)pbuf;
#else
*d_addr++ = __UNALIGNED_UINT16_READ(pbuf); *d_addr++ = __UNALIGNED_UINT16_READ(pbuf);
#endif
d_addr ++; d_addr ++;
pbuf ++; pbuf ++;
} }
@@ -344,7 +348,11 @@ void usb_read_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes)
uint16_t *pbuf = (uint16_t *)pusr_buf; uint16_t *pbuf = (uint16_t *)pusr_buf;
for(n_index = 0; n_index < nhbytes; n_index ++) for(n_index = 0; n_index < nhbytes; n_index ++)
{ {
#if defined (__ICCARM__) && (__VER__ < 7000000)
*(__packed uint16_t *)pbuf = *(__IO uint16_t *)s_addr ++;
#else
__UNALIGNED_UINT16_WRITE(pbuf, *(__IO uint16_t *)s_addr ++); __UNALIGNED_UINT16_WRITE(pbuf, *(__IO uint16_t *)s_addr ++);
#endif
s_addr ++; s_addr ++;
pbuf ++; pbuf ++;
} }
@@ -511,6 +519,27 @@ flag_status usb_flag_get(usbd_type *usbx, uint16_t flag)
return status; return status;
} }
/**
* @brief clear flag of usb.
* @param usbx: select the usb peripheral
* @param flag: select the usb flag
* this parameter can be one of the following values:
* - USB_INOUT_FLAG
* - USB_LSOF_FLAG
* - USB_SOF_FLAG
* - USB_RST_FLAG
* - USB_SP_FLAG
* - USB_WK_FLAG
* - USB_BE_FLAG
* - USB_UCFOR_FLAG
* - USB_TC_FLAG
* @retval none
*/
void usb_flag_clear(usbd_type *usbx, uint16_t flag)
{
usbx->intsts = ~flag;
}
/** /**
* @} * @}
*/ */

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_wdt.c * @file at32f413_wdt.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the wdt firmware library * @brief contains all the functions for the wdt firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file at32f413_wwdt.c * @file at32f413_wwdt.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief contains all the functions for the wwdt firmware library * @brief contains all the functions for the wwdt firmware library
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -73,7 +73,7 @@ void wwdt_divider_set(wwdt_division_type division)
*/ */
void wwdt_flag_clear(void) void wwdt_flag_clear(void)
{ {
WWDT->sts_bit.rldf = FALSE; WWDT->sts = 0;
} }
/** /**

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file i2c_application.c * @file i2c_application.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief the driver library of the i2c peripheral * @brief the driver library of the i2c peripheral
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file i2c_application.h * @file i2c_application.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief i2c application libray header file * @brief i2c application libray header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file audio_class.c * @file audio_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb audio class type * @brief usb audio class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -190,11 +190,11 @@ usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup)
} }
break; break;
case USB_STD_REQ_GET_INTERFACE: case USB_STD_REQ_GET_INTERFACE:
audio_get_interface(pudev, setup); audio_get_interface(udev, setup);
break; break;
case USB_STD_REQ_SET_INTERFACE: case USB_STD_REQ_SET_INTERFACE:
audio_set_interface(pudev, setup); audio_set_interface(udev, setup);
usbd_ctrl_send_status(pudev); usbd_ctrl_send_status(pudev);
break; 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 class_in_handler(void *udev, uint8_t ept_num)
{ {
usb_sts_type status = USB_OK; usb_sts_type status = USB_OK;
usbd_core_type *pudev = (usbd_core_type *)udev;
uint32_t len = 0; uint32_t len = 0;
/* ...user code... /* ...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)) if((ept_num & 0x7F) == (USBD_AUDIO_MIC_IN_EPT & 0x7F))
{ {
len = audio_codec_mic_get_data(audio_struct.audio_mic_data); 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)) else if((ept_num & 0x7F) == (USBD_AUDIO_FEEDBACK_EPT & 0x7F))
{ {
len = audio_codec_spk_feedback(audio_struct.audio_feed_back); 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; return status;
@@ -411,22 +410,26 @@ void audio_req_get_cur(void *udev, usb_setup_type *setup)
{ {
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL) 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 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 else
{ {
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL) 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 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; usbd_core_type *pudev = (usbd_core_type *)udev;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID) 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 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; usbd_core_type *pudev = (usbd_core_type *)udev;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID) 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 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; usbd_core_type *pudev = (usbd_core_type *)udev;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID) 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 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); audio_codec_spk_alt_setting(audio_struct.spk_alt_setting);
if(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_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);
} }
} }

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file audio_class.h * @file audio_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb audio class file * @brief usb audio class file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -58,11 +58,11 @@ extern "C" {
/** /**
* @brief endpoint support max size * @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_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_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 AUDIO_FEEDBACK_MAXPACKET_SIZE 0x3
#define FEEDBACK_REFRESH_TIME 0x8
/** /**
* @brief request type define * @brief request type define
*/ */

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file audio_conf.h * @file audio_conf.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb audio config * @brief usb audio config
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file audio_desc.c * @file audio_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb audio device descriptor * @brief usb audio device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -78,7 +78,10 @@ usbd_desc_handler audio_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -361,8 +367,8 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
0x11, /* bmAttributes: endpoint attributes */ 0x11, /* bmAttributes: endpoint attributes */
LBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */ LBYTE(AUDIO_FEEDBACK_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */
HBYTE(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 */ 1, /* bInterval: interval for polling endpoint for data transfers */
0x08, /* bRefresh: this field indicates the rate at which an iso syncronization 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 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 2, therefore only the power is reported back and the range of this field is from
1(2ms) to 9(512ms) */ 1(2ms) to 9(512ms) */
@@ -375,7 +381,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -386,7 +395,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file audio_desc.h * @file audio_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb audio descriptor header file * @brief usb audio descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -0,0 +1,92 @@
/**
**************************************************************************
* @file audio_conf.h
* @version v2.0.2
* @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 AT32F413_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

View File

@@ -0,0 +1,846 @@
/**
**************************************************************************
* @file audio_class.c
* @version v2.0.2
* @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 AT32F413_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;
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@@ -0,0 +1,170 @@
/**
**************************************************************************
* @file audio_class.h
* @version v2.0.2
* @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 AT32F413_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

View File

@@ -0,0 +1,786 @@
/**
**************************************************************************
* @file audio_desc.c
* @version v2.0.2
* @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 AT32F413_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;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@@ -0,0 +1,266 @@
/**
**************************************************************************
* @file audio_desc.h
* @version v2.0.2
* @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 AT32F413_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

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_class.c * @file cdc_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc class type * @brief usb cdc class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_class.h * @file cdc_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc class file * @brief usb cdc class file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_desc.c * @file cdc_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc device descriptor * @brief usb cdc device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -77,7 +77,10 @@ usbd_desc_handler desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -187,7 +193,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -198,7 +207,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_desc.h * @file cdc_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc descriptor header file * @brief usb cdc descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_keyboard_class.c * @file cdc_keyboard_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc and keyboard class type * @brief usb cdc and keyboard class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -66,7 +66,7 @@ static uint8_t g_req;
static uint16_t g_len, g_rxlen; static uint16_t g_len, g_rxlen;
__IO uint8_t g_tx_completed = 1, g_rx_completed = 0; __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 #define SHIFT 0x80
const unsigned char _asciimap[128] = const unsigned char _asciimap[128] =

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_keyboard_class.h * @file cdc_keyboard_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc and keyboard class file * @brief usb cdc and keyboard class file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -106,7 +106,7 @@ typedef struct
* @{ * @{
*/ */
extern usbd_class_handler cdc_keyboard_class_handler; 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); 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); 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); usb_sts_type class_send_report(void *udev, uint8_t *report, uint16_t len);

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_keyboard_desc.c * @file cdc_keyboard_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc and keyboard device descriptor * @brief usb cdc and keyboard device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -76,7 +76,10 @@ usbd_desc_handler cdc_keyboard_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -101,7 +104,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -232,7 +238,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb hid descriptor * @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 */ 0x09, /* bLength: size of HID descriptor in bytes */
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */ 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 * @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) 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard) 0x09, 0x06, // USAGE (Keyboard)
@@ -286,7 +298,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -297,7 +312,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file cdc_keyboard_desc.h * @file cdc_keyboard_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb cdc and keyboard descriptor header file * @brief usb cdc and keyboard descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file custom_hid_class.c * @file custom_hid_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb custom hid class type * @brief usb custom hid class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file custom_hid_class.h * @file custom_hid_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb custom hid header file * @brief usb custom hid header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file custom_hid_desc.c * @file custom_hid_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid device descriptor * @brief usb hid device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -77,7 +77,10 @@ usbd_desc_handler hid_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -155,7 +161,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb hid report descriptor * @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) */ 0x06, 0xFF, 0x00, /* USAGE_PAGE(Vendor Page:0xFF00) */
0x09, 0x01, /* USAGE (Demo Kit) */ 0x09, 0x01, /* USAGE (Demo Kit) */
@@ -250,7 +259,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
/** /**
* @brief usb hid descriptor * @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 */ 0x09, /* bLength: size of HID descriptor in bytes */
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */ HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
@@ -267,7 +279,10 @@ uint8_t g_hid_usb_desc[9] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -278,7 +293,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file custom_hid_desc.h * @file custom_hid_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb custom hid descriptor header file * @brief usb custom hid descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file hid_iap_class.c * @file hid_iap_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid iap class type * @brief usb hid iap class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file hid_iap_class.h * @file hid_iap_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid iap header file * @brief usb hid iap header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file hid_iap_desc.c * @file hid_iap_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid device descriptor * @brief usb hid device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -77,7 +77,10 @@ usbd_desc_handler hid_iap_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -155,7 +161,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb hid report descriptor * @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) */ 0x06, 0xFF, 0x00, /* USAGE_PAGE(Vendor Page:0xFF00) */
0x09, 0x01, /* USAGE (Demo Kit) */ 0x09, 0x01, /* USAGE (Demo Kit) */
@@ -183,7 +192,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
/** /**
* @brief usb hid descriptor * @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 */ 0x09, /* bLength: size of HID descriptor in bytes */
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */ HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
@@ -200,7 +212,10 @@ uint8_t g_hid_usb_desc[9] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -211,7 +226,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file hid_iap_desc.h * @file hid_iap_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid descriptor header file * @brief usb hid descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file keyboard_class.c * @file keyboard_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid keyboard class type * @brief usb hid keyboard class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -55,9 +55,9 @@ static uint32_t hid_protocol = 0;
static uint32_t hid_set_idle = 0; static uint32_t hid_set_idle = 0;
static uint32_t alt_setting = 0; static uint32_t alt_setting = 0;
static uint8_t hid_state; 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 hid_set_report[64];
uint8_t g_u8tx_completed = 0; __IO uint8_t g_u8tx_completed = 0;
#define SHIFT 0x80 #define SHIFT 0x80
const unsigned char _asciimap[128] = const unsigned char _asciimap[128] =

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file keyboard_class.h * @file keyboard_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid keyboard header file * @brief usb hid keyboard header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -86,7 +86,7 @@ extern "C" {
* @{ * @{
*/ */
extern usbd_class_handler keyboard_class_handler; 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); 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); void usb_hid_keyboard_send_char(void *udev, uint8_t ascii_code);

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file keyboard_desc.c * @file keyboard_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid keyboard device descriptor * @brief usb hid keyboard device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -77,7 +77,10 @@ usbd_desc_handler keyboard_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -147,7 +153,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb mouse report descriptor * @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) 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard) 0x09, 0x06, // USAGE (Keyboard)
@@ -186,7 +195,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
/** /**
* @brief usb hid descriptor * @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 */ 0x09, /* bLength: size of HID descriptor in bytes */
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */ HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
@@ -203,7 +215,10 @@ uint8_t g_hid_usb_desc[9] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -214,7 +229,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file keyboard_desc.h * @file keyboard_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb keyboard descriptor header file * @brief usb keyboard descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file mouse_class.c * @file mouse_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid mouse class type * @brief usb hid mouse class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -55,7 +55,7 @@ static uint32_t hid_protocol = 0;
static uint32_t hid_set_idle = 0; static uint32_t hid_set_idle = 0;
static uint32_t alt_setting = 0; static uint32_t alt_setting = 0;
static uint8_t hid_state; 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 hid_set_report[64];
/* usb device class handler */ /* usb device class handler */

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file mouse_class.h * @file mouse_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid mouse header file * @brief usb hid mouse header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file mouse_desc.c * @file mouse_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb hid mouse device descriptor * @brief usb hid mouse device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -77,7 +77,10 @@ usbd_desc_handler mouse_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -102,7 +105,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -147,7 +153,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb mouse report descriptor * @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, 0x05,0x01,
0x09,0x02, 0x09,0x02,
@@ -200,7 +209,10 @@ uint8_t g_usbd_hid_report[USBD_HID_SIZ_REPORT_DESC] =
/** /**
* @brief usb hid descriptor * @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 */ 0x09, /* bLength: size of HID descriptor in bytes */
HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */ HID_CLASS_DESC_HID, /* bDescriptorType: HID descriptor type */
@@ -217,7 +229,10 @@ uint8_t g_hid_usb_desc[9] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -228,7 +243,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file mouse_desc.h * @file mouse_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb mouse descriptor header file * @brief usb mouse descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_bot_scsi.c * @file msc_bot_scsi.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb mass storage bulk-only transport and scsi command * @brief usb mass storage bulk-only transport and scsi command
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -49,7 +49,10 @@ csw_type csw_struct =
CSW_BCSWSTATUS_PASS, 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, 0x00,
0x00, 0x00,
@@ -57,7 +60,10 @@ uint8_t page00_inquiry_data[] = {
0x00, 0x00,
}; };
sense_type sense_data = #if defined ( __ICCARM__ ) /* iar compiler */
#pragma data_alignment=4
#endif
ALIGNED_HEAD sense_type sense_data ALIGNED_TAIL =
{ {
0x70, 0x70,
0x00, 0x00,
@@ -70,8 +76,10 @@ sense_type sense_data =
0x00000000 0x00000000
}; };
#if defined ( __ICCARM__ ) /* iar compiler */
uint8_t mode_sense6_data[8] = #pragma data_alignment=4
#endif
ALIGNED_HEAD uint8_t mode_sense6_data[8] ALIGNED_TAIL =
{ {
0x00, 0x00,
0x00, 0x00,
@@ -83,7 +91,10 @@ uint8_t mode_sense6_data[8] =
0x00 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, 0x00,
0x06, 0x06,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_bot_scsi.h * @file msc_bot_scsi.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb mass storage bulk-only transport and scsi command header file * @brief usb mass storage bulk-only transport and scsi command header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -194,7 +194,7 @@ typedef struct
{ {
uint8_t msc_state; uint8_t msc_state;
uint8_t bot_status; uint8_t bot_status;
uint8_t max_lun; uint32_t max_lun;
uint32_t blk_nbr[MSC_SUPPORT_MAX_LUN]; uint32_t blk_nbr[MSC_SUPPORT_MAX_LUN];
uint32_t blk_size[MSC_SUPPORT_MAX_LUN]; uint32_t blk_size[MSC_SUPPORT_MAX_LUN];

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_class.c * @file msc_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb msc class type * @brief usb msc class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -130,7 +130,7 @@ usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup)
switch(setup->bRequest) switch(setup->bRequest)
{ {
case MSC_REQ_GET_MAX_LUN: 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; break;
case MSC_REQ_BO_RESET: case MSC_REQ_BO_RESET:
bot_scsi_reset(udev); bot_scsi_reset(udev);

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_class.h * @file msc_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb msc class file * @brief usb msc class file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_desc.c * @file msc_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb msc device descriptor * @brief usb msc device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -78,7 +78,10 @@ usbd_desc_handler msc_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -146,7 +152,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -157,7 +166,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file msc_desc.h * @file msc_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb msc descriptor header file * @brief usb msc descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file printer_class.c * @file printer_class.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb printer class type * @brief usb printer class type
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * 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' ,' ', 'M', 'F', 'G',':','A','r','t','e', 'r', 'y' ,' ',
'C','M', 'D', ':', 'E', 'S', 'C', 'P', 'O', 'S',' ', '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]; uint8_t g_printer_data[USBD_OUT_MAXPACKET_SIZE];

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file printer_class.h * @file printer_class.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb printer class file * @brief usb printer class file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file printer_desc.c * @file printer_desc.c
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb printer device descriptor * @brief usb printer device descriptor
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer
@@ -78,7 +78,10 @@ usbd_desc_handler printer_desc_handler =
/** /**
* @brief usb device standard descriptor * @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_DEVICE_DESC_LEN, /* bLength */
USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */
@@ -103,7 +106,10 @@ uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] =
/** /**
* @brief usb configuration standard descriptor * @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_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */
USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */
@@ -146,7 +152,10 @@ uint8_t g_usbd_configuration[USBD_CONFIG_DESC_SIZE] =
/** /**
* @brief usb string lang id * @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, USBD_SIZ_STRING_LANGID,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,
@@ -157,7 +166,10 @@ uint8_t g_string_lang_id[USBD_SIZ_STRING_LANGID] =
/** /**
* @brief usb string serial * @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, USBD_SIZ_STRING_SERIAL,
USB_DESCIPTOR_TYPE_STRING, USB_DESCIPTOR_TYPE_STRING,

View File

@@ -1,8 +1,8 @@
/** /**
************************************************************************** **************************************************************************
* @file printer_desc.h * @file printer_desc.h
* @version v2.0.0 * @version v2.0.2
* @date 2021-11-26 * @date 2021-12-31
* @brief usb printer descriptor header file * @brief usb printer descriptor header file
************************************************************************** **************************************************************************
* Copyright notice & Disclaimer * Copyright notice & Disclaimer

Some files were not shown because too many files have changed in this diff Show More