update version to v2.1.7

This commit is contained in:
Artery-MCU
2025-08-05 10:24:08 +08:00
parent ee4796e775
commit 6dd65bdd62
122 changed files with 3730 additions and 14394 deletions

View File

@@ -229,13 +229,21 @@ void usbh_hch_in_handler(usbh_core_type *uhost, uint8_t chn)
{
uhost->urb_state[chn] = URB_NOTREADY;
}
usb_chh->hcchar_bit.chdis = FALSE;
usb_chh->hcchar_bit.chena = TRUE;
if(usb_chh->hcchar_bit.eptype == EPT_CONTROL_TYPE ||
usb_chh->hcchar_bit.eptype == EPT_BULK_TYPE)
{
usb_chh->hcchar_bit.chdis = FALSE;
usb_chh->hcchar_bit.chena = TRUE;
}
}
else if(uhost->hch[chn].state == HCH_NAK)
{
usb_chh->hcchar_bit.chdis = FALSE;
usb_chh->hcchar_bit.chena = TRUE;
if(usb_chh->hcchar_bit.eptype == EPT_CONTROL_TYPE ||
usb_chh->hcchar_bit.eptype == EPT_BULK_TYPE)
{
usb_chh->hcchar_bit.chdis = FALSE;
usb_chh->hcchar_bit.chena = TRUE;
}
uhost->urb_state[chn] = URB_NOTREADY;
}
usb_chh->hcint = USB_OTG_HC_CHHLTD_FLAG;

View File

