Bir Linux sistemindeki tüm mevcut seri bağlantı noktalarının / cihazların bir listesini almanın uygun yolu nedir?
Başka bir deyişle, içindeki tüm aygıtları yinelediğimde /dev/
, hangilerinin klasik şekilde seri bağlantı noktaları olduğunu, yani genellikle baud hızlarını ve RTS / CTS akış denetimini destekleyenleri nasıl anlarım ?
Çözüm C olarak kodlanacaktır.
Soruyorum çünkü bunu açıkça yanlış yapan bir üçüncü taraf kitaplığı kullanıyorum: Görünüşe göre sadece yinelemeli /dev/ttyS*
. Sorun, örneğin, USB üzerinden seri bağlantı noktalarının (USB-RS232 bağdaştırıcıları tarafından sağlanır) bulunması ve bunların / dev / ttyUSB * altında listelenmesidir. Ve Linux.org'da Seri NASIL'ı okurken, zamanla başka isim boşluklarının da olacağı fikrini alıyorum.
Bu yüzden seri cihazları tespit etmenin resmi yolunu bulmam gerekiyor. Sorun şu ki hiçbiri belgelenmemiş gibi görünüyor veya ben bulamıyorum.
Bir yolun tüm dosyaları açmak /dev/tty*
ve ioctl()
bunlardan yalnızca seri cihazlarda kullanılabilen belirli bir dosyayı çağırmak olduğunu hayal ediyorum . Yine de bu iyi bir çözüm olur mu?
Güncelleme
hrickards "seterial " için kaynağa bakmayı önerdi. Kodu tam olarak aklımdaki şeyi yapıyor:
İlk olarak, aşağıdakileri içeren bir cihaz açar:
fd = open (path, O_RDWR | O_NONBLOCK)
Sonra şunu çağırır:
ioctl (fd, TIOCGSERIAL, &serinfo)
Bu çağrı herhangi bir hata vermezse, görünüşe göre bir seri cihazdır.
Seri Programlama / termios'ta , O_NOCTTY
seçeneği de eklemeyi öneren benzer bir kod buldum .
Yine de bu yaklaşımla ilgili bir sorun var:
Bu kodu BSD Unix (yani Mac OS X) üzerinde test ettiğimde de işe yaradı. Ancak , Bluetooth aracılığıyla sağlanan seri aygıtlar sistemin (sürücünün) Bluetooth aygıtına bağlanmaya çalışmasına neden olur ve bu aygıtın zaman aşımı hatasıyla geri dönmesi biraz zaman alır. Bunun nedeni sadece cihazın açılmasıdır. Ve Linux'ta da benzer şeylerin olabileceğini hayal edebiliyorum - ideal olarak, türünü anlamak için cihazı açmam gerekmiyor. ioctl
Açık olmadan işlevleri çağırmanın veya bağlantı yapılmasına neden olmayacak şekilde bir cihazı açmanın bir yolu olup olmadığını merak ediyorum.
Ne yapmalıyım?