コード例 #1
0
ファイル: app2.c プロジェクト: barbieri/barbieri-playground
static int
scroll(void *data)
{
    app_t *app = data;
    struct timeval dif;
    unsigned long current_ms;
    double amount;
    int y;

    gettimeofday(&app->scroll.last, NULL);
    timersub(&app->scroll.last, &app->scroll.start, &dif);

    current_ms = tv2ms(&dif);

    if (current_ms >= app->scroll.delay_ms) {
        scroll_ended(app);
        app->scroll.anim = NULL;
        return 0;
    }

    amount = app->scroll.dir * ((double)current_ms / app->scroll.delay_ms);
    y = app->item_height * amount;
    evas_object_move(app->e_box, app->box_x, app->box_y + y);

    return 1;
}
コード例 #2
0
ファイル: gp_layer.c プロジェクト: eusafe/libgate
// TODO  need esc after crc8_xor 
int gp_send(cmd_send_t* cmd) {
	size_t cmd_len=cmd->data_len;

//	gp_cfg.gp_timeout=cmd->set_timeout;

	evutil_timerclear(&gp_cfg.timeout);
//	gp_cfg.timeout.tv_usec = cmd->set_timeout * 1000;
	gp_cfg.timeout.tv_usec = gp_cfg.gp_timeout * 1000;
	gp_cfg.polling = cmd->polling;
//	gp_cfg.last_target = cmd->target_n;
	
	send_mess.is_expected=1;
	send_mess.bank = cmd->bank;
	send_mess.target = cmd->target_n;
	
	if( cmd->ev_handler != 0 ) {
		send_mess.ev_handler=cmd->ev_handler;
	} else if( cmd->queue != AD_Q_SHORT ) { 
		send_mess.ev_handler=0; // deleting  handler 
	}
	
	memset(&send_mess.buf, 0, sizeof(send_mess.buf));
	send_mess.fl_begin = GP_INIT;
	send_mess.id_ctrl = GP_CTRL;
	send_mess.dev = send_mess.dst = cmd->dst;
	send_mess.cmd_n = cmd->cmd_n;
	cmd->cmd_buff[cmd_len]=crc8_xor(&cmd->cmd_n, cmd_len + 1);
//	fprintf(stderr, "Buffer size: %d bytes, crc8: 0x%02x\n", cmd_len, cmd->cmd_buff[cmd_len]);
	size_t len_esc=memcpy_esc((uint8_t*)&send_mess.dst, &cmd->dst,cmd_len+3)+3;
//	fprintf(stderr, "Final size: %d bytes\n", len_esc);
	send_mess.buf[len_esc-1]=GP_END;
// saved len and fd	
	send_mess.len=len_esc;
	
	struct timeval tv;
 	gettimeofday(&tv,NULL);
// 	devices[send_mess.dev].last_sent=send_mess.sent_time=(tv.tv_sec%100000)* 1000 + tv.tv_usec/1000;
 	devices[send_mess.dev].last_sent=send_mess.sent_time=tv2ms(tv);

	return gp_resend();
}
コード例 #3
0
unsigned long int gettimeofday_ms() 
{
    struct timeval curr;
    gettimeofday(&curr, NULL);
    return tv2ms(&curr);
}
コード例 #4
0
uint64_t gettimeofday_ms() {
    struct timeval curr;
    gettimeofday(&curr, NULL);
    return tv2ms(&curr);
}
コード例 #5
0
ファイル: gp_layer.c プロジェクト: eusafe/libgate
int gp_send_idle() {
	static int gp_dst=0;
	int activ=0;
	
	do {
		gp_dst++;
		if( gp_dst > gp_cfg.max_dev_n ) { gp_dst=0; return 0; }
//	fprintf(stderr, "Check gp_send_idle for %d (%d)\n",gp_dst,devices[gp_dst].timeout_count );
		if(devices[gp_dst].timeout_count > gp_cfg.max_timeout_count) {
			if( devices[gp_dst].activ > 0)
//			if ( gp_dst == 5  ) 
				{
				fprintf(stderr, "Disabled dev %d (%d)\n", gp_dst, devices[gp_dst].timeout_count);
				syslog(LOG_ERR, "Disabled dev %d (%d)\n", gp_dst, devices[gp_dst].timeout_count);
				}
			devices[gp_dst].activ=activ=0;
			continue;
		}
		activ=1;
	} while( activ == 0 );
//	if ( gp_dst == 5  ) 
//	fprintf(stderr, "Run gp_send_idle for %d (%d)\n",gp_dst,devices[gp_dst].timeout_count );
	
/*	cmd_send_t z = {
		.cmd_n = 0x06,
		.set_timeout = 50,
		.polling = 1,
		.data_len = 0
	};*/
	
//return 0;
//	return ad_get_cid(AD_Q_SHORT, gp_dst, &cb_get_poll_result);
	cmd_send_t z = {
		.queue = AD_Q_SHORT,
		.ev_handler = &cb_get_poll_result,
		.target_n = AD_TARGET_GET_CID,
		.cmd_n = 0x04,
		.set_timeout = 150,
		.polling = 1,
		.data_len = 5,
		.cmd_buff = { 0x00, 0xD0, 6, 0x00, 0x0C }
	};
	
	z.dst=gp_dst;
	return gp_send(&z);
}


