GithubHelp home page GithubHelp logo

kinesiscorporation / adv360-pro-zmk Goto Github PK

View Code? Open in Web Editor NEW
400.0 30.0 5.2K 1.15 MB

Production repository for the all-new Advantage360 Professional using ZMK engine

License: MIT License

CMake 5.84% Dockerfile 5.79% Shell 61.86% Makefile 26.50%

adv360-pro-zmk's Introduction

Kinesis Advantage 360 Pro ZMK Config

Modifying the keymap

The ZMK documentation covers both basic and advanced functionality and has a table of OS compatibility for keycodes. Please note that the RGB Underglow, Backlight and Power Management sections are not relevant to the Advantage 360 Pro's custom ZMK fork. For more information see this note

There is a web based GUI available for editing the keymap. It is available at https://kinesiscorporation.github.io/Adv360-Pro-GUI. This repository is also compatible with certain other web based ZMK keymap editors however they may have keycodes or behaviours that are not implemented on the 360 Pro and could cause unusual behaviour or build failures. Furthermore changes made on other keymap editors may not be compatible if one goes back to using the Kinesis GUI.

Certain ZMK features (e.g. combos) require knowing the exact key positions in the matrix. They can be found in both image and text format here

Building the Firmware with GitHub Actions

Setup

  1. Fork this repo.
  2. Enable GitHub Actions on your fork.

Build firmware

  1. Push a commit to trigger the build.
  2. Download the artifact.

Building the Firmware in a local container

Setup

Software

  • Either Podman or Docker is required, Podman is chosen if both are installed.
  • Make is also required

Windows specific

  • If compiling on Windows use WSL2 and Docker Docker Setup Guide.
  • Install make using sudo apt-get install make inside the WSL2 instance.
  • The repository can be cloned directly into the WSL2 instance or accessed through the C: mount point WSL provides by default (/mnt/c/path-to-repo).

macOS specific

On macOS brew can be used to install the required components.

  • docker
  • colima can be used as the docker engine
brew install docker colima
colima start

Note: On Apple Silicon (ARM based) systems you need to make sure to start colima with the correct architecture for the container being used.

colima start --arch x86_64

Ubuntu/Debian specific

sudo apt-get install docker make

Building the firmware

  1. Execute make to build firmware for both halves or make left to only build firmware for the left hand side.
  2. Check the firmware directory for the latest firmware build. The first part of the filename is the timestamp when the firmware was built.

Cleanup

The built docker container and compiled firmware files can be deleted with make clean. This might be necessary if you updated your fork from V2.0 to V3.0 and are encountering build failures.

Creating the docker container takes some time. Therefore make clean_firmware can be used to only clean firmware without removing the docker container. Similarly make clean_image can be used to remove the docker container without removing compiled firmware files.

Flashing firmware

Follow the programming instruction on page 8 of the Quick Start Guide to flash the firmware.

Overview

  1. Extract the firmwares from the archive downloaded from the GitHub build job (If using the cloud builder) or the firmware folder (If building locally).
  2. Connect the left side keyboard to USB.
  3. Press Mod+macro1 to put the left side into bootloader mode; it should attach to your computer as a USB drive.
  4. Copy left.uf2 to the USB drive and it will disconnect.
  5. Power off both keyboards (by unplugging them and making sure the switches are off).
  6. Turn on the left side keyboard with the switch.
  7. Connect the right side keyboard to USB to power it on.
  8. Press Mod+macro3 to put the right side into bootloader mode to attach it as a USB drive.
  9. Copy right.uf2 to the mounted drive.
  10. Unplug the right side keyboard and turn it back on.
  11. Enjoy!

Note: There are also physical reset buttons on both keyboards which can be used to enter and exit the bootloader mode. Their location is described in section 2.7 on page 9 in the User Manual and use is described in section 5.9 on page 14.

Note: Some operating systems wont always treat the drive as ejected after the settings-reset file is flashed or may throw a spurious error, this doesn't mean that the flashing process has failed.

Upgrading from V2 to V3

If you encounter a git conflict when updating your repository to V3.0 please follow the instructions on how to resolve it here.

Updating from V2.0 based firmwares to V3.0 based firmwares can be a rather complex process. There are reset files for every major firmware revision as well as documentation on the update process available here.

Versioning

Starting on 11/15/2023 the Advantage 360 Pro will now automatically record the compilation date, branch and Git commit hash in a macro that can be accessed with Mod+V. This will type out the following string: YYYYMMDD-XXXX-YYYYYY, where XXXX is the first 4 characters of the Git branch and YYYYYY is the Git commit hash. In addition to this the builds compiled by GitHub actions are now timestamped and also record the commit hash in the filename.

N-Key Rollover

By default this keyboard has NKRO enabled, however for compatibility reasons the higher ranges are not enabled. If you want to use F13-F24 or the INTL1-9 keys with NKRO enabled you can change CONFIG_ZMK_HID_KEYBOARD_EXTENDED_REPORT=n to CONFIG_ZMK_HID_KEYBOARD_EXTENDED_REPORT=y in adv360_left_defconfig

Battery reporting

By default reporting the battery level over BLE is disabled as this can cause some computers to spontaneously wake up repeatedly. If you'd like to enable this functionality change CONFIG_BT_BAS=n to CONFIG_BT_BAS=y in adv360_left_defconfig.

Modifier indicator color

The color of the CAPS/NUM/SCROLL LOCK indicator LEDs may be configured by specifying a hexadecimal RGB color code. For example, CONFIG_ZMK_RGB_UNDERGLOW_MOD_COLOR=0xFF0000 would give red indicator colors. In order to set the indicator color on both modules, ensure that both adv360_left_defconfig and adv360_right_defconfig have been updated.

Layer colors

A total of 32 layers are supported by ZMK, with the highest currently active layer displayed using the layer LEDs on each of the left and right modules. All possible colors are listed below; for the first 8 layers the same color is displayed on both modules. After that, only the right module color will cycle through until "rolling over", which will cause the left module color to change as well (and this then repeats). To avoid confusion, the black/off LED color is only used for layer 0.

Layer # L/R Layer # L/R Layer # L/R Layer # L/R
0 8 16 24
1 9 17 25
2 10 18 26
3 11 19 27
4 12 20 28
5 13 21 29
6 14 22 30
7 15 23 31

Changelog

The changelog for both the config repo and the underlying ZMK fork that the config repo builds against can be found here.

Beta testing

The Advantage 360 Pro is always getting updates and refinements. If you are willing to beta test you can follow this guide from ZMK on how to change where your config repo points to. The west.yml file that is mentioned is located in config/. This link can take you to the file. Typically you will only need to change the revision: to match the beta branch. There is currently no beta branch available for testing.

Feedback on beta branches should be submitted as a GitHub issue on the base ZMK repository as opposed to this config repository.

In the event of a major update the beta branch may not be compatible with the current mainline version of the config repository. If this is the case it will be detailed here along with instructions on how to update.

Note

By default this config repository references a customised version of ZMK with Advantage 360 Pro specific functionality and changes over base ZMK. The Kinesis fork is regularly updated to bring the latest updates and changes from base ZMK however will not always be completely up to date, some features such as new keycodes will not be immediately available on the 360 Pro after they are implemented in base ZMK.

Whilst the Advantage 360 Pro is compatible with base ZMK (The pull request to merge it can be seen here if you want to see how to implement it) some of the more advanced features (the indicator RGB leds) will not work, and Kinesis cannot provide customer service for usage of base ZMK. Likewise the ZMK community cannot provide support for either the Kinesis keymap editor, nor any usage of the Kinesis custom fork.

Other support

Further support resources can be found on Kinesis.com:

In the event of a hardware issue it may be necessary to open a support ticket directly with Kinesis as opposed to a GitHub issue in this repository.

adv360-pro-zmk's People

Contributors

adv360proapp[bot] avatar allanwind avatar craftyguy avatar douglascamata avatar ed-flanagan avatar hassa129 avatar huber-th avatar humblehacker avatar jasonish avatar jjowdy avatar joshfrench avatar khoek avatar kinesiscorporation avatar nickcoutsos avatar refil avatar ryanwinchester avatar s0ands0 avatar stapelberg avatar tplunket avatar x418 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adv360-pro-zmk's Issues

Build fails on macOS (m1)

Hi,

I just tried to build the firmware on my M1 mac without success.
The steps I followed are minimal:

  1. fresh docker install (with rosetta)
  2. git clone this project
  3. make all

Do you know what may be going wrong?

