Linux + RS232.h = problemy z korzystaniem z portu

0

Witam wszystkich

Próbuję od jakiegoś czasu napisać coś pod Ubuntu.
W code::block piszę program do obsługi RS232 z pomocą biblioteki :
http://www.teuniz.net/RS-232/

Początkowo pojawiał się błąd przy próbie otwarcia portu - ale brakowało mi uprawnień więc dodałem się do grupy dialout. Niestety dalej nie mogę otworzyć portu. - Przy próbie wywołania z biblioteki:

error = tcgetattr(Cport[comport_number], old_port_settings + comport_number);
  if(error==-1)

  {
    close(Cport[comport_number]);
    perror("unable to read portsettings ");
    return(1);

Pojawia się błąd:

"Input / output error unable to read portsettings "

Będę wdzięczny za pomoc. Wydaje mi się że nie mam do czegoś uprawnień ale uruchomienie programu jako sudo nie rozwiązuje sprawy.

Po uruchomieniu bezpośrednio kodu pojawia się błąd:

Bad file descriptor

Niestety nie umiem określić dlaczego tak się dzieje - a na podstawie innych wątków na forum zderzam się z tą samą ścianą :/

0

http://4programmers.net/Forum/C_i_C++/197632-konfigurowanie_portu_com

Windows ma juz funkcje odpowiedzialne za operacje na porcie com. Nie potrzeba do tego zadnej biblioteki zewnetrzenej. Opcja szukaj jak mowilem. Tematow jest duzo wiecej.

0

Niestety tak jak napisałem - w pierwszym poście uprałem się na Linuksa (konkretnie Ubuntu).
W związku z tym wiele przykładów dostępnych w sieci nie pasuje. A te które znalazłem nie działają.

// Uparłem się na Linuksa ponieważ chcę spróbować pisać programy pod ARMa a więc na okrojoną wersję Linuksów. A poza tym na co dzień korzystam z Ubuntu.

0

Tak na szybko. Masz na 100% port com? Aktywny? Na widnowsie trzeba sciagac program ktory je emuluje inaczej nie dziala w wiekszosc przypadkow, bo kompy nie maja aktywnych portow com po prostu.

0

Tak - port jest dostępny. Da się z niego normalnie korzystać przy pomocy jakiegoś hyper terminala ściągniętego z centrum oprogramowania.

0

Dlaczego korzystasz z jakiejś egzotycznej biblioteki ?
Dobra nie ważne :)
Oto co mi przychodzi do głowy:

  1. Brak uprawień dostępu do portu - spróbuj odpalić program z uprawnieniami root'a
  2. Port szeregowy to być może nie jest ttyS0 - zmień cport_nr np. na 1
0

Wielkie dzięki za odpowiedź

Badmaneq napisał(a):

Dlaczego korzystasz z jakiejś egzotycznej biblioteki ?

Mógłbyś zaproponować inną bibliotekę do obsługi portu COM? Ew gdzie szukać?

  1. Brak uprawień dostępu do portu - spróbuj odpalić program z uprawnieniami root'a
  2. Port szeregowy to być może nie jest ttyS0 - zmień cport_nr np. na 1

Nr Portu: poprawny na 99% - do sprawdzenia (Łączę się z portem nr: 1 przy pomocy innego programu. W przypadku kiedy w moim wybiorę inny port niż 1 wyskakuje inny błąd)
Uprawnienia ROOTa bądź nadanie uprawnień 100% jest ok.

0

Dobra wiec sprawa jest prosta. Qt + http://code.google.com/p/qextserialport/

Ogarniasz na tej bibliotece. Sa tam przykladowe kody. Ostatni to przykladowy terminal na ktorym sprawdzilem czy dane sa przesylane miedzy wirtualnymi portami. Dziala na 100%. W celu stworzenia wirtualnych portow uzylem socata.

socat -d -d PTY,link=/dev/ttyS10 PTY,link=/dettyS11

Numery terminali do ktorych linkujesz sa dowolne. Ja sobie wybralem 10 i 11 akurat.

0

Pod linuksem jeszcze łatwiej niz pod windows. Piszesz praktycznie jak do pliku, żadna filozofia

0

Faktycznie można jak do pliku...
Ja proponuję bibliotekę Glib http://developer.gnome.org/glib/2.34 jest przenośna i umożliwia operacje na porcie szeregowym przy użyciu zdarzeń. W pętli głównej robisz co chcesz kiedy port odbierze dane generowane jest zdarzenie, które uruchamia funkcję obsługi zdarzenia napisaną przez Ciebie.

0
othello napisał(a):

Pod linuksem jeszcze łatwiej niz pod windows. Piszesz praktycznie jak do pliku, żadna filozofia

Nie wiem - mam wątłe doświadczenie w C pod AVR oraz obecnie w Delphi. Obawiam się że nie będzie łatwo.
Muszę to co napisaliście przetrawić. Może znajdę przykład użycia gdzieś i jakoś to ruszę - jak nie to się odezwę.
A jak się uda to wkleję tu przykład dla potomnych : ) Wielkie dzięki za pomoc.

Udało mi się poprawnie zainstalować Glib 2.0 - nowszej wersji nie ponieważ brakowało mi nowszej wersji jednego z plików - ale to nie ma znaczenia. Obecnie jestem na etapie poszukiwania przykładu zastosowania dla Timera oraz dla portu COM

1 użytkowników online, w tym zalogowanych: 0, gości: 1