bat/tests/syntax-tests/source/Ada/click.ads
Marc Poulhiès 06b403aa92 Add syntax support for Ada
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>
2022-09-14 22:49:39 +02:00

340 lines
6.3 KiB
Ada
Vendored
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;