|
|
|
|
|
|
|
|
#include <Arduino.h> |
|
|
#include <Arduino.h> |
|
|
#include "USBHost.h" |
|
|
#include "USBHost.h" |
|
|
|
|
|
|
|
|
static uint32_t periodictable[32] __attribute__ ((aligned(4096), used)); |
|
|
|
|
|
|
|
|
#define PERIODIC_LIST_SIZE 64 |
|
|
|
|
|
|
|
|
|
|
|
static uint32_t periodictable[PERIODIC_LIST_SIZE] __attribute__ ((aligned(4096), used)); |
|
|
static uint8_t port_state; |
|
|
static uint8_t port_state; |
|
|
#define PORT_STATE_DISCONNECTED 0 |
|
|
#define PORT_STATE_DISCONNECTED 0 |
|
|
#define PORT_STATE_DEBOUNCE 1 |
|
|
#define PORT_STATE_DEBOUNCE 1 |
|
|
|
|
|
|
|
|
USBHS_ASYNCLISTADDR = 0; |
|
|
USBHS_ASYNCLISTADDR = 0; |
|
|
USBHS_USBCMD = USBHS_USBCMD_ITC(8) | USBHS_USBCMD_RS | |
|
|
USBHS_USBCMD = USBHS_USBCMD_ITC(8) | USBHS_USBCMD_RS | |
|
|
USBHS_USBCMD_ASP(3) | USBHS_USBCMD_ASPE | |
|
|
USBHS_USBCMD_ASP(3) | USBHS_USBCMD_ASPE | |
|
|
USBHS_USBCMD_FS2 | USBHS_USBCMD_FS(1); // periodic table is 32 pointers |
|
|
|
|
|
|
|
|
#if PERIODIC_LIST_SIZE == 8 |
|
|
|
|
|
USBHS_USBCMD_FS2 | USBHS_USBCMD_FS(3); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 16 |
|
|
|
|
|
USBHS_USBCMD_FS2 | USBHS_USBCMD_FS(2); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 32 |
|
|
|
|
|
USBHS_USBCMD_FS2 | USBHS_USBCMD_FS(1); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 64 |
|
|
|
|
|
USBHS_USBCMD_FS2 | USBHS_USBCMD_FS(0); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 128 |
|
|
|
|
|
USBHS_USBCMD_FS(3); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 256 |
|
|
|
|
|
USBHS_USBCMD_FS(2); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 512 |
|
|
|
|
|
USBHS_USBCMD_FS(1); |
|
|
|
|
|
#elif PERIODIC_LIST_SIZE == 1024 |
|
|
|
|
|
USBHS_USBCMD_FS(0); |
|
|
|
|
|
#else |
|
|
|
|
|
#error "Unsupported PERIODIC_LIST_SIZE" |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
// turn on the USB port |
|
|
// turn on the USB port |
|
|
//USBHS_PORTSC1 = USBHS_PORTSC_PP; |
|
|
//USBHS_PORTSC1 = USBHS_PORTSC_PP; |
|
|
|
|
|
|
|
|
uint32_t count; |
|
|
uint32_t count; |
|
|
bool last = false; |
|
|
bool last = false; |
|
|
|
|
|
|
|
|
|
|
|
// TODO: option for zero length packet? Maybe in Pipe_t fields? |
|
|
|
|
|
|
|
|
Serial.println("new_Data_Transfer"); |
|
|
Serial.println("new_Data_Transfer"); |
|
|
// allocate qTDs |
|
|
// allocate qTDs |
|
|
transfer = allocate_Transfer(); |
|
|
transfer = allocate_Transfer(); |