Перейти к содержанию
    

usb virtual com port программное закрытие

Вопрос казалось бы простой: как программно закрыть, освободить usb virtual com port, созданный программой при её запуске.

Изменено пользователем haker_fox
Совершенно непонятно причём здесь раздел STM, перенёс тему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Со стороны контроллера - просто отключить USB (отключить подтяжку 1.5 кОм). Со стороны хоста - закрыть открытый ранее файл/хэндл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 05.06.2023 в 22:10, AndyBig сказал:

Со стороны контроллера - просто отключить USB (отключить подтяжку 1.5 кОм). Со стороны хоста - закрыть открытый ранее файл/хэндл.

Надо, что бы именно контроллер освободил порт.  Со стороны хоста сброс хендела не даёт результатов. А вообще производиться программная перестартовка контроллера, которая инициализируется с ПК. И после перестартовки программа на ПК не может вновь получить хендел, хотя в этом случае предварительно производиться сброс предыдущего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, Юрий48 сказал:

И после перестартовки программа на ПК не может вновь получить хендел, хотя в этом случае предварительно производиться сброс предыдущего.

Включаю режим телепатии:

Для того, чтобы USB-CDC был доступен программам под Win после сброса USB-device, необходимо чтобы все дескрипторы COM-порта были освобождены до начала повторной энумерации USB-device.

PS: Совет - в следующий раз постарайтесь вменяемо задавать вопросы. И располагать их в соответствующей ветке форума. Если конечно хотите вменяемых ответов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, Юрий48 said:

И после перестартовки программа на ПК не может вновь получить хендел

Значит хэндл не освобождается на ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 05.06.2023 в 22:38, jcxz сказал:

Для того, чтобы USB-CDC был доступен программам под Win после сброса USB-device, необходимо чтобы все дескрипторы COM-порта были освобождены до начала повторной энумерации USB-device.

Все эти действия были сделаны.

 

В 05.06.2023 в 22:38, jcxz сказал:

PS: Совет - в следующий раз постарайтесь вменяемо задавать вопросы. И располагать их в соответствующей ветке форума. Если конечно хотите вменяемых ответов.

Это совершенно справедливо. Покажите, пожалуйста, чем не понятен изначальный вопрос. Я очень сожалею, что стал распростроняться по древу - считайте, что я не писал второго своего поста.

В 05.06.2023 в 23:18, AndyBig сказал:

Значит не освобождается на ПК.

Все функции для предварительного освобождения хэндла на ПК использованы, пользуюсь ими давно и они меня никогда не подводили. Ещё раз повторюсь, что сожалею о втором посте, забудьте о нём. Если изначальная формулировка  темы понятна, то хотябы ответьте возможно такое для МП. А, если ещё и покажеете как это сделать , то это верх блаженства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Юрий48 said:

возможно такое для МП

Конечно. Отключаете подтяжку к питанию линии D+ и ПК считает устройство отключенным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Юрий48 сказал:

Все функции для предварительного освобождения хэндла на ПК использованы, пользуюсь ими давно и они меня никогда не подводили.

Вы непонятно описываете последовательность освобождения ресурсов.

Нужно так: в ПК прекращаете использовать хэндл, закрываете порт. Потом МК может имитировать извлечение устройства (например как выше написал AndyBig). Возможно понадобится задержка между этими этапами.

Если сначала извлекать устройство и только потом пытаться освобождать ресурсы в ПК - больше вы компортом пользоваться не сможете. Это происходит из-за того что после извлечения хэндл сразу становится невалидным и освободить ресурсы уже не получится. И повторно оно тоже не заработает потому что ресурс остался заблокированным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Юрий48 сказал:

Покажите, пожалуйста, чем не понятен изначальный вопрос.

Не понятно практически ничего из написанного. Сплошная галиматья....  :vava: Читаем:

11 часов назад, Юрий48 сказал:

как программно закрыть, освободить

Закрыть/освободить где? На ПК? Какая ОС - win, linux, etc.? Или где?

11 часов назад, Юрий48 сказал:

 usb virtual com port,

Что такое "usb virtual com port"? Я знаю что такое "USB-CDC", также примерно понимаю, что обычно подразумевается под "virtual COM-порт" под Win-ОС. Но что такое "usb virtual com port"???  :unknw:

11 часов назад, Юрий48 сказал:

созданный программой при её запуске.

Здесь ещё хуже.... Какой "программой"? У вас какая-то программа под Win создаёт виртуальный COM-порт? Тогда при чём тут USB? А если всё-таки имеется в виду USB-CDC, то раскажите пожалуйста - что за программа создаёт его на ПК??? :shok: Вроде как USB-CDC-COM-порты создаются системным USB-драйвером ОС (win/linux), а не как не какими-то "программами".

Или "программа" создаёт не на ПК, а где...?

 

Дальше ещё хуже:

11 часов назад, Юрий48 сказал:

Надо, что бы именно контроллер освободил порт.

Что за "контроллер"? Микроконтроллер, который работает как USB-device и на котором реализован USB-CDC? Но какое он имеет отношение к закрытию некоего "хендела" на каким-то ПК? Такой микроконтроллер понятия не имеет ни о каких "хенделах" на ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал так:

пишу/читаю COM-порт;

в какой-то момент USB-COM-порт извлекают;

в софт приходит ошибка;

в обработчике ошибки сразу же закрываю порт;

затем периодически пытаюсь открыть порт.

Работало надежно, но это было лет 10 назад на Windows XP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, adnega сказал:

в какой-то момент USB-COM-порт извлекают;

в софт приходит ошибка;

в обработчике ошибки сразу же закрываю порт;

Только у ТС не "извлекают", а вроде какое-то устройство с USB-CDC пересбрасывается. И значит новая энумерация может успеть пройти ещё до вашего закрытия порта. И тогда сколько "периодически" не открывай COM-порт - больше он не откроется. Извлечь-вставить в USB-разъём быстро - всё-таки очень трудно, не то что перегрузить МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 06.06.2023 в 09:41, jcxz сказал:

Только у ТС не "извлекают", а вроде какое-то устройство с USB-CDC пересбрасывается. И значит новая энумерация может успеть пройти ещё до вашего закрытия порта. И тогда сколько "периодически" не открывай COM-порт - больше он не откроется. Извлечь-вставить в USB-разъём быстро - всё-таки очень трудно, не то что перегрузить МК.

Думаю, ничего не изменится, если "извлекают" == "энумерация". Важно по ошибке порт закрыть, а затем открыть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, adnega сказал:

Важно по ошибке порт закрыть, а затем открыть.

Важно успеть это сделать до того момента, как устройство определится снова. В противном случае (если память не изменяет) ему будет присвоен другой номер COM-порта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, adnega сказал:

Думаю, ничего не изменится, если "извлекают" == "энумерация". Важно по ошибке порт закрыть, а затем открыть.

Открыть то вы его откроете, но работать он уже не будет. Если до момента энумерации закрыть не успели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, adnega сказал:

Работало надежно, но это было лет 10 назад на Windows XP.

На Win10 такое не прокатывает.

Сам столкнулся с проблемой, как у ТС: сильная электрическая помеха кратковременно наводила на линиях D+ D- сигнал, аналогичный - "нет устройства".

И - всё... Никакие танцы с бубном не помогают. "Пропадание" устройства - кратковременное, Win не успевает сообщить пользователю о том, что устройство вынули и вставили снова, устройство ОС определяет как тот же СОМ-порт, но обмен информацией восстановить не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...