now im reading incoming data as a string, and i have to read the individual data a separate bytes, so is there a way that i can get an array of bytes? (check the arrows at the bottom thats where im reading)
thnx in advance
CODE
#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 <iostream>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <stdlib.h>
//--- dit zou ik kunnen gebruiken voor de rts lijn af te zetten
//#include <asm/io.h>
//#define serport 0x3f8 // for "/dev/ttyS0"
/* baudrate settings are defined in <asm/termbits.h>, which is
included by <termios.h> */
#define BAUDRATE B9600
/* change this definition for the correct port */
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
using namespace std;
main()
{
char test[255];
int fd,c, res,testen;
int sercmd, serstat;
struct termios oldtio,newtio;
char buf[255];
char buf2[255]=" ";
/*
Open modem device for reading and writing and not as controlling tty
because we don't want to get killed if linenoise sends CTRL-C.
*/
cout<<"-----begin-----\n";
fd = open(MODEMDEVICE, O_RDWR);
if (fd <0){
cout<<"error \n";
}
else
{
cout<<"serial poort geopend \n";
}
tcgetattr(fd,&oldtio); /* save current serial port settings */
bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */
/*
BAUDRATE: Set bps rate. You could also use cfsetispeed and cfsetospeed.
CRTSCTS : output hardware flow control (only used if the cable has
all necessary lines. See sect. 7 of Serial-HOWTO) <---------- !!!!!!!!!!! CHECK THIS;
CS8 : 8n1 (8bit,no parity,1 stopbit)
CLOCAL : local connection, no modem contol
CREAD : enable receiving characters
*/
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; // | CRTSCTS; <-- let hier mee op dit kan er
//voor zorgen dat je je data niet kan versturen, gebruik dit enkel als dit mogelijk is.
/*
IGNPAR : ignore bytes with parity errors
ICRNL : map CR to NL (otherwise a CR input on the other computer
will not terminate input)
otherwise make device raw (no other input processing)
*/
newtio.c_iflag = IGNPAR | ICRNL;
/*
Raw output.
*/
newtio.c_oflag = 0;
/*
ICANON : enable canonical input
disable all echo functionality, and don't send signals to calling program
*/
newtio.c_lflag = ICANON;
/*
initialize all control characters
default values can be found in /usr/include/termios.h, and are given
in the comments, but we don't need them here
*/
newtio.c_cc[VINTR] = 0; /* Ctrl-c */
newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */
newtio.c_cc[VERASE] = 0; /* del */
newtio.c_cc[VKILL] = 0; /* @ */
newtio.c_cc[VEOF] = 4; /* Ctrl-d */
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 character arrives */
newtio.c_cc[VSWTC] = 0; /* '\0' */
newtio.c_cc[VSTART] = 0; /* Ctrl-q */
newtio.c_cc[VSTOP] = 0; /* Ctrl-s */
newtio.c_cc[VSUSP] = 0; /* Ctrl-z */
newtio.c_cc[VEOL] = 0; /* '\0' */
newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */
newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */
newtio.c_cc[VWERASE] = 0; /* Ctrl-w */
newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */
newtio.c_cc[VEOL2] = 0; /* '\0' */
/*
now clean the modem line and activate the settings for the port
*/
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
//RTS DISABLEN !!!!
ioctl(fd, TIOCMGET, &serstat);
cout << "-------------serstat=" <<serstat<< "-------------\n";
//cout << "-------------TIOCM_RTS=" <<TIOCM_RTS<< "-------------\n";
//cout << "-------------TIOCMBIS=" <<TIOCMBIS<< "-------------\n";
//testen = serstat & TIOCM_RTS;
//cout << "-------------testen=" << testen<< "-------------\n";
getchar(); // Wait for the return key before continuing.
sercmd = TIOCM_RTS;
printf("Setting the RTS pin.\n");
ioctl(fd, TIOCMBIC, &sercmd); // Set the RTS pin.
ioctl(fd, TIOCMGET, &serstat);
cout << "-------------serstat=" <<serstat<< "-------------\n";
//cout << "-------------TIOCM_RTS=" <<TIOCM_RTS<< "-------------\n";
//cout << "-------------TIOCMBIS=" <<TIOCMBIS<< "-------------\n";
getchar(); // Wait for the return key before continuing.
//Methode 2
//iopl(3); // need this for access to ports
//outb( 0x02, serport+4); //modem control register
/*
terminal settings done, now handle input
In this example, inputting a 'z' at the beginning of a line will
exit the program.
*/
cout<<"-----voor de lus-----\n";
while (STOP==FALSE) { /* loop until we have a terminating condition */
/* read blocks program execution until a line terminating character is
input, even if more than 255 chars are input. If the number
of characters read is smaller than the number of chars available,
subsequent reads will return the remaining chars. res will be set
to the actual number of characters actually read */
cout<<"-----spatie naar het toestel schrijven-----\n";
char spatie[2] = " ";
cout <<"---"<< spatie[0]<<"---";
if (write(fd,spatie,1) < 1)
{
cout<<"-------------error--------------\n";
//continue;
}
sleep(1);
cout<<"-----spatie naar het toestel geschreven-----\n";
cout<<"-----proberen te lezen van de com poort-----\n";
//lezen van de com poort
res = read(fd,buf,255); //IM READING HERE <-------------------------------------------------------------------------------------------------
cout<<"-----GeLezen van de com poort-----\n";
//wegschrijven naar de com poort
buf[res]=0; /* set end of string, so we can printf */
//printf("%s: aantal chars = %d\n", buf, res);
sprintf(test,"%s%d",buf,res); // Printing here <------------------------------------------------------------------------------------------------------------------
cout << test;
cout << "\n--------binnen gekomen data------------ \n";
if (buf[0]=='z') STOP=TRUE;
}
cout<<"-----na de lus-----\n";
/* restore the old port settings */
tcsetattr(fd,TCSANOW,&oldtio);
cout<<"-----einde-----\n";
}
This post has been edited by akira300: 28 Feb, 2007 - 03:10 AM