コード例 #1
0
ファイル: tablet-mode.c プロジェクト: cchaowakool/atvx86
int main(void)
{
	int ifd = openfd();
	if (ifd < 0) {
		ALOGE("could not find any tablet mode switch, exiting.");
		return -1;
	}

	sleep(10); //wait some time or otherwise EventHub might not pick up our events correctly!?

	int ufd = open("/dev/uinput", O_WRONLY | O_NDELAY);
	if (ufd >= 0) {
		struct uinput_user_dev ud;
		memset(&ud, 0, sizeof(struct uinput_user_dev));
		strcpy(ud.name, "Android Tablet Lid Switch");
		write(ufd, &ud, sizeof(struct uinput_user_dev));
		ioctl(ufd, UI_SET_EVBIT, EV_SW);
		ioctl(ufd, UI_SET_SWBIT, SW_LID);
		ioctl(ufd, UI_DEV_CREATE, 0);
	} else {
		ALOGE("could not open uinput device: %s", strerror(errno));
		return -1;
	}

	// send initial switch state
	unsigned long sw_state[NBITS(SW_TABLET_MODE+1)];
	memset(sw_state, 0, sizeof(sw_state));
	if (ioctl(ifd, EVIOCGSW(sizeof(sw_state)), sw_state) >= 0) {
		send_switch(ufd, test_bit(SW_TABLET_MODE, sw_state) ? 1 : 0);
	}

	// read events and pass them on modified
	while (1) {
		struct input_event iev;
		size_t res = read(ifd, &iev, sizeof(struct input_event));
		if (res < sizeof(struct input_event)) {
			ALOGW("insufficient input data(%d)? fd=%d", res, ifd);
			continue;
		}
		//LOGV("type=%d scancode=%d value=%d from fd=%d", iev.type, iev.code, iev.value, ifd);
		if (iev.type == EV_SW && iev.code == SW_TABLET_MODE) {
			send_switch(ufd, iev.value);
		}
	}

	return 0;
}
コード例 #2
0
void cam_power_show(void)
{
	if(cams[ctrl_selected_cam].power_state)
	{
		lcd_gotoxy(0,3);
		lcd_putc('>');
		lcd_gotoxy(3,3);
		lcd_putc('<');
		lcd_putc(' ');
		lcd_gotoxy(8,3);
		lcd_putc(' ');
	}
	else
	{
		lcd_gotoxy(0,3);
		lcd_putc(' ');
		lcd_gotoxy(3,3);
		lcd_putc(' ');
		lcd_putc('>');
		lcd_gotoxy(8,3);
		lcd_putc('<');
	}

	if(cams[ctrl_selected_cam].button_state)
	{
		cams[ctrl_selected_cam].button_state=1;
		lcd_gotoxy(10,3);
		lcd_putc('>');
		lcd_gotoxy(14,3);
		lcd_putc('<');

	}
	else
	{
		lcd_gotoxy(10,3);
		lcd_putc(' ');
		lcd_gotoxy(14,3);
		lcd_putc(' ');

	}

	send_switch();
}