IvoSilva

[RCOM] Receiver

Oct 17th, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.39 KB | None | 0 0
  1. /*Non-Canonical Input Processing*/
  2.  
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <sys/ioctl.h>
  6. #include <fcntl.h>
  7. #include <termios.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #include <string.h>
  12.  
  13. #define BAUDRATE B38400
  14. #define _POSIX_SOURCE 1 /* POSIX compliant source */
  15. #define MODEMDEVICE "/dev/ttyS"
  16. #define FALSE 0
  17. #define TRUE 1
  18.  
  19. #define RECEIVER 0
  20. #define TRANSMITTER 1
  21.  
  22. #define F 0x7e
  23. #define A 0x03
  24. #define S 0x03
  25. #define U 0x07
  26.  
  27. //volatile int STOP=FALSE;
  28.  
  29. void main(int argc, char** argv)
  30. {
  31.     int i;
  32.     struct winsize w;
  33.  
  34.     system ("clear");
  35.  
  36.     ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
  37.     //printf ("columns %d\n", w.ws_col);
  38.  
  39.     for (i = 0; i < w.ws_col / 2 - 7 ; i++)
  40.         printf (" ");
  41.     printf ("Program open.\n");
  42.     printf ("Running llopen...\n");
  43.     //llopen (0, RECEIVER);
  44. }
  45.  
  46. int llopen(int porta, int flag)
  47. {
  48.     int fd, c, res;
  49.     struct termios oldtio,newtio;
  50.     unsigned char buf;
  51.     char buffer[1], gate[10] = MODEMDEVICE;
  52.     char SET[255];
  53.     unsigned char ua[5];
  54.  
  55.     /*Open serial port device for reading and writing and not as controlling tty
  56.     because we don't want to get killed if linenoise sends CTRL-C.*/
  57.    
  58.     sprintf (buffer, "%d", porta);
  59.     strcat (gate, buffer);
  60.  
  61.     printf ("Gate: %s\n", gate);
  62.     fd = open(gate, O_RDWR | O_NOCTTY);
  63.  
  64.     if ( tcgetattr(fd,&oldtio) == -1) { /* save current port settings */
  65.       perror("tcgetattr");
  66.       exit(-1);
  67.     }
  68.  
  69.     bzero(&newtio, sizeof(newtio));
  70.     newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
  71.     newtio.c_iflag = IGNPAR;
  72.     newtio.c_oflag = 0;
  73.  
  74.     /* set input mode (non-canonical, no echo,...) */
  75.     newtio.c_lflag = 0;
  76.  
  77.     newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
  78.     newtio.c_cc[VMIN]     = 1;   /* blocking read until 1 chars received */
  79.  
  80.  
  81.   /*
  82.     VTIME e VMIN devem ser alterados de forma a proteger com um temporizador a
  83.     leitura do(s) próximo(s) caracter(es)
  84.   */
  85.  
  86.  
  87.  
  88.     tcflush(fd, TCIOFLUSH);
  89.  
  90.     if ( tcsetattr(fd,TCSANOW,&newtio) == -1) {
  91.       perror("tcsetattr");
  92.       exit(-1);
  93.     }
  94.    
  95.     int aux = 0, state = 0;
  96.     while (state < 5)
  97.     {
  98.         res = read (fd, &buf, 1);
  99.         switch (state)
  100.         {
  101.             case 0:
  102.                 if (buf == F)
  103.                 {
  104.                     SET[state] = buf;
  105.                     state++;
  106.                 }
  107.                 break;
  108.             case 1:
  109.                 if (buf == A)
  110.                 {
  111.                     SET[state] = buf;
  112.                     state++;
  113.                 }
  114.                 else if (buf != F && buf != A)
  115.                     state--;
  116.                 break;
  117.             case 2:
  118.                 if (buf == S)
  119.                 {
  120.                     SET[state] = buf;
  121.                     state++;
  122.                 }
  123.                 else if (buf == F)
  124.                     state--;
  125.                 else
  126.                     state = 0;
  127.                 break;
  128.             case 3:
  129.                 if (buf == (A ^ S))
  130.                 {
  131.                     SET[state] = buf;
  132.                     state++;
  133.                 }
  134.                 else if (buf == F)
  135.                     state = 1;
  136.                 else
  137.                     state = 0;
  138.                 break;
  139.             case 4:
  140.                 if (buf == F)
  141.                 {
  142.                     SET[state] = buf;
  143.                     state++;
  144.                 }
  145.                 else
  146.                     state = 0;
  147.                 break;
  148.         }
  149.     }
  150.  
  151.     printf ("Printing SET:\n");
  152.     int i=0;
  153.     for(i; i < state; i++)
  154.         printf("%x", SET[i]);
  155.     printf("\n\n");
  156.  
  157.     ua[0] = F;
  158.     ua[1] = A;
  159.     ua[2] = U;
  160.     ua[3] = (A ^ U);
  161.     ua[4] = F;
  162.  
  163.     res = write(fd, ua, 5);
  164.     if (!res)
  165.         printf("Mensagem não enviada.\n");
  166.     else
  167.         printf("%d bytes enviados.\n",res);
  168.  
  169.  
  170.     tcsetattr(fd,TCSANOW,&oldtio);
  171.     close(fd);
  172.     return 0;
  173. }
  174.  
  175. int llread(int fd, char *buffer)
  176. {
  177.     int length = -1;
  178.  
  179.     fd = open(buffer, O_RDWR | O_NOCTTY);
  180.  
  181.     return length;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment