Skip to content

Commit

Permalink
Merge pull request #140 from DivineGod/feat/split-direct-pin
Browse files Browse the repository at this point in the history
Support Direct Pin matrix for split keyboards.
  • Loading branch information
HaoboGu authored Dec 5, 2024
2 parents f18154b + 1298b83 commit af56233
Show file tree
Hide file tree
Showing 23 changed files with 2,758 additions and 97 deletions.
38 changes: 26 additions & 12 deletions docs/src/split_keyboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ See `examples/use_rust/nrf52840_ble_split` for the wireless split keyboard examp

See `examples/use_config/rp2040_split` and for the `keyboard.toml` + wired split keyboard example using rp2040.

See `examples/use_config/rp2040_split` and for the `keyboard.toml` + wired split keyboard example using rp2040 and a direct pin matrix.

See `examples/use_config/nrf52840_ble_split` for the `keyboard.toml` + wireless split keyboard example using nRF52840.

**NOTE:** for `nrf52840_ble_split`, add
See `examples/use_config/nrf52840_ble_split` for the `keyboard.toml` + wireless split keyboard example using nRF52840 and a direct pin matrix.

**NOTE:** for `nrf52840_ble_split`, add

```toml
[patch.crates-io]
Expand Down Expand Up @@ -98,12 +102,16 @@ rows = 2
cols = 2
row_offset = 0
col_offset = 0
# Central's matrix pins
input_pins = ["P0_12", "P0_13"]
output_pins = ["P0_14", "P0_15"]
# Central's ble addr

ble_addr = [0x18, 0xe2, 0x21, 0x80, 0xc0, 0xc7]

# Central's matrix pins
[split.central.matrix]
matrix_type = "normal"
input_pins = ["P0_12", "P0_13"]
output_pins = ["P0_14", "P0_15"]

# Note there're TWO brackets, since the peripheral is a list
# Peripheral 0
[[split.peripheral]]
Expand All @@ -112,25 +120,31 @@ rows = 2
cols = 1
row_offset = 2
col_offset = 2
input_pins = ["P1_11", "P1_10"]
output_pins = ["P0_30"]
# Peripheral's ble addr
ble_addr = [0x7e, 0xfe, 0x73, 0x9e, 0x11, 0xe3]

[split.peripheral.matrix]
matrix_type = "normal"
input_pins = ["P1_11", "P1_10"]
output_pins = ["P0_30"]

# Peripheral 1
[[split.peripheral]]
# Matrix definition
rows = 2
cols = 1
row_offset = 2
col_offset = 2
input_pins = ["P1_11", "P1_10"]
output_pins = ["P0_30"]
# Peripheral's ble addr
ble_addr = [0x7e, 0xfe, 0x71, 0x91, 0x11, 0xe3]

[split.peripheral.matrix]
matrix_type = "normal"
input_pins = ["P1_11", "P1_10"]
output_pins = ["P0_30"]
```

When using split, the input/output pins defined in `[matrix]` section is not valid anymore. Instead, the input/output pins of split boards are defined in `[split.central]` and `[[split.peripheral]]`. The rows/cols in `[matrix]` section is the total number of rows/cols of the whole keyboard.
When using split, the input/output pins defined in `[matrix]` section is not valid anymore. Instead, the input/output pins of split boards are defined in `[split.central.matrix]` and `[split.peripheral.matrix]`. The contents of the split matrix configuration is the same as for `[matrix]`. This means each peripheral and central keyboard also supports `direct_pin`. The rows/cols in `[matrix]` section is the total number of rows/cols of the whole keyboard.

If you're using BLE, `ble_addr` is required for both central and peripheral. Each device needs a `ble_addr`.

Expand Down Expand Up @@ -166,9 +180,9 @@ serial = [{ instance = "UART0", tx_pin = "PIN_0", rx_pin = "PIN_1" }]

## Communication

RMK supports both wired and wireless communication.
RMK supports both wired and wireless communication.

Currently, the communication type indicates that how split central communicates with split peripherals. How the central talks with the host depends only on the central.
Currently, the communication type indicates that how split central communicates with split peripherals. How the central talks with the host depends only on the central.

- For communication over BLE: the central talks with the host via BLE or USB, depends on whether the USB cable is connected
- For communication over serial: the central can only use USB to talk with the host
Expand Down Expand Up @@ -196,4 +210,4 @@ src
- peripheral.rs
keyboard.toml
Cargo.toml
```
```
4 changes: 2 additions & 2 deletions examples/use_config/nrf52840_ble_split/.cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
# Have to use simmsb's elf2uf2 fork to flash https://github.com/simmsb/elf2uf2-rs
# Have to use simmsb's elf2uf2 fork to flash https://github.com/simmsb/elf2uf2-rs
# runner = "elf2uf2-rs -d"
runner = "probe-rs run --chip nRF52840_xxAA"
linker = "flip-link"
Expand Down Expand Up @@ -35,4 +35,4 @@ target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)

[env]
DEFMT_LOG = "debug"
DEFMT_LOG = "debug"
5 changes: 5 additions & 0 deletions examples/use_config/nrf52840_ble_split/keyboard.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ cols = 2
row_offset = 0
col_offset = 0
ble_addr = [0x18, 0xe2, 0x21, 0x80, 0xc0, 0xc7]

[split.central.matrix]
matrix_type = "normal"
input_pins = ["P0_12", "P0_13"]
output_pins = ["P0_14", "P0_15"]

Expand All @@ -50,6 +53,8 @@ cols = 1
row_offset = 2
col_offset = 2
ble_addr = [0x7e, 0xfe, 0x73, 0x9e, 0x66, 0xe3]
[split.peripheral.matrix]
matrix_type = "normal"
input_pins = ["P1_11", "P1_10"]
output_pins = ["P0_30"]

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[target.thumbv7m-none-eabi]
# uncomment this to make `cargo run` execute programs on QEMU
# runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
# Have to use simmsb's elf2uf2 fork to flash https://github.com/simmsb/elf2uf2-rs
# runner = "elf2uf2-rs -d"
runner = "probe-rs run --chip nRF52840_xxAA"
linker = "flip-link"
rustflags = [
# Previously, the linker arguments --nmagic and -Tlink.x were set here.
# They are now set by build.rs instead. The linker argument can still
# only be set here, if a custom linker is needed.

# By default, the LLD linker is used, which is shipped with the Rust
# toolchain. If you run into problems with LLD, you can switch to the
# GNU linker by uncommenting this line:
# "-C", "linker=arm-none-eabi-ld",

# If you need to link to pre-compiled C libraries provided by a C toolchain
# use GCC as the linker by uncommenting the three lines below:
# "-C", "linker=arm-none-eabi-gcc",
# "-C", "link-arg=-Wl,-Tlink.x",
# "-C", "link-arg=-nostartfiles",
]

[build]
# Pick ONE of these default compilation targets
# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
# target = "thumbv7m-none-eabi" # Cortex-M3
# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
# target = "thumbv8m.base-none-eabi" # Cortex-M23
# target = "thumbv8m.main-none-eabi" # Cortex-M33 (no FPU)
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)

[env]
DEFMT_LOG = "debug"
Loading

0 comments on commit af56233

Please sign in to comment.