Example #1
0
/** Simulate keystroke using sequences of key presses and releases. */
void stroke_sim(kbd_dev_t *kdev, unsigned mod, unsigned key)
{
	int i;

	/* Simulate modifier presses. */
	i = 0;
	while (mods_keys[i][0] != 0) {
		if (mod & mods_keys[i][0]) {
			kbd_push_event(kdev, KEY_PRESS, mods_keys[i][1]);
		}
		++i;
	}

	/* Simulate key press and release. */
	if (key != 0) {
		kbd_push_event(kdev, KEY_PRESS, key);
		kbd_push_event(kdev, KEY_RELEASE, key);
	}

	/* Simulate modifier releases. */
	i = 0;
	while (mods_keys[i][0] != 0) {
		if (mod & mods_keys[i][0]) {
			kbd_push_event(kdev, KEY_RELEASE, mods_keys[i][1]);
		}
		++i;
	}
}
Example #2
0
static void kbdev_callback_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
{
	kbdev_t *kbdev;
	int retval;
	int type, key;

	/* Kbdev device structure */
	kbdev = arg;

	while (true) {
		ipc_call_t call;
		ipc_callid_t callid;

		callid = async_get_call(&call);
		if (!IPC_GET_IMETHOD(call)) {
			kbdev_destroy(kbdev);
			return;
		}

		switch (IPC_GET_IMETHOD(call)) {
		case KBDEV_EVENT:
			/* Got event from keyboard device */
			retval = 0;
			type = IPC_GET_ARG1(call);
			key = IPC_GET_ARG2(call);
			kbd_push_event(kbdev->kbd_dev, type, key);
			break;
		default:
			retval = ENOTSUP;
			break;
		}

		async_answer_0(callid, retval);
	}
}
Example #3
0
static void apple_ctl_parse(sysarg_t scancode)
{
	kbd_event_type_t type;
	unsigned int key;

	if (scancode >= 0x100)
		return;

	if (scancode & KBD_KEY_RELEASE) {
		scancode &= ~KBD_KEY_RELEASE;
		type = KEY_RELEASE;
	} else {
		type = KEY_PRESS;
	}

	key = scanmap[scancode];
	if (key != 0)
		kbd_push_event(kbd_dev, type, key);
}