From: Javier S. Pedro Date: Fri, 12 Mar 2010 18:34:46 +0000 (+0100) Subject: single zeemote support X-Git-Tag: drnoksnes_1_3_1~4 X-Git-Url: https://vcs.maemo.org/git/?p=drnoksnes;a=commitdiff_plain;h=604f7846ec8dfbeb9a371e55905fd2d252379131 single zeemote support --- diff --git a/Makefile b/Makefile index 38cb343..c62ddc9 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,8 @@ endif CONF_XSP?=0 # Hildon Desktop compositing (in Fremantle) CONF_HD?=0 +# Link to libzeemote +CONF_ZEEMOTE?=0 # SNES stuff OBJS = apu.o c4.o c4emu.o cheats.o cheats2.o clip.o cpu.o cpuexec.o data.o @@ -77,6 +79,11 @@ ifeq ($(CONF_EXIT_BUTTON), 1) LDLIBS += -lSDL_image OBJS += platform/sdlvexit.o endif +ifeq ($(CONF_ZEEMOTE), 1) + CPPFLAGS += -DCONF_ZEEMOTE=1 + LDLIBS += -lzeemote -lzeemote-conf -lbluetooth + OBJS += platform/zeemote.o +endif # automatic dependencies DEPS := $(OBJS:.o=.d) diff --git a/debian/changelog b/debian/changelog index 6c9573f..03498e2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ drnoksnes (1.3.1) unstable; urgency=low * Fixed issue with Fremantle player 2 GUI. + * Adding (single) zeemote support. - -- Javier S. Pedro Fri, 19 Feb 2010 16:13:04 +0100 + -- Javier S. Pedro Tue, 23 Feb 2010 23:54:34 +0100 drnoksnes (1.3.0) unstable; urgency=low diff --git a/debian/control.m4 b/debian/control.m4 index 16cbf66..b8d1b0b 100644 --- a/debian/control.m4 +++ b/debian/control.m4 @@ -6,7 +6,8 @@ Build-Depends: debhelper (>= 5), pkg-config, maemo-version, m4, libsdl1.2-dev, libx11-dev, x11proto-core-dev, libxsp-dev, libpopt-dev, zlib1g-dev, gnupg, libosso-dev, osso-games-startup-dev, libsdl-image1.2-dev, libhildonfm2-dev, libosso-gnomevfs2-dev, libhildonmime-dev, - maemo-version (<< 5.0) | libsdl-haa1.2-dev + maemo-version (<< 5.0) | libsdl-haa1.2-dev, + libbluetooth2-dev | libbluetooth3-dev, libzeemote-dev, libzeemote-conf-dev Standards-Version: 3.7.2 Package: drnoksnes diff --git a/debian/rules b/debian/rules index 9a6d3b6..5aa6940 100755 --- a/debian/rules +++ b/debian/rules @@ -76,6 +76,7 @@ ifeq ($(shell expr "$(MAEMO_VERSION)" ">" 4), 1) else echo CONF_XSP=1 >> config.mk endif + echo CONF_ZEEMOTE=1 >> config.mk echo ASFLAGS="$(ASFLAGS)" >> config.mk echo CFLAGS="$(CFLAGS)" >> config.mk echo CXXFLAGS="$(CXXFLAGS)" >> config.mk diff --git a/gui/controls.c b/gui/controls.c index ce70094..83b34b1 100644 --- a/gui/controls.c +++ b/gui/controls.c @@ -47,11 +47,13 @@ static HildonCheckButton* keys_chk; static HildonButton* keys_btn; static HildonCheckButton* touch_chk; static HildonCheckButton* touch_show_chk; +static HildonCheckButton* zeemote_chk; #else static GtkCheckButton* keys_chk; static GtkButton* keys_btn; static GtkCheckButton* touch_chk; static GtkCheckButton* touch_show_chk; +static GtkCheckButton* zeemote_chk; #endif static void load_settings() @@ -92,27 +94,41 @@ static void save_settings() gchar *key = key_base + key_len; #if MAEMO_VERSION >= 5 + // Keyboard strcpy(key, kGConfPlayerKeyboardEnable); gconf_client_set_bool(gcc, key_base, hildon_check_button_get_active(keys_chk), NULL); + // Touchscreen strcpy(key, kGConfPlayerTouchscreenEnable); gconf_client_set_bool(gcc, key_base, hildon_check_button_get_active(touch_chk), NULL); strcpy(key, kGConfPlayerTouchscreenShow); gconf_client_set_bool(gcc, key_base, hildon_check_button_get_active(touch_show_chk), NULL); -#else + + // Zeemote + strcpy(key, kGConfPlayerZeemoteEnable); + gconf_client_set_bool(gcc, key_base, + hildon_check_button_get_active(zeemote_chk), NULL); +#else /* MAEMO_VERSION < 5 */ + // Keyboard strcpy(key, kGConfPlayerKeyboardEnable); gconf_client_set_bool(gcc, key_base, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(keys_chk)), NULL); + // Touchscreen strcpy(key, kGConfPlayerTouchscreenEnable); gconf_client_set_bool(gcc, key_base, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(touch_chk)), NULL); strcpy(key, kGConfPlayerTouchscreenShow); gconf_client_set_bool(gcc, key_base, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(touch_show_chk)), NULL); + + // Zeemote + strcpy(key, kGConfPlayerZeemoteEnable); + gconf_client_set_bool(gcc, key_base, + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(zeemote_chk)), NULL); #endif } @@ -225,6 +241,7 @@ void controls_dialog(GtkWindow* parent, int player) set_button_layout(HILDON_BUTTON(touch_show_chk), titles_size_group, values_size_group); +#if 0 GtkLabel* separator_3 = GTK_LABEL(gtk_label_new(_("Accelerometer"))); gtk_label_set_attributes(separator_3, pattrlist); gtk_label_set_justify(separator_3, GTK_JUSTIFY_CENTER); @@ -232,11 +249,18 @@ void controls_dialog(GtkWindow* parent, int player) GtkLabel* separator_4 = GTK_LABEL(gtk_label_new(_("Wiimote"))); gtk_label_set_attributes(separator_4, pattrlist); gtk_label_set_justify(separator_4, GTK_JUSTIFY_CENTER); - +#endif + GtkLabel* separator_5 = GTK_LABEL(gtk_label_new(_("Zeemote"))); gtk_label_set_attributes(separator_5, pattrlist); gtk_label_set_justify(separator_5, GTK_JUSTIFY_CENTER); + zeemote_chk = HILDON_CHECK_BUTTON(hildon_check_button_new( + HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT)); + gtk_button_set_label(GTK_BUTTON(zeemote_chk), _("Enable Zeemote joystick")); + set_button_layout(HILDON_BUTTON(zeemote_chk), + titles_size_group, values_size_group); + gtk_box_pack_start(box, GTK_WIDGET(separator_1), FALSE, FALSE, HILDON_MARGIN_HALF); gtk_box_pack_start(box, GTK_WIDGET(keys_chk), @@ -249,12 +273,16 @@ void controls_dialog(GtkWindow* parent, int player) FALSE, FALSE, 0); gtk_box_pack_start(box, GTK_WIDGET(touch_show_chk), FALSE, FALSE, 0); +#if 0 gtk_box_pack_start(box, GTK_WIDGET(separator_3), FALSE, FALSE, HILDON_MARGIN_HALF); gtk_box_pack_start(box, GTK_WIDGET(separator_4), FALSE, FALSE, HILDON_MARGIN_HALF); +#endif gtk_box_pack_start(box, GTK_WIDGET(separator_5), FALSE, FALSE, HILDON_MARGIN_HALF); + gtk_box_pack_start(box, GTK_WIDGET(zeemote_chk), + FALSE, FALSE, 0); hildon_pannable_area_add_with_viewport(pannable, GTK_WIDGET(box)); gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(pannable)); @@ -283,12 +311,18 @@ void controls_dialog(GtkWindow* parent, int player) touch_show_chk = GTK_CHECK_BUTTON(gtk_check_button_new_with_label( _("Show on-screen button grid"))); + GtkWidget* sep_2 = GTK_WIDGET(gtk_hseparator_new()); + touch_show_chk = GTK_CHECK_BUTTON(gtk_check_button_new_with_label( + _("Enable Zeemote joystick"))); + gtk_box_pack_start_defaults(touch_box, GTK_WIDGET(touch_chk)); gtk_box_pack_start_defaults(touch_box, GTK_WIDGET(touch_show_chk)); gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(keys_box)); gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), sep_1); gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(touch_box)); + gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), sep_2); + gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(zeemote_chk)); #endif load_settings(); diff --git a/gui/drnoksnes.schemas.m4 b/gui/drnoksnes.schemas.m4 index c758014..db2dcd1 100644 --- a/gui/drnoksnes.schemas.m4 +++ b/gui/drnoksnes.schemas.m4 @@ -197,6 +197,19 @@ undefine(`LAST')dnl + /schemas/apps/maemo/drnoksnes/player1/zeemote/enable + /apps/maemo/drnoksnes/player1/zeemote/enable + drnoksnes + bool + false + + Player 1 zeemote + + Connect zeemote to player 1. + + + + /schemas/apps/maemo/drnoksnes/player2/keyboard/enable /apps/maemo/drnoksnes/player2/keyboard/enable drnoksnes @@ -256,5 +269,18 @@ undefine(`LAST')dnl + + /schemas/apps/maemo/drnoksnes/player2/zeemote/enable + /apps/maemo/drnoksnes/player2/zeemote/enable + drnoksnes + bool + false + + Player 2 zeemote + + Connect zeemote to player 2. + + + diff --git a/gui/gconf.h b/gui/gconf.h index e851dde..7d4ecbe 100644 --- a/gui/gconf.h +++ b/gui/gconf.h @@ -22,5 +22,8 @@ #define kGConfPlayerTouchscreenEnable kGConfPlayerTouchscreenPath "/" "enable" #define kGConfPlayerTouchscreenShow kGConfPlayerTouchscreenPath "/" "show_buttons" +#define kGConfPlayerZeemotePath "/" "zeemote" +#define kGConfPlayerZeemoteEnable kGConfPlayerZeemotePath "/" "enable" + #endif diff --git a/platform/sdli.cpp b/platform/sdli.cpp index 0e454d1..21adc45 100644 --- a/platform/sdli.cpp +++ b/platform/sdli.cpp @@ -6,6 +6,10 @@ #include "display.h" #include "sdlv.h" // Dispatching video-related events +#if CONF_ZEEMOTE +#include "zeemote.h" +#endif + struct TouchButton { unsigned short mask; unsigned short x, y; @@ -219,6 +223,11 @@ void S9xProcessEvents(bool block) { SDL_Event event; +#if CONF_ZEEMOTE + // Wheter blocking or non blocking, poll zeemotes now. + ZeeRead(joypads); +#endif + if (block) { SDL_WaitEvent(&event); processEvent(event); @@ -257,6 +266,10 @@ void S9xInitInputDevices() } printf("\n"); +#if CONF_ZEEMOTE + ZeeInit(); +#endif + // TODO Non-awful mouse support, Superscope S9xInputScreenChanged(); @@ -268,6 +281,9 @@ void S9xDeinitInputDevices() joypads[1] = 0; mouse.enabled = false; mouse.pressed = false; +#if CONF_ZEEMOTE + ZeeQuit(); +#endif } void S9xInputScreenChanged() diff --git a/port.h b/port.h index c753779..b24a6e2 100644 --- a/port.h +++ b/port.h @@ -99,9 +99,13 @@ typedef int16_t int16_32; #define _MAX_EXT NAME_MAX #define _MAX_PATH PATH_MAX -//True/False Defines +// Boolean constants (may already be defined) +#ifndef TRUE #define TRUE 1 +#endif +#ifndef FALSE #define FALSE 0 +#endif // Config -> Defines #if CONF_BUILD_ASM_SPC700