Czy istnieje dobry sposób na wykrycie wszystkich podłączonych urządzeń podłączonych do portów szeregowych w systemie Linux? Im programowanie w C++, ale inne przykłady również są mile widziane.Cux Linux wykrywa wszystkie porty szeregowe
Możesz po prostu spróbować otworzyć każdy port i kiedy mu się powiedzie, dodasz go do listy portów, ale nie wydaje się to dobrym rozwiązaniem.
Możesz wejść do dev dyrektorów, a ponieważ mój port szeregowy to port USB, mogę sprawdzić, które pliki ttyUSB .. zostały utworzone. Ale to nie działa dla portów szeregowych innych niż USB, ponieważ pliki dla tty0 do tty63 są zawsze w tym katalogu.
Mój przykład:
std::string port;
int fd
std::vector<std::string>> list;
for(int i = 0; i < 256; ++i)
{
port.clear();
port.append("/dev/ttyUSB");
port.append(std::to_string(i));
fd = open(port.c_str(), O_RDWR | O_NOCTTY | O_DELAY);
if(fd != -1)
{
list.push_back(port);
}
}
Dzięki!
Porty szeregowe są zwykle nazywane "ttyS0" i tak dalej. – Hasturkun
To daje mi wrażenie pytania XY, gdzie twoim rzeczywistym problemem jest X, i myślisz, że rozwiązaniem jest Y, więc pytasz o Y. Dlaczego chcesz wiedzieć o portach szeregowych w systemie? –
Na jednym z portów jest połączone urządzenie zigbee. Ponieważ chcę, aby był przyjazny dla użytkownika, chcę wyświetlić wszystkie możliwości, które użytkownik może wybrać. Zwykle po podłączeniu urządzenia zigbee powinieneś otrzymać dokładnie jeden numer portu, który został ci zwrócony. @Hasturkun W moim przypadku, ponieważ moje urządzenie szeregowe korzysta z połączenia USB, nazywa się ttyUSB0. – Silver