3using namespace LibXR::USB;
14 const auto ep_num =
static_cast<size_t>(ep->
GetNumber());
15 if (ep_num >= SLOT_COUNT)
27 for (
size_t d = 0; d < DIR_COUNT; ++d)
29 if (slots_[ep_num][d] !=
nullptr)
34 for (
size_t d = 0; d < DIR_COUNT; ++d)
36 slots_[ep_num][d] = ep;
37 use_[ep_num][d] = SlotUse::AVAILABLE;
42 const size_t d = DirIndex(dir);
43 if (slots_[ep_num][d] !=
nullptr)
47 slots_[ep_num][d] = ep;
48 use_[ep_num][d] = SlotUse::AVAILABLE;
55 const auto num =
static_cast<size_t>(ep_num);
61 const size_t d = DirIndex(direction);
63 if (ep ==
nullptr || use_[num][d] != SlotUse::AVAILABLE)
83 use_[num][0] = SlotUse::IN_USE;
84 use_[num][1] = SlotUse::IN_USE;
88 use_[num][d] = SlotUse::IN_USE;
95 if (ep_info ==
nullptr)
100 const auto num =
static_cast<size_t>(ep_info->
GetNumber());
101 if (num >= SLOT_COUNT)
106 bool released =
false;
107 for (
size_t d = 0; d < DIR_COUNT; ++d)
109 if (slots_[num][d] == ep_info && use_[num][d] == SlotUse::IN_USE)
111 use_[num][d] = SlotUse::AVAILABLE;
124 if ((ep_addr & 0x7F) == 0)
130 const size_t num = ep_addr & 0x7F;
131 if (num >= SLOT_COUNT)
136 const size_t d = DirIndex(direction);
146 if (ep !=
nullptr && use_[num][d] == SlotUse::IN_USE && ep->
GetAddress() == ep_addr &&
USB 端点基类 / USB Endpoint base class.
EPNumber
端点号 Endpoint number
Direction AvailableDirection() const
获取允许配置的方向 / Get allowed endpoint direction
uint8_t GetAddress() const
获取端点地址(方向 + 号) / Get endpoint address (dir + num)
Direction
端点方向 Endpoint direction
@ BOTH
双向(可配置为 IN/OUT) / Both (configurable as IN/OUT)
@ OUT
输出方向 / OUT direction
Direction GetDirection() const
获取当前端点方向 / Get current endpoint direction
EPNumber GetNumber() const
获取端点号 / Get endpoint number
EndpointPool(size_t endpoint_num)
构造函数 / Constructor
ErrorCode Put(Endpoint *ep)
登记一个端点到池中 / Register an endpoint into the pool
Endpoint * GetEndpoint0In()
获取端点0的IN对象 / Get Endpoint 0's IN object
void SetEndpoint0(Endpoint *ep0_in, Endpoint *ep0_out)
设置端点0的IN/OUT对象 / Set Endpoint 0 IN/OUT objects
ErrorCode Release(Endpoint *ep_info)
回收端点 / Release endpoint
ErrorCode FindEndpoint(uint8_t ep_addr, Endpoint *&ans)
查找端点/ Lookup endpoint
Endpoint * GetEndpoint0Out()
获取端点0的OUT对象 / Get Endpoint 0's OUT object
ErrorCode Get(Endpoint *&ep_info, Endpoint::Direction direction, Endpoint::EPNumber ep_num)
分配端点 / Allocate endpoint
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes
@ NOT_FOUND
未找到 / Not found
@ OK
操作成功 / Operation successful
@ ARG_ERR
参数错误 / Argument error