aboutsummaryrefslogtreecommitdiff
path: root/include/usbd.h
blob: 310c44e60d69392897230956443417b07cf4b9f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * This file is part of the libopenstm32 project.
 *
 * Copyright (C) 2010  Gareth McMullin <gareth@blacksphere.co.nz>
 *
 * 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 <http://www.gnu.org/licenses/>.
 */
#ifndef __USBD_H
#define __USBD_H

#include <usbstd.h>

/* Static buffer for control transactions:
 * This is defined as weak in the library, applicaiton
 * may provide if a larger buffer is requred. */
extern uint8_t usbd_control_buffer[];

/* <usb.c> */
extern int usbd_init(const struct usb_device_descriptor *dev,
                     const struct usb_config_descriptor *conf,
		     const char **strings);
extern void usbd_set_control_buffer_size(uint16_t size);

extern void usbd_register_reset_callback(void (*callback)(void));
extern void usbd_register_suspend_callback(void (*callback)(void));
extern void usbd_register_resume_callback(void (*callback)(void));

typedef int (*usbd_control_callback)(struct usb_setup_data *req, 
		uint8_t **buf, uint16_t *len, 
		void (**complete)(struct usb_setup_data *req));

/* <usb_control.c> */
extern int usbd_register_control_callback(uint8_t type, uint8_t type_mask,
			usbd_control_callback callback);

/* <usb_standard.c> */
extern void 
usbd_register_set_config_callback(void (*callback)(uint16_t wValue));


/* Functions to be provided by the hardware abstraction layer */
extern void usbd_poll(void);

extern void usbd_ep_setup(uint8_t addr, uint8_t type, uint16_t max_size, 
	      void (*callback)(uint8_t ep));

extern uint16_t
usbd_ep_write_packet(uint8_t addr, const void *buf, uint16_t len);

extern uint16_t 
usbd_ep_read_packet(uint8_t addr, void *buf, uint16_t len);

extern void usbd_ep_stall_set(uint8_t addr, uint8_t stall);
extern uint8_t usbd_ep_stall_get(uint8_t addr);

/* Optional */
extern void usbd_cable_connect(uint8_t on);

#endif