소스에서 펌웨어 빌드
SignalRGB QMK 프로토콜의 키보드 키맵을 변경하거나 새 키보드 지원을 추가하려면 소스에서 직접 빌드해야 합니다.
소스에서 빌드하는 단계:

QMK MSYS를 열고 필요한 QMK 포크/소스를 git clone 하십시오. (QMK Mainline 또는 SonixQMK일 수 있습니다).
그런 다음 빌드 대상인 포크 소스에 SignalRGB Protocol 서브모듈을 추가하십시오:
// cd to your source fork you will be compiling against in the terminal (QMK_MSYS, bash, etc)git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgbgit submodule update --init --recursive- 위 두 명령어를 (QMK_MSYS, bash 등) 터미널 창에 붙여 넣으십시오.
- 특정 키보드 브랜드 디렉토리에 다음 내용이 포함된 keymap.json을 추가해야 합니다:
{ "modules": [ "signalrgb" ]}참고: KEYBOARD BRAND는 실제 키보드 브랜드로, MODEL은 키보드 모델로, KM은 키맵 유형(default / via / keychron 등)으로 교체하십시오.
키맵 유형:
- default: VIA용으로 컴파일하지 않는 경우 사용하는 키맵입니다.
- via: VIA용으로 컴파일하는 경우 사용하는 키맵입니다 (먼저 이것을 시도해 보십시오 — via 키맵은 여기에서 찾을 수 있습니다)

- 펌웨어 컴파일에 실패한 경우 Discord에 참여하여 QMK 채널에서 도움을 요청하십시오.
펌웨어를 컴파일했으면 키보드에 플래싱해야 합니다.
- 플래싱 지침은 키보드마다 다르므로 해당 키보드의 플래싱 지침을 온라인에서 직접 찾아보십시오.
- 키보드를 플래싱한 후 아래 키보드 플러그인을 수정하여 SignalRGB가 키보드와 작동하도록 해야 합니다.
- 위의 키보드 플러그인을 다운로드한 후 텍스트 편집기에서 여십시오.
export function Name() { return "QMK Keyboard"; }export function Version() { return "X.X.X"; }export function VendorId() { return 0x0000; }export function ProductId() { return 0x0000; }export function Publisher() { return "WhirlwindFX"; }export function Size() { return [14, 5]; }export function DefaultPosition(){return [10, 100]; }export function DefaultScale(){return 8.0;}/* globalshutdownColor:readonlyLightingMode:readonlyforcedColor:readonly*/export function ControllableParameters(){ return [ {"property":"shutdownColor", "group":"lighting", "label":"Shutdown Color", "min":"0", "max":"360", "type":"color", "default":"009bde"}, {"property":"LightingMode", "group":"lighting", "label":"Lighting Mode", "type":"combobox", "values":["Canvas", "Forced"], "default":"Canvas"}, {"property":"forcedColor", "group":"lighting", "label":"Forced Color", "min":"0", "max":"360", "type":"color", "default":"009bde"}, ];}- 키보드 플러그인을 연 후 위와 유사한 화면이 표시됩니다.
- 일부 필드를 채워야 합니다. Name 필드부터 시작하십시오.
- Name 필드에는 펌웨어를 개발한 키보드의 이름을 입력해야 합니다.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- 다음으로 키보드의 VendorId를 입력해야 합니다.
- 키보드의 VendorId를 찾으려면 SignalRGB를 여십시오.
- 그런 다음 왼쪽 하단의 설정 톱니바퀴를 클릭하십시오.

그런 다음 장치 정보를 클릭하십시오.

키보드를 찾아 VendorID와 ProductID를 메모하십시오.


이제 VendorId 및 ProductId 필드에 이 값들을 입력하십시오.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- 다음으로 입력해야 할 필드는 Publisher 필드입니다. Publisher 필드에는 이름, 사용자명 또는 핸들을 입력할 수 있습니다.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- 이제 필드 입력이 완료되었으며 배열 작업으로 넘어갑니다.
수정해야 할 배열이 3개 있습니다: vKeys, vKeynames, vKeyPositions

- vKeys 배열은 각 키보드 키를 키보드로 전송되는 RGB 데이터 내의 위치에 매핑합니다.
- vKeyNames 배열은 각 vKey 및 vKeyPosition에 해당하는 키를 알려줍니다.
- vKeyPositions 배열은 SignalRGB에 키보드에서 각 키의 위치를 알려줍니다.
- 먼저 vKeyNames 배열을 키보드에 맞게 변경하십시오.
- 즉, 키보드에 맞게 vKeyNames를 재배열해야 합니다.
- 이 경우 TKL 보드이므로 키를 제거하고 나머지를 재구성해야 했습니다.

그런 다음 vKeyNames 배열을 업데이트한 것과 동일한 방식으로 vKeyPositions 배열을 업데이트하십시오.

