diff mbox

[3/3] hid.c: Add debug support

Message ID 7A168ABF-EB8A-43E5-9821-F4D8AD9B6E53@gmail.com
State New
Headers show

Commit Message

Programmingkid March 25, 2016, 4:10 p.m. UTC
Add debug macros to the code for easier debugging.

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
---
 hw/input/hid.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Alex Bennée March 26, 2016, 6:48 a.m. UTC | #1
Programmingkid <programmingkidx@gmail.com> writes:

> Add debug macros to the code for easier debugging.
>
> Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
> ---
>  hw/input/hid.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/hw/input/hid.c b/hw/input/hid.c
> index 329a27b..42ca592 100644
> --- a/hw/input/hid.c
> +++ b/hw/input/hid.c
> @@ -37,6 +37,13 @@
>  #define RELEASED -1
>  #define PUSHED -2
>
> +/* #define DEBUG_HID_CODE */
> +#ifdef DEBUG_HID_CODE
> +    #define DEBUG_HID(fmt, ...) printf(fmt, __VA_ARGS__)
> +#else
> +    #define DEBUG_HID(fmt, ...) (void)0
> +#endif
> +

This style of debug setup is discouraged these days as its prone to
bitrot. It's better to define like this:

#define DEBUG_HID(fmt, ...) \
  if (DEBUG_HID_CODE) {     \
     printf(fmt, __VA_ARGS);\
  }

This means you get the benefit of the compiler checking your format
strings even if the code gets optimised away when DEBUG_HID_CODE isn't
defined.

