Contiki-NG
Loading...
Searching...
No Matches
usb-api.h
1#ifndef USB_API_H_SYN81IFYBN__
2#define USB_API_H_SYN81IFYBN__
3
4#include "sys/process.h"
5
6typedef struct _USBBuffer USBBuffer;
7
8struct _USBBuffer {
9 USBBuffer *next; /* Pointer to next buffer in chain */
10 uint8_t *data; /* Where to read/write data next */
11 uint16_t left; /* Remaining length of buffer. */
12 uint16_t flags;
13 uint32_t id; /* User data */
14};
15
16/* Buffer owned by the USB code, cleared when done */
17#define USB_BUFFER_SUBMITTED 0x01
18
19/* Write a short packet at end of buffer or release buffer when a
20 short packet is received. */
21#define USB_BUFFER_SHORT_END 0x02
22
23/* Release buffer as soon as any received data has been written in it. */
24#define USB_BUFFER_PACKET_END 0x04
25
26/* Notify the user when the buffer is released */
27#define USB_BUFFER_NOTIFY 0x08
28
29/* Packet should be sent to host. */
30#define USB_BUFFER_IN 0x40
31
32/* Used for receiving SETUP packets. If a SETUP packet is received and
33 the next buffers doesn't have this flag set, they will be skipped
34 until one is found. The associated buffer must be at least 8 bytes */
35#define USB_BUFFER_SETUP 0x20
36
37/* HALT the endpoint at this point. Only valid for bulk and interrupt
38 endpoints */
39#define USB_BUFFER_HALT 0x100
40
41/* Flags set by system */
42
43/* The last packet written to this buffer was short. */
44#define USB_BUFFER_SHORT_PACKET 0x10
45
46/* The operation associated with this buffer failed. I.e. it was discarded since it didn't match the received SETUP packet. */
47#define USB_BUFFER_FAILED 0x80
48
49/* Architecture specific flags */
50#define USB_BUFFER_ARCH_FLAG_1 0x1000
51#define USB_BUFFER_ARCH_FLAG_2 0x2000
52#define USB_BUFFER_ARCH_FLAG_3 0x4000
53#define USB_BUFFER_ARCH_FLAG_4 0x8000
54
55void usb_setup(void);
56
57
58/* Read only */
59struct USBRequestHandler {
60 uint8_t request_type;
61 uint8_t request_type_mask;
62 uint8_t request;
63 uint8_t request_mask;
64 /* Returns true if it handled the request, if false let another handler try */
65 unsigned int (*handler_func) ();
66};
67
68/* Must be writeable */
69struct USBRequestHandlerHook {
70 struct USBRequestHandlerHook *next;
71 const struct USBRequestHandler *const handler;
72};
73
74void usb_register_request_handler(struct USBRequestHandlerHook *hook);
75
76void usb_prepend_request_handler(struct USBRequestHandlerHook *hook);
77
78void usb_setup_bulk_endpoint(uint8_t addr);
79
80void usb_setup_interrupt_endpoint(uint8_t addr);
81
82/* Submit a chain of buffers to be filled with received data. Last
83 buffer must have next set to NULL. */
84void usb_submit_recv_buffer(uint8_t ep_addr, USBBuffer * buffer);
85
86/* Submit a chain of buffers to be sent. Last buffer must have next
87 set to NULL. When submitting packets to receive or send data in on
88 a control enpoint, all packets in the data stage must be submitted
89 at the same time. */
90void usb_submit_xmit_buffer(uint8_t ep_addr, USBBuffer * buffer);
91
92/* Return true if not all data has been sent to the host */
93int usb_send_pending(uint8_t ep_addr);
94
95/* Release all buffers submitted to the endpoint and discard any
96 buffered data. */
97void usb_discard_all_buffers(uint8_t ep_addr);
98
99void usb_disable_endpoint(uint8_t addr);
100
101/* Set or remove a HALT condition on an endpoint */
102void usb_halt_endpoint(uint8_t addr, int halt);
103
104/* Select what process should be polled when buffers with the
105 USB_BUFFER_NOTIFY flag set is released from the endpoint */
106void usb_set_ep_event_process(uint8_t addr, struct process *p);
107
108/* Select what process should be polled when a global event occurs */
109void usb_set_global_event_process(struct process *p);
110
111/* Global events */
112#define USB_EVENT_CONFIG 0x01
113#define USB_EVENT_SUSPEND 0x02
114#define USB_EVENT_RESUME 0x04
115#define USB_EVENT_RESET 0x08
116
117/* Returns global events that has occured since last time this
118 function was called */
119unsigned int usb_get_global_events(void);
120
121
122#define USB_EP_EVENT_NOTIFICATION 0x01
123unsigned int usb_get_ep_events(uint8_t addr);
124
125unsigned int usb_get_current_configuration(void);
126
127#endif /* USB_API_H_SYN81IFYBN__ */
Header file for the Contiki process interface.
static uip_ds6_addr_t * addr
Pointer to a nbr cache entry.
Definition uip-nd6.c:107