Der Quellcode lautet:
Code:
// Compile with: GCC /var/scripte/senden.c -o /var/scripte/senden
//#include <iostream>
//using namespace std;
#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>
#define BAUDRATE B115200 // Baudrate
char MODEMDEVICE[]= "/dev/ttyAMA0"; // Device zum Senden
struct termios newtio={}; // Variable für "termios.h"
volatile int fd; // File descriptor
unsigned char Send_UART(char c[]) // Gibt ein einzelnes Zeichen über UART (als fd geöffnet) aus.
{
int res;
char Counter;
char lenght = 0x00;
lenght = strlen(c); // Länge des Strings feststellen
while(Counter < lenght)
{
res = write(fd, &c[Counter], 1);
Counter++;
}
Counter = 0x00; // Counter reseten
res = write(fd, &"\r", 1); // CR senden
res = write(fd, &"\n", 1); // LF senden
}
int UART_Init() //Schnittstelle öffnen und parametrieren
{
/*** Init ***/
//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_WRONLY | O_NOCTTY);
if (fd < 0)
{
printf("Fehler beim öffnen von %s\n", MODEMDEVICE);
exit(-1);
}
memset(&newtio, 0, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; // Setzt die neuen Porteinstellungen
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 */
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
return fd;
}
int main(int argc, char** argv) //Programmstart
{
// Variablen für das Hauptprogramm
char buffer[] = "";
int Laenge = 0x00;
UART_Init(); // Schnittstelle öffnen und parametrieren
Laenge = strlen(argv[1]);
strncpy(buffer, argv[1], Laenge); // Kopiert den zweiten Parameter der übergeben wurde in den String "Buffer
if (argc >= 1)
{
printf("Text empfangen\n"); // Empfangsbestätigung senden
Send_UART(buffer);
}
close (fd);
return 0;
}
Die Länge für strncpy ist variabel und richtet sich nach der Länge des ersten Argumentes.
Lesezeichen