Exemplo n.º 1
0
int main(int argc, char *argv[])
{
        int rtn;
	rtn = shared_memory_attach();
        T->pid[POLL_IO24_PID].pids = getpid();
        mk_daemon(argc,argv);
        T->pid[POLL_IO24_PID].pids = getpid();

	if (rtn == -1)
	{
		perror("can not attach to shared memory:\n");
		exit(-1);
	}

	rtn = io24_message_que_init();
        find_io24_addresses();
        if (!Daemon)
        {
          printf("\nDevice array:\n");
          for (rtn = 0; rtn < MAX_DEV;rtn++)
          {
            if (Ip_address[rtn][0] != '\0')
            {
              printf("%d\t%s\t%c\n",rtn,Ip_address[rtn],Port[rtn][0]);
            }
          }
          printf("\n");
        }

        open_udp_socket();

        exit(0);
}
Exemplo n.º 2
0
int main(int argc, char **argv)
{
        int rtn,i,pid;
        char cha,str[30];
	//rtn = log_progress("1");
	system("cd /Users/laurenceschenk/mini-src/mySrc/");
        rtn = shared_memory_attach();
        rtn = find_local();
	rtn = mk_daemon(argc,argv);	//must have this to write PID file
        rtn = shared_memory_attach();
        Mask = COLDIPOZZO_SEND | ROCCAMORICE_SEND | STARLIGHT_SEND | WEEHAWKEN_SEND ;
	rtn = find_devices();
	//rtn = log_progress("Main program starting....\n");
	system("cd /Users/laurenceschenk/mini-src/mySrc/coldipozzo");
	rtn = getuid();
	sprintf(str,"uid = %d",rtn);
	//rtn = log_progress(str);
	rtn = geteuid();
	sprintf(str,"euid = %d",rtn);
	//rtn = log_progress(str);
        while (1)
        {
		//rtn = log_progress("5");
                rtn =main_loop();
		//rtn = log_progress("6");
        }
        exit(0);
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{
        int rtn,i,pid;
        char cha,name[40];
        rtn = shared_memory_attach();
        mk_daemon(argc,argv);
        pid = getpid();
        T->pid[TEMP08_PID].pids = pid;
        rtn = find_local();
	LOC = rtn;
	if (!Daemon) printf ("Local is %d\n",LOC);
	rtn = open_port(*argv);
	Fd = rtn;
	if (!Daemon) printf("Fd = %d\n",Fd);
	strcpy(name,"oww_temp_1");
	rtn = find_device(name);
	Oww_temp_1_dev = rtn;
	strcpy(name,"oww_temp_2");
	rtn = find_device(name);
	Oww_temp_2_dev = rtn;
	if (!Daemon) printf("Oww_temp_1_dev = %d\n",Oww_temp_1_dev);
	if (Fd > 0)
	{
		initialize();
		read_parse_data();
	}
	
	exit(0);

}
Exemplo n.º 4
0
int main(int argc, char **argv)
{       
	int rtn,ch,i,pid,ppid;
        char buffer[10];
        char rcvfrom[30];
        char buffer1[4];
        int port_l,value,loops,ct;
        int ipaddr;
        char sipaddr[4];


        rtn = mk_daemon(argc, argv);
        rtn = shared_memory_attach();
        T->pid[LISTEN_IO24_PID].pids = getpid();
        rtn = io24_message_que_init();
        rtn = io24_out_message_que_init();      //use this to signal io24_out
        rtn = in_event_message_que_init();      //necessage to send messages in driver.c
        rtn = lcd_message_que_init();

	rtn = setup_connection();
	if (rtn != 0)
	{
		if (!Daemon) printf("***Unable to bind to IO24_PORT\n");
	}

//now split into two separate programs to read and to write UDP data
	pid = fork();
        if (pid <  0)
        {
                perror("Unable to fork:\n");
                exit(-1);
        }
        if ( pid == 0 ) //child process
        {
                if (Daemon)
                {
                        //close(0);
                        //close(1);
                }
                //Daemon = 1;
                //printf("Child process\n");
              	rtn = read_data();
        }
        if (pid > 0)            //parent process
        {
                if (Daemon)
                {
                        //close(0);
                        //close(1);
                }
                //Daemon = 1;
                //printf ("Parent process.....\n:");
                T->pid[IO24_PID].pids = getpid();
                //ppid = getpid();
                if (!Daemon) printf("Started io24 parent with pid = %d\n",ppid);
               	wait_for_msg();
        }
}
Exemplo n.º 5
0
 main(int argc, char **argv)
{
        int rtn,i,pid,err;
        char cha,pid_query[40],tmp[10];
        rtn = shared_memory_attach();
        pid = getpid();
        rtn = find_local();
        rtn = mk_daemon(argc,argv);
        rtn = shared_memory_attach();
        printf("Program_name: %s\n",Program_name);
	Occupy_dev = find_device("Occupy");
	Lib_thermo_sp_dev = find_device("Lib_thermo_sp");
	Kit_thermo_sp_dev = find_device("Kit_thermo_sp");
	thermo_failure_dev = find_device("thermo_failure");
	thermo_failure_notify = 0;
	
	read_file();
	if (!Daemon) printf ("Finished reading data file...\n");

	//start two threads, one listening for requests/commands the other running the thermostat
	//connect_with_web_server and run_thermostat

	err = pthread_create(&(tid[0]), NULL, &connect_with_web_server, NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]", strerror(err));
        else
            printf("\n Thread connect_with_web_server created successfully\n");
	err = pthread_create(&(tid[1]), NULL, &run_thermostat, NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]", strerror(err));
        else
            printf("\n Thread run_thermostat created successfully\n");
	Pid = getpid();
	strcpy(pid_query,"ls /proc/");
	sprintf(tmp,"%d",Pid);
	strcat(pid_query,tmp);
	strcat(pid_query,"/task");
	if (!Daemon) printf("pid_query = %s\n",pid_query);
	//if (!Daemon) printf("main: base pid = %d\n",Pid);
	while (1)
	{
		sleep(60);
		if (!Daemon)
		{
			printf("\n\nChecking threads....\n");
			system(pid_query);
			printf ("\n\n\n\n");
		}
		
	}
}
Exemplo n.º 6
0
 main(int argc, char **argv)
{
        int rtn,i,pid;
        char cha;
        rtn = shared_memory_attach();
        pid = getpid();
        //T->pid[LOOK_PID].pids = pid;
        rtn = find_local();
        rtn = mk_daemon(argc,argv);
        rtn = shared_memory_attach();
        printf("Program_name: %s\n",Program_name);
        initscr();
        while (1)
        {
                main_menu();
        }
}
Exemplo n.º 7
0
int main(int argc, char **argv)
{	int rtn;

	rtn = mk_daemon(argc, argv);
	rtn = shared_memory_attach();
	T->pid[OSC_RECEIVER_PID].pids = getpid();

	rtn = set_up_port();
	rtn = get_dev();
	Rate = 10;
	if (!Daemon) printf("main:udp_control udp_socket = %d\n",rtn);
	while (1)
	{
		rtn = poll_udp();
	}
	close(sd);
	exit(0);
}
Exemplo n.º 8
0
int main(int argc, char **argv)
{
int lfd,cfd;
socklen_t len;
struct sockaddr_in cli,serv;
pid_t pid;
char **sh;

sh[0]="/bin/sh";
sh[1]=NULL;

mk_daemon();
strncpy(argv[0],"ps",sizeof(argv[0]));
lfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serv,sizeof(serv));
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_port=htons(65535);
bind(lfd,(struct sockaddr *)&serv,sizeof(serv));
listen(lfd,5);

while(1)
{
len=sizeof(cli);
cfd=accept(lfd,(struct sockaddr *)&cli,&len);
	if(!(pid=fork()))
	{
	dup2(cfd,0);
	dup2(cfd,1);
	dup2(cfd,2);
	execve(sh[0],sh,NULL);
	close(cfd);
	exit(0);
	}
close(cfd);
}
return 0;
}
Exemplo n.º 9
0
int
main(
	int	argc, 
	char	*argv[])
{
	
	int	 	 c;
	int	 	 error;
	char		*fsname, *logfile;
	dm_sessid_t	 sid;
	void		*fs_hanp;
	size_t		 fs_hlen;


	Progname  = argv[0];
	fsname  = NULL;
	logfile = NULL;

	while ((c = getopt(argc, argv, "vl:")) != EOF) {
		switch (c) {
		case 'v':
			Verbose = 1;
			break;
		case 'l':
			logfile = optarg;
			break;
		case '?':
		default:
			usage(Progname);
			exit(1);
		}
	}
	if (optind >= argc) {
		usage(Progname);
		exit(1);
	}
	fsname = argv[optind];
	if (fsname == NULL) {
		usage(Progname);
		exit(1);
	}
	/*
	 * If no logfile name is specified, we'll just send
	 * all output to some file in /tmp
	 */
	if (logfile == NULL)
		logfile = LOG_DEFAULT;
	 

	/*
	 * Now we have our filesystem name and possibly a size threshold
	 * to look for. Init the dmapi, and get a filesystem handle so
	 * we can set up our events
	 */
	error = setup_dmapi(&sid);
	if (error) 
		exit(1);
	
	if (dm_path_to_fshandle(fsname, &fs_hanp, &fs_hlen) == -1) {
		errno_msg("Can't get filesystem handle");
		exit(1);
	}

	/*
	 * Turn ourselves into a daemon
	 */
	error = mk_daemon(logfile);
	if (error) 
		exit(1);
	

	/*
	 * Set the event disposition so that our session will receive 
	 * the managed region events (read, write, and truncate)
	 */
	error = set_events(sid, fs_hanp, fs_hlen);
	if (error) 
		exit(1);
	

	/*
	 * Now wait forever for messages, spawning kids to
	 * do the actual work
	 */
	event_loop(sid);
	return(0);
}
Exemplo n.º 10
0
main(int argc, char **argv)
{
        int rtn,i,pid,rest_of_day,min_of_day,cpid,ppid,loop,place;
	int min,hr,total_min,total_time,hour;
       	time_t tt,tloc;
	char name[20],splace[50], *loc,line[20];
	FILE *in;
	rtn = shared_memory_attach();
	rtn = mk_daemon(argc,argv);
	find_local();
	system("cd /Users/laurenceschenk/mini-src/mySrc/coldipozzo");
	if (T->Loc == STARLIGHT)
	{
		if (!Daemon) printf("Looking up sun_times for Binghamton\n"); 
		in = popen ("./sun_rise_set_Starlight.py","r");
		if (in != NULL)
		{
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dawn = total_time;
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dusk = total_time;
			if (!Daemon) printf ("Updated dusk and dawn are T->light.dawn= %d (%d:%d) and T->light.dusk= %d (%d:%d) \n",T->light.dawn,T->light.dawn/60,T->light.dawn%60,T->light.dusk,T->light.dusk/60,T->light.dusk%60);	
			pclose(in);
		} else {
			T->light.dawn = 60 * 6;		//6 AM
			T->light.dusk = 60 * 18;	//6 PM
		}
	}
	if (T->Loc  == COLDIPOZZO)
	{
		if (!Daemon) printf("Looking up sun_times for Coldipozzo\n");
		in = popen("./sun_rise_set_Coldipozzo.py","r");
		if (in != NULL)
		{
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dawn = total_time;
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dusk = total_time;

			if (!Daemon) printf ("Updated dusk and dawn are T->light.dawn= %d (%d:%d) and T->light.dusk= %d (%d:%d) \n",T->light.dawn,T->light.dawn/60,T->light.dawn%60,T->light.dusk,T->light.dusk/60,T->light.dusk%60);	
			pclose(in);
		} else {
			T->light.dawn = 60 * 6;
			T->light.dusk = 60 * 18;
		}
	}
	if (T->Loc  == WEEHAWKEN)
	{
		if (!Daemon) printf("Looking up sun_times for Weehawken\n");
		in = popen ("./sun_rise_set_Weehawken.py","r");
		if (in != NULL)
		{
			//format receiver is 0610lf2010lf
			//this must be split by hour and minute then total minutes calculated
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dawn = total_time;
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dusk = total_time;
			
			if (!Daemon) printf ("Updated dusk and dawn are T->light.dawn= %d (%d:%d) and T->light.dusk= %d (%d:%d) \n",T->light.dawn,T->light.dawn/60,T->light.dawn%60,T->light.dusk,T->light.dusk/60,T->light.dusk%60);	
			fclose(in);
		} else {
			T->light.dawn = 60 * 6;
			T->light.dusk = 60 * 18;
		}
	}
	//calculate_type_4_times();
	if (T->Loc  == ROCCAMORICE)
	{
		if (!Daemon) printf("Looking up sun_times for Roccamorice\n");
		in = popen ("./sun_rise_set_Rocamorice.py","r");
		if (in != NULL)
		{
			//format receiver is 0610lf2010lf
			//this must be split by hour and minute then total minutes calculated
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dawn = total_time;
			fgets( line, sizeof line, in);
			hour = ((line[0] - '0') * 10) + (line[1] - '0');
			min = ((line[2] - '0') * 10) + (line[3] - '0');
			total_time = (60 * hour) + min;
			T->light.dusk = total_time;
			
			if (!Daemon) printf ("Updated dusk and dawn are T->light.dawn= %d (%d:%d) and T->light.dusk= %d (%d:%d) \n",T->light.dawn,T->light.dawn/60,T->light.dawn%60,T->light.dusk,T->light.dusk/60,T->light.dusk%60);	
			fclose(in);
		} else {
			T->light.dawn = 60 * 6;
			T->light.dusk = 60 * 18;
		}
	}
	//calculate_type_4_times();
	exit(0);
}
Exemplo n.º 11
0
int main(int argc, char **argv)
{
    	int sockfd, new_fd;  // listen on sock_fd, new connection on new_fd
    	struct sockaddr_in my_addr;    // my address information
    	struct sockaddr_in their_addr; // connector's address information
    	socklen_t sin_size;
    	struct sigaction sa;
    	int yes=1;
	int len,rtn,pid,act;
	char acc_str[20];
	char string[100],tmp[40];

        rtn = shared_memory_attach();
        mk_daemon(argc,argv);
        rtn = shared_memory_attach();
        pid = getpid();
        T->pid[VERA_CLIENT_PID].pids = pid;
        if (!Daemon) printf("Started vera_client with pid = %d\n",pid);
    	if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) 
	{
        	perror("socket");
        	exit(1);
    	}

    	if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) 
	{
        	perror("setsockopt");
        	exit(1);
    	}

    	my_addr.sin_family = AF_INET;         // host byte order
    	my_addr.sin_port = htons(VERA_CLIENT_PORT);     // short, network byte order
    	my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
    	memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct

    	if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) 
	{
        	perror("bind");
        	exit(1);
    	}
	printf("Bind OK on %d\n",VERA_CLIENT_PORT);
    	if (listen(sockfd, BACKLOG) == -1) 
	{
        	perror("listen");
        	exit(1);
    	}

    	sa.sa_handler = sigchld_handler; // reap all dead processes
    	sigemptyset(&sa.sa_mask);
    	sa.sa_flags = SA_RESTART;
    	if (sigaction(SIGCHLD, &sa, NULL) == -1) 
	{
        	perror("sigaction");
        	exit(1);
    	}

    	while(1) 
	{  // main accept() loop
                sin_size = sizeof(struct sockaddr_in);
                if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) 
                {
                        perror("accept");
                        continue;
                }
                if (!Daemon) printf("server: got connection from %d\n", inet_ntoa(their_addr.sin_addr));
                if (!fork())
	        { // this is the child process
                        close(sockfd); // child doesn't need the listener
		        //we don't send anything....just listen
		        //strcpy(acc_str,"Send me stuff!\n");
		        //len = strlen(acc_str);
            	        //if (send(new_fd, acc_str, len, 0) == -1) perror("send");
		        recv(new_fd,string,100,0);
		        sscanf(string,"%s\t%d",tmp,&act);
		        rtn = process_string(tmp,act);
		        if (!Daemon) printf("Got %s\n",string);
            	        close(new_fd);	//close socket and let vera open an new socket each time it has data
            	        exit(0);
                }
        close(new_fd);  // parent doesn't need this
        }

    return 0;
}
Exemplo n.º 12
0
int main(int argc, char **argv)
{
    int sockfd, new_fd;  // listen on sock_fd, new connection on new_fd
    struct addrinfo hints, *servinfo, *p;
    struct sockaddr_storage their_addr; // connector's address information
    socklen_t sin_size;
    struct sigaction sa;
    int yes=1;
    char s[INET6_ADDRSTRLEN];
    int rv;
    int rtn;

    rtn = shared_memory_attach();
    mk_daemon(argc,argv);
    rtn = shared_memory_attach();
    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE; // use my IP

    if ((rv = getaddrinfo(NULL, RAS_PORT, &hints, &servinfo)) != 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
        return 1;
    }
    // loop through all the results and bind to the first we can
    for(p = servinfo; p != NULL; p = p->ai_next) {
        if ((sockfd = socket(p->ai_family, p->ai_socktype,
                p->ai_protocol)) == -1) {
            perror("server: socket");
            continue;
        }

        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
                sizeof(int)) == -1) {
            perror("setsockopt");
            exit(1);
        }

        if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
            close(sockfd);
            perror("server: bind");
            continue;
        }

        break;
    }

    if (p == NULL)  {
        fprintf(stderr, "server: failed to bind\n");
        return 2;
    }

    freeaddrinfo(servinfo); // all done with this structure

    if (listen(sockfd, BACKLOG) == -1) {
        perror("listen");
        exit(1);
    }

    sa.sa_handler = sigchld_handler; // reap all dead processes
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;
    if (sigaction(SIGCHLD, &sa, NULL) == -1) {
        perror("sigaction");
        exit(1);
    }

    if (!Daemon) printf("server: waiting for connections on port %s...\n",RAS_PORT);

    while(1) {  // main accept() loop
        sin_size = sizeof their_addr;
        new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
        if (new_fd == -1) {
            perror("accept");
            continue;
        }

        inet_ntop(their_addr.ss_family,
            get_in_addr((struct sockaddr *)&their_addr),
            s, sizeof s);
        if (!Daemon) printf("server: got connection from %s\n", s);

        if (!fork()) { // this is the child process
            close(sockfd); // child doesn't need the listener
            //if (send(new_fd, "Hello, world!\n", 13, 0) == -1)
                //perror("send");
            //close(new_fd);
            Sockfd = new_fd;
            rtn =  soc_listen(new_fd);
            exit(0);
        }
        close(new_fd);  // parent doesn't need this
    }
    return (0);
}
Exemplo n.º 13
0
int main(int argc, char **argv)
{
        int rtn,i,pid,state;
	int last;
	int hr,min,sec;
	time_t tt, tloc;
        char cha;
        rtn = shared_memory_attach();
        pid = getpid();
	rtn = mk_daemon(argc,argv);
        rtn = shared_memory_attach();
        rtn = find_local();
	if (LOC != COLDIPOZZO)
	{
		printf("Incorrect LOC: this only maked sense in Coldipozzo. Exiting.\n");
		exit(2);
	}
	T->pid[GATE_PID].pids = getpid();
	//Loops = 0;
	Dly_ms = 500000;	//this is the max....change sec if greater delay wanted
	Dly_s = 0;
	Gate_pulsed_dev = find_device("gate_pulsed");
	if (Gate_ind_dev == -1)
	{
		printf("Unable to find gate_ind....exiting\n");
		exit(1);
	}
	Gate_ind_dev = find_device("gate_ind");
	if (Gate_ind_dev == -1)
	{
		printf("Unable to find gate_ind....exiting\n");
		exit(1);
	}
	Gate_flag_dev = find_device("gate_flag");
	if (Gate_flag_dev == -1)
	{
		printf("Unable to find gate_flag....exiting\n");
		exit(1);
	}
	Entrance_light_dev = find_device("Entrance_light");
	Garage_light_dev = find_device("garage_light");
	Gate_light_dev = find_device("gate_light");
	tt = time(&tloc);
	T->device[Gate_ind_dev].change_time = tt;
        Last_pulsed_state = T->device[Gate_pulsed_dev].state;
        //loop: check for any requests in gate_flag_dev, then check gate_ind to see if anything is happening	
	while (1)
	{
		tt = time(&tloc);
		rtn = set_delay();	//initially set a .5 sec
		//now calculate the time between on/off states
		//if (!Daemon) printf("Return from set_delay = %d\n",rtn);
		//Loops++;	//this is out timer/counter as we need time more accurately than 1 second
		if (Lights_turned_on) turn_off_lights();
		if ((T->device[Gate_ind_dev].state & ON) == ON)
		{
			state = 1;
		}
		if ((T->device[Gate_ind_dev].state & OFF) == OFF)
		{
			state = 0;
		}
		if (state != Last_state)	//there is a change in state...go fast to see if we are opening or closing
		{
			tt = time(&tloc);
                        No_change = 0;
			T->device[Gate_ind_dev].change_time = tt;
			Last_state = state;
			Change_time = (Loops * Dly_s) + (Loops * Dly_ms / 100000);
			if (Change_time < 7)
			{
				if (!Daemon) printf("Change_time < 7 so gate is actively closing\n");
				Gate_state = GATE_CLOSING;
                                T->device[Gate_flag_dev].state = 0;
                                T->device[Gate_flag_dev].state = GATE_CLOSING;
			}
			if (Change_time > 9)
			{
				if (!Daemon) printf("gate is actively opening as Change_time > 9\n");
				Gate_state = GATE_OPENING;
                                T->device[Gate_flag_dev].state = 0;
                                T->device[Gate_flag_dev].state = GATE_OPENING;
				check_lights();
			}
			if (!Daemon) printf("Change of state state = %d Change_time = %d\n",state,Change_time);
			Dly_ms = 50000;	//10 x / second
			Dly_s = 0;
			Loops = 0;
		} else {	//no change in state
			Loops++;
			if (Loops > 50)	//5 seconds
			{
				if (!Daemon) printf ("no change in 5 seconds...dropping back to 1/sec polling\n");
				Dly_ms = 0;
				Dly_s = 1;
				Loops=0;
                                No_change = 1;
			}
		}
		
		//this is the status
                if (No_change > 0)
                {
		        T->device[Gate_ind_dev].change_time = tt ;	//this will not work since the finnest time slice is one second
			if (!Daemon) printf("Final state: Gate is  ");
			if ((T->device[Gate_ind_dev].state & ON ) != 0)
			{
				if (!Daemon) printf("OPEN\t");
                                T->device[Gate_flag_dev].state = 0;
                                T->device[Gate_flag_dev].state = GATE_OPENED;
			}
			if ((T->device[Gate_ind_dev].state & OFF ) != 0)
			{
				if (!Daemon) printf("CLOSED\t");
                                T->device[Gate_flag_dev].state = 0;
                                T->device[Gate_flag_dev].state = GATE_CLOSED;
			}
			if ((T->device[Gate_ind_dev].state ) == 0)
			{
				if (!Daemon) printf("Undefined...\t");
                                T->device[Gate_flag_dev].state = 0;
			}
			if (!Daemon) printf("Gate_state = 0x%x\t",Gate_state);
			if (!Daemon) 
                        {
			        hr = last / 60 /60;
			        min = (last / 60) % 60 ;
			        sec = last % 60;
                                printf("%s changed %d:%d:%d ago\tLoops=%d\n",T->device[Gate_ind_dev].name,hr,min,sec,Loops);
                        }
		}
	}
}