/* * Copyright (C) 2007 by Tobias Arrskog * topfs@tobias * * Copyright (C) 2007-2013 Team XBMC * http://kodi.tv * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, see * . * */ #pragma once /* Toggle one bit */ #define ToggleBit(bf,b) (bf) = ((bf) & b) ? ((bf) & ~(b)) : ((bf) | (b)) //Settings #define WIIREMOTE_SAMPLES 16 #define DEADZONE_Y 0.3f #define DEADZONE_X 0.5f #define MOUSE_MAX 65535 #define MOUSE_MIN 0 //The work area is from 0 - MAX but the one sent to XBMC is MIN - (MIN + MOUSE_MAX) #define WIIREMOTE_X_MIN MOUSE_MAX * DEADZONE_X #define WIIREMOTE_Y_MIN MOUSE_MAX * DEADZONE_Y #define WIIREMOTE_X_MAX MOUSE_MAX * (1.0f + DEADZONE_X + DEADZONE_X) #define WIIREMOTE_Y_MAX MOUSE_MAX * (1.0f + DEADZONE_Y + DEADZONE_Y) #define WIIREMOTE_BUTTON_REPEAT_TIME 30 // How long between buttonpresses in repeat mode #define WIIREMOTE_BUTTON_DELAY_TIME 500 //#define CWIID_OLD // Uncomment if the system is running cwiid that is older than 6.0 (The one from ubuntu gutsy repository is < 6.0) //CWIID #include //Bluetooth specific #include #include #include #include // UDP Client #ifdef DEB_PACK #include #else #include "../../lib/c++/xbmcclient.h" #endif /*#include */ #include #include #include #include class CWiiRemote { public: CWiiRemote(char *btaddr = NULL); ~CWiiRemote(); void Initialize(CAddress Addr, int Socket); void Disconnect(); bool GetConnected(); bool EnableWiiRemote(); bool DisableWiiRemote(); void Update(); // Mouse functions bool HaveIRSources(); bool isActive(); void EnableMouseEmulation(); void DisableMouseEmulation(); bool Connect(); void SetBluetoothAddress(const char * btaddr); void SetSensitivity(float DeadX, float DeadY, int Samples); void SetJoystickMap(const char *JoyMap); private: int m_NumSamples; int *m_SamplesX; int *m_SamplesY; float m_MaxX; float m_MaxY; float m_MinX; float m_MinY; #ifdef CWIID_OLD bool CheckConnection(); int m_LastMsgTime; #endif char *m_JoyMap; int m_lastKeyPressed; int m_LastKey; bool m_buttonRepeat; int m_lastKeyPressedNunchuck; int m_LastKeyNunchuck; bool m_buttonRepeatNunchuck; void SetRptMode(); void SetLedState(); void SetupWiiRemote(); bool m_connected; bool m_DisconnectWhenPossible; bool m_connectThreadRunning; //CWIID Specific cwiid_wiimote_t *m_wiiremoteHandle; unsigned char m_ledState; unsigned char m_rptMode; bdaddr_t m_btaddr; static void MessageCallback(cwiid_wiimote_t *wiiremote, int mesgCount, union cwiid_mesg mesg[], struct timespec *timestamp); #ifdef CWIID_OLD static void MessageCallback(cwiid_wiimote_t *wiiremote, int mesgCount, union cwiid_mesg mesg[]); #endif #ifndef _DEBUG /* This takes the errors generated at pre-connect and silence them as they are mostly not needed */ static void ErrorCallback(struct wiimote *wiiremote, const char *str, va_list ap); #endif int m_Socket; CAddress m_MyAddr; // Mouse bool m_haveIRSources; bool m_isActive; bool m_useIRMouse; int m_lastActiveTime; /* The protected functions is for the static callbacks */ protected: //Connection void DisconnectNow(bool startConnectThread); //Mouse void CalculateMousePointer(int x1, int y1, int x2, int y2); // void SetIR(bool set); //Button void ProcessKey(int Key); //Nunchuck void ProcessNunchuck(struct cwiid_nunchuk_mesg &Nunchuck); #ifdef CWIID_OLD //Disconnect check void CheckIn(); #endif }; extern CWiiRemote g_WiiRemote;