#pragma pack(push,1)
#pragma pack(pop)

//void gp_receiv(uint8_t* in, int nread) {
// short event=4;
int mydev=-1;

int err=0;
void gp_receiv(int fd, short event, void *arg) {
	int nread=0;
//	int last=0;
	struct timeval tv;
 	
 	gettimeofday(&tv,NULL);
 	uint32_t current_time=tv2ms(tv);
 	uint32_t expect_time=tv2ms(gp_cfg.timeout);
 	uint32_t delta = current_time -  send_mess.sent_time;
 	uint32_t delta2 = current_time -  receiv_mess.last_read;
/*	if (send_mess.dev == 1 ) 
	fprintf(stderr, "Got  event (%d): 0x%X, %u.%06u (%u ms), sent time %u ms, current timeout: %u ms, delta: %u ms (%u ms)\n",
		send_mess.dev,
		event,
		tv.tv_sec,tv.tv_usec,
		current_time,
		send_mess.sent_time,
		expect_time,
		delta, delta2
		);*/
//	char buf[PORT_READ_BUF_LENGTH];
	

//	memset(buf, 0, sizeof(buf));
				
//	if ( event_del(&send_mess.ev_timeout) < 0) syslog(LOG_ERR, "event_del (send_mess.ev_timeout): %m");
//	event_set(&evsocket, sockfd, EV_READ|EV_PERSIST, socket_read, (void*)&evsocket);
//	if ( event_del(&gp_cfg.evport) < 0) syslog(LOG_ERR, "event_del (send_mess.ev_timeout): %m");

/*	if( (event & EV_WRITE) != 0 ) {
//		gp_put_cmd();
		return;
	}*/
/*	evutil_timerclear(&gp_cfg.timeout);
	gp_cfg.timeout.tv_usec = gp_cfg.gp_timeout * 1000;
 	if ( event_add(&gp_cfg.evport, &gp_cfg.timeout) < 0) syslog(LOG_ERR, "event_add.send_mess.ev_timeout setup: %m");*/
	
	if( (event & EV_READ) == 0 ) {
		gp_reconnect(0);
// HACK - we check real timeout, not timer
//		if( current_time >= expect_time ) {	 	
//				} else if(gp_cfg.timeout.tv_sec > 0) {
/*		if ( send_mess.dev == 5 ) 
		fprintf(stderr, "dev=%d,  delta by sent = %d, delta by read = %d, count = %d\n",
			send_mess.dev,delta, delta2, devices[send_mess.dev].timeout_count );*/
	 	if( delta >=  gp_cfg.gp_timeout) {
			if( send_mess.is_expected > 0 ) {
				send_mess.is_expected=0;
				devices[send_mess.dev].timeout_count++;
//				if ( send_mess.dev == 1 ) fprintf(stderr, "inc %d dev=%d\n", devices[send_mess.dev].timeout_count, send_mess.dev);
				if( gp_cfg.polling == 0 ) {
//				if( send_mess.dev == 1 ) {
//					send_mess.target=0;
					uint32_t delta3=current_time - devices[send_mess.dev].last_read;
					fprintf(stderr, "Timeout (%d) for read for %d (cmd=%d, delta=%u)\n", devices[send_mess.dev].timeout_count,
						send_mess.dev, send_mess.target, delta3);
					syslog(LOG_ERR, "Timeout (%d) for read for %d (cmd=%d, delta=%u)",   devices[send_mess.dev].timeout_count,
						send_mess.dev, send_mess.target, delta3);
				}
			}
		}	 	
//		if( current_time >= expect_time + gp_cfg.gp_timeout) {
//	 	if( current_time - receiv_mess.last_read >  gp_cfg.gp_timeout) {
	 	if( delta >=  gp_cfg.gp_timeout) {
// /*	 		if ( send_mess.dev == 5 ) 
// 				fprintf(stderr, "Runed gp_put_cmd!\n");*/
			if( gp_put_cmd() > 0 ||  gp_send_idle() > 0) return;
	 	}
		evutil_timerclear(&gp_cfg.timeout);
		gp_cfg.timeout.tv_usec = gp_cfg.gp_timeout * 1000;
		if ( event_add(&gp_cfg.evport, &gp_cfg.timeout) < 0) syslog(LOG_ERR, "event_add.send_mess.ev_timeout setup: %m");
		return;
	}

// HACK Read (EV_READ)
	evutil_timerclear(&gp_cfg.timeout);
	gp_cfg.timeout.tv_usec = gp_cfg.gp_timeout * 1000;
 	if ( event_add(&gp_cfg.evport, &gp_cfg.timeout) < 0) syslog(LOG_ERR, "event_add.send_mess.ev_timeout setup: %m");

// 	fprintf(stderr, "Set last read %lu \n",current_time);
	devices[send_mess.dev].last_read=receiv_mess.last_read=current_time;
//	gp_cfg.last_dev=send_mess.dev;
	send_mess.is_expected=0;
// TODO after check crc
	if( gp_cfg.polling == 1 && devices[send_mess.dev].activ==0) {
		syslog(LOG_ERR,"Found dev: '%d'\n",send_mess.dev);
	}
	devices[send_mess.dev].activ=1; 
	devices[send_mess.dev].timeout_count=0;
	if (devices[send_mess.dev].is_inited == 0) {
		gp_dev_init(send_mess.dev);
	}
// HACK	
//	mydev=send_mess.dst;
// First chunk of data. 
	if( receiv_buf_p == 0 ) {
		receiv_buf_p = receiv_mess.buf;
		receiv_mess.len=0;
	}
	nread = read(fd, receiv_buf_p, GP_PORT_READ_BUF_LENGTH - 1 - receiv_mess.len);
	
	
//	if( debug >= 5 || (debug >= 4 && gp_cfg.polling == 0) ||  receiv_mess.src != 7) {
	if( debug >= 9 || (debug >= 8 && gp_cfg.polling == 0) ) {
		print_buff("port received: ", receiv_buf_p, nread);
	}
// 	dprint(DL5, "read %d bytes, ev=%x\n", nread, event);
	
	if (nread < 0) { /* EOF */
		syslog(LOG_CRIT, "read: %m");
		gp_close();
		// daemon_exit(1); // never exit on error!
	} else if (nread == 0) {
	 	zprintf(1, "port unexpectedly closed\n");
	 	ad_soft_reset(AD_Q_SHORT,send_mess.dev);
		gp_close();
//		gp_reconnect(0);
//		if(err++  > 10 ) exit(102);
		return;
	} else if (nread > 0) {
		// right trim buffer
		receiv_buf_p[nread] = '\0';
		if( receiv_mess.fl_begin !=  GP_INIT) {
			syslog(LOG_ERR, "Begin flag not found");
			gp_reconnect(0);
//			gp_close();
			return;
		}		
		uint8_t* p=memchr(receiv_buf_p, GP_END,nread);
		if ( p != 0 ) {
			receiv_buf_p=0;
//			*p='\0'; 
			int l = p - &receiv_mess.id_ctrl; // buff. length  for crc		
//	fprintf(stderr, "l = %d bytes\n", l);
//			l = memcpy_unesc(receiv_mess.cmd_buff,receiv_mess.cmd_buff,l);
			l = memcpy_unesc(&receiv_mess.id_ctrl,&receiv_mess.id_ctrl,l);
	
//	fprintf(stderr, "l = %d bytes\n", l);
			if ( crc8_xor(&receiv_mess.id_ctrl,l) > 0 ) {
				int crc=crc8_xor(&receiv_mess.id_ctrl,l-1);
				fprintf(stderr, "crc8 error for %d (cmd=%d, crc=x0%02x) \n", send_mess.dev, send_mess.target, crc);
				syslog(LOG_ERR, "crc8 error for %d (cmd=%d, crc=x0%02x) \n", send_mess.dev, send_mess.target, crc);
				if( debug < 9 ) 
					print_buff("port received (crc error): ", receiv_mess.buf, nread+receiv_mess.len);
//				exit(222);
				return;
			}
// Check error!!!
			if( send_mess.dev !=  receiv_mess.src ) {
				zprintf(2, "device error: got %d, expect %d\n", receiv_mess.src, send_mess.dev);
//				exit(222);				
				return;
			} else {
				receiv_mess.dev=receiv_mess.src;
			}
			if( receiv_mess.cmd_n == GP_REPLY ) {
//				syslog(LOG_ERR, "Got ask(0x%02X) for %d (cmd=%d)\n",receiv_mess.replay, send_mess.dev, send_mess.target);
				if( receiv_mess.replay == GP_REPLY_ACK ) {
					receiv_mess.cmd_n=receiv_mess.was_cmd_n;
//					fprintf(stderr, "Got ACK for (0x%02X) \n", receiv_mess.was_cmd_n);
					process_port_input(PROC_REPLY_ACK);
				} else if ( receiv_mess.replay == GP_REPLY_NACK ) {
					receiv_mess.cmd_n=receiv_mess.was_cmd_n;
					zprintf(2, "Got NACK for (0x%02X) \n", receiv_mess.was_cmd_n);
//					process_port_input(PROC_REPLY_NACK);
				} else {
					receiv_mess.cmd_n=receiv_mess.bad_cmd_n;
					zprintf(2, "Got  EEPROM/RTC error (%d)\n",receiv_mess.replay );
//					process_port_input(PROC_REPLY_EEPROM_ERR);
				}				
			} else {
				receiv_mess.len=l-(3+1);
				if( process_port_input(PROC_REPLY_ACK) > 0 ) return;
			}
		} else {
			receiv_mess.len +=nread;
			receiv_buf_p+=nread;
			return;
		}
//			dprint(DL2, "port recvd: '%.*s'\n", nread, buf);
/*			if(debug >= DL2) {
				char buf2[PORT_READ_BUF_LENGTH];
				char* p=strncpy(buf2,buf,PORT_READ_BUF_LENGTH);
				while( (p=strchr(p,'\r')) > 0 ) *p='$';
				p=buf2;
				while( (p=strchr(buf2,'\n')) >0 ) *p='&';
				dprint(DL2, "port recvd: '%s'\n", buf2);
			}*/
	}
//	fprintf(stderr, "Sending new cmd\n");
	gp_put_cmd();
// 	if ( gp_put_cmd() == 0 && event_add(&gp_cfg.evport, &gp_cfg.timeout) < 0) 
// 		syslog(LOG_ERR, "event_add.send_mess.ev_timeout setup: %m");

// exit(0);	f
// fprintf(stderr, "gp_receiv ok \n");
}