マウス速度の切り替え機能を追加しました
WindowsとLinux(Ubuntu)ではマウスの速度(感度)が違うという問題がありました。
DeskHopを使えば、このような問題も解決できると考え、この機能をもともと計画して、スイッチを追加していました。
github.com
機能概要
機能の概要は以下のようになります。
・main loopでスイッチを読み取る
・スイッチに関連する機能はswitch.c
swich.h
に追加
・グローバル変数としてbool型のBisLinux
を持つ
・BisLinux
に応じてマウスの速度を切り替える
スイッチはmain loopで読み取ります。
スイッチは指定したピンの状態を読み取ります。
ここで、スイッチピンは内部プルアップを指定していますので、押されていないときがHIGH、押されたときがLOWになります。
チャタリング対策としてif (!gpio_get(sw))
とwhile (!gpio_get(sw))
を重ねています。
// main.c if (read_SW(PIN_SW)) { update_mouse_speed(device); } // switch.c bool read_SW(uint8_t sw) { // if push swich is pushed if (!gpio_get(sw)) { while (!gpio_get(sw)) { // wait for release } return 1; } return 0; }
マウスの速度は&state->config.output[PICO_B].speed_x
のような形でグローバル変数として保持されていますので、これを状態に応じて書き換えます。
スイッチを押すごとにトグルする形になります。
void update_mouse_speed(device_t *state) { output_t *current = &state->config.output[PICO_B]; if (BisLinux) { current->speed_x = MOUSE_SPEED_B_FACTOR_X; current->speed_y = MOUSE_SPEED_B_FACTOR_Y; } else { current->speed_x = MOUSE_SPEED_A_FACTOR_X; current->speed_y = MOUSE_SPEED_A_FACTOR_Y; } }
また、この機能はPICO B
のみに機能するように設定しました。
#if BOARD_ROLE == PICO_B ~ #endif
まとめ
まずはマウス速度の切り替え機能を実装しました。
次はホイールスクロールの速度変更が出来ないか検討するつもりです。