研究ErgoDox的三個LED燈



最近有空進行測試LED燈的部分,由於目前韌體用的是ErgoDox的組態,因此照規範走只有3個LED燈,我發現,如果透過QMK Configurator產生的.hex是沒有燈號使用的,如果是使用Ergodox EZ Configurator的話,可以顯示0~7層的,透透過 2的3次方方式顯示。我這希望能夠將LED配置到LOCK狀態上,跟一般一樣,有CAPS LOCK、SCREEN LOCK與NUM LOCK,不過這部分似乎得自已寫程式來達成。

後來依照ErgoTaiwan上的教學,研究了一下將QMK程式給裝到電腦上,以便自以撰寫相關程式,並且研究一下別人怎麼寫的,後來改了一下:

檔案路徑:
C:\msys32\home\{帳號名稱}\qmk_firmware\keyboards\ergodox_ez\keymaps\{使用者名稱}

檔名:
keymap.c

process_record_user() 內加了:

      // 如果按下 CAPS LOCK
      case KC_CAPSLOCK:
      if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
          ergodox_right_led_1_off();
      } else {
        ergodox_right_led_1_on();
      }
      return true;

      // 如果按下 SCREEN LOCK
      case KC_SCROLLLOCK:
      if (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
          ergodox_right_led_2_off();
      } else {
        ergodox_right_led_2_on();
      }
      return true;

      // 如果按下 NUM LOCK
      case KC_NUMLOCK:
      if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
          ergodox_right_led_3_off();
      } else {
        ergodox_right_led_3_on();
      }
      return true;
以便檢測是否有按下這三顆按鈕。
另外由 layer_state_t layer_state_set_user(layer_state_t state) 的第0層內也加入了:
        
        // 檢查三個 LOCK 狀態
        if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
          ergodox_right_led_1_on();
        } else {
          ergodox_right_led_1_off();
        }
        if (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
          ergodox_right_led_2_on();
        } else {
          ergodox_right_led_2_off();
        }
        if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
          ergodox_right_led_3_on();
        } else {
           ergodox_right_led_3_off();
        }
以便切換回第0層時,再把狀態給改回來,不過這裡是因為原始的層燈號與LOCK燈號共同使用,所以才需要這樣清理。
另外我也發現,如果裝了另一個一般鍵盤,由一般鍵盤去切換LOCK狀態時,並不會引起這QMK上的燈號改變,但從QMK的鍵盤去變更LOCK狀態時,一般鍵盤的燈號卻是可以正常連動,所以這部分應該就不是寫到這個部分,應該是更高層級的地方,但暫時還沒研究到,就先記錄到這。
要注意的是:
keymap.c內的
    #define BASE 0 // default layer
這行不要刪除掉,要至少保留一個define名稱,否則之後產生的.hex無法使用LED燈。

留言