➜  Adv360-Pro-ZMK git:(V2.0) make all
docker build --tag zmk --file Dockerfile .
[+] Building 269.4s (12/12) FINISHED
 => [internal] load build definition from Dockerfile                                                                          0.0s
 => => transferring dockerfile: 287B                                                                                          0.0s
 => [internal] load .dockerignore                                                                                             0.0s
 => => transferring context: 2B                                                                                               0.0s
 => [internal] load metadata for docker.io/zmkfirmware/zmk-build-arm:stable                                                   1.6s
 => [1/7] FROM docker.io/zmkfirmware/zmk-build-arm:stable@sha256:acea7abae2fe324e574e33f63761b1c20bb60714fb528a7987b093dc32  24.8s
 => => resolve docker.io/zmkfirmware/zmk-build-arm:stable@sha256:acea7abae2fe324e574e33f63761b1c20bb60714fb528a7987b093dc322  0.0s
 => => sha256:4b6fd231874ac99e60078328dbb4508ced1ea25841107e84b65ceafef831fdaa 184.23MB / 184.23MB                           12.5s
 => => sha256:ec7db53eba75ff4bec0a8c9e8ea486f6625864606c7f25dfa2f472a27b3c1f7f 250.91MB / 250.91MB                           18.5s
 => => sha256:acea7abae2fe324e574e33f63761b1c20bb60714fb528a7987b093dc32206e06 955B / 955B                                    0.0s
 => => sha256:23cad88e0ef6f8f61c3f6534901330f9fd41f93f68e0c2cd63e3e2a71c739a15 4.65kB / 4.65kB                                0.0s
 => => sha256:08c01a0ec47e82ebe2bec112f373d160983a6d1e9e66627f66a3322bc403221b 28.56MB / 28.56MB                              2.3s
 => => extracting sha256:08c01a0ec47e82ebe2bec112f373d160983a6d1e9e66627f66a3322bc403221b                                     1.2s
 => => extracting sha256:4b6fd231874ac99e60078328dbb4508ced1ea25841107e84b65ceafef831fdaa                                     6.1s
 => => extracting sha256:ec7db53eba75ff4bec0a8c9e8ea486f6625864606c7f25dfa2f472a27b3c1f7f                                     5.9s
 => [internal] load build context                                                                                             0.0s
 => => transferring context: 1.04kB                                                                                           0.0s
 => [2/7] WORKDIR /app                                                                                                        0.3s
 => [3/7] COPY config/west.yml config/west.yml                                                                                0.0s
 => [4/7] RUN west init -l config                                                                                             0.8s
 => [5/7] RUN west update                                                                                                   233.2s
 => [6/7] RUN west zephyr-export                                                                                              3.6s
 => [7/7] COPY bin/build.sh ./                                                                                                0.0s
 => exporting to image                                                                                                        4.9s
 => => exporting layers                                                                                                       4.9s
 => => writing image sha256:fffb06c16a5a8ec4f077a4cf3db4bd0d3d15a6204079c605e2bb3758cf0cb55b                                  0.0s
 => => naming to docker.io/library/zmk                                                                                        0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
docker run --rm -it --name zmk \
		-v /Users/gui/Dev/Adv360-Pro-ZMK/firmware:/app/firmware \
		-v /Users/gui/Dev/Adv360-Pro-ZMK/config:/app/config:ro \
		-e TIMESTAMP=20221025045710 \
		zmk
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
-- west build: generating a build system
Including boilerplate (Zephyr base): /app/zephyr/cmake/app/boilerplate.cmake
-- Application: /app/zmk/app
-- Adding ZMK config directory as board root: /app/config
-- ZMK Config directory: /app/config
-- Using keymap file: /app/config/adv360_left.keymap
-- Zephyr version: 3.0.0 (/app/zephyr)
-- Found Python3: /usr/bin/python3.8 (found suitable exact version "3.8.10") found components: Interpreter
-- Found west (found suitable version "0.12.0", minimum required is "0.7.1")
-- Board: adv360_left
-- Cache files will be written to: /root/.cache/zephyr
-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK
-- Found host-tools: zephyr 0.13.2 (/opt/zephyr-sdk-0.13.2)
-- Found dtc: /opt/zephyr-sdk-0.13.2/sysroots/x86_64-pokysdk-linux/usr/bin/dtc (found suitable version "1.6.0", minimum required is "1.4.6")
-- Found toolchain: zephyr 0.13.2 (/opt/zephyr-sdk-0.13.2)
-- Found BOARD.dts: /app/config/boards/arm/adv360/adv360_left.dts
-- Found devicetree overlay: /app/config/adv360_left.keymap
-- Generated zephyr.dts: /app/build/left/zephyr/zephyr.dts
-- Generated devicetree_unfixed.h: /app/build/left/zephyr/include/generated/devicetree_unfixed.h
-- Generated device_extern.h: /app/build/left/zephyr/include/generated/device_extern.h
-- Including generated dts.cmake file: /app/build/left/zephyr/dts.cmake
Parsing /app/zmk/app/Kconfig
Loaded configuration '/app/config/boards/arm/adv360/adv360_left_defconfig'
Merged configuration '/app/zmk/app/prj.conf'
Configuration saved to '/app/build/left/zephyr/.config'
Kconfig header saved to '/app/build/left/zephyr/include/generated/autoconf.h'
-- The C compiler identification is GNU 10.3.0
-- The CXX compiler identification is GNU 10.3.0
-- The ASM compiler identification is GNU
-- Found assembler: /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
-- Configuring done
CMake Warning (dev) at /app/zephyr/cmake/linker/ld/target.cmake:69 (add_custom_command):
  Policy CMP0116 is not set: Ninja generators transform DEPFILEs from
  add_custom_command().  Run "cmake --help-policy CMP0116" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.
Call Stack (most recent call first):
  /app/zephyr/CMakeLists.txt:1053 (configure_linker_script)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /app/zephyr/cmake/linker/ld/target.cmake:69 (add_custom_command):
  Policy CMP0116 is not set: Ninja generators transform DEPFILEs from
  add_custom_command().  Run "cmake --help-policy CMP0116" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.
Call Stack (most recent call first):
  /app/zephyr/CMakeLists.txt:1265 (configure_linker_script)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /app/zephyr/cmake/linker/ld/target.cmake:69 (add_custom_command):
  Policy CMP0116 is not set: Ninja generators transform DEPFILEs from
  add_custom_command().  Run "cmake --help-policy CMP0116" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.
Call Stack (most recent call first):
  /app/zephyr/CMakeLists.txt:1322 (configure_linker_script)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /app/build/left
-- west build: building application
[1/344] Preparing syscall dependency handling

[2/344] Generating include/generated/version.h
-- Zephyr version: 3.0.0 (/app/zephyr), build: 8adeab429a24
[49/344] Building C object CMakeFiles/app.dir/src/keymap.c.obj
In file included from /app/zmk/app/src/keymap.c:20:
/app/zmk/app/include/zmk/split/bluetooth/central.h:10:36: warning: 'struct zmk_periph_led' declared inside parameter list will not be visible outside of this definition or declaration
   10 | int zmk_split_bt_update_led(struct zmk_periph_led *periph);
      |                                    ^~~~~~~~~~~~~~
/app/zmk/app/include/zmk/split/bluetooth/central.h:11:35: warning: 'struct backlight_state' declared inside parameter list will not be visible outside of this definition or declaration
   11 | int zmk_split_bt_update_bl(struct backlight_state *periph);
      |                                   ^~~~~~~~~~~~~~~
[64/344] Building C object CMakeFiles/app.dir/src/backlight.c.obj
In file included from /app/zmk/app/src/backlight.c:26:
/app/zmk/app/include/zmk/split/bluetooth/central.h:10:36: warning: 'struct zmk_periph_led' declared inside parameter list will not be visible outside of this definition or declaration
   10 | int zmk_split_bt_update_led(struct zmk_periph_led *periph);
      |                                    ^~~~~~~~~~~~~~
[65/344] Building C object CMakeFiles/app.dir/src/rgb_underglow.c.obj
In file included from /app/zmk/app/src/rgb_underglow.c:35:
/app/zmk/app/include/zmk/split/bluetooth/central.h:11:35: warning: 'struct backlight_state' declared inside parameter list will not be visible outside of this definition or declaration
   11 | int zmk_split_bt_update_bl(struct backlight_state *periph);
      |                                   ^~~~~~~~~~~~~~~
[109/344] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj
FAILED: zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj
ccache /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -DKERNEL -DNRF52840_XXAA -D_FORTIFY_SOURCE=2 -D__PROGRAM_START -D__ZEPHYR__=1 -I/app/zephyr/kernel/include -I/app/zephyr/arch/arm/include -I/app/zephyr/include -I/app/build/left/zephyr/include/generated -I/app/zephyr/soc/arm/nordic_nrf/nrf52 -I/app/zephyr/soc/arm/nordic_nrf/common/. -I/app/zephyr/subsys/bluetooth -I/app/zephyr/subsys/usb -I/app/zephyr/subsys/settings/include -I/app/modules/hal/cmsis/CMSIS/Core/Include -I/app/modules/hal/nordic/nrfx -I/app/modules/hal/nordic/nrfx/drivers/include -I/app/modules/hal/nordic/nrfx/mdk -I/app/zephyr/modules/hal_nordic/nrfx/. -I/app/modules/crypto/tinycrypt/lib/include -I/app/zmk/app/drivers/sensor/battery/. -isystem /app/zephyr/lib/libc/minimal/include -isystem /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/include -isystem /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/include-fixed -Os -imacros /app/build/left/zephyr/include/generated/autoconf.h -ffreestanding -fno-common -g -gdwarf-4 -fdiagnostics-color=always -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfp16-format=ieee -imacros /app/zephyr/include/toolchain/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wno-main -Wno-pointer-sign -Wpointer-arith -Wexpansion-to-defined -Wno-unused-but-set-variable -Werror=implicit-int -fno-asynchronous-unwind-tables -fno-pie -fno-pic -fno-reorder-functions -fno-defer-pop -fmacro-prefix-map=/app/zmk/app=CMAKE_SOURCE_DIR -fmacro-prefix-map=/app/zephyr=ZEPHYR_BASE -fmacro-prefix-map=/app=WEST_TOPDIR -ffunction-sections -fdata-sections -std=c99 -nostdinc -Wfatal-errors -MD -MT zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj -MF zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj.d -o zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj -c /app/zephyr/subsys/storage/flash_map/flash_map.c
arm-zephyr-eabi-gcc: internal compiler error: Segmentation fault signal terminated program cc1
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
[114/344] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/usb/usb_device.c.obj
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: /usr/local/bin/cmake --build /app/build/left
make: *** [firmware/$(TIMESTAMP)-left.uf2] Error 1

