Portál AbcLinuxu, 31. října 2025 07:39
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
        
#define BAUDRATE B19200
#define MODEMDEVICE "/dev/ttyUSB0"
#define FALSE 0
#define TRUE 1
        
volatile int STOP=FALSE; 
       
      main()
      {
        int fd,c, res;
        struct termios oldtio,newtio;
        char buf[255];
        
        fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
        if (fd <0) {perror(MODEMDEVICE); exit(-1); }
        
        tcgetattr(fd,&oldtio); /* save current port settings */
        
        bzero(&newtio, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = (INPCK | IGNPAR);
        newtio.c_oflag = 0;
        
        /* set input mode (non-canonical, no echo,...) */
        newtio.c_lflag = 0; 
        newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
        newtio.c_cc[VMIN]     = 1;   /* blocking read until 5 chars received */
        
        
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);
        while (STOP==FALSE) {       /* loop for input */
         res = read(fd,buf,255);   /* returns after 5 chars have been input */
         buf[res]=0;               /* so we can printf... */
       write (fd, "a", 1);  
	if (buf[0] == 'I') write (fd, "sipka nahoru" , 12); 
else
		printf("%s\n", buf);
         if (buf[0]=='I') STOP=TRUE;
        }
        tcsetattr(fd,TCSANOW,&oldtio);
      }
             7.6.2006 10:02
Josef Kufner             | skóre: 70
        7.6.2006 10:02
Josef Kufner             | skóre: 70
            
            
        echo "ahoj" > /dev/ttyUSB0neco na displej vypise?
 7.6.2006 18:27
Josef Kufner             | skóre: 70
        7.6.2006 18:27
Josef Kufner             | skóre: 70
            
            
        fd = open("/dev/...", O_RDWR);
write(fd, ...);
read(fd, ...);
close(fd);
             7.6.2006 18:32
Josef Kufner             | skóre: 70
        7.6.2006 18:32
Josef Kufner             | skóre: 70
            
            
        options.c_cflag = parita,rychlost,stopbity ... options.c_cflag |= CS8 | CLOCAL | CREAD | HUPCL; options.c_iflag = IGNPAR | IGNBRK | INPCK | IMAXBEL | IXOFF; options.c_lflag = ECHOKE; options.c_oflag = ONOCR;
2.nejak nemuzu prijit na to jak pouzivat len() u fce write musim zadat i pocet odesilanych znaku write(fd,"a",1) - jeden znak - a do streamu fd, v pripade ze mam pole znaku napr. char c[] = {'a','h','o','j'}; a nechci zadavat pocet znaku (protoze pole budu potrebovat generovat ruzne dlouhe), zkousel jsem write (fd, c , len(c)) ale nevim proc nefunguje to :(Pokud pole znaků bude vždycky nějaký text, můžeš to pole udělat null-terminated a pro zjištění délky použít strlen().
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char **argv) {  
  char up[] =   "\xFE\x58sipka nahoru";
  char down[] = "\xFE\x58sipka dolu";
  char *tosend = NULL;
  int a = 'J';
  
  switch(a){      
    case 'I':
      tosend = strdup(up);
      break;
    case 'J':
      tosend = strdup(down);
      break;
    default:
      printf("Strange character\n");
      exit(-1);
  }
  
  printf("string length is %d\n", strlen(tosend));
  printf("%s", tosend);
  free(tosend);
  return 0;
}
Když to pustím pajpou do xxd, tak je vidět, jaký je obsah řetězce:
$ ./a.out | xxd
0000000: 7374 7269 6e67 206c 656e 6774 6820 6973  string length is
0000010: 2031 320a fe58 7369 706b 6120 646f 6c75   12..Xsipka dolu
                   ^^^^
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.