1
0
mirror of https://github.com/gdsports/USBHost_t36 synced 2024-11-24 01:52:23 -05:00

Device driver constructors compatible with UHS library

This commit is contained in:
PaulStoffregen 2017-03-06 04:36:48 -08:00
parent a805d7552e
commit 5935deb8ce
5 changed files with 23 additions and 16 deletions

View File

@ -370,7 +370,8 @@ private:
class USBHub : public USBDriver { class USBHub : public USBDriver {
public: public:
USBHub(); USBHub(USBHost &host) : debouncetimer(this), resettimer(this) { init(); }
USBHub(USBHost *host) : debouncetimer(this), resettimer(this) { init(); }
// Hubs with more more than 7 ports are built from two tiers of hubs // Hubs with more more than 7 ports are built from two tiers of hubs
// using 4 or 7 port hub chips. While the USB spec seems to allow // using 4 or 7 port hub chips. While the USB spec seems to allow
// hubs to have up to 255 ports, in practice all hub chips on the // hubs to have up to 255 ports, in practice all hub chips on the
@ -394,6 +395,7 @@ protected:
virtual void control(const Transfer_t *transfer); virtual void control(const Transfer_t *transfer);
virtual void timer_event(USBDriverTimer *whichTimer); virtual void timer_event(USBDriverTimer *whichTimer);
virtual void disconnect(); virtual void disconnect();
void init();
bool can_send_control_now(); bool can_send_control_now();
void send_poweron(uint32_t port); void send_poweron(uint32_t port);
void send_getstatus(uint32_t port); void send_getstatus(uint32_t port);
@ -408,7 +410,10 @@ protected:
void new_port_status(uint32_t port, uint32_t status); void new_port_status(uint32_t port, uint32_t status);
void start_debounce_timer(uint32_t port); void start_debounce_timer(uint32_t port);
void stop_debounce_timer(uint32_t port); void stop_debounce_timer(uint32_t port);
static volatile bool reset_busy; private:
Device_t mydevices[MAXPORTS];
Pipe_t mypipes[2] __attribute__ ((aligned(32)));
Transfer_t mytransfers[4] __attribute__ ((aligned(32)));
USBDriverTimer debouncetimer; USBDriverTimer debouncetimer;
USBDriverTimer resettimer; USBDriverTimer resettimer;
setup_t setup; setup_t setup;
@ -435,14 +440,13 @@ protected:
portbitmask_t send_pending_clearstatus_reset; portbitmask_t send_pending_clearstatus_reset;
portbitmask_t send_pending_setreset; portbitmask_t send_pending_setreset;
portbitmask_t debounce_in_use; portbitmask_t debounce_in_use;
Device_t mydevices[MAXPORTS]; static volatile bool reset_busy;
Pipe_t mypipes[2] __attribute__ ((aligned(32)));
Transfer_t mytransfers[4] __attribute__ ((aligned(32)));
}; };
class KeyboardController : public USBDriver { class KeyboardController : public USBDriver {
public: public:
KeyboardController(); KeyboardController(USBHost &host) { init(); }
KeyboardController(USBHost *host) { init(); }
int available(); int available();
int read(); int read();
uint8_t getKey(); uint8_t getKey();
@ -456,6 +460,7 @@ protected:
virtual void disconnect(); virtual void disconnect();
static void callback(const Transfer_t *transfer); static void callback(const Transfer_t *transfer);
void new_data(const Transfer_t *transfer); void new_data(const Transfer_t *transfer);
void init();
private: private:
void (*keyPressedFunction)(); void (*keyPressedFunction)();
void (*keyReleasedFunction)(); void (*keyReleasedFunction)();
@ -468,7 +473,8 @@ private:
class MIDIDevice : public USBDriver { class MIDIDevice : public USBDriver {
public: public:
MIDIDevice(); MIDIDevice(USBHost &host) { init(); }
MIDIDevice(USBHost *host) { init(); }
protected: protected:
virtual bool claim(Device_t *device, int type, const uint8_t *descriptors, uint32_t len); virtual bool claim(Device_t *device, int type, const uint8_t *descriptors, uint32_t len);
virtual void disconnect(); virtual void disconnect();
@ -476,6 +482,7 @@ protected:
static void tx_callback(const Transfer_t *transfer); static void tx_callback(const Transfer_t *transfer);
void rx_data(const Transfer_t *transfer); void rx_data(const Transfer_t *transfer);
void tx_data(const Transfer_t *transfer); void tx_data(const Transfer_t *transfer);
void init();
private: private:
Pipe_t *rxpipe; Pipe_t *rxpipe;
Pipe_t *txpipe; Pipe_t *txpipe;

View File

@ -29,7 +29,7 @@
// begin responding to address zero. // begin responding to address zero.
volatile bool USBHub::reset_busy = false; volatile bool USBHub::reset_busy = false;
USBHub::USBHub() : debouncetimer(this), resettimer(this) void USBHub::init()
{ {
contribute_Devices(mydevices, sizeof(mydevices)/sizeof(Device_t)); contribute_Devices(mydevices, sizeof(mydevices)/sizeof(Device_t));
contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t)); contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t));

View File

@ -24,12 +24,12 @@
#include "USBHost_t36.h" #include "USBHost_t36.h"
USBHost myusb; USBHost myusb;
USBHub hub1; USBHub hub1(myusb);
USBHub hub2; USBHub hub2(myusb);
USBHub hub3; USBHub hub3(myusb);
KeyboardController keyboard1; KeyboardController keyboard1(myusb);
KeyboardController keyboard2; KeyboardController keyboard2(myusb);
MIDIDevice midi1; MIDIDevice midi1(myusb);
void setup() void setup()
{ {

View File

@ -25,7 +25,7 @@
#include "USBHost_t36.h" // Read this header first for key info #include "USBHost_t36.h" // Read this header first for key info
KeyboardController::KeyboardController() void KeyboardController::init()
{ {
contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t)); contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t));
contribute_Transfers(mytransfers, sizeof(mytransfers)/sizeof(Transfer_t)); contribute_Transfers(mytransfers, sizeof(mytransfers)/sizeof(Transfer_t));

View File

@ -25,7 +25,7 @@
#include "USBHost_t36.h" // Read this header first for key info #include "USBHost_t36.h" // Read this header first for key info
MIDIDevice::MIDIDevice() void MIDIDevice::init()
{ {
contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t)); contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t));
contribute_Transfers(mytransfers, sizeof(mytransfers)/sizeof(Transfer_t)); contribute_Transfers(mytransfers, sizeof(mytransfers)/sizeof(Transfer_t));