All pastes #432186 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-10 02:53 UTC
rendered paste body
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
included by <termios.h> */
#define BAUDRATE B4800            
#define MODEMDEVICE "/dev/ttyAM1"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1

int waitforchar(int *fd,char find, int attempts);

volatile int STOP=FALSE; 

int main(){
  int fd,res;
  struct termios oldtio,newtio;
  char buf[255],tmpbuf[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.
 */
  fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
  if (fd <0) {perror(MODEMDEVICE); exit(-1); }
       
  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)
   CS8     : 8n1 (8bit,no parity,1 stopbit)
   CLOCAL  : local connection, no modem contol
   CREAD   : enable receiving characters
  */
   newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
         
  /*
   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' */
        
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);


    write(fd,"m",1);
	if(waitforchar(&fd,'m',10)==-1){
		printf("failed to find char\n");
	}

    return(0);
}

int waitforchar(int *fd, char find, int attempts){
	int i=0;
	char tmpbuf[255];	
	while(i<=attempts){
		printf("reading...\n");		
		read(fd,tmpbuf,1);
		printf("%c \n");
		if(tmpbuf[0]==find){
			return(0);
		}
		if(attempts!=0){
			
			i++;
		}
	}
	return(-1);
}