Note : --platform linux/amd64 on docker commands does not help, it fails a little bit earlier in average

Keyboard sends '=====' after turning on and after flushing firmware

I have the keyboard for a few weeks now. I face several issues that seem to be related to the same 'family' of issues:

  1. When I turn it on connected to a Mac it sends many '=' signs at the autorepeat speed (or actually whatever key is at key position 0). It sometimes stop after a while but sometimes it doesn't and I need to press a key to stop it.
  2. On a Windos PC this happens after the first keypress on the keyboard.
  3. Many times on the first key press on the right keyboard the first press is followed by a '=' sign
  4. When flushing firmware, after flushing I get a very fast long set of '=' signs (much faster than the autorepeat speed)

After this initial sequence all works normally until next time I turn off/on the keyboard.

I tried this with the vanilla firmware after building as well as other versions of firmware.

Also, it wasn't always like that, the flushing scenario started a few days after I started using the keyboard, and the turn on scenario started only a few days ago.

Is this normal? Anyone experiencing this as well? Any fix/workaround?

Problem with long macros

I have some issues with long macros, the first letter is typed multiple times. That doesn't happen with macros which are less than ten characters long.

I read in the ZMK documentation here that it's recommended to set CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE=512 for long macros. I defined it in adv360.yaml but got the following error:

warning: attempt to assign the value '512' to the undefined symbol ZMK_BEHAVIORS_QUEUE_SIZE

Another thing that doesn't work is to set wait-ms and tap-ms in the macros itself

wait-ms = <30>;
tap-ms = <40>;

I'm getting an error the error:

'tap-ms' appears in /behaviors/macro_test_email in adv360_left.dts.pre.tmp, but is not declared in 'properties:' in /__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/zmk/app/dts/bindings/behaviors/zmk,behavior-macro.yaml

Any help would be appreciated.

Is it possible to switch layout with different profiles?

I have a Mac, Windows, and Linux machine that I'm connecting to my Kinesis Advantage 360 Pro to. I was wondering if there was a way to switch profiles and layouts for each of those. I really liked the ability to switch the Windows, Command, and Home keys on my old Advantage 2.

Update bin/build.sh to support local builds

I noticed that you deleted lines in .github/workflows/build.yml but not in bin/build.sh.

I can build locally (mac) and the left firmware is in the zephyr folder but not as the name in bin/build.sh without removing the "matching" lines in bin/build. But the contents of the build/left/zephyr folder are that of my left build.

Doesn't it make sense to remove it in that file as well?

`#!/usr/bin/env bash

set -e

PWD=$(pwd)
TIMESTAMP=$(date -u +"%Y%m%d%H%M%S")

# West Build (left)
west build -s zmk/app -d build/left -b adv360_left -- -DZMK_CONFIG="${PWD}/config"
# Adv360 Left DTS File
# remove this cat -n build/left/zephyr/adv360_left.dts.pre.tmp
# Adv360 Left Kconfig file
cat build/left/zephyr/.config | grep -v "^#" | grep -v "^$"
# West Build (right)
west build -s zmk/app -d build/right -b adv360_right -- -DZMK_CONFIG="${PWD}/config"
# Adv360 Right DTS File
# remove this cat -n build/right/zephyr/adv360_right.dts.pre.tmp
# Adv360 Right Kconfig file
cat build/right/zephyr/.config | grep -v "^#" | grep -v "^$"
# Rename zmk.uf2
cp build/left/zephyr/zmk.uf2 ./firmware/${TIMESTAMP}-left.uf2 && cp build/right/zephyr/zmk.uf2 ./firmware/${TIMESTAMP}-right.uf2
`

Profile LED Stays Green After Checking Battery Levels

Prerequisite
Use profile 5 which keeps the profile (person icon on left keyboard half) off when paired to a device

Steps To Reproduce

  1. Press Mod+3 (left half) or Mod+4 (right half) to display battery levels via the LEDs
  2. After checking battery level via LEDs, release the keys from step 1
  3. All the LEDs on both halves turn off, except the profile LED remains green

Work Around to Turn Off LED

  1. Change your profile to one of the LED lighted ones, 1-4, (e.g. Mod+#) then switch back to the unlit profile 5 (e.g. Mod+5)
  2. The profile light will now be turned off

Unknowns

  1. My current battery level is >80% so the LED color for step 3 above may or may not always be green
  2. Potentially the profile LED color might correspond to one of the other battery level colors such as yellow, orange or red, but at the moment, I can't really determine this

Mac brightness and vol control

Hi, I was trying to add brightness and vol control on the fn layer with below setup. It seems not working after flash the firmware. The other changes worked (which I did for the main layer), so it should be some compatibility issue with the zmk and mac I presume?

Help would be appreciated.

image

Startup LED is too bright

I have to cover it with my hand otherwise it hurts my eyes. Demo below :)

startup-led.mp4

I would appreciate any guidance on how to change the brightness. Thanks

FATAL ERROR: command exited with status 1: /usr/local/bin/cmake --build /app/build/left

internal compiler error: Segmentation fault signal terminated program cc1
FATAL ERROR: command exited with status 1: /usr/local/bin/cmake --build /app/build/left

MacOS Monterray
M1 Max 2016

Can someone point me in the right direction?
Or is my Mac not supported?

I cloned from https://github.com/KinesisCorporation/Adv360-Pro-ZMK v2.0.

Then ran make all.

`[68/344] Building C object CMakeFiles/app.dir/src/rgb_underglow.c.obj
In file included from /app/zmk/app/src/rgb_underglow.c:35:
/app/zmk/app/include/zmk/split/bluetooth/central.h:11:35: warning: 'struct backlight_state' declared inside parameter list will not be visible outside of this definition or declaration
11 | int zmk_split_bt_update_bl(struct backlight_state *periph);
| ^~~~~~~~~~~~~~~

[69/344] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj

FAILED: zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj
ccache /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -DKERNEL -DNRF52840_XXAA -D_FORTIFY_SOURCE=2 -D__PROGRAM_START -D__ZEPHYR__=1 -I/app/zephyr/kernel/include -I/app/zephyr/arch/arm/include -I/app/zephyr/include -I/app/build/left/zephyr/include/generated -I/app/zephyr/soc/arm/nordic_nrf/nrf52 -I/app/zephyr/soc/arm/nordic_nrf/common/. -I/app/zephyr/subsys/bluetooth -I/app/zephyr/subsys/usb -I/app/zephyr/subsys/settings/include -I/app/modules/hal/cmsis/CMSIS/Core/Include -I/app/modules/hal/nordic/nrfx -I/app/modules/hal/nordic/nrfx/drivers/include -I/app/modules/hal/nordic/nrfx/mdk -I/app/zephyr/modules/hal_nordic/nrfx/. -I/app/modules/crypto/tinycrypt/lib/include -I/app/zmk/app/drivers/sensor/battery/. -isystem /app/zephyr/lib/libc/minimal/include -isystem /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/include -isystem /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/include-fixed -Os -imacros /app/build/left/zephyr/include/generated/autoconf.h -ffreestanding -fno-common -g -gdwarf-4 -fdiagnostics-color=always -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfp16-format=ieee -imacros /app/zephyr/include/toolchain/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wno-main -Wno-pointer-sign -Wpointer-arith -Wexpansion-to-defined -Wno-unused-but-set-variable -Werror=implicit-int -fno-asynchronous-unwind-tables -fno-pie -fno-pic -fno-reorder-functions -fno-defer-pop -fmacro-prefix-map=/app/zmk/app=CMAKE_SOURCE_DIR -fmacro-prefix-map=/app/zephyr=ZEPHYR_BASE -fmacro-prefix-map=/app=WEST_TOPDIR -ffunction-sections -fdata-sections -std=c99 -nostdinc -Wfatal-errors -MD -MT zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj -MF zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj.d -o zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj -c /app/zephyr/lib/os/crc7_sw.c
arm-zephyr-eabi-gcc:

internal compiler error: Segmentation fault signal terminated program cc1

Please submit a full bug report,
with preprocessed source if appropriate.

See https://gcc.gnu.org/bugs/ for instructions.

[75/344] Building C object CMakeFiles/app.dir/src/split/bluetooth/central.c.obj
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: /usr/local/bin/cmake --build /app/build/left
make: *** [firmware/$(TIMESTAMP)-left.uf2] Error 1
`

Can't connect to Mac via bluetooth

I flashed my keyboard with firmware built from the current head (2562f62), and now I can no longer connect my keyboard via bluetooth. It correctly shows up as "Adv360 Pro" under nearby devices, but when I press "Connect", I get a spinner, and briefly the button changes to "Disconnect" then immediately switches back to "Connect".

In my Console logs I get a constant stream of the following:

