IvoSilva

[RCOM] Untested

Oct 29th, 2014
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 18.78 KB | None | 0 0
  1. #include <fcntl.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <signal.h>
  7. #include <termios.h>
  8. #include <sys/stat.h>
  9. #include <sys/types.h>
  10. #include <sys/ioctl.h>
  11.  
  12. // Variáveis de configuração
  13.  
  14. #define BAUDRATE B38400
  15. #define MODEMDEVICE "/dev/ttyS"
  16. #define RECEIVER 0
  17. #define TRANSMITTER 1
  18. #define alarm_timeout 3
  19. #define numTransmissions 3
  20. #define filename "pinguim.gif"
  21. #define packetsize 100
  22.  
  23. // Variáveis de mensagem
  24.  
  25. #define F 0x7e
  26. #define A 0x03
  27. #define S 0x03
  28. #define U 0x07
  29.  
  30. #define I0 0x00
  31. #define I1 0x40
  32.  
  33. #define RR0 0x05
  34. #define RR1 0x85
  35.  
  36. #define REJ0 0x01
  37. #define REJ1 0x81
  38.  
  39. #define DISC 0x0B
  40.  
  41.  
  42. // Variáveis globais
  43.  
  44. int time_flag, counter = 0 ;
  45. struct termios oldtio;
  46.  
  47. // Funções
  48.  
  49. void atende()
  50. {
  51.     time_flag = 1;
  52.     counter++;
  53. }
  54.  
  55. void printBar (char symbol)
  56. {
  57.     int i;
  58.     struct winsize w;
  59.  
  60.     ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
  61.  
  62.     for (i = 0; i < w.ws_col; i++)
  63.         printf ("%c", symbol);
  64. }
  65.  
  66. void printm (char *string, int adjust)
  67. {
  68.     int i;
  69.     struct winsize w;
  70.  
  71.     ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
  72.  
  73.     for (i = 0; i < (w.ws_col / 2) - (strlen(string) / 2) + adjust ; i++)
  74.         printf (" ");
  75.    
  76.     printf ("%s", string);
  77. }
  78.  
  79. void create_information (char *buffer, int *buffer_size, char c, char *data, int data_size, char BCC2)
  80. {
  81.     int i;
  82.  
  83.     *buffer_size = data_size + 6;
  84.  
  85.     printm ("Data:", 0);
  86.     printf ("\n");
  87.     for (i = 0; i < data_size; i++)
  88.         printf ("%x |", data[i]);
  89.     printf ("\n");
  90.  
  91.     buffer[0] = F;
  92.     buffer[1] = A;
  93.     buffer[2] = c;
  94.     buffer[3] = buffer[1] ^ buffer[2];
  95.  
  96.     for (i = 0; i < data_size; i++)
  97.         buffer[i + 4] = data[i];
  98.  
  99.     buffer[data_size + 4] = BCC2;
  100.     buffer[data_size + 5] = F;
  101.  
  102.     printm ("Information:", 0);
  103.     printf ("\n");
  104.     for (i = 0; i < *buffer_size; i++)
  105.         printf ("%x |", buffer[i]);
  106.     printf ("\n");
  107. }
  108.  
  109. unsigned char create_control_packet (char *buffer, int *buffer_size , int c, char *file_name, int filesize)
  110. {
  111.     int i;
  112.     unsigned char BCC2;
  113.  
  114.     *buffer_size = strlen(file_name) + 6;
  115.  
  116.     buffer[0] = (char) c;
  117.  
  118.     buffer[1] = (char) 0;
  119.     buffer[2] = (char) sizeof ((char) filesize);
  120.     buffer[3] = (char) filesize;
  121.  
  122.     buffer[4] = (char) 1;
  123.     buffer[5] = (char) sizeof (file_name);
  124.     for (i = 0; i < strlen(file_name); i++)
  125.         buffer[i + 6] = (char) file_name[i];
  126.  
  127.     BCC2 = buffer[0];
  128.     for (i = 1; i < strlen(file_name) + 6; i++)
  129.         BCC2 ^= buffer[i];
  130.  
  131.     return BCC2;
  132. }
  133.  
  134. unsigned char create_data_packet (char* buffer, int* buffer_size, int n, char *file_name, int filesize)
  135. {
  136.     char BCC2;
  137.     int i, L2 = (int) (packetsize * 8 / 256), L1 = (int) (packetsize * 8) - L2 * 256;
  138.  
  139.     *buffer_size = strlen(file_name) + 4;
  140.  
  141.     buffer[0] = (char) 1;
  142.     buffer[1] = (char) n;  
  143.  
  144.     buffer[2] = (char) L2;
  145.     buffer[3]= (char) L1;
  146.  
  147.     for(i = 0; i < strlen(file_name); i++)
  148.         buffer[4+i]=file_name[i];
  149.  
  150.     BCC2 = buffer[0];
  151.     for (i = 1; i < strlen(file_name) + 4; i++)
  152.         BCC2 ^= buffer[i];
  153.  
  154.     return BCC2;
  155. }
  156.  
  157. int menu ()
  158. {
  159.     int op = 0;
  160.  
  161.     system ("clear");
  162.     printBar ('*');
  163.     printm ("Programa iniciado!", 0);
  164.     printf ("\n\n\n");
  165.     printm ("Menu (escolher função do programa):", 0);
  166.     printf ("\n");
  167.     printm ("1. Emissor (llwrite).", 0);
  168.     printf ("\n");
  169.     printm ("2. Receptor (llread).", 0);
  170.     printf ("\n");
  171.     printm ("3. Sair.", 0);
  172.     printf ("\n\n");
  173.     printm ("Opcao: ", 0);
  174.     scanf ("%d", &op);
  175.  
  176.     return op;
  177. }
  178.  
  179. void sair ()
  180. {
  181.     system ("clear");
  182.  
  183.     printBar ('*');
  184.     printm ("Programa a encerrar...", 0);
  185.     printf ("\n");
  186.     printBar ('*');
  187.     sleep (1);
  188. }
  189.  
  190. void main (int argc, char** argv)
  191. {
  192.     int op = 0, fd, filesize;
  193.     char *buffer;
  194.  
  195.     while (op != 3)
  196.     {
  197.         op = menu();
  198.         switch (op)
  199.         {
  200.             case 1:
  201.                 fd = llopen (0, TRANSMITTER);
  202.                 if (fd != -1)
  203.                 {
  204.                     //filesize = myWrite (buffer);
  205.                     llwrite(fd, buffer, filesize);
  206.                 }
  207.                 break;
  208.             case 2:
  209.                 fd = llopen (0, RECEIVER);
  210.                 break;
  211.             case 3:
  212.                 llclose (fd);
  213.                 sair();
  214.                 break;
  215.             default:
  216.                 break;
  217.         }
  218.     }  
  219. }
  220.  
  221. int llopen (int porta, int flag)
  222. {
  223.     /* -----    Variáveis  ----- */
  224.  
  225.     unsigned char send_message[5], receive_message[5], bit_received;
  226.     char buffer[1], gate[10] = MODEMDEVICE;
  227.     int vtime, fd, res[2], return_value, i;
  228.     unsigned int msg_sent = 0, state;
  229.     struct termios newtio;
  230.  
  231.     /* -----    Código     ----- */
  232.  
  233.     sprintf (buffer, "%d", porta);
  234.     strcat (gate, buffer);
  235.  
  236.     system ("clear");
  237.  
  238.     printBar ('*');
  239.     printm ("Função \"llopen(", -7);
  240.     printf ("%d, %d)\" iniciada!\n", porta, flag);
  241.  
  242.     if (flag == TRANSMITTER)
  243.     {
  244.         send_message[0] = F;
  245.         send_message[1] = A;
  246.         send_message[2] = S;
  247.         send_message[3] = send_message[1] ^ send_message[2];
  248.         send_message[4] = F;
  249.  
  250.         vtime = 3;
  251.  
  252.         fd = open(gate, O_RDWR | O_NOCTTY | O_NONBLOCK);
  253.     }
  254.     else if (flag == RECEIVER)
  255.     {
  256.         send_message[0] = F;
  257.         send_message[1] = A;
  258.         send_message[2] = U;
  259.         send_message[3] = send_message[1] ^ send_message[2];
  260.         send_message[4] = F;
  261.  
  262.         vtime = 0;
  263.  
  264.         fd = open(gate, O_RDWR | O_NOCTTY);
  265.     }
  266.     else
  267.         return -1;
  268.  
  269.     if (fd < 0)
  270.             return -1;
  271.  
  272.     // Teste ao apontador para o Pipe.
  273.  
  274.     if (tcgetattr (fd, &oldtio) == -1)
  275.     {
  276.         perror ("tcgetattr");
  277.         return -1;
  278.     }
  279.  
  280.     // Configuração da ligação.
  281.  
  282.     bzero(&newtio, sizeof(newtio));
  283.     newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
  284.     newtio.c_iflag = IGNPAR;
  285.     newtio.c_oflag = 0;
  286.  
  287.     /* set input mode (non-canonical, no echo,...) */
  288.     newtio.c_lflag = 0;
  289.  
  290.     newtio.c_cc[VTIME]    = vtime;   /* inter-character timer unused */
  291.     newtio.c_cc[VMIN]     = 1;   /* blocking read until 1 chars received */
  292.  
  293.     /* VTIME e VMIN devem ser alterados de forma a proteger com um temporizador a leitura do(s) próximo(s) caracter(es) */
  294.  
  295.     tcflush(fd, TCIOFLUSH);
  296.     if (tcsetattr (fd, TCSANOW, &newtio) == -1)
  297.     {
  298.         perror ("tcsetattr");
  299.         return -1;
  300.     }
  301.  
  302.     (void) signal(SIGALRM, atende);
  303.  
  304.     if (flag == TRANSMITTER)
  305.     {
  306.         for (time_flag = 1, state = 0, counter = 0; counter < numTransmissions && msg_sent != 1;)
  307.         {
  308.             if (time_flag)
  309.             {
  310.                 alarm (alarm_timeout);
  311.                 time_flag = 0;
  312.            
  313.                 printm ("A enviar SETUP: tentativa #", -1);
  314.                 printf ("%d\n", counter + 1);
  315.  
  316.                 res[0] = write (fd, send_message, 5);
  317.  
  318.                 while (state < 5)
  319.                 {
  320.                     res[1] = read (fd, &bit_received, 1);
  321.                     if(res[1] == -1)
  322.                         break;
  323.  
  324.                     switch (state)
  325.                     {
  326.                         case 0:
  327.                           if (bit_received == F)
  328.                           {
  329.                             receive_message[state]=bit_received;
  330.                             state++;
  331.                           }
  332.                           break;
  333.  
  334.                         case 1:
  335.                           if (bit_received == A)
  336.                           {
  337.                             receive_message[state]=bit_received;
  338.                             state++;
  339.                           }
  340.                           else if (bit_received != A && bit_received !=F)
  341.                             state--;
  342.                           break;
  343.                  
  344.                         case 2:
  345.                           if (bit_received == U)
  346.                           {
  347.                             receive_message[state]=bit_received;
  348.                             state++;
  349.                           }
  350.                           else if (bit_received == F)
  351.                             state--;
  352.                           else
  353.                             state = 0;
  354.                           break;
  355.  
  356.                         case 3:
  357.                           if (bit_received == (A^U))
  358.                           {
  359.                             receive_message[state]=bit_received;
  360.                             state++;
  361.                           }
  362.                           else
  363.                             state = 0;
  364.                           break;
  365.  
  366.                         case 4:
  367.                           if (bit_received == F)
  368.                           {
  369.                             receive_message[state]=bit_received;
  370.                             state++;
  371.                             msg_sent = 1;
  372.                           }
  373.                           else
  374.                             state = 0;
  375.                           break;
  376.  
  377.                         default:
  378.                             break;
  379.                     }
  380.                 }
  381.             }
  382.         }
  383.  
  384.         if (msg_sent == 0)
  385.         {
  386.             printm ("Mensagem não enviada (não recebeu UA).", +3);
  387.             printf ("\n");
  388.             return_value = -1;
  389.         }
  390.         else
  391.         {
  392.             printm ("Mensagem enviada (recebeu UA).", 0);
  393.             printf ("\n");
  394.             printm ("Mensagem UA:", 0);
  395.             printf ("\n");
  396.             printm (" ", -5);
  397.             for(i = 0; i < state; i++)
  398.                 printf("%x", receive_message[i]);
  399.             printf ("\n");
  400.             return_value = fd;
  401.         }
  402.     }
  403.     else if (flag == RECEIVER)
  404.     {
  405.         state = 0;
  406.         while (state < 5)
  407.         {
  408.             res[1] = read (fd, &bit_received, 1);
  409.  
  410.             switch (state)
  411.             {
  412.                     case 0:
  413.                             if (bit_received == F)
  414.                             {
  415.                                     receive_message[state] = bit_received;
  416.                                     state++;
  417.                             }
  418.                             break;
  419.                     case 1:
  420.                             if (bit_received == A)
  421.                             {
  422.                                     receive_message[state] = bit_received;
  423.                                     state++;
  424.                             }
  425.                             else if (bit_received != F && bit_received != A)
  426.                                     state--;
  427.                             break;
  428.                     case 2:
  429.                             if (bit_received == S)
  430.                             {
  431.                                     receive_message[state] = bit_received;
  432.                                     state++;
  433.                             }
  434.                             else if (bit_received == F)
  435.                                     state--;
  436.                             else
  437.                                     state = 0;
  438.                             break;
  439.                     case 3:
  440.                             if (bit_received == (A ^ S))
  441.                             {
  442.                                     receive_message[state] = bit_received;
  443.                                     state++;
  444.                             }
  445.                             else if (bit_received == F)
  446.                                     state = 1;
  447.                             else
  448.                                     state = 0;
  449.                             break;
  450.                     case 4:
  451.                             if (bit_received == F)
  452.                             {
  453.                                     receive_message[state] = bit_received;
  454.                                     state++;
  455.                                     msg_sent = 1;
  456.                             }
  457.                             else
  458.                                     state = 0;
  459.                             break;
  460.                     default:
  461.                         break;
  462.             }
  463.         }
  464.        
  465.         if (msg_sent == 0)
  466.         {
  467.             printm ("Mensagem não enviada (não recebeu SETUP).", +3);
  468.             printf ("\n");
  469.             return_value = -1;
  470.         }
  471.         else
  472.         {
  473.             printm ("Mensagem enviada (recebeu SETUP).", 0);
  474.             printf ("\n");
  475.             printm ("Mensagem SETUP:", 0);
  476.             printf ("\n");
  477.             printm (" ", -5);
  478.             for(i = 0; i < state; i++)
  479.                 printf("%x", receive_message[i]);
  480.             printf ("\n");
  481.  
  482.             res[0] = write(fd, send_message, 5);
  483.             /*if (!res[0])
  484.                 printf("Mensagem (UA) não enviada.\n");
  485.             else
  486.                 printf("%d bytes (UA) enviados.\n", res[0]);*/
  487.  
  488.             return_value = fd;
  489.         }
  490.     }
  491.  
  492.     printf ("\n\n");
  493.     printm ("Função \"llopen(", -7);
  494.     printf ("%d, %d)\" a fechar!\n", porta, flag);
  495.     printm ("Clique numa tecla para voltar ao menu.", 0);
  496.     printf ("\n");
  497.     printBar ('*');
  498.     getchar();
  499.     getchar();
  500.  
  501.     return return_value;
  502. }
  503.  
  504. int llwrite (int fd, char * buffer, int length)
  505. {
  506.     char *cntrl_message, *data_message, *message, *message_received, I = I0;
  507.     unsigned char BCC2;
  508.     int file_found = 1, i, cntrl_size, message_size, msg_error = 0;
  509.     FILE *pImg;
  510.  
  511.     while (file_found)
  512.     {
  513.         system ("clear");
  514.         printBar ('*');
  515.         printm ("Nome do ficheiro a usar: pinguim.gif", 0);
  516.         printf ("\n");
  517.         printm ("(certifique-se que o ficheiro está na pasta do programa)", 0);
  518.         printf ("\n\n\n");
  519.  
  520.         pImg = fopen (filename, "r");
  521.         if (pImg == NULL)
  522.         {
  523.             printm ("Ficheiro não encontrado.", 0);
  524.             printf ("\n");
  525.             printm ("(certifique-se que o ficheiro está na pasta do programa)", 0);
  526.             printf ("\n");
  527.             printm ("Clique <Enter> para voltar a tentar.", 0);
  528.             getchar ();
  529.         }
  530.         else
  531.         {
  532.             file_found = 0;
  533.             printm ("Ficheiro encontrado.", 0);
  534.             printf ("\n");
  535.             printm ("Clique <Enter> para continuar.", 0);
  536.             getchar ();
  537.         }
  538.     }
  539.  
  540.     // Leitura do conteúdo da imagem para variável "buffer"
  541.     fseek (pImg, 0, SEEK_END);
  542.     length = ftell (pImg);
  543.     fseek (pImg, 0, SEEK_SET);
  544.  
  545.     buffer = (char *) malloc (sizeof(char) * length);
  546.  
  547.     for (i = 0; i < length; i++)
  548.         buffer[i] = getc(pImg);
  549.  
  550.     fclose (pImg);
  551.     // Leitura do conteúdo da imagem para variável "buffer"
  552.  
  553.     // Primeira mensagem a enviar: Pacote de controlo (start)
  554.     cntrl_message = (char *) malloc (sizeof(char) * (strlen(filename) + 6));
  555.     BCC2 = create_control_packet (cntrl_message, &cntrl_size, 2, filename, length);
  556.    
  557.     message = (char *) malloc (sizeof(char) * (cntrl_size + 6));
  558.     create_information (message, &message_size, I, cntrl_message, cntrl_size, BCC2);
  559.  
  560.     //write (fd, message, message_size); // envio do pacote de controlo
  561.     // Primeira mensagem a enviar: Pacote de controlo (start)
  562.  
  563.     // Leitura de verificação
  564.  
  565.     for (time_flag = 1, state = 0, counter = 0; counter < numTransmissions && msg_error != -1;)
  566.     {
  567.         if (time_flag)
  568.         {
  569.             alarm (alarm_timeout);
  570.             time_flag = 0;
  571.  
  572.             res = write (fd, message, message_size); // envio do pacote de controlo
  573.             res = read (fd, &message_received, 5);
  574.             if(res == 5)
  575.                 while (state < 5 || !msg_error)
  576.                 {
  577.                     switch (state)
  578.                     {
  579.                         case 0:
  580.                             if (message_received[state] == F)
  581.                                 state++;
  582.                             else
  583.                                 msg_error = 1;
  584.                             break;
  585.  
  586.                         case 1:
  587.                             if (message_received[state] == A)
  588.                                 state++;
  589.                             else
  590.                                 msg_error = 1;
  591.                             break;
  592.  
  593.                         case 2:
  594.                             if (message_received[state] == RR0)
  595.                             {
  596.                                 data_message = (char *) malloc (sizeof(char) * length);
  597.                                 BCC2 = create_data_packet (buffer, buffer_size, 1, file_name, filesize);
  598.                                 create_information (message, &message_size, 0, buffer, buffer_size, BCC2);
  599.                             }
  600.                             else if (message_received[state] == RR1)
  601.                             {
  602.                                 data_message = (char *) malloc (sizeof(char) * length);
  603.                                 BCC2 = create_data_packet (buffer, buffer_size, 1, file_name, filesize);
  604.                                 create_information (message, &message_size, 1, buffer, buffer_size, BCC2);
  605.                             }
  606.                             else if (message_received[state] == REJ0)
  607.                             {
  608.                                 data_message = (char *) malloc (sizeof(char) * length);
  609.                                 BCC2 = create_data_packet (buffer, buffer_size, 1, file_name, filesize);
  610.                                 create_information (message, &message_size, 0, buffer, buffer_size, BCC2);
  611.                             }
  612.                             else if (message_received[state] == REJ1)
  613.                             {
  614.                                 data_message = (char *) malloc (sizeof(char) * length);
  615.                                 BCC2 = create_data_packet (buffer, buffer_size, 1, file_name, filesize);
  616.                                 create_information (message, &message_size, 1, buffer, buffer_size, BCC2);
  617.                             }
  618.                             else if (message_received[state] == DISC)
  619.                                 msg_error = -1;
  620.                             else
  621.                                 msg_error = 1;
  622.                             break;
  623.  
  624.                         case 3:
  625.                             if (message_received[state] == message_received[state - 1] ^ message_received[state - 2])
  626.                                 state++;
  627.                             else
  628.                                 msg_error = 1;
  629.                             break;
  630.  
  631.                         case 4:
  632.                             if (message_received[state] == F)
  633.                                 state++;
  634.                             else
  635.                                 msg_error = 1;
  636.                             break;
  637.                     }
  638.                 }
  639.         }
  640.     }
  641.     // Leitura de verificação
  642.  
  643.     return length;
  644. }
  645.  
  646. int read_control_packet(int fd, char* received_message, int *size)
  647. {  
  648.     //RETURNS -1 IF ANY FAIL OTHERWISE SIZE
  649.     char bit_received, receive_message,res[2];
  650.     int state=0,i=0,v1_size,v2_size, final_state=0;
  651.     while (final_state == 0)
  652.     {
  653.         res[1] = read (fd, &bit_received, 1);
  654.             if(res[1] == -1)
  655.             return -1;
  656.  
  657.             switch (state)
  658.             {
  659.             //C
  660.             case 0:
  661.               if (bit_received == 2 || bit_received == 3)
  662.               {
  663.                 receive_message[state]=bit_received;
  664.                 state++;
  665.               }
  666.               else{
  667.                 return -1;
  668.               }
  669.               break;
  670.             //T1
  671.             case 1:
  672.               if (bit_received == 0)
  673.               {
  674.                 receive_message[state]=bit_received;
  675.                 state++;
  676.               }
  677.               else{
  678.                 return -1;
  679.               }
  680.               break;
  681.             //L1
  682.             case 2:
  683.                 receive_message[state]=bit_received;
  684.                 state++;
  685.               break;
  686.             //V1
  687.             case 3:
  688.               //V1 Length
  689.                 v1_size = receive_message[2];
  690.                 for(i=0;i<v1_size; i++){
  691.                     res[1] = read (fd, &bit_received, 1);
  692.                     if(res[1] == -1)
  693.                         return -1;
  694.  
  695.                     receive_message[3+i]=bit_received;
  696.                    
  697.                 }
  698.                 state++;
  699.                 break;
  700.  
  701.             case 4:
  702.               if (bit_received == 1)
  703.               {
  704.                 receive_message[state+v1_size]=bit_received;
  705.                 state++;
  706.               }
  707.               else{
  708.                 return -1;
  709.               }
  710.               break;
  711.             case 5:
  712.               //V2 Length
  713.                 v2_size = bit_received;
  714.                 for(i=0;i<v2_size; i++){
  715.                     res[1] = read (fd, &bit_received, 1);
  716.                     if(res[1] == -1)
  717.                         return -1;
  718.  
  719.                     receive_message[state+v1_size+i]=bit_received;
  720.                 }
  721.                 final_state=1;
  722.                 break;
  723.             default:
  724.                 break;
  725.         }
  726.     }
  727.     size=state+v1_size+v2_size;
  728.     return state;
  729. }
  730.  
  731. char * read_data_packet(int fd, char* received_message, int *size)
  732. {  
  733.     //RETURNS -1 IF ANY FAIL OTHERWISE SIZE
  734.     char bit_received, receive_message,res[2];
  735.     int state=0,i=0,p_size, final_state=0;
  736.     while (final_state == 0)
  737.     {
  738.         res[1] = read (fd, &bit_received, 1);
  739.             if(res[1] == -1)
  740.             return -1;
  741.  
  742.             switch (state)
  743.             {
  744.             //C
  745.             case 0:
  746.               if (bit_received == 1)
  747.               {
  748.                 receive_message[state]=bit_received;
  749.                 state++;
  750.               }
  751.               else{
  752.                 return -1;
  753.               }
  754.               break;
  755.             //N
  756.             case 1:
  757.                 receive_message[state]=bit_received;
  758.                 state++;
  759.               break;
  760.             //L2
  761.             case 2:
  762.                 receive_message[state]=bit_received;
  763.                 state++;
  764.               break;
  765.             //L1
  766.             case 3:
  767.                 receive_message[state]=bit_received;
  768.                 state++;
  769.               break;
  770.  
  771.             case 4:
  772.               //P Length
  773.                 p_size = 256*receive_message[3]+receive_message[4];
  774.                 char data[p_size];
  775.                 for(i=0;i<p_size; i++){
  776.                     res[1] = read (fd, &bit_received, 1);
  777.                     if(res[1] == -1)
  778.                         return -1;
  779.  
  780.                     data[i]=bit_received;
  781.                     state++;
  782.                 }
  783.               break;
  784.  
  785.             default:
  786.                 break;
  787.         }
  788.     }
  789.     size=state;
  790.     return data;
  791. }
  792.  
  793.  
  794. int llclose (int fd)
  795. {
  796.     if (tcgetattr (fd, &oldtio) == -1)
  797.     {
  798.         perror ("tcgetattr");
  799.         return -1;
  800.     }
  801.  
  802.     close (fd);
  803.  
  804.     return 0;
  805. }
Advertisement
Add Comment
Please, Sign In to add comment