LED-Namensschild: Difference between revisions
Jump to navigation
Jump to search
Line 137: | Line 137: | ||
== AENDERUNGEN VON JCHOME == | == AENDERUNGEN VON JCHOME == | ||
<pre> | <pre> | ||
#include <string.h> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <sys/types.h> | |||
#include <sys/ioctl.h> | |||
#include <sys/time.h> | |||
#include <fcntl.h> | |||
#include <unistd.h> | |||
#include <termios.h> | |||
#define DEBUG_LEVEL 6 | |||
static int fd = 0; | |||
int init_bl(char*); | |||
int command_bl(char*, char); | |||
int main(int argc, char *argv[]) | |||
{ | |||
if(argc<3){ | |||
printf("usage: %s speed text [device]\n%s 2 \"this is a text\" /dev/ttyUSB0\n",argv[0],argv[0]); | |||
return 0; | |||
} | |||
init_bl(argv[3]); | |||
command_bl(argv[2], argv[1][0]); | |||
return 0; | |||
} | |||
/* Funktion zum Initialisieren und öffnen des Ports/Devices */ | |||
int init_bl (char *device) | |||
{ | |||
int modelines = 0; | |||
struct termios settings; | |||
if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: gestartet.\n"); | |||
/* öffnen und überprüfen des Filedeskriptors */ | |||
if(device) | |||
fd = open(device, O_RDWR|O_NOCTTY); | |||
else | |||
fd = open ("/dev/ttyUSB0", O_RDWR|O_NOCTTY); | |||
if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Filedeskriptor fuer Device tty* ist %d.\n", fd); | |||
if (fd == -1) return (fd); | |||
/* Prüfen ob Filedeskriptor zu einem Terminal gehört */ | |||
if (!isatty(fd)) | |||
{ | |||
fprintf (stderr,"Das Device ist kein Terminal-Device.\n"); | |||
return (-1); | |||
} | |||
if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: Device %d ist ein Terminaldevice.\n", fd); | |||
- | |||
/* | /* Setzen der Inputflags */ | ||
/* Ignoriere BREAKS beim Input / Keine Parität / Software-Handschake aus */ | |||
settings.c_iflag = IGNBRK | IGNPAR | IXOFF; | |||
/* Setzen der Outputflags */ | |||
settings.c_oflag = 0; /* Keine besonderen Angaben nötig */ | |||
/* Setzen der Controlflags */ | |||
/* Setze acht Bit / Lesen erlauben / Ignoriere Modembefehle */ | |||
settings.c_cflag = CS8 | CREAD | CLOCAL; | |||
/* Setzen der lokalen Flags */ | |||
settings.c_lflag = 0; /* Keine besonderen Angaben nötig */ | |||
/* Festlegen der maximalen Zeit, welche beim Lesen gewartet werden soll */ | |||
settings.c_cc[VTIME] = 10; /* Angabe in Zehntel-Sekunden */ | |||
/* Festlegen der minimalen Anzahl der zu lesenden Bytes */ | |||
settings.c_cc[VMIN] = 0; | |||
/* Definieren der übertragungsgeschwindigkeit */ | |||
if(cfsetspeed (&settings, B1200) != 0) { | |||
fprintf (stderr, | |||
"Fehler beim Setzen der Übertragungsgeschwindigkeit auf 19200 !\n"); | |||
return (-1); | |||
} | |||
if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: | if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Baudrate 1200 fuer Device %d gesetzt.\n", fd); | ||
/* übertragung der Einstellungen an die Schnittstelle */ | |||
if (tcsetattr (fd, TCSANOW, &settings) == -1) { | |||
fprintf (stderr,"Fehler beim Setzen der Terminalattribute fuer Device.\n"); | |||
return (-1); | |||
} | |||
if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Schnittstellenparameter fuer Device %d gesetzt.\n", fd); | |||
/* Lesen der IO-Control-Parameter */ | |||
if (ioctl (fd, TIOCMGET, &modelines) == -1) { | |||
fprintf (stderr,"Fehler bei ioctl TIOCMGET fuer Device.\n"); | |||
return (-1); | |||
} | |||
if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: IO-controlparameter fuer %d gelesen.\n", fd); | |||
/* Setzen des RTS-Signals */ | |||
modelines &= ~TIOCM_RTS; | |||
if (ioctl (fd, TIOCMSET, &modelines) == -1) { | |||
fprintf (stderr,"Fehler bei ioctl TIOCMSET fuer Device.\n"); | |||
return (-1); | |||
} | } | ||
if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: RTS-Signal fuer %d gesetzt.\n", fd); | |||
return (fd); | |||
} | |||
int command_bl (char* befehl, char v) | |||
{ | |||
int i, len, nbyte,j=2; | |||
char buf[160]; | |||
buf[0] = 2; | |||
buf[1] = v; | |||
len = strlen(befehl); | |||
if (len > 120) { | |||
fprintf(stderr,"command_bl: Uebergabestring zu lang (%d). \n", len); | |||
return (-1); | |||
} | |||
/* Kopieren des Befehls in den Puffer */ | |||
for (i = 0; i < len; i++){ | |||
befehl[i]=toupper(befehl[i]); | |||
buf[j++] = befehl[i]; | |||
} | |||
buf[j++] = 3; | |||
buf[j] = '\0'; | |||
len += 3; | |||
if (DEBUG_LEVEL > 3 ) | |||
fprintf (stderr, "command_bl: -> BL (%d): %s \n", len, buf); | |||
nbyte = write (fd, buf, len); | |||
if (nbyte != len) { | |||
fprintf (stderr,"command_bl: Schreibfehler. %d Zeichen uebertragen. \n", nbyte); | |||
if (DEBUG_LEVEL < 5) return (-1); | |||
} | |||
return (-1); | |||
} | |||
</pre> | </pre> |
Revision as of 21:54, 20 July 2007
Programm von ralf/entropia
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/time.h> #include <fcntl.h> #define __USE_BSD #include <unistd.h> #include <termios.h> #define DEBUG_LEVEL 6 static int fd = 0; int init_bl(void); int command_bl(char*, char); int main(int argc, char *argv[]) { init_bl(); command_bl(argv[2], argv[1][0]); return (0); } /* Funktion zum Initialisieren und öffnen des Ports/Devices */ int init_bl (void) { int modelines = 0; struct termios settings; if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: gestartet.\n"); /* öffnen und überprüfen des Filedeskriptors */ fd = open ("/dev/ttyUSB0", O_RDWR|O_NOCTTY); if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Filedeskriptor fuer Device tty* ist %d.\n", fd); if (fd == -1) return (fd); /* Prüfen ob Filedeskriptor zu einem Terminal gehört */ if (!isatty(fd)) { fprintf (stderr,"Das Device ist kein Terminal-Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: Device %d ist ein Terminaldevice.\n", fd); /* Setzen der Inputflags */ /* Ignoriere BREAKS beim Input / Keine Parität / Software-Handschake aus */ settings.c_iflag = IGNBRK | IGNPAR | IXOFF; /* Setzen der Outputflags */ settings.c_oflag = 0; /* Keine besonderen Angaben nötig */ /* Setzen der Controlflags */ /* Setze acht Bit / Lesen erlauben / Ignoriere Modembefehle */ settings.c_cflag = CS8 | CREAD | CLOCAL; /* Setzen der lokalen Flags */ settings.c_lflag = 0; /* Keine besonderen Angaben nötig */ /* Festlegen der maximalen Zeit, welche beim Lesen gewartet werden soll */ settings.c_cc[VTIME] = 10; /* Angabe in Zehntel-Sekunden */ /* Festlegen der minimalen Anzahl der zu lesenden Bytes */ settings.c_cc[VMIN] = 0; /* Definieren der übertragungsgeschwindigkeit */ if(cfsetspeed (&settings, B1200) != 0) { fprintf (stderr, "Fehler beim Setzen der Übertragungsgeschwindigkeit auf 19200 !\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Baudrate 1200 fuer Device %d gesetzt.\n", fd); /* übertragung der Einstellungen an die Schnittstelle */ if (tcsetattr (fd, TCSANOW, &settings) == -1) { fprintf (stderr,"Fehler beim Setzen der Terminalattribute fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Schnittstellenparameter fuer Device %d gesetzt.\n", fd); /* Lesen der IO-Control-Parameter */ if (ioctl (fd, TIOCMGET, &modelines) == -1) { fprintf (stderr,"Fehler bei ioctl TIOCMGET fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: IO-controlparameter fuer %d gelesen.\n", fd); /* Setzen des RTS-Signals */ modelines &= ~TIOCM_RTS; if (ioctl (fd, TIOCMSET, &modelines) == -1) { fprintf (stderr,"Fehler bei ioctl TIOCMSET fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: RTS-Signal fuer %d gesetzt.\n", fd); return (fd); } int command_bl (char* befehl, char v) { int i, len, nbyte,j=2; char buf[160]; buf[0] = 2; buf[1] = v; len = strlen(befehl); if (len > 120) { fprintf(stderr,"command_bl: Uebergabestring zu lang (%d). \n", len); return (-1); } /* Kopieren des Befehls in den Puffer */ for (i = 0; i < len; i++) buf[j++] = befehl[i]; buf[j++] = 3; len += 3; if (DEBUG_LEVEL > 3 ) fprintf (stderr, "command_bl: -> BL (%d): %s \n", len, buf); nbyte = write (fd, buf, len); if (nbyte != len) { fprintf (stderr,"command_bl: Schreibfehler. %d Zeichen uebertragen. \n", nbyte); if (DEBUG_LEVEL < 5) return (-1); } return (-1); }
AENDERUNGEN VON JCHOME
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/time.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> #define DEBUG_LEVEL 6 static int fd = 0; int init_bl(char*); int command_bl(char*, char); int main(int argc, char *argv[]) { if(argc<3){ printf("usage: %s speed text [device]\n%s 2 \"this is a text\" /dev/ttyUSB0\n",argv[0],argv[0]); return 0; } init_bl(argv[3]); command_bl(argv[2], argv[1][0]); return 0; } /* Funktion zum Initialisieren und öffnen des Ports/Devices */ int init_bl (char *device) { int modelines = 0; struct termios settings; if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: gestartet.\n"); /* öffnen und überprüfen des Filedeskriptors */ if(device) fd = open(device, O_RDWR|O_NOCTTY); else fd = open ("/dev/ttyUSB0", O_RDWR|O_NOCTTY); if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Filedeskriptor fuer Device tty* ist %d.\n", fd); if (fd == -1) return (fd); /* Prüfen ob Filedeskriptor zu einem Terminal gehört */ if (!isatty(fd)) { fprintf (stderr,"Das Device ist kein Terminal-Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: Device %d ist ein Terminaldevice.\n", fd); /* Setzen der Inputflags */ /* Ignoriere BREAKS beim Input / Keine Parität / Software-Handschake aus */ settings.c_iflag = IGNBRK | IGNPAR | IXOFF; /* Setzen der Outputflags */ settings.c_oflag = 0; /* Keine besonderen Angaben nötig */ /* Setzen der Controlflags */ /* Setze acht Bit / Lesen erlauben / Ignoriere Modembefehle */ settings.c_cflag = CS8 | CREAD | CLOCAL; /* Setzen der lokalen Flags */ settings.c_lflag = 0; /* Keine besonderen Angaben nötig */ /* Festlegen der maximalen Zeit, welche beim Lesen gewartet werden soll */ settings.c_cc[VTIME] = 10; /* Angabe in Zehntel-Sekunden */ /* Festlegen der minimalen Anzahl der zu lesenden Bytes */ settings.c_cc[VMIN] = 0; /* Definieren der übertragungsgeschwindigkeit */ if(cfsetspeed (&settings, B1200) != 0) { fprintf (stderr, "Fehler beim Setzen der Übertragungsgeschwindigkeit auf 19200 !\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Baudrate 1200 fuer Device %d gesetzt.\n", fd); /* übertragung der Einstellungen an die Schnittstelle */ if (tcsetattr (fd, TCSANOW, &settings) == -1) { fprintf (stderr,"Fehler beim Setzen der Terminalattribute fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr, "init_bl: Schnittstellenparameter fuer Device %d gesetzt.\n", fd); /* Lesen der IO-Control-Parameter */ if (ioctl (fd, TIOCMGET, &modelines) == -1) { fprintf (stderr,"Fehler bei ioctl TIOCMGET fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: IO-controlparameter fuer %d gelesen.\n", fd); /* Setzen des RTS-Signals */ modelines &= ~TIOCM_RTS; if (ioctl (fd, TIOCMSET, &modelines) == -1) { fprintf (stderr,"Fehler bei ioctl TIOCMSET fuer Device.\n"); return (-1); } if (DEBUG_LEVEL > 5) fprintf (stderr,"init_bl: RTS-Signal fuer %d gesetzt.\n", fd); return (fd); } int command_bl (char* befehl, char v) { int i, len, nbyte,j=2; char buf[160]; buf[0] = 2; buf[1] = v; len = strlen(befehl); if (len > 120) { fprintf(stderr,"command_bl: Uebergabestring zu lang (%d). \n", len); return (-1); } /* Kopieren des Befehls in den Puffer */ for (i = 0; i < len; i++){ befehl[i]=toupper(befehl[i]); buf[j++] = befehl[i]; } buf[j++] = 3; buf[j] = '\0'; len += 3; if (DEBUG_LEVEL > 3 ) fprintf (stderr, "command_bl: -> BL (%d): %s \n", len, buf); nbyte = write (fd, buf, len); if (nbyte != len) { fprintf (stderr,"command_bl: Schreibfehler. %d Zeichen uebertragen. \n", nbyte); if (DEBUG_LEVEL < 5) return (-1); } return (-1); }