/* * Here is your LED toy, Bob */ void lk201_lights( int unit, boolean_t on) { unsigned int sl; spl_t s; sl = lk201_softc[unit]->sl_unit; s = spltty(); (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_CMD_LEDS_OFF); (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_PARAM_LED_MASK(0xf)); if (on < 16 && on > 0) { (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_CMD_LEDS_ON); (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_PARAM_LED_MASK(on)); } splx(s); }
void kbd_leds(unsigned char leds) { unsigned char l = 0; if (!lk201_handle) /* FIXME */ return; /* FIXME -- Only Hold and Lock LEDs for now. --macro */ if (leds & LED_SCR) l |= LK_LED_HOLD; if (leds & LED_CAP) l |= LK_LED_LOCK; if (lk201_hook.poll_tx_char(lk201_handle, LK_CMD_LEDS_ON)) return; if (lk201_hook.poll_tx_char(lk201_handle, LK_PARAM_LED_MASK(l))) return; if (lk201_hook.poll_tx_char(lk201_handle, LK_CMD_LEDS_OFF)) return; if (lk201_hook.poll_tx_char(lk201_handle, LK_PARAM_LED_MASK(~l))) return; }
lk201_led( int unit) { lk201_led_state_t *leds = &lk201_softc[unit]->led; unsigned int sl; spl_t s; sl = lk201_softc[unit]->sl_unit; if (leds->led_interval) { /* leds are on */ if (leds->led_light_count <= 0) { /* hit this lights */ if (leds->led_lights <= 0) leds->led_lights= 1; /* sanity */ if (leds->led_lights > 16) leds->led_lights = 16;/* sanity */ leds->led_light_count = leds->led_interval; /* reset */ s = spltty(); (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_CMD_LEDS_OFF); (*console_putc)(sl, SCREEN_LINE_KEYBOARD, LK_PARAM_LED_MASK(leds->led_lights)); switch (leds->led_pattern) { case LED_OFF: leds->led_interval = 0; /* since you can now set */ break; /* the interval even if off */ case LED_COUNT: leds->led_lights++; if (leds->led_lights > 16) leds->led_lights = 1; break; case LED_ROTATE: leds->led_lights <<= 1; if (leds->led_lights > 8) leds->led_lights = 1; break; case LED_CYLON: if (leds->led_increasing) { leds->led_lights <<= 1; if (leds->led_lights > 8) { leds->led_lights >>= 2; leds->led_increasing = 0; } } else { leds->led_lights >>= 1; if (leds->led_lights <= 0) { leds->led_lights = 2; leds->led_increasing = 1; } } break; }
} void lk201_attach( int unit, int sl_unit) { lk201_softc[unit]->sl_unit = sl_unit; lk201_selftest(unit); } /* * Keyboard initialization */ static unsigned char lk201_reset_string[] = { LK_CMD_LEDS_ON, LK_PARAM_LED_MASK(0xf), /* show we are resetting */ 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),