TPS42 조립을 완료하고 나서 부딪혔던 문제는 트랙포인트 작동이 원활하지 않았다는 점이었습니다. 그래서 최신 QMK 로 펌웨어를 다시 컴파일 하면서 만났던 에러와 해결 방법에 대해서 까먹기 전에 정리 해 둡니다.

들어가기 전에

제목에 “compile”이라는 거창한(?) 단어가 들어갔지만 저는 구글링과 QMK 문서를 보면서 이것저것 넣어보다가 겨우 빌드 시킨것이라서, 왜 작동하지 저는 잘 모릅니다. ㅜ.ㅜ 이점 참고해주세요

빌드 환경

QMK doctor 로 확인한 QMK repo version은 0.21.0입니다.

deprecated in favor of `usb.device_version` in info.json

// ⚠ tps42/rev1: DEVICE_VER in config.h is deprecated in favor of `usb.device_version` in info.json and will be removed at a lat er date
// ⚠ tps42/rev1: MANUFACTURER in config.h is deprecated in favor of `manufacturer` in info.json and will be removed at a later d ate
// ⚠ tps42/rev1: PRODUCT in config.h is deprecated in favor of `keyboard_name` in info.json and will be removed at a later date
// ⚠ tps42/rev1: PRODUCT_ID in config.h is deprecated in favor of `usb.pid` in info.json and will be removed at a later date
// ⚠ tps42/rev1: VENDOR_ID in config.h is deprecated in favor of `usb.vid` in info.json and will be removed at a later date

해결

빌드하는데 문제는 없지만, config.h에서 해당 항목 주석 처리 합니다.

위 항목의 주석 처리 여부와는 상관없이 usb_descriptor.c에서 에러는 발생했습니다.

usb_descriptor.c 오류

Compiling: tmk_core/protocol/lufa/lufa.c                                                            [OK]
Compiling: tmk_core/protocol/usb_descriptor.c                                                      tmk_core/protocol/usb_descriptor.c:455:35: error: 'VENDOR_ID' undeclared here (not in a function)
     .VendorID                   = VENDOR_ID,
                                   ^~~~~~~~~
tmk_core/protocol/usb_descriptor.c:456:35: error: 'PRODUCT_ID' undeclared here (not in a function); did you mean 'PRODUCT'?
     .ProductID                  = PRODUCT_ID,
                                   ^~~~~~~~~~
                                   PRODUCT
tmk_core/protocol/usb_descriptor.c:457:35: error: 'DEVICE_VER' undeclared here (not in a function)
     .ReleaseNumber              = DEVICE_VER,
                                   ^~~~~~~~~~
In file included from tmk_core/protocol/usb_descriptor.c:42:
tmk_core/protocol/usb_descriptor_common.h:21:29: error: 'LMANUFACTURER' undeclared here (not in a function)
 #define USBSTR(s) USBCONCAT(L, s)
                             ^
tmk_core/protocol/usb_descriptor_common.h:20:25: note: in definition of macro 'USBCONCAT'
 #define USBCONCAT(a, b) a##b
                         ^
tmk_core/protocol/usb_descriptor.c:1066:42: note: in expansion of macro 'USBSTR'
         .Size                   = sizeof(USBSTR(MANUFACTURER)),
                                          ^~~~~~
 [ERRORS]
 |
 |
 |
make[1]: *** [builddefs/common_rules.mk:361: .build/obj_tps42_rev1_arc/usb_descriptor.o] 오류 1
Make finished with errors
make: *** [Makefile:392: tps42/rev1:arc] 오류 1

해결

    "manufacturer": "crehmann",
    "usb": {
        "vid": "0xFEED",
        "pid": "0xB077",
        "device_version": "0.0.1"
    },

usb_descriptor.c 관련 에러는 info.json에 manufacture, usb-vid/pid/device_version 정보 추가해서 해결 했습니다.

undefined reference to `pbuf_has_data’

Compiling: tmk_core/protocol/lufa/usb_util.c                                                        [OK]
Linking: .build/tps42_rev1_arc.elf                                                                  [ERRORS]
 |
 | c:/qmk_msys/mingw64/bin/../lib/gcc/avr/12.2.0/../../../../avr/bin/ld.exe: C:\QMK_MSYS\tmp\cc02PJ6m.ltrans0.ltrans.o: in function `.Loc.5103':  | C:\Users\pgh\qmk_firmware/drivers/ps2/ps2_mouse.c:93: undefined reference to `pbuf_has_data'
 | collect2.exe: error: ld returned 1 exit status
 |
make[1]: *** [builddefs/common_rules.mk:268: .build/tps42_rev1_arc.elf] 오류 1
Make finished with errors
make: *** [Makefile:392: tps42/rev1:arc] 오류 1

config.h에 아래 코드 넣어서 해결 했습니다.

#define PS2_MOUSE_USE_REMOTE_MODE

수정 중인 소스코드

기타 키코드 문제 및 사소한 문제들은 qmk 버그 내용을 확인 하시면 손쉽게 수정 가능 하며, 직접 수정하기 어려우신 분들은 소스코드 참고해주시면 될 것 같습니다.

https://github.com/li-fo/tps42

vial 적용 관련

추가로 vial 적용도 진행 했는데, 프로마이크로의 공간 문제로 대부분의 기능이 빠졌습니다.

최대한 줄여서 98byte가 남습니다. 이 때문에 kb2040과 같은 컨트롤러로 변경하고 싶은데, 컨버팅에 에러가 발생해서 막혀있습니다.