Например TDA7294

Форум РадиоКот • Просмотр темы - Библиотека дескрипторов USB на С++
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн апр 29, 2024 10:39:30

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Пт июн 17, 2022 20:28:10 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Накидал библиотеку шаблонных классов на основе списка типов для определения дескрипторов USB. Код и примеры тут.

Что мы получаем по сравнению обычным и/или макросным подходом:
1. Всё поля типизированы. Нарушить формат дескрипторов проблематично.
2. Автоматическое вычисления размеров, количества интерфейсов и т.д.
3. Автоматически заполняемые и вычисляемые поля скрыты, что улучшает восприятие данных.
4. Проверки на корректность данных, дублирование интерфейсов и конечных точек, диапазон значений параметров и т.д.
5. Из дескрипторов легко "вытащить" на этапе компиляции список интерфейсов или конечных точек. Это можно использовать при инициализации USB-модулей контроллера.

Работающие примеры можно посмотреть в Compiler Explorer для С++17 или C++20

Тут приведу пример дескриптора конфигурации составного устройства из двух CDC.
Спойлер
Код:
//========================
// 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

Можно много что ещё "поставить на проверку" и автоматизировать. А для начала так. Это уже мощнее любого макроса.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Пт июн 17, 2022 21:07:15 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Круто.
Иногда, глядя на такое, я уж грешным делом подумываю: а не начать ли изучать С++? Но потом, вспомнив, насколько это сложный ЯП, передумываю!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Пт июн 17, 2022 22:06:22 
Друг Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 1332
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 10566
Рейтинг сообщения: 0
ну не знаю... они все сложные! :))
VladislavS, спасибо, ща посмотрим, усб - это нужно.

_________________
добавь radiokot.ru##.tablebg > tbody > tr:has(td>a[href*="?f=17"]) в адблок, сделай форум чище!
"Э-э-э-хей... растёт правосознание!"


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 06:47:32 
Встал на лапы

Карма: -9
Рейтинг сообщений: 18
Зарегистрирован: Сб июн 04, 2022 05:21:07
Сообщений: 148
Рейтинг сообщения: 0
И? Писанина ради писанины, графомания от нефик делать. Обычно, тот кто сам пишет дескриптор, тот понимает, какие поля чего должны содержать, а ошибки допускает только невнимательный.
Цитата:
насколько это сложный ЯП,

Да ничего там слишком сложного нет. Просто применять его надо более достойно, чем графомания с дескрипторами. Есть '10' типа людей - которые не используют возможности ++ где надо, и те, кто сует графоманию там, где не нужно.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 10:42:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
А можно список всех "непростительных заклинаний"? :)))

А то, GPIO - нельзя. Любой джедай должен в 3 ночи проснуться и на память все биты регистров 100500 разных контроллеров выдать.

USB дескрипторы - тоже нельзя. Будь добр сотни байт врукопашную пахать. И только попробуй быть невнимательным и ошибись - сразу из страны розовых пони выгонят.

Давай сразу весь список, где ещё недостойно, а то мы ведь не знаем.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 12:28:30 
Встал на лапы

Карма: -9
Рейтинг сообщений: 18
Зарегистрирован: Сб июн 04, 2022 05:21:07
Сообщений: 148
Рейтинг сообщения: 0
Да потому что это должно быть оформлено в виде приложения-утилиты с GUI, а на выходе должен быть уже короткий готовый список дескрипторов, без лишней воды. Вот тогда будет толк, потому что это уже по-взрослому. Твою бы энергию да в правильное русло. А то графомания какаято без дела.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 12:56:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Где-то я это уже слышал. У каждого клона по графическому конфигуратору на каждый чих, только он их никому не покажет.

Только вот как дескриптор в виде массива мёртвых байт использовать в программе? Тут же есть живые интерфейсы и конечные точки - бери да используй их по назначению.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 15:26:18 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1060
Рейтинг сообщения: 0
Up2805 писал(а):
Да потому что это должно быть оформлено в виде приложения-утилиты с GUI

Это ещё зачем? Достаточно указать требования к версии компилятора(ов), составу и версиям библиотек, необходимых для сборки, плюс примеры использования. И не забыть о списке МК, на которых это всё должно работать и список МК, на которых проверено. ИМХО, этого достаточно для осознанного использования. А всякие генераторы и ГУИ- нафиг. Цени и уважай время разработчиков, и не требуй лишнего. Пусть они его потратят на что-нибудь ещё, что может оказаться полезным окружающим.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 15:58:01 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Да ничего там слишком сложного нет.

Такое может говорить лишь человек, вообще не имеющий понятия, что такое С++!!!
Видел я "знатоков С++", которые писали на С, но файлы обзывали cpp и компилировали их g++… Чтобы нормально на С++ писать, нужно не только минимум лет 5 на его изучение потратить, но и регулярно читать о новинках и применять их. Мне такое нафиг не нужно. А еще меня бесит, что пять страничек кода на С++ может собираться аж 10 секунд — у меня столько времени даже под 100тыс строк на С не собирается!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека дескрипторов USB на С++
СообщениеДобавлено: Сб июн 18, 2022 16:11:38 
Друг Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 1332
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 10566
Рейтинг сообщения: 0
Видел я "знатоков С++", которые писали на С, но файлы обзывали cpp
О, это про меня :?

_________________
добавь radiokot.ru##.tablebg > tbody > tr:has(td>a[href*="?f=17"]) в адблок, сделай форум чище!
"Э-э-э-хей... растёт правосознание!"


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y