/src/tinyusb/src/device/usbd_pvt.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * The MIT License (MIT) |
3 | | * |
4 | | * Copyright (c) 2019 Ha Thach (tinyusb.org) |
5 | | * |
6 | | * Permission is hereby granted, free of charge, to any person obtaining a copy |
7 | | * of this software and associated documentation files (the "Software"), to deal |
8 | | * in the Software without restriction, including without limitation the rights |
9 | | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
10 | | * copies of the Software, and to permit persons to whom the Software is |
11 | | * furnished to do so, subject to the following conditions: |
12 | | * |
13 | | * The above copyright notice and this permission notice shall be included in |
14 | | * all copies or substantial portions of the Software. |
15 | | * |
16 | | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
17 | | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
19 | | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
20 | | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
21 | | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
22 | | * THE SOFTWARE. |
23 | | * |
24 | | * This file is part of the TinyUSB stack. |
25 | | */ |
26 | | #ifndef TUSB_USBD_PVT_H_ |
27 | | #define TUSB_USBD_PVT_H_ |
28 | | |
29 | | #include "osal/osal.h" |
30 | | #include "common/tusb_fifo.h" |
31 | | #include "common/tusb_private.h" |
32 | | |
33 | | #ifdef __cplusplus |
34 | | extern "C" { |
35 | | #endif |
36 | | |
37 | | #define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__) |
38 | | |
39 | | //--------------------------------------------------------------------+ |
40 | | // MACRO CONSTANT TYPEDEF PROTYPES |
41 | | //--------------------------------------------------------------------+ |
42 | | |
43 | | typedef enum { |
44 | | SOF_CONSUMER_USER = 0, |
45 | | SOF_CONSUMER_AUDIO, |
46 | | } sof_consumer_t; |
47 | | |
48 | | //--------------------------------------------------------------------+ |
49 | | // Class Driver API |
50 | | //--------------------------------------------------------------------+ |
51 | | |
52 | | typedef struct { |
53 | | char const* name; |
54 | | void (* init ) (void); |
55 | | bool (* deinit ) (void); |
56 | | void (* reset ) (uint8_t rhport); |
57 | | uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len); |
58 | | bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); |
59 | | bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); |
60 | | bool (* xfer_isr ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); // optional, return false to defer to xfer_cb() |
61 | | void (* sof ) (uint8_t rhport, uint32_t frame_count); // optional |
62 | | } usbd_class_driver_t; |
63 | | |
64 | | // Invoked when initializing device stack to get additional class drivers. |
65 | | // Can be implemented by application to extend/overwrite class driver support. |
66 | | // Note: The drivers array must be accessible at all time when stack is active |
67 | | usbd_class_driver_t const* usbd_app_driver_get_cb(uint8_t* driver_count) TU_ATTR_WEAK; |
68 | | |
69 | | typedef bool (*usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); |
70 | | |
71 | | void usbd_int_set(bool enabled); |
72 | | void usbd_spin_lock(bool in_isr); |
73 | | void usbd_spin_unlock(bool in_isr); |
74 | | |
75 | | //--------------------------------------------------------------------+ |
76 | | // USBD Endpoint API |
77 | | // Note: rhport should be 0 since device stack only support 1 rhport for now |
78 | | //--------------------------------------------------------------------+ |
79 | | |
80 | | // Open an endpoint |
81 | | bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep); |
82 | | |
83 | | // Close an endpoint |
84 | | void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr); |
85 | | |
86 | | // Submit a usb transfer |
87 | | bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); |
88 | | |
89 | | // Submit a usb ISO transfer by use of a FIFO (ring buffer) - all bytes in FIFO get transmitted |
90 | | bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes); |
91 | | |
92 | | // Claim an endpoint before submitting a transfer. |
93 | | // If caller does not make any transfer, it must release endpoint for others. |
94 | | bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr); |
95 | | |
96 | | // Release claimed endpoint without submitting a transfer |
97 | | bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr); |
98 | | |
99 | | // Check if endpoint is busy transferring |
100 | | bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr); |
101 | | |
102 | | // Stall endpoint |
103 | | void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr); |
104 | | |
105 | | // Clear stalled endpoint |
106 | | void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr); |
107 | | |
108 | | // Check if endpoint is stalled |
109 | | bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr); |
110 | | |
111 | | // Allocate packet buffer used by ISO endpoints |
112 | | bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size); |
113 | | |
114 | | // Configure and enable an ISO endpoint according to descriptor |
115 | | bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); |
116 | | |
117 | | // Check if endpoint is ready (not busy and not stalled) |
118 | | TU_ATTR_ALWAYS_INLINE static inline |
119 | 0 | bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr) { |
120 | 0 | return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr); |
121 | 0 | } Unexecuted instantiation: tusb.c:usbd_edpt_ready Unexecuted instantiation: usbd.c:usbd_edpt_ready Unexecuted instantiation: usbd_control.c:usbd_edpt_ready Unexecuted instantiation: cdc_device.c:usbd_edpt_ready Unexecuted instantiation: ecm_rndis_device.c:usbd_edpt_ready Unexecuted instantiation: msc_device.c:usbd_edpt_ready |
122 | | |
123 | | // Enable SOF interrupt |
124 | | void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en); |
125 | | |
126 | | /*------------------------------------------------------------------*/ |
127 | | /* Helper |
128 | | *------------------------------------------------------------------*/ |
129 | | |
130 | | bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in); |
131 | | void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr); |
132 | | |
133 | | |
134 | | #if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL |
135 | | void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback); |
136 | | #endif |
137 | | |
138 | | #ifdef __cplusplus |
139 | | } |
140 | | #endif |
141 | | |
142 | | #endif |