changeset 38:3b7910575a00

Implemented basic keyboard support
author Michael Pavone <pavone@retrodev.com>
date Mon, 04 Apr 2016 09:13:14 -0700
parents 44c057a640b2
children 52d601e13ea4
files src/system_sdl.c
diffstat 1 files changed, 39 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/system_sdl.c	Sun Apr 03 21:27:27 2016 -0700
+++ b/src/system_sdl.c	Mon Apr 04 09:13:14 2016 -0700
@@ -173,7 +173,7 @@
 	return NULL;
 }
 
-const uint16_t mapping[SDL_CONTROLLER_BUTTON_MAX] = {
+static const uint16_t mapping[SDL_CONTROLLER_BUTTON_MAX] = {
 	[SDL_CONTROLLER_BUTTON_LEFTSHOULDER]  = 0x001,
 	[SDL_CONTROLLER_BUTTON_Y]             = 0x002,
 	[SDL_CONTROLLER_BUTTON_X]             = 0x004,
@@ -188,6 +188,38 @@
 	[SDL_CONTROLLER_BUTTON_DPAD_UP]       = 0x800,
 };
 
+static uint16_t keycode_to_bit(SDL_Keycode keycode)
+{
+	switch(keycode)
+	{
+	case SDLK_a:
+		return 0x020;
+	case SDLK_s:
+		return 0x010;
+	case SDLK_d:
+		return 0x008;
+	case SDLK_q:
+		return 0x004;
+	case SDLK_w:
+		return 0x002;
+	case SDLK_e:
+		return 0x001;
+	case SDLK_f:
+		return 0x040;
+	case SDLK_RETURN:
+		return 0x080;
+	case SDLK_UP:
+		return 0x800;
+	case SDLK_DOWN:
+		return 0x400;
+	case SDLK_LEFT:
+		return 0x200;
+	case SDLK_RIGHT:
+		return 0x100;
+	}
+	return 0;
+}
+
 void system_poll_events()
 {
 	SDL_Event event;
@@ -204,7 +236,12 @@
 		case SDL_CONTROLLERBUTTONUP:
 			controller_released(event.cbutton.which, mapping[event.cbutton.button]);
 			break;
-		//TODO: Keyboard input
+		case SDL_KEYDOWN:
+			controller_pressed(0, keycode_to_bit(event.key.keysym.sym));
+			break;
+		case SDL_KEYUP:
+			controller_released(0, keycode_to_bit(event.key.keysym.sym));
+			break;
 		//TODO: Controller hotplug
 		}
 	}