Virtual COM Port (VCP) subsystem

Kernel architecture questions
Post Reply
gtament
KSoC/GSoC Student
Posts: 25
Joined: Mon May 20, 2013 6:34 pm

Virtual COM Port (VCP) subsystem

Post 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
User avatar
hidnplayr
Mentor/Kernel Developer
Posts: 1318
Joined: Fri Jun 30, 2006 9:01 am

Re: Virtual COM Port (VCP) subsystem

Post 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.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
gtament
KSoC/GSoC Student
Posts: 25
Joined: Mon May 20, 2013 6:34 pm

Re: Virtual COM Port (VCP) subsystem

Post by gtament »

Ah, yes. Really sysfunc 46 only reserves, I thought it whole interface)
User avatar
art_zh
Kernel Developer
Posts: 1462
Joined: Fri Aug 14, 2009 1:46 am

Re: Virtual COM Port (VCP) subsystem

Post by art_zh »

gtament
Да, кроме стандартного RS232 у всех чипов имеется свой собственный функционал, доступный через дополнительные порты, MMIO или конфигспейс.

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

Предусмотрен ли у тебя доступ к этим печенькам, или легче просто открыть для юзера все порты и MMIO?
gtament
KSoC/GSoC Student
Posts: 25
Joined: Mon May 20, 2013 6:34 pm

Re: Virtual COM Port (VCP) subsystem

Post by gtament »

В данном случае речь идет только о подсистеме виртуальных ком портов, прослойке между драйвером конкретного устройства и пприложением. Для ее работы по-прежнему нужен полноценный драйвер, который и будет реализовывать все то, что ты выше озвучил. И если кому-то эти плюшки понадобятся, то ему придется обращаться к устройству через драййвер и IOCTL. Надеюсь, понятно ответил
b00bl1k
Posts: 69
Joined: Tue Jun 24, 2008 11:12 pm

Re: Virtual COM Port (VCP) subsystem

Post by b00bl1k »

Кто-нибудь этим занят сейчас? Если нет, то возьму эту таску себе. В планах:
  • Сделать в ядре базовую поддержку последовательных портов: вынести в экспорт функции для добавления/удаления, добавить системный вызов для приложений (перечисление, открытие/закрытие, запись/чтение, настройка параметров, аппаратный контроль потока);
  • Написать отдельный драйвер для стандартных портов;
  • Адаптировать usbftdi (возможно впоследствии написать универсальный usbcdc?);
  • Поправить system/terminal для работы с новым API.
Siemargl
Posts: 444
Joined: Tue Mar 08, 2016 11:00 pm

Re: Virtual COM Port (VCP) subsystem

Post by Siemargl »

какая то библиотечка про UART пробегала
0CodErr
Posts: 1498
Joined: Sun Oct 30, 2011 6:43 pm

Re: Virtual COM Port (VCP) subsystem

Post by 0CodErr »

Sh@dy , было бы здорово всё это реализовать!
Как будет что потестирвать — выкладывай.
b00bl1k
Posts: 69
Joined: Tue Jun 24, 2008 11:12 pm

Re: Virtual COM Port (VCP) subsystem

Post by b00bl1k »

Хочу добавить новое событие для подсистемы последовательных портов. Назначение события пока что два:
  • уведомить все приложения о том, что в системе появился/исчез порт
  • уведомить приложение, открывшее порт, что доступны данные для чтения
В связи с этим вопрос: EVENT_EXTENDED, судя по всему, сейчас не используется. Можно его заменить?
User avatar
dunkaist
Mentor
Posts: 728
Joined: Mon Oct 19, 2009 10:58 am
Been thanked: 2 times

Re: Virtual COM Port (VCP) subsystem

Post 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.
b00bl1k
Posts: 69
Joined: Tue Jun 24, 2008 11:12 pm

Re: Virtual COM Port (VCP) subsystem

Post by b00bl1k »

Спасибо за ответ. Я согласен с тем, что добавление очередного события, возможно, является не лучшим выходом в этой ситуации. Оставлю пока в стороне реализацию событий от последовательных портов. Данные от них можно будет получить просто по запросу.
b00bl1k
Posts: 69
Joined: Tue Jun 24, 2008 11:12 pm

Re: Virtual COM Port (VCP) subsystem

Post 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
:
terminal.png
terminal.png (54.61 KiB) Viewed 454 times
Attachments
serial-4d24054.zip
(9.34 KiB) Downloaded 13 times
User avatar
hidnplayr
Mentor/Kernel Developer
Posts: 1318
Joined: Fri Jun 30, 2006 9:01 am

Re: Virtual COM Port (VCP) subsystem

Post by hidnplayr »

Very nice to see advancements on this subject and your progress so far.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest