Hallo Daniel,
ich hab den Code jetzt mal aufgeräumt und alles rausgeworfen was ich im Moment nicht brauche.
Code:
// Compile GCC -o serial_wiring -l rt serial_wiring.c -lwiringPi
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
//WiringPi include für SEN/STA Erkennung
#include <wiringPi.h>
//Konfig RASPI USART
#define BAUDRATE B9600 // 9600 Baud definieren für 8E1 I-Bus
char MODEMDEVICE[]= "/dev/ttyAMA0"; // Schnittstelle wählen
int getit; //Nachrichtenblock angekommen
int fd; // File descriptor
struct termios newtio={};
unsigned char receive() //Zeichen empfangen
{
int res;
unsigned char buffer;
res = read(fd, &buffer, 1);
getit = fd;
return buffer;
}
int init() //Schnittstelle parametrieren und öffnen für I-Bus 9600 8E1
{
//O_RDONLY, O_WRONLY or O_RDWR -
//O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
// man 2 open fuer mehr Infos - see "man 2 open" for more info
// O_NOCTTY No ControllTeleType
fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY );
if (fd < 0){
printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
exit(-1);
}
memset(&newtio, 0, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD | PARENB; //setzt Einstellungen vom UART
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0; /* set input mode (non-canonical, no echo, ...) */
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 chars received old 1 */
newtio.c_cc[VSTART] = 0; /* Ctrl-q startet Datenübertragung */
newtio.c_cc[VSTOP] = 0; /* Ctrl-s stoppt Datenübertragung*/
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
return fd;
}
int main(int argc, char** argv) //Programmstart
{
//new
int pin = 7; //GPIO 4
int value = 0; // Deklaration Eingangswert GPIO4
getit = 0;
printf ("Raspberry Test UART+wiringPi\n") ;
if (wiringPiSetup () == -1)
exit (1) ;
//Fehlerrückgabe wiringPi
pinMode(pin,INPUT); //wiringPi GPIO4 Pin7 deklarieren
char c;
init(); //Schnittstelle UART parametrieren und öffnen
//sleep(5); //nix tun
while (1)
{
value = digitalRead (pin);
printf("Status SEN/STA %d \n", value );
//printf("SEN/STA: %d\n", value); // BUSRUHE?
c=receive();
//if((value==1)){
printf("MESSAGE %X\n", c); // c in Hex ausgeben %d = Dezimal %H = Hex
}
close (fd);
return 0;
}
Welche manpages meinst du? In der "open" hab ich nichts entdeckt. Wie vielleicht schon erwähnt ich bin leider kein Profi deshalb wohl auch die dummen Fragen.
Wie geht das genau mit SIGIO bzw in welchem man finde ich das?
Grüße
Rainer
Lesezeichen