Advertisement
Tempist

EQoS [CPNW-Build]

Sep 30th, 2019
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.40 KB | None | 0 0
  1. // Instagram: @wizard16bit
  2. // Twitter: @wizard16bit
  3.  
  4. //gcc EQoS.c -o EQoS -lm -lpthread
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include <time.h>
  8. #include <errno.h>
  9. #include <fcntl.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <termios.h>
  13. #include <signal.h>
  14. #include <limits.h>
  15. #include <sys/ioctl.h>
  16. #include <sys/types.h>
  17. #include <sys/stat.h>
  18. #include <sys/time.h>
  19. #include <pthread.h>
  20. #include <net/if.h>
  21. #include <pthread.h>
  22. #include <math.h>
  23. #define SIZE_BUFFER 8
  24.  
  25. char buffer_tx[] = {0,0,0,0,0,0,0,0};
  26. char buffer_rx[] = {0,0,0,0,0,0,0,0};
  27.  
  28. time_t timer;
  29. struct tm *horarioLocal;
  30. int dia, mes, ano, hora, min, sec;
  31.  
  32. volatile unsigned short int msg_receive = 0, nbytes = 0;
  33. volatile unsigned short int running = 1;
  34. unsigned short int nwrite;
  35. unsigned short int nread;
  36. pthread_t thread_id;
  37. char *portname = "/dev/ttyACM0";
  38. int handle;
  39. int n = SIZE_BUFFER;
  40. unsigned short int anomalias = 0;
  41. void signal_Handler(int sign){
  42.     int o_exit = 0;
  43.     switch (sign){
  44.         case SIGINT:{
  45.             o_exit = 1;
  46.             break;
  47.         }
  48.         case SIGTERM:{
  49.             o_exit = 1;
  50.             break;
  51.         }
  52.         default:{
  53.             break;
  54.         }
  55.     }
  56.  
  57.     if (o_exit == 1)
  58.     running = 0;
  59. }
  60.  
  61. void *uart_msg_receive(void *t){
  62.     while(running){
  63.         for(n = 0; n < SIZE_BUFFER; n++){
  64.             nread = read(handle,&buffer_rx[n],1);
  65.             /*if(nread < 0){
  66.                 printf("Read error\n");
  67.             }else{
  68.                 printf("Data (%d) read = %d \n",n,buffer_rx[n]);
  69.             }*/    
  70.         }      
  71.         msg_receive = 1;
  72.         usleep(1000);
  73.         while(msg_receive);
  74.     }
  75. }
  76.  
  77. int set_interface_attribs(int fd, int speed){
  78.     struct termios tty;
  79.     if (tcgetattr(fd, &tty) < 0) {
  80.         printf("Error from tcgetattr: %s\n", strerror(errno));
  81.         return -1;
  82.     }
  83.     cfsetospeed(&tty, (speed_t)speed);
  84.     cfsetispeed(&tty, (speed_t)speed);
  85.     tty.c_cflag |= (CLOCAL | CREAD);    /* ignore modem controls */
  86.     tty.c_cflag &= ~CSIZE;
  87.     tty.c_cflag |= CS8;                 /* 8-bit characters */
  88.     tty.c_cflag &= ~PARENB;             /* no parity bit */
  89.     tty.c_cflag &= ~CSTOPB;             /* only need 1 stop bit */
  90.     tty.c_cflag &= ~CRTSCTS;            /* no hardware flowcontrol */
  91.     /* setup for non-canonical mode */
  92.     tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
  93.     tty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
  94.     tty.c_oflag &= ~OPOST;
  95.     /* fetch bytes as they become available */
  96.     tty.c_cc[VMIN] = 1;
  97.     tty.c_cc[VTIME] = 1;
  98.     if (tcsetattr(fd, TCSANOW, &tty) != 0) {
  99.         printf("Error from tcsetattr: %s\n", strerror(errno));
  100.         return -1;
  101.     }
  102.     return 0;
  103. }
  104.  
  105. void set_mincount(int fd, int mcount){
  106.     struct termios tty;
  107.     if (tcgetattr(fd, &tty) < 0) {
  108.         printf("Error tcgetattr: %s\n", strerror(errno));
  109.         return;
  110.     }
  111.     tty.c_cc[VMIN] = mcount ? 1 : 0;
  112.     tty.c_cc[VTIME] = 5;        /* half second timer */
  113.     if (tcsetattr(fd, TCSANOW, &tty) < 0)
  114.         printf("Error tcsetattr: %s\n", strerror(errno));
  115. }
  116.  
  117. void update_time(void){
  118.     time(&timer);
  119.     horarioLocal = localtime(&timer);
  120.     dia = horarioLocal->tm_mday;
  121.     mes = horarioLocal->tm_mon + 1;
  122.     ano = horarioLocal->tm_year + 1900;
  123.     hora = horarioLocal->tm_hour;
  124.     min  = horarioLocal->tm_min;
  125.     sec  = horarioLocal->tm_sec;
  126. }
  127.  
  128.  
  129. int main(void){
  130.  
  131.     /////
  132.     unsigned int i = 0, count = 0;
  133.     unsigned char c = 0, wave_complete = 0, harm_ord = 1;
  134.     float v_vector[2048], f = 0, v = 0, p = 0, q =0;
  135.     float Mag_vg[53], Mag_ig[53];
  136.     /////
  137.     char query[512], str[30];
  138.     FILE *dataloger;
  139.     FILE *temperatureFile;
  140.  
  141.     handle = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
  142.     if (handle < 0) {
  143.         printf("Error opening %s: %s\n", portname, strerror(errno));
  144.         return -1;
  145.     }    
  146.     set_interface_attribs(handle, B115200);// baudrate 115200, 8 bits, no parity, 1 stop bit
  147.    
  148.     if( pthread_create(&thread_id, NULL, &uart_msg_receive, NULL) ){
  149.         printf("\nErro thread\n");
  150.     }
  151.    
  152.     for(i = 0; i < 2048; i++){
  153.         v_vector[i] = 0.0;
  154.     }
  155.    
  156.     signal(SIGINT,  signal_Handler);
  157.     signal(SIGTERM, signal_Handler);
  158.     time(NULL);
  159.  
  160.     sleep(1);
  161.    
  162.     buffer_tx[0] = 0xF0;
  163.     buffer_tx[1] = 0x01;
  164.     nwrite = write(handle,buffer_tx,8);
  165.     tcdrain(handle);
  166.  
  167.     while (running){
  168.         if(msg_receive){
  169.             if( (buffer_rx[0] >> 4) == 1 ){
  170.                
  171.                 i = ((buffer_rx[0] & 0x07) << 8) + (buffer_rx[1] & 0xFF);
  172.                 for(c = 2; c < 8; c++){
  173.                     if(i < 2048){
  174.                         if( (buffer_rx[c] & 0x80) == 0x80)
  175.                             v_vector[i] = -0.01*( (float)((0xFF ^ buffer_rx[c]) + 1) );
  176.                         else
  177.                             v_vector[i] = 0.01*((float)buffer_rx[c]);
  178.                         i++;                       
  179.                     }              
  180.                 }
  181.                
  182.                 if(i == 2048){
  183.                     anomalias++;
  184.                     wave_complete = 1;
  185.                 }
  186.             }else if( (buffer_rx[0] >> 4) == 2 ){
  187.                 if( (buffer_rx[2] & 0x80) == 0x80)
  188.                     v = -0.1*( (float)((( 0xFF ^ buffer_rx[2])<<8) + ( 0xFF ^ buffer_rx[3]) + 1 ) );
  189.                 else
  190.                     v = 0.1*( (float)((buffer_rx[2]<<8) + (buffer_rx[3]) ) );
  191.  
  192.                 if( (buffer_rx[4] & 0x80) == 0x80)
  193.                     f = -0.01*( (float)((( 0xFF ^ buffer_rx[4])<<8) + ( 0xFF ^ buffer_rx[5]) + 1 ) );
  194.                 else
  195.                     f = 0.01*( (float)((buffer_rx[4]<<8) + (buffer_rx[5]) ) );
  196.  
  197.                 if( (buffer_rx[6] & 0x80) == 0x80)
  198.                     p = -0.01*( (float)( (0xFF ^ buffer_rx[6]) + 1) );
  199.                 else
  200.                     p = 0.01*( (float)((int)buffer_rx[6]));
  201.  
  202.                 if( (buffer_rx[7] & 0x80) == 0x80)
  203.                     q = -0.01*( (float)( (0xFF ^ buffer_rx[7]) + 1) );
  204.                 else
  205.                     q = 0.01*( (float)buffer_rx[7]);
  206.                
  207.                 update_time();
  208.  
  209.                 dataloger = fopen("dataloger_1.csv","a");
  210.                 if(dataloger == NULL){
  211.                     printf("\nErro dataloger\n!");
  212.                     exit(1);
  213.                 }          
  214.                 sprintf(query,"%d,%d,%d,%d,%d,%d,%.2f,%.2f,%.2f,%.2f\n",dia,mes,ano,hora,min,sec,v,f,p,q);
  215.                 fprintf(dataloger,"%s",query);         
  216.                
  217.                 fclose(dataloger);             
  218.             }else if( (buffer_rx[0] >> 4) == 3 ){
  219.                
  220.                 for(c = 1; c < 8; c++){                
  221.                     Mag_vg[harm_ord] = 0.1*((float)((unsigned)buffer_rx[c]));
  222.                     harm_ord = harm_ord+2;
  223.                     if(harm_ord == 53){
  224.                         sprintf(query,"v,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f\n",Mag_vg[1],Mag_vg[3],Mag_vg[5],Mag_vg[7],Mag_vg[9],Mag_vg[11],Mag_vg[13],Mag_vg[15],Mag_vg[17],Mag_vg[19],Mag_vg[21],Mag_vg[23],Mag_vg[25],Mag_vg[27],Mag_vg[29],Mag_vg[31],Mag_vg[33],Mag_vg[35],Mag_vg[37],Mag_vg[39],Mag_vg[41],Mag_vg[43],Mag_vg[45],Mag_vg[47],Mag_vg[49],Mag_vg[51]);
  225.                         dataloger = fopen("dataloger_2.csv","a");
  226.                         if(dataloger == NULL){
  227.                             printf("\nErro fft dataloger\n!");
  228.                             exit(1);
  229.                         }else{     
  230.                             fprintf(dataloger,"%s",query);             
  231.                         }
  232.                         harm_ord = 1;
  233.                         fclose(dataloger);
  234.                         break;
  235.                     }                  
  236.                 }
  237.                
  238.             }else if( (buffer_rx[0] >> 4) == 4 ){
  239.                
  240.                 for(c = 1; c < 8; c++){                
  241.                     Mag_ig[harm_ord] = 0.1*((float) ((unsigned)buffer_rx[c]) );
  242.                     harm_ord = harm_ord+2;
  243.                     if(harm_ord == 53){
  244.                         sprintf(query,"i,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f\n",Mag_ig[1],Mag_ig[3],Mag_ig[5],Mag_ig[7],Mag_ig[9],Mag_ig[11],Mag_ig[13],Mag_ig[15],Mag_ig[17],Mag_ig[19],Mag_ig[21],Mag_ig[23],Mag_ig[25],Mag_ig[27],Mag_ig[29],Mag_ig[31],Mag_ig[33],Mag_ig[35],Mag_ig[37],Mag_ig[39],Mag_ig[41],Mag_ig[43],Mag_ig[45],Mag_ig[47],Mag_ig[49],Mag_ig[51]);
  245.                         dataloger = fopen("dataloger_2.csv","a");
  246.                         if(dataloger == NULL){
  247.                             printf("\nErro fft dataloger\n!");
  248.                             exit(1);
  249.                         }else{     
  250.                             fprintf(dataloger,"%s",query);             
  251.                         }
  252.                         harm_ord = 1;
  253.                         fclose(dataloger);
  254.                         break;
  255.                     }                  
  256.                 }          
  257.             }
  258.  
  259.             memset(buffer_rx,0,sizeof(buffer_rx));
  260.             msg_receive = 0;
  261.         }
  262.        
  263.         if(wave_complete){
  264.            
  265.             update_time();
  266.            
  267.             dataloger = fopen("dataloger_0.csv","a");
  268.             if(dataloger == NULL){
  269.                 printf("\nErro dataloger\n!");
  270.                 exit(1);
  271.             }          
  272.             for(i = 0; i < 2048; i++){             
  273.                 sprintf(query,"%d,%d,%d,%d,%d,%d,%d,%.3f\n",dia,mes,ano,hora,min,sec,i,v_vector[i]);
  274.                 fprintf(dataloger,"%s",query);         
  275.             }
  276.             fclose(dataloger);
  277.             memset(buffer_tx,0,sizeof(buffer_rx));
  278.             buffer_tx[0] = 0xF1;
  279.             nwrite = write(handle,buffer_tx,8);
  280.             tcdrain(handle);
  281.             for(i = 0; i < 2048; i++){
  282.                 v_vector[i] = 0.0;
  283.             }
  284.             wave_complete = 0;
  285.         }
  286.        
  287.         usleep(2000);
  288.         count++;
  289.         if(count == 200){
  290.             count = 0;
  291.             update_time();
  292.         }
  293.     }
  294.     buffer_tx[0] = 0xF0;
  295.     buffer_tx[1] = 0x00;
  296.     nwrite = write(handle,buffer_tx,8);
  297.     tcdrain(handle);
  298.  
  299.     close(handle);
  300.     printf("\nStop program\n");
  301.     return 0;  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement