Subversion Repositories freemyipod

Rev

Rev 945 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 945 Rev 952
Line 275... Line 275...
275
                break;
275
                break;
276
            }
276
            }
277
            default: break;
277
            default: break;
278
            }
278
            }
279
            break;
279
            break;
280
            default: break;
280
        default: break;
281
        }
281
        }
282
        break;
282
        break;
-
 
283
    }
283
        case USB_SETUP_BMREQUESTTYPE_RECIPIENT_ENDPOINT:
284
    case USB_SETUP_BMREQUESTTYPE_RECIPIENT_ENDPOINT:
-
 
285
    {
-
 
286
        if (!data->state->current_configuration) break;
-
 
287
        union usb_endpoint_number ep = { .byte = buffer->setup.wIndex };
-
 
288
        int intfid;
-
 
289
        int epid;
-
 
290
        const struct usb_endpoint* endpoint = usb_find_endpoint(data, ep, &intfid, &epid);
-
 
291
        if (!endpoint) break;
-
 
292
        if (endpoint->ctrl_request) size = endpoint->ctrl_request(data, intfid, epid, buffer, &addr);
-
 
293
        if (size != -1) break;
-
 
294
        switch (buffer->setup.bmRequestType.type)
284
        {
295
        {
285
            if (!data->state->current_configuration) break;
296
        case USB_SETUP_BMREQUESTTYPE_TYPE_STANDARD:
286
            union usb_endpoint_number ep = { .byte = buffer->setup.wIndex };
-
 
287
            int intfid;
-
 
288
            int epid;
-
 
289
            const struct usb_endpoint* endpoint = usb_find_endpoint(data, ep, &intfid, &epid);
-
 
290
            if (!endpoint) break;
-
 
291
            if (endpoint->ctrl_request) size = endpoint->ctrl_request(data, intfid, epid, buffer, &addr);
-
 
292
            if (size != -1) break;
-
 
293
            switch (buffer->setup.bmRequestType.type)
297
            switch (buffer->setup.bRequest.req)
294
            {
298
            {
295
            case USB_SETUP_BMREQUESTTYPE_TYPE_STANDARD:
-
 
296
                switch (buffer->setup.bRequest.req)
-
 
297
                {
-
 
298
                case USB_SETUP_BREQUEST_GET_STATUS:
299
            case USB_SETUP_BREQUEST_GET_STATUS:
299
                    if (buffer->setup.wLength != 2 || buffer->setup.wValue) break;
300
                if (buffer->setup.wLength != 2 || buffer->setup.wValue) break;
300
                    data->buffer->raw[0] = 0;
301
                data->buffer->raw[0] = 0;
301
                    data->buffer->raw[1] = data->driver->get_stall(data, ep);
302
                data->buffer->raw[1] = data->driver->get_stall(data, ep);
302
                    addr = data->buffer;
303
                addr = data->buffer;
303
                    size = 2;
304
                size = 2;
304
                    break;
305
                break;
305
                case USB_SETUP_BREQUEST_CLEAR_FEATURE:
306
            case USB_SETUP_BREQUEST_CLEAR_FEATURE:
306
                    if (buffer->setup.wLength || buffer->setup.wValue) break;
307
                if (buffer->setup.wLength || buffer->setup.wValue) break;
307
                    usb_set_stall(data, ep, false);
308
                usb_set_stall(data, ep, false);
308
                    size = 0;
309
                size = 0;
309
                    break;
310
                break;
310
                case USB_SETUP_BREQUEST_SET_FEATURE:
311
            case USB_SETUP_BREQUEST_SET_FEATURE:
311
                    if (buffer->setup.wLength || buffer->setup.wValue) break;
312
                if (buffer->setup.wLength || buffer->setup.wValue) break;
312
                    usb_set_stall(data, ep, true);
313
                usb_set_stall(data, ep, true);
313
                    size = 0;
314
                size = 0;
314
                    break;
-
 
315
                default: break;
-
 
316
                }
-
 
317
                break;
315
                break;
318
                default: break;
316
            default: break;
319
            }
317
            }
320
            break;
318
            break;
-
 
319
            default: break;
321
        }
320
        }
322
        default: break;
321
        break;
323
    }
322
    }
-
 
323
    default: break;
324
    }
324
    }
325
    union usb_endpoint_number ep0in = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
325
    union usb_endpoint_number ep0in = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_IN };
326
    union usb_endpoint_number ep0out = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
326
    union usb_endpoint_number ep0out = { .number = 0, .direction = USB_ENDPOINT_DIRECTION_OUT };
327
    // See comment at the top of this function for meanings of size.
327
    // See comment at the top of this function for meanings of size.
328
    if (size == 0)
328
    if (size == 0)