Skip to content

Commit 0813220

Browse files
authored
NKRO (usb and rf) (#24)
* nkro support (untested) * adjusted nkro report size, it now works * nkro through rf * nkro as a feature * fix extra keys * update readme
1 parent 12cbd53 commit 0813220

File tree

20 files changed

+743
-75
lines changed

20 files changed

+743
-75
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ on:
88

99
jobs:
1010
build:
11+
strategy:
12+
matrix:
13+
nkro: [enabled, disabled]
1114
runs-on: ubuntu-latest
1215
steps:
1316
- uses: actions/checkout@v4
@@ -21,13 +24,13 @@ jobs:
2124
name: smk
2225
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
2326
- name: Setup
24-
run: nix develop --command meson setup build
27+
run: nix develop --command meson setup build -Dnkro=${{ matrix.nkro }}
2528
- name: Build
2629
run: nix develop --command meson compile -C build
2730
- name: Archive code coverage results
2831
uses: actions/upload-artifact@v4
2932
with:
30-
name: firmware
33+
name: smk-${{ matrix.nkro == 'enabled' && 'nkro' || '6kro' }}
3134
path: build/*.hex
3235

3336
lint:

docs/keyboards/nuphy-air60.md

Lines changed: 354 additions & 1 deletion
Large diffs are not rendered by default.

docs/smk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
- [x] USB Keyboard
1010
- [x] Status LEDs
1111
- [x] Extra Keys (System / Consumer)
12-
- [ ] NKRO
12+
- [x] NKRO
1313
- [~] QMK Compatibility
1414
- [~] Layouts
1515
- [~] Wireless

meson.build

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ project(
22
'smk',
33
'c',
44
version: 'alpha',
5-
meson_version: '>=0.53.0'
5+
meson_version: '>=1.1.0'
66
)
77

88
fs = import('fs')
@@ -113,6 +113,10 @@ cc_base_args = [
113113
'-DSMK_VERSION=@0@'.format(meson.project_version()),
114114
]
115115

116+
if get_option('nkro').enabled()
117+
cc_base_args += '-DNKRO_ENABLE=1'
118+
endif
119+
116120
if get_option('buildtype') == 'debug'
117121
cc_base_args += '-DDEBUG=1'
118122
endif

meson.options

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
option('nkro', type : 'feature', value : 'enabled', description: 'NKRO support')

src/kb/kb.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
#include <stdbool.h>
66

77
void kb_init();
8-
void kb_send_report(report_keyboard_t *report);
9-
void kb_send_extra(report_extra_t *report);
8+
void kb_send_report(__xdata report_keyboard_t *report);
9+
void kb_send_nkro(__xdata report_nkro_t *report);
10+
void kb_send_extra(__xdata report_extra_t *report);
1011

1112
bool kb_process_record(uint16_t keycode, bool key_pressed);
1213
void kb_update_switches();

src/keyboards/example/kb.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
#include "report.h"
22
#include "usb.h"
33

4-
void kb_send_report(report_keyboard_t *report)
4+
void kb_send_report(__xdata report_keyboard_t *report)
55
{
66
usb_send_report(report);
77
}
88

9-
void kb_send_extra(report_extra_t *report)
9+
void kb_send_nkro(__xdata report_nkro_t *report)
10+
{
11+
usb_send_nkro(report);
12+
}
13+
14+
void kb_send_extra(__xdata report_extra_t *report)
1015
{
1116
usb_send_extra(report);
1217
}

src/keyboards/eyooso-z11/kb.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
#include "report.h"
22
#include "usb.h"
33

4-
void kb_send_report(report_keyboard_t *report)
4+
void kb_send_report(__xdata report_keyboard_t *report)
55
{
66
usb_send_report(report);
77
}
88

9-
void kb_send_extra(report_extra_t *report)
9+
void kb_send_nkro(__xdata report_nkro_t *report)
10+
{
11+
usb_send_nkro(report);
12+
}
13+
14+
void kb_send_extra(__xdata report_extra_t *report)
1015
{
1116
usb_send_extra(report);
1217
}

src/keyboards/nuphy-air60/kb.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ bool kb_process_record(uint16_t keycode, bool key_pressed)
7676
}
7777
}
7878

79-
void kb_send_report(report_keyboard_t *report)
79+
void kb_send_report(__xdata report_keyboard_t *report)
8080
{
8181
switch (user_keyboard_state.conn_mode) {
8282
case KEYBOARD_CONN_MODE_USB:
@@ -90,7 +90,21 @@ void kb_send_report(report_keyboard_t *report)
9090
}
9191
}
9292

93-
void kb_send_extra(report_extra_t *report)
93+
void kb_send_nkro(__xdata report_nkro_t *report)
94+
{
95+
switch (user_keyboard_state.conn_mode) {
96+
case KEYBOARD_CONN_MODE_USB:
97+
usb_send_nkro(report);
98+
break;
99+
#ifdef RF_ENABLED
100+
case KEYBOARD_CONN_MODE_RF:
101+
rf_send_nkro(report);
102+
break;
103+
#endif
104+
}
105+
}
106+
107+
void kb_send_extra(__xdata report_extra_t *report)
94108
{
95109
switch (user_keyboard_state.conn_mode) {
96110
case KEYBOARD_CONN_MODE_USB:

src/main.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ void main()
5252
{
5353
init();
5454

55-
delay_ms(1000); // perhaps clocks are unstable at this point? influences UART
56-
5755
dprintf("SMK v" TOSTRING(SMK_VERSION) "\r\n");
5856
dprintf("DEVICE vId:" TOSTRING(USB_VID) " pId:" TOSTRING(USB_PID) "\n\r");
5957

0 commit comments

Comments
 (0)