Removed string descriptor buffer

This commit is contained in:
Alex Taradov 2018-09-17 18:17:07 -07:00
parent d43800a156
commit f809f06f2f
8 changed files with 33 additions and 29 deletions

View File

@ -28,6 +28,7 @@
/*- Includes ----------------------------------------------------------------*/
#include <stdbool.h>
#include <stdalign.h>
#include <string.h>
#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):
{

View File

@ -148,5 +148,3 @@ const char *const usb_strings[] =
[USB_STR_INTERFACE] = "Main Interface",
};
alignas(4) uint8_t usb_string_descriptor_buffer[64];

View File

@ -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_

View File

@ -30,6 +30,7 @@
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdalign.h>
#include <string.h>
#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 ---------------------------------------------------------*/

View File

@ -28,6 +28,7 @@
/*- Includes ----------------------------------------------------------------*/
#include <stdbool.h>
#include <stdalign.h>
#include <string.h>
#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
{

View File

@ -28,11 +28,12 @@
/*- Includes ----------------------------------------------------------------*/
#include <stdalign.h>
#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];

View File

@ -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_

View File

@ -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))