コード例 #1
0
ファイル: main.c プロジェクト: maxdubin/SNESDev-RPi
/* checks, if a button on the pad is pressed and sends an event according the button state. */
void processPadBtn(uint16_t buttons, uint16_t mask, uint16_t key, int uinh) {
	if ( (buttons & mask) == mask ) {
		send_key_event(uinh, key, 1);
	} else {
		send_key_event(uinh, key, 0);
	}
}
コード例 #2
0
static void key_handler(enum cpcap_irqs irq, void *data)
{
	struct cpcap_3mm5_data *data_3mm5 = data;

	if ((irq != CPCAP_IRQ_MB2) && (irq != CPCAP_IRQ_UC_PRIMACRO_5))
		return;

	if ((cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_HS, 1) == 1) ||
	    (switch_get_state(&data_3mm5->sdev) != HEADSET_WITH_MIC)) {
		hs_handler(CPCAP_IRQ_HS, data_3mm5);
		return;
	}

	if ((cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_MB2, 0) == 0) ||
	    (cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_PTT, 0) == 0)) {
		send_key_event(data_3mm5, 1);

		/* If macro not available, only short presses are supported */
		if (!cpcap_uc_status(data_3mm5->cpcap, CPCAP_MACRO_5)) {
			send_key_event(data_3mm5, 0);

			/* Attempt to restart the macro for next time. */
			cpcap_uc_start(data_3mm5->cpcap, CPCAP_MACRO_5);
		}
	} else
		send_key_event(data_3mm5, 0);

	cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_MB2);
	cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);
}
コード例 #3
0
ファイル: xtest-gdk.c プロジェクト: pkg-ime/input-pad
static unsigned int
on_window_button_pressed (InputPadGtkWindow    *window,
                          gchar                *str,
                          guint                 type,
                          guint                 keysym,
                          guint                 keycode,
                          guint                 state,
                          gpointer              data)
{
    if (!have_extension (window)) {
        return FALSE;
    }
    if (type == INPUT_PAD_TABLE_TYPE_CHARS) {
        if (keysym > 0) {
            send_key_event (gtk_widget_get_window (GTK_WIDGET (window)), keysym, keycode, state);
            return TRUE;
        } else {
            return FALSE;
        }
    } else if (type == INPUT_PAD_TABLE_TYPE_KEYSYMS) {
        send_key_event (gtk_widget_get_window (GTK_WIDGET (window)), keysym, keycode, state);
        return TRUE;
    }
    return FALSE;
}
コード例 #4
0
/* Setup the uinput device */
int16_t uinput_gpad_open(UINP_GPAD_DEV* const gpad, UINPUT_GPAD_TYPE_E type) {
	int16_t uinp_fd = -1;
	gpad->fd = open("/dev/uinput", O_WRONLY | O_NDELAY);
	if (gpad->fd <= 0) {
		printf("Unable to open /dev/uinput\n");
		return -1;
	}

	struct uinput_user_dev uinp;
	memset(&uinp, 0, sizeof(uinp));
	snprintf(uinp.name, sizeof(uinp.name), "MadCatz PC USB Wired Stick");
	uinp.id.version = 4;
	uinp.id.bustype = BUS_USB;
	uinp.id.product = 1;
	uinp.id.vendor = 1;

	// Setup the uinput device
	ioctl(gpad->fd, UI_SET_EVBIT, EV_KEY);
	ioctl(gpad->fd, UI_SET_EVBIT, EV_REL);

	// gamepad, buttons
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_A);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_B);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_C);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_X);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_Y);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_Z);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_TL);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_TR);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_SELECT);
	ioctl(gpad->fd, UI_SET_KEYBIT, BTN_START);

	// gamepad, directions
	ioctl(gpad->fd, UI_SET_EVBIT, EV_ABS);
	ioctl(gpad->fd, UI_SET_ABSBIT, ABS_X);
	ioctl(gpad->fd, UI_SET_ABSBIT, ABS_Y);
	uinp.absmin[ABS_X] = 0;
	uinp.absmax[ABS_X] = 4;
	uinp.absmin[ABS_Y] = 0;
	uinp.absmax[ABS_Y] = 4;

	/* Create input device into input sub-system */
	write(gpad->fd, &uinp, sizeof(uinp));
	if (ioctl(gpad->fd, UI_DEV_CREATE)) {
		printf("[uinput_gamepad] Unable to create UINPUT device.");
		return -1;
	}

	send_key_event(gpad->fd, ABS_X, 2, EV_ABS);
	send_key_event(gpad->fd, ABS_Y, 2, EV_ABS);

	return uinp_fd;
}
コード例 #5
0
ファイル: main.c プロジェクト: maxdubin/SNESDev-RPi
/* checks the state of the button and sets the two LEDs accordingly */
void checkButton(int uinh) {
  
  	// read the state of the button into a local variable
	uint8_t buttonState = bcm2835_gpio_lev(BUTTONPIN);
  
	// send key if button is pressed:
	if ( buttonState==HIGH ) {
		send_key_event(uinh, KEY_ESC,1);
	} else {
		send_key_event(uinh, KEY_ESC,0);
	}

}
コード例 #6
0
ファイル: gedit.c プロジェクト: TCC-FEI/VC
void file_close(gpointer data) {
    Display* display = (Display*) data;
    GArray* set = key_set_new(2);

    key_set_add(set, XK_Control_L);
    key_set_add(set, XK_W);

    send_key_event(display, set);

    key_set_del(set);
}
コード例 #7
0
ファイル: gedit.c プロジェクト: TCC-FEI/VC
void select_all(gpointer data) {
    Display* display = (Display*) data;
    GArray* set = key_set_new(2);

    key_set_add(set, XK_Control_L);
    key_set_add(set, XK_A);

    send_key_event(display, set);

    key_set_del(set);
}
コード例 #8
0
ファイル: firefox.c プロジェクト: TCC-FEI/VC
void bookmarks(gpointer data){
    Display* display = (Display*) data;
    GArray* set = key_set_new(2);

    key_set_add(set, XK_Control_L);
    key_set_add(set, XK_B);

    send_key_event(display, set);

    key_set_del(set);
}
コード例 #9
0
ファイル: jni_register.c プロジェクト: JensenSung/sharescreen
jint JNIDEFINE(setKeyEvent)(JNIEnv *env, jobject obj, int press, jint code)
{
	LOGD("IN %s\n", __func__);
	send_key_event(code, press);
	/*MsgKey_st key;
	env = env;
	obj = obj;
	LOGD("IN %s, keycode = %d, type = %d\n", __func__, code, press);
	key.type = press? RMT_INPUT_DOWN: RMT_INPUT_UP;
	key.code = code;
	key_input(&key);
	*/
	return 0;
}
コード例 #10
0
do_x(int uinp_fd, long int uid)
{
  unsigned char str[100];
  sprintf(str, "%ld", uid);
  int len = strlen(str);
  int i;
  int key_code;

  for (i = 0; i < len; i++)
  {
    key_code = (int) str[i] - 48;
      printf("%d\n", key_code);
    switch(key_code) {
      case 0:
        send_key_event(uinp_fd, KEY_KP0, 1);
        send_key_event(uinp_fd, KEY_KP0, 0);
        break;
      case 1:
        send_key_event(uinp_fd, KEY_KP1, 1);
        send_key_event(uinp_fd, KEY_KP1, 0);
        break;
      case 2:
        send_key_event(uinp_fd, KEY_KP2, 1);
        send_key_event(uinp_fd, KEY_KP2, 0);
        break;
      case 3:
        send_key_event(uinp_fd, KEY_KP3, 1);
        send_key_event(uinp_fd, KEY_KP3, 0);
        break;
      case 4:
        send_key_event(uinp_fd, KEY_KP4, 1);
        send_key_event(uinp_fd, KEY_KP4, 0);
        break;
      case 5:
        send_key_event(uinp_fd, KEY_KP5, 1);
        send_key_event(uinp_fd, KEY_KP5, 0);
        break;
      case 6:
        send_key_event(uinp_fd, KEY_KP6, 1);
        send_key_event(uinp_fd, KEY_KP6, 0);
        break;
      case 7:
        send_key_event(uinp_fd, KEY_KP7, 1);
        send_key_event(uinp_fd, KEY_KP7, 0);
        break;
      case 8:
        send_key_event(uinp_fd, KEY_KP8, 1);
        send_key_event(uinp_fd, KEY_KP8, 0);
        break;
      case 9:
        send_key_event(uinp_fd, KEY_KP9, 1);
        send_key_event(uinp_fd, KEY_KP9, 0);
        break;
      default:
        printf("%s %d\n", "noooo", key_code);
        break;

    }
  }
      send_key_event(uinp_fd, KEY_ENTER, 1);
      send_key_event(uinp_fd, KEY_ENTER, 0);
}
コード例 #11
0
static void hs_handler(enum cpcap_irqs irq, void *data)
{
	struct cpcap_3mm5_data *data_3mm5 = data;
	int new_state = NO_DEVICE;

	if (irq != CPCAP_IRQ_HS)
		return;

	/* HS sense of 1 means no headset present, 0 means headset attached. */
	if (cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_HS, 1) == 1) {
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_TXI, 0,
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN));
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_RXOA, 0,
				   CPCAP_BIT_ST_HS_CP_EN);
		audio_low_power_set(data_3mm5, &data_3mm5->audio_low_pwr_det);

		cpcap_irq_mask(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_mask(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_HS);

		send_key_event(data_3mm5, 0);

		/* Config mux switch to accy detection. */
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO2, 0,
				CPCAP_BIT_GPIO2DRV);
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO4, 0,
				CPCAP_BIT_GPIO4DRV);
		cpcap_uc_stop(data_3mm5->cpcap, CPCAP_MACRO_5);
	} else {
		/* Config mux switch to pass headset mic. */
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO2, 0,
					CPCAP_BIT_GPIO2DRV);
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO4,
					CPCAP_BIT_GPIO4DRV, CPCAP_BIT_GPIO4DRV);

		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_TXI,
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN),
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN));
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_RXOA,
				   CPCAP_BIT_ST_HS_CP_EN,
				   CPCAP_BIT_ST_HS_CP_EN);
		audio_low_power_clear(data_3mm5, &data_3mm5->audio_low_pwr_det);

		/* Give PTTS time to settle 10ms */
		msleep(11);

		if (cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_PTT, 1) <= 0) {
			/* Headset without mic and MFB is detected. (May also
			 * be a headset with the MFB pressed.) */
			new_state = HEADSET_WITHOUT_MIC;
		} else {
			new_state = HEADSET_WITH_MIC;
			/* Config mux switch to pass headset mic. */
			cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO2, 0,
					CPCAP_BIT_GPIO2DRV);
			cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_GPIO4,
					CPCAP_BIT_GPIO4DRV, CPCAP_BIT_GPIO4DRV);
		}

		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_HS);
		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_uc_start(data_3mm5->cpcap, CPCAP_MACRO_5);
		headset_in_stamp = jiffies;
	}

	switch_set_state(&data_3mm5->sdev, new_state);
	if (data_3mm5->cpcap->h2w_new_state)
		data_3mm5->cpcap->h2w_new_state(new_state);

	dev_info(&data_3mm5->cpcap->spi->dev, "New headset state: %d\n",
		 new_state);
}
コード例 #12
0
static void hs_handler(enum cpcap_irqs irq, void *data)
{
	struct cpcap_3mm5_data *data_3mm5 = data;
	int new_state = NO_DEVICE;

	if (irq != CPCAP_IRQ_HS)
		return;

	/* HS sense of 1 means no headset present, 0 means headset attached. */
	if (cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_HS, 1) == 1) {
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_TXI, 0,
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN));
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_RXOA, 0,
				   CPCAP_BIT_ST_HS_CP_EN);
		audio_low_power_set(data_3mm5, &data_3mm5->audio_low_pwr_det);

		cpcap_irq_mask(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_mask(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_HS);

		send_key_event(data_3mm5, 0);

		data_3mm5->unsupported_headset=0;

		cpcap_uc_stop(data_3mm5->cpcap, CPCAP_BANK_PRIMARY, CPCAP_MACRO_5);
	} else {
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_TXI,
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN),
				   (CPCAP_BIT_MB_ON2 | CPCAP_BIT_PTT_CMP_EN));
		cpcap_regacc_write(data_3mm5->cpcap, CPCAP_REG_RXOA,
				   CPCAP_BIT_ST_HS_CP_EN,
				   CPCAP_BIT_ST_HS_CP_EN);
		audio_low_power_clear(data_3mm5, &data_3mm5->audio_low_pwr_det);

		/* Give PTTS time to settle */
		mdelay(2);

		if (cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_PTT, 1) <= 0) {
			/* Headset without mic and MFB is detected. (May also
			 * be a headset with the MFB pressed.) */
			new_state = HEADSET_WITHOUT_MIC;
		} else {
		 if(cpcap_irq_sense(data_3mm5->cpcap, CPCAP_IRQ_MB2, 1) == 0) {
/*cvk011c: This is an Apple HS  and  its microphone will not work with CPCAP due to HW problem.
 Detect it as  HS without mic to avoid  problems with HS BTN detection and  MIC audio */
                		new_state = HEADSET_WITHOUT_MIC;
				dev_info(&data_3mm5->cpcap->spi->dev, "Unsupported headset detected\n");
				data_3mm5->unsupported_headset=1;
			}else
				new_state = HEADSET_WITH_MIC;
         	}

		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_clear(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_HS);
		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_MB2);
		cpcap_irq_unmask(data_3mm5->cpcap, CPCAP_IRQ_UC_PRIMACRO_5);

		cpcap_uc_start(data_3mm5->cpcap, CPCAP_BANK_PRIMARY, CPCAP_MACRO_5);
	}

	switch_set_state(&data_3mm5->sdev, new_state);
	if (data_3mm5->cpcap->h2w_new_state)
		data_3mm5->cpcap->h2w_new_state(new_state);

	dev_info(&data_3mm5->cpcap->spi->dev, "New headset state: %d\n",
		 new_state);
}