Пример #1
0
void read_callback(int read_success)
{
	if(read_success) {
		//nunchuk_print_data(&nun);
		int x = nun.X-128;
		int y = nun.Y-128;
		if(abs(x) < 15) x = 0;
		if(abs(y) < 15) y = 0;
		//x = (int)((float)x/7.5f);
		//y = (int)((float)y/7.5f);
		send_rel_mouse(x, -y);
		if(nun.C && !last_nun.C) {
			send_key_press(BTN_LEFT);
		}
		if(!nun.C && last_nun.C) {
			send_key_release(BTN_LEFT);
		}
		if(nun.Z && !last_nun.Z) {
			send_key_press(BTN_RIGHT);
		}
		if(!nun.Z && last_nun.Z) {
			send_key_release(BTN_RIGHT);
		}
		send_report();
		last_nun = nun;

    if (y != 0 || x != 0) {
      double r = x*x + y*y, p = atan2(y, x) * 4 / M_PI - 0.5;
      const char *d = "RF";
      if (p > -4) d = "XR";
      if (p > -3) d = "RR";
      if (p > -2) d = "RX";
      if (p > -1) d = "FR";
      if (p >  0) d = "FX";
      if (p >  1) d = "FF";
      if (p >  2) d = "XF";
      if (p >  3) d = "RF";
      if (r > 6400) {
        lirc_send(d);
        return;
      }
    }
    lirc_send(brake);
	}
  else
    lirc_send(NULL);
}
Пример #2
0
/*
 * 执行快捷键指令
 */
void exec_cmd_via_keys(int *keys)
{
	int *tmp_key = keys;
	Display *disp = NULL;

	setlocale(LC_ALL, "");

	if ( !(disp = XOpenDisplay(NULL)) ) {
		sys_err("Cannot open display...\n");
		return ;
	}
	sys_err("create display ok!\n");
	
	//activate_win();
	match_wid = get_active_window();
	if ( match_wid == (Window)0 ) {
		sys_err("match wid failed...\n");
		XCloseDisplay(disp);
		return;
	}

	/* 设置指定窗口为焦点 */
	XSetInputFocus(disp, match_wid, RevertToParent, CurrentTime);
	XFlush(disp);
	while ( XPending(disp) ) {}

	sys_err("set keys pressed...\n");
	for (; *tmp_key != 0; tmp_key++ ) {
		send_key_press( disp, match_wid, *tmp_key  );
	}

	//usleep(500);

	sys_err("set keys release...\n");
	tmp_key = keys;
	for (; *tmp_key != 0; tmp_key++ ) {
		send_key_release( disp, match_wid, *tmp_key );
	}

	XCloseDisplay(disp);
	match_wid = (Window)0;
}