Exemple #1
0
static void g19_raw_event_process_input(struct hid_device *hdev,
					struct gcore_data *gdata,
					u8 *raw_data)
{
	int scancode, value;
	int i, mask;

	raw_data[3] &= 0xBF; /* bit 6 is always on */

	for (i = 0, mask = 0x01; i < 8; i++, mask <<= 1) {
		/* Keys G1 through G8 */
		scancode = i;
		value = raw_data[1] & mask;
		gcore_input_report_key(gdata, scancode, value);

		/* Keys G9 through G12, M1 through MR */
		scancode = i + 8;
		value = raw_data[2] & mask;
		gcore_input_report_key(gdata, scancode, value);

		/* Keys G17 through G22 */
		scancode = i + 16;
		value = raw_data[3] & mask;
		gcore_input_report_key(gdata, scancode, value);
	}

	input_sync(gdata->input_dev);
}
Exemple #2
0
static void g15v2_raw_event_process_input(struct hid_device *hdev,
					struct gcore_data *gdata,
					u8 *raw_data)
{
	struct input_dev *idev = gdata->input_dev;
	int scancode;
	int value;
	int i;
	int mask;

	for (i = 0, mask = 0x01; i < 8; i++, mask <<= 1) {
		scancode = i;
		value = raw_data[1] & mask;
		gcore_input_report_key(gdata, scancode, value);

		scancode = i + 8;
		value = raw_data[2] & mask;
		gcore_input_report_key(gdata, scancode, value);
	}

	input_sync(idev);
}
Exemple #3
0
static void g510_raw_event_process_input(struct hid_device *hdev,
	struct gcore_data *gdata,
	u8 *raw_data)
{
	struct input_dev *idev = gdata->input_dev;
	int scancode;
	int value;
	int i;
	int mask;

	/*
	 * This bit turns on and off at random.
	 * G510: does it do this? seems safe to leave here in case
	 */
	raw_data[4] &= 0xFE;

	for (i = 0, mask = 0x01; i < 8; i++, mask <<= 1) {
		scancode = i;
		value = raw_data[1] & mask;
		gcore_input_report_key(gdata, scancode, value);

		scancode = i + 8;
		value = raw_data[2] & mask;
		gcore_input_report_key(gdata, scancode, value);

		scancode = i + 16;
		value = raw_data[3] & mask;
		gcore_input_report_key(gdata, scancode, value);

		scancode = i + 24;
		value = raw_data[4] & mask;
		gcore_input_report_key(gdata, scancode, value);
	}

	input_sync(idev);
}
Exemple #4
0
static void g19_ep1_urb_completion(struct urb *urb)
{
	/* don't process unlinked or failed urbs */
	if (likely(urb->status == 0)) {
		struct hid_device *hdev = urb->context;
		struct gcore_data *gdata = hid_get_gdata(hdev);
		struct g19_data *g19data = gdata->data;
		int i;

		for (i = 0; i < 8; i++)
			gcore_input_report_key(gdata, 24+i,
					       g19data->ep1keys[0]&(1<<i));

		input_sync(gdata->input_dev);

		usb_submit_urb(urb, GFP_ATOMIC);
	}
}