跳到內容

從原始碼構建韌體

如果您想對鍵盤的按鍵映射進行任何更改,或為新鍵盤添加對 SignalRGB QMK 協定的支援,您將需要從原始碼構建。

從原始碼構建的步驟:

  1. 此處下載 QMK MSYS 並安裝它。

打開 QMK MSYS 並對您所需的 QMK 分支/原始碼執行 git clone。(這可能是 QMK 主線 SonixQMK)。

然後,您需要將 SignalRGB Protocol 子模組添加到您正在構建的分支原始碼中:

// 在終端機中 cd 到您將要編譯的原始碼分支(QMK_MSYS、bash 等)
git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgb
git submodule update --init --recursive
  1. 將上面兩個命令貼上到(QMK_MSYS、bash 等)終端機視窗中。
  2. 您需要在您特定的鍵盤品牌目錄中添加一個包含以下內容的 keymap.json:
{
"modules": [
"signalrgb"
]
}

注意:請將 KEYBOARD BRAND 替換為您的鍵盤品牌,MODEL 替換為鍵盤型號,KM 替換為按鍵映射類型(default / via / keychron / 等)。

按鍵映射類型:

  • default:如果您不為 VIA 編譯,則使用此按鍵映射
  • via:如果您為 VIA 編譯,則使用此按鍵映射 (您應該先試試這個——您可以在此處找到您的 via 按鍵映射)

  • 如果韌體編譯失敗,加入 Discord 並在 QMK 頻道中尋求幫助。

現在您已編譯了韌體,您需要將其刷入您的鍵盤。

  • 您需要在線上尋找您的鍵盤的刷入說明,因為刷入說明因鍵盤而異。
  1. 刷入鍵盤後,您需要修改以下鍵盤外掛程式以讓 SignalRGB 與您的鍵盤配合工作。

包含 QMK 外掛程式範例的資料夾

  • 下載上述鍵盤外掛程式後,在文字編輯器中開啟它。
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;}
/* global
shutdownColor:readonly
LightingMode:readonly
forcedColor: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"},
];
}
  1. 開啟鍵盤外掛程式後,您將看到類似上面的畫面。
  • 您需要填寫其中一些欄位,從名稱欄位開始。
  • 名稱欄位需要填入您為其開發韌體的鍵盤名稱。
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. 接下來,我們需要填寫鍵盤的 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; }
  1. 接下來需要填寫的欄位是 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"; }
  1. 現在,我們完成了欄位填寫,接下來進入陣列修改。

需要修改 3 個陣列:vKeys、vKeynames 和 vKeyPositions

  • vKeys 陣列將每個鍵盤按鍵映射到發送到鍵盤的 RGBData 中的位置。
  • vKeyNames 陣列告訴我們哪個按鍵對應每個 vKey 和 vKeyPosition。
  • vKeyPositions 陣列告訴 SignalRGB 鍵盤上每個按鍵在位置上的座標。
  • 首先,更改 vKeyNames 陣列以反映您的鍵盤。
  • 這意味著您需要重新排列 vKeyNames,使它們與您的鍵盤匹配。
    • 在我們的例子中,我們不得不刪除按鍵並重新組織其餘按鍵,因為我們的主機板是 TKL 主機板。

然後以與 vKeyNames 陣列相同的方式更新 vKeyPositions 陣列。

最後,更新 vKeys 陣列,使其與 vKeyNames 和 vKeysPositions 陣列匹配。

  1. 現在,將您的外掛程式檔案儲存到 %userprofile%/Documents/WhirlwindFX/plugins,然後重啟 SignalRGB。
  • 您的鍵盤應該開始亮起並對 SignalRGB 作出反應。

如果鍵盤不亮起或對 SignalRGB 反應不正確:

Section titled “如果鍵盤不亮起或對 SignalRGB 反應不正確:”
  1. 前往 SignalRGB 中的裝置頁面。

  1. 接下來,前往您的鍵盤,然後點擊設定齒輪。

  1. 然後,點擊「顯示主控台」切換開關。

  • 主控台中應該有一個裝置 LED 總數。將該裝置 LED 總數與您指派的 LED 數量進行比較。
    • 在我們的例子中,共有 119 個 LED。

如果 LED 數量與您的 vKeys 數量匹配:

Section titled “如果 LED 數量與您的 vKeys 數量匹配:”
  • 確保您的外掛程式的 size 欄位在每個方向上都比您最高的 LED 座標大 1:
    • 在我們的例子中,最遠的 LED 在位置 [17,6],因此我們的 Size 欄位需要是 [18,7]。
export function Size() { return [18, 7]; }

如果 LED 數量與您的 vKeys 數量不匹配:

Section titled “如果 LED 數量與您的 vKeys 數量不匹配:”
  • 您需要添加 vKeys、vKeyPositions 和 vKeyNames 以匹配 LED 總數。
    • 在我們的例子中,裝置有 119 個 LED,所以我們需要為鍵盤的底部發光添加 32 個 LED。

  • 如果 vKeys 的數量與 LED 總數匹配且裝置大小正確,但 LED 映射不正確:
  • 加入 Discord 並在 QMK 頻道中尋求幫助。

如何修復指示燈 LED(CAPSLOCK、NUMLOCK、SCROLL-LOCK)在 SignalRGB 和按鍵啟動時閃爍的問題。

Section titled “如何修復指示燈 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 自訂構建頻道中尋求幫助,如果您有上述說明的任何問題!**