single zeemote support
authorJavier S. Pedro <maemo@javispedro.com>
Fri, 12 Mar 2010 18:34:46 +0000 (19:34 +0100)
committerJavier S. Pedro <maemo@javispedro.com>
Fri, 12 Mar 2010 18:34:46 +0000 (19:34 +0100)
Makefile
debian/changelog
debian/control.m4
debian/rules
gui/controls.c
gui/drnoksnes.schemas.m4
gui/gconf.h
platform/sdli.cpp
port.h

index 38cb343..c62ddc9 100644 (file)
--- 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)
index 6c9573f..03498e2 100644 (file)
@@ -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 <maemo@javispedro.com>  Fri, 19 Feb 2010 16:13:04 +0100
+ -- Javier S. Pedro <maemo@javispedro.com>  Tue, 23 Feb 2010 23:54:34 +0100
 
 drnoksnes (1.3.0) unstable; urgency=low
 
index 16cbf66..b8d1b0b 100644 (file)
@@ -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
index 9a6d3b6..5aa6940 100755 (executable)
@@ -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
index ce70094..83b34b1 100644 (file)
@@ -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();
index c758014..db2dcd1 100644 (file)
@@ -197,6 +197,19 @@ undefine(`LAST')dnl
       </locale>
     </schema>
     <schema>
+     <key>/schemas/apps/maemo/drnoksnes/player1/zeemote/enable</key>
+      <applyto>/apps/maemo/drnoksnes/player1/zeemote/enable</applyto>
+      <owner>drnoksnes</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Player 1 zeemote</short>
+        <long>
+          Connect zeemote to player 1.
+        </long>
+      </locale>
+    </schema>
+    <schema>
      <key>/schemas/apps/maemo/drnoksnes/player2/keyboard/enable</key>
       <applyto>/apps/maemo/drnoksnes/player2/keyboard/enable</applyto>
       <owner>drnoksnes</owner>
@@ -256,5 +269,18 @@ undefine(`LAST')dnl
         </long>
       </locale>
     </schema>
+    <schema>
+     <key>/schemas/apps/maemo/drnoksnes/player2/zeemote/enable</key>
+      <applyto>/apps/maemo/drnoksnes/player2/zeemote/enable</applyto>
+      <owner>drnoksnes</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Player 2 zeemote</short>
+        <long>
+          Connect zeemote to player 2.
+        </long>
+      </locale>
+    </schema>
   </schemalist>
 </gconfschemafile>
index e851dde..7d4ecbe 100644 (file)
@@ -22,5 +22,8 @@
 #define kGConfPlayerTouchscreenEnable kGConfPlayerTouchscreenPath "/" "enable"
 #define kGConfPlayerTouchscreenShow kGConfPlayerTouchscreenPath "/" "show_buttons"
 
+#define kGConfPlayerZeemotePath "/" "zeemote"
+#define kGConfPlayerZeemoteEnable kGConfPlayerZeemotePath "/" "enable"
+
 #endif
 
index 0e454d1..21adc45 100644 (file)
@@ -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 (file)
--- 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