Odczyt / zapis portu /dev/ttyS0

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
2n3055
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 09 mar 2009, 12:11
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME

Odczyt / zapis portu /dev/ttyS0

Post autor: 2n3055 »

Witam wszystkich.

Chciałbym napisać prosty skrypt uruchamiany co jakiś czas z cron'a wysyłający i odbierający dane z urządzenia podpiętego do portu rs232 (/dev/ttyS0).
Zadanie udało mi się częściowo rozwiązać:

Kod: Zaznacz cały

#!/bin/bash
echo -en "1\r" > /dev/ttyS0 
cat /dev/ttyS0 > ./plik.txt
Dane są wysyłane poprawnie. Odbierana odpowiedź jest zapisywana do pliku, jednak po odczycie danych cat nie zamyka się i skrypt cały czas pozostaje uruchomiony.
Jak można wymusić zakończenie cat po odczycie danych z urządzenia?
Z góry dziękuję za pomoc.
Chmiela2121
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 10 sie 2007, 15:23
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Odczyt / zapis portu /dev/ttyS0

Post autor: Chmiela2121 »

Możliwe, że to co napiszę jest bzdurą, ale wydaje mi się, że cat zakończy swoje działanie, gdy odbierze EOF. Jeżeli jest to prawdą, a to urządzenie nie wysyła tego sygnału po zakończeniu swojej pracy, to może być problem. Najprościej byłoby napisać program, który zrobi to samo co cat, a zakończy swoje działanie nie czekając na EOF a na sygnał kończący od urządzenia. Pytanie zatem, co jest ostatnim znakiem wysyłanym przez urządzenie?
Zapraszam serdecznie - www.mblog.boo.pl
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Odczyt / zapis portu /dev/ttyS0

Post autor: beluosus »

Użyj dd albo zabij cat np po sekundzie.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
2n3055
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 09 mar 2009, 12:11
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME

Odp: Odczyt / zapis portu /dev/ttyS0

Post autor: 2n3055 »

Witam!
Dziękuję Wam za odpowiedzi.
dd z parametrem count rozwiązało sprawę:

Kod: Zaznacz cały

dd if=/dev/ttyS0 of=./plik.txt count=1
i wszystko zaczęło działać.
Do Chmiela2121 - jestem w tej komfortowej sytuacji, że to co wysyła urządzenie do komputera zależy ode mnie, ale nie udało mi się dojść w jaki sposób mogę nadać EOF.
Wie ktoś może jaką sekwencję znaków ascii programy nasłuchujące odbiorą jako znak EOF?

Pozdrawiam!
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Odczyt / zapis portu /dev/ttyS0

Post autor: Dwimenor »

Kod: Zaznacz cały

Wie ktoś może jaką sekwencję znaków ascii programy nasłuchujące odbiorą jako znak EOF?
Zajrzyj do man ascii
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
Chmiela2121
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 10 sie 2007, 15:23
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Odczyt / zapis portu /dev/ttyS0

Post autor: Chmiela2121 »

"The actual value of EOF is system-dependent (but is commonly -1, such as in glibc[1]) and is unequal to any valid character code." (Wikipedia).

Skoro masz możliwość ustalenia sygnału wyjściowego z urządzenia to możesz wydać na koniec sygnał EOT (4 dziesiętnie). I użyć programu o kodzie, na kształt:

Kod: Zaznacz cały

#include <iostream>
#include <cstdio>

int main(){
	char c;
	
	while((c = fgetc(stdin)) != 4){ //EOT = 4 (dec.)
		std::cout << c; 
	}
	
	return 0;
}
Ale nie wiem czy jest sens, skoro dd działa jak należy.
Zapraszam serdecznie - www.mblog.boo.pl
szaro102
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 03 lip 2006, 08:56

Re: Odczyt / zapis portu /dev/ttyS0

Post autor: szaro102 »

2n3055 w jaki sposób ustawiasz parametry (prędkość, parzystość, bity ....) transmisji w swoim skrypcie?
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości