mirror of
https://github.com/sharkdp/bat
synced 2024-12-25 03:33:05 +00:00
06b403aa92
Add submodule with sublime syntax. Add corresponding tests for both Ada (in adb/ads) and for the companion tool gpr. fixes #1300 Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
339 lines
6.3 KiB
Ada
Vendored
339 lines
6.3 KiB
Ada
Vendored
with HAL.GPIO;
|
||
with USB.Device.HID.Keyboard;
|
||
|
||
generic
|
||
Nb_Bounce : Natural;
|
||
type ColR is (<>);
|
||
type RowR is (<>);
|
||
|
||
type GPIOP is new HAL.GPIO.GPIO_Point with private;
|
||
|
||
type Cols_T is array (ColR) of GPIOP;
|
||
type Rows_T is array (RowR) of GPIOP;
|
||
|
||
Cols : Cols_T;
|
||
Rows : Rows_T;
|
||
Num_Layers : Natural;
|
||
|
||
with procedure Log (S : String; L : Integer := 1; Deindent : Integer := 0);
|
||
package Click is
|
||
|
||
type Keys_T is record
|
||
Cols : Cols_T;
|
||
Rows : Rows_T;
|
||
end record;
|
||
|
||
Keys : Keys_T :=
|
||
(Rows => Rows, Cols => Cols);
|
||
|
||
type Key_Matrix is array (ColR, RowR) of Boolean;
|
||
|
||
--------------------------
|
||
-- Events & Debouncing --
|
||
--------------------------
|
||
|
||
MaxEvents : constant Positive := 20;
|
||
|
||
type EventT is (Press, Release);
|
||
type Event is record
|
||
Evt : EventT;
|
||
Col : ColR;
|
||
Row : RowR;
|
||
end record;
|
||
|
||
type Events is array (Natural range <>) of Event;
|
||
|
||
function Get_Events return Events;
|
||
function Update (NewS : Key_Matrix) return Boolean;
|
||
|
||
-------------
|
||
-- Layout --
|
||
-------------
|
||
---------------
|
||
-- Keycodes --
|
||
---------------
|
||
|
||
-- Keycodes copy/pasted from the excelent Keyberon Rust firmware:
|
||
-- https://github.com/TeXitoi/keyberon/
|
||
|
||
type Key_Code_T is
|
||
(
|
||
-- The "no" key, a placeholder to express nothing.
|
||
No, -- = 0x00,
|
||
-- / Error if too much keys are pressed at
|
||
-- the same time.
|
||
ErrorRollOver,
|
||
-- / The POST fail error.
|
||
PostFail,
|
||
-- / An undefined error occured.
|
||
ErrorUndefined,
|
||
-- / `a` and `A`.
|
||
A,
|
||
B,
|
||
C,
|
||
D,
|
||
E,
|
||
F,
|
||
G,
|
||
H,
|
||
I,
|
||
J,
|
||
K,
|
||
L,
|
||
M, -- 0x10
|
||
N,
|
||
O,
|
||
P,
|
||
Q,
|
||
R,
|
||
S,
|
||
T,
|
||
U,
|
||
V,
|
||
W,
|
||
X,
|
||
Y,
|
||
Z,
|
||
-- `1` and `!`.
|
||
Kb1,
|
||
-- `2` and `@`.
|
||
Kb2,
|
||
-- `3` and `#`.
|
||
Kb3, -- 0x20
|
||
-- / `4` and `$`.
|
||
Kb4,
|
||
-- `5` and `%`.
|
||
Kb5,
|
||
-- `6` and `^`.
|
||
Kb6,
|
||
-- `7` and `&`.
|
||
Kb7,
|
||
-- `8` and `*`.
|
||
Kb8,
|
||
-- `9` and `(`.
|
||
Kb9,
|
||
-- `0` and `)`.
|
||
Kb0,
|
||
Enter,
|
||
Escape,
|
||
BSpace,
|
||
Tab,
|
||
Space,
|
||
-- `-` and `_`.
|
||
Minus,
|
||
-- `=` and `+`.
|
||
Equal,
|
||
-- `[` and `{`.
|
||
LBracket,
|
||
-- `]` and `}`.
|
||
RBracket, -- 0x30
|
||
-- / `\` and `|`.
|
||
Bslash,
|
||
-- Non-US `#` and `~` (Typically near the Enter key).
|
||
NonUsHash,
|
||
-- `;` and `:`.
|
||
SColon,
|
||
-- `'` and `"`.
|
||
Quote,
|
||
-- How to have ` as code?
|
||
-- \` and `~`.
|
||
Grave,
|
||
-- `,` and `<`.
|
||
Comma,
|
||
-- `.` and `>`.
|
||
Dot,
|
||
-- `/` and `?`.
|
||
Slash,
|
||
CapsLock,
|
||
F1,
|
||
F2,
|
||
F3,
|
||
F4,
|
||
F5,
|
||
F6,
|
||
F7, -- 0x40
|
||
F8,
|
||
F9,
|
||
F10,
|
||
F11,
|
||
F12,
|
||
PScreen,
|
||
ScrollLock,
|
||
Pause,
|
||
Insert,
|
||
Home,
|
||
PgUp,
|
||
Delete,
|
||
Endd,
|
||
PgDown,
|
||
Right,
|
||
Left, -- 0x50
|
||
Down,
|
||
Up,
|
||
NumLock,
|
||
-- Keypad `/`
|
||
KpSlash,
|
||
-- Keypad `*`
|
||
KpAsterisk,
|
||
-- Keypad `-`.
|
||
KpMinus,
|
||
-- Keypad `+`.
|
||
KpPlus,
|
||
-- Keypad enter.
|
||
KpEnter,
|
||
-- Keypad 1.
|
||
Kp1,
|
||
Kp2,
|
||
Kp3,
|
||
Kp4,
|
||
Kp5,
|
||
Kp6,
|
||
Kp7,
|
||
Kp8, -- 0x60
|
||
Kp9,
|
||
Kp0,
|
||
KpDot,
|
||
-- Non-US `\` and `|` (Typically near the Left-Shift key)
|
||
NonUsBslash,
|
||
Application, -- 0x65
|
||
-- / not a key, used for errors
|
||
Power,
|
||
-- Keypad `=`.
|
||
KpEqual,
|
||
F13,
|
||
F14,
|
||
F15,
|
||
F16,
|
||
F17,
|
||
F18,
|
||
F19,
|
||
F20,
|
||
F21, -- 0x70
|
||
F22,
|
||
F23,
|
||
F24,
|
||
Execute,
|
||
Help,
|
||
Menu,
|
||
Selectt,
|
||
Stop,
|
||
Again,
|
||
Undo,
|
||
Cut,
|
||
Copy,
|
||
Paste,
|
||
Find,
|
||
Mute,
|
||
VolUp, -- 0x80
|
||
VolDown,
|
||
-- Deprecated.
|
||
LockingCapsLock,
|
||
-- Deprecated.
|
||
LockingNumLock,
|
||
-- Deprecated.
|
||
LockingScrollLock,
|
||
-- / Keypad `,`, also used for the
|
||
-- brazilian keypad period (.) key.
|
||
KpComma,
|
||
-- Used on AS/400 keyboard
|
||
KpEqualSign,
|
||
Intl1,
|
||
Intl2,
|
||
Intl3,
|
||
Intl4,
|
||
Intl5,
|
||
Intl6,
|
||
Intl7,
|
||
Intl8,
|
||
Intl9,
|
||
Lang1, -- 0x90
|
||
Lang2,
|
||
Lang3,
|
||
Lang4,
|
||
Lang5,
|
||
Lang6,
|
||
Lang7,
|
||
Lang8,
|
||
Lang9,
|
||
AltErase,
|
||
SysReq,
|
||
Cancel,
|
||
Clear,
|
||
Prior,
|
||
Returnn,
|
||
Separator,
|
||
Outt, -- 0xA0
|
||
Oper,
|
||
ClearAgain,
|
||
CrSel,
|
||
ExSel,
|
||
|
||
-- According to QMK, 0xA5-0xDF are not
|
||
-- usable on modern keyboards
|
||
|
||
-- Modifiers
|
||
-- Left Control.
|
||
LCtrl, -- = 0xE0,
|
||
-- / Left Shift.
|
||
LShift,
|
||
-- Left Alt.
|
||
LAlt,
|
||
-- Left GUI (the Windows key).
|
||
LGui,
|
||
-- Right Control.
|
||
RCtrl,
|
||
-- Right Shift.
|
||
RShift,
|
||
-- Right Alt (or Alt Gr).
|
||
RAlt,
|
||
-- Right GUI (the Windows key).
|
||
RGui, -- 0xE7
|
||
|
||
-- Unofficial
|
||
MediaPlayPause, -- 0xE8,
|
||
MediaStopCD,
|
||
MediaPreviousSong,
|
||
MediaNextSong,
|
||
MediaEjectCD,
|
||
MediaVolUp,
|
||
MediaVolDown,
|
||
MediaMute,
|
||
MediaWWW, -- 0xF0
|
||
MediaBack,
|
||
MediaForward,
|
||
MediaStop,
|
||
MediaFind,
|
||
MediaScrollUp,
|
||
MediaScrollDown,
|
||
MediaEdit,
|
||
MediaSleep,
|
||
MediaCoffee,
|
||
MediaRefresh,
|
||
MediaCalc -- 0xFB
|
||
);
|
||
|
||
type Action_Type is (Key, No_Op, Trans, Layer, Multiple_Actions);
|
||
|
||
-- Should be a discriminated type
|
||
type Action is record
|
||
T : Action_Type; -- hould be the discriminant
|
||
C : Key_Code_T;
|
||
L : Natural;
|
||
end record;
|
||
|
||
function Kw (Code : Key_Code_T) return Action;
|
||
function Lw (V : Natural) return Action;
|
||
|
||
type Key_Modifiers is array (Natural range <>) of USB.Device.HID.Keyboard.Modifiers;
|
||
|
||
type Key_Codes_T is array (Natural range <>) of Key_Code_T;
|
||
|
||
subtype Ac is Action;
|
||
type Layout is array (0 .. Num_Layers - 1, RowR, ColR) of Action;
|
||
procedure Register_Events (L : Layout; Es : Events);
|
||
procedure Tick (L : Layout);
|
||
|
||
function Get_Key_Codes return Key_Codes_T;
|
||
function Get_Modifiers return Key_Modifiers;
|
||
procedure Init;
|
||
end Click;
|