/*                            CUR.C                         */

 

#include <fcntl.h>     

#include <curses.h>    

#include <stdio.h>     

#include <math.h>

#include <time.h>

#include <signal.h>    

 

main(){    

      FILE *fp;

      int ch,rez,pidsis,pidskr,polje[80];

      char broj[4],q;

      int max,fd,kanal,i;

      fp=fopen("zola.txt","r");

      fseek(fp,10,SEEK_SET);

      fread(broj,1,4,fp);

      pidsis = atoi(broj);          /*PID procesa "sisajmod200"*/      

      fseek(fp,161,SEEK_SET);                                    

      fread(broj,1,4,fp);                                        

      pidskr = atoi(broj);          /*PID procesa "skripta"*/

 

      initscr();                                     

 

/*zaglavlje*/

      mvaddstr(5,0,"Fakultet Elektrotehnike i Racunarstva");

      mvaddstr(6,0,"Zavod za elektronicke sustave i obradbu informacija");

mvaddstr(8,0,"Distribuirani sustav za upravljanje AD pretvorbom");

mvaddstr(19,0,"Pritisni <Esc> za izlazak");

mvaddstr(15,15,"ODABERI KANAL (1-9):   ");                       

 

      ch=getch();                        

      if(ch==27 || ch < '1' && ch > '9')              /*kanal 1-9*/    

      {                            

      endwin();                          

      resetty();                         

      kill(pidskr,SIGKILL);                          

 

      }                            

      ch=(int)(ch-48);                         

 

      mvaddstr(17,15,"ODABERI REZOLUCIJU (1-3):   ");  /*rezolucija 1-3*/

     

rez=getch();                       

      if(rez==27 || ch < '1' && ch > '3')                  

      {                      

      endwin();                    

      resetty();                   

      kill(pidskr,SIGKILL);                    

 

      }                      

      rez=(int)(rez-48);                       

 

      kanal=open("FiFoKaNaL",1);          /*otvori cjevovod za kontrolu*/

      fd=open("FiFo",0);                  /*otvori cjevovod za podatke*/

 

      while(1)                                 

      {                                  

            write(kanal,&ch,4);           /*upis kanala*/        

            write(kanal,&rez,4);          /*i rezolucije u kontr. kanal*/          

 

kill(pidsis,SIGUSR1);         /*salji SIGUSR1 procesu koji radi s memorijom*/      

            sleep(3);                          

read(fd,&polje,320);          /*procitaj 80 podataka iz podatkovnog cjevovoda*/          

            clear();                           

 

            max=0;                             

            for(i=0;i<80;i++)                        

            {                            

            if(abs(2047-polje[i])>max)

max=abs(2047-polje[i]);                   /*trazi max. vrijednost*/

            }                            

for(i=0;i<80;i++) polje[i]=polje[i]-2048;       /*interval (0-4096) -> (-2048-2048)*/

 

            for(i=0;i<11;i++) mvaddch(2*i,4,'-');           /*crtovlje*/

            for(i=0;i<11;i++)                  

            mvhline(2*i,3,'-',77);                   

                                   

            if(max>410)                                     /*skala za signale vece od 1V*/

            {                      

                  mvaddstr(22,0,"U [V]");                  

                  mvaddstr(23,0,"Kanal");mvaddch(23,6,ch+48);          

                  mvaddstr(23,10,"Rezolucija");

mvaddch(23,22,rez+48);

mvaddstr(23,24,"Pritisni <Ctrl+C> za povratak");

 

for(i=0;i<5;i++) mvaddch(2*i+12,1,'-');

for(q=5;q>=0;q--) mvaddch(2*(-q+5),2,q+48);

for(q=1;q<6;q++) mvaddch(2*q+10,2,q+48);

for(i=4;i<80;i++)                  

                  {                      

                        move(20-(polje[i]/195.05+10-0.5),i);

addch('*');                  

                  }                      

                  refresh();                   

            }                      

if(max<410)                                     /*skala za signale manje od 1V*/

            {                      

                  mvaddstr(22,0,"U [V]");

                  mvaddstr(23,0,"Kanal");mvaddch(23,6,ch+48);

                  mvaddstr(23,10,"Rezolucija");mvaddch(23,22,rez+48);

                  mvaddstr(23,24,"Pritisni <Ctrl+C> za povratak");

                  mvaddstr(0,1,"1.0");               

                  mvaddstr(20,1,"1.0");              

 

                  for(i=0;i<5;i++) mvaddch(2*i+12,0,'-');              

                  for(q=1;q<10;q++) mvaddstr(2*q,1,"0.");              

                  for(q=5;q>0;q--) mvaddch(2*(5-q)+2,3,2*q-2+48);

                  for(q=1;q<5;q++) mvaddch(2*q+10,3,2*q+48);

                  for(i=4;i<80;i++)

                  {

                        move(20-(polje[i]/38.57+10-0.5),i);

                        addch('*');

                  }

               refresh();    

            }    

      }

endwin();  

}

 

 

 

 

natrag