OberonCore
https://forum.oberoncore.ru/

CommV24, выполненный как драйвер для CommStreams
https://forum.oberoncore.ru/viewtopic.php?f=90&t=20
Страница 2 из 2

Автор:  Александр Ильин [ Четверг, 13 Ноябрь, 2008 21:00 ]
Заголовок сообщения:  Re: COM-порт

Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?
Вот это да!

Тут два вопроса: 1) можно ли к USB подключить устройство, которое будет видеться в системе как COM-порт; 2) можно ли к COM-порту подключить устройство, которое станет работать как USB. Первое решается покупкой переходника USB2COM (и, часто, установкой прилагающихся драйверов), второе не решается в принципе. Если посмотреть внутрь того же USB2COM, то там мы увидим чип, который при подаче питания по определённому протоколу представляется системе: "Привет, я - COM-порт!" В COM ничего подобного не предусмотрено, там и спрашивать никто ничего не будет: подключили - и на здоровье, делайте дальше сами что хотите.

Не даром ведь при подключении мышки или флэшки система сама узнаёт, что именно за устройство подключено. На даром и фотоаппарат может флэшкой прикинуться. Там целый протокол и классификация устройств, толстая книжка про USB есть.

Лучше скажите, Илья, заработал ли пример? Удалось ли что-то сделать?

Автор:  Александр Ильин [ Четверг, 13 Ноябрь, 2008 21:05 ]
Заголовок сообщения:  Re: COM-порт

Axcel писал(а):
Называются почему-то "нульмодемным" кабелем.
"Нульмодемным" называется по числу необходимых модемов. При работе с более длинными кабелями цифровой сигнал затухает из-за сопротивления проводника. Использование модема позволяет увеличить дальность передачи.

Автор:  Александр Ильин [ Четверг, 13 Ноябрь, 2008 21:08 ]
Заголовок сообщения:  Re: COM-порт

Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?
В USB одно устройство всегда ведущее, а второе ведомое (master/slave). В принципе, можно и два компа соединить, но кто-то на нижнем уровне всё равно должен будет представляться, так что всё равно через USB2COM проще - там для этого уже специальный чип, и всё работает.

Автор:  Илья Ермаков [ Четверг, 13 Ноябрь, 2008 21:45 ]
Заголовок сообщения:  Re: COM-порт

Про модули - пока ещё не пробовал, некогда. Попробую на днях.

Автор:  bohdant [ Четверг, 13 Ноябрь, 2008 22:35 ]
Заголовок сообщения:  Re: COM-порт

Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?