@@ -480,32 +480,75 @@ static void audio_req_get_cur(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_type *paudio = (usb_audio_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio->g_audio_cur[0] = paudio->spk_mute;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
}
else
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio->g_audio_cur[0] = paudio->mic_mute;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio->g_audio_cur[0] = paudio->spk_mute;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio->g_audio_cur[0] = paudio->mic_mute;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
if(HBYTE(setup->wValue) == AUDIO_SAMPLING_FREQ_CONTROL)
{
if(setup->wIndex == USBD_AUDIO_MIC_IN_EPT)
{
*((uint32_t *)paudio->g_audio_cur) = paudio->mic_freq;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(setup->wIndex == USBD_AUDIO_SPK_OUT_EPT)
{
*((uint32_t *)paudio->g_audio_cur) = paudio->spk_freq;
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -534,19 +577,35 @@ static void audio_req_set_cur(void *udev, usb_setup_type *setup)
{
paudio->request_no = AUDIO_MUTE_CONTROL;
}
else
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
paudio->request_no = AUDIO_VOLUME_CONTROL;
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
paudio->enpd = setup->wIndex;
paudio->request_no = AUDIO_FREQ_SET_CONTROL;
if(HBYTE(setup->wValue) == AUDIO_SAMPLING_FREQ_CONTROL)
{
paudio->enpd = setup->wIndex;
paudio->request_no = AUDIO_FREQ_SET_CONTROL;
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
/**
@@ -559,15 +618,31 @@ static void audio_req_get_min(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_type *paudio = (usb_audio_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[0];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[0];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[0];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[0];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -581,15 +656,31 @@ static void audio_req_get_max(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_type *paudio = (usb_audio_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[1];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[1];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[1];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[1];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -603,15 +694,30 @@ static void audio_req_get_res(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_type *paudio = (usb_audio_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[2];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[2];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->spk_volume_limits[2];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio->g_audio_cur) = paudio->mic_volume_limits[2];
usbd_ctrl_send(pudev, paudio->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -668,7 +774,10 @@ static void audio_get_interface(void *udev, usb_setup_type *setup)
{
usbd_ctrl_send(pudev, (uint8_t *)&paudio->mic_alt_setting, 1);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}

View File

@@ -74,6 +74,7 @@ extern "C" {
#define AUDIO_MUTE_CONTROL 0x01
#define AUDIO_VOLUME_CONTROL 0x02
#define AUDIO_FREQ_SET_CONTROL 0x03
#define AUDIO_SAMPLING_FREQ_CONTROL 0x01
/**
* @brief audio descriptor type

View File

@@ -640,32 +640,75 @@ static void audio_req_get_cur(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_hid_type *paudio_hid = (usb_audio_hid_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio_hid->g_audio_cur[0] = paudio_hid->spk_mute;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
}
else
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio_hid->g_audio_cur[0] = paudio_hid->mic_mute;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio_hid->g_audio_cur[0] = paudio_hid->spk_mute;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
if(HBYTE(setup->wValue) == AUDIO_MUTE_CONTROL)
{
paudio_hid->g_audio_cur[0] = paudio_hid->mic_mute;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
if(HBYTE(setup->wValue) == AUDIO_SAMPLING_FREQ_CONTROL)
{
if(setup->wIndex == USBD_AUHID_AUDIO_MIC_IN_EPT)
{
*((uint32_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_freq;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(setup->wIndex == USBD_AUHID_AUDIO_SPK_OUT_EPT)
{
*((uint32_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_freq;
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -694,19 +737,35 @@ static void audio_req_set_cur(void *udev, usb_setup_type *setup)
{
paudio_hid->request_no = AUDIO_MUTE_CONTROL;
}
else
else if(HBYTE(setup->wValue) == AUDIO_VOLUME_CONTROL)
{
paudio_hid->request_no = AUDIO_VOLUME_CONTROL;
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
paudio_hid->enpd = setup->wIndex;
paudio_hid->request_no = AUDIO_FREQ_SET_CONTROL;
if(HBYTE(setup->wValue) == AUDIO_SAMPLING_FREQ_CONTROL)
{
paudio_hid->enpd = setup->wIndex;
paudio_hid->request_no = AUDIO_FREQ_SET_CONTROL;
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
/**
@@ -719,15 +778,31 @@ static void audio_req_get_min(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_hid_type *paudio_hid = (usb_audio_hid_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[0];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[0];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[0];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[0];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -741,15 +816,31 @@ static void audio_req_get_max(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_hid_type *paudio_hid = (usb_audio_hid_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[1];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[1];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[1];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[1];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -763,15 +854,31 @@ static void audio_req_get_res(void *udev, usb_setup_type *setup)
{
usbd_core_type *pudev = (usbd_core_type *)udev;
usb_audio_hid_type *paudio_hid = (usb_audio_hid_type *)pudev->class_handler->pdata;
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
switch(setup->bmRequestType & AUDIO_REQ_CONTROL_MASK)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[2];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[2];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
case AUDIO_REQ_CONTROL_INTERFACE:
if(HBYTE(setup->wIndex) == AUDIO_SPK_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->spk_volume_limits[2];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else if(HBYTE(setup->wIndex) == AUDIO_MIC_FEATURE_UNIT_ID)
{
*((uint16_t *)paudio_hid->g_audio_cur) = paudio_hid->mic_volume_limits[2];
usbd_ctrl_send(pudev, paudio_hid->g_audio_cur, setup->wLength);
}
else
{
usbd_ctrl_unsupport(pudev);
}
break;
case AUDIO_REQ_CONTROL_ENDPOINT:
usbd_ctrl_unsupport(pudev);
break;
default:
usbd_ctrl_unsupport(pudev);
break;
}
}
@@ -827,7 +934,10 @@ static void audio_get_interface(void *udev, usb_setup_type *setup)
{
usbd_ctrl_send(pudev, (uint8_t *)&paudio_hid->mic_alt_setting, 1);
}
else
{
usbd_ctrl_unsupport(pudev);
}
}
/**

View File

@@ -86,6 +86,7 @@ extern "C" {
#define AUDIO_MUTE_CONTROL 0x01
#define AUDIO_VOLUME_CONTROL 0x02
#define AUDIO_FREQ_SET_CONTROL 0x03
#define AUDIO_SAMPLING_FREQ_CONTROL 0x01
/**
* @brief audio descriptor type

View File

@@ -213,6 +213,7 @@ static usb_sts_type class_init_handler(void *udev)
usbd_ept_open(pudev, USBD_KEYBOARD_IN_EPT, EPT_INT_TYPE, USBD_KEYBOARD_IN_MAXPACKET_SIZE);
pkeyboard->g_u8tx_completed = 1;
pkeyboard->send_state = 0;
return status;
}
@@ -369,6 +370,7 @@ static usb_sts_type class_in_handler(void *udev, uint8_t ept_num)
trans next packet data
*/
pkeyboard->g_u8tx_completed = 1;
pkeyboard->send_state = 0;
return status;
}
@@ -442,11 +444,16 @@ static usb_sts_type class_event_handler(void *udev, usbd_event_type event)
*/
usb_sts_type usb_keyboard_class_send_report(void *udev, uint8_t *report, uint16_t len)
{
usb_sts_type status = USB_OK;
usb_sts_type status = USB_FAIL;
usbd_core_type *pudev = (usbd_core_type *)udev;
if(usbd_connect_state_get(pudev) == USB_CONN_STATE_CONFIGURED)
keyboard_type *pkeyboard = (keyboard_type *)pudev->class_handler->pdata;
if(usbd_connect_state_get(pudev) == USB_CONN_STATE_CONFIGURED && pkeyboard->send_state == 0)
{
pkeyboard->send_state = 1;
usbd_ept_send(pudev, USBD_KEYBOARD_IN_EPT, report, len);
status = USB_OK;
}
return status;
}

View File

@@ -71,6 +71,7 @@ typedef struct
__IO uint8_t hid_suspend_flag;
__IO uint8_t g_u8tx_completed;
uint8_t send_state;
uint8_t hid_state;
uint8_t temp;