From: Simon Glass <sjg@chromium.org> Change the mouse_button structure to use a bool pressed field instead of an unsigned char press_state. This simplifies the API by using a natural boolean type for a binary state. Remove the BUTTON_PRESSED/BUTTON_RELEASED defines as they're no longer needed. Update all mouse drivers, tests, and the mouse command to use the new field name and type. Co-developed-by: Claude <noreply@anthropic.com> Signed-off-by: Simon Glass <sjg@chromium.org> --- Changes in v2: - Add new patch to replace press_state with bool pressed arch/sandbox/cpu/sdl.c | 4 +--- cmd/mouse.c | 2 +- drivers/input/efi_mouse.c | 2 +- drivers/input/mouse-uclass.c | 5 ++--- drivers/input/usb_mouse.c | 2 +- include/mouse.h | 7 ++----- test/dm/mouse.c | 16 ++++++++-------- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c index c3745fa660e..dd2589c64e2 100644 --- a/arch/sandbox/cpu/sdl.c +++ b/arch/sandbox/cpu/sdl.c @@ -110,9 +110,7 @@ static void sandbox_sdl_poll_events(void) m->button.button = BUTTON_MIDDLE; else if (event.button.button == SDL_BUTTON_RIGHT) m->button.button = BUTTON_RIGHT; - m->button.press_state = event.type == - SDL_MOUSEBUTTONDOWN ? - BUTTON_PRESSED : BUTTON_RELEASED; + m->button.pressed = event.type == SDL_MOUSEBUTTONDOWN; m->button.x = event.button.x; m->button.y = event.motion.y; break; diff --git a/cmd/mouse.c b/cmd/mouse.c index 60210b9f868..ebf496307b9 100644 --- a/cmd/mouse.c +++ b/cmd/mouse.c @@ -35,7 +35,7 @@ static int do_mouse_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct mouse_button *but = &evt.button; printf("button: button==%d, press=%d, clicks=%d, X=%d, Y=%d\n", - but->button, but->press_state, + but->button, but->pressed, but->clicks, but->x, but->y); break; } diff --git a/drivers/input/efi_mouse.c b/drivers/input/efi_mouse.c index 84347951f62..077e2148da9 100644 --- a/drivers/input/efi_mouse.c +++ b/drivers/input/efi_mouse.c @@ -78,7 +78,7 @@ static int efi_mouse_get_event(struct udevice *dev, struct mouse_event *event) u8 mask = 1 << i; if (diff & mask) { but->button = i; - but->press_state = (new_buttons & mask) ? 1 : 0; + but->pressed = (new_buttons & mask) ? true : false; but->clicks = 1; but->x = priv->x; but->y = priv->y; diff --git a/drivers/input/mouse-uclass.c b/drivers/input/mouse-uclass.c index 43b6514f926..6bfce915e2b 100644 --- a/drivers/input/mouse-uclass.c +++ b/drivers/input/mouse-uclass.c @@ -51,18 +51,17 @@ int mouse_get_click(struct udevice *dev, struct vid_pos *pos) /* Only process button events for left button */ if (event.type == MOUSE_EV_BUTTON && event.button.button == BUTTON_LEFT) { - bool pressed = event.button.press_state == BUTTON_PRESSED; bool pending = false; /* Detect press->release transition (click) */ - if (uc_priv->left_pressed && !pressed) { + if (uc_priv->left_pressed && !event.button.pressed) { pending = true; uc_priv->click_pos.x = event.button.x; uc_priv->click_pos.y = event.button.y; } /* Update button state */ - uc_priv->left_pressed = pressed; + uc_priv->left_pressed = event.button.pressed; /* If we just detected a click, return it */ if (pending) { diff --git a/drivers/input/usb_mouse.c b/drivers/input/usb_mouse.c index 74f093a4b5a..456d84d5e39 100644 --- a/drivers/input/usb_mouse.c +++ b/drivers/input/usb_mouse.c @@ -142,7 +142,7 @@ static int usb_mouse_get_event(struct udevice *dev, struct mouse_event *event) if (diff && mask) { but->button = i; - but->press_state = priv->buttons & mask; + but->pressed = priv->buttons & mask; but->clicks = 1; but->x = priv->x; but->y = priv->y; diff --git a/include/mouse.h b/include/mouse.h index 96b75ae1fa6..62cabf24769 100644 --- a/include/mouse.h +++ b/include/mouse.h @@ -27,9 +27,6 @@ enum mouse_state_t { BUTTON_SCROLL_MINUS = 1 << 4, }; -#define BUTTON_RELEASED 0 -#define BUTTON_PRESSED 1 - /** * struct mouse_uc_priv - pre-device private data for mouse uclass * @@ -74,14 +71,14 @@ struct mouse_event { /** * @button: Button number that was pressed/released (BUTTON_...) - * @state: BUTTON_PRESSED / BUTTON_RELEASED + * @pressed: True if button was pressed, false if released * @clicks: number of clicks (normally 1; 2 = double-click) * @x: X position of mouse * @y: Y position of mouse */ struct mouse_button { unsigned char button; - unsigned char press_state; + bool pressed; unsigned char clicks; unsigned short x; unsigned short y; diff --git a/test/dm/mouse.c b/test/dm/mouse.c index c22cd026cb2..893644005cc 100644 --- a/test/dm/mouse.c +++ b/test/dm/mouse.c @@ -75,7 +75,7 @@ static int dm_test_mouse_button(struct unit_test_state *uts) /* inject a button press event */ inject.type = MOUSE_EV_BUTTON; inject.button.button = BUTTON_LEFT; - inject.button.press_state = BUTTON_PRESSED; + inject.button.pressed = true; inject.button.clicks = 1; inject.button.x = 150; inject.button.y = 250; @@ -86,7 +86,7 @@ static int dm_test_mouse_button(struct unit_test_state *uts) ut_assertok(mouse_get_event(dev, &event)); ut_asserteq(MOUSE_EV_BUTTON, event.type); ut_asserteq(BUTTON_LEFT, event.button.button); - ut_asserteq(BUTTON_PRESSED, event.button.press_state); + ut_asserteq(true, event.button.pressed); ut_asserteq(1, event.button.clicks); ut_asserteq(150, event.button.x); ut_asserteq(250, event.button.y); @@ -112,7 +112,7 @@ static int dm_test_mouse_click(struct unit_test_state *uts) /* inject a left button press */ inject.type = MOUSE_EV_BUTTON; inject.button.button = BUTTON_LEFT; - inject.button.press_state = BUTTON_PRESSED; + inject.button.pressed = true; inject.button.clicks = 1; inject.button.x = 300; inject.button.y = 400; @@ -128,7 +128,7 @@ static int dm_test_mouse_click(struct unit_test_state *uts) /* inject a left button release */ inject.type = MOUSE_EV_BUTTON; inject.button.button = BUTTON_LEFT; - inject.button.press_state = BUTTON_RELEASED; + inject.button.pressed = false; inject.button.clicks = 1; inject.button.x = 300; inject.button.y = 400; @@ -161,7 +161,7 @@ static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts) /* inject press and release to create a click */ inject.type = MOUSE_EV_BUTTON; inject.button.button = BUTTON_LEFT; - inject.button.press_state = BUTTON_PRESSED; + inject.button.pressed = true; inject.button.clicks = 1; inject.button.x = 500; inject.button.y = 600; @@ -170,7 +170,7 @@ static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts) /* process the press event */ ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos)); - inject.button.press_state = BUTTON_RELEASED; + inject.button.pressed = false; sandbox_mouse_inject(dev, &inject); /* now test that click is detected (coordinates are ignored) */ @@ -197,7 +197,7 @@ static int dm_test_mouse_right_button(struct unit_test_state *uts) */ inject.type = MOUSE_EV_BUTTON; inject.button.button = BUTTON_RIGHT; - inject.button.press_state = BUTTON_PRESSED; + inject.button.pressed = true; inject.button.clicks = 1; inject.button.x = 100; inject.button.y = 200; @@ -205,7 +205,7 @@ static int dm_test_mouse_right_button(struct unit_test_state *uts) ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos)); - inject.button.press_state = BUTTON_RELEASED; + inject.button.pressed = false; sandbox_mouse_inject(dev, &inject); /* still no click detected since it was right button */ -- 2.43.0