mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-01 23:29:28 +01:00
Parametric USB configuration for Arduino Due (experimental)
This commit is contained in:
parent
f8ec9418d1
commit
f8d32a0659
@ -8,9 +8,10 @@ arduino_due_x_dbg.upload.wait_for_upload_port=false
|
|||||||
arduino_due_x_dbg.upload.native_usb=false
|
arduino_due_x_dbg.upload.native_usb=false
|
||||||
arduino_due_x_dbg.build.mcu=cortex-m3
|
arduino_due_x_dbg.build.mcu=cortex-m3
|
||||||
arduino_due_x_dbg.build.f_cpu=84000000L
|
arduino_due_x_dbg.build.f_cpu=84000000L
|
||||||
|
arduino_due_x_dbg.build.usb_product="Arduino Due"
|
||||||
arduino_due_x_dbg.build.board=SAM_DUE
|
arduino_due_x_dbg.build.board=SAM_DUE
|
||||||
arduino_due_x_dbg.build.core=arduino
|
arduino_due_x_dbg.build.core=arduino
|
||||||
arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ -mthumb -DUSB_PID={build.pid} -DUSB_VID={build.vid} -DUSBCON
|
arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ -mthumb {build.usb_flags}
|
||||||
arduino_due_x_dbg.build.ldscript=linker_scripts/gcc/flash.ld
|
arduino_due_x_dbg.build.ldscript=linker_scripts/gcc/flash.ld
|
||||||
arduino_due_x_dbg.build.variant=arduino_due_x
|
arduino_due_x_dbg.build.variant=arduino_due_x
|
||||||
arduino_due_x_dbg.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
|
arduino_due_x_dbg.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
|
||||||
@ -26,9 +27,10 @@ arduino_due_x.upload.wait_for_upload_port=true
|
|||||||
arduino_due_x.upload.native_usb=true
|
arduino_due_x.upload.native_usb=true
|
||||||
arduino_due_x.build.mcu=cortex-m3
|
arduino_due_x.build.mcu=cortex-m3
|
||||||
arduino_due_x.build.f_cpu=84000000L
|
arduino_due_x.build.f_cpu=84000000L
|
||||||
|
arduino_due_x.build.usb_product="Arduino Due"
|
||||||
arduino_due_x.build.board=SAM_DUE
|
arduino_due_x.build.board=SAM_DUE
|
||||||
arduino_due_x.build.core=arduino
|
arduino_due_x.build.core=arduino
|
||||||
arduino_due_x.build.extra_flags=-D__SAM3X8E__ -mthumb -DUSB_PID={build.pid} -DUSB_VID={build.vid} -DUSBCON
|
arduino_due_x.build.extra_flags=-D__SAM3X8E__ -mthumb {build.usb_flags}
|
||||||
arduino_due_x.build.ldscript=linker_scripts/gcc/flash.ld
|
arduino_due_x.build.ldscript=linker_scripts/gcc/flash.ld
|
||||||
arduino_due_x.build.variant=arduino_due_x
|
arduino_due_x.build.variant=arduino_due_x
|
||||||
arduino_due_x.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
|
arduino_due_x.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
|
||||||
|
@ -47,8 +47,8 @@ static char isEndpointHalt = 0;
|
|||||||
//==================================================================
|
//==================================================================
|
||||||
|
|
||||||
extern const uint16_t STRING_LANGUAGE[];
|
extern const uint16_t STRING_LANGUAGE[];
|
||||||
extern const uint16_t STRING_IPRODUCT[];
|
extern const uint8_t STRING_PRODUCT[];
|
||||||
extern const uint16_t STRING_IMANUFACTURER[];
|
extern const uint8_t STRING_MANUFACTURER[];
|
||||||
extern const DeviceDescriptor USB_DeviceDescriptor;
|
extern const DeviceDescriptor USB_DeviceDescriptor;
|
||||||
extern const DeviceDescriptor USB_DeviceDescriptorA;
|
extern const DeviceDescriptor USB_DeviceDescriptorA;
|
||||||
|
|
||||||
@ -57,23 +57,25 @@ const uint16_t STRING_LANGUAGE[2] = {
|
|||||||
0x0409 // English
|
0x0409 // English
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t STRING_IPRODUCT[17] = {
|
#ifndef USB_PRODUCT
|
||||||
(3<<8) | (2+2*16),
|
// Use a hardcoded product name if none is provided
|
||||||
#if USB_PID == USB_PID_LEONARDO
|
#if USB_PID == USB_PID_DUE
|
||||||
'A','r','d','u','i','n','o',' ','L','e','o','n','a','r','d','o'
|
#define USB_PRODUCT "Arduino Due"
|
||||||
#elif USB_PID == USB_PID_MICRO
|
|
||||||
'A','r','d','u','i','n','o',' ','M','i','c','r','o',' ',' ',' '
|
|
||||||
#elif USB_PID == USB_PID_DUE
|
|
||||||
'A','r','d','u','i','n','o',' ','D','u','e',' ',' ',' ',' ',' '
|
|
||||||
#else
|
#else
|
||||||
#error "Need an USB PID"
|
#define USB_PRODUCT "USB IO Board"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t STRING_IMANUFACTURER[12] = {
|
const uint8_t STRING_PRODUCT[] = USB_PRODUCT;
|
||||||
(3<<8) | (2+2*11),
|
|
||||||
'A','r','d','u','i','n','o',' ','L','L','C'
|
#if USB_VID == 0x2341
|
||||||
};
|
#define USB_MANUFACTURER "Arduino LLC"
|
||||||
|
#elif !defined(USB_MANUFACTURER)
|
||||||
|
// Fall through to unknown if no manufacturer name was provided in a macro
|
||||||
|
#define USB_MANUFACTURER "Unknown"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint8_t STRING_MANUFACTURER[12] = USB_MANUFACTURER;
|
||||||
|
|
||||||
#ifdef CDC_ENABLED
|
#ifdef CDC_ENABLED
|
||||||
#define DEVICE_CLASS 0x02
|
#define DEVICE_CLASS 0x02
|
||||||
@ -241,6 +243,21 @@ int USBD_SendControl(uint8_t flags, const void* d, uint32_t len)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send a USB descriptor string. The string is stored as a
|
||||||
|
// plain ASCII string but is sent out as UTF-16 with the
|
||||||
|
// correct 2-byte prefix
|
||||||
|
static bool USB_SendStringDescriptor(const uint8_t *string, int wLength) {
|
||||||
|
uint16_t buff[64];
|
||||||
|
int l = 1;
|
||||||
|
wLength-=2;
|
||||||
|
while (*string && wLength>0) {
|
||||||
|
buff[l++] = (uint8_t)(*string++);
|
||||||
|
wLength-=2;
|
||||||
|
}
|
||||||
|
buff[0] = (3<<8) | (l*2);
|
||||||
|
return USBD_SendControl(0, (uint8_t*)buff, l*2);
|
||||||
|
}
|
||||||
|
|
||||||
// Does not timeout or cross fifo boundaries
|
// Does not timeout or cross fifo boundaries
|
||||||
// Will only work for transfers <= 64 bytes
|
// Will only work for transfers <= 64 bytes
|
||||||
// TODO
|
// TODO
|
||||||
@ -400,19 +417,19 @@ static bool USBD_SendDescriptor(Setup& setup)
|
|||||||
TRACE_CORE(puts("=> USBD_SendDescriptor : USB_STRING_DESCRIPTOR_TYPE\r\n");)
|
TRACE_CORE(puts("=> USBD_SendDescriptor : USB_STRING_DESCRIPTOR_TYPE\r\n");)
|
||||||
if (setup.wValueL == 0) {
|
if (setup.wValueL == 0) {
|
||||||
desc_addr = (const uint8_t*)&STRING_LANGUAGE;
|
desc_addr = (const uint8_t*)&STRING_LANGUAGE;
|
||||||
}
|
}
|
||||||
else if (setup.wValueL == IPRODUCT) {
|
else if (setup.wValueL == IPRODUCT) {
|
||||||
desc_addr = (const uint8_t*)&STRING_IPRODUCT;
|
return USB_SendStringDescriptor(STRING_PRODUCT, setup.wLength);
|
||||||
}
|
}
|
||||||
else if (setup.wValueL == IMANUFACTURER) {
|
else if (setup.wValueL == IMANUFACTURER) {
|
||||||
desc_addr = (const uint8_t*)&STRING_IMANUFACTURER;
|
return USB_SendStringDescriptor(STRING_MANUFACTURER, setup.wLength);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if( *desc_addr > setup.wLength ) {
|
if( *desc_addr > setup.wLength ) {
|
||||||
desc_length = setup.wLength;
|
desc_length = setup.wLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (USB_DEVICE_QUALIFIER == t)
|
else if (USB_DEVICE_QUALIFIER == t)
|
||||||
{
|
{
|
||||||
|
@ -33,6 +33,15 @@ build.extra_flags=
|
|||||||
|
|
||||||
compiler.libsam.c.flags="-I{build.system.path}/libsam" "-I{build.system.path}/CMSIS/CMSIS/Include/" "-I{build.system.path}/CMSIS/Device/ATMEL/"
|
compiler.libsam.c.flags="-I{build.system.path}/libsam" "-I{build.system.path}/CMSIS/CMSIS/Include/" "-I{build.system.path}/CMSIS/Device/ATMEL/"
|
||||||
|
|
||||||
|
# USB Flags
|
||||||
|
# ---------
|
||||||
|
build.usb_flags=-DUSB_VID={build.vid} -DUSB_PID={build.pid} -DUSBCON -DUSB_MANUFACTURER={build.usb_manufacturer} '-DUSB_PRODUCT={build.usb_product}'
|
||||||
|
|
||||||
|
# Default usb manufacturer will be replaced at compile time using
|
||||||
|
# numeric vendor ID if available or by board's specific value.
|
||||||
|
build.usb_manufacturer="Unknown"
|
||||||
|
|
||||||
|
|
||||||
# SAM3 compile patterns
|
# SAM3 compile patterns
|
||||||
# ---------------------
|
# ---------------------
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user