Page 1 of 1

Virtual COM Port (VCP) subsystem

Posted: Tue Sep 30, 2014 8:40 pm
by gtament
Я написал драйвер для USB-to-COM конвертера от конторы FTDI. Стало ясно, что использовать драйвер, как прослойку между программой и виртуальным COM-портом не слишком практично и удобно, в том числе и потому, что подобные конвертеры производят разные фирмы (и для каждого нужен будет свой драйвер). Поэтому будет разумно написать прослойку (подсистему) виртуальных COM-портов, аналогичную Windows. Предлагаю обсудить подробности реализации, после чего я возьмусь за это дело. Пока я это представляю, как процедуру RegVCP() для драйвера. И доработка одной из системных функций, чтобы не пришлось переписывать программы, которые уже работают с COM-портом

I've developed driver for USB-to-COM converter from FTDi company. It became clear, that using driver to communicate with virtual COM-port not that handy and easy, also because there are many converters from different manufacturers (and each require own driver). That's why it is reasonable to develop Virtual COM Port (VCP) subsystem, like windows' one. As for now, I think it should look like RegVCP proc for driver. And rework of one of sys funcs, to make unnecessary rewriting existing programs, which use COM-port

Re: Virtual COM Port (VCP) subsystem

Posted: Tue Sep 30, 2014 8:57 pm
by hidnplayr
Not many applications use the com port right now.
And the ones that do, access the I/O ports directly. They will need to be rewritten.

Re: Virtual COM Port (VCP) subsystem

Posted: Tue Sep 30, 2014 10:52 pm
by gtament
Ah, yes. Really sysfunc 46 only reserves, I thought it whole interface)

Re: Virtual COM Port (VCP) subsystem

Posted: Wed Oct 01, 2014 9:24 am
by art_zh
gtament
Да, кроме стандартного RS232 у всех чипов имеется свой собственный функционал, доступный через дополнительные порты, MMIO или конфигспейс.

И люди выбирают конкретный чип не только ради стандартных COM-портов, но и еще и ради этих дополнительных печенек - RS485, GPIO, встроенного счетчика событий и что у них еще там наворочено.

Предусмотрен ли у тебя доступ к этим печенькам, или легче просто открыть для юзера все порты и MMIO?

Re: Virtual COM Port (VCP) subsystem

Posted: Wed Oct 01, 2014 10:36 am
by gtament
В данном случае речь идет только о подсистеме виртуальных ком портов, прослойке между драйвером конкретного устройства и пприложением. Для ее работы по-прежнему нужен полноценный драйвер, который и будет реализовывать все то, что ты выше озвучил. И если кому-то эти плюшки понадобятся, то ему придется обращаться к устройству через драййвер и IOCTL. Надеюсь, понятно ответил

Re: Virtual COM Port (VCP) subsystem

Posted: Mon Oct 15, 2018 7:50 pm
by b00bl1k
Кто-нибудь этим занят сейчас? Если нет, то возьму эту таску себе. В планах:
  • Сделать в ядре базовую поддержку последовательных портов: вынести в экспорт функции для добавления/удаления, добавить системный вызов для приложений (перечисление, открытие/закрытие, запись/чтение, настройка параметров, аппаратный контроль потока);
  • Написать отдельный драйвер для стандартных портов;
  • Адаптировать usbftdi (возможно впоследствии написать универсальный usbcdc?);
  • Поправить system/terminal для работы с новым API.

Re: Virtual COM Port (VCP) subsystem

Posted: Mon Oct 15, 2018 9:48 pm
by Siemargl
какая то библиотечка про UART пробегала

Re: Virtual COM Port (VCP) subsystem

Posted: Wed Oct 17, 2018 11:49 am
by 0CodErr
Sh@dy , было бы здорово всё это реализовать!
Как будет что потестирвать — выкладывай.

Re: Virtual COM Port (VCP) subsystem

Posted: Sat Jun 11, 2022 10:12 pm
by b00bl1k
Хочу добавить новое событие для подсистемы последовательных портов. Назначение события пока что два:
  • уведомить все приложения о том, что в системе появился/исчез порт
  • уведомить приложение, открывшее порт, что доступны данные для чтения
В связи с этим вопрос: EVENT_EXTENDED, судя по всему, сейчас не используется. Можно его заменить?

Re: Virtual COM Port (VCP) subsystem

Posted: Sat Jun 11, 2022 10:29 pm
by dunkaist
I don't think EVENT_EXTENDED is to be used for that. There are virtual com devices, usb devices, ahci devices, network devices, etc: using a new event for each device type seems to be wasteful and just an improper design. I don't know what design would be a proper one though :D . It often happens in KolibriOS that to solve problem Y you have to solve problem X first. May be this is the case too.

Re: Virtual COM Port (VCP) subsystem

Posted: Sat Jun 11, 2022 11:04 pm
by b00bl1k
Спасибо за ответ. Я согласен с тем, что добавление очередного события, возможно, является не лучшим выходом в этой ситуации. Оставлю пока в стороне реализацию событий от последовательных портов. Данные от них можно будет получить просто по запросу.

Re: Virtual COM Port (VCP) subsystem

Posted: Sun Jul 03, 2022 4:33 pm
by b00bl1k
Небольшой отчет о проделанной работе:
- написан драйвер serial.sys для работы с последовательными портами (com портами). Пока можно только открыть, закрыть, прочитать и записать данные, изменить baudrate. Помимо пользовательских функций, есть api для добавления/удаления портов другими драйверами.
- доработан драйвер usbftdi (usbother.sys), который создаёт порты через serial.sys.
- доработана программа terminal, которая теперь работает через serial.sys. Пока что настройки чётности и количества бит игнорируются. Всегда 8N1.

Для желающих потестировать прикладываю бинарники.

На скриншоте linux - agetty - silabs cp210x (ttyUSB0) <=> ftdi ft232rl (1) - terminal - kolibrios

Re: Virtual COM Port (VCP) subsystem

Posted: Sun Jul 03, 2022 11:57 pm
by hidnplayr
Very nice to see advancements on this subject and your progress so far.