Modules/USB - Working on driver support, little headache
[tpg/acess2.git] / Modules / USB / Core / usb.h
index 397e4d7..c293c7d 100644 (file)
@@ -5,81 +5,53 @@
 #ifndef _USB_H_
 #define _USB_H_
 
-// === TYPES ===
+#include <usb_core.h>
+#include <usb_hub.h>
+#include <usb_host.h>
+
 typedef struct sUSBHost        tUSBHost;
 typedef struct sUSBDevice      tUSBDevice;
+typedef struct sUSBEndpoint    tUSBEndpoint;
 
-// === CONSTANTS ===
-enum eUSB_PIDs
+// === STRUCTURES ===
+/**
+ * \brief USB Hub data
+ */
+struct sUSBHub
 {
-       /**
-        * \name Token
-        * \{
-        */
-       PID_OUT         = 0xE1,
-       PID_IN          = 0x69,
-       PID_SOF         = 0xA5,
-       PID_SETUP       = 0x2D,
-       /**
-        * \}
-        */
-       
-       /**
-        * \name Data
-        * \{
-        */
-       PID_DATA0       = 0xC3,
-       PID_DATA1       = 0x4B,
-       PID_DATA2       = 0x87, // USB2 only
-       PID_MDATA       = 0x0F, // USB2 only
-       /**
-        * \}
-        */
+       tUSBDevice      *Device;
        
-       /**
-        * \name Handshake
-        * \{
-        */
-       PID_ACK         = 0xD2,
-       PID_NAK         = 0x5A,
-       PID_STALL       = 0x1E,
-       PID_NYET        = 0x96,
-       /**
-        * \}
-        */
+       tUSB_HubPoll    CheckPorts;
        
-       /**
-        * \name Special
-        * \{
-        */
-       PID_PRE         = 0x3C, PID_ERR         = 0x3C,
-       PID_SPLIT       = 0x78,
-       PID_PING        = 0xB4,
-       PID_RESVD       = 0xF0,
-       /**
-        * \}
-        */
+        int    nPorts;
+       tUSBDevice      *Devices[];
 };
 
-// === FUNCTIONS ===
-/**
- * \note 00101 - X^5+X^2+1
- */
-Uint8  USB_TokenCRC(void *Data, int len);
-/**
- * \note X^16 + X15 + X^2 + 1
- */
-Uint16 USB_DataCRC(void *Data, int len);
+struct sUSBEndpoint
+{
+       tUSBInterface   *Interface;
+       tUSBEndpoint    *Next;  // In the poll list
+        int    PollingPeriod;  // In 1ms intervals
+        int    MaxPacketSize;  // In bytes
+
+       char    Direction;      // 1 Polled Input, 0 Output
+       
+       Uint8   Type;   // Same as sDescriptor_Endpoint.Type
+};
 
-// === STRUCTURES ===
 /**
- * \brief Defines a USB Host Controller
+ * \brief Structure for a device's interface
  */
-struct sUSBHost
+struct sUSBInterface
 {
-       Uint16  IOBase;
+       tUSBInterface   *Next;
+       tUSBDevice      *Dev;
+
+       tUSBDriver      *Driver;
+       void    *Data;
        
-        int    (*SendPacket)(int ID, int Length, void *Data);
+        int    nEndpoints;
+       tUSBEndpoint    Endpoints[];
 };
 
 /**
@@ -87,10 +59,31 @@ struct sUSBHost
  */
 struct sUSBDevice
 {
+       tUSBHub *ParentHub;
+
+       /**
+        * \brief Host controller used
+        */
        tUSBHost        *Host;
-        int    MaxControl;
-        int    MaxBulk;
-        int    MaxISync;
+        int    Address;
+
+        int    nInterfaces;
+       tUSBInterface   *Interfaces[];
 };
 
+struct sUSBHost
+{
+       struct sUSBHost *Next;
+       
+       tUSBHostDef     *HostDef;
+       void    *Ptr;
+       
+       Uint8   AddressBitmap[128/8];
+       
+       tUSBDevice      RootHubDev;
+       tUSBHub RootHub;
+};
+
+extern void    USB_NewDevice(tUSBHub *Hub);
+
 #endif

UCC git Repository :: git.ucc.asn.au