/* 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();
}