fetisov / lrndis

stm32 ethernet over usb (rndis + lwip)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QUESTION: STMCubemx generated project

oleg84 opened this issue · comments

I see that you IDE project is custom-made. Have you considered embedding your work to Cubemx-generated project so that it can be easily integrated to projects that use FreeRTOS, for example. Cubemx does have pre-configured FreeRTOS.

Можно по-русски обсуждать :)

Добрый день, Олег.
Признаться честно, не сталкивался ещё с CubeMX.
Но по мере появления времени - планировал библиотеку интегрировать в
известные открытые проекты.
Это не должно оказаться сложным делом.

2016-06-02 19:57 GMT+03:00 Oleg Yakovenko notifications@github.com:

Можно по-русски обсуждать :)


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#3 (comment), or mute
the thread
https://github.com/notifications/unsubscribe/AD28UiyccObE0TlFuTRdxQr9FSOml4A2ks5qHwuHgaJpZM4Isw7f
.

Спасибо за быстрый ответ. :)
С CubeMX рекомендую познакомиться, очень крутая штука. (Насколько я понял из ваших исходников, вы пользовались библиотеками от STM более старой версии.)

Может быть сможете подсказать, как лучше спортировать? Вопрос такой:
Файлы с @author MCD Application Team немного раскиданы по проекту. Вижу, что std-periph, usb-core, usb-files полностью от STM, но есть еще несколько в других директориях. Может быть существует какой-нибудь отдельный файл (пока не нашел), в котором содержится некий уровень абстракции от библиотеки STM?

Заранее спасибо.

Добрый вечер, Олег.
С CubeMX обязательно познакомлюсь, спасибо за совет.
Всё верно, в проекте использована библиотека stdperiph.
Примерно могу объяснить способ распределения файлов:

  1. В директории rndis-stm32 хранятся файлы, непосредственно определяющие интерфейс RNDIS: конфигурация устройства, дескрипторы и ядро класса (usbd_rndis_core). Для портирования под другие платформы следует изменять именно их.
  2. В директории usb-core хранятся принципиально неизменяемые пользователем файлы, описывающие usb-стек фирмы ST
  3. Есть также каталог usb-files. Это то что потенциально может изменяться в зависимости от нужд проекта. Вроде инициализации usb входов (в файле bsp) и пользовательские функции, выполняющиеся по разным событиям usb-устройства (файл usr).
    Про уровень абстракции вопрос не уверен, что правильно понял. Абстрактный уровень обеспечивает usb-стек ST путём предоставления пользователю возможность написать свой класс. Собственно что и было сделано:
  • файл usbd_rndis_core.h экспортирует структуру с обратными вызовами класса
    USBD_Class_cb_TypeDef usbd_rndis_cb;
  • файл usbd_rndis_core.c реализовывает необходимые для rndis вызовы:
USBD_Class_cb_TypeDef usbd_rndis_cb =
{
  usbd_rndis_init,
  usbd_rndis_deinit,
  usbd_rndis_setup,
  NULL,
  usbd_rndis_ep0_recv,
  usbd_rndis_data_in,
  usbd_rndis_data_out,
  usbd_rndis_sof,
  rndis_iso_in_incomplete,
  rndis_iso_out_incomplete,
  usbd_rndis_get_cfg
};

Каждое поле - имя вызываемой функции в теле класса.
Такая концепция написания USBD-драйверов у STM.
У CubeMX пока не знакомился, но, подозреваю, что концепция в целом сходная.
Посоветовал бы начать с подготовки проекта с кастомным usb-классом, ну и далее по порядку будем разбираться.

Проект я уже подготовил (с cubeMX это не занимает много времени, там все генерируется и работает сразу). (Единственное, там почему-то нет совсем кастомного usb-класса, есть только custom HID. Пока взял как самый близкий — CDC). Добавил в проект все файлы из вашего проекта, кроме тех, которые от STM. Теперь пытаюсь найти соответствие между старым и новым API: хоть они и похожи, но различия есть. Более простой путь пока не придумался :)
Проблема в том, что много переименований. Например USBD_DEVICE переименован в USBD_DescriptorsTypeDef

Про уровень абстракции, я имел в виду абстракцию от библиотеки STM. Чтобы, грубо говоря, можно было подменить библиотеку на любую другую, исправив только этот уровень, не трогая остальной код.

Еще вопрос созрел: нашел работу с таймерами в time.h. Правильно я понимаю, что при использовании FreeRTOS, лучше использовать таймера, которые предоставляет ОС?

Вот, пока такой проект получается. Нужно файл открыть в cubemx и нажать project->generate code.
stm32f4-discovery.zip

Hi everyone,
I'm currently implementing the lrndis stack on a STM32L4 using the CubeMX generated USB CDC as template. The device is recognized as RNDIS device but data communication is possible.

Have you managed to implement the lrndis stack based on CubeMX USB files? Or any hints what the problem could be?

commented

Hi everyone,
I'm currently implementing the lrndis stack on a STM32L4 using the CubeMX generated USB CDC as template. The device is recognized as RNDIS device but data communication is possible.

Have you managed to implement the lrndis stack based on CubeMX USB files? Or any hints what the problem could be?
@svenfm I got the same issue . Did you have got the answer now?

Hi @andarm,
Couldn't figure out what the problem is. Task is on hold currently.

commented

Hi @andarm, @svenfm,

I have more or less integrated the RNDIS stack on a STM32H7 using the ST USB-Device library with the RNDIS-CDC class.
Data communication is working for me after some adjustments.
If you are still interested just ping me, then I will go ahead and publish my project for you guys once I have some spare time.

@JonasHeim Hi, I'm working on STM32F407+RNDIS, can you share your project? thanks.

Hi Jonas, I am working on stm32H7 with Nucleo board can you share your project.

Hi Jonas

I would be extremely interested as I am working on an STM32F4 project for this.

Thanks

Andy.