Xây dựng firmware từ mã nguồn
Nếu bạn muốn thực hiện thay đổi cho ánh xạ phím bàn phím hoặc thêm hỗ trợ cho bàn phím mới trong giao thức QMK của SignalRGB, bạn phải xây dựng firmware từ mã nguồn.
Các bước để xây dựng từ mã nguồn:
- Tải và cài đặt QMK MSYS từ đây.

Mở QMK MSYS và thực thi git clone fork QMK / mã nguồn bạn cần. (Đây có thể là QMK Mainline _hoặc SonixQMK.)
Sau đó bạn phải thêm submodule giao thức SignalRGB vào fork mã nguồn bạn đang biên dịch:
// cd vào fork mã nguồn bạn đang biên dịch trong terminal (QMK_MSYS, bash v.v.)git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgbgit submodule update --init --recursive- Dán hai lệnh trên vào cửa sổ terminal (QMK_MSYS, bash v.v.).
- Bạn phải tạo keymap.json với nội dung sau trong thư mục thương hiệu bàn phím cụ thể:
{ "modules": [ "signalrgb" ]}LƯU Ý: THAY THẾ “KEYBOARD BRAND” BẰNG THƯƠNG HIỆU BÀN PHÍM CỦA BẠN, “MODEL” BẰNG MODEL BÀN PHÍM VÀ “KM” BẰNG LOẠI KEYMAP (default / via / keychron / v.v.).
CÁC LOẠI KEYMAP:
- default: Đây là keymap bạn sử dụng khi không biên dịch cho VIA.
- via: Đây là keymap bạn sử dụng khi biên dịch cho VIA. (Hãy thử điều này trước — bạn có thể tìm keymap VIA của mình tại đây)

- Nếu firmware không thể biên dịch, tham gia Discord và yêu cầu trợ giúp trong các kênh QMK.
Sau khi biên dịch firmware, bạn phải flash nó vào bàn phím.
- Bạn phải tìm kiếm trực tuyến hướng dẫn flash cho bàn phím của mình, vì hướng dẫn khác nhau giữa các bàn phím.
- Sau khi flash bàn phím, bạn cần tùy chỉnh plugin bàn phím bên dưới để SignalRGB hoạt động với bàn phím của bạn.
- Sau khi tải plugin bàn phím ở trên, hãy mở nó trong trình soạn thảo văn bản.
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"}, ];}- Sau khi mở plugin bàn phím, bạn sẽ thấy màn hình tương tự như trên.
- Bạn cần điền vào một số trường này, bắt đầu từ trường Name.
- Trường Name phải được điền bằng tên của bàn phím bạn đã phát triển firmware.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Tiếp theo chúng ta cần nhập VendorId cho bàn phím.
- Để tìm VendorId cho bàn phím, hãy mở SignalRGB.
- Sau đó nhấp vào bánh răng cài đặt ở góc dưới bên trái.

Nhấp vào “Thông tin thiết bị”.

Tìm bàn phím và ghi lại VendorID và ProductID.


Bây giờ nhập VendorId và ProductId với các giá trị này.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- Trường tiếp theo cần điền là trường Publisher. Trong trường Publisher bạn có thể nhập tên, tên người dùng hoặc biệt danh của mình.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Bây giờ chúng ta đã xong với việc điền vào các trường và chuyển sang các mảng.
Có 3 mảng cần sửa đổi: vKeys, vKeynames và vKeyPositions.

- Mảng vKeys ánh xạ từng phím bàn phím sang vị trí của nó trong dữ liệu RGB được gửi đến bàn phím.
- Mảng vKeyNames cho chúng ta biết phím nào tương ứng với mỗi vKey và vKeyPosition.
- Mảng vKeyPositions cho SignalRGB biết mỗi phím nằm ở đâu về vị trí trên bàn phím.
- Trước tiên hãy sửa đổi mảng vKeyNames để phản ánh bàn phím của bạn.
- Điều đó có nghĩa là bạn phải sắp xếp lại vKeyNames để khớp với bàn phím của bạn.
- Trong trường hợp của chúng ta, chúng ta phải xóa các phím và sắp xếp lại những phím còn lại, vì PCB của chúng ta là PCB TKL.