Что то я вопроса непонял :(

Александр Ильин писал(а):
В USB одно устройство всегда ведущее, а второе ведомое (master/slave).

Ну не всегда, есть же USB OTG.

Александр Ильин писал(а):
В принципе, можно и два компа соединить, но кто-то на нижнем уровне всё равно должен будет представляться, так что всё равно через USB2COM проще - там для этого уже специальный чип, и всё работает.


Все равно не понимаю, про что идет речь. Держал в руках(и не только) один USB-USB шнурок для связи компов, реализация довольно сложная. Я не понимаю, зачем компы через USB соеденять? Или я что то упустил?.

Немного про USB2COM (самые дешевые решения):
СP2101 или подобный
FT232R или младьше(в младьших версиях обвязки больше)

Дешево и сердито ATMEGA8 (не помню с ATTINY получится или нет...)

Ну еще много кристалов есть, но это самые просты решения на счет цены и сложности распайки.

Автор:  Wlad [ Четверг, 13 Ноябрь, 2008 23:07 ]
Заголовок сообщения:  Re: COM-порт

Та ваще, не стоит оно того!
Или COM, или USB!
На новом ноуте у меня тока три usb разъёма + чего-то ещё (не COM) + что-то радиочастотное ( но я его в биосе вырубил нафик)...
И (ещё раз) - ваще! Ждём июня 2009 с презентацией стандарта USB 3.0 !

Автор:  Сергей Оборотов [ Пятница, 14 Ноябрь, 2008 06:32 ]
Заголовок сообщения:  Re: COM-порт

А у наладонников кредл какой порт использует?

Автор:  bohdant [ Пятница, 14 Ноябрь, 2008 11:26 ]
Заголовок сообщения:  Re: COM-порт

GUEST писал(а):
А у наладонников кредл какой порт использует?

USB-PORT (как slave)

Даже если есть в PocketPC USB-Host, у него еще и есть USB-PORT
есть расспайки кредлов и шнурков и там все можно детально глянуть.

Вообще то USB - придумали не "технари", а "менеджеры". Поэтому он такой сложный и запутаный получился :lol:

Автор:  Wlad [ Пятница, 14 Ноябрь, 2008 20:08 ]
Заголовок сообщения:  Re: COM-порт

bohdant писал(а):
Вообще то USB - придумали не "технари", а "менеджеры". Поэтому он такой сложный и запутаный получился :lol:

Даже более определённо - менеджеры от всем известной корпорации... :twisted:
Когда шла работа на выяснение наиболее перспективного задела по поводу связного универсального интерфейса, то была проделана титаническая (без шуток) работа менеджеров по реализации ещё сырого и не отработанного продукта( то, что потом стало USB1.0)... Но работа не с инженерами, а с аналогичными менеджерами в софтовых и железячных фирмах... "Пусть плохо, но - много!"
В результате, мы опять получили не чистый продукт с перспективой развития логичной базы с удобной надстройкой, а кусочное решение. Но! Зато с мощной поддержкой производителей...

Если вы поинтересуетесь историей "продавливания" в массовое пользование известных сейчас шин и интерфейсов, то будете чрезвычайно поражены, насколько мизерная роль была при обосновании их поддержки и внедрения технических вопросов...

"Схватить, что хоть немного дышит и лучше, чем у остальных, внедрить, приучить всех к этому, а потом - хоть трава не расти!" (тока - капуста! :twisted: :twisted: :twisted: )

Автор:  protector [ Пятница, 17 Декабрь, 2010 14:26 ]
Заголовок сообщения:  Re: COM-порт

Такой вопрос по COM порту. Нужно неблокирующая работа с ним. То есть один модуль читает другой пишет. Пусть они запущены под разными экземплярами BB. (тяжелая многопоточность). Каким образом можно наладить связь между этими модулями (какие средства в BB есть для этого).

Автор:  Илья Ермаков [ Пятница, 17 Декабрь, 2010 14:29 ]
Заголовок сообщения:  Re: COM-порт

Ну, например, возьмите стандартную подсистему Comm (см. документацию). И соедините по TCP на localhost.

Автор:  protector [ Пятница, 17 Декабрь, 2010 14:34 ]
Заголовок сообщения:  Re: COM-порт

В принципе можно и так сделать (программа для теста железа предназначена), я хотел узнать нет ли еще других способов.

Автор:  protector [ Пятница, 17 Декабрь, 2010 14:41 ]
Заголовок сообщения:  Re: COM-порт

И еще вопрос вдогонку. Если один модуль откроет порт для чтения сможет ли другой открыть для записи не возникнет ли блокировки порта?

Автор:  Иван Денисов [ Среда, 27 Май, 2015 06:53 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

Возможно будет полезен кому-нибудь пример получения доступных в системе COM-портов.

Код:
MODULE CommList;

   IMPORT SYSTEM, WinApi, Log;
   
   PROCEDURE Ports*;
   VAR
      bytesNeeded, returned, i: INTEGER;
      buffer: POINTER TO ARRAY OF SHORTCHAR;
      pInfo: WinApi.PORT_INFO_1;
   BEGIN
      IF (WinApi.EnumPorts(NIL, 1, NIL, 0, bytesNeeded, returned) = 0) &
         (WinApi.GetLastError() = WinApi.ERROR_INSUFFICIENT_BUFFER) THEN
         NEW(buffer, bytesNeeded);
         IF WinApi.EnumPorts(NIL, 1, buffer[0], bytesNeeded, bytesNeeded, returned) = 1 THEN
            FOR i:=0 TO returned - 1 DO
               pInfo := SYSTEM.VAL(WinApi.PORT_INFO_1, buffer[i * SIZE(WinApi.PORT_INFO_1)]);
               IF (pInfo.pName[0] = "C") & (pInfo.pName[1] = "O") & (pInfo.pName[2] = "M") THEN
                  Log.String(pInfo.pName$); Log.Ln
               END
            END
         END
      END
   END Ports;
   
END CommList.

^Q CommList.Ports

Автор:  Alexander Shiryaev [ Среда, 27 Май, 2015 07:51 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

BlackBox-1.6 писал(а):
command error: code file for WINSPOOL.dll not found

Я пользуюсь таким способом.

Автор:  Иван Денисов [ Среда, 27 Май, 2015 21:07 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

Alexander Shiryaev писал(а):
BlackBox-1.6 писал(а):
command error: code file for WINSPOOL.dll not found


В сборке центра и Цинна уже обновлен WinApi, должен быть не WINSPOOL.dll, а WINSPOOL.drv.
Код:
   PROCEDURE EnumPorts* ["WINSPOOL.drv", "EnumPortsA"] (pName: PtrSTR; Level: INTEGER; VAR [nil] pPorts: SHORTCHAR; cbBuf: INTEGER; VAR [nil] pcbNeeded: INTEGER; VAR [nil] pcReturned: INTEGER): BOOL;
   (*END EnumPorts;*)


Alexander Shiryaev писал(а):
Я пользуюсь таким способом.

У меня в Wine не показывает в реестре порты для USB2COM плат :(

Автор:  Alexander Shiryaev [ Воскресенье, 31 Май, 2015 23:14 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

http://stackoverflow.com/questions/1388871/how-do-i-get-a-list-of-available-serial-ports-in-win32

Автор:  Иван Денисов [ Понедельник, 01 Июнь, 2015 05:33 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

Alexander Shiryaev писал(а):

Буду пробовать твой метод и другие, оказалось, что EnumPorts в Wine всегда показывается четыре порта, даже если их нет, или есть больше.
Сейчас перебираю порты по очереди, как советуют в первом методе, но хотел как-то это оптимизировать. Думал, что EnumPorts — хорошее решение, но нет.

Автор:  Иван Денисов [ Вторник, 02 Июнь, 2015 06:23 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

Получается, что самый надежный метод, это попытка подключения к портам. Он работает в Wine. Есть недостаток в том, что если на отладочной плате, например, стоит джампер ISP-RESET, то при сканировании порта микроконтроллер перезагружается.

А для Windows действительно, быстрее сканировать реестр. Вот такой код для сборки центра работает корректно:
Код:
PROCEDURE  Ports*;
   VAR res, size,  i:  INTEGER;
      sw: WinApi.HANDLE;
      dwType: INTEGER;
      str, keyName: ARRAY 64 OF SHORTCHAR;
      port: ARRAY 8 OF CHAR;
      con : CommV24.Connection;
   BEGIN
      IF Dialog.IsWine() THEN
         FOR i := 0 TO 255 DO
            Strings.IntToString(i, port);
            CommV24.Open('COM' + port, 9600, {}, con);
            IF con # NIL THEN
               CommV24.Close(con);
               Log.String('COM' + port); Log.Ln
            END
         END
      ELSIF Dialog.IsWindows() THEN
         res := WinApi.RegOpenKeyW(WinApi.HKEY_LOCAL_MACHINE, "hardware\devicemap\serialcomm", sw);
         IF res = WinApi.ERROR_SUCCESS THEN
            i := 0;
            size := LEN(str);
            WHILE res # WinApi.ERROR_NO_MORE_ITEMS DO
               size := LEN(str);
               res := WinApi.RegEnumValueA(sw, i, keyName, size, NIL, NIL, 0, NIL);
               IF res = WinApi.ERROR_SUCCESS  THEN
                  size := LEN(str);
                  res := WinApi.RegQueryValueEx(sw, keyName,  NIL, dwType, SYSTEM.ADR(str), size);
                  IF res = WinApi.ERROR_SUCCESS  THEN
                     Log.String(keyName$ + " " + str$); Log.Ln;
                  END
               END;
               INC(i)
            END;
            res := WinApi.RegCloseKey(sw)
         END
      END
   END Ports;

Автор:  prospero78 [ Четверг, 13 Август, 2015 18:46 ]
Заголовок сообщения:  Re: CommV24, выполненный как драйвер для CommStreams

Пока в ББ СОМ не читал, но под python это делается легко и под Win, и под wine, и под Lin) Понятно, придётся потаскать за собой 30 метров питона. Впрочем, под Lin -- с вероятностью 99% питон уже будет стоять)
Кстати, под wine ББ может читать данные из СОМ-порта методом z:/dev/com0. Если память не изменяет))) Под родной вендой ББ так сделать не может)))))))

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/