Portál AbcLinuxu, 4. května 2024 14:26


Dotaz: Programovani serioveho portu

10.1.2007 20:43 Krtek0007 | skóre: 4
Programovani serioveho portu
Přečteno: 1132×
Odpovědět | Admin
Potreboval bych v Linux naprogramovat aplikaci, ktera bude ovladat logicke hodnoty na vystupech serioveho portu a take bude cist aktualni stavy. Potrebuji vyuivat vsechny linky ktere jsou dostupne. Snazim se, ale zatim marne najit najaky zpusob jak v jazyce C ovladat tyto porty. Nasel jsem neco jako

ioctl(fd, TIOCMGET, &status);

status &= ~TIOCM_DTR;

ioctl(fd, TIOCMSET, &status);

coz mi ovsem nefunguje protoze jak mi to hlasi TIOCMGET, TIOCM_DTR a TIOCMSET nebyly nikde deklarovany. Mate nekdo nejake zkusenosti s progamovanim serioveho portu? Dekuji za jakoukoliv pomoc
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.1.2007 20:54 finn | skóre: 43 | blog: finnlandia | 49° 44´/13° 22´
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je zajímavý, že ti vyhledávač nenašel ani první ani druhý díl článku o programování sériového portu.
Užívej dne – možná je tvůj poslední.
10.1.2007 21:06 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Dekuji za odpoved, ale pokud ste si nevsiml ani jeden z clanku se nezabyva programovanim portu v jazyce C coz sice pekne ale pro me ucely naprosto nepotrebne. Muzete mi poradit nejak konkretneji?
10.1.2007 21:21 *
Rozbalit Rozbalit vše Re: Programovani serioveho portu
to s temi makry nejak nechapu.

podle vseho to ani nevypada, ze by chybelo #include <sys/ioctls.h> ...
10.1.2007 21:31 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Nechapu s jakymi makry, zadna makra nepouzivam :-(
10.1.2007 21:54 miro | skóre: 19 | blog: miro
Rozbalit Rozbalit vše Re: Programovani serioveho portu
TIOCMGET, TIOCM_DTR a TIOCMSET :)
11.1.2007 01:22 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Hmm tak ted nechapu zase ja. Muzete nekdo poradit jak to zprovoznit? Takove odpovedi v hadankach mi moc nepomuzou
11.1.2007 01:49 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Nauč se C - to ti pomůže víc než odpovědi v hádankách.

Potom zjistíš, že TIOCM_DTR i ty ostatní jsou makra a musí být deklarována buď v programu (což je v tomto případě prasárna) nebo v nějakém hlavičkovém souboru. Pak zjistíš, který hlavičkový soubor to je a přidáš na začátek programu #include <hlavickovy_soubor.h>

Protože zastávám názor, že lidi by se měli naučit hledat, než položí takovýhle dotaz, neřeknu ti, jaký hlavičkový soubor potřebuješ - buď si to najdi, nebo počkej, někdo jiný se nad tebou třeba slituje. (Krom toho to na 80% bude napsáno tam, kde jsi našel ten kus kódu)
Quando omni flunkus moritati
11.1.2007 08:31 drak89 | skóre: 9 | blog: sluj89
Rozbalit Rozbalit vše Re: Programovani serioveho portu
ja se slituju:) tohle by Ti melo pomoci: http://digilander.libero.it/robang/rubrica/serial.htm
11.1.2007 10:09 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Tohle sem samozreme cetl a v C nejsem zas takove leco abych nevedel co je to makro ale problem je v tom ze i kdyz pripojim hlavickovy soubor termios.h ve kterem by to melo byt tak to hlasi ze to tam neni. Zkousel jste to nekdo prelozit kdyz tak dobre radite? Nekde jsem nasel ze v novejsich jadrech to cele predelali ale nenasel jsem jak :-(
11.1.2007 10:16 iSteve
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Dodej 1:1 test case (cim kratsi, tim lepsi); nema smysl se bavit nad abstraktnim programem co "mas doma".
11.1.2007 10:28 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
Omlouvam se zde prikladam zdrojak ktery by mel teoreticky fungovat ale nefunguje. Vidite tam nekdo nejakou chybu?

#include <stdio.h> /* Standard input/output definitions */ #include <string.h> /* String function definitions */ #include <unistd.h> /* UNIX standard function definitions */ #include <fcntl.h> /* File control definitions */ #include <errno.h> /* Error number definitions */ #include <termios.h> /* POSIX terminal control definitions */ #include <sys/ioctls.h>

int main(void) { int fd; /* File descriptor for the port */ int status;

fd = open("/dev/tts/USB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open_port: Unable to open /dev/ttyS0 - "); } else{ ioctl(fd, TIOCMGET, &status);

status &= ~TIOCM_DTR;

ioctl(fd, TIOCMSET, status); fcntl(fd, F_SETFL, 0); } return (fd); }
11.1.2007 10:29 Krtek0007 | skóre: 4
Rozbalit Rozbalit vše Re: Programovani serioveho portu
omlouvam se za formatovani trosku se to rozjelo
11.1.2007 14:00 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Programovani serioveho portu
omlouvam se za formatovani trosku se to rozjelo
To nemusíš, stačí, když se naučíš číst ;-) :

Dalším častým problémem je, jak vložit výpis logu či konfigurační soubor. V tomto případě váš text vložte mezi značky PRE, které zachovají formátování.
11.1.2007 14:27 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Programovani serioveho portu
...kdyz pripojim hlavickovy soubor termios.h ve kterem by to melo byt tak to hlasi ze to tam neni.
Tam to být nemá. Zkus místo sys/ioctls.h použít sys/ioctl.h
Quando omni flunkus moritati

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.