Search
Přestože je sériový port blokové zařízení, které je v OS reprezentované souborem v adresáři /dev/ a lze s ním tak pracovat jako s běžným souborem funkcemi ze standardní knihovny např. fopen() nebo fwrite(), je z důvodu přímého přístup výhodnější využít funkce systémové knihovny jako jsou open(), close(), read() a write(). Tyto funkce nepracují s ukazatelem na strukturu FILE*, ale přímo s tzv. file deskriptorem, který je reprezentovaný celým číslem typu int.
/dev/
fopen()
fwrite()
open()
close()
read()
write()
FILE*
int
Nastavení parametrů komunikace je možné prostřednictvím funkce knihovny <termios.h>, například nastavení rychlosti 115200 bps spolu s VMIN a VTIME (viz např. Understanding UNIX termios VMIN and VTIM) lze ralizovat
<termios.h>
int fd = open(fname, O_RDWR | O_NOCTTY | O_SYNC); struct termios term;prg_serial.h a tcgetattr(fd, &term); cfmakeraw(&term); term.c_cc[VTIME] = 2; //set vtime term.c_cc[VMIN] = 1; cfsetispeed(&term, BAUD_RATE); cfsetospeed(&term, BAUD_RATE); tcsetattr(fd, TCSADRAIN, &term) >= 0); fcntl(fd, F_GETFL) >= 0); tcsetattr(fd, TCSADRAIN, &term); fcntl(fd, F_GETFL); tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &term);
kde pro jednoduchost netestujeme hodnoty návratových hodnot volání jednotlivých funkcí.
Pro znakově orientovaný vstup/výstup pak můžeme zapouzdřit volání read/write do samostatných funkcí např.
int serial_close(int fd) { return close(fd); } int serial_putc(int fd, char c) { return write(fd, &c, 1); }
Příslušné funkce pro otevření, zavření a čtení/zápis znaku jsou implementované v modulu prg_serial.