IvoSilva

[RCOM] Transmitter

Oct 17th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.80 KB | None | 0 0
  1. /*Non-Canonical Input Processing*/
  2.  
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <termios.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <signal.h>
  10.  
  11. #define BAUDRATE B38400
  12. #define MODEMDEVICE "/dev/ttyS"
  13. #define _POSIX_SOURCE 1 /* POSIX compliant source */
  14. #define FALSE 0
  15. #define TRUE 1
  16. #define F 0x7e
  17. #define A 0x03
  18. #define S 0x03
  19. #define U 0x07
  20. #define I0 0x00
  21. #define I1 0x40
  22.  
  23. #define RECEIVER 0
  24. #define TRANSMITTER 1
  25.  
  26. volatile int STOP=FALSE;
  27.  
  28. int llopen(int porta, int flag){
  29.   unsigned char setup[5];
  30.   setup[0]=F;
  31.   setup[1]=A;
  32.   setup[2]=S;
  33.   setup[3]=setup[1]^setup[2];
  34.   setup[4]=F;
  35.   char buffer[1];
  36.   char gate[10]=MODEMDEVICE;
  37.  
  38.   sprintf(buffer, "%d",porta);
  39.  
  40.   strcat(gate, buffer);
  41.  
  42.   printf("%s \n",gate );
  43.  
  44.  
  45.  
  46.   int fd,c, res;
  47.  
  48.  
  49.  
  50.   struct termios oldtio,newtio;
  51.   int i=0, sum = 0, speed = 0;
  52.  
  53.  
  54.   fd = open(gate, O_RDWR | O_NOCTTY | O_NONBLOCK);
  55.   if (fd <0) { exit(-1); }
  56.  
  57.   if ( tcgetattr(fd,&oldtio) == -1) { /* save current port settings */
  58.     perror("tcgetattr");
  59.     exit(-1);
  60.   }
  61.  
  62.   bzero(&newtio, sizeof(newtio));
  63.   newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
  64.   newtio.c_iflag = IGNPAR;
  65.   newtio.c_oflag = 0;
  66.  
  67.   /* set input mode (non-canonical, no echo,...) */
  68.   newtio.c_lflag = 0;
  69.   newtio.c_cc[VTIME]    = 3;   /* inter-character timer unused */
  70.   newtio.c_cc[VMIN]     = 1;   /* blocking read until 5 chars received */
  71.  
  72.   tcflush(fd, TCIOFLUSH);
  73.  
  74.   if ( tcsetattr(fd,TCSANOW,&newtio) == -1) {
  75.     perror("tcsetattr");
  76.     exit(-1);
  77.   }
  78.  
  79.   printf("New termios structure set(Receiving Message)\n");
  80.  
  81.     unsigned char msg;
  82.     char UA[5];
  83.     int aux=0;
  84.     int counter=0;
  85.     int sendAgain=1;
  86.     int state;
  87.     int done=0;
  88.     int msgsent=0;
  89.     int res2;
  90.  
  91.    
  92.   for(counter ; counter < 3; counter++){
  93.     printf("%s%d\n" ,"Sending data. Try# " , counter+1);
  94.     sleep(3);
  95.     res = write(fd,setup,5);
  96.     state=0;
  97.     while (state < 5 )
  98.     {
  99.       res2 = read(fd,&msg,1);
  100.       if(res2 == -1){
  101.         break;
  102.       }
  103.       else msgsent=1;
  104.  
  105.       switch (state)
  106.       {
  107.         case 0:
  108.           if (msg == F){
  109.             UA[state]=msg;
  110.             state++;
  111.           }
  112.        
  113.           break;
  114.         case 1:
  115.           if (msg == A){
  116.           UA[state]=msg;
  117.           state++;
  118.           }
  119.        
  120.           else if(msg != A && msg !=F) state--;
  121.  
  122.           break;
  123.  
  124.         case 2:
  125.           if (msg == U){
  126.             UA[state]=msg;
  127.             state++;
  128.           }
  129.        
  130.           else if(msg == F) state--;
  131.        
  132.           else state=0;
  133.  
  134.           break;
  135.         case 3:
  136.           if (msg == (A^U)){
  137.             UA[state]=msg;
  138.             state++;
  139.           }
  140.        
  141.           else state=0;
  142.        
  143.           break;
  144.         case 4:
  145.           if (msg == F){
  146.             UA[state]=msg;
  147.             state++;
  148.             done=1;
  149.           }
  150.        
  151.           else state=0;
  152.  
  153.           break;
  154.       }
  155.     }
  156.  
  157.     if(done) break;
  158.   }
  159.  
  160.   if(msgsent == 0 ) {
  161.     printf("Could not send any message. UA not received\n");
  162.     return -1;
  163.   } else {
  164.     printf("UA received sucessfuly\n");
  165.   }
  166.  
  167.   if ( tcsetattr(fd,TCSANOW,&oldtio) == -1) {
  168.     perror("tcsetattr");
  169.     exit(-1);
  170.   }
  171.   close(fd);
  172.   return fd;
  173. }
  174.  
  175. llwrite(int fd,char* buffer, int length){
  176.  
  177.   //PRIMEIRA TRAMA
  178.   char msg[6+length];
  179.   msg[0]=F;
  180.   msg[1]=A;
  181.   msg[2]=I0;
  182.   msg[3]=msg[1]^msg[2];
  183.   //stuffing da msg <-
  184.   int i=4;
  185.   for(;i<length+4; i++){
  186.     msg[i]=buffer[i-4];
  187.   }
  188.  
  189.   int j=1;
  190.   char temp = buffer[0];
  191.   for(; j<length; j++){
  192.     temp=temp^buffer[j];
  193.   }
  194.   msg[length+5]=temp;
  195.   msg[length+6]=F;
  196.  
  197.  
  198.  
  199. }
  200.  
  201. void main(int argc, char** argv){
  202.   system("clear");
  203.   printf("llopenTransmitter Running\n");
  204.   llopen(0,TRANSMITTER);
  205. }
Advertisement
Add Comment
Please, Sign In to add comment