W naszym Linux-ie mamy USB -> urządzenie szeregowe, które zawsze było identyfikowane jako
/dev/ttyACM0
. Napisałem więc aplikację i do wczoraj wszystko działało dobrze. Ale nagle (tak, podczas zdalnej prezentacji ...) urządzenie przestało działać. Po szybkich badaniach odkryłem, że połączenie zmieniło się na /dev/ttyACM1
. To było trochę przedwczesne, ale teraz mam problem - jak jednoznacznie zidentyfikować moje urządzenie? Na przykład dysk pamięci masowej można zainicjować przy użyciu identyfikatora UUID, chociaż /dev/sd**
zmienił się. Czy można to zrobić w przypadku urządzeń szeregowych?
Teraz używam głupiego obejścia:
for(int i = 0; i < 10; i ++)
{
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
}
Link do urządzenia używamy.
/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0
. To może ci wystarczyć bez niestandardowych reguł udev.