From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-arm@nongnu.org, qemu-devel@nongnu.org
Subject: [PATCH 4/6] hw/input/stellaris_gamepad: Remove StellarisGamepadButton struct
Date: Tue, 17 Oct 2023 13:23:00 +0100 [thread overview]
Message-ID: <20231017122302.1692902-5-peter.maydell@linaro.org> (raw)
In-Reply-To: <20231017122302.1692902-1-peter.maydell@linaro.org>
Currently for each button on the device we have a
StellarisGamepadButton struct which has the irq, keycode and pressed
state for it. When we convert to qdev, the qdev property and GPIO
APIs are going to require that we have separate arrays for the irqs
and keycodes. Convert from array-of-structs to three separate arrays
in preparation.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/input/stellaris_gamepad.c | 43 ++++++++++++------------------------
1 file changed, 14 insertions(+), 29 deletions(-)
diff --git a/hw/input/stellaris_gamepad.c b/hw/input/stellaris_gamepad.c
index 377101a4035..da974400b59 100644
--- a/hw/input/stellaris_gamepad.c
+++ b/hw/input/stellaris_gamepad.c
@@ -14,15 +14,11 @@
#include "ui/console.h"
typedef struct {
- qemu_irq irq;
- int keycode;
- uint8_t pressed;
-} StellarisGamepadButton;
-
-typedef struct {
- StellarisGamepadButton *buttons;
- int num_buttons;
+ uint32_t num_buttons;
int extension;
+ qemu_irq *irqs;
+ uint32_t *keycodes;
+ uint8_t *pressed;
} StellarisGamepad;
static void stellaris_gamepad_put_key(void * opaque, int keycode)
@@ -40,36 +36,23 @@ static void stellaris_gamepad_put_key(void * opaque, int keycode)
keycode = (keycode & 0x7f) | s->extension;
for (i = 0; i < s->num_buttons; i++) {
- if (s->buttons[i].keycode == keycode
- && s->buttons[i].pressed != down) {
- s->buttons[i].pressed = down;
- qemu_set_irq(s->buttons[i].irq, down);
+ if (s->keycodes[i] == keycode && s->pressed[i] != down) {
+ s->pressed[i] = down;
+ qemu_set_irq(s->irqs[i], down);
}
}
s->extension = 0;
}
-static const VMStateDescription vmstate_stellaris_button = {
- .name = "stellaris_button",
- .version_id = 0,
- .minimum_version_id = 0,
- .fields = (VMStateField[]) {
- VMSTATE_UINT8(pressed, StellarisGamepadButton),
- VMSTATE_END_OF_LIST()
- }
-};
-
static const VMStateDescription vmstate_stellaris_gamepad = {
.name = "stellaris_gamepad",
.version_id = 2,
.minimum_version_id = 2,
.fields = (VMStateField[]) {
VMSTATE_INT32(extension, StellarisGamepad),
- VMSTATE_STRUCT_VARRAY_POINTER_INT32(buttons, StellarisGamepad,
- num_buttons,
- vmstate_stellaris_button,
- StellarisGamepadButton),
+ VMSTATE_VARRAY_UINT32(pressed, StellarisGamepad, num_buttons,
+ 0, vmstate_info_uint8, uint8_t),
VMSTATE_END_OF_LIST()
}
};
@@ -81,10 +64,12 @@ void stellaris_gamepad_init(int n, qemu_irq *irq, const int *keycode)
int i;
s = g_new0(StellarisGamepad, 1);
- s->buttons = g_new0(StellarisGamepadButton, n);
+ s->irqs = g_new0(qemu_irq, n);
+ s->keycodes = g_new0(uint32_t, n);
+ s->pressed = g_new0(uint8_t, n);
for (i = 0; i < n; i++) {
- s->buttons[i].irq = irq[i];
- s->buttons[i].keycode = keycode[i];
+ s->irqs[i] = irq[i];
+ s->keycodes[i] = keycode[i];
}
s->num_buttons = n;
qemu_add_kbd_event_handler(stellaris_gamepad_put_key, s);
--
2.34.1
next prev parent reply other threads:[~2023-10-17 12:25 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-17 12:22 [PATCH 0/6] arm/stellaris: convert gamepad input device to qdev Peter Maydell
2023-10-17 12:22 ` [PATCH 1/6] hw/input/stellaris_input: Rename to stellaris_gamepad Peter Maydell
2023-10-17 12:44 ` Philippe Mathieu-Daudé
2023-10-17 12:22 ` [PATCH 2/6] hw/input/stellaris_gamepad: Rename structs to our usual convention Peter Maydell
2023-10-17 12:44 ` Philippe Mathieu-Daudé
2023-10-17 12:22 ` [PATCH 3/6] qdev: Add qdev_prop_set_array() Peter Maydell
2023-10-17 12:23 ` Peter Maydell [this message]
2023-10-17 12:44 ` [PATCH 4/6] hw/input/stellaris_gamepad: Remove StellarisGamepadButton struct Philippe Mathieu-Daudé
2023-10-17 12:52 ` Peter Maydell
2023-10-17 13:09 ` Philippe Mathieu-Daudé
2023-10-17 12:23 ` [PATCH 5/6] hw/input/stellaris_input: Convert to qdev Peter Maydell
2023-10-17 12:48 ` Philippe Mathieu-Daudé
2023-10-17 12:49 ` Peter Maydell
2023-10-17 12:23 ` [PATCH 6/6] hw/input/stellaris_gamepad: Convert to qemu_input_handler_register() Peter Maydell
2023-10-17 13:09 ` Philippe Mathieu-Daudé
2023-10-19 21:47 ` Philippe Mathieu-Daudé
2023-10-30 10:39 ` [PATCH 0/6] arm/stellaris: convert gamepad input device to qdev Philippe Mathieu-Daudé
2023-10-30 11:29 ` Peter Maydell
2023-10-30 13:19 ` Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231017122302.1692902-5-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).