Обнаружение соединения USB-порта
Я пишу консольное приложение на C++. Пока мой код может определить, было ли мое устройство (linux) подключено к другому устройству (обычно windows) через TCPIP. Когда я открываю Putty на своей Windows, чтобы подключиться к моему устройству, на котором запущено консольное приложение, мой код распознает его и автоматически отправляет данные с моего устройства (linux) на мой компьютер.
Я хотел бы сделать то же самое с USB. Прямо сейчас мое консольное приложение может отправлять / получать данные с моего устройства Windows, НО только если я отправляю данные в первую очередь. Я хочу, чтобы мое консольное приложение автоматически обнаруживало, подключено ли оно через шпаклевку или другое приложение, и автоматически начинает отправку данных на мой микропроцессор. Я читал и играл с libudev, запустив код, который отображается, когда USB-устройство было подключено и отключено. Я хотел бы знать, есть ли способ для моего устройства (linux) узнать, что оно было подключено к моему компьютеру через Putty, а не событие hotplug. и если да, то есть ли пример где-нибудь, где я могу использовать.
было бы хорошей идеей использовать сокеты? Могу ли я использовать сокеты с USB-устройствами?
Заранее спасибо.
Полное раскрытие, я относительно новичок с ОС Linux.
1 ответ
Ну, есть некоторые серьезные проблемы с тем, что вы предлагаете. Обычный USB-кабель - это ведущий-> ведомый, что означает, что одна машина является управляющей, а другая - ведомой. И машина с Windows, и машина с Ubuntu оба будут хостом, управляющим USB-операциями как USB-Master. Нет ничего готового для изменения этого отношения (но есть много встроенных проектов, которые переключают отношения хост-раб).
ОДНАКО вы можете использовать USB-мост (или кабель передачи) для связи по USB между двумя машинами. Я нашел это на Amazon "Подключаемый кабель передачи Windows". Вы должны быть в состоянии использовать это, чтобы написать консольное приложение с обеих сторон, но для этого потребуется некоторый опыт работы с драйверами Windows и Linux. Не тривиально.
Я полагаю, что есть еще одна идея: использовать два сетевых USB-ключа, соединить их друг с другом с помощью перекрестного кабеля Ethernet и настроить локальную сеть. Вы по-прежнему можете использовать свои сетевые возможности для связи между двумя устройствами, но это можно обнаружить, когда USB-порт подключен.
Доступны перекрестные кабели Ethernet и USB-адаптеры, а драйверы хорошо определены (очевидно) для Windows и Ubuntu.