+
+void HandleSpecialGameControllerButtons(Event *event)
+{
+#if defined(TARGET_SDL2)
+ switch (event->type)
+ {
+ case SDL_CONTROLLERBUTTONDOWN:
+ if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
+ HandleKey(KSYM_space, KEY_PRESSED);
+ else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
+ HandleKey(KSYM_Escape, KEY_PRESSED);
+
+ break;
+
+ case SDL_CONTROLLERBUTTONUP:
+ if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
+ HandleKey(KSYM_space, KEY_RELEASED);
+ else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
+ HandleKey(KSYM_Escape, KEY_RELEASED);
+
+ break;
+ }
+#endif
+}
+
+void HandleSpecialGameControllerKeys(Key key, int key_status)
+{
+#if defined(TARGET_SDL2)
+#if defined(KSYM_Rewind) && defined(KSYM_FastForward)
+ int button = SDL_CONTROLLER_BUTTON_INVALID;
+
+ /* map keys to joystick buttons (special hack for Amazon Fire TV remote) */
+ if (key == KSYM_Rewind)
+ button = SDL_CONTROLLER_BUTTON_A;
+ else if (key == KSYM_FastForward || key == KSYM_Menu)
+ button = SDL_CONTROLLER_BUTTON_B;
+
+ if (button != SDL_CONTROLLER_BUTTON_INVALID)
+ {
+ Event event;
+
+ event.type = (key_status == KEY_PRESSED ? SDL_CONTROLLERBUTTONDOWN :
+ SDL_CONTROLLERBUTTONUP);
+
+ event.cbutton.which = 0; /* first joystick (Amazon Fire TV remote) */
+ event.cbutton.button = button;
+ event.cbutton.state = (key_status == KEY_PRESSED ? SDL_PRESSED :
+ SDL_RELEASED);
+
+ HandleJoystickEvent(&event);
+ }
+#endif
+#endif
+}