示例#1
0
void
lk201_init(struct lk201_state *lks)
{
	int i;

	lks->waitack = 0;

	send(lks, LK_LED_ENABLE);
	send(lks, LK_LED_ALL);

	/*
	 * set all keys to updown mode; autorepeat is
	 * done by wskbd software
	 */
	for (i = 1; i <= 14; i++)
		send(lks, LK_CMD_MODE(LK_UPDOWN, i));

	send(lks, LK_CL_DISABLE);
	lks->kcvol = 0;

	lks->bellvol = -1; /* not yet set */

	for (i = 0; i < LK_KLL; i++)
		lks->down_keys_list[i] = -1;
	send(lks, LK_KBD_ENABLE);

	send(lks, LK_LED_DISABLE);
	send(lks, LK_LED_ALL);
	lks->leds_state = 0;

	/*
	 * Note that, when attaching lkkbd initially, this timeout will
	 * be scheduled but will not run until interrupts are enabled.
	 * This is not a problem, since lk201_identify() relies upon
	 * interrupts being enabled.
	 */
	timeout_set(&lks->probetmo, lk201_identify, lks);
	timeout_add(&lks->probetmo, 0);
}
示例#2
0
static struct dec_serial_hook lk201_hook = {
	.init_channel	= lk201_init,
	.init_info	= lk201_info,
	.rx_char	= NULL,
	.poll_rx_char	= NULL,
	.poll_tx_char	= NULL,
	.cflags		= B4800 | CS8 | CSTOPB | CLOCAL,
};

/*
 * This is used during keyboard initialisation
 */
static unsigned char lk201_reset_string[] = {
	LK_CMD_SET_DEFAULTS,
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 1),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 2),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 3),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 4),
	LK_CMD_MODE(LK_MODE_DOWN_UP, 5),
	LK_CMD_MODE(LK_MODE_DOWN_UP, 6),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 7),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 8),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 9),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 10),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 11),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 12),
	LK_CMD_MODE(LK_MODE_DOWN, 13),
	LK_CMD_MODE(LK_MODE_RPT_DOWN, 14),
	LK_CMD_DIS_KEYCLK,
	LK_CMD_ENB_BELL, LK_PARAM_VOLUME(4),
示例#3
0
文件: fb.c 项目: Scarletts/LiteBSD
/* e4 */ KBD_NOKEY,     '*',            'i',            'k',
/* e8 */ '<',           KBD_NOKEY,      '(',            'o',
/* ec */ 'l',           '>',            KBD_NOKEY,      ')',
/* f0 */ 'p',           KBD_NOKEY,      ':',            '?',
/* f4 */ KBD_NOKEY,     '+',            '}',            '|',
/* f8 */ KBD_NOKEY,     '_',            '{',            '"',
/* fc */ KBD_NOKEY,     KBD_NOKEY,      KBD_NOKEY,      KBD_NOKEY,
};

/*
 * Keyboard initialization string.
 */
static u_char kbdInitString[] = {
    LK_LED_ENABLE, LED_ALL,     /* show we are resetting keyboard */
    LK_DEFAULTS,
    LK_CMD_MODE(LK_AUTODOWN, 1),
    LK_CMD_MODE(LK_AUTODOWN, 2),
    LK_CMD_MODE(LK_AUTODOWN, 3),
    LK_CMD_MODE(LK_DOWN, 4),    /* could also be LK_AUTODOWN */
    LK_CMD_MODE(LK_UPDOWN, 5),
    LK_CMD_MODE(LK_UPDOWN, 6),
    LK_CMD_MODE(LK_AUTODOWN, 7),
    LK_CMD_MODE(LK_AUTODOWN, 8),
    LK_CMD_MODE(LK_AUTODOWN, 9),
    LK_CMD_MODE(LK_AUTODOWN, 10),
    LK_CMD_MODE(LK_AUTODOWN, 11),
    LK_CMD_MODE(LK_AUTODOWN, 12),
    LK_CMD_MODE(LK_DOWN, 13),
    LK_CMD_MODE(LK_AUTODOWN, 14),
    LK_AR_ENABLE,               /* we want autorepeat by default */
    LK_CL_ENABLE, 0x83,         /* keyclick, volume */
示例#4
0
文件: lk201_ws.c 项目: ryo/netbsd-src
int
lk201_init(struct lk201_state *lks)
{
	int i;

	lks->waitack = 0;

	send(lks, LK_LED_ENABLE);
	send(lks, LK_LED_ALL);

	/*
	 * set all keys to updown mode; autorepeat is
	 * done by wskbd software
	 */
	for (i = 1; i <= 14; i++)
		send(lks, LK_CMD_MODE(LK_UPDOWN, i));

	send(lks, LK_CL_ENABLE);
	send(lks, LK_PARAM_VOLUME(3));
	lks->kcvol = (8 - 3) * 100 / 8;

	lks->bellvol = -1; /* not yet set */

	for (i = 0; i < LK_KLL; i++)
		lks->down_keys_list[i] = -1;
	send(lks, LK_KBD_ENABLE);

	send(lks, LK_LED_DISABLE);
	send(lks, LK_LED_ALL);
	lks->leds_state = 0;

	/*
	 * Swallow all the keyboard acknowledges from lk201_init().
	 * There should be 14 of them - one per LK_CMD_MODE command.
	 */
	for(;;) {
		lks->waitack = 1;
		for (i = 100; i != 0; i--) {
			DELAY(1000);
			if (lks->waitack == 0)
				break;
		}
		if (i == 0)
			break;
	}

	/*
	 * Try to set the keyboard in LK-401 mode.
	 * If we receive an error, this is an LK-201 keyboard.
	 */
	lks->waitack = 1;
	send(lks, LK_ENABLE_401);
	for (i = 100; i != 0; i--) {
		DELAY(1000);
		if (lks->waitack == 0)
			break;
	}
	if (lks->waitack != 0)
		lks->kbdtype = KBD_NONE;
	else {
		if (lks->ackdata == LK_INPUT_ERROR)
			lks->kbdtype = KBD_LK201;
		else
			lks->kbdtype = KBD_LK401;
	}
	lks->waitack = 0;

	printf("lkkbd0: %s\n", lkkbd_descr[lks->kbdtype]);

	return 0;
}