diff --git a/src/wiimotedev/consts.h b/src/wiimotedev/consts.h
new file mode 100644
index 000000000..5761a2653
--- /dev/null
+++ b/src/wiimotedev/consts.h
@@ -0,0 +1,318 @@
+/**********************************************************************************
+ * Wiimotedev daemon headers *
+ * Copyright (C) 2010 Bartłomiej Burdukiewicz *
+ * Contact: dev.strikeu@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this program; if not, see . *
+ **********************************************************************************/
+
+#ifndef WIIMOTEDEV_H
+#define WIIMOTEDEV_H
+
+#define WIIMOTEDEV_CONFIG_FILE "/etc/wiimotedev/wiimotedev.conf"
+#define WIIMOTEDEV_TCP_PORT 50091
+
+#define WIIMOTEDEV_DBUS_SERVICE_NAME "org.wiimotedev.daemon"
+
+#define WIIMOTEDEV_DBUS_IFACE_EVENTS "org.wiimotedev.deviceEvents"
+#define WIIMOTEDEV_DBUS_IFACE_SERVICE "org.wiimotedev.service"
+#define WIIMOTEDEV_DBUS_OBJECT_EVENTS "/deviceEvents"
+#define WIIMOTEDEV_DBUS_OBJECT_SERVICE "/service"
+
+/* Compatibility ------------------------------------------------- */
+
+#define WIIMOTEDEV_DBUS_SERVICE_IFACE "org.wiimotedev.service"
+#define WIIMOTEDEV_DBUS_EVENTS_IFACE "org.wiimotedev.deviceEvents"
+#define WIIMOTEDEV_DBUS_SERVICE_OBJECT "/service"
+#define WIIMOTEDEV_DBUS_EVENTS_OBJECT "/deviceEvents"
+
+/* Typedefs ------------------------------------------------------ */
+
+typedef unsigned long long uint64;
+typedef unsigned int uint32;
+typedef unsigned short uint16;
+typedef unsigned char uint8;
+
+typedef signed long long int64;
+typedef signed int int32;
+typedef signed short int16;
+typedef signed char int8;
+
+/* Wiiremote status --------------------------------------------- */
+
+const uint8 STATUS_WIIMOTE_DISCONNECTED = 0x00;
+const uint8 STATUS_WIIMOTE_CONNECTED = 0x01;
+const uint8 STATUS_WIIMOTE_NUNCHUK_CONNECTED = 0x02;
+const uint8 STATUS_WIIMOTE_CLASSIC_CONNECTED = 0x04;
+
+#define STATUS_NUNCHUK_CONNECTED STATUS_WIIMOTE_NUNCHUK_CONNECTED
+#define STATUS_CLASSIC_CONNECTED STATUS_WIIMOTE_CLASSIC_CONNECTED
+
+/* Structs --------------------------------------------- */
+
+struct irpoint {
+ int16 size;
+ uint16 x;
+ uint16 y; };
+
+struct accdata {
+ uint8 x;
+ uint8 y;
+ uint8 z;
+ double pitch;
+ double roll; };
+
+struct stickdata {
+ uint8 x;
+ uint8 y; };
+
+enum GENERAL_BUTTONS {
+// 1.0 API
+ GENERAL_WIIMOTE_BTN_1 = 0,
+ GENERAL_WIIMOTE_BTN_2,
+ GENERAL_WIIMOTE_BTN_A,
+ GENERAL_WIIMOTE_BTN_B,
+ GENERAL_WIIMOTE_BTN_MINUS,
+ GENERAL_WIIMOTE_BTN_PLUS,
+ GENERAL_WIIMOTE_BTN_HOME,
+ GENERAL_WIIMOTE_BTN_RIGHT,
+ GENERAL_WIIMOTE_BTN_LEFT,
+ GENERAL_WIIMOTE_BTN_DOWN,
+ GENERAL_WIIMOTE_BTN_UP,
+ GENERAL_WIIMOTE_BTN_SHIFT_BACKWARD,
+ GENERAL_WIIMOTE_BTN_SHIFT_FORWARD,
+ GENERAL_WIIMOTE_BTN_SHIFT_RIGHT,
+ GENERAL_WIIMOTE_BTN_SHIFT_LEFT,
+ GENERAL_WIIMOTE_BTN_SHIFT_DOWN,
+ GENERAL_WIIMOTE_BTN_SHIFT_UP,
+ GENERAL_WIIMOTE_BTN_TILT_FRONT,
+ GENERAL_WIIMOTE_BTN_TILT_BACK,
+ GENERAL_WIIMOTE_BTN_TILT_RIGHT,
+ GENERAL_WIIMOTE_BTN_TILT_LEFT,
+ GENERAL_NUNCHUK_BTN_C,
+ GENERAL_NUNCHUK_BTN_Z,
+ GENERAL_NUNCHUK_BTN_STICK_RIGHT,
+ GENERAL_NUNCHUK_BTN_STICK_LEFT,
+ GENERAL_NUNCHUK_BTN_STICK_DOWN,
+ GENERAL_NUNCHUK_BTN_STICK_UP,
+ GENERAL_NUNCHUK_BTN_SHIFT_BACKWARD,
+ GENERAL_NUNCHUK_BTN_SHIFT_FORWARD,
+ GENERAL_NUNCHUK_BTN_SHIFT_RIGHT,
+ GENERAL_NUNCHUK_BTN_SHIFT_LEFT,
+ GENERAL_NUNCHUK_BTN_SHIFT_DOWN,
+ GENERAL_NUNCHUK_BTN_SHIFT_UP,
+ GENERAL_NUNCHUK_BTN_TILT_FRONT,
+ GENERAL_NUNCHUK_BTN_TILT_BACK,
+ GENERAL_NUNCHUK_BTN_TILT_RIGHT,
+ GENERAL_NUNCHUK_BTN_TILT_LEFT,
+ GENERAL_CLASSIC_BTN_X,
+ GENERAL_CLASSIC_BTN_Y,
+ GENERAL_CLASSIC_BTN_A,
+ GENERAL_CLASSIC_BTN_B,
+ GENERAL_CLASSIC_BTN_L,
+ GENERAL_CLASSIC_BTN_R,
+ GENERAL_CLASSIC_BTN_ZL,
+ GENERAL_CLASSIC_BTN_ZR,
+ GENERAL_CLASSIC_BTN_MINUS,
+ GENERAL_CLASSIC_BTN_PLUS,
+ GENERAL_CLASSIC_BTN_HOME,
+ GENERAL_CLASSIC_BTN_RIGHT,
+ GENERAL_CLASSIC_BTN_LEFT,
+ GENERAL_CLASSIC_BTN_DOWN,
+ GENERAL_CLASSIC_BTN_UP,
+ GENERAL_CLASSIC_BTN_LSTICK_RIGHT,
+ GENERAL_CLASSIC_BTN_LSTICK_LEFT,
+ GENERAL_CLASSIC_BTN_LSTICK_DOWN,
+ GENERAL_CLASSIC_BTN_LSTICK_UP,
+ GENERAL_CLASSIC_BTN_RSTICK_RIGHT,
+ GENERAL_CLASSIC_BTN_RSTICK_LEFT,
+ GENERAL_CLASSIC_BTN_RSTICK_DOWN,
+ GENERAL_CLASSIC_BTN_RSTICK_UP,
+// 1.2 API
+ GENERAL_WIIMOTE_BTN_SHIFT_SHAKE,
+ GENERAL_NUNCHUK_BTN_SHIFT_SHAKE
+};
+
+#define calcbit(x) (static_cast( true) << x)
+
+const uint64 WIIMOTE_BTN_1 = calcbit(GENERAL_WIIMOTE_BTN_1);
+const uint64 WIIMOTE_BTN_2 = calcbit(GENERAL_WIIMOTE_BTN_2);
+const uint64 WIIMOTE_BTN_A = calcbit(GENERAL_WIIMOTE_BTN_A);
+const uint64 WIIMOTE_BTN_B = calcbit(GENERAL_WIIMOTE_BTN_B);
+
+const uint64 WIIMOTE_BTN_MINUS = calcbit(GENERAL_WIIMOTE_BTN_MINUS);
+const uint64 WIIMOTE_BTN_PLUS = calcbit(GENERAL_WIIMOTE_BTN_PLUS);
+const uint64 WIIMOTE_BTN_HOME = calcbit(GENERAL_WIIMOTE_BTN_HOME);
+
+const uint64 WIIMOTE_BTN_RIGHT = calcbit(GENERAL_WIIMOTE_BTN_RIGHT);
+const uint64 WIIMOTE_BTN_LEFT = calcbit(GENERAL_WIIMOTE_BTN_LEFT);
+const uint64 WIIMOTE_BTN_DOWN = calcbit(GENERAL_WIIMOTE_BTN_DOWN);
+const uint64 WIIMOTE_BTN_UP = calcbit(GENERAL_WIIMOTE_BTN_UP);
+
+const uint64 WIIMOTE_BTN_SHIFT_BACKWARD = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_BACKWARD);
+const uint64 WIIMOTE_BTN_SHIFT_FORWARD = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_FORWARD);
+const uint64 WIIMOTE_BTN_SHIFT_RIGHT = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_RIGHT);
+const uint64 WIIMOTE_BTN_SHIFT_LEFT = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_LEFT);
+const uint64 WIIMOTE_BTN_SHIFT_DOWN = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_DOWN);
+const uint64 WIIMOTE_BTN_SHIFT_UP = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_UP);
+
+const uint64 WIIMOTE_BTN_TILT_FRONT = calcbit(GENERAL_WIIMOTE_BTN_TILT_FRONT);
+const uint64 WIIMOTE_BTN_TILT_BACK = calcbit(GENERAL_WIIMOTE_BTN_TILT_BACK);
+const uint64 WIIMOTE_BTN_TILT_RIGHT = calcbit(GENERAL_WIIMOTE_BTN_TILT_RIGHT);
+const uint64 WIIMOTE_BTN_TILT_LEFT = calcbit(GENERAL_WIIMOTE_BTN_TILT_LEFT);
+
+const uint64 NUNCHUK_BTN_C = calcbit(GENERAL_NUNCHUK_BTN_C);
+const uint64 NUNCHUK_BTN_Z = calcbit(GENERAL_NUNCHUK_BTN_Z);
+
+const uint64 NUNCHUK_BTN_STICK_RIGHT = calcbit(GENERAL_NUNCHUK_BTN_STICK_RIGHT);
+const uint64 NUNCHUK_BTN_STICK_LEFT = calcbit(GENERAL_NUNCHUK_BTN_STICK_LEFT);
+const uint64 NUNCHUK_BTN_STICK_DOWN = calcbit(GENERAL_NUNCHUK_BTN_STICK_DOWN);
+const uint64 NUNCHUK_BTN_STICK_UP = calcbit(GENERAL_NUNCHUK_BTN_STICK_UP);
+
+const uint64 NUNCHUK_BTN_SHIFT_BACKWARD = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_BACKWARD);
+const uint64 NUNCHUK_BTN_SHIFT_FORWARD = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_FORWARD);
+const uint64 NUNCHUK_BTN_SHIFT_RIGHT = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_RIGHT);
+const uint64 NUNCHUK_BTN_SHIFT_LEFT = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_LEFT);
+const uint64 NUNCHUK_BTN_SHIFT_DOWN = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_DOWN);
+const uint64 NUNCHUK_BTN_SHIFT_UP = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_UP);
+
+const uint64 NUNCHUK_BTN_TILT_FRONT = calcbit(GENERAL_NUNCHUK_BTN_TILT_FRONT);
+const uint64 NUNCHUK_BTN_TILT_BACK = calcbit(GENERAL_NUNCHUK_BTN_TILT_BACK);
+const uint64 NUNCHUK_BTN_TILT_RIGHT = calcbit(GENERAL_NUNCHUK_BTN_TILT_RIGHT);
+const uint64 NUNCHUK_BTN_TILT_LEFT = calcbit(GENERAL_NUNCHUK_BTN_TILT_LEFT);
+
+const uint64 CLASSIC_BTN_X = calcbit(GENERAL_CLASSIC_BTN_X);
+const uint64 CLASSIC_BTN_Y = calcbit(GENERAL_CLASSIC_BTN_Y);
+const uint64 CLASSIC_BTN_A = calcbit(GENERAL_CLASSIC_BTN_A);
+const uint64 CLASSIC_BTN_B = calcbit(GENERAL_CLASSIC_BTN_B);
+const uint64 CLASSIC_BTN_L = calcbit(GENERAL_CLASSIC_BTN_L);
+const uint64 CLASSIC_BTN_R = calcbit(GENERAL_CLASSIC_BTN_R);
+const uint64 CLASSIC_BTN_ZL = calcbit(GENERAL_CLASSIC_BTN_ZL);
+const uint64 CLASSIC_BTN_ZR = calcbit(GENERAL_CLASSIC_BTN_ZR);
+const uint64 CLASSIC_BTN_MINUS = calcbit(GENERAL_CLASSIC_BTN_MINUS);
+const uint64 CLASSIC_BTN_PLUS = calcbit(GENERAL_CLASSIC_BTN_PLUS);
+const uint64 CLASSIC_BTN_HOME = calcbit(GENERAL_CLASSIC_BTN_HOME);
+const uint64 CLASSIC_BTN_RIGHT = calcbit(GENERAL_CLASSIC_BTN_RIGHT);
+const uint64 CLASSIC_BTN_LEFT = calcbit(GENERAL_CLASSIC_BTN_LEFT);
+const uint64 CLASSIC_BTN_DOWN = calcbit(GENERAL_CLASSIC_BTN_DOWN);
+const uint64 CLASSIC_BTN_UP = calcbit(GENERAL_CLASSIC_BTN_UP);
+
+const uint64 CLASSIC_BTN_LSTICK_RIGHT = calcbit(GENERAL_CLASSIC_BTN_LSTICK_RIGHT);
+const uint64 CLASSIC_BTN_LSTICK_LEFT = calcbit(GENERAL_CLASSIC_BTN_LSTICK_LEFT);
+const uint64 CLASSIC_BTN_LSTICK_DOWN = calcbit(GENERAL_CLASSIC_BTN_LSTICK_DOWN);
+const uint64 CLASSIC_BTN_LSTICK_UP = calcbit(GENERAL_CLASSIC_BTN_LSTICK_UP);
+
+const uint64 CLASSIC_BTN_RSTICK_RIGHT = calcbit(GENERAL_CLASSIC_BTN_RSTICK_RIGHT);
+const uint64 CLASSIC_BTN_RSTICK_LEFT = calcbit(GENERAL_CLASSIC_BTN_RSTICK_LEFT);
+
+const uint64 CLASSIC_BTN_RSTICK_DOWN = calcbit(GENERAL_CLASSIC_BTN_RSTICK_DOWN);
+const uint64 CLASSIC_BTN_RSTICK_UP = calcbit(GENERAL_CLASSIC_BTN_RSTICK_UP);
+
+const uint64 WIIMOTE_BTN_SHIFT_SHAKE = calcbit(GENERAL_WIIMOTE_BTN_SHIFT_SHAKE);
+const uint64 NUNCHUK_BTN_SHIFT_SHAKE = calcbit(GENERAL_NUNCHUK_BTN_SHIFT_SHAKE);
+
+const uint64 WIIMOTE_BUTTON_MASK
+= WIIMOTE_BTN_1 |
+ WIIMOTE_BTN_2 |
+ WIIMOTE_BTN_A |
+ WIIMOTE_BTN_B |
+ WIIMOTE_BTN_MINUS |
+ WIIMOTE_BTN_PLUS |
+ WIIMOTE_BTN_HOME |
+ WIIMOTE_BTN_RIGHT |
+ WIIMOTE_BTN_LEFT |
+ WIIMOTE_BTN_DOWN |
+ WIIMOTE_BTN_UP;
+
+const uint64 WIIMOTE_SHIFT_MASK
+= WIIMOTE_BTN_SHIFT_BACKWARD |
+ WIIMOTE_BTN_SHIFT_FORWARD |
+ WIIMOTE_BTN_SHIFT_RIGHT |
+ WIIMOTE_BTN_SHIFT_LEFT |
+ WIIMOTE_BTN_SHIFT_DOWN |
+ WIIMOTE_BTN_SHIFT_UP |
+ WIIMOTE_BTN_SHIFT_SHAKE;
+
+const uint64 WIIMOTE_TILT_MASK
+= WIIMOTE_BTN_TILT_FRONT |
+ WIIMOTE_BTN_TILT_BACK |
+ WIIMOTE_BTN_TILT_RIGHT |
+ WIIMOTE_BTN_TILT_LEFT;
+
+const uint64 NUNCHUK_BUTTON_MASK
+= NUNCHUK_BTN_C |
+ NUNCHUK_BTN_Z;
+
+const uint64 NUNCHUK_STICK_MASK
+= NUNCHUK_BTN_STICK_RIGHT |
+ NUNCHUK_BTN_STICK_LEFT |
+ NUNCHUK_BTN_STICK_DOWN |
+ NUNCHUK_BTN_STICK_UP;
+
+const uint64 NUNCHUK_SHIFT_MASK
+= NUNCHUK_BTN_SHIFT_BACKWARD |
+ NUNCHUK_BTN_SHIFT_FORWARD |
+ NUNCHUK_BTN_SHIFT_RIGHT |
+ NUNCHUK_BTN_SHIFT_LEFT |
+ NUNCHUK_BTN_SHIFT_DOWN |
+ NUNCHUK_BTN_SHIFT_UP |
+ NUNCHUK_BTN_SHIFT_SHAKE;
+
+const uint64 NUNCHUK_TILT_MASK
+= NUNCHUK_BTN_TILT_FRONT |
+ NUNCHUK_BTN_TILT_BACK |
+ NUNCHUK_BTN_TILT_RIGHT |
+ NUNCHUK_BTN_TILT_LEFT;
+
+const uint64 CLASSIC_BUTTON_MASK
+= CLASSIC_BTN_X |
+ CLASSIC_BTN_Y |
+ CLASSIC_BTN_A |
+ CLASSIC_BTN_B |
+ CLASSIC_BTN_L |
+ CLASSIC_BTN_R |
+ CLASSIC_BTN_ZL |
+ CLASSIC_BTN_ZR |
+ CLASSIC_BTN_MINUS |
+ CLASSIC_BTN_PLUS |
+ CLASSIC_BTN_HOME |
+ CLASSIC_BTN_RIGHT |
+ CLASSIC_BTN_LEFT |
+ CLASSIC_BTN_DOWN |
+ CLASSIC_BTN_UP;
+
+const uint64 CLASSIC_LSTICK_MASK
+= CLASSIC_BTN_LSTICK_RIGHT |
+ CLASSIC_BTN_LSTICK_LEFT |
+ CLASSIC_BTN_LSTICK_DOWN |
+ CLASSIC_BTN_LSTICK_UP;
+
+const uint64 CLASSIC_RSTICK_MASK
+= CLASSIC_BTN_RSTICK_RIGHT |
+ CLASSIC_BTN_RSTICK_LEFT |
+ CLASSIC_BTN_RSTICK_DOWN |
+ CLASSIC_BTN_RSTICK_UP;
+
+const uint64 WIIMOTE_BUTTON_NOTMASK = ~WIIMOTE_BUTTON_MASK;
+const uint64 WIIMOTE_SHIFT_NOTMASK = ~WIIMOTE_SHIFT_MASK;
+const uint64 WIIMOTE_TILT_NOTMASK = ~WIIMOTE_TILT_MASK;
+const uint64 NUNCHUK_BUTTON_NOTMASK = ~NUNCHUK_BUTTON_MASK;
+const uint64 NUNCHUK_STICK_NOTMASK = ~NUNCHUK_STICK_MASK;
+const uint64 NUNCHUK_SHIFT_NOTMASK = ~NUNCHUK_SHIFT_MASK;
+const uint64 NUNCHUK_TILT_NOTMASK = ~NUNCHUK_TILT_MASK;
+const uint64 CLASSIC_BUTTON_NOTMASK = ~CLASSIC_BUTTON_MASK;
+const uint64 CLASSIC_LSTICK_NOTMASK = ~CLASSIC_LSTICK_MASK;
+const uint64 CLASSIC_RSTICK_NOTMASK = ~CLASSIC_RSTICK_MASK;
+
+#endif //WIIMOTEDEV_H
diff --git a/src/wiimotedev/proto.h b/src/wiimotedev/proto.h
new file mode 100644
index 000000000..62b9053cc
--- /dev/null
+++ b/src/wiimotedev/proto.h
@@ -0,0 +1,55 @@
+/**********************************************************************************
+ * Wiimotedev daemon headers *
+ * Copyright (C) 2010 Bartłomiej Burdukiewicz *
+ * Contact: dev.strikeu@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2.1 of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this program; if not, see . *
+ **********************************************************************************/
+
+
+#ifndef WIIMOTEDEVPROTO_H
+#define WIIMOTEDEVPROTO_H
+
+/* Typedefs ------------------------------------------------------ */
+typedef unsigned short uint16;
+
+/* Proto ids ----------------------------------------------------- */
+const uint16 iddbusWiimoteGeneralButtons = 0x01;
+const uint16 iddbusWiimoteConnected= 0x02;
+const uint16 iddbusWiimoteDisconnected = 0x03;
+const uint16 iddbusWiimoteBatteryLife = 0x04;
+const uint16 iddbusWiimoteButtons = 0x05;
+const uint16 iddbusWiimoteStatus = 0x06;
+const uint16 iddbusWiimoteInfrared = 0x07;
+const uint16 iddbusWiimoteAcc = 0x08;
+const uint16 iddbusNunchukPlugged = 0x09;
+const uint16 iddbusNunchukUnplugged = 0x0A;
+const uint16 iddbusNunchukButtons = 0x0B;
+const uint16 iddbusNunchukStick = 0x0C;
+const uint16 iddbusNunchukAcc = 0x0D;
+const uint16 iddbusClassicControllerPlugged = 0x0E;
+const uint16 iddbusClassicControllerUnplugged = 0x0F;
+const uint16 iddbusClassicControllerButtons = 0x10;
+const uint16 iddbusClassicControllerLStick = 0x11;
+const uint16 iddbusClassicControllerRStick = 0x12;
+
+const uint16 iddbusResponseBool = 0xF0;
+const uint16 iddbusResponseInt8 = 0xF1;
+
+const uint16 iddbusWiimoteGetRumbleStatus = 0x01;
+const uint16 iddbusWiimoteSetLedStatus = 0x02;
+const uint16 iddbusWiimoteSetRumbleStatus = 0x03;
+const uint16 iddbusWiimoteGetLedStatus = 0x04;
+
+#endif //WIIMOTEDEVPROTO_H