diff --git a/platform/samd11/usb.c b/platform/samd11/usb.c index cf10500..881ace6 100644 --- a/platform/samd11/usb.c +++ b/platform/samd11/usb.c @@ -28,6 +28,7 @@ /*- Includes ----------------------------------------------------------------*/ #include +#include #include #include "udc.h" #include "usb.h" @@ -115,18 +116,21 @@ void usb_handle_standard_request(usb_request_t *request) { const char *str = usb_strings[index]; int len = strlen(str); + int size = len*2 + 2; + alignas(4) uint8_t buf[size]; - memset(usb_string_descriptor_buffer, 0, sizeof(usb_string_descriptor_buffer)); - - usb_string_descriptor_buffer[0] = len*2 + 2; - usb_string_descriptor_buffer[1] = USB_STRING_DESCRIPTOR; + buf[0] = size; + buf[1] = USB_STRING_DESCRIPTOR; for (int i = 0; i < len; i++) - usb_string_descriptor_buffer[2 + i*2] = str[i]; + { + buf[2 + i*2] = str[i]; + buf[3 + i*2] = 0; + } - length = LIMIT(length, usb_string_descriptor_buffer[0]); + length = LIMIT(length, size); - udc_control_send(usb_string_descriptor_buffer, length); + udc_control_send(buf, length); } else { @@ -134,8 +138,10 @@ void usb_handle_standard_request(usb_request_t *request) } } else + { udc_control_stall(); - } break; + } + } break; case USB_CMD(OUT, DEVICE, STANDARD, SET_ADDRESS): { diff --git a/platform/samd11/usb_descriptors.c b/platform/samd11/usb_descriptors.c index 6126b36..b5936f4 100644 --- a/platform/samd11/usb_descriptors.c +++ b/platform/samd11/usb_descriptors.c @@ -148,5 +148,3 @@ const char *const usb_strings[] = [USB_STR_INTERFACE] = "Main Interface", }; -alignas(4) uint8_t usb_string_descriptor_buffer[64]; - diff --git a/platform/samd11/usb_descriptors.h b/platform/samd11/usb_descriptors.h index 2ab8b4b..b2fbb43 100644 --- a/platform/samd11/usb_descriptors.h +++ b/platform/samd11/usb_descriptors.h @@ -79,7 +79,6 @@ extern const usb_configuration_hierarchy_t usb_configuration_hierarchy; extern const uint8_t usb_hid_report_descriptor[33]; extern const usb_string_descriptor_zero_t usb_string_descriptor_zero; extern const char *const usb_strings[]; -extern uint8_t usb_string_descriptor_buffer[64]; #endif // _USB_DESCRIPTORS_H_ diff --git a/platform/samd21/main.c b/platform/samd21/main.c index 603654d..33d41d1 100644 --- a/platform/samd21/main.c +++ b/platform/samd21/main.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "samd21.h" #include "hal_gpio.h" @@ -43,8 +44,8 @@ #define APP_EP_RECV 2 /*- Variables ---------------------------------------------------------------*/ -ALIGNED(4) uint8_t app_request_buffer[DAP_CONFIG_PACKET_SIZE]; -ALIGNED(4) uint8_t app_response_buffer[DAP_CONFIG_PACKET_SIZE]; +alignas(4) uint8_t app_request_buffer[DAP_CONFIG_PACKET_SIZE]; +alignas(4) uint8_t app_response_buffer[DAP_CONFIG_PACKET_SIZE]; /*- Implementations ---------------------------------------------------------*/ diff --git a/platform/samd21/usb.c b/platform/samd21/usb.c index cf10500..e428256 100644 --- a/platform/samd21/usb.c +++ b/platform/samd21/usb.c @@ -28,6 +28,7 @@ /*- Includes ----------------------------------------------------------------*/ #include +#include #include #include "udc.h" #include "usb.h" @@ -115,18 +116,21 @@ void usb_handle_standard_request(usb_request_t *request) { const char *str = usb_strings[index]; int len = strlen(str); + int size = len*2 + 2; + alignas(4) uint8_t buf[size]; - memset(usb_string_descriptor_buffer, 0, sizeof(usb_string_descriptor_buffer)); - - usb_string_descriptor_buffer[0] = len*2 + 2; - usb_string_descriptor_buffer[1] = USB_STRING_DESCRIPTOR; + buf[0] = size; + buf[1] = USB_STRING_DESCRIPTOR; for (int i = 0; i < len; i++) - usb_string_descriptor_buffer[2 + i*2] = str[i]; + { + buf[2 + i*2] = str[i]; + buf[3 + i*2] = 0; + } - length = LIMIT(length, usb_string_descriptor_buffer[0]); + length = LIMIT(length, size); - udc_control_send(usb_string_descriptor_buffer, length); + udc_control_send(buf, length); } else { diff --git a/platform/samd21/usb_descriptors.c b/platform/samd21/usb_descriptors.c index 6736db5..b5e140b 100644 --- a/platform/samd21/usb_descriptors.c +++ b/platform/samd21/usb_descriptors.c @@ -28,11 +28,12 @@ /*- Includes ----------------------------------------------------------------*/ +#include #include "usb.h" #include "usb_descriptors.h" /*- Variables ---------------------------------------------------------------*/ -ALIGNED(4) const usb_device_descriptor_t usb_device_descriptor = +const alignas(4) usb_device_descriptor_t usb_device_descriptor = { .bLength = sizeof(usb_device_descriptor_t), .bDescriptorType = USB_DEVICE_DESCRIPTOR, @@ -50,7 +51,7 @@ ALIGNED(4) const usb_device_descriptor_t usb_device_descriptor = .bNumConfigurations = 1, }; -ALIGNED(4) const usb_configuration_hierarchy_t usb_configuration_hierarchy = +const alignas(4) usb_configuration_hierarchy_t usb_configuration_hierarchy = { .configuration = { @@ -109,7 +110,7 @@ ALIGNED(4) const usb_configuration_hierarchy_t usb_configuration_hierarchy = }, }; -ALIGNED(4) const uint8_t usb_hid_report_descriptor[33] = +const alignas(4) uint8_t usb_hid_report_descriptor[33] = { 0x06, 0x00, 0xff, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x01, // Usage (0x01) @@ -129,7 +130,7 @@ ALIGNED(4) const uint8_t usb_hid_report_descriptor[33] = 0xc0, // End Collection }; -ALIGNED(4) const usb_string_descriptor_zero_t usb_string_descriptor_zero = +const alignas(4) usb_string_descriptor_zero_t usb_string_descriptor_zero = { .bLength = sizeof(usb_string_descriptor_zero_t), .bDescriptorType = USB_STRING_DESCRIPTOR, @@ -145,5 +146,3 @@ const char *const usb_strings[] = [USB_STR_INTERFACE] = "Main Interface", }; -ALIGNED(4) uint8_t usb_string_descriptor_buffer[64]; - diff --git a/platform/samd21/usb_descriptors.h b/platform/samd21/usb_descriptors.h index 2ab8b4b..b2fbb43 100644 --- a/platform/samd21/usb_descriptors.h +++ b/platform/samd21/usb_descriptors.h @@ -79,7 +79,6 @@ extern const usb_configuration_hierarchy_t usb_configuration_hierarchy; extern const uint8_t usb_hid_report_descriptor[33]; extern const usb_string_descriptor_zero_t usb_string_descriptor_zero; extern const char *const usb_strings[]; -extern uint8_t usb_string_descriptor_buffer[64]; #endif // _USB_DESCRIPTORS_H_ diff --git a/platform/samd21/utils.h b/platform/samd21/utils.h index 60b8372..db6861a 100644 --- a/platform/samd21/utils.h +++ b/platform/samd21/utils.h @@ -30,8 +30,6 @@ #define _UTILS_H_ /*- Definitions -------------------------------------------------------------*/ -#define ALIGNED(a) __attribute__((__aligned__(a))) - #define PACK __attribute__((packed)) #define INLINE static inline __attribute__((always_inline))