Обнаружение потери существующего последовательного соединения из-за отключения устройства в Windows - PullRequest
0 голосов
/ 20 октября 2011

Я звоню Win32 ReadFile для чтения из последовательного порта Windows.Если мое устройство отключено, ReadFile все равно вернет успех.Как я могу проверить, потеряно ли соединение с устройством?Я мог бы сделать это, отправив сообщение и не получив ответа или не прослушивая события устройства, но есть ли более простой способ?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

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

0 голосов
/ 20 октября 2011

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

Однако, если PNP подберет его, я попробую

От создателя WmiCode

Imports System
Imports System.Management
Imports System.Windows.Forms

Namespace WMISample

    Public Class WMIReceiveEvent

        Public Overloads Shared Function Main() As Integer

            Try

                Dim query As New WqlEventQuery( _
                    "SELECT * FROM Win32_DeviceChangeEvent")

                Dim watcher As New ManagementEventWatcher(query)
                Console.WriteLine("Waiting for an event...")

                Dim eventObj As ManagementBaseObject = watcher.WaitForNextEvent()

                Console.WriteLine("{0} event occurred.", eventObj("__CLASS"))

                ' Cancel the event subscription
                watcher.Stop()
                Return 0

            Catch err As ManagementException

                MessageBox.Show("An error occurred while trying to receive an event: " & err.Message)
            End Try
        End Function

    End Class
End Namespace

Оттуда вы сможете усовершенствовать то, что было добавлено или удалено из системы.Однако это мало что дает для того факта, что машина могла быть загружена без подключенного устройства.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...