[PUSB] Selected interface and endpoint are now part of PUSBListNode

The method

   int8_t PluggableUSB::addFunction(PUSBListNode *, uint8_t *)

has been changed to

   bool PluggableUSB::plug(PUSBListNode *node)

since both EP and Interfaces are now saved directly into node
This commit is contained in:
Cristian Maglie 2015-09-29 17:59:54 +02:00
parent 7811c2ceed
commit 34a75d9416
4 changed files with 22 additions and 18 deletions

View File

@ -68,10 +68,10 @@ bool PluggableUSB_::setup(USBSetup& setup, u8 j)
return ret; return ret;
} }
int8_t PluggableUSB_::addFunction(PUSBListNode *node, u8* interface) bool PluggableUSB_::plug(PUSBListNode *node)
{ {
if (modules_count >= MAX_MODULES) { if (modules_count >= MAX_MODULES) {
return 0; return false;
} }
if (modules_count == 0) { if (modules_count == 0) {
@ -84,14 +84,15 @@ int8_t PluggableUSB_::addFunction(PUSBListNode *node, u8* interface)
current->next = node; current->next = node;
} }
*interface = lastIf; node->pluggedInterface = lastIf;
node->pluggedEndpoint = lastEp;
lastIf += node->numInterfaces; lastIf += node->numInterfaces;
for ( u8 i = 0; i< node->numEndpoints; i++) { for (uint8_t i=0; i<node->numEndpoints; i++) {
_initEndpoints[lastEp] = node->endpointType[i]; _initEndpoints[lastEp] = node->endpointType[i];
lastEp++; lastEp++;
} }
modules_count++; modules_count++;
return lastEp - node->numEndpoints; return true;
// restart USB layer??? // restart USB layer???
} }

View File

@ -35,13 +35,22 @@ public:
int8_t numInterfaces; int8_t numInterfaces;
uint8_t *endpointType; uint8_t *endpointType;
inline uint8_t interface() const { return pluggedInterface; }
inline int8_t endpoint() const { return pluggedEndpoint; }
protected:
uint8_t pluggedInterface;
int8_t pluggedEndpoint;
public: public:
PUSBListNode *next = NULL; PUSBListNode *next = NULL;
friend class PluggableUSB_;
}; };
class PluggableUSB_ { class PluggableUSB_ {
public: public:
static int8_t addFunction(PUSBListNode *node, u8 *interface); static bool plug(PUSBListNode *node);
static int getInterface(u8* interfaceNum); static int getInterface(u8* interfaceNum);
static int getDescriptor(int8_t t); static int getDescriptor(int8_t t);
static bool setup(USBSetup& setup, u8 i); static bool setup(USBSetup& setup, u8 i);

View File

@ -23,14 +23,10 @@
HID_ HID; HID_ HID;
static uint8_t HID_ENDPOINT_INT;
//================================================================================ //================================================================================
//================================================================================ //================================================================================
// HID Interface // HID Interface
static uint8_t HID_INTERFACE;
HIDDescriptor _hidInterface; HIDDescriptor _hidInterface;
static HIDDescriptorListNode* rootNode = NULL; static HIDDescriptorListNode* rootNode = NULL;
@ -50,9 +46,9 @@ int HID_GetInterface(uint8_t* interfaceNum)
interfaceNum[0] += 1; // uses 1 interfaceNum[0] += 1; // uses 1
_hidInterface = _hidInterface =
{ {
D_INTERFACE(HID_INTERFACE,1,3,0,0), D_INTERFACE(HID.interface(), 1, 3, 0, 0),
D_HIDREPORT(sizeof_hidReportDescriptor), D_HIDREPORT(sizeof_hidReportDescriptor),
D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,USB_EP_SIZE,0x01) D_ENDPOINT(USB_ENDPOINT_IN(HID.endpoint()), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01)
}; };
return USB_SendControl(0,&_hidInterface,sizeof(_hidInterface)); return USB_SendControl(0,&_hidInterface,sizeof(_hidInterface));
} }
@ -89,13 +85,13 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node)
void HID_::SendReport(u8 id, const void* data, int len) void HID_::SendReport(u8 id, const void* data, int len)
{ {
USB_Send(HID_TX, &id, 1); USB_Send(HID.endpoint(), &id, 1);
USB_Send(HID_TX | TRANSFER_RELEASE,data,len); USB_Send(HID.endpoint() | TRANSFER_RELEASE,data,len);
} }
bool HID_Setup(USBSetup& setup, uint8_t i) bool HID_Setup(USBSetup& setup, uint8_t i)
{ {
if (HID_INTERFACE != i) { if (HID.interface() != i) {
return false; return false;
} else { } else {
uint8_t r = setup.bRequest; uint8_t r = setup.bRequest;
@ -141,7 +137,7 @@ HID_::HID_(void)
numInterfaces = 1; numInterfaces = 1;
endpointType = epType; endpointType = epType;
HID_ENDPOINT_INT = PluggableUSB.addFunction(this, &HID_INTERFACE); PluggableUSB.plug(this);
} }
int HID_::begin(void) int HID_::begin(void)

View File

@ -83,8 +83,6 @@ typedef struct
EndpointDescriptor in; EndpointDescriptor in;
} HIDDescriptor; } HIDDescriptor;
#define HID_TX HID_ENDPOINT_INT
#define D_HIDREPORT(_descriptorLength) \ #define D_HIDREPORT(_descriptorLength) \
{ 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength & 0xFF, _descriptorLength >> 8 } { 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength & 0xFF, _descriptorLength >> 8 }