예제 #1
0
파일: dntdiag.cpp 프로젝트: rockyx/DNT.Diag
int32_t set_signal(int fd, MonoSerialSignal signal, boolean value) {
#ifdef TOMIC_DEVICE_V1

	if (signal == Dtr)
	{
		if (!value)
			return serial_command("pullup");
		else
			return serial_command("pulldown");
	}
#endif

	int signals, expected, activated;

	expected = get_signal_code(signal);
	if (ioctl(fd, TIOCMGET, &signals) == -1)
		return -1;

	activated = (signals & expected) != 0;
	if (activated == value) /* Already set */
		return 1;

	if (value)
		signals |= expected;
	else
		signals &= ~expected;

	if (ioctl(fd, TIOCMSET, &signals) == -1)
		return -1;

	return 1;
}
예제 #2
0
int controller_set(struct serialsosurce *ss, int id, int status)
{
	struct serialcommand sc;
	
	switch(status) {
	case 0:
		getWriteCommandFrame(sc.buf, &sc.sz, id, 1, "0000");
		break;
	case 1:
		getWriteCommandFrame(sc.buf, &sc.sz, id, 1, "0001");
		break;
	default:
		fprintf(stderr, "device status number error\n");
		return -1;
	}	

	int fd[2];
	pipe(fd);

	sc.cxt = (void *)fd[1];	
	sc.cb = _cb_async;
	serial_command(ss, &sc);
	
	char buf[255];
	int sz;
	int ret; /*select return value*/
	struct timeval tv;
	fd_set readset;

	FD_ZERO(&readset);
	FD_SET(fd[0],&readset);
	tv.tv_sec = 2;
	tv.tv_usec = 0;
	
	if((ret = select((fd[0]+1),&readset,NULL,NULL,&tv)) < 0){
		printf("select error\n");
		return -1;
	}else if(ret == 0){
		printf("filedes not ready\n");
		return -1;
	} 

	sz = read(fd[0], buf, 255);
	int i;
	for (i = 0; i < sz; i++) {
		printf("%02x ", buf[i]);
	}

	printf("\n");
	close(fd[0]);
	close(fd[1]);

	if (buf[0] == 0x06) {
		return 0;
	} else {
		return -1;
	}	
} 
예제 #3
0
int controller_get(struct serialsosurce *ss, int id, int *status)
{
	struct serialcommand sc;
	getReadCommandFrame(sc.buf, &sc.sz, id, 1);

	int fd[2];
	pipe(fd);

	sc.cxt = (void *)fd[1];	
	sc.cb = _cb_async;
	serial_command(ss, &sc);
	
	char buf[255];
	int  sz;
	int  ret; /*select return*/
	struct timeval tv;
	fd_set readset;
	
	tv.tv_sec = 2;
	tv.tv_usec = 0;
	FD_ZERO(&readset);
	FD_SET(fd[0],&readset);/*let fd[0] seted in readset*/
	if((ret = select(( fd[0]+1),&readset,NULL,NULL,&tv))< 0){
		printf("select error\n");
		return -1;
	}else if(ret == 0){
		printf("filedes are not ready for read within 5s\n");
		return -1;
	}
	sz = read(fd[0], buf, 255);
	
	int i;
	for (i = 0; i <  sz; i++) {
		printf("%02x ", buf[i]);
	}

	printf("\n");
	close(fd[0]);
	close(fd[1]);

//	printf("buf[2] = %x\n", buf[2]);
	if (buf[2] == 0x31) {
		*status = 1;
	} else if (buf[2] == 0x30) {
		*status = 0;
	} else {
		return -1;
	}

	return 0;
}
예제 #4
0
int sensor_get(struct serialsosurce *ss, int id, int *data)
{
	struct serialcommand sc;
	getReadCommandFrame(sc.buf, &sc.sz, id, 1);

	int fd[2];
	pipe(fd);

	sc.cxt = (void *)fd[1];	
	sc.cb = _cb_async;
	serial_command(ss, &sc);
	
	char buf[255];
	int sz;
	int ret; /*select return value*/
	struct timeval tv;
	fd_set readset;

	FD_ZERO(&readset);
	FD_SET(fd[0],&readset);
	tv.tv_sec = 2;
	tv.tv_usec = 0;
	
	if((ret = select((fd[0]+1),&readset,NULL,NULL,&tv)) < 0){
		printf("select error\n");
		return -1;
	}else if(ret == 0){
		printf("filedes not ready\n");
		return -1;
	} 

	sz = read(fd[0], buf, 255);
//	int i;
//	for (i = 0; i < sz; i++) {
//		printf("%02x ", buf[i]);
//	}
//
//	printf("\n");
	close(fd[0]);
	close(fd[1]);

	printf("buf:%c\n",buf[1]);
	int x;
	buf4_to_integer(&buf[1], &x);
	*data = x;

	return 0;	
}