Skip to content

Waratah Local Setup & Dev Loop

Matthew Williams edited this page Feb 5, 2025 · 3 revisions

Execution from command-line.

Below shows sample running of Waratah from cmdline with source (-s) file simpleKeyboard.wara and destination (-d) file descriptor.txt.

Note: The destination file (-d) does not have an extension (.txt/.h). The extension is calculated during compilation from the requested output type (plain-text or C++).

C:\>waratahcmd.exe -s simpleKeyboard.wara -d descriptor
Reading from file 'C:\simpleKeyboard.wara'
Creating output file 'C:\descriptor.txt'
Successfully created output file 'C:\descriptor.txt'
Successfully generated descriptor file 'C:\descriptor.txt'
Descriptor size 53 (bytes)

+-----------+--------+--------------------+
| Report Id | Kind   | Report Size (bits) |
+-----------+--------+--------------------+
| 1         | Input  | 64                 |
+-----------+--------+--------------------+
| 1         | Output | 8                  |
+-----------+--------+--------------------+

simpleKeyboard.wara

[[settings]]
outputformat = 'PlainText'

[[applicationCollection]]
usage = ['Generic Desktop', 'Keyboard']

    [[applicationCollection.inputReport]]

        # Special buttons
        #
        # N.B. Windows applies special buttons only to subsequent keys, so
        # must appear in report beforehand.
        [[applicationCollection.inputReport.variableItem]]
        usageRange = ['Keyboard/Keypad', 'Keyboard LeftControl', 'Keyboard Right GUI']
        logicalValueRange = [0, 1]

        # Regular Buttons
        [[applicationCollection.inputReport.arrayItem]]
        usageRange = ['Keyboard/Keypad', 'ErrorRollOver', 'Keyboard Application']
        count = 8

    # LEDS
    [[applicationCollection.outputReport]]

        [[applicationCollection.outputReport.variableItem]]
        usageRange = ['LED', 'Num Lock', 'Kana']
        logicalValueRange = [0, 1]

descriptor.txt

05-01....UsagePage(Generic Desktop[1])
09-06....UsageId(Keyboard[6])
A1-01....Collection(Application)
85-01........ReportId(1)
05-07........UsagePage(Keyboard/Keypad[7])
19-E0........UsageIdMin(Keyboard LeftControl[224])
29-E7........UsageIdMax(Keyboard Right GUI[231])
15-00........LogicalMinimum(0)
25-01........LogicalMaximum(1)
95-08........ReportCount(8)
75-01........ReportSize(1)
81-02........Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField)
19-01........UsageIdMin(ErrorRollOver[1])
29-65........UsageIdMax(Keyboard Application[101])
15-01........LogicalMinimum(1)
25-65........LogicalMaximum(101)
75-07........ReportSize(7)
81-00........Input(Data, Array, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField)
05-08........UsagePage(LED[8])
19-01........UsageIdMin(Num Lock[1])
29-05........UsageIdMax(Kana[5])
15-00........LogicalMinimum(0)
25-01........LogicalMaximum(1)
95-05........ReportCount(5)
75-01........ReportSize(1)
91-02........Output(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, NonVolatile, BitField)
95-01........ReportCount(1)
75-03........ReportSize(3)
91-03........Output(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, NonVolatile, BitField)
C0.......EndCollection()

Execution from Sublime Text Editor

Current recommended editor is Sublime Text, which has a TOML syntax highlighting plugin, and a comprehensive 3P build-system facility.

Future developments of Waratah may include a VSCode plugin.

Sample .sublime-build file

{
    "cmd": ["C:\\WaratahCmd.exe", "-s $file", "-d C:\\descriptor"],
    "selector": "source.wara",
    "file_regex": "^\\s*File \"(...*?)\", line ([0-9]*)"
}
Clone this wiki locally