Sau đó cập nhật mảng vKeyPositions theo cách tương tự như mảng vKeyNames được cập nhật.

Cuối cùng cập nhật mảng vKeys để khớp với mảng vKeyNames và vKeysPositions.

- Bây giờ lưu tệp plugin vào %userprofile%/Documents/WhirlwindFX/plugins và khởi động lại Signal.
- Bàn phím của bạn bây giờ sẽ sáng và phản hồi với SignalRGB.
Nếu bàn phím không sáng hoặc không phản hồi đúng với SignalRGB:
Phần tiêu đề “Nếu bàn phím không sáng hoặc không phản hồi đúng với SignalRGB:”- Đi đến trang Thiết bị trong SignalRGB.

- Điều hướng đến bàn phím và nhấp vào bánh răng cài đặt.

- Nhấp vào công tắc “Hiển thị console”.

- Console sẽ hiển thị tổng số LED thiết bị. So sánh tổng số này với số LED bạn đã gán.
- Trong trường hợp của chúng ta, có tổng cộng 119 LED.
Nếu số LED khớp với số vKeys:
Phần tiêu đề “Nếu số LED khớp với số vKeys:”- Đảm bảo trường Size của plugin lớn hơn một so với tọa độ LED cao nhất của bạn theo mỗi hướng:
- Trong trường hợp của chúng ta, LED xa nhất nằm ở vị trí [17,6], vì vậy trường Size phải là [18,7].
export function Size() { return [18, 7]; }Nếu số LED không khớp với số vKeys:
Phần tiêu đề “Nếu số LED không khớp với số vKeys:”- Bạn phải thêm vKeys, vKeyPositions và vKeyNames để khớp với tổng số LED.
- Trong trường hợp của chúng ta, thiết bị có 119 LED, vì vậy chúng ta phải thêm 32 LED underglow bàn phím.



- Nếu số vKeys khớp với tổng số LED và thiết bị được định kích thước đúng, nhưng các LED được ánh xạ sai:
- Tham gia Discord và yêu cầu trợ giúp trong các kênh QMK.
Cách giải quyết vấn đề nhấp nháy đèn chỉ báo LED (CAPSLOCK, NUMLOCK, SCROLL-LOCK) khi SignalRGB và phím đang hoạt động.
Phần tiêu đề “Cách giải quyết vấn đề nhấp nháy đèn chỉ báo LED (CAPSLOCK, NUMLOCK, SCROLL-LOCK) khi SignalRGB và phím đang hoạt động.”Điều này có phần phức tạp hơn, vì nó yêu cầu kiến thức trước về các giá trị chỉ số cho các chỉ báo (CAPS, NUM, SCROLL). (Chúng thường nằm trong danh mục con ansi/iso của thiết bị hoặc trực tiếp trong <keyboard_name.c> — tìm kiếm g_led_config và kết nối trực quan chỉ số với phím tương ứng. Ngoài ra, khi plugin SignalRGB của bạn hoạt động, bạn có thể lấy ID từ đó và biên dịch lại với thay đổi này!)

Khi bạn biết các giá trị trên, cần thực hiện một sửa đổi nhỏ trong signalrgb.c hoặc via.c, tùy thuộc vào build firmware của bạn. Thay thế CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX hoặc SCROLL_LOCK_LED_INDEX bằng các giá trị chỉ số cho bàn phím của bạn.
Nếu chỉ số CAPS_LOCK là 61, dòng này:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {trở thành dòng này:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {Ví dụ mã đầy đủ (Thao tác này thay thế hoàn toàn hàm “led_streaming” cụ thể này):
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); } }}** Tham gia Discord và yêu cầu trợ giúp trong kênh QMK-Custom-Builds nếu bạn gặp vấn đề với các hướng dẫn trên! **