Merge pull request #881 from Daft-Freak/pico-hid-kb-pad

Pico HID fixes
diff --git a/32blit-pico/input/usb_hid.cpp b/32blit-pico/input/usb_hid.cpp
index 2ea8f3e..0ebc2d7 100644
--- a/32blit-pico/input/usb_hid.cpp
+++ b/32blit-pico/input/usb_hid.cpp
@@ -55,9 +55,15 @@
 void update_input() {
   using namespace blit;
 
+  if(!hid_keyboard_detected && !hid_gamepad_id) {
+    blit::api_data.buttons = 0;
+    return;
+  }
+
+  uint32_t new_buttons = 0;
+
   // keyboard
   if(hid_keyboard_detected) {
-    uint32_t new_buttons = 0;
 
     for(int i = 0; i < 6; i++) {
       switch(hid_keys[i]) {
@@ -109,8 +115,6 @@
           break;
       }
     }
-
-    api_data.buttons = new_buttons;
   }
 
   if(!hid_gamepad_id)
@@ -121,18 +125,21 @@
   while(mapping->id && mapping->id != hid_gamepad_id)
     mapping++;
 
-  api_data.buttons = dpad_map[hid_hat > 8 ? 8 : hid_hat]
-                   | (hid_buttons & (1 << mapping->left)     ? uint32_t(Button::DPAD_LEFT) : 0)
-                   | (hid_buttons & (1 << mapping->right)    ? uint32_t(Button::DPAD_RIGHT) : 0)
-                   | (hid_buttons & (1 << mapping->up)       ? uint32_t(Button::DPAD_UP) : 0)
-                   | (hid_buttons & (1 << mapping->down)     ? uint32_t(Button::DPAD_DOWN) : 0)
-                   | (hid_buttons & (1 << mapping->a)        ? uint32_t(Button::A) : 0)
-                   | (hid_buttons & (1 << mapping->b)        ? uint32_t(Button::B) : 0)
-                   | (hid_buttons & (1 << mapping->x)        ? uint32_t(Button::X) : 0)
-                   | (hid_buttons & (1 << mapping->y)        ? uint32_t(Button::Y) : 0)
-                   | (hid_buttons & (1 << mapping->menu)     ? uint32_t(Button::MENU) : 0)
-                   | (hid_buttons & (1 << mapping->home)     ? uint32_t(Button::HOME) : 0)
-                   | (hid_buttons & (1 << mapping->joystick) ? uint32_t(Button::JOYSTICK) : 0);
+  new_buttons = new_buttons
+              | dpad_map[hid_hat > 8 ? 8 : hid_hat]
+              | (hid_buttons & (1 << mapping->left)     ? uint32_t(Button::DPAD_LEFT) : 0)
+              | (hid_buttons & (1 << mapping->right)    ? uint32_t(Button::DPAD_RIGHT) : 0)
+              | (hid_buttons & (1 << mapping->up)       ? uint32_t(Button::DPAD_UP) : 0)
+              | (hid_buttons & (1 << mapping->down)     ? uint32_t(Button::DPAD_DOWN) : 0)
+              | (hid_buttons & (1 << mapping->a)        ? uint32_t(Button::A) : 0)
+              | (hid_buttons & (1 << mapping->b)        ? uint32_t(Button::B) : 0)
+              | (hid_buttons & (1 << mapping->x)        ? uint32_t(Button::X) : 0)
+              | (hid_buttons & (1 << mapping->y)        ? uint32_t(Button::Y) : 0)
+              | (hid_buttons & (1 << mapping->menu)     ? uint32_t(Button::MENU) : 0)
+              | (hid_buttons & (1 << mapping->home)     ? uint32_t(Button::HOME) : 0)
+              | (hid_buttons & (1 << mapping->joystick) ? uint32_t(Button::JOYSTICK) : 0);
+
+  api_data.buttons = new_buttons;
 
   api_data.joystick.x = (float(hid_joystick[0]) - 0x80) / 0x80;
   api_data.joystick.y = (float(hid_joystick[1]) - 0x80) / 0x80;