2022-11-17 15:34:47.670742 -0800	info	bluetoothd	com.apple.bluetooth	CBStackBLEScanner	Device found changed: CBDevice D06048F3-C746-C12A-EC6F-D4C778F201ED, BDA E0:07:2A:6F:CE:0E, Nm 'Adv360 Pro', DsFl 0x2000000000000 < BLEHID >, RSSI -57, Aprc Keyboard, CF 0x200000000 < RSSI >
2022-11-17 15:34:47.670960 -0800	debug	bluetoothd	com.apple.bluetooth	Server.LE.Scan	Found device "D06048F3-C746-C12A-EC6F-D4C778F201ED with data:"Adv360 Pro", RSSI: 0 dB (non-saturated), Service UUIDs: 0x1812 0x180F, connectable, sourceCore: MainCore, IsELNAOn: 0, IsPassup: 0, IsFromSCCompensation0,  Setting name to Adv360 Pro

I am on the Ventura 13.1 beta, but the keyboard has been working fine with that so far. I'm going to attempt to flash one of my previous firmware builds.

Custom behaviors in keymap editor

In a future release, might the team consider making custom behaviors, such as the &hm behavior supplied in the default configuration, selectable in the keymap editor? It's a small job to manually edit the generated config file after each commit, but one I'd like to avoid, especially while iterating on layouts. Thanks!

Vendor and Product ID are 0

I was trying to configure Karabiner to ignore certain mods that can now be programmed directly on the Advantage, while leaving them enabled on my built-in keyboard. Karabiner does this by checking the vendor and/or product ID of the device.

According to Karabiner these values are missing or zeroed out:

[
    {
        "device_id": 4294970112,
        "is_karabiner_virtual_hid_device": false,
        "is_keyboard": true,
        "is_pointing_device": false,
        "location_id": 2150578859,
        "manufacturer": "Manufacturer",
        "product": "Adv360 Pro",
        "product_id": 0,
        "transport": "Bluetooth Low Energy",
        "vendor_id": 0
    },
    {
        "device_id": 4294968566,
        "is_built_in_keyboard": true,
        "is_karabiner_virtual_hid_device": false,
        "is_keyboard": true,
        "is_pointing_device": false,
        "location_id": 18446744071567310848,
        "manufacturer": "Apple Inc.",
        "product": "Apple Internal Keyboard / Trackpad",
        "product_id": 638,
        "transport": "USB",
        "vendor_id": 1452
    },
    {
        "device_id": 4294968517,
        "is_karabiner_virtual_hid_device": false,
        "is_keyboard": true,
        "is_pointing_device": true,
        "location_id": 3982802855,
        "manufacturer": "Logitech",
        "product": "M720 Triathlon",
        "product_id": 45077,
        "transport": "Bluetooth Low Energy",
        "vendor_id": 1133
    }
] 

The zmk docs indicate the defaults are non-zero, so I'm a little surprised these are just plain missing:

Config Type Description Default
CONFIG_USB_DEVICE_VID int The vendor ID advertised to USB 0x1D50
CONFIG_USB_DEVICE_PID int The product ID advertised to USB 0x615E

There are workarounds so this isn't critical, but it would be nice to have known identifiers to rely on. Thanks!

Build failes

Hi! I have the following output in my build:

Sending build context to Docker daemon    725kB
Step 1/8 : FROM docker.io/zmkfirmware/zmk-build-arm:stable
 ---> c24cc1653635
Step 2/8 : WORKDIR /app
 ---> Using cache
 ---> 75b0d8a4b73d
Step 3/8 : COPY config/west.yml config/west.yml
 ---> Using cache
 ---> 2f11906cd091
Step 4/8 : RUN west init -l config
 ---> Using cache
 ---> 4b72060b043e
Step 5/8 : RUN west update
 ---> Using cache
 ---> c0601847337a
Step 6/8 : RUN west zephyr-export
 ---> Using cache
 ---> d5cdeb041d39
Step 7/8 : COPY bin/build.sh ./
 ---> Using cache
 ---> daa544178471
Step 8/8 : CMD ["./build.sh"]
 ---> Using cache
 ---> 54751cc8ffe2
Successfully built 54751cc8ffe2
Successfully tagged zmk:latest
/usr/bin/docker run --rm -it --name zmk \
	-v /firmware:/app/firmware:z \
	-v /config:/app/config:ro,z \
	-e TIMESTAMP=20221127014519 \
	zmk
