プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

DeskHopへの機能追加 マウス速度の切り替えスイッチ

マウス速度の切り替え機能を追加しました

WindowsLinux(Ubuntu)ではマウスの速度(感度)が違うという問題がありました。
DeskHopを使えば、このような問題も解決できると考え、この機能をもともと計画して、スイッチを追加していました。
github.com

機能概要

機能の概要は以下のようになります。
・main loopでスイッチを読み取る
・スイッチに関連する機能はswitch.cswich.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

まとめ

まずはマウス速度の切り替え機能を実装しました。
次はホイールスクロールの速度変更が出来ないか検討するつもりです。