Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Non-Canonical Input Processing*/
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/ioctl.h>
- #include <fcntl.h>
- #include <termios.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #define BAUDRATE B38400
- #define _POSIX_SOURCE 1 /* POSIX compliant source */
- #define MODEMDEVICE "/dev/ttyS"
- #define FALSE 0
- #define TRUE 1
- #define RECEIVER 0
- #define TRANSMITTER 1
- #define F 0x7e
- #define A 0x03
- #define S 0x03
- #define U 0x07
- //volatile int STOP=FALSE;
- void main(int argc, char** argv)
- {
- int i;
- struct winsize w;
- system ("clear");
- ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
- //printf ("columns %d\n", w.ws_col);
- for (i = 0; i < w.ws_col / 2 - 7 ; i++)
- printf (" ");
- printf ("Program open.\n");
- printf ("Running llopen...\n");
- //llopen (0, RECEIVER);
- }
- int llopen(int porta, int flag)
- {
- int fd, c, res;
- struct termios oldtio,newtio;
- unsigned char buf;
- char buffer[1], gate[10] = MODEMDEVICE;
- char SET[255];
- unsigned char ua[5];
- /*Open serial port device for reading and writing and not as controlling tty
- because we don't want to get killed if linenoise sends CTRL-C.*/
- sprintf (buffer, "%d", porta);
- strcat (gate, buffer);
- printf ("Gate: %s\n", gate);
- fd = open(gate, O_RDWR | O_NOCTTY);
- if ( tcgetattr(fd,&oldtio) == -1) { /* save current port settings */
- perror("tcgetattr");
- exit(-1);
- }
- bzero(&newtio, sizeof(newtio));
- newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0;
- /* set input mode (non-canonical, no echo,...) */
- newtio.c_lflag = 0;
- newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
- newtio.c_cc[VMIN] = 1; /* blocking read until 1 chars received */
- /*
- VTIME e VMIN devem ser alterados de forma a proteger com um temporizador a
- leitura do(s) próximo(s) caracter(es)
- */
- tcflush(fd, TCIOFLUSH);
- if ( tcsetattr(fd,TCSANOW,&newtio) == -1) {
- perror("tcsetattr");
- exit(-1);
- }
- int aux = 0, state = 0;
- while (state < 5)
- {
- res = read (fd, &buf, 1);
- switch (state)
- {
- case 0:
- if (buf == F)
- {
- SET[state] = buf;
- state++;
- }
- break;
- case 1:
- if (buf == A)
- {
- SET[state] = buf;
- state++;
- }
- else if (buf != F && buf != A)
- state--;
- break;
- case 2:
- if (buf == S)
- {
- SET[state] = buf;
- state++;
- }
- else if (buf == F)
- state--;
- else
- state = 0;
- break;
- case 3:
- if (buf == (A ^ S))
- {
- SET[state] = buf;
- state++;
- }
- else if (buf == F)
- state = 1;
- else
- state = 0;
- break;
- case 4:
- if (buf == F)
- {
- SET[state] = buf;
- state++;
- }
- else
- state = 0;
- break;
- }
- }
- printf ("Printing SET:\n");
- int i=0;
- for(i; i < state; i++)
- printf("%x", SET[i]);
- printf("\n\n");
- ua[0] = F;
- ua[1] = A;
- ua[2] = U;
- ua[3] = (A ^ U);
- ua[4] = F;
- res = write(fd, ua, 5);
- if (!res)
- printf("Mensagem não enviada.\n");
- else
- printf("%d bytes enviados.\n",res);
- tcsetattr(fd,TCSANOW,&oldtio);
- close(fd);
- return 0;
- }
- int llread(int fd, char *buffer)
- {
- int length = -1;
- fd = open(buffer, O_RDWR | O_NOCTTY);
- return length;
- }
Advertisement
Add Comment
Please, Sign In to add comment