usage: west [-h] [-z ZEPHYR_BASE] [-v] [-V] <command> ...
west: error: argument <command>: invalid choice: 'build' (choose from 'init', 'update', 'list', 'manifest', 'diff', 'status', 'forall', 'help', 'config', 'topdir', 'selfupdate')
make: *** [Makefile:8: all] Error 2```
Did I do something wrong?

My Adv360 Pro cannot connect to my mac studio。

My Adv360 Pro cannot connect to my Mac Studio via Bluetooth, but can connect to the left keyboard via USB. I've tried all the methods but can't connect. Has anyone else encountered the same situation?

Build failure on MacOS using podman

Error: preparing container d3ed7931ce28a2b3f8dccb090151f120c89435662bf43e646923c88f7c167449 for attach: lsetxattr Adv360-Pro-ZMK/config/adv360_left.keymap: operation not supported

The changes in PR #58 are the culprit. After reverting locally, I'm able to build successfully.

For reference: containers/podman-compose#509

Can't connect 2 Kinesis 360 Pro to Mac Book Pro (Monterey)

TLDR: Look like only 1 Kinesis360 pro can be in the list of bluetooth devices at any given moment of time.

For some reason I'm having issues maintaining 2 Bluetooth connections for Kinesis 360 Pro (one at work and one at home).
If one kinesis is in the list of devices, the second never connects over bluetooth. What is weird, that the first one works.

For example: if I first connect one at work, it will work fine and reconnect without issues. If I then try to connect one at home, the device looks connected in the Bluetooth manager, but LED on keyboard is blinking and no Input is possible unless a wire is connected.

Refresh of device list usually results in displaying an error: "Preferences Error. There was an error in Bluetooth preferences.", and leads to kinesis disappearing from the list.

If I remove the work keyboard from the list, home one connects fine but not I need to do the same at work.

Is it possible to customize layer colors?

By default, the 'kp' layer lights up the layer LED as white, 'fn' lights it as blue, and 'mod' lights it as green. Is it possible to customize the color of this LED and/or assign colors to other layers?

How to reprogram Windows/home button to AltGr using Graphical Keymap Editor (Newbie here ;))

Hi!

Just bought my new Kinesis Advatage 360 Pro and never used ZMK before so on a steep learning curve her ;)
As I live in Sweden I've ordered Nordic keycaps and need to reprogram the layout on several keys but I'm having several problems/questions.

  1. I want to change the "windows home" button to become AltGr instead. How do I do this using the keymap editor as I can't seem to find a specific option/key for AltGr.

  2. Once I've actuallt got an AltGr there are several more keys like the number 8 key in Nordic countries that has 2 additional "special characters" on the same key that utilises AltGr.
    For example when I press the number 8 key+ Shift I would like to get at "left parenthesis" (
    and when I press Key 8+AltGr I would like to get a "left bracket" [

  3. How do I find and assig special letters such as Å ( an A with a ring above (ALT+0197). I can't find them in the list so assume I have to aadthemm in som eother way? Can I still use the Graphical Keymap Editor?

When I look at the "orgiginal input" on the Keymap Editor and "hover" over a certain key I can se that some keys have 2 different possible characters but when I want to change them I only seem to be able to put in a single characters but not the special characters as well.

How do I do this?

I newbie question I know but was hoping for a "resonably easy" way to be able to remap my 360 for Nordic languages using the Keymap Editor rather than have to learn how to code it manually.

Hope you can help!! :)

Think I need a "Advantage 360 Graphical Keymap Editor for dummies" youtube video :)))

FATAL ERROR: command exited with status 1

I'm having a different issue than others have alluded to I think (previously, it seemed due to Docker):

Run west build -s zmk/app -d build/left -b adv360_left -- -DZMK_CONFIG="${GITHUB_WORKSPACE}/config"
[2](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:2)
  west build -s zmk/app -d build/left -b adv360_left -- -DZMK_CONFIG="${GITHUB_WORKSPACE}/config"
[3](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:3)
  shell: sh -e {0}
[4](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:5)
-- west build: generating a build system
[5](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:6)
Including boilerplate (Zephyr base): /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/cmake/app/boilerplate.cmake
[6](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:7)
-- Application: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zmk/app
[7](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:8)
-- Adding ZMK config directory as board root: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config
[8](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:9)
-- ZMK Config directory: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config
[9](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:10)
-- Using keymap file: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config/adv360_left.keymap
[10](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:11)
-- Zephyr version: 3.0.0 (/__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr)
[11](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:12)
-- Found Python3: /usr/bin/python3.8 (found suitable exact version "3.8.10") found components: Interpreter 
[12](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:13)
-- Found west (found suitable version "0.14.0", minimum required is "0.7.1")
[13](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:14)
-- Board: adv360_left
[14](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:15)
-- Cache files will be written to: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/.cache
[15](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:16)
-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK
[16](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:17)
-- Found host-tools: zephyr 0.13.2 (/opt/zephyr-sdk-0.13.2)
[17](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:18)
-- Found dtc: /opt/zephyr-sdk-0.13.2/sysroots/x86_64-pokysdk-linux/usr/bin/dtc (found suitable version "1.6.0", minimum required is "1.4.6")
[18](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:19)
-- Found toolchain: zephyr 0.13.2 (/opt/zephyr-sdk-0.13.2)
[19](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:20)
-- Found BOARD.dts: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config/boards/arm/adv360/adv360_left.dts
[20](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:21)
-- Found devicetree overlay: /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config/adv360_left.keymap
[21](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:22)
devicetree error: /keymap/layer_keypad: undefined node label 'macro_copy'
[22](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:23)
CMake Error at /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/cmake/dts.cmake:205 (message):
[23](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:24)
  gen_defines.py failed with return code: 1
[24](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:25)
Call Stack (most recent call first):
[25](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:26)
  /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/cmake/app/boilerplate.cmake:542 (include)
[26](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:27)
  /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:24 (include)
[27](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:28)
  /__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:35 (include_boilerplate)
[28](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:29)
  CMakeLists.txt:15 (find_package)
[29](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:30)

[30](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:31)

[31](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:32)
-- Configuring incomplete, errors occurred!
[32](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:33)
FATAL ERROR: command exited with status 1: /usr/local/bin/cmake -DWEST_PYTHON=/usr/bin/python3 -B/__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/build/left -S/__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/zmk/app -GNinja -DBOARD=adv360_left -DZMK_CONFIG=/__w/Adv360-Pro-ZMK-NP/Adv360-Pro-ZMK-NP/config
[33](https://github.com/P05TPWND/Adv360-Pro-ZMK-NP/actions/runs/3405595447/jobs/5663688359#step:8:34)
Error: Process completed with exit code 1.

I think I made a config that's forcing the build to fail, but I'm unsure how to revert it. Nearly all subsequent builds are failing. This is really my first go-round with ZMK, so I've been using the GUI. Can anyone help? Happy to provide any details that may assist. I'm not sure exactly what's causing the error to be thrown with exit code

Swapping bluetooth profiles after turning off keyboard to connect to a new device fails

  1. Added to initial device using KA360 bluetooth profile 1,
  2. Swap to second device,
  3. Added second device using KA360 bluetooth profile 2,
  4. Swap back to initial device,
  5. Right half no longer connects to left half, on either the initial or second device, in USB or bluetooth modes (Can't change BT profile because the mod key is on the right half).
  6. Had to re-flash both halves to regain right to left connection.

Hey guys I seem to get locked into a no-mans land if I try to toggle between bluetooth profiles on separate devices.

Binding Mouse Clicks/Actions as described in Manual

I'd like to use mouse clicks and actions as described in Advantage360-Pro-ZMK-KB360-Pro-Users-Manual-v4-7-22.pdf, but I'm unable to find the key(mouse?) codes:

From Page 13 of the manual:

5.2 Four new HotKeys

These four keys can be programmed to perform any single key action, mouse click, macro and more.

From Page 17 of the manual:

6.4 ZMK Token List

ZMK supports a wide array of keyboard actions (letters, numbers, symbols, media, mouse actions). Visit the link below for a handy list of tokens to reference when programming your keyboard.
https://zmk.dev/docs/codes/

F13-F24 not working on MacOS.

Expected Behavior

A key assigned as &kp F13 in adv360.keymap should output F13 and each subsequent function key up to and including F24 should behave the same way on MacOS. These are supported by both MacOS and ZMK.

Current Behavior

The current behavior is that these keys produce no output whatsoever - It is not even registering as any keypress in MacOS. These keys are recognized by the operating system on other keyboards, including my modified Kinesis Advantage with QMK support. I'm not sure if these same keys produce any output on Windows or Linux as I don't currently have access to a running machine with those on it, though they may be affected as well. None of these register a keypress at all in MacOS.

I personally use at least some of these function keys extremely regularly. For example, I use F17 as a keybinding to toggle Alfred (a spotlight alternative) and F19 to toggle between two different language input modes.

Steps to Reproduce

  1. Assign any key on any layer to a Function key between F13-F24. According to ZMK's docs, the syntax should be written as&kp F131 in the adv360.keymap file for normal keypress. My current function layer keymap is:
layer_fn {
            bindings = <
 &kp F1  &kp F2      &kp F3            &kp F4      &kp F5  &kp F6            &tog 1   &mo 3  &kp F7  &kp F8  &kp F9  &kp F10  &kp F11  &kp F12
 &kp F13 &kp F14     &kp F15           &kp F16     &kp F17 &kp F18           &none   &none   &kp F19 &kp F20 &kp F21 &kp F22  &kp F23  &kp F24
 &trans  &trans  &kp C_PREV  &kp C_PLAY_PAUSE  &kp C_NEXT  &trans             &none  &trans  &trans                   &trans   &trans    &none  &kp LEFT &kp DOWN &kp UP  &kp RIGHT &C_VOL_UP &trans
 &trans  &trans      &trans            &trans      &trans  &trans             &none   &none  &trans   &none   &none   &trans    &none    &none  &trans   &trans   &trans  &trans    &C_VOL_DN &trans
 &trans  &trans      &trans            &trans      &trans  &trans            &trans  &trans  &trans  &trans  &trans   &trans   &trans   &trans  &trans   &trans
            >;

Everything except for the F13-F24 functions as expected and there is no errors on build using this keymap.

  1. Build and Flash firmware onto device.
  2. Attempt to type the function key. An application like Karabiner's event viewer 2 allows you to view input events on MacOS. Alternatively, You can attempt to bind the key to something in the keyboard shortcuts panel in System Preferences. With a function F13-F24 key, it will correctly set the keybinding for the keyboard shortcut. As it stands, it continues waiting for a valid keypress.

Footnotes

  1. https://zmk.dev/docs/codes#f-keys - one can intuit from the default keybindings that it should be possible to assign F13-F24 the same exact way as F1-F12 (which work fine), hence &kp F13.

  2. https://karabiner-elements.pqrs.org/ - I've bypassed karabiner entirely so it should not be causing the issue.

Previously working builds fail on West Build (right)

I'm using the V-2.0 beta branch. Initially I thought I broke the config, but I'm getting the same error when I try to build the default keymap config and when I rerun previously successful builds:

FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map /__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/build/right/zephyr/zephyr_pre0.map
: && ccache /opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr/zephyr_pre0.elf zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -fuse-ld=bfd -Wl,-T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=/__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/build/right/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/aarch32/libarch__arm__core__aarch32.a zephyr/arch/arch/arm/core/aarch32/cortex_m/libarch__arm__core__aarch32__cortex_m.a zephyr/arch/arch/arm/core/aarch32/mpu/libarch__arm__core__aarch32__mpu.a zephyr/lib/libc/minimal/liblib__libc__minimal.a zephyr/lib/posix/liblib__posix.a zephyr/soc/arm/common/cortex_m/libsoc__arm__common__cortex_m.a zephyr/soc/arm/nordic_nrf/nrf52/libsoc__arm__nordic_nrf__nrf52.a zephyr/subsys/bluetooth/common/libsubsys__bluetooth__common.a zephyr/subsys/bluetooth/host/libsubsys__bluetooth__host.a zephyr/subsys/bluetooth/controller/libsubsys__bluetooth__controller.a zephyr/subsys/net/libsubsys__net.a zephyr/subsys/random/libsubsys__random.a zephyr/drivers/usb/device/libdrivers__usb__device.a zephyr/drivers/adc/libdrivers__adc.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/console/libdrivers__console.a zephyr/drivers/gpio/libdrivers__gpio.a zephyr/drivers/led/libdrivers__led.a zephyr/drivers/led_strip/libdrivers__led_strip.a zephyr/drivers/pwm/libdrivers__pwm.a zephyr/drivers/spi/libdrivers__spi.a zephyr/drivers/hwinfo/libdrivers__hwinfo.a zephyr/drivers/flash/libdrivers__flash.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/entropy/libdrivers__entropy.a zephyr/drivers/timer/libdrivers__timer.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a modules/drivers/kscan/libzmk__drivers__kscan.a modules/drivers/sensor/battery/lib..__zmk__app__drivers__sensor__battery.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a -L"/opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/thumb/v7e-m/nofp" -L/__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/build/right/zephyr -lgcc zephyr/arch/common/libisr_tables.a -no-pie -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfp16-format=ieee -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn && cd /__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/build/right/zephyr && /usr/local/lib/python3.8/dist-packages/cmake/data/bin/cmake -E echo
/opt/zephyr-sdk-0.13.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/10.3.0/../../../../arm-zephyr-eabi/bin/ld.bfd: app/libapp.a(rgb_underglow.c.obj): in function zmk_rgb_underglow_effect_kinesis': /__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/zmk/app/src/rgb_underglow.c:321: undefined reference to zmk_ble_active_profile_is_open'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: /usr/local/bin/cmake --build /__w/Adv360-Pro-ZMK/Adv360-Pro-ZMK/build/right
Error: Process completed with exit code 1.

Tap Dance does not work - devicetree error: ... lacks binding

Hello,

When trying to setup tap dance behaviors I get the following error:

devicetree error: binding controller <Node /behaviors/tap_dance_xxx 'adv360_left.dts.pre.tmp'> for <Node /keymap/default_layer in 'adv360_left.dts.pre.tmp'> lacks binding

Here is the keymap definition: https://github.com/taylon/Adv360-Pro-ZMK/blob/V1.0/config/adv360.keymap
Here is a build with the error: https://github.com/taylon/Adv360-Pro-ZMK/actions/runs/3102414540/jobs/5024689982

  • I tried to update the ZMK docker image to stable and 3.0 instead of 2.4 and that did not make a difference.
  • If I remove the reference to the tapdance behavior from the layer definition it compiles just fine.
  • Seached in the zmk and zephyr repos to see if there is any reference to this error and could not find anything
  • The error message seems to be triggered here
  • I tried to use the exact same tap dance definiton showed in the documentation here (I mean I replaced the whole keymap with that) and got the same error, which is what makes me believe that this might be an issue with the Adv360 setup as opposed to a bug in zmk (I might be wrong though)

Unfortunately I can't migrate from my Kinesis Advantage 2 (which runs QMK) until I have tap dance :(

Instructions in README fail

make all

Fails with:

docker run --rm -it --name zmk \
	-v /home/jason/projects/keyboard/adv360/Adv360-Pro-ZMK/firmware:/app/firmware \
	-v /home/jason/projects/keyboard/adv360/Adv360-Pro-ZMK/config:/app/config:ro \
	-e TIMESTAMP=20221115171029 \
	zmk
usage: west [-h] [-z ZEPHYR_BASE] [-v] [-V] <command> ...
west: error: argument <command>: invalid choice: 'build' (choose from 'init', 'update', 'list', 'manifest', 'diff', 'status', 'forall', 'help', 'config', 'topdir', 'selfupdate')
make: *** [Makefile:9: all] Error 2

make build

make build fails as there is no build target in the Makefile.

Bluetooth only connects to one Operating System on dual-boot systems

I have dual boot systems with Windows and Ubuntu GNU/Linux. The keyboard using bluetooth will only connect to one operating system on an individual PC. It won't connect to both. My Logitech MX Anywhere mouse though does connect to both systems. I am only using one Operating System at a time, of course. I am using the multiple device connections feature of the keyboard. Other than this it works well! Thanks!

howto add a new feature from a remote zmk repo to kinessis

I would like to add a missing feature for new behavior that is implemented here:

https://github.com/nickconway/zmk/tree/swapper-impl
zmkfirmware/zmk#997
zmkfirmware/zmk#1366

I have setup a local doker setup on my windows laptop. What is the best and easies way to add this feature and be able to compile it locally on my laptop?

Naively ive tried:
clone my fork Adv360-Pro-ZMK && cd Adv360-Pro-ZMK
git remote add otherrepo [email protected]:nickconway/zmk.git
git remote update
git merge swapper-impl --allow-unrelated-histories

The merge wants to create the "app" directory in my WSL which is not what the kinessis setup is. We are using docker and every time im build new firmware the compilation is happening inside the docker container.

Understanding this, do I have to build now a new container and try to run these github commands I provided or do I hack my way to login to the existing docker container I have and run these commands there.

Can somebody share some feedback, thanks.

macro doesn't work

I added a macro and assign it to HK 3, but after build and update. Nothing happens if I press HK 3. Is there something I did wrong? Here is my change, ff9a7fc

Thanks

LEDs are always on and display battery status

Happened to 1 keyboard and was able to reproduce with the second one.

First keyboard got in a mode when all 6 LEDs are always on and display battery state by. Now I think office cleaning stuff accidentally pressed a magic combination. I later was able to repro by pressing Mod + HotKey 2 and 3 on my second keyboard, and it is impossible to disable. Mod+Space to turn LEDs off works, but they only display battery state.

Playing with different firmware versions didn't help

Unable to use keyboard via Bluetooth while charging left unit with wall charger

Something about charging the left unit via a standard wall charger (not a computer) causes the Bluetooth connection to go offline and assumes that it should do communication over USB I think. This results in a keyboard that is not usable when plugged into a standard (dumb) wall charger.

Is this intended? I'm on the latest V2.0 version as of Nov 8 2022.

setup.sh fails in V2.0 branch (macOS)

I've successfully used the V1.0 branch to configure my adv360, but when I checkout a clean V2.0 branch and run ./setup.sh, it fails. I've completely wiped Docker using the "Clean/Purge data" option from the Docker Desktop troubleshooting pane before running setup. Any ideas?

~/src/Adv360-Pro-ZMK (V2.0) > ./setup.sh
[+] Building 90.8s (11/14)
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                                     0.0s
 => => transferring dockerfile: 331B                                                                                                                                                                                                                                                                                     0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                                        0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/zmkfirmware/zmk-build-arm:2.4                                                                                                                                                                                                                                                 1.9s
 => [auth] zmkfirmware/zmk-build-arm:pull token for registry-1.docker.io                                                                                                                                                                                                                                                 0.0s
 => [1/9] FROM docker.io/zmkfirmware/zmk-build-arm:2.4@sha256:5985a5a70be4262d6fc39aa53dd0551d57b856d3010be5db4f2ba56733e4f905                                                                                                                                                                                          32.4s
 => => resolve docker.io/zmkfirmware/zmk-build-arm:2.4@sha256:5985a5a70be4262d6fc39aa53dd0551d57b856d3010be5db4f2ba56733e4f905                                                                                                                                                                                           0.0s
 => => sha256:5985a5a70be4262d6fc39aa53dd0551d57b856d3010be5db4f2ba56733e4f905 955B / 955B                                                                                                                                                                                                                               0.0s
 => => sha256:a5213ffd6da02377d71d48b23da7b2be47b893bc0fe8afd59357572da48981d3 4.22kB / 4.22kB                                                                                                                                                                                                                           0.0s
 => => sha256:6e640006d1cd2f4db90bc3010afc398dfd9da7bb7d287bbf7f89088f6252407b 27.11MB / 27.11MB                                                                                                                                                                                                                        16.6s
 => => sha256:8dbc34bfbef0018fe9049b7eb81e17cb7ca8851b84269c46bffcf6ed839c97c8 142.36MB / 142.36MB                                                                                                                                                                                                                      24.0s
 => => sha256:ebc4963c7ce64184d1f8c6a972447a1a7bd747b1e669ecc64ad102adcbdee9e1 190.40MB / 190.40MB                                                                                                                                                                                                                      24.9s
 => => extracting sha256:6e640006d1cd2f4db90bc3010afc398dfd9da7bb7d287bbf7f89088f6252407b                                                                                                                                                                                                                                0.8s
 => => extracting sha256:8dbc34bfbef0018fe9049b7eb81e17cb7ca8851b84269c46bffcf6ed839c97c8                                                                                                                                                                                                                                3.3s
 => => extracting sha256:ebc4963c7ce64184d1f8c6a972447a1a7bd747b1e669ecc64ad102adcbdee9e1                                                                                                                                                                                                                                4.7s
 => [internal] load build context                                                                                                                                                                                                                                                                                        0.0s
 => => transferring context: 31.13kB                                                                                                                                                                                                                                                                                     0.0s
 => [2/9] RUN mkdir -p /app/firmware                                                                                                                                                                                                                                                                                     0.4s
 => [3/9] WORKDIR /app                                                                                                                                                                                                                                                                                                   0.0s
 => [4/9] COPY config/west.yml config/west.yml                                                                                                                                                                                                                                                                           0.0s
 => [5/9] RUN west init -l config                                                                                                                                                                                                                                                                                        0.9s
 => ERROR [6/9] RUN west update                                                                                                                                                                                                                                                                                         55.2s
------
 > [6/9] RUN west update:
#11 0.963 === updating zmk (zmk):
#11 0.964 --- zmk: initializing
#11 0.994 Initialized empty Git repository in /app/zmk/.git/
#11 1.054 --- zmk: fetching, need revision adv360-z3
#11 4.632 From https://github.com/refil/zmk
#11 4.632  * branch            adv360-z3  -> FETCH_HEAD
#11 4.993 HEAD is now at b3322a5e Change default settings
#11 5.340 HEAD is now at b3322a5e Change default settings
#11 5.551 === updating zephyr (zephyr):
#11 5.551 --- zephyr: initializing
#11 5.581 Initialized empty Git repository in /app/zephyr/.git/
#11 5.641 --- zephyr: fetching, need revision v3.0.0+zmk-fixes with --depth 1
#11 50.95 From https://github.com/zmkfirmware/zephyr
#11 50.95  * branch                v3.0.0+zmk-fixes -> FETCH_HEAD
#11 50.96  * [new tag]             v1.0.0         -> v1.0.0
#11 50.96  * [new tag]             v1.1.0         -> v1.1.0
#11 50.96  * [new tag]             v1.1.0-rc1     -> v1.1.0-rc1
#11 50.96  * [new tag]             v1.10.0        -> v1.10.0
#11 50.96  * [new tag]             v1.10.0-rc1    -> v1.10.0-rc1
#11 50.96  * [new tag]             v1.10.0-rc2    -> v1.10.0-rc2
#11 50.96  * [new tag]             v1.10.0-rc3    -> v1.10.0-rc3
#11 50.96  * [new tag]             v1.11.0        -> v1.11.0
#11 50.96  * [new tag]             v1.11.0-rc1    -> v1.11.0-rc1
#11 50.96  * [new tag]             v1.11.0-rc2    -> v1.11.0-rc2
#11 50.96  * [new tag]             v1.11.0-rc3    -> v1.11.0-rc3
#11 50.97  * [new tag]             v1.12.0        -> v1.12.0
#11 50.97  * [new tag]             v1.12.0-rc1    -> v1.12.0-rc1
#11 50.97  * [new tag]             v1.12.0-rc2    -> v1.12.0-rc2
#11 50.97  * [new tag]             v1.12.0-rc3    -> v1.12.0-rc3
#11 50.97  * [new tag]             v1.13.0        -> v1.13.0
#11 50.97  * [new tag]             v1.13.0-rc1    -> v1.13.0-rc1
#11 50.97  * [new tag]             v1.13.0-rc2    -> v1.13.0-rc2
#11 50.97  * [new tag]             v1.13.0-rc3    -> v1.13.0-rc3
#11 50.97  * [new tag]             v1.14.0        -> v1.14.0
#11 50.97  * [new tag]             v1.14.0-rc1    -> v1.14.0-rc1
#11 50.97  * [new tag]             v1.14.0-rc2    -> v1.14.0-rc2
#11 50.97  * [new tag]             v1.14.0-rc3    -> v1.14.0-rc3
#11 50.97  * [new tag]             v1.14.1        -> v1.14.1
#11 50.97  * [new tag]             v1.14.1-rc1    -> v1.14.1-rc1
#11 50.97  * [new tag]             v1.14.1-rc2    -> v1.14.1-rc2
#11 50.97  * [new tag]             v1.14.1-rc3    -> v1.14.1-rc3
#11 50.97  * [new tag]             v1.14.2        -> v1.14.2
#11 50.97  * [new tag]             v1.2.0         -> v1.2.0
#11 50.97  * [new tag]             v1.2.0-rc1     -> v1.2.0-rc1
#11 50.97  * [new tag]             v1.2.0-rc2     -> v1.2.0-rc2
#11 50.97  * [new tag]             v1.3.0         -> v1.3.0
#11 50.97  * [new tag]             v1.3.0-rc1     -> v1.3.0-rc1
#11 50.97  * [new tag]             v1.3.0-rc2     -> v1.3.0-rc2
#11 50.97  * [new tag]             v1.4.0         -> v1.4.0
#11 50.97  * [new tag]             v1.4.0-rc1     -> v1.4.0-rc1
#11 50.97  * [new tag]             v1.4.0-rc2     -> v1.4.0-rc2
#11 50.97  * [new tag]             v1.4.0-rc3     -> v1.4.0-rc3
#11 50.97  * [new tag]             v1.5.0         -> v1.5.0
#11 50.97  * [new tag]             v1.5.0-rc0     -> v1.5.0-rc0
#11 50.97  * [new tag]             v1.5.0-rc1     -> v1.5.0-rc1
#11 50.97  * [new tag]             v1.5.0-rc2     -> v1.5.0-rc2
#11 50.97  * [new tag]             v1.5.0-rc3     -> v1.5.0-rc3
#11 50.97  * [new tag]             v1.5.0-rc4     -> v1.5.0-rc4
#11 50.97  * [new tag]             v1.6.0         -> v1.6.0
#11 50.97  * [new tag]             v1.6.0-rc1     -> v1.6.0-rc1
#11 50.97  * [new tag]             v1.6.0-rc2     -> v1.6.0-rc2
#11 50.97  * [new tag]             v1.6.0-rc3     -> v1.6.0-rc3
#11 50.97  * [new tag]             v1.6.0-rc4     -> v1.6.0-rc4
#11 50.97  * [new tag]             v1.6.1         -> v1.6.1
#11 50.97  * [new tag]             v1.6.1-rc      -> v1.6.1-rc
#11 50.97  * [new tag]             v1.6.99        -> v1.6.99
#11 50.97  * [new tag]             v1.7.0         -> v1.7.0
#11 50.97  * [new tag]             v1.7.0-rc1     -> v1.7.0-rc1
#11 50.97  * [new tag]             v1.7.0-rc2     -> v1.7.0-rc2
#11 50.97  * [new tag]             v1.7.0-rc3     -> v1.7.0-rc3
#11 50.97  * [new tag]             v1.7.0-rc4     -> v1.7.0-rc4
#11 50.97  * [new tag]             v1.7.1         -> v1.7.1
#11 50.97  * [new tag]             v1.7.1-rc      -> v1.7.1-rc
#11 50.97  * [new tag]             v1.7.99        -> v1.7.99
#11 50.97  * [new tag]             v1.8.0         -> v1.8.0
#11 50.97  * [new tag]             v1.8.0-rc1     -> v1.8.0-rc1
#11 50.97  * [new tag]             v1.8.0-rc2     -> v1.8.0-rc2
#11 50.97  * [new tag]             v1.8.0-rc3     -> v1.8.0-rc3
#11 50.97  * [new tag]             v1.8.0-rc4     -> v1.8.0-rc4
#11 50.97  * [new tag]             v1.8.99        -> v1.8.99
#11 50.97  * [new tag]             v1.9.0         -> v1.9.0
#11 50.97  * [new tag]             v1.9.0-rc1     -> v1.9.0-rc1
#11 50.97  * [new tag]             v1.9.0-rc2     -> v1.9.0-rc2
#11 50.97  * [new tag]             v1.9.0-rc3     -> v1.9.0-rc3
#11 50.97  * [new tag]             v1.9.0-rc4     -> v1.9.0-rc4
#11 50.97  * [new tag]             v1.9.1         -> v1.9.1
#11 50.97  * [new tag]             v1.9.2         -> v1.9.2
#11 50.97  * [new tag]             v2.0.0         -> v2.0.0
#11 50.97  * [new tag]             v2.0.0-rc1     -> v2.0.0-rc1
#11 50.97  * [new tag]             v2.0.0-rc2     -> v2.0.0-rc2
#11 50.97  * [new tag]             v2.0.0-rc3     -> v2.0.0-rc3
#11 50.97  * [new tag]             v2.1.0         -> v2.1.0
#11 50.97  * [new tag]             v2.1.0-rc1     -> v2.1.0-rc1
#11 50.97  * [new tag]             v2.1.0-rc2     -> v2.1.0-rc2
#11 50.97  * [new tag]             v2.1.0-rc3     -> v2.1.0-rc3
#11 50.97  * [new tag]             v2.2.0         -> v2.2.0
#11 50.97  * [new tag]             v2.2.0-rc1     -> v2.2.0-rc1
#11 50.97  * [new tag]             v2.2.0-rc2     -> v2.2.0-rc2
#11 50.97  * [new tag]             v2.2.0-rc3     -> v2.2.0-rc3
#11 50.97  * [new tag]             v2.2.1         -> v2.2.1
#11 50.97  * [new tag]             v2.3.0         -> v2.3.0
#11 50.97  * [new tag]             v2.3.0-rc1     -> v2.3.0-rc1
#11 50.97  * [new tag]             v2.3.0-rc2     -> v2.3.0-rc2
#11 50.97  * [new tag]             v2.4.0         -> v2.4.0
#11 50.98  * [new tag]             v2.4.0-rc1     -> v2.4.0-rc1
#11 50.98  * [new tag]             v2.4.0-rc2     -> v2.4.0-rc2
#11 50.98  * [new tag]             v2.4.0-rc3     -> v2.4.0-rc3
#11 50.98  * [new tag]             zephyr-v1.0.0  -> zephyr-v1.0.0
#11 50.98  * [new tag]             zephyr-v1.1.0  -> zephyr-v1.1.0
#11 50.98  * [new tag]             zephyr-v1.10.0 -> zephyr-v1.10.0
#11 50.98  * [new tag]             zephyr-v1.11.0 -> zephyr-v1.11.0
#11 50.98  * [new tag]             zephyr-v1.12.0 -> zephyr-v1.12.0
#11 50.98  * [new tag]             zephyr-v1.13.0 -> zephyr-v1.13.0
#11 50.98  * [new tag]             zephyr-v1.14.0 -> zephyr-v1.14.0
#11 50.98  * [new tag]             zephyr-v1.14.1 -> zephyr-v1.14.1
#11 50.98  * [new tag]             zephyr-v1.2.0  -> zephyr-v1.2.0
#11 50.98  * [new tag]             zephyr-v1.3.0  -> zephyr-v1.3.0
#11 50.98  * [new tag]             zephyr-v1.4.0  -> zephyr-v1.4.0
#11 50.98  * [new tag]             zephyr-v1.5.0  -> zephyr-v1.5.0
#11 50.98  * [new tag]             zephyr-v1.6.0  -> zephyr-v1.6.0
#11 50.98  * [new tag]             zephyr-v1.6.1  -> zephyr-v1.6.1
#11 50.98  * [new tag]             zephyr-v1.7.0  -> zephyr-v1.7.0
#11 50.98  * [new tag]             zephyr-v1.7.1  -> zephyr-v1.7.1
#11 50.98  * [new tag]             zephyr-v1.8.0  -> zephyr-v1.8.0
#11 50.98  * [new tag]             zephyr-v1.9.0  -> zephyr-v1.9.0
#11 50.98  * [new tag]             zephyr-v1.9.1  -> zephyr-v1.9.1
#11 50.98  * [new tag]             zephyr-v1.9.2  -> zephyr-v1.9.2
#11 50.98  * [new tag]             zephyr-v2.0.0  -> zephyr-v2.0.0
#11 50.98  * [new tag]             zephyr-v2.1.0  -> zephyr-v2.1.0
#11 50.98  * [new tag]             zephyr-v2.2.0  -> zephyr-v2.2.0
#11 50.98  * [new tag]             zephyr-v2.2.1  -> zephyr-v2.2.1
#11 50.98  * [new tag]             zephyr-v2.3.0  -> zephyr-v2.3.0
#11 50.98  * [new tag]             zephyr-v2.4.0  -> zephyr-v2.4.0
#11 54.31 HEAD is now at 8adeab429 drivers: clock_control: nrf_clock_calibration: remove errata workaround
#11 54.64 HEAD is now at 8adeab429 drivers: clock_control: nrf_clock_calibration: remove errata workaround
#11 54.93 FATAL ERROR: Schema validation failed:
#11 54.93  - Key 'groups' was not defined. Path: '/projects/2'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/3'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/4'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/5'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/6'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/7'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/8'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/9'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/10'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/11'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/12'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/13'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/14'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/15'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/16'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/17'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/18'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/19'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/20'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/21'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/22'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/23'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/24'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/25'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/26'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/30'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/32'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/34'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/38'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/42'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/43'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/44'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/45'.
#11 54.93  - Key 'groups' was not defined. Path: '/projects/46'.
#11 54.93  - Key 'group-filter' was not defined. Path: ''.
------
executor failed running [/bin/sh -c west update]: exit code: 1

USB logging is enabled by default -- battery life impact?

It appears that USB logging is enabled by default:

https://github.com/KinesisCorporation/Adv360-Pro-ZMK/blob/V2.0/config/boards/arm/adv360/adv360_left_defconfig#L61-L63
https://github.com/KinesisCorporation/Adv360-Pro-ZMK/blob/V2.0/config/boards/arm/adv360/adv360_right_defconfig#L59-L61

The ZMK docs warn against this, due to an impact on power consumption: https://zmk.dev/docs/development/usb-logging

Enabling logging increases the power usage of your keyboard, and can have a non-trivial impact to your time on battery. It is recommended to only enable logging when needed, and not leaving it on by default.

Was this left enabled intentionally? Should it be turned off by default to help conserve battery? I've noticed that my keyboard's battery lasts for less time than advertised, and I wonder if this could be partly responsible.

Add french keymap

It seams that i can't use azerty default keymap (french layout).
any suggestions?
thank you

Right half doesn't reconnect if keyboard is shut off while in bluetooth profile other than 1

This may be related to #65 and I posted a comment in that thread to describe a set of repeatable steps, which I've updated here based on another experience:

  1. Press [Mod] 3 (to switch to a Bluetooth profile other than 1).
  2. Count to 20 (or 10 if you're impatient).
  3. Flip the power switch of each module on simultaneously.
  4. Observe the right module's three LEDs blinking red.

I had initially thought this was some how associated with Bluetooth profiles that are undefined, but it happens in profile 2 for me as well, which is connected to my phone. After several attempts to get them to reconnect with synchronized power cycles, I was able to get them to reconnect through some unusual steps with my phone. I'm not sure which part caused them to reconnect with each other, but here they are:

  1. Disable Bluetooth on phone.
  2. Wait 10 seconds.
  3. Enable Bluetooth on phone and select the keyboard to connect.
  4. Wait for connection to fail.
  5. Power cycle both keyboards at the same time.
  6. Watch keyboard connect automatically via Bluetooth with both modules communicating again.

The alternative would be to press both reset buttons simultaneously. That works as well, and it's what I used when it was stuck in an unpaired Bluetooth profile.

I have no trouble turning them to reconnect if they're in profile 1.

Can someone else confirm if they are able to repeat this experience?

Warnings: Node.js 12 actions, `save-state` command & `set-output` command are deprecated

Everything is working at the moment, but I am getting these warning messages for each build. What do I need to do?

Annotations
4 warnings

Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: actions/checkout, actions/cache, actions/upload-artifact, actions/cache, actions/checkout

The `save-state` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

The `save-state` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Num Lock status LED only works if the left side is plugged in to the PC

With both sides connected via bluetooth, the Num Lock status LED does not turn on.

It appears that the functionality of num lock is correct, just that the status LED doesn't work. I have my Advantage2 also connected, and I can see the status light change on that keyboard, but not on the Adv360.

can't flash onto the right side

I can't flash the latest v2.0 754f133 onto the right side (even though the left side seems to work fine). After copying the file, the unit keeps flashing red. And then won't connect when turned on.

I've downloaded the build from the GH Actions, and it doesn't seem to work.

Mod Morphs without keep_mods applies modifier to the first press of the modded binding

Here is a branch made directly from the v2.0 repo here.

In the most recent commit, you can see I added this behavior:

	pd3: prog_dvorak_rcurly_three_def {
		compatible = "zmk,behavior-mod-morph";
		label = "pd3";
		mods = <(MOD_LSFT|MOD_RSFT)>;
		#masked_mods = <(MOD_LSFT|MOD_RSFT)>;
		#binding-cells = <0>;
		bindings = <&kp RBRC>, <&kp N3>;
	};

and bound it to the 4th key (3) in the top left of the left half.

The output without shift is as expected: }

The Problem

The output when holding shift is not.
The first time 3 is pressed while holding shift: #
Subsequent presses while still holding the same modifier: 3

Only 3 should be output by this mod morph when holding shift.

It doesn't matter how long you hold shift before the first press of the key. It is always #. All further presses are 3s (until you let go of the shift).

I raised this in the zmk discord in the help-forum and bravekarma was kind enough to attempt reproduction on what they said was basically zmkfirmware/main. They were not able to duplicate. only a 3 is output while holding shift.

The suggestion is that this might be fixed if the refil/zmk/adv360-z3 was brought up to match zmkfirmware/main.

The mod morph should not pass the modifiers on unless keep_mods is specified.

Mod Morphs in general are working. I guess the theory is that something has been fixed since refil/main was forked.

Flashing fails with "unexpected error" on macOS 13

I get the following error when attempting to copy either my custom firmware or the settings-reset.uf2 file (from the V2.0 branch) to my keyboard's mounted volume:

The operation can't be completed because an unexpected error occurred (error code 100093).

The const name of that code is kPOSIXErrorENOATTR = 100093. I've tried rebooting my computer to no avail.

This is the first time I've tried flashing my Adv360 since updating the host OS to macOS 13.0 (Ventura), and I've successfully flashed my keyboard many times before updating to macOS 13. Considering that and the specific error code, it seems likely that something changed in the filesystem protocol across major macOS versions. Perhaps others can report whether they've successfully flashed while running macOS 13?

My keyboard is still running firmware built on the V1.0 branch. (This came up while rebasing my customizations from the V2.0 branch.)

Build fails when using &macro_press, &macro_wait_for_release, and &macro_release in macros.dtsi

When adding a macro that uses syntax from the ZMK Macro Documentation, the build fails with the errors:

adv360_left.dts.pre.tmp:784.42-793.3: ERROR (phandle_references): /behaviors/macro_vscode_format: Reference to non-existent node or label "macro_press"

adv360_left.dts.pre.tmp:784.42-793.3: ERROR (phandle_references): /behaviors/macro_vscode_format: Reference to non-existent node or label "macro_pause_for_release"

adv360_left.dts.pre.tmp:784.42-793.3: ERROR (phandle_references): /behaviors/macro_vscode_format: Reference to non-existent node or label "macro_release"

I added a macro following the documentation creating a macro w/ &macro_press like in the below example pulled from the docs:

bindings
    = <&macro_press &kp LSHFT>
    , <&macro_tap &kp Z &kp M &kp K>
    , <&macro_release &kp LSHFT>
    ;

I am attempting to create a macro that will run the VSCode format keyboard shortcut, which entails chording 3 keys together, I added my macro as:

macro_vscode_format: macro_vscode_format {
    label = "macro_vscode_format";
    compatible = "zmk,behavior-macro";
    #binding-cells = <0>;
    bindings
        = <&macro_press &kp LSHFT &kp LALT &kp F>
        , <&macro_pause_for_release>
        , <&macro_release &kp LSHFT &kp LALT &kp F>
        ;
};

And got the above referenced build error.

What am I doing wrong?

Community PRs

Hey guys, will you accept PRs from users? I feel like there's some quality of life things I could add to the repo (e.g. commented keyboard layouts in the .keymap file etc.). It might help people relatively new to keyboard configuration to add their own keymaps if they can see what's going on easier.

I cannot type grave any more; only getting §

My macOS keyboard layout is US.

Everything was fine until I flashed the keyboard today.

Happens locally as well as with the GitHub actions.

My fork

Perhaps the issue is in the zmk repo? I wouldn't know where to even look.

can't seem to switch default layers versus toggling

This may be a ZMK-specific question, but it seems like missing a pretty fundamental use case for this kb as a user coming from previous Kinesis Advantage2 QD, where I would swap back and forth from QWERTY->DVORAK multiple times a day, and still enjoy the same mod layer support in either 'base' layer.

How can I change the default layer with ZMK? It doesn't seem to implement the fairly fundamental eg what looks like &df in QMK. I simply want to go a DVORAK layer without the 'mod' light coming on and thereby disabling all other mod functionality (eg turning on keypad), because I am already considered to be in a 'mod' layer. Neither &to or &tog accomplish this.

Where is the missing info here? Given this would be the first thing a lot of users do - simply replicate the QWERTY->DVORAK switching capability present on their old keyboard, but using ZMK, it would probably be a good idea to have a default 'Advantage 2QD' keymap download to get started here :)

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.