[linux] schrijven naar seriele poort ttyS0

Pagina: 1
Acties:

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Wie kan mij helpen met het volgende probleem. Ik wil vanuit linux naar de seriele poort schrijven. Deze stel ik als volgt in:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int fd;
struct termios newset;

void init() {
    // Open de seriele poort
    // O_RDWR = Open for reading and writing
    // O_NOCTTY = Port doesn't become controlling terminal
    // O_NONBLOCK = Causes the calling proces not to wait
    fd = open(DEVICE,O_RDWR | O_NOCTTY | O_NONBLOCK);
    // Error if open fails
    if (fd < 0) {
    perror(DEVICE);
    exit(-1);
    }
    
    // Poort instellen
    // CLOCAL = Ignore modem control lines
    // CRTSCTS = Flow control
    // CREAD = Enable receiver
    if(fcntl(fd, F_SETOWN, getpid())!=0) printerror("fcntl");
    if(fcntl(fd, F_SETFL, O_ASYNC)!=0) printerror("fcntl");    
    newset.c_cflag = BAUDRATE | DATABITS | CLOCAL | CRTSCTS | CREAD;
    newset.c_iflag = IGNPAR; // IGNPAR = Ignore framing and parity errors
    newset.c_oflag = 0; // OPOST = Post process output
    newset.c_lflag = 0;
    newset.c_cc[VMIN] = 1;
    if (tcflush(fd,TCIFLUSH)!=0) printerror("tcflush");
    if (tcsetattr(fd,TCSANOW,&newset)!=0) printerror("tcsetattr");
}

Als ik nu een write(fd,&karakter,1) uitvoer, lukt dit niet. (returned geen 0).

Kan iemand mij hiermee helpen of aan een voorbeeldje?

PS. printerror is gewoon een functietje die een error afdrukt

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Wist niet dat dat kon in JavaScript?!

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Oh, ja nou je het zegt. Helemaal verkeerd gepost... Sorry

  • Arno
  • Registratie: Juli 2000
  • Laatst online: 18-08 21:35

Arno

PF5A

--> [forum=23] <--

"Supercars are made to mess around with G-forces, hypercars are made to mess around with G-strings"
Jeremy Clarkson


  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

Op dinsdag 28 augustus 2001 10:23 schreef RdeTuinman het volgende:
Wie kan mij helpen met het volgende probleem. Ik wil vanuit linux naar de seriele poort schrijven. Deze stel ik als volgt in:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int fd;
struct termios newset;

void init() {
    // Open de seriele poort
    // O_RDWR = Open for reading and writing
    // O_NOCTTY = Port doesn't become controlling terminal
    // O_NONBLOCK = Causes the calling proces not to wait
    fd = open(DEVICE,O_RDWR | O_NOCTTY | O_NONBLOCK);
    // Error if open fails
    if (fd < 0) {
    perror(DEVICE);
    exit(-1);
    }
    
    // Poort instellen
    // CLOCAL = Ignore modem control lines
    // CRTSCTS = Flow control
    // CREAD = Enable receiver
    if(fcntl(fd, F_SETOWN, getpid())!=0) printerror("fcntl");
    if(fcntl(fd, F_SETFL, O_ASYNC)!=0) printerror("fcntl");    
    newset.c_cflag = BAUDRATE | DATABITS | CLOCAL | CRTSCTS | CREAD;
    newset.c_iflag = IGNPAR; // IGNPAR = Ignore framing and parity errors
    newset.c_oflag = 0; // OPOST = Post process output
    newset.c_lflag = 0;
    newset.c_cc[VMIN] = 1;
    if (tcflush(fd,TCIFLUSH)!=0) printerror("tcflush");
    if (tcsetattr(fd,TCSANOW,&newset)!=0) printerror("tcsetattr");
}

Als ik nu een write(fd,&karakter,1) uitvoer, lukt dit niet. (returned geen 0).

Kan iemand mij hiermee helpen of aan een voorbeeldje?

PS. printerror is gewoon een functietje die een error afdrukt
1) Waarom op je een ttyS met O_NOCTTY ?
2) Wat geeft write() voor foutmelding ? (de perror() zooi dus)

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Op dinsdag 28 augustus 2001 20:15 schreef igmar het volgende:

1) Waarom op je een ttyS met O_NOCTTY ?
2) Wat geeft write() voor foutmelding ? (de perror() zooi dus)
1) Eerlijk gezegd... Geen id. Maar nu ik het zo bekijk heeft dat idd geen nut

2) Ik controleerde met:
code:
1
if(write(fd,&tekst,len)!=0) printf("foutje");

Maar nu ik dit deed:
code:
1
perror("/dev/ttyS0");

kreeg ik gewoon /dev/ttyS0: Succes

Dus het werkt toch gewoon...
Bedankt! Weten we dat ook weer...
Pagina: 1