Я работаю над приложением C++ Win32, для которого я пытаюсь существенно «автоматически обнаружить», если устройство подключено к одному из портов RS232 а затем, если он был отключен.Определите, подключено или отсоединено устройство к порту RS232, не открывая порт.
Проверка подключенного устройства достаточно проста, потому что мой вариант использования позволяет мне предположить, что этот конкретный поток будет первым, кто попытается инициировать связь с портом. для сканирования доступных портов каждую минуту или около того, и как только я нашел порт с устройством на нем, я отмечаю, что у порта есть устройство, закройте порт, а затем установите событие, чтобы процесс, который на самом деле будет использовать устройство, знает теперь он может подключаться к этому порту.
Обнаружение отключения - вот где я столкнулся с проблемой. Когда я просматриваю подключенные устройства, я могу отправить данные на порт, чтобы убедиться, что, если есть устройство, это конкретное устройство, которое я ищу. Но как только он будет подключен, этот порт уже будет открыт другим процессом, и я больше не могу открыть этот порт из потока обнаружения. Поэтому я ищу способ открыть порт в «режиме прослушивания» или что-то в этом роде, чтобы я мог просто увидеть, все еще есть устройство.
Я коротко натолкнулся на что-то о просмотре линии DSR или DTR или что-то в этом роде ... но не смог найти больше или как это сделать на самом деле.
Любые предложения?
Edit: Похоже, мне нужно прояснить немного больше ... Для обнаружения отключиться, я не может передавать данные в порт RS232 каким-либо образом. Кроме того, я не могу предположить, что другое приложение фактически открыто для порта. Устройство может быть физически подключено, но без и открытого соединения ... но я по-прежнему не могу рисковать отправлять ему данные. Я надеялся, что есть способ проверить, что в этом порту еще есть сила или что-то в этом роде.
Большое пояснение, спасибо. К сожалению, я не могу получить доступ на уровне драйвера ... но я могу хотя бы получить дескриптор порта, который уже открыт, поэтому я могу проверить. –
Еще одна мысль ... есть ли способ попытаться подключиться к порту, где он потерпит неудачу, если есть уже соединение? Таким образом, если он не работает с предыдущим соединением или просто подключается, я знаю, что он все еще существует. –
Конечно, просто попробуйте открыть порт и проверьте результат GetLastError(), если он терпит неудачу. Это скажет вам, открыт ли порт. Он не говорит вам, все еще подключено устройство. Для этого вам необходим периодический обмен данными или используйте GetCommModemStatus() в другом процессе. – mghie