마지막으로 vKeyNames 및 vKeysPositions 배열과 일치하도록 vKeys 배열을 업데이트하십시오.

- 이제 플러그인 파일을 %userprofile%/Documents/WhirlwindFX/plugins에 저장하고 SignalRGB를 다시 시작하십시오.
- 키보드가 SignalRGB와 함께 켜지고 반응하기 시작해야 합니다.
키보드가 켜지지 않거나 SignalRGB에 제대로 반응하지 않는 경우:
섹션 제목: “키보드가 켜지지 않거나 SignalRGB에 제대로 반응하지 않는 경우:”- SignalRGB에서 장치 페이지로 이동하십시오.

- 키보드로 이동한 다음 설정 톱니바퀴를 클릭하십시오.

- 콘솔 표시 토글을 클릭하십시오.

- 콘솔에 장치 총 LED 수가 표시됩니다. 해당 장치 총 LED 수와 할당한 LED 수를 비교하십시오.
- 이 경우 총 119개의 LED가 있습니다.
LED 수가 보유한 vKeys 수와 일치하는 경우:
섹션 제목: “LED 수가 보유한 vKeys 수와 일치하는 경우:”- 플러그인의 Size 필드가 가장 높은 LED 좌표보다 각 방향으로 1 더 큰지 확인하십시오:
- 이 경우 가장 멀리 있는 LED가 위치 [17,6]에 있으므로 Size 필드는 [18,7]이어야 합니다.
export function Size() { return [18, 7]; }LED 수가 보유한 vKeys 수와 일치하지 않는 경우:
섹션 제목: “LED 수가 보유한 vKeys 수와 일치하지 않는 경우:”- 총 LED 수에 맞게 vKeys, vKeyPositions, vKeyNames를 추가해야 합니다.
- 이 경우 장치에 119개의 LED가 있었으므로 키보드의 언더글로우를 위해 32개의 LED를 추가해야 했습니다.



- vKeys의 수가 총 LED 수와 일치하고 장치 크기가 올바르게 설정되었지만 LED가 잘못 매핑된 경우:
- Discord에 참여하여 QMK 채널에서 도움을 요청하십시오.
인디케이터 LED(CapsLock, NumLock, Scroll Lock)가 SignalRGB와 키가 활성화될 때 깜빡이는 문제 수정 방법
섹션 제목: “인디케이터 LED(CapsLock, NumLock, Scroll Lock)가 SignalRGB와 키가 활성화될 때 깜빡이는 문제 수정 방법”이 작업은 인디케이터(CAPS, NUM, SCROLL)의 인덱스 값을 사전에 알고 있어야 하므로 다소 복잡합니다. (일반적으로 장치 서브타입 ansi/iso 파일 또는 <keyboard_name.c>에서 g_led_config를 찾아 인덱스를 해당 키에 시각적으로 매핑하거나, SignalRGB 플러그인이 작동하면 플러그인에서 ID를 가져와 이 수정과 함께 재컴파일할 수 있습니다!)

위 값들을 알고 나면 펌웨어 빌드에 따라 signalrgb.c 또는 via.c 중 하나를 약간 수정해야 합니다. CAPSLOCK_LED_INDEX, NUM_LOCK_LED_INDEX 또는 SCROLL_LOCK_LED_INDEX를 키보드의 인덱스 값으로 교체하십시오.
예를 들어 CAPS_LOCK 인덱스가 61인 경우 다음 줄:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {이 줄로 변경하십시오:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {전체 코드 예시(이 특정 함수 “led_streaming”을 완전히 교체합니다):
void led_streaming(uint8_t *data) //Stream data from HID Packets to Keyboard.{ uint8_t index = data[1]; uint8_t numberofleds = data[2];
if(numberofleds >= 10) { packet[1] = DEVICE_ERROR_LEDS; raw_hid_send(packet,32); return; }
for (uint8_t i = 0; i < numberofleds; i++) { uint8_t offset = (i * 3) + 3; uint8_t r = data[offset]; uint8_t g = data[offset + 1]; uint8_t b = data[offset + 2];
/* ONLY USE ONE OF THESE */ /* Remove the // from the beginning of the line you wish to use and update the INDEX accordingly */
/* This is for all three CAPS, NUM, and SCROLL LOCKS */ // if ( ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) || ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock) || ((index + i) == SCROLL_LOCK_LED_INDEX && host_keyboard_led_state().scroll_lock)) {
/* This is for CAPS and NUM LOCK */ // if ( ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) || ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock)) {
/* This is for CAPS LOCK */ // if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {
/* This is for NUM LOCK */ // if ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock) {
/* ONLY USE ONE OF THE ABOVE */
rgb_matrix_set_color(index + i, 255, 255, 255); } else { rgb_matrix_set_color(index + i, r, g, b); } }}** Discord에 참여하여 위 지침에 문제가 있는 경우 QMK custom-builds 채널에서 도움을 요청하십시오!**