Subversion Repositories freemyipod

Rev

Rev 924 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 924 Rev 967
Line 32... Line 32...
32
static const struct usb_instance* usb_handle;
32
static const struct usb_instance* usb_handle;
33
static union usb_endpoint_number usb_outep = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
33
static union usb_endpoint_number usb_outep = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
34
static union usb_endpoint_number usb_inep = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
34
static union usb_endpoint_number usb_inep = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
35
static int maxpacket = 512;
35
static int maxpacket = 512;
36
static struct wakeup mainloop_wakeup;
36
static struct wakeup mainloop_wakeup;
-
 
37
static char* error = NULL;
37
 
38
 
38
 
39
 
39
static const struct usb_devicedescriptor usb_devicedescriptor =
40
static const struct usb_devicedescriptor usb_devicedescriptor =
40
{
41
{
41
    .bLength = sizeof(struct usb_devicedescriptor),
42
    .bLength = sizeof(struct usb_devicedescriptor),
Line 202... Line 203...
202
}
203
}
203
 
204
 
204
 
205
 
205
void handle_xfer_complete(const struct usb_instance* data, int ifnum, int epnum, int bytesleft)
206
void handle_xfer_complete(const struct usb_instance* data, int ifnum, int epnum, int bytesleft)
206
{
207
{
207
    ums_xfer_complete(epnum & 0x80, bytesleft);
208
    ums_xfer_complete(epnum, bytesleft);
208
}
209
}
209
 
210
 
210
 
211
 
211
void handle_timeout(const struct usb_instance* data, int interface, int endpoint, int bytesleft)
212
void handle_timeout(const struct usb_instance* data, int interface, int endpoint, int bytesleft)
212
{
213
{
Line 232... Line 233...
232
 
233
 
233
 
234
 
234
static struct usb_endpoint usb_c1_i0_a0_ep1in =
235
static struct usb_endpoint usb_c1_i0_a0_ep1in =
235
{
236
{
236
    .number = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN },
237
    .number = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN },
237
    .ctrl_request = handle_ep_ctrl_request,
-
 
238
    .xfer_complete = handle_xfer_complete,
238
    .xfer_complete = handle_xfer_complete,
239
    .timeout = handle_timeout,
239
    .timeout = handle_timeout,
240
};
240
};
241
 
241
 
242
 
242
 
Line 327... Line 327...
327
    while (!ums_ejected && usbmanager_get_connected())
327
    while (!ums_ejected && usbmanager_get_connected())
328
        if (wakeup_wait(&mainloop_wakeup, 200000) == THREAD_OK)
328
        if (wakeup_wait(&mainloop_wakeup, 200000) == THREAD_OK)
329
            ums_handle_async();
329
            ums_handle_async();
330
    
330
    
331
    usbmanager_uninstall_custom();
331
    usbmanager_uninstall_custom();
-
 
332
    
-
 
333
    if (error) panic(PANIC_KILLTHREAD, error);
332
}
334
}
333
 
335
 
334
 
336
 
335
void enqueue_async()
337
void enqueue_async()
336
{
338
{
Line 348... Line 350...
348
{
350
{
349
    usb_start_rx(usb_handle, usb_outep, buffer, len);
351
    usb_start_rx(usb_handle, usb_outep, buffer, len);
350
}
352
}
351
 
353
 
352
 
354
 
353
void usb_stall()
355
void usb_stall_in()
354
{
356
{
355
    usb_set_stall(usb_handle, usb_outep, true);
-
 
356
    usb_set_stall(usb_handle, usb_inep, true);
357
    usb_set_stall(usb_handle, usb_inep, true);
357
}
358
}
358
 
359
 
-
 
360
 
-
 
361
void usb_stall_out()
-
 
362
{
-
 
363
    usb_set_stall(usb_handle, usb_outep, true);
-
 
364
}
-
 
365
 
-
 
366
 
-
 
367
void fail(char* errormsg)
-
 
368
{
-
 
369
    error = errormsg;
-
 
370
    ums_ejected = true;
-
 
371
    wakeup_signal(&mainloop_wakeup);
-
 
372
}