X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Bootloader%2Fusb-internal.h;fp=Bootloader%2Fusb-internal.h;h=6d9210c212921438a20bf6a0a3ecda1f734b515c;hb=41025125796f2f167d7f2a8c82aac712da1aa1b1;hp=0000000000000000000000000000000000000000;hpb=eabb1c546a15111221a4f45f50265729ae5197be;p=kiibohd-controller.git diff --git a/Bootloader/usb-internal.h b/Bootloader/usb-internal.h new file mode 100644 index 0000000..6d9210c --- /dev/null +++ b/Bootloader/usb-internal.h @@ -0,0 +1,104 @@ +/* Copyright (c) 2011,2012 Simon Schubert <2@0x2c.org>. + * Modifications by Jacob Alexander 2014 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __USB_INTERNAL_H +#define __USB_INTERNAL_H + +/** + * Internal driver structures + */ + +/** + * USB state machine + * ================= + * + * Device configuration states: + * + * Attached <-> Powered + * Powered -(reset)-> Default + * Default -(SET_ADDRESS)-> Address + * Address -(SET_CONFIGURATION)-> Configured + * Configured -(SET_CONFIGURATION 0)-> Address + * Address -(SET_ADDRESS 0)-> Default + * [Default, Configured, Address] -(reset)-> Default + */ + +// ----- Defines ----- + +#ifndef USB_MAX_EP +#define USB_MAX_EP 16 +#endif + + + +// ----- Structs ----- + +struct usbd_ep_pipe_state_t { + enum usb_ep_pingpong pingpong; /* next desc to use */ + enum usb_data01 data01; + size_t transfer_size; + size_t pos; + uint8_t *data_buf; + const uint8_t *copy_source; + int short_transfer; + ep_callback_t callback; + void *callback_data; + size_t ep_maxsize; + /* constant */ + int ep_num; + enum usb_ep_dir ep_dir; +}; + +struct usbd_ep_state_t { + union { + struct usbd_ep_pipe_state_t pipe[2]; + struct { + struct usbd_ep_pipe_state_t rx; + struct usbd_ep_pipe_state_t tx; + }; + }; +}; + +struct usbd_t { + struct usbd_function_ctx_header functions; + struct usbd_function control_function; + const struct usbd_device *identity; + int address; + int config; + enum usbd_dev_state { + USBD_STATE_DISABLED = 0, + USBD_STATE_DEFAULT, + USBD_STATE_SETTING_ADDRESS, + USBD_STATE_ADDRESS, + USBD_STATE_CONFIGURED + } state; + enum usb_ctrl_req_dir ctrl_dir; + struct usbd_ep_state_t ep_state[USB_MAX_EP]; +}; + +extern struct usbd_t usb; + + + +// ----- Functions ----- + +void usb_restart(void); +void usb_enable(void); +const struct usbd_config *usb_get_config_data(int config); + +#endif +