57 lines
2.7 KiB
C
57 lines
2.7 KiB
C
/**
|
|
* @file keys.h
|
|
* @brief PS/2 клавиатура через TSConfig CMOS FIFO (#EFF7/#DFF7/#BFF7)
|
|
*
|
|
* ps2_init() — одноразовая инициализация: открытие PS/2 портов,
|
|
* активация FIFO, старт FSM в режиме DRAIN.
|
|
* ps2_poll() — вызывать из главного цикла; rate-limit (~1 раз в TV-кадр).
|
|
* За один вызов полностью сливает FIFO (tight loop).
|
|
* Возвращает последний найденный KEY_* или KEY_NONE.
|
|
*
|
|
* Единственный бит состояния — skip flag (после F0 пропустить 1 байт).
|
|
* E0 не требует skip — сами коды не совпадают с нашими, а E0 F0 SC
|
|
* корректно обрабатывается через F0→skip.
|
|
*
|
|
* PS/2 Set 2 скан-коды:
|
|
* ESC (#76) → KEY_ESC — выход
|
|
* SPACE (#29) → KEY_NEXT — следующий трек
|
|
* P (#4D) → KEY_PREV — предыдущий трек
|
|
* 1 (#16) → KEY_SAA1 — SAA режим 1 (chip0)
|
|
* 2 (#1E) → KEY_SAA2 — SAA режим 2 (chip1)
|
|
*/
|
|
|
|
#ifndef KEYS_H
|
|
#define KEYS_H
|
|
|
|
#include "types.h"
|
|
|
|
/* ── Коды клавиш (возврат ps2_poll) ──────────────────────────────────── */
|
|
#define KEY_NONE 0 /* нет нажатия */
|
|
#define KEY_ESC 1 /* ESC → выход */
|
|
#define KEY_NEXT 2 /* SPACE → следующий */
|
|
#define KEY_PREV 3 /* P → предыдущий */
|
|
#define KEY_SAA1 4 /* 1 → SAA mode 1 */
|
|
#define KEY_SAA2 5 /* 2 → SAA mode 2 */
|
|
#define KEY_SAA3 6 /* 3 → SAA mode 3 */
|
|
|
|
/**
|
|
* Инициализация PS/2: открыть порты, активировать FIFO, слив буфера.
|
|
* Вызвать один раз при старте плагина (до первого ps2_poll).
|
|
*/
|
|
void ps2_init(void);
|
|
|
|
/**
|
|
* Деинициализация PS/2: слив FIFO, деактивация FIFO, отключение портов.
|
|
* Вызвать при выходе из плагина (после главного цикла).
|
|
*/
|
|
void ps2_deinit(void);
|
|
|
|
/**
|
|
* Опросить PS/2 FIFO (rate-limited, ~1 раз в кадр).
|
|
* Клавиша подтверждается только после полного цикла make + release.
|
|
* Возвращает KEY_* при подтверждении, KEY_NONE иначе.
|
|
*/
|
|
uint8_t ps2_poll(void);
|
|
|
|
#endif /* KEYS_H */
|