/*
- * AcessOS Version 1
- * USB Stack
+ * Acess2 USB Stack
+ * - By John Hodge (thePowersGang)
+ *
+ * usb.h
+ * - USB Internal definitions
*/
#ifndef _USB_H_
#define _USB_H_
#include <usb_host.h>
typedef struct sUSBHost tUSBHost;
+typedef struct sUSBDevice tUSBDevice;
+typedef struct sUSBEndpoint tUSBEndpoint;
// === STRUCTURES ===
/**
*/
struct sUSBHub
{
- tUSBHub *Next;
- tUSBDevice *Device;
-
- tUSB_HubPoll CheckPorts;
+ tUSBInterface *Interface;
int nPorts;
tUSBDevice *Devices[];
};
+struct sUSBEndpoint
+{
+ tUSBEndpoint *Next; // (usb_poll.c) Clock list
+ tUSBInterface *Interface;
+ int EndpointIdx; // Interface endpoint index
+ int EndpointNum; // Device endpoint num
+
+ int PollingPeriod; // In 1ms intervals
+ int MaxPacketSize; // In bytes
+ Uint8 Type; // Same as sUSBDriver.Endpoints.Type
+
+ int PollingAtoms; // (usb_poll.c) Period in clock list
+ void *InputData;
+};
+
+/**
+ * \brief Structure for a device's interface
+ */
+struct sUSBInterface
+{
+// tUSBInterface *Next;
+ tUSBDevice *Dev;
+
+ tUSBDriver *Driver;
+ void *Data;
+
+ int nEndpoints;
+ tUSBEndpoint Endpoints[];
+};
+
/**
* \brief Defines a single device on the USB Bus
*/
struct sUSBDevice
{
- tUSBDevice *Next;
- tUSBDevice *ParentHub;
+ tUSBHub *ParentHub;
/**
* \brief Host controller used
*/
tUSBHost *Host;
int Address;
-
- tUSBDriver *Driver;
- void *Data;
+
+ int nInterfaces;
+ tUSBInterface *Interfaces[];
};
struct sUSBHost
void *Ptr;
Uint8 AddressBitmap[128/8];
+
+ tUSBDevice RootHubDev;
+ tUSBInterface RootHubIf;
+ tUSBHub RootHub;
};
-extern void USB_NewDevice(tUSBHub *Hub);
+extern tUSBDriver *USB_int_FindDriverByClass(Uint32 ClassCode);
#endif