00001 00041 #ifndef USB_REQUEST_H_INCLUDED 00042 #define USB_REQUEST_H_INCLUDED 00043 00044 #include <bitops.h> 00045 #include <buffer.h> 00046 #include <types.h> 00047 #include <status_codes.h> 00048 00049 struct udc; 00050 00060 enum usb_request_flag { 00069 USB_REQ_SHORT_PKT, 00070 }; 00071 00078 struct usb_request { 00080 struct slist buf_list; 00082 struct slist_node node; 00087 uint8_t flags; 00093 void (*req_done)(struct udc *udc, struct usb_request *req); 00098 void *context; 00103 enum status_code status; 00110 size_t bytes_xfered; 00111 }; 00112 00113 extern void usb_req_init(struct usb_request *req); 00114 00124 static inline void usb_req_add_buffer(struct usb_request *req, 00125 struct buffer *buf) 00126 { 00127 slist_insert_tail(&req->buf_list, &buf->node); 00128 } 00129 00130 extern struct usb_request *usb_req_alloc(void); 00131 extern void usb_req_free(struct usb_request *req); 00132 extern void usb_init(void); 00133 00134 extern struct usb_request *usb_req_alloc_single_tx( 00135 const void *data, size_t len); 00136 extern struct usb_request *usb_req_alloc_single_rx(void *data, size_t len); 00137 extern void usb_req_free_all(struct usb_request *req); 00138 00142 static inline struct buffer *usb_req_get_first_buffer( 00143 struct usb_request *req) 00144 { 00145 return slist_peek_head(&req->buf_list, struct buffer, node); 00146 } 00147 00149 00150 #endif /* USB_REQUEST_H_INCLUDED */
1.6.3