*************************************** *************************************** ho inserito questo testo altrimenti non riuscivo ad importare il .c *************************************** #include "defs.c" #include "timers.c" #include "screen.c" #include "cmd.c" #include "sound.c" #include "log.c" #include "io.c" #include "tel.c" void read_config() { FILE *f; if ((f=fopen("config.txt","r"))!=NULL) { fscanf(f,"%i",&altezza_voce); fclose(f); sprintf(buf_st,"CONFIG: Altezza voce = %i",altezza_voce); msg(buf_st); } else { msg("Manca il file config.txt"); exit(0); } } double temper(double ref) { /* if (ref>127.0) return (71.8 - ref*0.3713); else return (141.68 - ref*0.9088 - 1.1); */ return 476.08*exp(-0.0228*ref); } mvarie() { switch (sttempa) { case 0: /* temperatura normale */ if (etempa<90 && etempa) { sttempa=1; if (fpresenza) recita("lEX",GIORNO); log_eallarmi('E','1'); memo_log("Temperatura Computer troppo alta"); }; break; case 1: /* temperatura alta */ if (etempa>140) sttempa=0; break; default: ; } switch (sttempp) { case 0: /* termosifone spento */ if (etempp<105 && etempp) { sttempp=1; recita("pa",GIORNO); memo_log("Riscaldamento acceso"); }; break; case 1: /* termosifone acceso */ if (etempp>115) { sttempp=0; recita("ps",GIORNO); memo_log("Riscaldamento spento"); }; break; default: ; } if (flag_fan==0 && sttempa) { cfanon(); flag_fan=1; } if (flag_fan==1 && sttempa==0) { cfanoff(); flag_fan=0; } if (ecorr) { integ_corr = integ_corr*(0.95) + (double)corrente * (0.05); sprintf(buf_st,"%5.1lf",integ_corr); t(30,9,buf_st); if (fabs(integ_corr-val_prec_corr)>15.0 || etimer[BT_ALTRI+4]) { add_event((unsigned char)0x42,(unsigned char)integ_corr,1); val_prec_corr=integ_corr; start_timer(BT_ALTRI+4,DELTA_T); } } if (eaudio && etimer[29]) { integ_audio = integ_audio*(0.6) + (double)audio * (0.4); sprintf(buf_st,"%3i %5.1lf",audio,integ_audio); t(26,10,buf_st); switch(staudio) { case 0: if (integ_audio>100.0) { staudio=1; if (stalarm==1) { recita(" l l",GIORNONOTTE+NOINTRO); sprintf(buf_st,"Rumore ambiente elevato (%i)",(int)integ_audio); memo_log(buf_st); log_eaudio(); } } break; case 1: if (integ_audio<70) staudio=0; break; default: break; } } if (eaudio) if ((integ_audio>75 && fabs(integ_audio - val_prec_audio)>20.0) || fabs(integ_audio - val_prec_audio)>45.0 || etimer[BT_ALTRI+5]) { add_event((unsigned char)0x43,(unsigned char)integ_audio,1); val_prec_audio=integ_audio; start_timer(BT_ALTRI+5,DELTA_T); } if (edtmfi==4) { cnt_report=0; report(T_INT); } if (edtmfi==6) { report(T_INT); } if (edtmfi==12) { recita("d",T_INT); } if (edtmfi==11) { recita("d",T_INT); } if (stalarm==1 && esignal2) { forse_allarme=1; comando(0xA0); start_timer(18,8); } if (stalarm==1 && forse_allarme && etimer[18]) { forse_allarme=0; recita(" l l",GIORNO+NOINTRO); log_eallarmi('l','l'); flag_allarme=1; start_timer(15,40); start_timer(14,2); caudio(0,1); caudion(); calarmon(); } if (etimer[15] && flag_allarme) { caudio(0,0); flag_allarme=0; calarmoff(); caudioff(); } if (flag_allarme && etimer[14]) if (flag_allarme==1) { flag_allarme=2; calarmoff(); start_timer(14,2); } else { flag_allarme=1; calarmon(); start_timer(14,2); } /* misura del movimento */ time(&movim_time); if (movim_time_old != movim_time) { movim_time_old=movim_time; if (fmovim) movimento=movimento*0.97 + fmovim*0.03; else movimento=movimento*0.994; sprintf(buf_st,"%5.1lf",100.0*movimento); t(26,11,buf_st); /* if (fabs(movimento*255-val_prec_segnale[MXMODULI*2+4])>20.0 || etimer[BT_ALTRI+4]) { add_event((unsigned char)0x49,(unsigned char)(movimento*255),1); val_prec_segnale[MXMODULI*2+4]=movimento*255; start_timer(BT_ALTRI+4,DELTA_T); } */ if (movimento>0.01 && val_prec_segnale[MXMODULI*2+4]<0.01) {val_prec_segnale[MXMODULI*2+4]=1.0; add_event((unsigned char)0x49,(unsigned char)(0xC0),1);} if (movimento<0.01 && val_prec_segnale[MXMODULI*2+4]>0.01) {val_prec_segnale[MXMODULI*2+4]=0.0; add_event((unsigned char)0x49,(unsigned char)(0x08),1);} } /* calcolo livello di attenuazione segnali audio */ if (integ_audio>200.0) attenuazione=1; else if (integ_audio>150.0) attenuazione=2; else if (integ_audio>90.0) attenuazione=3; else if (integ_audio>70.0) attenuazione=4; else if (integ_audio>50.0) attenuazione=5; else if (integ_audio>40.0) attenuazione=6; else attenuazione=7; /* gestione indicatori di presenza, di assenza_prolungata e segnale di benvenuto a casa */ if (movimento>0.01) { fpresenza=1; start_timer(22,300); } if (etimer[22]) { fpresenza=0; etimer[22]=0; } if (fpresenza==1) start_timer(26,5000); if (fpresenza==0 && etimer[26]) assenza_prolungata=1; if (assenza_prolungata && fpresenza) { memo_log("Accoglienza"); assenza_prolungata=0; _strtime( s_time ); ora_tmp=10*(s_time[0]-'0')+s_time[1]-'0'; if (ora_tmp>9) { if (ora_tmp>9 && ora_tmp<22) attenuazione=2; recita(" j b ",GIORNONOTTE); cnt_report=0; report(GIORNONOTTE); } } /* questo serve per assicurare che fmovim prima o poi va a zero, anche se non arriva il corrispondente comando dall'apple */ if (etimer[19] && fmovim) { fmovim=0; comando(0x8F); } /* accensione periodica delle ventole */ if (etimer[20]) { fventole=1; /* if (tempa>105) {secondi_acceso=60; secondi_spento=3600;} else if (tempa>95) {secondi_acceso=90; secondi_spento=1800;} else if (tempa>85) {secondi_acceso=120; secondi_spento=900;} else if (tempa>80) {secondi_acceso=180; secondi_spento=600;} else {secondi_acceso=240; secondi_spento=300;} */ if (tempa>110) {secondi_acceso=10; secondi_spento=600;} else if (tempa>105) {secondi_acceso=20; secondi_spento=450;} else if (tempa>100) {secondi_acceso=30; secondi_spento=300;} else if (tempa>95) {secondi_acceso=30; secondi_spento=180;} else {secondi_acceso=30; secondi_spento=60;} start_timer(21,secondi_acceso); etimer[20]=0; cfanon(); } if (etimer[21] && fventole) { fventole=0; start_timer(20,secondi_spento); etimer[21]=0; cfanoff(); } _strtime( s_time ); time_minuti=s_time+3; ora_tmp=10*(s_time[0]-'0')+s_time[1]-'0'; if (ora_tmp>7 && ora_tmp<22 && fpresenza && !stalarm) { if (strcmp(time_minuti,"00:00")==0) { if (ora_tmp<10) sprintf(buf_st,"je%c",s_time[1]); /* formato 1 cifra, fino alle 9am */ else if (ora_tmp<21) sprintf(buf_st,"je%2i",ora_tmp); /* formato normale, dalle 10am alle 8pm */ else sprintf(buf_st,"je%1i",ora_tmp-12); /* formato 1 cifra, dalle 9pm */ recita(buf_st,GIORNONOTTE); } if (strcmp(time_minuti,"15:00")==0) recita(" P",GIORNO+NOINTRO); if (strcmp(time_minuti,"30:00")==0) recita(" PP",GIORNO+NOINTRO); if (strcmp(time_minuti,"45:00")==0) recita(" PPP",GIORNO+NOINTRO); if (strcmp(s_time,old_s_time)) { strcpy(old_s_time,s_time); if (getrandom(600)==302) switch getrandom(11) { case 0: recita(" I ",GIORNO+NOINTRO); break; case 1: recita(" S ",GIORNO+NOINTRO); break; case 2: recita(" z ",GIORNO+NOINTRO); break; case 3: recita(" D ",GIORNO+NOINTRO); break; case 4: recita(" F ",GIORNO+NOINTRO); break; case 5: recita(" G ",GIORNO+NOINTRO); break; case 6: recita(" H ",GIORNO+NOINTRO); break; case 7: recita(" - ",GIORNO+NOINTRO); break; case 8: recita(" : ",GIORNO+NOINTRO); break; case 9: recita(" , ",GIORNO+NOINTRO); break; case 10: recita(" ; ",GIORNO+NOINTRO); break; default: break; } } } time( <ime ); today = localtime( <ime ); strftime(s_date,8,"%w",today); s_time[7]=0; if ( (!fsveglia && strcmp(s_time,"07:09:0")==0 && s_date[0]!='0') || (fcontrollosveglia && etimer[30]) ) { assenza_prolungata=0; start_timer(26,5000); /* reset del timer: no report alla mattina */ recita(" ",NOTTE); fsveglia=1; start_timer(23,35); } if (strcmp(s_time,"04:02:0")==0) { n_ev_campa=0; n_ev_telef=0; n_ev_telec=0; n_ev_audio=0; n_ev_chiama=0; n_ev_allarmi=0; cnt_report=0; } if (fsveglia && etimer[23]) { recita(" W",NOTTE+NOINTRO); fsveglia=1; start_timer(23,29); } if (fsveglia && (lcamera>50.0)) /* verifica se in camera c'e' luce */ { recita("f d",GIORNONOTTE); fsveglia=0; fcontrollosveglia=1; start_timer(30,603); /* se dopo 10 minuti ancora non c'e' presenza forse ho preso sonno, allora poi insisti */ } if (fcontrollosveglia && fpresenza) /* se passo per il corridoio, allora mi sono alzato! */ { fcontrollosveglia=0; recita("j f",GIORNONOTTE); } } int calcola_tempo_boiler() { int tmp; tmp=60*( 60 - 5*(temper((tbagno+tcucina+tingresso+tcamera)/4)-24) ); if (tmp > 60*90) tmp=60*70; if (tmp < 60*40) tmp=60*40; return tmp; } void mboiler() { int orario_giornaliero=0; _strtime( s_time ); s_time[5]=0; /* accorcio la stringa togliendo i secondi */ if (!orario_giornaliero && strcmp(s_time,"19:01")==0) orario_giornaliero=1; switch (stboiler) { case 0: /* spento */ if (etimer[17] && acqua_calda==1) acqua_calda=0; if (etimer[6]) { start_timer(6,159); cboileroff(); }; if (edtmfi==7 || (stanswer==4 && edtmfe==7) || orario_giornaliero) { stboiler=1; cboileron(); acqua_calda=0; tempo_boiler=calcola_tempo_boiler(); sprintf(buf_st,"Ba %2i",tempo_boiler/60); if (edtmfe==7) recita(buf_st,T_EST); if (orario_giornaliero) recita(buf_st,GIORNONOTTE); if (edtmfi==7) recita(buf_st,T_INT); start_timer(30,10); start_timer(4,tempo_boiler); /* accendi boiler in funzione della media della temperatura */ start_timer(6,159); }; break; case 1: /* acceso */ if ( !etimer[30] && (edtmfi==7 || (stanswer==4 && edtmfe==7)) ) /* ho premuto "7" in successione? */ { tempo_boiler=tempo_boiler-600; if (tempo_boiler<10*60) tempo_boiler=70*60; sprintf(buf_st,"Ba %2i",tempo_boiler/60); if (edtmfe==7) recita(buf_st,T_EST); if (edtmfi==7) recita(buf_st,T_INT); start_timer(30,10); start_timer(4,tempo_boiler); } else if (edtmfi==7 || (stanswer==4 && edtmfe==7)) { stboiler=0; cboileroff(); if (edtmfe==7) recita("Bs",T_EST); else recita("Bs",T_INT); }; if (etimer[6]) { start_timer(6,159); cboileron(); }; if (etimer[4]) { sprintf(buf_st,"Boiler spento dopo %i minuti", tempo_boiler/60); memo_log(buf_st); stboiler=2; } break; case 2: /* spento ma per effetto di tempo scaduto (l'acqua e' calda!) */ stboiler=0; cboileroff(); recita("BsEd",GIORNONOTTE); start_timer(17,3600*6); /* si dichiara ACQUA CALDA per le 6 ore successive */ acqua_calda=1; break; default: ; } } void mradio() { switch (stradio) { case 0: /* modalita' radio spenta */ if (edtmfi==9) { stradio=1; cradion(); caudion(); /* recita(" ",GIORNO); */ }; break; case 1: /* modalita' radio accesa */ if (edtmfi==9) { stradio=0; /* recita("ls",T_INT); */ caudioff(); cradioff(); }; default: ; } } void malarm() { switch (stalarm) { case 0: /* modalita' allarme spenta */ if (edtmfi==9 || (stanswer==4 && edtmfe==9)) { stalarm=2; start_timer(8,20); if (stanswer==4) recita("la d",T_EST); else recita("la d",T_INT); }; if (esignal1) { if (lcamera>50.0 || lbagno>50.0 || lcucina>50.0) recita("lo",GIORNO); else { recita("lae",GIORNO); stalarm=2; start_timer(8,20); } }; break; case 1: /* modalita' allarme accesa */ if (edtmfi==9 || (stanswer==4 && edtmfe==9)) { stalarm=0; if (stanswer==4) recita("ls",T_EST); else recita("ls",T_INT); }; if (esignal1) { stalarm=0; forse_allarme=0; recita("ls",GIORNO); cnt_report=0; report(GIORNO); }; break; case 2: /* modalita' allarme accesa */ if (etimer[8]) { stalarm=1; recita(" ",GIORNO); }; break; default: ; } } void mvivavr() { switch (stvivavr) { case 0: /* spento */ if (stanswer==4 && edtmfe==5 && !stmice) { stvivavr=1; caudion(); caudio(2,1); recita("VaT",T_EST); memo_log("Telecontrollo: vivavoce on"); }; break; case 1: /* vivavoce esterno */ if (stanswer==4 && edtmfe==5) { stvivavr=0; recita("VsT",T_EST); caudio(2,0); caudioff(); memo_log("Telecontrollo: vivavoce off"); }; break; default: ; } } void mvivavi() { switch (stvivavi) { case 0: /* spento */ if (edtmfi==5 && !stmici) { stvivavi=1; caudion(); caudio(3,1); recita("Vai",T_INT); }; break; case 1: /* acceso vivavoce interno */ if (edtmfi==5 || ehtgi || ehtga || ehtno) { stvivavi=0; recita("Vsi",T_INT); caudio(3,0); caudioff(); }; break; default: ; } } void mvivave() { switch (stvivave) { case 0: /* spento */ if (edtmfe==11) stvivave=1; /* aspetta asterisco */ break; case 1: /* listening dtmfe */ if (edtmfe==5) { stvivave=2; caudion(); caudio(2,1); recita("Va",T_EST); }; if (edtmfe>0 && edtmfe!=5) stvivave=0; break; case 2: /* vivavoce esterno */ if (edtmfe==5 || !fleo || ehtgi || ehtga || ehtno || stmice) { stvivave=0; recita("Vs",T_EST); caudio(2,0); caudioff(); }; break; default: ; } } void mmici() { switch (stmici) { case 0: /* spento */ if (edtmfi==8) { stmici=1; recita("Ma",T_INT); caudio(7,1); }; break; case 1: /* acceso */ if (edtmfi==8 || ehtga || ehtgi || ehtno || stvivavi) { stmici=0; caudio(7,0); recita("Ms",T_INT); }; break; default: ; } } void mmice() { switch (stmice) { case 0: /* spento */ if (stanswer==4 && edtmfe==8) { stmice=1; recita("Ma",T_EST); caudio(5,1); memo_log("Telecontrollo: MIC on"); }; if (edtmfe==11 && (!stvivave)) stmice=2; /* aspetta asterisco */ break; case 1: /* acceso */ if ((stanswer==4 && edtmfe==8) || elel || stvivave || stvivavr) { stmice=0; caudio(5,0); recita("Ms",T_EST); memo_log("Telecontrollo: MIC off"); }; break; case 2: /* listening dtmfe */ if (edtmfe==8) { stmice=1; caudio(5,1); recita("dd",T_EST); }; if ((edtmfe>0 && edtmfe!=5) || elel) stvivave=0; break; default: ; } } put_config() { int i; scrivicar(0x05); /* definisco 5 moduli */ scrivicar(0xC4); /* modulo n.4, INGRESSO, con segnali e no output */ scrivicar(0x00); scrivicar(0xC2); /* modulo n.2, BAGNO, con segnali e output */ scrivicar(0x3C); /* questi sono i segnali per accendere-spegnere */ scrivicar(0xC8); /* modulo n.1, CUCINA, con segnali e no output */ scrivicar(0x00); scrivicar(0xCC); /* modulo n.3, CAMERA, con segnali e no output */ scrivicar(0x00); scrivicar(0xC6); /* modulo n.6, CAMERETTA, con segnali e no output */ scrivicar(0x00); } modemsetup() { unsigned status; return 0; status = _bios_serialcom(_COM_INIT, MODEM_PORT, _COM_CHR7 | _COM_STOP1 | _COM_EVENPARITY | _COM_9600); sprintf(buf_st,"Status modem: %.4X (COM%c)",status,MODEM_PORT+'1'); msg(buf_st); } char c_modem; char r_modem[80], s_modem[80]; int comando_modem=0; int ps_modem=0; int pr_modem=0; mmodem() { unsigned status_modem; return 0; if (comando_modem) { ps_modem=0; if (comando_modem==1) strcpy(s_modem,"AT\015"); if (comando_modem==2) strcpy(s_modem,"ATDT03356331670\015"); if (comando_modem==3) strcpy(s_modem,"\033"); if (comando_modem==4) strcpy(s_modem,"ATA\015"); comando_modem=0; } if (s_modem[ps_modem]) { status_modem = _bios_serialcom(_COM_SEND, MODEM_PORT, (unsigned)s_modem[ps_modem]); ps_modem++; } if (s_modem[0]) { status_modem = _bios_serialcom(_COM_RECEIVE, MODEM_PORT, 0); c_modem = status_modem & 0x00FF; status_modem = status_modem & 0x8E00; } if (!status_modem) { if (c_modem==13 && pr_modem>1) emodem=1; if (c_modem==13 && pr_modem<2) pr_modem=0; if (c_modem>31) r_modem[pr_modem++]=c_modem; } if (emodem) { emodem=0; r_modem[pr_modem]=0; strcpy(buf_st,"Risposta MODEM: "); strcat(buf_st,r_modem); msg(buf_st); pr_modem=0; ps_modem=0; s_modem[0]=0; } } dtmf(char *s, int *p, int cod) { char d; d=kdtmf[cod]; s[(*p)]=d; (*p)=((*p)+1) % 14; s[(*p)]=' '; } leggievento() { int l1,l2,j,bit, segnale, nmod, indice_segnale; if (0x10 & inpb(lptin)) { l1=leggicar(); if (!(l1 & 0x80)) l2=leggicar(); if ((l1 & 0xE0) == 0x80) { switch (l1) { case 0x81: msg("Cornetta giorno alzata (0x81)"); t(75,3,"1"); add_event(0x81,0,0); eohtgi=1; fohtgi=1; break; case 0x82: msg("Cornetta notte alzata (0x82)"); t(75,4,"1"); add_event(0x82,0,0); eohtno=1; fohtno=1; break; case 0x83: msg("Cornetta garage alzata (0x83)"); t(75,5,"1"); add_event(0x83,0,0); eohtga=1; fohtga=1; break; case 0x91: msg("Cornetta giorno abbassata (0x91)"); t(75,3,"0"); add_event(0x91,0,0); ehtgi=1; fohtgi=0; break; case 0x92: msg("Cornetta notte abbassata (0x92)"); t(75,4,"0"); add_event(0x92,0,0); ehtno=1; fohtno=0; break; case 0x93: msg("Cornetta garage abbassata (0x93)"); t(75,5,"0"); add_event(0x93,0,0); ehtga=1; fohtga=0; break; case 0x94: /* msg("Il campanello ha smesso (0x84)"); */ /* t(25,18,"0"); */ break; case 0x84: msg("RING! campanello"); _strtime( s_time ); t(57,7,s_time); add_event(0x84,0,0); ecampanello=1; comando(0x81); comando(0xA8); comando(0x81); comando(0xA8); break; case 0x85: /* Portoncino aperto (0x85) */ add_event(0x85,0,0); break; case 0x95: msg("Portoncino o altri campanelli"); _strtime( s_time ); t(57,6,s_time); add_event(0x95,0,0); eportoncino=1; break; case 0x96: /* Luce scale spente (0x96) */ add_event(0x96,0,0); break; case 0x86: /* Luce scale accese (0x86) */ msg("Tasto luce scale premuto (0x86)"); _strtime( s_time ); t(57,5,s_time); add_event(0x86,0,0); escale=1; break; case 0x87: msg("RING! telefono"); _strtime( s_time ); t(57,4,s_time); add_event(0x87,0,0); fringte=1; eringte=1; break; case 0x97: /* Il telefono ha smesso di suonare (0x97) */ fringte=0; break; case 0x88: msg("Linea esterna libera (0x88)"); add_event(0x88,0,0); elel=1; fleo=0; break; case 0x98: msg("Linea esterna OCCUPATA (0x98)"); _strtime( s_time ); t(57,3,s_time); add_event(0x98,0,0); eleo=1; fleo=1; break; case 0x8B: msg("Pulsante di servizio"); add_event(0x8B,0,0); esignal1=1; msg("Pulsante di servizio"); break; case 0x9B: /* Pulsante rilasciato */ break; case 0x8C: /* Movimento */ add_event(0x8C,0,0); esignal2=1; fmovim=1; start_timer(19,600); msg("Rilevato movimento"); break; case 0x9C: /* Segnale movimento OFF */ add_event(0x9C,0,0); fmovim=0; break; case 0x89: /* msg("DTMF1 idle (0x89)"); t(24,4,"0");*/ break; case 0x8A: /* msg("DTMF2 idle (0x8A)"); t(24,6,"0");*/ break; default: sprintf(buf_st,"Comando NON riconosciuto!!! (0x%2X)",l1); msg(buf_st); break; } } if ((l1 & 0xE0) == 0xC0) { switch (l1) { case 0xC0: msg("Ricevuto ERRORE 0: Codice telefono errato"); break; case 0xC1: msg("Ricevuto ERRORE 1: Codice esecutivo non definito"); break; case 0xC2: msg("Ricevuto ERRORE 2: Codice audio non definito"); break; case 0xC3: msg("Ricevuto ERRORE 3: Manca codice attiv./disatt. per il modulo richiesto"); break; case 0xC4: msg("Ricevuto ERRORE 4: Stato lettura moduli non valido. Impostato a zero"); break; case 0xC5: msg("Ricevuto ERRORE 5: Nessun modulo e' interrogabile"); break; case 0xC6: msg("Ricevuto ERRORE 6: Overflow eventi tipo 1"); break; case 0xC7: msg("Ricevuto ERRORE 7: Overflow eventi tipo 2"); break; case 0xC8: msg("Ricevuto ERRORE 8: Ask_status con valore errato."); break; default: sprintf(buf_st,"Ricevuto ERRORE con codice errato: 0x%2X",l1); msg(buf_st); break; } } if ((l1 & 0xF0) == 0xA0) { if (fohtga || fohtgi || fohtno) /* DTMF int. solo se un telefono e' off-hook! */ { edtmfi=l1 & 0x0F; add_event((unsigned char)l1,0,0); sprintf(buf_st,"%2i",l1 & 0x0F); t(26,3,buf_st); dtmf(buf_d1, &pdtmf1, l1 & 0x0F); t(29,3,buf_d1); } } if ((l1 & 0xF0) == 0xB0) { edtmfe=l1 & 0x0F; /* add_event((unsigned char)l1,0,0); */ sprintf(buf_st,"%2i",l1 & 0x0F); t(26,4,buf_st); dtmf(buf_d2, &pdtmf2, l1 & 0x0F); t(29,4,buf_d2); } if ((l1 & 0xC0) == 0x00) { nmod=(l1 & 0x0F); segnale = (l1 & 0x30) >> 4; rr=0; if (segnale==2) l2double=255.0-(double)l2; /* segnale luce */ else l2double=(double)l2; /* temperatura */ l2orig=l2double; if (nmod==2) /* BAGNO */ {rr=0; if (segnale==1) { tbagno=tbagno*0.7 + l2double*0.3; l2print = temper(l2double+17.5); l2double=tbagno; } else {lbagno=lbagno*0.5 + l2double*0.5; l2double=lbagno;l2print=l2double;} } if (nmod==4) /* INGRESSO */ {rr=1; if (segnale==1) { tingresso=tingresso*0.7 + l2double*0.3; l2print=temper(l2double+21.5); l2double=tingresso; } else {lingresso=lingresso*0.5 + l2double*0.5; l2double=lingresso;l2print=l2double;} } if (nmod==8) /* CUCINA */ {rr=2; if (segnale==1) { tcucina=tcucina*0.7 + l2double*0.3; l2print=temper(l2double+4.6); l2double=tcucina; } else {lcucina=lcucina*0.5 + l2double*0.5; l2double=lcucina; l2print=l2double;} } if (nmod==12) /* CAMERA */ {rr=3; if (segnale==1) { tcamera=tcamera*0.7 + l2double*0.3; l2print=temper(l2double+2.0); l2double=tcamera; } else {lcamera=lcamera*0.5 + l2double*0.5; l2double=lcamera;l2print=l2double;} } if (nmod==6) /* CAMERETTA */ {rr=4; if (segnale==1) { tcameretta=tcameretta*0.7 + l2double*0.3; l2print=temper(l2double+2.0); l2double=tcameretta; } else {lcameretta=lcameretta*0.5 + l2double*0.5; l2double=lcameretta;l2print=l2double;} } if (nmod==1) rr=4; sprintf(buf_st,"%3.0lf %3.1lf",l2double,l2print); t(3,segnale+rr*3,buf_st); indice_segnale=segnale + nmod*2; if (fabs(l2double-val_prec_segnale[indice_segnale])>DELTA_NF || etimer[indice_segnale+BT_MODULI]) { tmpint=(int)l2double; add_event((unsigned char)l1,(unsigned char)tmpint,1); val_prec_segnale[indice_segnale]=l2double; start_timer(indice_segnale+BT_MODULI,DELTA_T); } } if ((l1 & 0xC0) == 0x40) { switch (l1 & 0x1F) { case 0x00: l2double=(double)l2; /* temperatura apple */ l2print=temper(l2double+6.8); sprintf(buf_st,"%3i %5.1lf",l2,l2print); t(26,6,buf_st); etempa=l2; tempa=l2; if (fabs(l2double-val_prec_segnale[MXMODULI*2])>10.0 || etimer[BT_ALTRI]) { add_event((unsigned char)l1,(unsigned char)l2,1); val_prec_segnale[MXMODULI*2]=l2double; start_timer(BT_ALTRI,DELTA_T); } break; case 0x01: l2double=(double)l2; /* temp. termosifone */ l2print=temper(l2double+0.0); sprintf(buf_st,"%3i %5.1lf",l2,l2print); t(26,7,buf_st); etempp=l2; l2double=(double)l2; if (fabs(l2double-val_prec_segnale[MXMODULI*2+1])>DELTA_NF || etimer[BT_ALTRI+1]) { add_event((unsigned char)l1,(unsigned char)l2,1); val_prec_segnale[MXMODULI*2+1]=l2double; start_timer(BT_ALTRI+1,DELTA_T); } break; case 0x02: sprintf(buf_st,"%3i",l2); t(26,9,buf_st); corrente=l2; ecorr=1; break; case 0x03: /* sprintf(buf_st,"%3i",l2); t(26,10,buf_st); */ audio=l2; eaudio=1; break; case 0x04: sprintf(buf_st,"%2X",l2); t(54,9,buf_st); break; case 0x05: sprintf(buf_st,"%2X",l2); t(54,10,buf_st); break; case 0x06: sprintf(buf_st,"%2X",l2); t(54,11,buf_st); break; case 0x07: sprintf(buf_st,"%3i",l2); /* temp.acqua o lum.junior */ t(26,13,buf_st); l2double=(double)l2; if (fabs(l2double-val_prec_segnale[MXMODULI*2+2])>DELTA_NF || etimer[BT_ALTRI+2]) { add_event((unsigned char)l1,(unsigned char)l2,1); val_prec_segnale[MXMODULI*2+2]=l2double; start_timer(BT_ALTRI+2,DELTA_T); } break; case 0x08: l2double=(double)l2; /* Temp. scale */ l2print=temper(l2double-5.4); sprintf(buf_st,"%3i %5.1lf",l2,l2print); t(26,12,buf_st); if (fabs(l2double-val_prec_segnale[MXMODULI*2+3])>DELTA_NF || etimer[BT_ALTRI+3]) { add_event((unsigned char)l1,(unsigned char)l2,1); val_prec_segnale[MXMODULI*2+3]=l2double; start_timer(BT_ALTRI+3,DELTA_T); } break; default: sprintf(buf_st,"Ricevuto variazione locale con codice errato (0x%2X)",l1); break; } } } /* end if */ } main() { char c; int stat, i; FILE *f; restart: outp(byteout,0); outp(lptout,0); memo_log("Restart MASTER"); crealogfile(); srand( (unsigned)time(NULL) ); for(i=0;i300) altezza_voce=300; recita("j",GIORNONOTTE); break; case '3' : recita("d",GIORNO); break; case '4' : recita("d",NOTTE); break; case '5' : recita("d",GIORNONOTTE); break; case '6' : recita("d",RF); break; case '7' : comando_modem=1; break; case '8' : comando(0x2A); break; case '9' : recita("W",NOTTE); break; case 'y' : comando(0x81); break; case 'Y' : comando(0xB8); break; case '0' : comando(0x2A); memo_log("Shutdown MASTER + request reset SCANNER"); writelogfile(); hfree(cache_base); exit(0); break; case 'w' : memo_log("Shutdown MASTER"); writelogfile(); hfree(cache_base); exit(0); break; default: sprintf(buf_st,"Comando -> %c <- non definito",c); msg(buf_st); break; } /* end switch */ c=0; } /* end if */ /* if (telecontrollo) { if (edtmfe != 10) {edtmfi=edtmfe; edtmfe=0;} non ricordo a cosa doveva servire questa roba !! } */ mtgi(); mtga(); mtno(); mvivavi(); mvivave(); mvivavr(); mmici(); mmice(); mregdtmf(); mboiler(); manswer(); mvarie(); mradio(); /* malarm(); */ /* mmodem(); */ if (etimer[13]) { comando(0x21); start_timer(13,35); } if (etimer[17]) { acqua_calda=0; } if (ecampanello) { memo_log("Ha suonato il campanello"); log_ecampa(); if (fohtga) recita("C C",T_EST); else { start_timer(16,6); ctgar(); } } if (etimer[16]) { ctgai(); etimer[16]=0; } if (escale) { comando(0x82); start_timer(27,10); if (!etimer[28]) recita("L",GIORNO); } if (eportoncino) { comando(0x84); start_timer(28,10); if (!etimer[27]) recita("L",GIORNO); } update_timers(); /* ora annullo tutti gli eventi */ edtmfi=0; edtmfe=0; eohtgi=0; eohtga=0; eohtno=0; ehtgi=0; ehtga=0; ehtno=0; eringte=0; escale=0; eportoncino=0; ecampanello=0; eleo=0; elel=0; etempa=0; etempp=0; ecorr=0; eaudio=0; esignal1=0; esignal2=0; emodem=0; } /* end while */ }