Kernel - Slight reworks to timer code
[tpg/acess2.git] / Modules / USB / Core / include / usb_core.h
index d8d1636..43af16f 100644 (file)
@@ -8,9 +8,13 @@
 #ifndef _USB_CORE_H_
 #define _USB_CORE_H_
 
-typedef struct sUSBDevice      tUSBDevice;
+#include <acess.h>
+
+typedef struct sUSBInterface   tUSBInterface;
 typedef struct sUSBDriver      tUSBDriver;
 
+typedef void   (*tUSB_DataCallback)(tUSBInterface *Dev, int EndPt, int Length, void *Data);
+
 /**
  */
 struct sUSBDriver
@@ -18,29 +22,45 @@ struct sUSBDriver
        tUSBDriver      *Next;
        
        const char      *Name;
-       
-       // 23:16 - Interface Class
-       // 15:8  - Interface Sub Class
-       // 7:0   - Interface Protocol
-       Uint32  ClassMask;
-       Uint32  ClassCode;
 
-       void    (*Connected)(tUSBDevice *Dev);
-       void    (*Disconnected)(tUSBDevice *Dev);
+        int    MatchType;      // 0: Interface, 1: Device, 2: Vendor
+       union { 
+               struct {
+                       // 23:16 - Interface Class
+                       // 15:8  - Interface Sub Class
+                       // 7:0   - Interface Protocol
+                       Uint32  ClassCode;
+                       Uint32  ClassMask;
+               } Class;
+               struct {
+                       Uint16  VendorID;
+                       Uint16  DeviceID;
+               } VendorDev;
+       } Match;
+
+       void    (*Connected)(tUSBInterface *Dev);
+       void    (*Disconnected)(tUSBInterface *Dev);
 
         int    MaxEndpoints;   
        struct {
-               // 0: Bulk, 1: Control, 2: Interrupt
-                int    Type;
+               // USB Attrbute byte
+               // NOTE: Top bit indicates the direction (1=Input)
+               Uint8   Attributes;
                // Data availiable Callback
-               void    (*Interrupt)(tUSBDevice *Dev, int Length, void *Data);
+               tUSB_DataCallback       DataAvail;
        } Endpoints[];
 };
 
-extern void    *USB_GetDeviceDataPtr(tUSBDevice *Dev);
-extern void    USB_SetDeviceDataPtr(tUSBDevice *Dev, void *Ptr);
+extern void    *USB_GetDeviceDataPtr(tUSBInterface *Dev);
+extern void    USB_SetDeviceDataPtr(tUSBInterface *Dev, void *Ptr);
 
-extern void    USB_SendData(tUSBDevice *Dev, int Endpoint, int Length, void *Data);
+extern void    USB_StartPollingEndpoint(tUSBInterface *Dev, int Endpoint);
+extern void    USB_ReadDescriptor(tUSBInterface *Dev, int Type, int Index, int Length, void *Data);
+extern void    USB_Request(tUSBInterface *Dev, int Endpoint, int Type, int Req, int Value, int Index, int Len, void *Data);
+// TODO: Async
+extern void    USB_SendData(tUSBInterface *Dev, int Endpoint, int Length, void *Data);
+extern void    USB_RecvData(tUSBInterface *Dev, int Endpoint, int Length, void *Data);
+extern void    USB_RecvDataA(tUSBInterface *Dev, int Endpoint, int Length, void *DataBuf, tUSB_DataCallback Callback);
 
 #endif
 

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