- return Host->HostDef->SendSETUP(Ptr, 0, 0, 0, FALSE, &req, sizeof(req)) == NULL;
+ return Host->HostDef->SendSETUP(Host->Ptr, 0, 0, 0, FALSE, &req, sizeof(req)) == NULL;
+}
+
+int USB_int_ReadDescriptor(tUSBDevice *Dev, int Endpoint, int Type, int Index, int Length, void *Dest)
+{
+ struct sDeviceRequest req;
+ const int ciMaxPacketSize = 0x400;
+ req.ReqType = 0x80;
+ req.Request = 6; // GET_DESCRIPTOR
+ req.Value = ((Type & 0xFF) << 8) | (Index & 0xFF);
+ req.Index = 0; // TODO: Language ID
+ req.Length = Length;
+
+ Dev->Host->HostDef->SendSETUP(
+ Dev->Host->Ptr, Dev->Address, Endpoint,
+ 0, FALSE,
+ &req, sizeof(req)
+ );
+
+ while( Length > ciMaxPacketSize )
+ {
+ Dev->Host->HostDef->SendIN(
+ Dev->Host->Ptr, Dev->Address, Endpoint,
+ 1, FALSE,
+ Dest, ciMaxPacketSize
+ );
+ Length -= ciMaxPacketSize;
+ }
+
+ // TODO: Complete and get completion
+
+ return 0;