1/* 2 * Copyright (c) 2007-2013 ETH Zurich. 3 * All rights reserved. 4 * 5 * This file is distributed under the terms in the attached LICENSE file. 6 * If you do not find this file, copies can be found by writing to: 7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 8 */ 9 10#ifndef USB_REQUEST_H_ 11#define USB_REQUEST_H_ 12 13struct usb_manager_binding; 14struct usb_device; 15struct usb_device_request; 16 17/// struct for managing the request state 18struct usb_request_state { 19 usb_error_t error; 20 struct usb_manager_binding *bind; 21 void (*callback)(void *a); 22 void *data; 23 struct usb_device_request *req; 24 uint16_t data_length; 25 struct usb_xfer *xfer; 26}; 27 28/* 29 * Flounder Callback Functions 30 */ 31void usb_rx_request_read_call(struct usb_manager_binding *_binding, 32 const uint8_t *request, size_t req_length); 33void usb_rx_request_write_call(struct usb_manager_binding *_binding, 34 const uint8_t *request, size_t req_length, const uint8_t *data, 35 size_t data_length); 36void usb_rx_request_call(struct usb_manager_binding *_binding, 37 const uint8_t *request, size_t req_length); 38 39/* 40 * Handle the requests 41 */ 42usb_error_t usb_handle_request(struct usb_device *device, uint16_t flags, 43 struct usb_device_request *req, struct usb_request_state *req_state, 44 void *data, uint16_t *ret_length); 45 46usb_error_t usb_exec_request(struct usb_device *device, uint16_t flags, 47 struct usb_device_request *request, void *data, uint16_t *ret_length); 48 49/* handler function for new device initialization */ 50usb_error_t usb_req_set_address(struct usb_device *udev, uint16_t addr); 51usb_error_t usb_req_get_descriptor(struct usb_device *dev, 52 uint16_t *actual_lenght, void *desc, uint16_t min_length, 53 uint16_t max_length, uint16_t id, uint8_t type, uint8_t index, 54 uint8_t retries); 55usb_error_t usb_req_get_device_descriptor(struct usb_device *dev, 56 struct usb_device_descriptor *desc); 57usb_error_t usb_req_get_config_descriptor(struct usb_device *dev, 58 struct usb_config_descriptor **cdesc, uint8_t index); 59usb_error_t usb_req_get_string_desc(struct usb_device *dev, void *sdesc, 60 uint16_t max_len, uint16_t lang_id, uint8_t string_index); 61usb_error_t usb_req_get_string(struct usb_device *dev, char *buf, uint16_t len, 62 uint8_t string_index); 63usb_error_t usb_req_set_config(struct usb_device *dev, uint8_t config); 64 65#endif /* USB_REQUEST_H_ */ 66