jcxz 372 July 29 Posted July 29 · Report post Возможен ли сабж? Главным образом интересует инфа, которую предоставляют GetCommState()/SetCommState(): список скоростей, форматов и т.п. GetCommState()/SetCommState() требуют аргумента - открытого файлового дескриптора порта. Открытие COM делать не желательно. Есть ли какой-то способ получить эту инфу (главным образом - список поддерживаемых скоростей) для произвольного COM-порта? ("произвольного" - значит без привязки будь то "железный" порт на PCI, USB-CDC или что-то иное). Дефолтная скорость (из реестра, показываемая в "Диспетчере устройств") не интересна. Интересен список реальных скоростей. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 353 July 29 Posted July 29 · Report post ИМХО, это не возможно. Тем более список. Как вы себе это представляете? Не открывая порт, можно лишь каким-то образом попытаться из ОС извлечь возможности драйвера этого порта (но это ведь не то, что вы хотите, я так думаю). Только открыв порт, хост попытается выставить скорость, и если она поддерживается девайсом, то эту инфу можно уже использовать. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 372 July 29 Posted July 29 · Report post 20 минут назад, Arlleex сказал: Как вы себе это представляете? Не открывая порт, можно лишь каким-то образом попытаться из ОС извлечь возможности драйвера этого порта (но это ведь не то, что вы хотите, я так думаю). Я не представляю. Если бы представлял - не спрашивал, а уже сделал бы. Возможно есть какой-то сервис/способ/трюк о котором я не знаю. Через IOCTL-запросы, реестр, SetupAPI, файловое API или ещё как-то. 22 минуты назад, Arlleex сказал: Только открыв порт, хост попытается выставить скорость, и если она поддерживается девайсом, то эту инфу можно уже использовать. Так всегда и делал и делаю. Но проблема в Bluetooth-ных портах. Единственный вариант, который приходит в голову - попытаться определить тип COM-порта: Bluetooth-SPP или нет? И если да - запретить для него автодетект скоростей. Если не найду способа энумерации скоростей без открытия порта, придётся пойти этим путём. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 353 July 29 Posted July 29 · Report post 17 минут назад, jcxz сказал: попытаться определить тип COM-порта: Bluetooth-SPP или нет? И если да - запретить для него автодетект скоростей. Что за автодетект скоростей? Какая-то самописная штука? Зачем делать вообще этот детект? Почему нельзя "по факту" использования прощупать скорость, и если что выдать ошибку? Quote Share this post Link to post Share on other sites More sharing options...
pokos 36 July 29 Posted July 29 · Report post Мнэээ..... Дай Б-г памяти.... Определить наличие устройства можно через PnP enumerator. Определить конкретную конфигурацию устройства без его открытия, помнится, невозможно, поскольку, по умолчанию, неоткрытое устройство НЕ сконфигурировано. Поэтому непонятно, что аффтар имеет в виду под термином "список реальных скоростей". "В Windows параметры конфигурации устройства, зарегистрированного в PnP Enumerator, хранятся в реестре, в ветке: HKLM\SYSTEM\CurrentControlSet\Enum\<перечислитель>\<ID_устройства>\<ID_экземпляра>" Вопрос только в том, что Некто должен их туда сначала записать. Драйвер устройства при регистрации в енумераторе делать это не обязан. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 372 July 29 Posted July 29 · Report post 1 час назад, Arlleex сказал: Что за автодетект скоростей? Какая-то самописная штука? Зачем делать вообще этот детект? Почему нельзя "по факту" использования прощупать скорость, и если что выдать ошибку? Собственная терминалка. Автодетект нужен, чтобы в комбобоксе выбора скорости показать только скорости, реально поддерживаемые данным портом. Убрав все неподдерживаемые. 28 минут назад, pokos сказал: Поэтому непонятно, что аффтар имеет в виду под термином "список реальных скоростей". Один COM-порт поддерживает например скорости <=921600 бод, другой - только <=115200. Один поддерживает только скорости производные от некоторой частоты делённой на целое, другой - предоставляет больший список (в том числе всякие нестандартные) или вообще скорость ему без разницы. Это и есть "список реальных скоростей" данного COM-порта. Quote Share this post Link to post Share on other sites More sharing options...
pokos 36 July 29 Posted July 29 · Report post On 7/29/2026 at 11:17 AM, jcxz said: Это и есть "список реальных скоростей" данного COM-порта. "В Windows параметры конфигурации устройства, зарегистрированного в PnP Enumerator, хранятся в реестре, в ветке: HKLM\SYSTEM\CurrentControlSet\Enum\<перечислитель>\<ID_устройства>\<ID_экземпляра>" Ищите и обрящете, иншалла, конечно. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 372 July 29 Posted July 29 · Report post 39 минут назад, pokos сказал: "В Windows параметры конфигурации устройства, зарегистрированного в PnP Enumerator, хранятся в реестре, в ветке: HKLM\SYSTEM\CurrentControlSet\Enum\<перечислитель>\<ID_устройства>\<ID_экземпляра>" А подробнее можно? Где там можно увидеть например список поддерживаемых скоростей порта? Напомню что: 7 часов назад, jcxz сказал: Дефолтная скорость (из реестра, показываемая в "Диспетчере устройств") не интересна. так как не имеет никакого отношения к реально поддерживаемым скоростям. Quote Share this post Link to post Share on other sites More sharing options...
pokos 36 July 29 Posted July 29 · Report post On 7/29/2026 at 12:06 PM, jcxz said: А подробнее можно? Где там можно увидеть например список поддерживаемых скоростей порта? Например, нигде. О чём я уже писал. Вот, например, что о себе сообщает мой УСБ СОМ-порт: Никакого списка скоростей и в помине нету. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 353 July 29 Posted July 29 · Report post Как вообще можно узнать какие-то там скорости, если заранее не известно, сколько их в девайсе, вообще имеют ли они смысл, есть ли нестандартные среди них и вообще, не подключаясь к девайсу (не открывая порт)? ИМХО, надо просто поддержать список стандартных скоростей в девайсе, а если нельзя - то выкинуть ошибку и все. Я встречал девайсы, в которых задание нестандартной скорости активировало работу по специфическому протоколу. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 372 July 29 Posted July 29 · Report post 1 час назад, Arlleex сказал: Как вообще можно узнать какие-то там скорости, если заранее не известно, сколько их в девайсе, вообще имеют ли они смысл, есть ли нестандартные среди них и вообще, не подключаясь к девайсу (не открывая порт)? Так я и спрашиваю - как? Если вы в том смысле "как это может работать?" То - чего такого сложного? Например можно предусмотреть стандартный запрос/запросы к драйверу, который и выдаст искомое. Или например сделать какой-то спец.режим открытия порта. Что-то типа "loopback-режима": чтобы весь функционал работал, но наружные TX/RX (и пр.) сигналы были отключены. Либо можно придумать ещё 100500 способов. Quote Share this post Link to post Share on other sites More sharing options...
геннадий75 1 July 29 Posted July 29 · Report post Открыл COM порт , установил скорость, считал скорость совпадают значит поддерживает , если не поддерживает обычно возражает скорость 9600 . Что касаться USB/COM так они все с синтезаторами частот и работают на любой скорости в своё время гонял PL2303HX на скоростях 250 кбит ,500 кбит ,1 мбит ,2 мбит ,3 мбит, 4 мбит, 6 мбит . Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 353 July 29 Posted July 29 · Report post 1 час назад, jcxz сказал: Так я и спрашиваю - как? Если вы в том смысле "как это может работать?" То - чего такого сложного? Например можно предусмотреть стандартный запрос/запросы к драйверу, который и выдаст искомое. Или например сделать какой-то спец.режим открытия порта. Что-то типа "loopback-режима": чтобы весь функционал работал, но наружные TX/RX (и пр.) сигналы были отключены. Либо можно придумать ещё 100500 способов. Я так хотел тоже со своего девайса не открывая порт читать кое-какие данные с него (не буферы данных, а часть стандартных запросов), но штатными средствами винды не нашел как такое сделать - всем рулит драйвер, а драйвер я даже задигом "специальный" ставить не хочу, ибо Win10 сама ставит стандартный драйвер и на это и надежда для большинства юзеров. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 372 July 29 Posted July 29 · Report post 1 час назад, геннадий75 сказал: Открыл COM порт , установил скорость Читаем внимательно название темы, в которую отвечаем! 52 минуты назад, Arlleex сказал: Я так хотел тоже со своего девайса не открывая порт читать кое-какие данные с него Если желаемое совершенно точно невозможно никаким способом, то пойду по "плану Б": Автодетект Bluetooth-ных COM-портов с запретом энумерации параметров только для них, и разрешением энумерации для всех прочих. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 353 July 29 Posted July 29 · Report post 24 минуты назад, jcxz сказал: Читаем внимательно название темы, в которую отвечаем! Если желаемое совершенно точно невозможно никаким способом, то пойду по "плану Б": Автодетект Bluetooth-ных COM-портов с запретом энумерации параметров только для них, и разрешением энумерации для всех прочих. А что там с ними, с блютузными? Я не особо в курсе, с блютузом не приходилось работать. Quote Share this post Link to post Share on other sites More sharing options...