>  /* Translates a QKeyCode to USB HID value */
>  static const uint8_t qcode_to_usb_hid[] = {
>      [Q_KEY_CODE_SHIFT] = USB_HID_LEFT_SHIFT,
> @@ -331,6 +338,7 @@ static void hid_keyboard_event(DeviceState *dev, QemuConsole *src,
>          return;
>      }
>      keycode = qcode_to_usb_hid[qcode];
> +    DEBUG_HID("keycode = 0x%x qcode:%d\n", keycode, qcode);
>
>      count = 2;
>      if (evt->u.key.data->down == false) { /* if key up event */
> @@ -381,6 +389,9 @@ static void hid_keyboard_process_keycode(HIDState *hs)
>      slot = hs->head & QUEUE_MASK; QUEUE_INCR(hs->head); hs->n--;
>      keycode = hs->kbd.keycodes[slot];
>
> +    DEBUG_HID("keycode:0x%x status:%s\n", keycode, (status == PUSHED ? "Pushed"
> +              : "Released"));
> +
>      /* handle Control, Option, GUI/Windows/Command, and Shift keys */
>      if (keycode >= 0xe0) {
>          process_modifier_key(status, keycode, &(hs->kbd.modifiers));


--
Alex Bennée
Programmingkid March 27, 2016, 2:30 p.m. UTC | #2
On Mar 26, 2016, at 2:48 AM, Alex Bennée wrote:

> 
> Programmingkid <programmingkidx@gmail.com> writes:
> 
>> Add debug macros to the code for easier debugging.
>> 
>> Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
>> ---
>> hw/input/hid.c | 11 +++++++++++
>> 1 file changed, 11 insertions(+)
>> 
>> diff --git a/hw/input/hid.c b/hw/input/hid.c
>> index 329a27b..42ca592 100644
>> --- a/hw/input/hid.c
>> +++ b/hw/input/hid.c
>> @@ -37,6 +37,13 @@
>> #define RELEASED -1
>> #define PUSHED -2
>> 
>> +/* #define DEBUG_HID_CODE */
>> +#ifdef DEBUG_HID_CODE
>> +    #define DEBUG_HID(fmt, ...) printf(fmt, __VA_ARGS__)
>> +#else
>> +    #define DEBUG_HID(fmt, ...) (void)0
>> +#endif
>> +
> 
> This style of debug setup is discouraged these days as its prone to
> bitrot. It's better to define like this:
> 
> #define DEBUG_HID(fmt, ...) \
>  if (DEBUG_HID_CODE) {     \
>     printf(fmt, __VA_ARGS);\
>  }
> 
> This means you get the benefit of the compiler checking your format
> strings even if the code gets optimised away when DEBUG_HID_CODE isn't
> defined.

I don't like if conditions in the debug macro because they do take up cpu time. The (void)0 is just zero. I don't think it would take any cpu time away from the program.
Alex Bennée March 27, 2016, 5:59 p.m. UTC | #3
It won't. The compiler will dead code away any branches where the test
evaluates to a constant.
On 27 Mar 2016 3:30 p.m., "Programmingkid" <programmingkidx@gmail.com>
wrote:

>
> On Mar 26, 2016, at 2:48 AM, Alex Bennée wrote:
>
> >
> > Programmingkid <programmingkidx@gmail.com> writes:
> >
> >> Add debug macros to the code for easier debugging.
> >>
> >> Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
> >> ---
> >> hw/input/hid.c | 11 +++++++++++
> >> 1 file changed, 11 insertions(+)
> >>
> >> diff --git a/hw/input/hid.c b/hw/input/hid.c
> >> index 329a27b..42ca592 100644
> >> --- a/hw/input/hid.c
> >> +++ b/hw/input/hid.c
> >> @@ -37,6 +37,13 @@
> >> #define RELEASED -1
> >> #define PUSHED -2
> >>
> >> +/* #define DEBUG_HID_CODE */
> >> +#ifdef DEBUG_HID_CODE
> >> +    #define DEBUG_HID(fmt, ...) printf(fmt, __VA_ARGS__)
> >> +#else
> >> +    #define DEBUG_HID(fmt, ...) (void)0
> >> +#endif
> >> +
> >
> > This style of debug setup is discouraged these days as its prone to
> > bitrot. It's better to define like this:
> >
> > #define DEBUG_HID(fmt, ...) \
> >  if (DEBUG_HID_CODE) {     \
> >     printf(fmt, __VA_ARGS);\
> >  }
> >
> > This means you get the benefit of the compiler checking your format
> > strings even if the code gets optimised away when DEBUG_HID_CODE isn't
> > defined.
>
> I don't like if conditions in the debug macro because they do take up cpu
> time. The (void)0 is just zero. I don't think it would take any cpu time
> away from the program.
diff mbox

Patch

diff --git a/hw/input/hid.c b/hw/input/hid.c
index 329a27b..42ca592 100644
--- a/hw/input/hid.c
+++ b/hw/input/hid.c
@@ -37,6 +37,13 @@ 
 #define RELEASED -1
 #define PUSHED -2
 
+/* #define DEBUG_HID_CODE */
+#ifdef DEBUG_HID_CODE
+    #define DEBUG_HID(fmt, ...) printf(fmt, __VA_ARGS__)
+#else
+    #define DEBUG_HID(fmt, ...) (void)0
+#endif
+
 /* Translates a QKeyCode to USB HID value */
 static const uint8_t qcode_to_usb_hid[] = {
     [Q_KEY_CODE_SHIFT] = USB_HID_LEFT_SHIFT,
@@ -331,6 +338,7 @@  static void hid_keyboard_event(DeviceState *dev, QemuConsole *src,
         return;
     }
     keycode = qcode_to_usb_hid[qcode];
+    DEBUG_HID("keycode = 0x%x qcode:%d\n", keycode, qcode);
 
     count = 2;
     if (evt->u.key.data->down == false) { /* if key up event */
@@ -381,6 +389,9 @@  static void hid_keyboard_process_keycode(HIDState *hs)
     slot = hs->head & QUEUE_MASK; QUEUE_INCR(hs->head); hs->n--;
     keycode = hs->kbd.keycodes[slot];
 
+    DEBUG_HID("keycode:0x%x status:%s\n", keycode, (status == PUSHED ? "Pushed"
+              : "Released"));
+
     /* handle Control, Option, GUI/Windows/Command, and Shift keys */
     if (keycode >= 0xe0) {
         process_modifier_key(status, keycode, &(hs->kbd.modifiers));