mirror of
https://github.com/arduino/Arduino.git
synced 2025-01-18 07:52:14 +01:00
[sam] intermediate commit
This commit is contained in:
parent
e034de5ea9
commit
46b9f96d4a
@ -11,6 +11,8 @@ arduino_due_u.build.extra_flags=-D__SAM3U4E__ -mthumb
|
|||||||
arduino_due_u.build.ldscript=linker_scripts/gcc/flash.ld
|
arduino_due_u.build.ldscript=linker_scripts/gcc/flash.ld
|
||||||
arduino_due_u.build.variant=arduino_due_u
|
arduino_due_u.build.variant=arduino_due_u
|
||||||
arduino_due_u.build.variant_system_lib=libsam_sam3u4e_gcc_rel.a
|
arduino_due_u.build.variant_system_lib=libsam_sam3u4e_gcc_rel.a
|
||||||
|
arduino_due_u.build.vid=0x2341
|
||||||
|
arduino_due_u.build.pid=0xcafe
|
||||||
|
|
||||||
##############################################################
|
##############################################################
|
||||||
|
|
||||||
@ -25,3 +27,5 @@ arduino_due_x.build.extra_flags=-D__SAM3X8E__ -mthumb
|
|||||||
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
|
||||||
|
arduino_due_x.build.vid=0x2341
|
||||||
|
arduino_due_x.build.pid=0xcafe
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2011 Arduino. All right reserved.
|
Copyright (c) 2012 Arduino. All right reserved.
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
@ -198,4 +198,16 @@ extern const PinDescription g_APinDescription[] ;
|
|||||||
// Include board variant
|
// Include board variant
|
||||||
#include "variant.h"
|
#include "variant.h"
|
||||||
|
|
||||||
|
#if defined USBCON
|
||||||
|
#define USB_VID 0x2341 // arduino LLC vid
|
||||||
|
|
||||||
|
#define USB_PID_LEONARDO 0x0034
|
||||||
|
#define USB_PID_MICRO 0x0035
|
||||||
|
#define USB_PID_DUE 0xcafe
|
||||||
|
|
||||||
|
#include "USBDesc.h"
|
||||||
|
#include "USBCore.h"
|
||||||
|
#include "USBAPI.h"
|
||||||
|
#endif // if defined USBCON
|
||||||
|
|
||||||
#endif // Arduino_h
|
#endif // Arduino_h
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
#ifndef __PLATFORM_H__
|
|
||||||
#define __PLATFORM_H__
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
typedef unsigned char u8;
|
|
||||||
typedef unsigned short u16;
|
|
||||||
typedef unsigned long u32;
|
|
||||||
|
|
||||||
#include "Arduino.h"
|
|
||||||
|
|
||||||
#if defined(USBCON)
|
|
||||||
#include "USBDesc.h"
|
|
||||||
#include "USBCore.h"
|
|
||||||
#include "USBAPI.h"
|
|
||||||
#endif /* if defined(USBCON) */
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Copyright (c) 2011, Peter Barrett
|
/* Copyright (c) 2011, Peter Barrett
|
||||||
**
|
**
|
||||||
** Permission to use, copy, modify, and/or distribute this software for
|
** Permission to use, copy, modify, and/or distribute this software for
|
||||||
@ -16,22 +14,17 @@
|
|||||||
** SOFTWARE.
|
** SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
#if defined(USBCON)
|
#if defined(USBCON)
|
||||||
#include "Platform.h"
|
|
||||||
#include "USBAPI.h"
|
|
||||||
#include <avr/wdt.h>
|
|
||||||
|
|
||||||
#ifdef CDC_ENABLED
|
#ifdef CDC_ENABLED
|
||||||
|
|
||||||
#if (RAMEND < 1000)
|
#define CDC_SERIAL_BUFFER_SIZE 64
|
||||||
#define SERIAL_BUFFER_SIZE 16
|
|
||||||
#else
|
|
||||||
#define SERIAL_BUFFER_SIZE 64
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct ring_buffer
|
struct ring_buffer
|
||||||
{
|
{
|
||||||
unsigned char buffer[SERIAL_BUFFER_SIZE];
|
unsigned char buffer[CDC_SERIAL_BUFFER_SIZE];
|
||||||
volatile int head;
|
volatile int head;
|
||||||
volatile int tail;
|
volatile int tail;
|
||||||
};
|
};
|
||||||
@ -40,19 +33,16 @@ ring_buffer cdc_rx_buffer = { { 0 }, 0, 0};
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u32 dwDTERate;
|
uint32_t dwDTERate;
|
||||||
u8 bCharFormat;
|
uint8_t bCharFormat;
|
||||||
u8 bParityType;
|
uint8_t bParityType;
|
||||||
u8 bDataBits;
|
uint8_t bDataBits;
|
||||||
u8 lineState;
|
uint8_t lineState;
|
||||||
} LineInfo;
|
} LineInfo;
|
||||||
|
|
||||||
static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 };
|
static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
static const CDCDescriptor _cdcInterface =
|
||||||
|
|
||||||
extern const CDCDescriptor _cdcInterface PROGMEM;
|
|
||||||
const CDCDescriptor _cdcInterface =
|
|
||||||
{
|
{
|
||||||
D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),
|
D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1),
|
||||||
|
|
||||||
@ -70,7 +60,7 @@ const CDCDescriptor _cdcInterface =
|
|||||||
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0)
|
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0)
|
||||||
};
|
};
|
||||||
|
|
||||||
int WEAK CDC_GetInterface(u8* interfaceNum)
|
int WEAK CDC_GetInterface(uint8_t* interfaceNum)
|
||||||
{
|
{
|
||||||
interfaceNum[0] += 2; // uses 2
|
interfaceNum[0] += 2; // uses 2
|
||||||
return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
|
return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
|
||||||
@ -78,8 +68,8 @@ int WEAK CDC_GetInterface(u8* interfaceNum)
|
|||||||
|
|
||||||
bool WEAK CDC_Setup(Setup& setup)
|
bool WEAK CDC_Setup(Setup& setup)
|
||||||
{
|
{
|
||||||
u8 r = setup.bRequest;
|
uint8_t r = setup.bRequest;
|
||||||
u8 requestType = setup.bmRequestType;
|
uint8_t requestType = setup.bmRequestType;
|
||||||
|
|
||||||
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
|
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
|
||||||
{
|
{
|
||||||
@ -108,18 +98,24 @@ bool WEAK CDC_Setup(Setup& setup)
|
|||||||
// like servicing endpoints before the sketch ends
|
// like servicing endpoints before the sketch ends
|
||||||
if (1200 == _usbLineInfo.dwDTERate) {
|
if (1200 == _usbLineInfo.dwDTERate) {
|
||||||
// We check DTR state to determine if host port is open (bit 0 of lineState).
|
// We check DTR state to determine if host port is open (bit 0 of lineState).
|
||||||
if ((_usbLineInfo.lineState & 0x01) == 0) {
|
if ((_usbLineInfo.lineState & 0x01) == 0)
|
||||||
|
{
|
||||||
|
/* TODO, AVR Stuff
|
||||||
*(uint16_t *)0x0800 = 0x7777;
|
*(uint16_t *)0x0800 = 0x7777;
|
||||||
wdt_enable(WDTO_120MS);
|
wdt_enable(WDTO_120MS);
|
||||||
} else {
|
*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Most OSs do some intermediate steps when configuring ports and DTR can
|
// Most OSs do some intermediate steps when configuring ports and DTR can
|
||||||
// twiggle more than once before stabilizing.
|
// twiggle more than once before stabilizing.
|
||||||
// To avoid spurious resets we set the watchdog to 250ms and eventually
|
// To avoid spurious resets we set the watchdog to 250ms and eventually
|
||||||
// cancel if DTR goes back high.
|
// cancel if DTR goes back high.
|
||||||
|
/* TODO, AVR Stuff
|
||||||
wdt_disable();
|
wdt_disable();
|
||||||
wdt_reset();
|
wdt_reset();
|
||||||
*(uint16_t *)0x0800 = 0x0;
|
*(uint16_t *)0x0800 = 0x0;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Copyright (c) 2011, Peter Barrett
|
/* Copyright (c) 2011, Peter Barrett
|
||||||
**
|
**
|
||||||
** Permission to use, copy, modify, and/or distribute this software for
|
** Permission to use, copy, modify, and/or distribute this software for
|
||||||
@ -16,11 +14,7 @@
|
|||||||
** SOFTWARE.
|
** SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define USBCON
|
#include "Arduino.h"
|
||||||
|
|
||||||
#include "Platform.h"
|
|
||||||
#include "USBAPI.h"
|
|
||||||
#include "USBDesc.h"
|
|
||||||
|
|
||||||
#if defined(USBCON)
|
#if defined(USBCON)
|
||||||
#ifdef HID_ENABLED
|
#ifdef HID_ENABLED
|
||||||
@ -45,7 +39,7 @@ Keyboard_ Keyboard;
|
|||||||
#define RAWHID_TX_SIZE 64
|
#define RAWHID_TX_SIZE 64
|
||||||
#define RAWHID_RX_SIZE 64
|
#define RAWHID_RX_SIZE 64
|
||||||
|
|
||||||
extern const u8 _hidReportDescriptor[] = {
|
extern const uint8_t _hidReportDescriptor[] = {
|
||||||
// Mouse
|
// Mouse
|
||||||
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54
|
0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54
|
||||||
0x09, 0x02, // USAGE (Mouse)
|
0x09, 0x02, // USAGE (Mouse)
|
||||||
@ -139,12 +133,12 @@ extern const HIDDescriptor _hidInterface =
|
|||||||
//================================================================================
|
//================================================================================
|
||||||
// Driver
|
// Driver
|
||||||
|
|
||||||
u8 _hid_protocol = 1;
|
uint8_t _hid_protocol = 1;
|
||||||
u8 _hid_idle = 1;
|
uint8_t _hid_idle = 1;
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
#define WEAK __attribute__ ((weak))
|
||||||
|
|
||||||
int WEAK HID_GetInterface(u8* interfaceNum)
|
int WEAK HID_GetInterface(uint8_t* interfaceNum)
|
||||||
{
|
{
|
||||||
interfaceNum[0] += 1; // uses 1
|
interfaceNum[0] += 1; // uses 1
|
||||||
return USB_SendControl(TRANSFER_PGM,&_hidInterface,sizeof(_hidInterface));
|
return USB_SendControl(TRANSFER_PGM,&_hidInterface,sizeof(_hidInterface));
|
||||||
@ -155,7 +149,7 @@ int WEAK HID_GetDescriptor(int i)
|
|||||||
return USB_SendControl(TRANSFER_PGM,_hidReportDescriptor,sizeof(_hidReportDescriptor));
|
return USB_SendControl(TRANSFER_PGM,_hidReportDescriptor,sizeof(_hidReportDescriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WEAK HID_SendReport(u8 id, const void* data, int len)
|
void WEAK HID_SendReport(uint8_t id, const void* data, int len)
|
||||||
{
|
{
|
||||||
USB_Send(HID_TX, &id, 1);
|
USB_Send(HID_TX, &id, 1);
|
||||||
USB_Send(HID_TX | TRANSFER_RELEASE,data,len);
|
USB_Send(HID_TX | TRANSFER_RELEASE,data,len);
|
||||||
@ -163,8 +157,8 @@ void WEAK HID_SendReport(u8 id, const void* data, int len)
|
|||||||
|
|
||||||
bool WEAK HID_Setup(Setup& setup)
|
bool WEAK HID_Setup(Setup& setup)
|
||||||
{
|
{
|
||||||
u8 r = setup.bRequest;
|
uint8_t r = setup.bRequest;
|
||||||
u8 requestType = setup.bmRequestType;
|
uint8_t requestType = setup.bmRequestType;
|
||||||
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
|
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
|
||||||
{
|
{
|
||||||
if (HID_GET_REPORT == r)
|
if (HID_GET_REPORT == r)
|
||||||
@ -222,7 +216,7 @@ void Mouse_::click(uint8_t b)
|
|||||||
|
|
||||||
void Mouse_::move(signed char x, signed char y, signed char wheel)
|
void Mouse_::move(signed char x, signed char y, signed char wheel)
|
||||||
{
|
{
|
||||||
u8 m[4];
|
uint8_t m[4];
|
||||||
m[0] = _buttons;
|
m[0] = _buttons;
|
||||||
m[1] = x;
|
m[1] = x;
|
||||||
m[2] = y;
|
m[2] = y;
|
||||||
|
@ -1,9 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2012 Arduino. All right reserved.
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __USBAPI__
|
#ifndef __USBAPI__
|
||||||
#define __USBAPI__
|
#define __USBAPI__
|
||||||
|
|
||||||
#if defined(USBCON)
|
#if defined __cplusplus && defined USBCON
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -192,4 +208,4 @@ void USB_Flush(uint8_t ep);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* if defined(USBCON) */
|
#endif /* if defined USBCON */
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Copyright (c) 2010, Peter Barrett
|
/* Copyright (c) 2010, Peter Barrett
|
||||||
**
|
**
|
||||||
** Permission to use, copy, modify, and/or distribute this software for
|
** Permission to use, copy, modify, and/or distribute this software for
|
||||||
@ -15,17 +13,9 @@
|
|||||||
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
** SOFTWARE.
|
** SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#define USBCON
|
|
||||||
|
|
||||||
#include "Platform.h"
|
#include "Arduino.h"
|
||||||
#include "USBAPI.h"
|
|
||||||
#include "USBDesc.h"
|
|
||||||
#include "USBCore.h"
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(USBCON)
|
|
||||||
|
|
||||||
extern const uint8_t _initEndpoints[] ;
|
|
||||||
const uint8_t _initEndpoints[] =
|
const uint8_t _initEndpoints[] =
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
@ -366,7 +356,7 @@ void USB_ISR()
|
|||||||
{
|
{
|
||||||
if (REQUEST_DEVICE == (requestType & REQUEST_RECIPIENT))
|
if (REQUEST_DEVICE == (requestType & REQUEST_RECIPIENT))
|
||||||
{
|
{
|
||||||
InitEndpoints();
|
InitEndpoints(_initEndpoints, sizeof(_initEndpoints)/sizeof(_initEndpoints[0]));
|
||||||
_usbConfiguration = setup.wValueL;
|
_usbConfiguration = setup.wValueL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -447,7 +437,9 @@ ISR(USB_GEN_vect)
|
|||||||
uint8_t USBD_Connected(void)
|
uint8_t USBD_Connected(void)
|
||||||
{
|
{
|
||||||
uint8_t f = UDFNUML;
|
uint8_t f = UDFNUML;
|
||||||
|
|
||||||
delay(3);
|
delay(3);
|
||||||
|
|
||||||
return f != UDFNUML;
|
return f != UDFNUML;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -503,5 +495,3 @@ bool USB_::configured()
|
|||||||
void USB_::poll()
|
void USB_::poll()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* if defined(USBCON) */
|
|
@ -127,32 +127,32 @@
|
|||||||
|
|
||||||
// Device
|
// Device
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 len; // 18
|
uint8_t len; // 18
|
||||||
u8 dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE
|
uint8_t dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE
|
||||||
u16 usbVersion; // 0x200
|
uint16_t usbVersion; // 0x200
|
||||||
u8 deviceClass;
|
uint8_t deviceClass;
|
||||||
u8 deviceSubClass;
|
uint8_t deviceSubClass;
|
||||||
u8 deviceProtocol;
|
uint8_t deviceProtocol;
|
||||||
u8 packetSize0; // Packet 0
|
uint8_t packetSize0; // Packet 0
|
||||||
u16 idVendor;
|
uint16_t idVendor;
|
||||||
u16 idProduct;
|
uint16_t idProduct;
|
||||||
u16 deviceVersion; // 0x100
|
uint16_t deviceVersion; // 0x100
|
||||||
u8 iManufacturer;
|
uint8_t iManufacturer;
|
||||||
u8 iProduct;
|
uint8_t iProduct;
|
||||||
u8 iSerialNumber;
|
uint8_t iSerialNumber;
|
||||||
u8 bNumConfigurations;
|
uint8_t bNumConfigurations;
|
||||||
} DeviceDescriptor;
|
} DeviceDescriptor;
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 len; // 9
|
uint8_t len; // 9
|
||||||
u8 dtype; // 2
|
uint8_t dtype; // 2
|
||||||
u16 clen; // total length
|
uint16_t clen; // total length
|
||||||
u8 numInterfaces;
|
uint8_t numInterfaces;
|
||||||
u8 config;
|
uint8_t config;
|
||||||
u8 iconfig;
|
uint8_t iconfig;
|
||||||
u8 attributes;
|
uint8_t attributes;
|
||||||
u8 maxPower;
|
uint8_t maxPower;
|
||||||
} ConfigDescriptor;
|
} ConfigDescriptor;
|
||||||
|
|
||||||
// String
|
// String
|
||||||
@ -160,75 +160,75 @@ typedef struct {
|
|||||||
// Interface
|
// Interface
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 9
|
uint8_t len; // 9
|
||||||
u8 dtype; // 4
|
uint8_t dtype; // 4
|
||||||
u8 number;
|
uint8_t number;
|
||||||
u8 alternate;
|
uint8_t alternate;
|
||||||
u8 numEndpoints;
|
uint8_t numEndpoints;
|
||||||
u8 interfaceClass;
|
uint8_t interfaceClass;
|
||||||
u8 interfaceSubClass;
|
uint8_t interfaceSubClass;
|
||||||
u8 protocol;
|
uint8_t protocol;
|
||||||
u8 iInterface;
|
uint8_t iInterface;
|
||||||
} InterfaceDescriptor;
|
} InterfaceDescriptor;
|
||||||
|
|
||||||
// Endpoint
|
// Endpoint
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 7
|
uint8_t len; // 7
|
||||||
u8 dtype; // 5
|
uint8_t dtype; // 5
|
||||||
u8 addr;
|
uint8_t addr;
|
||||||
u8 attr;
|
uint8_t attr;
|
||||||
u16 packetSize;
|
uint16_t packetSize;
|
||||||
u8 interval;
|
uint8_t interval;
|
||||||
} EndpointDescriptor;
|
} EndpointDescriptor;
|
||||||
|
|
||||||
// Interface Association Descriptor
|
// Interface Association Descriptor
|
||||||
// Used to bind 2 interfaces together in CDC compostite device
|
// Used to bind 2 interfaces together in CDC compostite device
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 8
|
uint8_t len; // 8
|
||||||
u8 dtype; // 11
|
uint8_t dtype; // 11
|
||||||
u8 firstInterface;
|
uint8_t firstInterface;
|
||||||
u8 interfaceCount;
|
uint8_t interfaceCount;
|
||||||
u8 functionClass;
|
uint8_t functionClass;
|
||||||
u8 funtionSubClass;
|
uint8_t funtionSubClass;
|
||||||
u8 functionProtocol;
|
uint8_t functionProtocol;
|
||||||
u8 iInterface;
|
uint8_t iInterface;
|
||||||
} IADDescriptor;
|
} IADDescriptor;
|
||||||
|
|
||||||
// CDC CS interface descriptor
|
// CDC CS interface descriptor
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 5
|
uint8_t len; // 5
|
||||||
u8 dtype; // 0x24
|
uint8_t dtype; // 0x24
|
||||||
u8 subtype;
|
uint8_t subtype;
|
||||||
u8 d0;
|
uint8_t d0;
|
||||||
u8 d1;
|
uint8_t d1;
|
||||||
} CDCCSInterfaceDescriptor;
|
} CDCCSInterfaceDescriptor;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 4
|
uint8_t len; // 4
|
||||||
u8 dtype; // 0x24
|
uint8_t dtype; // 0x24
|
||||||
u8 subtype;
|
uint8_t subtype;
|
||||||
u8 d0;
|
uint8_t d0;
|
||||||
} CDCCSInterfaceDescriptor4;
|
} CDCCSInterfaceDescriptor4;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len;
|
uint8_t len;
|
||||||
u8 dtype; // 0x24
|
uint8_t dtype; // 0x24
|
||||||
u8 subtype; // 1
|
uint8_t subtype; // 1
|
||||||
u8 bmCapabilities;
|
uint8_t bmCapabilities;
|
||||||
u8 bDataInterface;
|
uint8_t bDataInterface;
|
||||||
} CMFunctionalDescriptor;
|
} CMFunctionalDescriptor;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len;
|
uint8_t len;
|
||||||
u8 dtype; // 0x24
|
uint8_t dtype; // 0x24
|
||||||
u8 subtype; // 1
|
uint8_t subtype; // 1
|
||||||
u8 bmCapabilities;
|
uint8_t bmCapabilities;
|
||||||
} ACMFunctionalDescriptor;
|
} ACMFunctionalDescriptor;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -259,15 +259,15 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 len; // 9
|
uint8_t len; // 9
|
||||||
u8 dtype; // 0x21
|
uint8_t dtype; // 0x21
|
||||||
u8 addr;
|
uint8_t addr;
|
||||||
u8 versionL; // 0x101
|
uint8_t versionL; // 0x101
|
||||||
u8 versionH; // 0x101
|
uint8_t versionH; // 0x101
|
||||||
u8 country;
|
uint8_t country;
|
||||||
u8 desctype; // 0x22 report
|
uint8_t desctype; // 0x22 report
|
||||||
u8 descLenL;
|
uint8_t descLenL;
|
||||||
u8 descLenH;
|
uint8_t descLenH;
|
||||||
} HIDDescDescriptor;
|
} HIDDescDescriptor;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -74,6 +74,9 @@ endif
|
|||||||
|
|
||||||
include $(TOOLCHAIN).mk
|
include $(TOOLCHAIN).mk
|
||||||
|
|
||||||
|
CFLAGS += -DUSB_VID=0x2341 -DUSB_PID=0xcafe
|
||||||
|
CPPFLAGS += -DUSB_VID=0x2341 -DUSB_PID=0xcafe
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
OUTPUT_OBJ=debug
|
OUTPUT_OBJ=debug
|
||||||
@ -155,12 +158,12 @@ create_output:
|
|||||||
-@mkdir $(OUTPUT_PATH) 1>NUL 2>&1
|
-@mkdir $(OUTPUT_PATH) 1>NUL 2>&1
|
||||||
|
|
||||||
$(addprefix $(OUTPUT_PATH)/,$(C_OBJ)): $(OUTPUT_PATH)/%.o: %.c
|
$(addprefix $(OUTPUT_PATH)/,$(C_OBJ)): $(OUTPUT_PATH)/%.o: %.c
|
||||||
# @"$(CC)" -v -c $(CFLAGS) $< -o $@
|
# "$(CC)" -v -c $(CFLAGS) $< -o $@
|
||||||
@"$(CC)" -c $(CFLAGS) $< -o $@
|
@"$(CC)" -c $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
$(addprefix $(OUTPUT_PATH)/,$(CPP_OBJ)): $(OUTPUT_PATH)/%.o: %.cpp
|
$(addprefix $(OUTPUT_PATH)/,$(CPP_OBJ)): $(OUTPUT_PATH)/%.o: %.cpp
|
||||||
# @"$(CC)" -c $(CPPFLAGS) $< -o $@
|
"$(CC)" -xc++ -c $(CPPFLAGS) $< -o $@
|
||||||
@"$(CC)" -xc++ -c $(CPPFLAGS) $< -o $@
|
# @"$(CC)" -xc++ -c $(CPPFLAGS) $< -o $@
|
||||||
|
|
||||||
$(addprefix $(OUTPUT_PATH)/,$(A_OBJ)): $(OUTPUT_PATH)/%.o: %.s
|
$(addprefix $(OUTPUT_PATH)/,$(A_OBJ)): $(OUTPUT_PATH)/%.o: %.s
|
||||||
@"$(AS)" -c $(ASFLAGS) $< -o $@
|
@"$(AS)" -c $(ASFLAGS) $< -o $@
|
||||||
|
@ -43,5 +43,4 @@
|
|||||||
#define EP_TYPE_ISOCHRONOUS_IN (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | UOTGHS_DEVEPTCFG_EPDIR_IN | UOTGHS_DEVEPTCFG_EPTYPE_ISO | UOTGHS_DEVEPTCFG_EPBK_3_BANK)
|
#define EP_TYPE_ISOCHRONOUS_IN (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | UOTGHS_DEVEPTCFG_EPDIR_IN | UOTGHS_DEVEPTCFG_EPTYPE_ISO | UOTGHS_DEVEPTCFG_EPBK_3_BANK)
|
||||||
#define EP_TYPE_ISOCHRONOUS_OUT (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | UOTGHS_DEVEPTCFG_EPTYPE_ISO | UOTGHS_DEVEPTCFG_EPBK_3_BANK)
|
#define EP_TYPE_ISOCHRONOUS_OUT (UOTGHS_DEVEPTCFG_EPSIZE_1024_BYTE | UOTGHS_DEVEPTCFG_EPTYPE_ISO | UOTGHS_DEVEPTCFG_EPBK_3_BANK)
|
||||||
|
|
||||||
|
|
||||||
#endif /* UOTGHS_H_INCLUDED */
|
#endif /* UOTGHS_H_INCLUDED */
|
||||||
|
@ -20,8 +20,24 @@
|
|||||||
|
|
||||||
#if SAM3XA_SERIES
|
#if SAM3XA_SERIES
|
||||||
|
|
||||||
void USBD_InitEndpoints(void)
|
void USBD_InitEndpoints( uint8_t* puc_EndPoints, uint32_t ul_EndPoints )
|
||||||
{
|
{
|
||||||
|
for (uint8_t i = 1; i < sizeof(_initEndpoints); i++)
|
||||||
|
{
|
||||||
|
// Reset Endpoint Fifos
|
||||||
|
UOTGHS->UOTGHS_DEVEPTISR[i].UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_TOGGLESQ | UDPHS_EPTCLRSTA_FRCESTALL;
|
||||||
|
UOTGHS->UDPHS_EPTRST = 1<<i;
|
||||||
|
|
||||||
|
//UECONX = 1;
|
||||||
|
//UECFG0X = pgm_read_byte(_initEndpoints+i);
|
||||||
|
UOTGHS->UDPHS_EPT[i].UDPHS_EPTCFG = _initEndpoints[i];
|
||||||
|
|
||||||
|
while( (signed int)UDPHS_EPTCFG_EPT_MAPD != (signed int)((UOTGHS->UDPHS_EPT[i].UDPHS_EPTCFG) & (unsigned int)UDPHS_EPTCFG_EPT_MAPD) )
|
||||||
|
;
|
||||||
|
UOTGHS->UDPHS_EPT[i].UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_EPT_ENABL;
|
||||||
|
|
||||||
|
// UECFG1X = EP_DOUBLE_64;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t USBD_Init(void)
|
uint32_t USBD_Init(void)
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
* Headers
|
* Headers
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// We have native USB on this variant
|
||||||
|
#define USBCON
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#include "UARTClass.h"
|
#include "UARTClass.h"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user