Пт июн 17, 2022 20:28:10
//========================
// CDC VCP Configuration Descriptor
//========================
template<uint8_t first_if, uint8_t ctrl_ep_num, uint8_t data_ep_num, uint8_t iString=0>
using VCP = INTERFACE_ASSOCIATION
< bFunctionClass<2>,
bFunctionSubClass<2>,
bFunctionProtocol<0>,
iFunction<0>,
INTERFACE // Interface - CDC Communication
< bInterfaceNumber<first_if>,
bAlternateSetting<0>,
bInterfaceClass<2>, // Communications and CDC Control
bInterfaceSubClass<2>, // Abstract Control Model
bInterfaceProtocol<1>, // AT Commands defined by ITU-T V.250 etc
iInterface<iString>,
CDC_HEADER_FUNCTIONAL_DESCRIPTOR
< bDescriptorSubType<0>, // Header Functional Descriptor
bcdCDC<0x01'10> >, // CDC Version 1.10
CDC_ACM_FUNCTIONAL_DESCRIPTOR
< bDescriptorSubType<2>, // Abstract Control Management Functional Descriptor
bmCapabilities<2> >, //
CDC_UNION_FUNCTIONAL_DESCRIPTOR
< bDescriptorSubType<6>, // Union Functional Descriptor
bControlInterface<0>, // Interface 0 -
bSubordinateInterface0<1> >, // Interface 1 - Data Class Interface
CDC_CALL_MANAGEMENT_FUNCTIONAL_DESCRIPTOR
< bDescriptorSubType<1>, // Call Management Functional Descriptor
bmCapabilities<0>,
bDataInterface<1> >, //
ENDPOINT_DESCRIPTOR // EP - In Interrupt EndPoint
< bEndpointAddress<ctrl_ep_num, epDIR::IN>,
bmAttributes<epTYPE::Interrupt>,
wMaxPacketSize<8>,
bInterval<255> >
>,
INTERFACE // Interface - Data Interface
< bInterfaceNumber<first_if+1>,
bAlternateSetting<0>,
bInterfaceClass<0x0A>, // CDC-Data
bInterfaceSubClass<0>,
bInterfaceProtocol<0>,
iInterface<0>,
ENDPOINT_DESCRIPTOR< // EP - OUT Bulk EndPoint
bEndpointAddress<data_ep_num, epDIR::OUT>,
bmAttributes<epTYPE::Bulk>,
wMaxPacketSize<64>,
bInterval<0> >,
ENDPOINT_DESCRIPTOR< // EP - IN Bulk EndPoint
bEndpointAddress<data_ep_num, epDIR::IN>,
bmAttributes<epTYPE::Bulk>,
wMaxPacketSize<64>,
bInterval<0> >
>
>;
constexpr DEVICE_CONFIGURATION_DESCRIPTOR
< bConfigurationValue<1>, // Configuration 1
iConfiguration<0>, // No String Descriptor
bmAttributes<cfg_Attr::SelfPowered>, // Self powered
bMaxPower<100/2>, // 100 mA
VCP<0, // Интерфейсы (0 и 1)
3, // Control EP num
1, // Data EP num
4 >, // Номер строкового дескриптора интерфейса
VCP<2, // Интерфейсы (2 и 3)
4, // Control EP num
2, // Data EP num
5> // Номер строкового дескриптора интерфейса
> Configuration_Descriptor;
Configuration_Descriptor.GetDescriptorList().GetEndpoints().foreach
(
[](auto ep)
{
printf("\nEP = %02X", TypeUnBox<ep>::GetEpAddress() );
}
);
// Вывод
EP = 83
EP = 01
EP = 81
EP = 84
EP = 02
EP = 82
Пт июн 17, 2022 21:07:15
Пт июн 17, 2022 22:06:22
Сб июн 18, 2022 06:47:32
насколько это сложный ЯП,
Сб июн 18, 2022 10:42:55
Сб июн 18, 2022 12:28:30
Сб июн 18, 2022 12:56:55
Сб июн 18, 2022 15:26:18
Up2805 писал(а):Да потому что это должно быть оформлено в виде приложения-утилиты с GUI
Сб июн 18, 2022 15:58:01
Сб июн 18, 2022 16:11:38