diff --git a/demo/audio_v1_mic_multichan_template.c b/demo/audio_v1_mic_multichan_template.c index 18797f9e..24f9fe05 100644 --- a/demo/audio_v1_mic_multichan_template.c +++ b/demo/audio_v1_mic_multichan_template.c @@ -143,6 +143,11 @@ const uint8_t audio_descriptor[] = { 0x00 }; +void usbd_configure_done_callback(void) +{ + /* no out ep, do nothing */ +} + volatile bool tx_flag = 0; void usbd_audio_open(uint8_t intf) @@ -160,7 +165,7 @@ static usbd_class_t audio_class; static usbd_interface_t audio_control_intf; static usbd_interface_t audio_stream_intf; -void usbd_audio_iso_callback(uint8_t ep) +void usbd_audio_iso_callback(uint8_t ep, uint32_t nbytes) { } @@ -182,7 +187,6 @@ void audio_init() void audio_test() { - while (1) { if (tx_flag) { } diff --git a/demo/audio_v1_mic_speaker_multichan_template.c b/demo/audio_v1_mic_speaker_multichan_template.c index 1f1fadd1..0a34c038 100644 --- a/demo/audio_v1_mic_speaker_multichan_template.c +++ b/demo/audio_v1_mic_speaker_multichan_template.c @@ -36,7 +36,7 @@ AUDIO_AS_DESCRIPTOR_INIT_LEN(1) + \ AUDIO_AS_DESCRIPTOR_INIT_LEN(1)) -#define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) + \ +#define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) + \ AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC + \ AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(2, 1) + \ AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC + \ @@ -166,18 +166,19 @@ static usbd_interface_t audio_stream_intf2; #endif USB_MEM_ALIGNX uint8_t out_buffer[AUDIO_OUT_EP_MPS]; -uint32_t actual_read_length = 0; -void usbd_audio_out_callback(uint8_t ep) +void usbd_configure_done_callback(void) { - if (usbd_ep_read(ep, out_buffer, AUDIO_OUT_EP_MPS, &actual_read_length) < 0) { - USB_LOG_RAW("Read DATA Packet failed\r\n"); - usbd_ep_set_stall(ep); - return; - } + /* setup first out ep read transfer */ + usbd_ep_start_read(AUDIO_OUT_EP, out_buffer, AUDIO_OUT_EP_MPS); } -void usbd_audio_in_callback(uint8_t ep) +void usbd_audio_out_callback(uint8_t ep, uint32_t bytes) +{ + +} + +void usbd_audio_in_callback(uint8_t ep, uint32_t bytes) { } diff --git a/demo/audio_v2_mic_multichan_template.c b/demo/audio_v2_mic_multichan_template.c index fc09d8e2..04890d69 100644 --- a/demo/audio_v2_mic_multichan_template.c +++ b/demo/audio_v2_mic_multichan_template.c @@ -14,7 +14,7 @@ #define AUDIO_IN_EP 0x01 -#define AUDIO_FREQ 48000 +#define AUDIO_FREQ 48000 #define HALF_WORD_BYTES 2 //2 half word (one channel) #define SAMPLE_BITS 16 //16 bit per channel @@ -146,6 +146,7 @@ const uint8_t audio_descriptor[] = { #endif 0x00 }; + volatile bool tx_flag = 0; void usbd_audio_open(uint8_t intf) @@ -163,12 +164,17 @@ static usbd_class_t audio_class; static usbd_interface_t audio_control_intf; static usbd_interface_t audio_stream_intf; -void usbd_audio_iso_callback(uint8_t ep) +void usbd_configure_done_callback(void) +{ + /* no out ep, do nothing */ +} + +void usbd_audio_iso_in_callback(uint8_t ep, uint32_t nbytes) { } static usbd_endpoint_t audio_in_ep = { - .ep_cb = usbd_audio_iso_callback, + .ep_cb = usbd_audio_iso_in_callback, .ep_addr = AUDIO_IN_EP }; diff --git a/demo/audio_v2_mic_speaker_multichan_template.c b/demo/audio_v2_mic_speaker_multichan_template.c index 2d55a4cd..4b2909e0 100644 --- a/demo/audio_v2_mic_speaker_multichan_template.c +++ b/demo/audio_v2_mic_speaker_multichan_template.c @@ -13,9 +13,9 @@ #endif #define AUDIO_OUT_EP 0x02 -#define AUDIO_IN_EP 0x81 +#define AUDIO_IN_EP 0x81 -#define AUDIO_FREQ 48000 +#define AUDIO_FREQ 48000 #define HALF_WORD_BYTES 2 //2 half word (one channel) #define SAMPLE_BITS 16 //16 bit per channel @@ -233,13 +233,37 @@ void usbd_audio_set_sampling_freq(uint8_t entity_id, uint8_t ep_ch, uint32_t sam static usbd_class_t audio_class; static usbd_interface_t audio_control_intf; static usbd_interface_t audio_stream_intf; +static usbd_interface_t audio_stream_intf2; -void usbd_audio_iso_callback(uint8_t ep) +#ifdef CONFIG_USB_HS +#define AUDIO_OUT_EP_MPS 512 +#else +#define AUDIO_OUT_EP_MPS 64 +#endif + +USB_MEM_ALIGNX uint8_t out_buffer[AUDIO_OUT_EP_MPS]; + +void usbd_configure_done_callback(void) +{ + /* setup first out ep read transfer */ + usbd_ep_start_read(AUDIO_OUT_EP, out_buffer, AUDIO_OUT_EP_MPS); +} + +void usbd_audio_iso_out_callback(uint8_t ep, uint32_t nbytes) { } +void usbd_audio_iso_in_callback(uint8_t ep, uint32_t nbytes) +{ +} + +static usbd_endpoint_t audio_out_ep = { + .ep_cb = usbd_audio_iso_out_callback, + .ep_addr = AUDIO_OUT_EP +}; + static usbd_endpoint_t audio_in_ep = { - .ep_cb = usbd_audio_iso_callback, + .ep_cb = usbd_audio_iso_in_callback, .ep_addr = AUDIO_IN_EP }; @@ -256,7 +280,6 @@ void audio_init() usbd_audio_add_entity(0x05, AUDIO_CONTROL_CLOCK_SOURCE); usbd_audio_add_entity(0x07, AUDIO_CONTROL_FEATURE_UNIT); - usbd_initialize(); } diff --git a/demo/audio_v2_speaker_multichan_template.c b/demo/audio_v2_speaker_multichan_template.c index bd5cfc44..c1c5fe41 100644 --- a/demo/audio_v2_speaker_multichan_template.c +++ b/demo/audio_v2_speaker_multichan_template.c @@ -163,12 +163,26 @@ static usbd_class_t audio_class; static usbd_interface_t audio_control_intf; static usbd_interface_t audio_stream_intf; -void usbd_audio_iso_callback(uint8_t ep) +#ifdef CONFIG_USB_HS +#define AUDIO_OUT_EP_MPS 512 +#else +#define AUDIO_OUT_EP_MPS 64 +#endif + +USB_MEM_ALIGNX uint8_t out_buffer[AUDIO_OUT_EP_MPS]; + +void usbd_configure_done_callback(void) +{ + /* setup first out ep read transfer */ + usbd_ep_start_read(AUDIO_OUT_EP, out_buffer, AUDIO_OUT_EP_MPS); +} + +void usbd_audio_iso_out_callback(uint8_t ep, uint32_t nbytes) { } -static usbd_endpoint_t audio_in_ep = { - .ep_cb = usbd_audio_iso_callback, +static usbd_endpoint_t audio_out_ep = { + .ep_cb = usbd_audio_iso_out_callback, .ep_addr = AUDIO_OUT_EP }; @@ -177,7 +191,7 @@ void audio_init() usbd_desc_register(audio_descriptor); usbd_audio_add_interface(&audio_class, &audio_control_intf); usbd_audio_add_interface(&audio_class, &audio_stream_intf); - usbd_interface_add_endpoint(&audio_stream_intf, &audio_in_ep); + usbd_interface_add_endpoint(&audio_stream_intf, &audio_out_ep); usbd_audio_add_entity(0x01, AUDIO_CONTROL_CLOCK_SOURCE); usbd_audio_add_entity(0x03, AUDIO_CONTROL_FEATURE_UNIT); diff --git a/demo/hid_keyboard_template.c b/demo/hid_keyboard_template.c index 6f892fb7..b477c781 100644 --- a/demo/hid_keyboard_template.c +++ b/demo/hid_keyboard_template.c @@ -172,6 +172,11 @@ static const uint8_t hid_keyboard_report_desc[HID_KEYBOARD_REPORT_DESC_SIZE] = { 0xc0 // END_COLLECTION }; +void usbd_configure_done_callback(void) +{ + /* no out ep, do nothing */ +} + static usbd_class_t hid_class; static usbd_interface_t hid_intf; @@ -179,7 +184,7 @@ static usbd_interface_t hid_intf; #define HID_STATE_BUSY 1 /*!< hid state ! Data can be sent only when state is idle */ -uint8_t hid_state = HID_STATE_IDLE; +static uint8_t hid_state = HID_STATE_IDLE; void usbd_hid_int_callback(uint8_t ep, uint32_t nbytes) { diff --git a/demo/hid_mouse_template.c b/demo/hid_mouse_template.c index c05bb41e..9e443712 100644 --- a/demo/hid_mouse_template.c +++ b/demo/hid_mouse_template.c @@ -200,6 +200,11 @@ static struct hid_mouse mouse_cfg; /*!< hid state ! Data can be sent only when state is idle */ static uint8_t hid_state = HID_STATE_IDLE; +void usbd_configure_done_callback(void) +{ + /* no out ep, do nothing */ +} + /* function ------------------------------------------------------------------*/ static void usbd_hid_int_callback(uint8_t ep, uint32_t nbytes) { diff --git a/demo/hid_msc_template.c b/demo/hid_msc_template.c deleted file mode 100644 index de783205..00000000 --- a/demo/hid_msc_template.c +++ /dev/null @@ -1,312 +0,0 @@ -#include "usbd_core.h" -#include "usbd_msc.h" -#include "usbd_hid.h" - -#define MSC_IN_EP 0x81 -#define MSC_OUT_EP 0x02 - -/*!< endpoint address */ -#define HID_INT_EP 0x83 -#define HID_INT_EP_SIZE 8 -#define HID_INT_EP_INTERVAL 10 - -#define USBD_VID 0xFFFF -#define USBD_PID 0xFFFF -#define USBD_MAX_POWER 100 -#define USBD_LANGID_STRING 1033 - -/*!< report descriptor size */ -#define HID_MOUSE_REPORT_DESC_SIZE 74 - -#define USB_CONFIG_SIZE (9 + MSC_DESCRIPTOR_LEN + 25) - -const uint8_t hid_msc_descriptor[] = { - USB_DEVICE_DESCRIPTOR_INIT(USB_2_0, 0x00, 0x00, 0x00, USBD_VID, USBD_PID, 0x0200, 0x01), - USB_CONFIG_DESCRIPTOR_INIT(USB_CONFIG_SIZE, 0x02, 0x01, USB_CONFIG_BUS_POWERED, USBD_MAX_POWER), - MSC_DESCRIPTOR_INIT(0x00, MSC_OUT_EP, MSC_IN_EP, 0x02), - /************** Descriptor of Joystick Mouse interface ****************/ - /* 09 */ - 0x09, /* bLength: Interface Descriptor size */ - USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */ - 0x01, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x01, /* bNumEndpoints */ - 0x03, /* bInterfaceClass: HID */ - 0x01, /* bInterfaceSubClass : 1=BOOT, 0=no boot */ - 0x02, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */ - 0, /* iInterface: Index of string descriptor */ - /******************** Descriptor of Joystick Mouse HID ********************/ - /* 18 */ - 0x09, /* bLength: HID Descriptor size */ - HID_DESCRIPTOR_TYPE_HID, /* bDescriptorType: HID */ - 0x11, /* bcdHID: HID Class Spec release number */ - 0x01, - 0x00, /* bCountryCode: Hardware target country */ - 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */ - 0x22, /* bDescriptorType */ - HID_MOUSE_REPORT_DESC_SIZE, /* wItemLength: Total length of Report descriptor */ - 0x00, - /******************** Descriptor of Mouse endpoint ********************/ - /* 27 */ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType: */ - HID_INT_EP, /* bEndpointAddress: Endpoint Address (IN) */ - 0x03, /* bmAttributes: Interrupt endpoint */ - HID_INT_EP_SIZE, /* wMaxPacketSize: 4 Byte max */ - 0x00, - HID_INT_EP_INTERVAL, /* bInterval: Polling Interval */ - /////////////////////////////////////// - /// string0 descriptor - /////////////////////////////////////// - USB_LANGID_INIT(USBD_LANGID_STRING), - /////////////////////////////////////// - /// string1 descriptor - /////////////////////////////////////// - 0x14, /* bLength */ - USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */ - 'C', 0x00, /* wcChar0 */ - 'h', 0x00, /* wcChar1 */ - 'e', 0x00, /* wcChar2 */ - 'r', 0x00, /* wcChar3 */ - 'r', 0x00, /* wcChar4 */ - 'y', 0x00, /* wcChar5 */ - 'U', 0x00, /* wcChar6 */ - 'S', 0x00, /* wcChar7 */ - 'B', 0x00, /* wcChar8 */ - /////////////////////////////////////// - /// string2 descriptor - /////////////////////////////////////// - 0x26, /* bLength */ - USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */ - 'C', 0x00, /* wcChar0 */ - 'h', 0x00, /* wcChar1 */ - 'e', 0x00, /* wcChar2 */ - 'r', 0x00, /* wcChar3 */ - 'r', 0x00, /* wcChar4 */ - 'y', 0x00, /* wcChar5 */ - 'U', 0x00, /* wcChar6 */ - 'S', 0x00, /* wcChar7 */ - 'B', 0x00, /* wcChar8 */ - ' ', 0x00, /* wcChar9 */ - 'H', 0x00, /* wcChar10 */ - '-', 0x00, /* wcChar11 */ - 'M', 0x00, /* wcChar12 */ - ' ', 0x00, /* wcChar13 */ - 'D', 0x00, /* wcChar14 */ - 'E', 0x00, /* wcChar15 */ - 'M', 0x00, /* wcChar16 */ - 'O', 0x00, /* wcChar17 */ - /////////////////////////////////////// - /// string3 descriptor - /////////////////////////////////////// - 0x16, /* bLength */ - USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */ - '2', 0x00, /* wcChar0 */ - '0', 0x00, /* wcChar1 */ - '2', 0x00, /* wcChar2 */ - '2', 0x00, /* wcChar3 */ - '1', 0x00, /* wcChar4 */ - '2', 0x00, /* wcChar5 */ - '3', 0x00, /* wcChar6 */ - '4', 0x00, /* wcChar7 */ - '5', 0x00, /* wcChar8 */ - '6', 0x00, /* wcChar9 */ -#ifdef CONFIG_USB_HS - /////////////////////////////////////// - /// device qualifier descriptor - /////////////////////////////////////// - 0x0a, - USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, - 0x40, - 0x01, - 0x00, -#endif - 0x00 -}; - -#define BLOCK_SIZE 512 -#define BLOCK_COUNT 10 - -typedef struct -{ - uint8_t BlockSpace[BLOCK_SIZE]; -} BLOCK_TYPE; - -BLOCK_TYPE mass_block[BLOCK_COUNT]; - -void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size) -{ - *block_num = 1000; //Pretend having so many buffer,not has actually. - *block_size = BLOCK_SIZE; -} -int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length) -{ - if (sector < 10) - memcpy(buffer, mass_block[sector].BlockSpace, length); - return 0; -} - -int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length) -{ - if (sector < 10) - memcpy(mass_block[sector].BlockSpace, buffer, length); - return 0; -} - -/*!< hid mouse report descriptor */ -static const uint8_t hid_mouse_report_desc[HID_MOUSE_REPORT_DESC_SIZE] = { - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x02, // USAGE (Mouse) - 0xA1, 0x01, // COLLECTION (Application) - 0x09, 0x01, // USAGE (Pointer) - - 0xA1, 0x00, // COLLECTION (Physical) - 0x05, 0x09, // USAGE_PAGE (Button) - 0x19, 0x01, // USAGE_MINIMUM (Button 1) - 0x29, 0x03, // USAGE_MAXIMUM (Button 3) - - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x95, 0x03, // REPORT_COUNT (3) - 0x75, 0x01, // REPORT_SIZE (1) - - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0x95, 0x01, // REPORT_COUNT (1) - 0x75, 0x05, // REPORT_SIZE (5) - 0x81, 0x01, // INPUT (Cnst,Var,Abs) - - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x30, // USAGE (X) - 0x09, 0x31, // USAGE (Y) - 0x09, 0x38, - - 0x15, 0x81, // LOGICAL_MINIMUM (-127) - 0x25, 0x7F, // LOGICAL_MAXIMUM (127) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x03, // REPORT_COUNT (2) - - 0x81, 0x06, // INPUT (Data,Var,Rel) - 0xC0, 0x09, - 0x3c, 0x05, - 0xff, 0x09, - - 0x01, 0x15, - 0x00, 0x25, - 0x01, 0x75, - 0x01, 0x95, - - 0x02, 0xb1, - 0x22, 0x75, - 0x06, 0x95, - 0x01, 0xb1, - - 0x01, 0xc0 // END_COLLECTION -}; - -/*!< mouse report struct */ -struct hid_mouse { - uint8_t buttons; - int8_t x; - int8_t y; - int8_t wheel; -}; - -/*!< class */ -static usbd_class_t hid_class; - -/*!< interface */ -static usbd_interface_t hid_intf; - -/*!< mouse report */ -static struct hid_mouse mouse_cfg; - -#define HID_STATE_IDLE 0 -#define HID_STATE_BUSY 1 - -/*!< hid state ! Data can be sent only when state is idle */ -uint8_t hid_state = HID_STATE_IDLE; - -/* function ------------------------------------------------------------------*/ -static void usbd_hid_int_callback(uint8_t ep) -{ - /*!< endpoint call back */ - /*!< transfer successfully */ - if (hid_state == HID_STATE_BUSY) { - /*!< update the state */ - hid_state = HID_STATE_IDLE; - } -} - -/*!< endpoint call back */ -static usbd_endpoint_t hid_in_ep = { - .ep_cb = usbd_hid_int_callback, - .ep_addr = HID_INT_EP -}; - -/* function ------------------------------------------------------------------*/ -/** - * @brief msc ram init - * @pre none - * @param[in] none - * @retval none - */ -void hid_msc_descriptor_init(void) -{ - usbd_desc_register(hid_msc_descriptor); - usbd_msc_class_init(MSC_OUT_EP, MSC_IN_EP); - /*!< add interface */ - usbd_hid_add_interface(&hid_class, &hid_intf); - /*!< interface add endpoint */ - usbd_interface_add_endpoint(&hid_intf, &hid_in_ep); - /*!< register report descriptor */ - usbd_hid_report_descriptor_register(1, hid_mouse_report_desc, HID_MOUSE_REPORT_DESC_SIZE); - - /*!< init mouse report data */ - mouse_cfg.buttons = 0; - mouse_cfg.wheel = 0; - mouse_cfg.x = 0; - mouse_cfg.y = 0; - - usbd_initialize(); -} - -/** - * @brief device send report to host - * @pre none - * @param[in] ep endpoint address - * @param[in] data Points to the data buffer waiting to be sent - * @param[in] len Length of data to be sent - * @retval none - */ -void hid_mouse_send_report(uint8_t ep, uint8_t *data, uint8_t len) -{ - if (usb_device_is_configured()) { - if (hid_state == HID_STATE_IDLE) { - /*!< updata the state */ - hid_state = HID_STATE_BUSY; - /*!< write buffer */ - usbd_ep_write(ep, data, len, NULL); - } - } -} - -/** - * @brief hid mouse test - * @pre none - * @param[in] none - * @retval none - */ -void hid_mouse_send_report_test(void) -{ - /*!< remove mouse pointer */ - mouse_cfg.x += 10; - mouse_cfg.y = 0; - /*!< send repotr to host */ - hid_mouse_send_report(HID_INT_EP, (uint8_t *)&mouse_cfg, 4); - /*!< delay 1000ms */ -} diff --git a/demo/msc_ram_template.c b/demo/msc_ram_template.c index 1240c15e..e6698158 100644 --- a/demo/msc_ram_template.c +++ b/demo/msc_ram_template.c @@ -89,6 +89,11 @@ const uint8_t msc_ram_descriptor[] = { 0x00 }; +void usbd_configure_done_callback(void) +{ + /* do nothing */ +} + #define BLOCK_SIZE 512 #define BLOCK_COUNT 10 diff --git a/demo/winusb1.0_template.c b/demo/winusb1.0_template.c index 704f61de..b211e237 100644 --- a/demo/winusb1.0_template.c +++ b/demo/winusb1.0_template.c @@ -192,6 +192,12 @@ const uint8_t winusb_descriptor[] = { uint8_t read_buffer[2048]; +void usbd_configure_done_callback(void) +{ + /* setup first out ep read transfer */ + usbd_ep_start_read(WINUSB_OUT_EP, read_buffer, 2048); +} + void usbd_winusb_out(uint8_t ep, uint32_t nbytes) { }