µOS++ IIIe Reference 7.0.0
The third edition of µOS++, a POSIX inspired open source framework, written in C++
Loading...
Searching...
No Matches
usbh-wrapper.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the µOS++ project (https://micro-os-plus.github.io/).
3 * Copyright (c) 2016-2025 Liviu Ionescu. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software
6 * for any purpose is hereby granted, under the terms of the MIT license.
7 *
8 * If a copy of the license was not distributed with this file, it can
9 * be obtained from https://opensource.org/licenses/mit.
10 */
11
14#include <Driver_USBH.h>
15
16#include <cassert>
17#include <utility>
18#include <cstdio>
19
20// ----------------------------------------------------------------------------
21
22namespace os
23{
24 namespace driver
25 {
26 // ------------------------------------------------------------------------
27
29 ARM_DRIVER_USBH* driver, ARM_USBH_SignalPortEvent_t c_cb_port_func,
30 ARM_USBH_SignalPipeEvent_t c_cb_pipe_func) noexcept
31 : driver_ (driver), c_cb_port_func_ (c_cb_port_func),
32 c_cb_pipe_func_ (c_cb_pipe_func)
33 {
34 trace::printf ("%s() %p\n", __func__, this);
35 }
36
38 {
39 trace::printf ("%s() %p\n", __func__, this);
40
41 driver_ = nullptr;
42 }
43
44 // ------------------------------------------------------------------------
45
46#pragma GCC diagnostic push
47#if defined(__clang__)
48#elif defined(__GNUC__)
49#pragma GCC diagnostic ignored "-Waggregate-return"
50#endif
51#pragma GCC diagnostic ignored "-Wstrict-aliasing"
52
53 const Version&
55 {
56 // Overwrite the C++ instance. Assume same layout.
57 *(reinterpret_cast<ARM_DRIVER_VERSION*> (&version_))
58 = driver_->GetVersion ();
59 return version_;
60 }
61
64 {
65 // Overwrite the C++ instance. Assume same layout.
66 *(reinterpret_cast<ARM_USBH_CAPABILITIES*> (&capa_))
67 = driver_->GetCapabilities ();
68 return capa_;
69 }
70
73 {
74 // Overwrite the C++ instance. Assume same layout.
75 *(reinterpret_cast<ARM_USBH_PORT_STATE*> (&status_))
76 = driver_->PortGetState (port);
77 return status_;
78 }
79
80#pragma GCC diagnostic pop
81
84 {
85 assert (driver_ != nullptr);
86
87 return_t status;
88
89 if (state == Power::full)
90 {
91 status = driver_->Initialize (c_cb_port_func_, c_cb_pipe_func_);
92 if (status != ARM_DRIVER_OK)
93 {
94 return status;
95 }
96 }
97
98 status = driver_->PowerControl (static_cast<ARM_POWER_STATE> (state));
99
100 if (state == Power::off)
101 {
102 driver_->Uninitialize ();
103 }
104
105 return status;
106 }
107
110 {
111 return driver_->PortVbusOnOff (port, vbus);
112 }
113
116 {
117 return driver_->PortReset (port);
118 }
119
122 {
123 return driver_->PortSuspend (port);
124 }
125
128 {
129 return driver_->PortResume (port);
130 }
131
134 usb::speed_t dev_speed,
135 usb::hub_addr_t hub_addr,
136 usb::hub_port_t hub_port,
137 usb::endpoint_t ep_addr,
138 usb::endpoint_type_t ep_type,
139 usb::packet_size_t ep_max_packet_size,
140 usb::polling_interval_t ep_interval) noexcept
141 {
142 return driver_->PipeCreate (dev_addr, dev_speed, hub_addr, hub_port,
143 ep_addr, ep_type, ep_max_packet_size,
144 ep_interval);
145 }
146
149 usb::pipe_t pipe, usb::device_address_t dev_addr,
150 usb::speed_t dev_speed, usb::hub_addr_t hub_addr,
151 usb::hub_port_t hub_port,
152 usb::packet_size_t ep_max_packet_size) noexcept
153 {
154 return driver_->PipeModify (pipe, dev_addr, dev_speed, hub_addr,
155 hub_port, ep_max_packet_size);
156 }
157
160 {
161 return driver_->PipeDelete (pipe);
162 }
163
166 {
167 return driver_->PipeReset (pipe);
168 }
169
172 uint8_t* data, std::size_t num) noexcept
173 {
174 return driver_->PipeTransfer (pipe, packet, data,
175 static_cast<uint32_t> (num));
176 }
177
178 std::size_t
180 {
181 return driver_->PipeTransferGetResult (pipe);
182 }
183
186 {
187 return driver_->PipeTransferAbort (pipe);
188 }
189
192 {
193 return driver_->GetFrameNumber ();
194 }
195
196 } /* namespace driver */
197} /* namespace os */
198
199// ----------------------------------------------------------------------------
USB host driver capabilities.
Definition usb-host.h:63
virtual return_t do_transfer(usb::pipe_t pipe, uint32_t packet, uint8_t *data, std::size_t num) noexcept override
virtual return_t do_reset_pipe(usb::pipe_t pipe) noexcept override
virtual return_t do_modify_pipe(usb::pipe_t pipe, usb::device_address_t dev_addr, usb::speed_t dev_speed, usb::hub_addr_t hub_addr, usb::hub_port_t hub_port, usb::packet_size_t ep_max_packet_size) noexcept override
virtual ~usbh_wrapper() noexcept
virtual const usb::host::Capabilities & do_get_capabilities(void) noexcept override
virtual uint16_t do_get_frame_number(void) noexcept override
virtual const Version & do_get_version(void) noexcept override
virtual usb::pipe_t do_create_pipe(usb::device_address_t dev_addr, usb::speed_t dev_speed, usb::hub_addr_t hub_addr, usb::hub_port_t hub_port, usb::endpoint_t ep_addr, usb::endpoint_type_t ep_type, usb::packet_size_t ep_max_packet_size, usb::polling_interval_t ep_interval) noexcept override
virtual return_t do_power_port_vbus(usb::port_t port, bool vbus) noexcept override
virtual std::size_t do_get_transfer_count(usb::pipe_t pipe) noexcept override
virtual return_t do_power(Power state) noexcept override
virtual return_t do_suspend_port(usb::port_t port) noexcept override
virtual return_t do_delete_pipe(usb::pipe_t pipe) noexcept override
ARM_DRIVER_USBH * driver_
Pointer to CMSIS USBD Keil driver.
virtual return_t do_reset_port(usb::port_t port) noexcept override
virtual return_t do_resume_port(usb::port_t port) noexcept override
virtual return_t do_abort_transfer(usb::pipe_t pipe) noexcept override
usbh_wrapper(ARM_DRIVER_USBH *driver, ARM_USBH_SignalPortEvent_t c_cb_port_func, ARM_USBH_SignalPipeEvent_t c_cb_pipe_func) noexcept
virtual usb::host::Status & do_get_port_status(usb::port_t port) noexcept override
int printf(const char *format,...)
Write a formatted string to the trace device.
Definition trace.cpp:59
uint8_t speed_t
Definition usb.h:45
uint8_t endpoint_t
Definition usb.h:64
uint32_t pipe_t
Definition usb.h:102
uint8_t hub_addr_t
Definition usb.h:105
uint8_t device_address_t
Definition usb.h:99
uint8_t endpoint_type_t
Definition usb.h:71
uint16_t packet_size_t
Definition usb.h:92
uint8_t port_t
Definition usb.h:103
uint8_t polling_interval_t
Definition usb.h:108
uint8_t hub_port_t
Definition usb.h:106
uint16_t frame_number_t
Definition usb.h:97
int32_t return_t
Definition common.h:46
System namespace.
void(* ARM_USBH_SignalPipeEvent_t)(ARM_USBH_PIPE_HANDLE pipe_hndl, uint32_t event)
void(* ARM_USBH_SignalPortEvent_t)(uint8_t port, uint32_t event)
struct _ARM_DRIVER_USBH const ARM_DRIVER_USBH