mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-6.0
This commit is contained in:
commit
73e9c4455d
@ -1,3 +1,6 @@
|
||||
6.0.1
|
||||
- update repo minversion for kodi 15
|
||||
|
||||
6.0.0
|
||||
- rebuild for OpenELEC-6.0
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
PKG_NAME="repository.unofficial.addon.pro"
|
||||
PKG_VERSION="6.0"
|
||||
PKG_REV="0"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://unofficial.addon.pro"
|
||||
|
@ -10,7 +10,7 @@
|
||||
<checksum>http://unofficial.addon.pro/addons/4.3/@PROJECT@/@ARCH@/addons.xml.md5</checksum>
|
||||
<datadir zip="true">http://unofficial.addon.pro/addons/4.3/@PROJECT@/@ARCH@</datadir>
|
||||
</dir>
|
||||
<dir minversion="14.9.0">
|
||||
<dir minversion="15.0.0">
|
||||
<info>http://unofficial.addon.pro/addons/6.0/@PROJECT@/@ARCH@/addons.xml</info>
|
||||
<checksum>http://unofficial.addon.pro/addons/6.0/@PROJECT@/@ARCH@/addons.xml.md5</checksum>
|
||||
<datadir zip="true">http://unofficial.addon.pro/addons/6.0/@PROJECT@/@ARCH@</datadir>
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="sqlite"
|
||||
PKG_VERSION="autoconf-3081002"
|
||||
PKG_VERSION="autoconf-3081101"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="PublicDomain"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="binutils"
|
||||
PKG_VERSION="2.25"
|
||||
PKG_VERSION="2.25.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,12 +17,12 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="cmake"
|
||||
PKG_VERSION="3.2.3"
|
||||
PKG_VERSION="3.3.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="http://www.cmake.org/"
|
||||
PKG_URL="http://www.cmake.org/files/v3.2/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_URL="http://www.cmake.org/files/v3.3/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_HOST="ccache:host"
|
||||
PKG_PRIORITY="optional"
|
||||
PKG_SECTION="toolchain/devel"
|
||||
@ -51,6 +51,9 @@ SET(CMAKE_SYSTEM_NAME Linux)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
# processor (or hardware) of the target system
|
||||
SET(CMAKE_SYSTEM_PROCESSOR $TARGET_ARCH)
|
||||
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER $TARGET_CC)
|
||||
SET(CMAKE_CXX_COMPILER $TARGET_CXX)
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="gettext"
|
||||
PKG_VERSION="0.19.5"
|
||||
PKG_VERSION="0.19.5.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -0,0 +1,859 @@
|
||||
From ec982e9800ae312972d306b67779215a2add6cde Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 24 Oct 2014 13:45:21 +0100
|
||||
Subject: [PATCH 1/6] Make released key polling wait for exact time until key
|
||||
gets released
|
||||
|
||||
---
|
||||
src/libcec/CECClient.cpp | 16 ++++++++++++++--
|
||||
src/libcec/CECClient.h | 2 +-
|
||||
src/libcec/CECProcessor.cpp | 8 +++++---
|
||||
src/libcec/LibCEC.cpp | 10 ++++++++--
|
||||
src/libcec/LibCEC.h | 4 +++-
|
||||
5 files changed, 31 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index 35c2d3e..e307c0e 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -1067,7 +1067,7 @@ void CCECClient::SetCurrentButton(const cec_user_control_code iButtonCode)
|
||||
AddKey(key);
|
||||
}
|
||||
|
||||
-void CCECClient::CheckKeypressTimeout(void)
|
||||
+uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
{
|
||||
cec_keypress key;
|
||||
|
||||
@@ -1091,12 +1091,24 @@ void CCECClient::CheckKeypressTimeout(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
- return;
|
||||
+ // time when this keypress will be released and we'd like to be called again
|
||||
+ unsigned int timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
+ if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton == comboKey && iTimeoutMs > 0)
|
||||
+ timeout = iTimeoutMs - (iNow - m_buttontime) + 1;
|
||||
+ else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey)
|
||||
+ timeout = CEC_BUTTON_TIMEOUT - (iNow - m_buttontime) + 1;
|
||||
+ if (timeout > CEC_PROCESSOR_SIGNAL_WAIT_TIME)
|
||||
+ {
|
||||
+ LIB_CEC->AddLog(CEC_LOG_ERROR, "Unexpected timeout: %d (%.3f %.3f %.3f) k:%02x", timeout, iNow*1e-3, m_buttontime*1e-3, CEC_BUTTON_TIMEOUT*1e-3, m_iCurrentButton);
|
||||
+ timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
+ }
|
||||
+ return timeout;
|
||||
}
|
||||
}
|
||||
|
||||
LIB_CEC->AddLog(CEC_LOG_DEBUG, "key auto-released: %s (%1x)", ToString(key.keycode), key.keycode);
|
||||
QueueAddKey(key);
|
||||
+ return CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
}
|
||||
|
||||
bool CCECClient::EnableCallbacks(void *cbParam, ICECCallbacks *callbacks)
|
||||
diff --git a/src/libcec/CECClient.h b/src/libcec/CECClient.h
|
||||
index 12f8a3b..c9ce5e3 100644
|
||||
--- a/src/libcec/CECClient.h
|
||||
+++ b/src/libcec/CECClient.h
|
||||
@@ -272,7 +272,7 @@ namespace CEC
|
||||
virtual void AddKey(bool bSendComboKey = false);
|
||||
virtual void AddKey(const cec_keypress &key);
|
||||
virtual void SetCurrentButton(const cec_user_control_code iButtonCode);
|
||||
- virtual void CheckKeypressTimeout(void);
|
||||
+ virtual uint16_t CheckKeypressTimeout(void);
|
||||
virtual void SourceActivated(const cec_logical_address logicalAddress);
|
||||
virtual void SourceDeactivated(const cec_logical_address logicalAddress);
|
||||
|
||||
diff --git a/src/libcec/CECProcessor.cpp b/src/libcec/CECProcessor.cpp
|
||||
index 99f71aa..604b950 100644
|
||||
--- a/src/libcec/CECProcessor.cpp
|
||||
+++ b/src/libcec/CECProcessor.cpp
|
||||
@@ -52,7 +52,6 @@
|
||||
using namespace CEC;
|
||||
using namespace PLATFORM;
|
||||
|
||||
-#define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
|
||||
#define ACTIVE_SOURCE_CHECK_INTERVAL 500
|
||||
#define TV_PRESENT_CHECK_INTERVAL 30000
|
||||
|
||||
@@ -260,6 +259,7 @@ bool CCECProcessor::OnCommandReceived(const cec_command &command)
|
||||
|
||||
void *CCECProcessor::Process(void)
|
||||
{
|
||||
+ uint16_t timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
m_libcec->AddLog(CEC_LOG_DEBUG, "processor thread started");
|
||||
|
||||
if (!m_connCheck)
|
||||
@@ -274,13 +274,13 @@ void *CCECProcessor::Process(void)
|
||||
while (!IsStopped() && m_communication->IsOpen())
|
||||
{
|
||||
// wait for a new incoming command, and process it
|
||||
- if (m_inBuffer.Pop(command, CEC_PROCESSOR_SIGNAL_WAIT_TIME))
|
||||
+ if (m_inBuffer.Pop(command, timeout))
|
||||
ProcessCommand(command);
|
||||
|
||||
if (CECInitialised() && !IsStopped())
|
||||
{
|
||||
// check clients for keypress timeouts
|
||||
- m_libcec->CheckKeypressTimeout();
|
||||
+ timeout = m_libcec->CheckKeypressTimeout();
|
||||
|
||||
// check if we need to replace handlers
|
||||
ReplaceHandlers();
|
||||
@@ -311,6 +311,8 @@ void *CCECProcessor::Process(void)
|
||||
tvPresentCheck.Init(TV_PRESENT_CHECK_INTERVAL);
|
||||
}
|
||||
}
|
||||
+ else
|
||||
+ timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
diff --git a/src/libcec/LibCEC.cpp b/src/libcec/LibCEC.cpp
|
||||
index af36b79..5ccb8dd 100644
|
||||
--- a/src/libcec/LibCEC.cpp
|
||||
+++ b/src/libcec/LibCEC.cpp
|
||||
@@ -361,11 +361,17 @@ bool CLibCEC::IsValidPhysicalAddress(uint16_t iPhysicalAddress)
|
||||
iPhysicalAddress <= CEC_MAX_PHYSICAL_ADDRESS;
|
||||
}
|
||||
|
||||
-void CLibCEC::CheckKeypressTimeout(void)
|
||||
+uint16_t CLibCEC::CheckKeypressTimeout(void)
|
||||
{
|
||||
+ uint16_t timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
// check all clients
|
||||
for (std::vector<CECClientPtr>::iterator it = m_clients.begin(); it != m_clients.end(); it++)
|
||||
- (*it)->CheckKeypressTimeout();
|
||||
+ {
|
||||
+ uint16_t t = (*it)->CheckKeypressTimeout();
|
||||
+ if (t < timeout)
|
||||
+ timeout = t;
|
||||
+ }
|
||||
+ return timeout;
|
||||
}
|
||||
|
||||
void CLibCEC::AddLog(const cec_log_level level, const char *strFormat, ...)
|
||||
diff --git a/src/libcec/LibCEC.h b/src/libcec/LibCEC.h
|
||||
index 6d9a229..d9d1e7b 100644
|
||||
--- a/src/libcec/LibCEC.h
|
||||
+++ b/src/libcec/LibCEC.h
|
||||
@@ -39,6 +39,8 @@
|
||||
#include "CECTypeUtils.h"
|
||||
#include <memory>
|
||||
|
||||
+#define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
|
||||
+
|
||||
namespace CEC
|
||||
{
|
||||
class CAdapterCommunication;
|
||||
@@ -125,7 +127,7 @@ namespace CEC
|
||||
|
||||
void AddLog(const cec_log_level level, const char *strFormat, ...);
|
||||
void AddCommand(const cec_command &command);
|
||||
- void CheckKeypressTimeout(void);
|
||||
+ uint16_t CheckKeypressTimeout(void);
|
||||
void Alert(const libcec_alert type, const libcec_parameter ¶m);
|
||||
|
||||
static bool IsValidPhysicalAddress(uint16_t iPhysicalAddress);
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
From 41f0f3ec9ac136da3565c96fd5a7075499f3938d Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 24 Oct 2014 13:51:34 +0100
|
||||
Subject: [PATCH 2/6] Keep track of time since initial button press and last
|
||||
button update
|
||||
|
||||
---
|
||||
src/libcec/CECClient.cpp | 44 +++++++++++++++++++++++++++-----------------
|
||||
src/libcec/CECClient.h | 3 ++-
|
||||
2 files changed, 29 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index e307c0e..e7935b9 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -54,7 +54,8 @@ CCECClient::CCECClient(CCECProcessor *processor, const libcec_configuration &con
|
||||
m_bInitialised(false),
|
||||
m_bRegistered(false),
|
||||
m_iCurrentButton(CEC_USER_CONTROL_CODE_UNKNOWN),
|
||||
- m_buttontime(0),
|
||||
+ m_initialButtontime(0),
|
||||
+ m_updateButtontime(0),
|
||||
m_iPreventForwardingPowerOffCommand(0),
|
||||
m_iLastKeypressTime(0)
|
||||
{
|
||||
@@ -981,9 +982,10 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */)
|
||||
CLockObject lock(m_mutex);
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
{
|
||||
- key.duration = (unsigned int) (GetTimeMs() - m_buttontime);
|
||||
+ unsigned int duration = (unsigned int) (GetTimeMs() - m_updateButtontime);
|
||||
+ key.duration = (unsigned int) (GetTimeMs() - m_initialButtontime);
|
||||
|
||||
- if (key.duration > m_configuration.iComboKeyTimeoutMs ||
|
||||
+ if (duration > m_configuration.iComboKeyTimeoutMs ||
|
||||
m_configuration.iComboKeyTimeoutMs == 0 ||
|
||||
m_iCurrentButton != m_configuration.comboKey ||
|
||||
bSendComboKey)
|
||||
@@ -991,14 +993,15 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */)
|
||||
key.keycode = m_iCurrentButton;
|
||||
|
||||
m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
- m_buttontime = 0;
|
||||
+ m_initialButtontime = 0;
|
||||
+ m_updateButtontime = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key.keycode != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
{
|
||||
- LIB_CEC->AddLog(CEC_LOG_DEBUG, "key released: %s (%1x)", ToString(key.keycode), key.keycode);
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "key released: %s (%1x) D:%dms", ToString(key.keycode), key.keycode, key.duration);
|
||||
QueueAddKey(key);
|
||||
}
|
||||
}
|
||||
@@ -1012,7 +1015,7 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
AddKey();
|
||||
return;
|
||||
}
|
||||
-
|
||||
+ bool isrepeat = false;
|
||||
cec_keypress transmitKey(key);
|
||||
cec_user_control_code comboKey(m_configuration.clientVersion >= LIBCEC_VERSION_TO_UINT(2, 0, 5) ?
|
||||
m_configuration.comboKey : CEC_USER_CONTROL_CODE_STOP);
|
||||
@@ -1035,22 +1038,27 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
AddKey(true);
|
||||
}
|
||||
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x) current(%lx) duration(%d)", ToString(transmitKey.keycode), transmitKey.keycode, m_iCurrentButton, key.duration);
|
||||
+
|
||||
if (m_iCurrentButton == key.keycode)
|
||||
{
|
||||
- m_buttontime = GetTimeMs();
|
||||
+ m_updateButtontime = GetTimeMs();
|
||||
+ isrepeat = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
- AddKey();
|
||||
+ if (m_iCurrentButton != transmitKey.keycode)
|
||||
+ AddKey();
|
||||
if (key.duration == 0)
|
||||
{
|
||||
m_iCurrentButton = transmitKey.keycode;
|
||||
- m_buttontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();
|
||||
+ m_initialButtontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();
|
||||
+ m_updateButtontime = m_initialButtontime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- if (key.keycode != comboKey || key.duration > 0)
|
||||
+ if (!isrepeat && (key.keycode != comboKey || key.duration > 0))
|
||||
{
|
||||
LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x)", ToString(transmitKey.keycode), transmitKey.keycode);
|
||||
QueueAddKey(transmitKey);
|
||||
@@ -1074,32 +1082,34 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
uint64_t iNow = GetTimeMs();
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s T:%.3f", __FUNCTION__, iNow*1e-3);
|
||||
cec_user_control_code comboKey(m_configuration.clientVersion >= LIBCEC_VERSION_TO_UINT(2, 0, 5) ?
|
||||
m_configuration.comboKey : CEC_USER_CONTROL_CODE_STOP);
|
||||
uint32_t iTimeoutMs(m_configuration.clientVersion >= LIBCEC_VERSION_TO_UINT(2, 0, 5) ?
|
||||
m_configuration.iComboKeyTimeoutMs : CEC_DEFAULT_COMBO_TIMEOUT_MS);
|
||||
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_buttontime > iTimeoutMs) ||
|
||||
- (m_iCurrentButton != comboKey && iNow - m_buttontime > CEC_BUTTON_TIMEOUT)))
|
||||
+ ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime > iTimeoutMs) ||
|
||||
+ (m_iCurrentButton != comboKey && iNow - m_updateButtontime > CEC_BUTTON_TIMEOUT)))
|
||||
{
|
||||
- key.duration = (unsigned int) (iNow - m_buttontime);
|
||||
+ key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
|
||||
m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
- m_buttontime = 0;
|
||||
+ m_initialButtontime = 0;
|
||||
+ m_updateButtontime = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// time when this keypress will be released and we'd like to be called again
|
||||
unsigned int timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton == comboKey && iTimeoutMs > 0)
|
||||
- timeout = iTimeoutMs - (iNow - m_buttontime) + 1;
|
||||
+ timeout = iTimeoutMs - (iNow - m_updateButtontime) + 1;
|
||||
else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey)
|
||||
- timeout = CEC_BUTTON_TIMEOUT - (iNow - m_buttontime) + 1;
|
||||
+ timeout = CEC_BUTTON_TIMEOUT - (iNow - m_updateButtontime) + 1;
|
||||
if (timeout > CEC_PROCESSOR_SIGNAL_WAIT_TIME)
|
||||
{
|
||||
- LIB_CEC->AddLog(CEC_LOG_ERROR, "Unexpected timeout: %d (%.3f %.3f %.3f) k:%02x", timeout, iNow*1e-3, m_buttontime*1e-3, CEC_BUTTON_TIMEOUT*1e-3, m_iCurrentButton);
|
||||
+ LIB_CEC->AddLog(CEC_LOG_ERROR, "Unexpected timeout: %d (%.3f %.3f %.3f) k:%02x", timeout, iNow*1e-3, m_updateButtontime*1e-3, CEC_BUTTON_TIMEOUT*1e-3, m_iCurrentButton);
|
||||
timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
}
|
||||
return timeout;
|
||||
diff --git a/src/libcec/CECClient.h b/src/libcec/CECClient.h
|
||||
index c9ce5e3..611c68b 100644
|
||||
--- a/src/libcec/CECClient.h
|
||||
+++ b/src/libcec/CECClient.h
|
||||
@@ -404,7 +404,8 @@ namespace CEC
|
||||
PLATFORM::CMutex m_mutex; /**< mutex for changes to this instance */
|
||||
PLATFORM::CMutex m_cbMutex; /**< mutex that is held when doing anything with callbacks */
|
||||
cec_user_control_code m_iCurrentButton; /**< the control code of the button that's currently held down (if any) */
|
||||
- int64_t m_buttontime; /**< the timestamp when the button was pressed (in seconds since epoch), or 0 if none was pressed. */
|
||||
+ int64_t m_initialButtontime; /**< the timestamp when the button was initially pressed (in seconds since epoch), or 0 if none was pressed. */
|
||||
+ int64_t m_updateButtontime; /**< the timestamp when the button was updated (in seconds since epoch), or 0 if none was pressed. */
|
||||
int64_t m_iPreventForwardingPowerOffCommand; /**< prevent forwarding standby commands until this time */
|
||||
int64_t m_iLastKeypressTime; /**< last time a key press was sent to the client */
|
||||
cec_keypress m_lastKeypress; /**< the last key press that was sent to the client */
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
From 273ead6980b69eddf98810eb1eb33d94a7d74fce Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 28 Oct 2014 00:09:18 +0000
|
||||
Subject: [PATCH 3/6] Support repeating button presses with configurable repeat
|
||||
rate
|
||||
|
||||
---
|
||||
include/cectypes.h | 6 ++
|
||||
src/libcec/CECClient.cpp | 100 +++++++++++++++++++----
|
||||
src/libcec/CECClient.h | 6 +-
|
||||
src/libcec/implementations/CECCommandHandler.cpp | 2 +-
|
||||
4 files changed, 96 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/include/cectypes.h b/include/cectypes.h
|
||||
index acff259..8f098ef 100644
|
||||
--- a/include/cectypes.h
|
||||
+++ b/include/cectypes.h
|
||||
@@ -1493,6 +1493,8 @@ struct libcec_configuration
|
||||
XXX changed meaning in 2.2.0 to not break binary compatibility. next major (3.0) release will fix it in a nicer way */
|
||||
cec_user_control_code comboKey; /*!< key code that initiates combo keys. defaults to CEC_USER_CONTROL_CODE_F1_BLUE. CEC_USER_CONTROL_CODE_UNKNOWN to disable. added in 2.0.5 */
|
||||
uint32_t iComboKeyTimeoutMs; /*!< timeout until the combo key is sent as normal keypress */
|
||||
+ uint32_t iButtonRepeatRateMs; /*!< rate at which buttons autorepeat. 0 means rely on CEC device */
|
||||
+ uint32_t iButtonReleaseDelayMs;/*!< duration after last update until a button is considered released */
|
||||
|
||||
#ifdef __cplusplus
|
||||
libcec_configuration(void) { Clear(); }
|
||||
@@ -1527,6 +1529,8 @@ struct libcec_configuration
|
||||
cecVersion == other.cecVersion &&
|
||||
adapterType == other.adapterType &&
|
||||
iDoubleTapTimeout50Ms == other.iDoubleTapTimeout50Ms &&
|
||||
+ iButtonRepeatRateMs == other.iButtonRepeatRateMs &&
|
||||
+ iButtonReleaseDelayMs == other.iButtonReleaseDelayMs &&
|
||||
(other.clientVersion <= LIBCEC_VERSION_TO_UINT(2, 0, 4) || comboKey == other.comboKey) &&
|
||||
(other.clientVersion <= LIBCEC_VERSION_TO_UINT(2, 0, 4) || iComboKeyTimeoutMs == other.iComboKeyTimeoutMs) &&
|
||||
(other.clientVersion < LIBCEC_VERSION_TO_UINT(2, 1, 0) || bPowerOnScreensaver == other.bPowerOnScreensaver));
|
||||
@@ -1567,6 +1571,8 @@ struct libcec_configuration
|
||||
iDoubleTapTimeout50Ms = CEC_DOUBLE_TAP_TIMEOUT_50_MS;
|
||||
comboKey = CEC_USER_CONTROL_CODE_STOP;
|
||||
iComboKeyTimeoutMs = CEC_DEFAULT_COMBO_TIMEOUT_MS;
|
||||
+ iButtonRepeatRateMs = 0;
|
||||
+ iButtonReleaseDelayMs = CEC_BUTTON_TIMEOUT;
|
||||
|
||||
memset(strDeviceName, 0, 13);
|
||||
deviceTypes.Clear();
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index e7935b9..598628d 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -56,6 +56,10 @@ CCECClient::CCECClient(CCECProcessor *processor, const libcec_configuration &con
|
||||
m_iCurrentButton(CEC_USER_CONTROL_CODE_UNKNOWN),
|
||||
m_initialButtontime(0),
|
||||
m_updateButtontime(0),
|
||||
+ m_repeatButtontime(0),
|
||||
+ m_releaseButtontime(0),
|
||||
+ m_pressedButtoncount(0),
|
||||
+ m_releasedButtoncount(0),
|
||||
m_iPreventForwardingPowerOffCommand(0),
|
||||
m_iLastKeypressTime(0)
|
||||
{
|
||||
@@ -851,6 +855,9 @@ bool CCECClient::GetCurrentConfiguration(libcec_configuration &configuration)
|
||||
configuration.bMonitorOnly = m_configuration.bMonitorOnly;
|
||||
configuration.cecVersion = m_configuration.cecVersion;
|
||||
configuration.adapterType = m_configuration.adapterType;
|
||||
+ configuration.iDoubleTapTimeout50Ms = m_configuration.iDoubleTapTimeout50Ms;
|
||||
+ configuration.iButtonRepeatRateMs = m_configuration.iButtonRepeatRateMs;
|
||||
+ configuration.iButtonReleaseDelayMs = m_configuration.iButtonReleaseDelayMs;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -894,6 +901,9 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration)
|
||||
m_configuration.cecVersion = configuration.cecVersion;
|
||||
m_configuration.adapterType = configuration.adapterType;
|
||||
m_configuration.iDoubleTapTimeout50Ms = configuration.iDoubleTapTimeout50Ms;
|
||||
+ m_configuration.iButtonRepeatRateMs = configuration.iButtonRepeatRateMs;
|
||||
+ m_configuration.iButtonReleaseDelayMs = configuration.iButtonReleaseDelayMs;
|
||||
+
|
||||
m_configuration.deviceTypes.Add(configuration.deviceTypes[0]);
|
||||
|
||||
if (m_configuration.clientVersion >= LIBCEC_VERSION_TO_UINT(2, 0, 5))
|
||||
@@ -950,6 +960,7 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration)
|
||||
primary->ActivateSource();
|
||||
}
|
||||
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: %d:%d:%d", __FUNCTION__, DoubleTapTimeoutMS(), m_configuration.iButtonRepeatRateMs, m_configuration.iButtonReleaseDelayMs);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -973,11 +984,15 @@ void CCECClient::AddCommand(const cec_command &command)
|
||||
}
|
||||
}
|
||||
|
||||
-void CCECClient::AddKey(bool bSendComboKey /* = false */)
|
||||
+void CCECClient::AddKey(bool bSendComboKey /* = false */, bool bButtonRelease /* = false */)
|
||||
{
|
||||
cec_keypress key;
|
||||
key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
|
||||
+ // we ignore button releases when supporting repeating keys
|
||||
+ if (bButtonRelease && m_configuration.iButtonRepeatRateMs && m_configuration.iButtonReleaseDelayMs)
|
||||
+ return;
|
||||
+
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
@@ -995,6 +1010,10 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */)
|
||||
m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
m_initialButtontime = 0;
|
||||
m_updateButtontime = 0;
|
||||
+ m_repeatButtontime = 0;
|
||||
+ m_releaseButtontime = 0;
|
||||
+ m_pressedButtoncount = 0;
|
||||
+ m_releasedButtoncount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1012,6 +1031,7 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
key.keycode < CEC_USER_CONTROL_CODE_SELECT)
|
||||
{
|
||||
// send back the previous key if there is one
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "Unexpected key %s (%1x) D:%dms", ToString(key.keycode), key.keycode, key.duration);
|
||||
AddKey();
|
||||
return;
|
||||
}
|
||||
@@ -1035,7 +1055,10 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
transmitKey.keycode = CEC_USER_CONTROL_CODE_DOT;
|
||||
// default, send back the previous key
|
||||
else
|
||||
+ {
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "Combo key %s (%1x) D%dms:", ToString(key.keycode), key.keycode, key.duration);
|
||||
AddKey(true);
|
||||
+ }
|
||||
}
|
||||
|
||||
LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x) current(%lx) duration(%d)", ToString(transmitKey.keycode), transmitKey.keycode, m_iCurrentButton, key.duration);
|
||||
@@ -1043,17 +1066,44 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
if (m_iCurrentButton == key.keycode)
|
||||
{
|
||||
m_updateButtontime = GetTimeMs();
|
||||
- isrepeat = true;
|
||||
+ m_releaseButtontime = m_updateButtontime + (m_configuration.iButtonReleaseDelayMs ? m_configuration.iButtonReleaseDelayMs : CEC_BUTTON_TIMEOUT);
|
||||
+ // want to have seen some updated before considering a repeat
|
||||
+ if (m_configuration.iButtonRepeatRateMs)
|
||||
+ {
|
||||
+ if (!m_repeatButtontime && m_pressedButtoncount > 1)
|
||||
+ m_repeatButtontime = m_initialButtontime + DoubleTapTimeoutMS();
|
||||
+ isrepeat = true;
|
||||
+ }
|
||||
+ m_pressedButtoncount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_iCurrentButton != transmitKey.keycode)
|
||||
+ {
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "Changed key %s (%1x) D:%dms cur:%lx", ToString(transmitKey.keycode), transmitKey.keycode, transmitKey.duration, m_iCurrentButton);
|
||||
AddKey();
|
||||
+ }
|
||||
if (key.duration == 0)
|
||||
{
|
||||
m_iCurrentButton = transmitKey.keycode;
|
||||
- m_initialButtontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();
|
||||
- m_updateButtontime = m_initialButtontime;
|
||||
+ if (m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
+ {
|
||||
+ m_initialButtontime = 0;
|
||||
+ m_updateButtontime = 0;
|
||||
+ m_repeatButtontime = 0;
|
||||
+ m_releaseButtontime = 0;
|
||||
+ m_pressedButtoncount = 0;
|
||||
+ m_releasedButtoncount = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ m_initialButtontime = GetTimeMs();
|
||||
+ m_updateButtontime = m_initialButtontime;
|
||||
+ m_repeatButtontime = 0; // set this on next update
|
||||
+ m_releaseButtontime = m_initialButtontime + (m_configuration.iButtonReleaseDelayMs ? m_configuration.iButtonReleaseDelayMs : CEC_BUTTON_TIMEOUT);
|
||||
+ m_pressedButtoncount = 1;
|
||||
+ m_releasedButtoncount = 0;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1072,12 +1122,16 @@ void CCECClient::SetCurrentButton(const cec_user_control_code iButtonCode)
|
||||
key.duration = 0;
|
||||
key.keycode = iButtonCode;
|
||||
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "SetCurrentButton %s (%1x) D:%dms cur:%lx", ToString(key.keycode), key.keycode, key.duration);
|
||||
AddKey(key);
|
||||
}
|
||||
|
||||
uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
{
|
||||
+ // time when we'd like to be called again
|
||||
+ unsigned int timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
cec_keypress key;
|
||||
+ key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
@@ -1089,8 +1143,8 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_configuration.iComboKeyTimeoutMs : CEC_DEFAULT_COMBO_TIMEOUT_MS);
|
||||
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime > iTimeoutMs) ||
|
||||
- (m_iCurrentButton != comboKey && iNow - m_updateButtontime > CEC_BUTTON_TIMEOUT)))
|
||||
+ ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs) ||
|
||||
+ (m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)))
|
||||
{
|
||||
key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
@@ -1098,27 +1152,41 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
m_initialButtontime = 0;
|
||||
m_updateButtontime = 0;
|
||||
+ m_repeatButtontime = 0;
|
||||
+ m_releaseButtontime = 0;
|
||||
+ m_pressedButtoncount = 0;
|
||||
+ m_releasedButtoncount = 0;
|
||||
+ }
|
||||
+ else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
+ (m_iCurrentButton != comboKey && m_repeatButtontime && iNow >= (uint64_t)m_repeatButtontime))
|
||||
+ {
|
||||
+ key.duration = 0;
|
||||
+ key.keycode = m_iCurrentButton;
|
||||
+ m_repeatButtontime = iNow + m_configuration.iButtonRepeatRateMs;
|
||||
+ timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);
|
||||
}
|
||||
else
|
||||
{
|
||||
- // time when this keypress will be released and we'd like to be called again
|
||||
- unsigned int timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton == comboKey && iTimeoutMs > 0)
|
||||
- timeout = iTimeoutMs - (iNow - m_updateButtontime) + 1;
|
||||
- else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey)
|
||||
- timeout = CEC_BUTTON_TIMEOUT - (iNow - m_updateButtontime) + 1;
|
||||
+ timeout = std::min((uint64_t)timeout, m_updateButtontime - iNow + iTimeoutMs);
|
||||
+ if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey && m_releaseButtontime)
|
||||
+ timeout = std::min((uint64_t)timeout, m_releaseButtontime - iNow);
|
||||
+ if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey && m_repeatButtontime)
|
||||
+ timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);
|
||||
if (timeout > CEC_PROCESSOR_SIGNAL_WAIT_TIME)
|
||||
{
|
||||
- LIB_CEC->AddLog(CEC_LOG_ERROR, "Unexpected timeout: %d (%.3f %.3f %.3f) k:%02x", timeout, iNow*1e-3, m_updateButtontime*1e-3, CEC_BUTTON_TIMEOUT*1e-3, m_iCurrentButton);
|
||||
+ LIB_CEC->AddLog(CEC_LOG_ERROR, "Unexpected timeout: %d (%.3f %.3f %.3f) k:%02x", timeout, iNow*1e-3, m_updateButtontime*1e-3, m_releaseButtontime*1e-3, m_iCurrentButton);
|
||||
timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
}
|
||||
- return timeout;
|
||||
}
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "key %s: %s (%1x) timeout:%dms (rel:%d,rep:%d,prs:%d,rel:%d)", key.keycode == CEC_USER_CONTROL_CODE_UNKNOWN ? "idle" : key.duration ? "released" : "repeated",
|
||||
+ ToString(m_iCurrentButton), m_iCurrentButton, timeout, (int)(m_releaseButtontime ? m_releaseButtontime - iNow : 0), (int)(m_repeatButtontime ? m_repeatButtontime - iNow : 0), m_pressedButtoncount, m_releasedButtoncount);
|
||||
}
|
||||
|
||||
- LIB_CEC->AddLog(CEC_LOG_DEBUG, "key auto-released: %s (%1x)", ToString(key.keycode), key.keycode);
|
||||
- QueueAddKey(key);
|
||||
- return CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
+ if (key.keycode != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
+ QueueAddKey(key);
|
||||
+
|
||||
+ return timeout;
|
||||
}
|
||||
|
||||
bool CCECClient::EnableCallbacks(void *cbParam, ICECCallbacks *callbacks)
|
||||
diff --git a/src/libcec/CECClient.h b/src/libcec/CECClient.h
|
||||
index 611c68b..adeb5af 100644
|
||||
--- a/src/libcec/CECClient.h
|
||||
+++ b/src/libcec/CECClient.h
|
||||
@@ -269,7 +269,7 @@ namespace CEC
|
||||
// callbacks
|
||||
virtual void Alert(const libcec_alert type, const libcec_parameter ¶m) { QueueAlert(type, param); }
|
||||
virtual void AddLog(const cec_log_message &message) { QueueAddLog(message); }
|
||||
- virtual void AddKey(bool bSendComboKey = false);
|
||||
+ virtual void AddKey(bool bSendComboKey = false, bool bButtonRelease = false);
|
||||
virtual void AddKey(const cec_keypress &key);
|
||||
virtual void SetCurrentButton(const cec_user_control_code iButtonCode);
|
||||
virtual uint16_t CheckKeypressTimeout(void);
|
||||
@@ -406,6 +406,10 @@ namespace CEC
|
||||
cec_user_control_code m_iCurrentButton; /**< the control code of the button that's currently held down (if any) */
|
||||
int64_t m_initialButtontime; /**< the timestamp when the button was initially pressed (in seconds since epoch), or 0 if none was pressed. */
|
||||
int64_t m_updateButtontime; /**< the timestamp when the button was updated (in seconds since epoch), or 0 if none was pressed. */
|
||||
+ int64_t m_repeatButtontime; /**< the timestamp when the button will next repeat (in seconds since epoch), or 0 if repeat is disabled. */
|
||||
+ int64_t m_releaseButtontime; /**< the timestamp when the button will be released (in seconds since epoch), or 0 if none was pressed. */
|
||||
+ int32_t m_pressedButtoncount; /**< the number of times a button released message has been seen for this press. */
|
||||
+ int32_t m_releasedButtoncount; /**< the number of times a button pressed message has been seen for this press. */
|
||||
int64_t m_iPreventForwardingPowerOffCommand; /**< prevent forwarding standby commands until this time */
|
||||
int64_t m_iLastKeypressTime; /**< last time a key press was sent to the client */
|
||||
cec_keypress m_lastKeypress; /**< the last key press that was sent to the client */
|
||||
diff --git a/src/libcec/implementations/CECCommandHandler.cpp b/src/libcec/implementations/CECCommandHandler.cpp
|
||||
index 6d6244e..d64186f 100644
|
||||
--- a/src/libcec/implementations/CECCommandHandler.cpp
|
||||
+++ b/src/libcec/implementations/CECCommandHandler.cpp
|
||||
@@ -770,7 +770,7 @@ int CCECCommandHandler::HandleUserControlRelease(const cec_command &command)
|
||||
|
||||
CECClientPtr client = m_processor->GetClient(command.destination);
|
||||
if (client)
|
||||
- client->AddKey();
|
||||
+ client->AddKey(false, true);
|
||||
|
||||
return COMMAND_HANDLED;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
From 3336d0827f7fd159430f3431642b07090c06c869 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 28 Oct 2014 01:21:35 +0000
|
||||
Subject: [PATCH 4/6] Skip double press removal. It is handled through other
|
||||
means.
|
||||
|
||||
---
|
||||
src/libcec/CECClient.cpp | 18 +-----------------
|
||||
src/libcec/CECClient.h | 2 --
|
||||
2 files changed, 1 insertion(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index 598628d..dccd874 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -60,11 +60,8 @@ CCECClient::CCECClient(CCECProcessor *processor, const libcec_configuration &con
|
||||
m_releaseButtontime(0),
|
||||
m_pressedButtoncount(0),
|
||||
m_releasedButtoncount(0),
|
||||
- m_iPreventForwardingPowerOffCommand(0),
|
||||
- m_iLastKeypressTime(0)
|
||||
+ m_iPreventForwardingPowerOffCommand(0)
|
||||
{
|
||||
- m_lastKeypress.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
- m_lastKeypress.duration = 0;
|
||||
m_configuration.Clear();
|
||||
// set the initial configuration
|
||||
SetConfiguration(configuration);
|
||||
@@ -1647,20 +1644,7 @@ void CCECClient::CallbackAddKey(const cec_keypress &key)
|
||||
{
|
||||
CLockObject lock(m_cbMutex);
|
||||
if (m_configuration.callbacks && m_configuration.callbacks->CBCecKeyPress)
|
||||
- {
|
||||
- // prevent double taps
|
||||
- int64_t now = GetTimeMs();
|
||||
- if (m_lastKeypress.keycode != key.keycode ||
|
||||
- key.duration > 0 ||
|
||||
- now - m_iLastKeypressTime >= DoubleTapTimeoutMS())
|
||||
- {
|
||||
- // no double tap
|
||||
- if (key.duration == 0)
|
||||
- m_iLastKeypressTime = now;
|
||||
- m_lastKeypress = key;
|
||||
m_configuration.callbacks->CBCecKeyPress(m_configuration.callbackParam, key);
|
||||
- }
|
||||
- }
|
||||
}
|
||||
|
||||
void CCECClient::CallbackAddLog(const cec_log_message &message)
|
||||
diff --git a/src/libcec/CECClient.h b/src/libcec/CECClient.h
|
||||
index adeb5af..43a713b 100644
|
||||
--- a/src/libcec/CECClient.h
|
||||
+++ b/src/libcec/CECClient.h
|
||||
@@ -411,8 +411,6 @@ namespace CEC
|
||||
int32_t m_pressedButtoncount; /**< the number of times a button released message has been seen for this press. */
|
||||
int32_t m_releasedButtoncount; /**< the number of times a button pressed message has been seen for this press. */
|
||||
int64_t m_iPreventForwardingPowerOffCommand; /**< prevent forwarding standby commands until this time */
|
||||
- int64_t m_iLastKeypressTime; /**< last time a key press was sent to the client */
|
||||
- cec_keypress m_lastKeypress; /**< the last key press that was sent to the client */
|
||||
PLATFORM::SyncedBuffer<CCallbackWrap*> m_callbackCalls;
|
||||
};
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
From 0dd0234f620a546bfa843172648383f83d88088c Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Mon, 3 Nov 2014 23:28:04 +0000
|
||||
Subject: [PATCH 5/6] Pass through duration on all button repeats
|
||||
|
||||
---
|
||||
src/libcec/CECClient.cpp | 34 ++++++++++++++++++++++++----------
|
||||
1 file changed, 24 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index dccd874..1946148 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -986,10 +986,6 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */, bool bButtonRelease /*
|
||||
cec_keypress key;
|
||||
key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
|
||||
- // we ignore button releases when supporting repeating keys
|
||||
- if (bButtonRelease && m_configuration.iButtonRepeatRateMs && m_configuration.iButtonReleaseDelayMs)
|
||||
- return;
|
||||
-
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
@@ -1015,6 +1011,10 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */, bool bButtonRelease /*
|
||||
}
|
||||
}
|
||||
|
||||
+ // we don't forward releases when supporting repeating keys
|
||||
+ if (bButtonRelease && m_configuration.iButtonRepeatRateMs)
|
||||
+ return;
|
||||
+
|
||||
if (key.keycode != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
{
|
||||
LIB_CEC->AddLog(CEC_LOG_DEBUG, "key released: %s (%1x) D:%dms", ToString(key.keycode), key.keycode, key.duration);
|
||||
@@ -1107,7 +1107,7 @@ void CCECClient::AddKey(const cec_keypress &key)
|
||||
|
||||
if (!isrepeat && (key.keycode != comboKey || key.duration > 0))
|
||||
{
|
||||
- LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x)", ToString(transmitKey.keycode), transmitKey.keycode);
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x, %d)", ToString(transmitKey.keycode), transmitKey.keycode, transmitKey.duration);
|
||||
QueueAddKey(transmitKey);
|
||||
}
|
||||
}
|
||||
@@ -1129,6 +1129,7 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
unsigned int timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
cec_keypress key;
|
||||
key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
+ key.duration = 0;
|
||||
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
@@ -1140,8 +1141,7 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_configuration.iComboKeyTimeoutMs : CEC_DEFAULT_COMBO_TIMEOUT_MS);
|
||||
|
||||
if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs) ||
|
||||
- (m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)))
|
||||
+ m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs)
|
||||
{
|
||||
key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
@@ -1155,9 +1155,23 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_releasedButtoncount = 0;
|
||||
}
|
||||
else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
+ m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)
|
||||
+ {
|
||||
+ key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
+ key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
+
|
||||
+ m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
+ m_initialButtontime = 0;
|
||||
+ m_updateButtontime = 0;
|
||||
+ m_repeatButtontime = 0;
|
||||
+ m_releaseButtontime = 0;
|
||||
+ m_pressedButtoncount = 0;
|
||||
+ m_releasedButtoncount = 0;
|
||||
+ }
|
||||
+ else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
(m_iCurrentButton != comboKey && m_repeatButtontime && iNow >= (uint64_t)m_repeatButtontime))
|
||||
{
|
||||
- key.duration = 0;
|
||||
+ key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
m_repeatButtontime = iNow + m_configuration.iButtonRepeatRateMs;
|
||||
timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);
|
||||
@@ -1176,8 +1190,8 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
|
||||
}
|
||||
}
|
||||
- LIB_CEC->AddLog(CEC_LOG_DEBUG, "key %s: %s (%1x) timeout:%dms (rel:%d,rep:%d,prs:%d,rel:%d)", key.keycode == CEC_USER_CONTROL_CODE_UNKNOWN ? "idle" : key.duration ? "released" : "repeated",
|
||||
- ToString(m_iCurrentButton), m_iCurrentButton, timeout, (int)(m_releaseButtontime ? m_releaseButtontime - iNow : 0), (int)(m_repeatButtontime ? m_repeatButtontime - iNow : 0), m_pressedButtoncount, m_releasedButtoncount);
|
||||
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "Key %s: %s (duration:%d) (%1x) timeout:%dms (rel:%d,rep:%d,prs:%d,rel:%d)", ToString(m_iCurrentButton), key.keycode == CEC_USER_CONTROL_CODE_UNKNOWN ? "idle" : m_repeatButtontime ? "repeated" : "released", key.duration,
|
||||
+ m_iCurrentButton, timeout, (int)(m_releaseButtontime ? m_releaseButtontime - iNow : 0), (int)(m_repeatButtontime ? m_repeatButtontime - iNow : 0), m_pressedButtoncount, m_releasedButtoncount);
|
||||
}
|
||||
|
||||
if (key.keycode != CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
From 1ea01f59d8186d4d53af41961aaccbbc11651115 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 5 Nov 2014 21:04:25 +0000
|
||||
Subject: [PATCH 6/6] squash: Fix for stop needing to be pressed twice
|
||||
|
||||
---
|
||||
src/libcec/CECClient.cpp | 17 ++++++++---------
|
||||
1 file changed, 8 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp
|
||||
index 1946148..f4f114b 100644
|
||||
--- a/src/libcec/CECClient.cpp
|
||||
+++ b/src/libcec/CECClient.cpp
|
||||
@@ -1131,6 +1131,8 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
key.duration = 0;
|
||||
|
||||
+ if (m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN)
|
||||
+ return timeout;
|
||||
{
|
||||
CLockObject lock(m_mutex);
|
||||
uint64_t iNow = GetTimeMs();
|
||||
@@ -1140,8 +1142,7 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
uint32_t iTimeoutMs(m_configuration.clientVersion >= LIBCEC_VERSION_TO_UINT(2, 0, 5) ?
|
||||
m_configuration.iComboKeyTimeoutMs : CEC_DEFAULT_COMBO_TIMEOUT_MS);
|
||||
|
||||
- if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs)
|
||||
+ if (m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs)
|
||||
{
|
||||
key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
@@ -1154,8 +1155,7 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_pressedButtoncount = 0;
|
||||
m_releasedButtoncount = 0;
|
||||
}
|
||||
- else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)
|
||||
+ else if (m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)
|
||||
{
|
||||
key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
|
||||
@@ -1168,8 +1168,7 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
m_pressedButtoncount = 0;
|
||||
m_releasedButtoncount = 0;
|
||||
}
|
||||
- else if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN &&
|
||||
- (m_iCurrentButton != comboKey && m_repeatButtontime && iNow >= (uint64_t)m_repeatButtontime))
|
||||
+ else if (m_iCurrentButton != comboKey && m_repeatButtontime && iNow >= (uint64_t)m_repeatButtontime)
|
||||
{
|
||||
key.duration = (unsigned int) (iNow - m_initialButtontime);
|
||||
key.keycode = m_iCurrentButton;
|
||||
@@ -1178,11 +1177,11 @@ uint16_t CCECClient::CheckKeypressTimeout(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
- if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton == comboKey && iTimeoutMs > 0)
|
||||
+ if (m_iCurrentButton == comboKey && iTimeoutMs > 0)
|
||||
timeout = std::min((uint64_t)timeout, m_updateButtontime - iNow + iTimeoutMs);
|
||||
- if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey && m_releaseButtontime)
|
||||
+ if (m_iCurrentButton != comboKey && m_releaseButtontime)
|
||||
timeout = std::min((uint64_t)timeout, m_releaseButtontime - iNow);
|
||||
- if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && m_iCurrentButton != comboKey && m_repeatButtontime)
|
||||
+ if (m_iCurrentButton != comboKey && m_repeatButtontime)
|
||||
timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);
|
||||
if (timeout > CEC_PROCESSOR_SIGNAL_WAIT_TIME)
|
||||
{
|
||||
--
|
||||
1.9.1
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="bcm2835-driver"
|
||||
PKG_VERSION="47d51d6"
|
||||
PKG_VERSION="53b9bb9"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="nonfree"
|
||||
|
@ -22,12 +22,12 @@
|
||||
# in Xorg.log
|
||||
|
||||
PKG_NAME="libepoxy"
|
||||
PKG_VERSION="b2ae054"
|
||||
PKG_VERSION="1.3.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/anholt/libepoxy"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_URL="https://github.com/anholt/libepoxy/releases/download/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
PKG_DEPENDS_TARGET="toolchain $OPENGL"
|
||||
PKG_PRIORITY="optional"
|
||||
PKG_SECTION="graphics"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libjpeg-turbo"
|
||||
PKG_VERSION="1.4.0"
|
||||
PKG_VERSION="1.4.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="mesa"
|
||||
PKG_VERSION="10.6.2"
|
||||
PKG_VERSION="10.6.4"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="OSS"
|
||||
|
@ -3,6 +3,6 @@ Description=Broadcom sdio firmware update for %I
|
||||
ConditionPathExists=/dev/ttyS1
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Type=simple
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/brcm_patchram_plus --patchram /lib/firmware/brcm/%I.hcd --baudrate 3000000 --use_baudrate_for_download /dev/ttyS1 --enable_hci --no2bytes --tosleep=50000
|
||||
|
@ -3,6 +3,6 @@ Description=Broadcom sdio firmware update for %I
|
||||
ConditionPathExists=/dev/ttymxc3
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Type=simple
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/brcm_patchram_plus --patchram /lib/firmware/brcm/%I.hcd --baudrate 3000000 --use_baudrate_for_download /dev/ttymxc3 --enable_hci --no2bytes --tosleep=50000
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="dvb-firmware"
|
||||
PKG_VERSION="0.0.48"
|
||||
PKG_VERSION="0.0.49"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="Free-to-use"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="iwlwifi-firmware"
|
||||
PKG_VERSION="0.0.2"
|
||||
PKG_VERSION="0.0.3"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="Free-to-use"
|
||||
|
@ -40,7 +40,7 @@ case "$LINUX" in
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET imx6-status-led imx6-soc-fan"
|
||||
;;
|
||||
*)
|
||||
PKG_VERSION="4.1.2"
|
||||
PKG_VERSION="4.1.6"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v4.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
esac
|
||||
|
932
packages/linux/patches/4.1.6/linux-063-xpad-fix_xbox360_wireless.patch
vendored
Normal file
932
packages/linux/patches/4.1.6/linux-063-xpad-fix_xbox360_wireless.patch
vendored
Normal file
@ -0,0 +1,932 @@
|
||||
From 0f578b91219bd354a170eb53359336f67bbfda57 Mon Sep 17 00:00:00 2001
|
||||
From: Matt DeVillier <matt.devillier@gmail.com>
|
||||
Date: Tue, 28 Jul 2015 11:19:40 -0500
|
||||
Subject: [PATCH 1/1] linux/drivers/input/joystick/xpad: fixes for xbox360/one controllers
|
||||
|
||||
merged from https://github.com/paroj/xpad
|
||||
|
||||
- fixed blinking LED on Xbox 360 Wireless Controllers
|
||||
- only expose actually connected Xbox 360 Wireless Controllers
|
||||
- fixed kernel warnings due to submitting active URB requests
|
||||
- updated Xbox One controller force feedback
|
||||
- controller still works after suspend/ resume
|
||||
- Xbox 360 Wireless button mappings are now compatible with Xbox 360 (non-wireless) mappings
|
||||
|
||||
Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
|
||||
---
|
||||
drivers/input/joystick/xpad.c | 647 +++++++++++++++++++++++++-----------------
|
||||
1 file changed, 387 insertions(+), 260 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
|
||||
index 61c7611..afecd26 100644
|
||||
--- a/drivers/input/joystick/xpad.c
|
||||
+++ b/drivers/input/joystick/xpad.c
|
||||
@@ -328,10 +328,8 @@ struct usb_xpad {
|
||||
unsigned char *idata; /* input data */
|
||||
dma_addr_t idata_dma;
|
||||
|
||||
- struct urb *bulk_out;
|
||||
- unsigned char *bdata;
|
||||
-
|
||||
struct urb *irq_out; /* urb for interrupt out report */
|
||||
+ int irq_out_active; /* we must not use an active URB */
|
||||
unsigned char *odata; /* output data */
|
||||
dma_addr_t odata_dma;
|
||||
struct mutex odata_mutex;
|
||||
@@ -344,8 +342,17 @@ struct usb_xpad {
|
||||
|
||||
int mapping; /* map d-pad to buttons or to axes */
|
||||
int xtype; /* type of xbox device */
|
||||
+ unsigned long pad_nr; /* the order x360 pads were attached */
|
||||
+ const char *name; /* name of the device */
|
||||
+ struct work_struct work; /* init/remove device from callback */
|
||||
+ unsigned char odata_serial; /* serial number for xbox one protocol */
|
||||
};
|
||||
|
||||
+static unsigned long xpad_pad_seq;
|
||||
+
|
||||
+static int xpad_init_input(struct usb_xpad *xpad);
|
||||
+static void xpad_deinit_input(struct usb_xpad *xpad);
|
||||
+
|
||||
/*
|
||||
* xpad_process_packet
|
||||
*
|
||||
@@ -355,7 +362,6 @@ struct usb_xpad {
|
||||
* The used report descriptor was taken from ITO Takayukis website:
|
||||
* http://euc.jp/periphs/xbox-controller.ja.html
|
||||
*/
|
||||
-
|
||||
static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
|
||||
{
|
||||
struct input_dev *dev = xpad->dev;
|
||||
@@ -438,7 +444,14 @@ static void xpad360_process_packet(struct usb_xpad *xpad,
|
||||
input_report_key(dev, BTN_TRIGGER_HAPPY2, data[2] & 0x08);
|
||||
input_report_key(dev, BTN_TRIGGER_HAPPY3, data[2] & 0x01);
|
||||
input_report_key(dev, BTN_TRIGGER_HAPPY4, data[2] & 0x02);
|
||||
- } else {
|
||||
+ }
|
||||
+ /* this should be a simple else block. However historically xbox360w
|
||||
+ * has mapped DPAD to buttons while xbox360 did not.
|
||||
+ * This made no sense, but now we can not just switch back and have to
|
||||
+ * support both behaviors.
|
||||
+ */
|
||||
+ if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
|
||||
+ xpad->xtype == XTYPE_XBOX360W) {
|
||||
input_report_abs(dev, ABS_HAT0X,
|
||||
!!(data[2] & 0x08) - !!(data[2] & 0x04));
|
||||
input_report_abs(dev, ABS_HAT0Y,
|
||||
@@ -488,6 +501,24 @@ static void xpad360_process_packet(struct usb_xpad *xpad,
|
||||
input_sync(dev);
|
||||
}
|
||||
|
||||
+static void xpad_identify_controller(struct usb_xpad *xpad);
|
||||
+
|
||||
+static void presence_work_function(struct work_struct *work)
|
||||
+{
|
||||
+ struct usb_xpad *xpad = container_of(work, struct usb_xpad, work);
|
||||
+ int error;
|
||||
+
|
||||
+ if (xpad->pad_present) {
|
||||
+ error = xpad_init_input(xpad);
|
||||
+ if (error) {
|
||||
+ /* complain only, not much else we can do here */
|
||||
+ dev_err(&xpad->dev->dev, "unable to init device\n");
|
||||
+ }
|
||||
+ } else {
|
||||
+ xpad_deinit_input(xpad);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* xpad360w_process_packet
|
||||
*
|
||||
@@ -502,16 +533,18 @@ static void xpad360_process_packet(struct usb_xpad *xpad,
|
||||
* 01.1 - Pad state (Bytes 4+) valid
|
||||
*
|
||||
*/
|
||||
-
|
||||
static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
|
||||
{
|
||||
+ int presence;
|
||||
+
|
||||
/* Presence change */
|
||||
if (data[0] & 0x08) {
|
||||
- if (data[1] & 0x80) {
|
||||
- xpad->pad_present = 1;
|
||||
- usb_submit_urb(xpad->bulk_out, GFP_ATOMIC);
|
||||
- } else
|
||||
- xpad->pad_present = 0;
|
||||
+ presence = (data[1] & 0x80) != 0;
|
||||
+
|
||||
+ if (xpad->pad_present != presence) {
|
||||
+ xpad->pad_present = presence;
|
||||
+ schedule_work(&xpad->work);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Valid pad data */
|
||||
@@ -666,28 +699,6 @@ exit:
|
||||
__func__, retval);
|
||||
}
|
||||
|
||||
-static void xpad_bulk_out(struct urb *urb)
|
||||
-{
|
||||
- struct usb_xpad *xpad = urb->context;
|
||||
- struct device *dev = &xpad->intf->dev;
|
||||
-
|
||||
- switch (urb->status) {
|
||||
- case 0:
|
||||
- /* success */
|
||||
- break;
|
||||
- case -ECONNRESET:
|
||||
- case -ENOENT:
|
||||
- case -ESHUTDOWN:
|
||||
- /* this urb is terminated, clean up */
|
||||
- dev_dbg(dev, "%s - urb shutting down with status: %d\n",
|
||||
- __func__, urb->status);
|
||||
- break;
|
||||
- default:
|
||||
- dev_dbg(dev, "%s - nonzero urb status received: %d\n",
|
||||
- __func__, urb->status);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static void xpad_irq_out(struct urb *urb)
|
||||
{
|
||||
struct usb_xpad *xpad = urb->context;
|
||||
@@ -699,6 +710,7 @@ static void xpad_irq_out(struct urb *urb)
|
||||
switch (status) {
|
||||
case 0:
|
||||
/* success */
|
||||
+ xpad->irq_out_active = 0;
|
||||
return;
|
||||
|
||||
case -ECONNRESET:
|
||||
@@ -707,6 +719,7 @@ static void xpad_irq_out(struct urb *urb)
|
||||
/* this urb is terminated, clean up */
|
||||
dev_dbg(dev, "%s - urb shutting down with status: %d\n",
|
||||
__func__, status);
|
||||
+ xpad->irq_out_active = 0;
|
||||
return;
|
||||
|
||||
default:
|
||||
@@ -726,7 +739,6 @@ static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
|
||||
{
|
||||
struct usb_endpoint_descriptor *ep_irq_out;
|
||||
int ep_irq_out_idx;
|
||||
- int error;
|
||||
|
||||
if (xpad->xtype == XTYPE_UNKNOWN)
|
||||
return 0;
|
||||
@@ -734,16 +746,15 @@ static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
|
||||
xpad->odata = usb_alloc_coherent(xpad->udev, XPAD_PKT_LEN,
|
||||
GFP_KERNEL, &xpad->odata_dma);
|
||||
if (!xpad->odata) {
|
||||
- error = -ENOMEM;
|
||||
- goto fail1;
|
||||
+ return -ENOMEM;
|
||||
}
|
||||
|
||||
mutex_init(&xpad->odata_mutex);
|
||||
|
||||
xpad->irq_out = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (!xpad->irq_out) {
|
||||
- error = -ENOMEM;
|
||||
- goto fail2;
|
||||
+ usb_free_coherent(xpad->udev, XPAD_PKT_LEN, xpad->odata, xpad->odata_dma);
|
||||
+ return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Xbox One controller has in/out endpoints swapped. */
|
||||
@@ -758,9 +769,6 @@ static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
|
||||
xpad->irq_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
|
||||
return 0;
|
||||
-
|
||||
- fail2: usb_free_coherent(xpad->udev, XPAD_PKT_LEN, xpad->odata, xpad->odata_dma);
|
||||
- fail1: return error;
|
||||
}
|
||||
|
||||
static void xpad_stop_output(struct usb_xpad *xpad)
|
||||
@@ -782,80 +790,94 @@ static void xpad_deinit_output(struct usb_xpad *xpad)
|
||||
static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
|
||||
{
|
||||
struct usb_xpad *xpad = input_get_drvdata(dev);
|
||||
+ __u16 strong;
|
||||
+ __u16 weak;
|
||||
+ int retval;
|
||||
|
||||
- if (effect->type == FF_RUMBLE) {
|
||||
- __u16 strong = effect->u.rumble.strong_magnitude;
|
||||
- __u16 weak = effect->u.rumble.weak_magnitude;
|
||||
-
|
||||
- switch (xpad->xtype) {
|
||||
-
|
||||
- case XTYPE_XBOX:
|
||||
- xpad->odata[0] = 0x00;
|
||||
- xpad->odata[1] = 0x06;
|
||||
- xpad->odata[2] = 0x00;
|
||||
- xpad->odata[3] = strong / 256; /* left actuator */
|
||||
- xpad->odata[4] = 0x00;
|
||||
- xpad->odata[5] = weak / 256; /* right actuator */
|
||||
- xpad->irq_out->transfer_buffer_length = 6;
|
||||
-
|
||||
- return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
|
||||
-
|
||||
- case XTYPE_XBOX360:
|
||||
- xpad->odata[0] = 0x00;
|
||||
- xpad->odata[1] = 0x08;
|
||||
- xpad->odata[2] = 0x00;
|
||||
- xpad->odata[3] = strong / 256; /* left actuator? */
|
||||
- xpad->odata[4] = weak / 256; /* right actuator? */
|
||||
- xpad->odata[5] = 0x00;
|
||||
- xpad->odata[6] = 0x00;
|
||||
- xpad->odata[7] = 0x00;
|
||||
- xpad->irq_out->transfer_buffer_length = 8;
|
||||
-
|
||||
- return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
|
||||
-
|
||||
- case XTYPE_XBOX360W:
|
||||
- xpad->odata[0] = 0x00;
|
||||
- xpad->odata[1] = 0x01;
|
||||
- xpad->odata[2] = 0x0F;
|
||||
- xpad->odata[3] = 0xC0;
|
||||
- xpad->odata[4] = 0x00;
|
||||
- xpad->odata[5] = strong / 256;
|
||||
- xpad->odata[6] = weak / 256;
|
||||
- xpad->odata[7] = 0x00;
|
||||
- xpad->odata[8] = 0x00;
|
||||
- xpad->odata[9] = 0x00;
|
||||
- xpad->odata[10] = 0x00;
|
||||
- xpad->odata[11] = 0x00;
|
||||
- xpad->irq_out->transfer_buffer_length = 12;
|
||||
-
|
||||
- return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
|
||||
-
|
||||
- case XTYPE_XBOXONE:
|
||||
- xpad->odata[0] = 0x09; /* activate rumble */
|
||||
- xpad->odata[1] = 0x08;
|
||||
- xpad->odata[2] = 0x00;
|
||||
- xpad->odata[3] = 0x08; /* continuous effect */
|
||||
- xpad->odata[4] = 0x00; /* simple rumble mode */
|
||||
- xpad->odata[5] = 0x03; /* L and R actuator only */
|
||||
- xpad->odata[6] = 0x00; /* TODO: LT actuator */
|
||||
- xpad->odata[7] = 0x00; /* TODO: RT actuator */
|
||||
- xpad->odata[8] = strong / 256; /* left actuator */
|
||||
- xpad->odata[9] = weak / 256; /* right actuator */
|
||||
- xpad->odata[10] = 0x80; /* length of pulse */
|
||||
- xpad->odata[11] = 0x00; /* stop period of pulse */
|
||||
- xpad->irq_out->transfer_buffer_length = 12;
|
||||
-
|
||||
- return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
|
||||
-
|
||||
- default:
|
||||
- dev_dbg(&xpad->dev->dev,
|
||||
- "%s - rumble command sent to unsupported xpad type: %d\n",
|
||||
- __func__, xpad->xtype);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (effect->type != FF_RUMBLE)
|
||||
+ return 0;
|
||||
+
|
||||
+ strong = effect->u.rumble.strong_magnitude;
|
||||
+ weak = effect->u.rumble.weak_magnitude;
|
||||
+
|
||||
+ mutex_lock(&xpad->odata_mutex);
|
||||
+
|
||||
+ switch (xpad->xtype) {
|
||||
+ case XTYPE_XBOX:
|
||||
+ xpad->odata[0] = 0x00;
|
||||
+ xpad->odata[1] = 0x06;
|
||||
+ xpad->odata[2] = 0x00;
|
||||
+ xpad->odata[3] = strong / 256; /* left actuator */
|
||||
+ xpad->odata[4] = 0x00;
|
||||
+ xpad->odata[5] = weak / 256; /* right actuator */
|
||||
+ xpad->irq_out->transfer_buffer_length = 6;
|
||||
+ break;
|
||||
+
|
||||
+ case XTYPE_XBOX360:
|
||||
+ xpad->odata[0] = 0x00;
|
||||
+ xpad->odata[1] = 0x08;
|
||||
+ xpad->odata[2] = 0x00;
|
||||
+ xpad->odata[3] = strong / 256; /* left actuator? */
|
||||
+ xpad->odata[4] = weak / 256; /* right actuator? */
|
||||
+ xpad->odata[5] = 0x00;
|
||||
+ xpad->odata[6] = 0x00;
|
||||
+ xpad->odata[7] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 8;
|
||||
+ break;
|
||||
+
|
||||
+ case XTYPE_XBOX360W:
|
||||
+ xpad->odata[0] = 0x00;
|
||||
+ xpad->odata[1] = 0x01;
|
||||
+ xpad->odata[2] = 0x0F;
|
||||
+ xpad->odata[3] = 0xC0;
|
||||
+ xpad->odata[4] = 0x00;
|
||||
+ xpad->odata[5] = strong / 256;
|
||||
+ xpad->odata[6] = weak / 256;
|
||||
+ xpad->odata[7] = 0x00;
|
||||
+ xpad->odata[8] = 0x00;
|
||||
+ xpad->odata[9] = 0x00;
|
||||
+ xpad->odata[10] = 0x00;
|
||||
+ xpad->odata[11] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 12;
|
||||
+ break;
|
||||
+
|
||||
+ case XTYPE_XBOXONE:
|
||||
+ xpad->odata[0] = 0x09; /* activate rumble */
|
||||
+ xpad->odata[1] = 0x08;
|
||||
+ xpad->odata[2] = xpad->odata_serial++;
|
||||
+ xpad->odata[3] = 0x08; /* continuous effect */
|
||||
+ xpad->odata[4] = 0x00; /* simple rumble mode */
|
||||
+ xpad->odata[5] = 0x03; /* L and R actuator only */
|
||||
+ xpad->odata[6] = 0x00; /* TODO: LT actuator */
|
||||
+ xpad->odata[7] = 0x00; /* TODO: RT actuator */
|
||||
+ xpad->odata[8] = strong / 512; /* left actuator */
|
||||
+ xpad->odata[9] = weak / 512; /* right actuator */
|
||||
+ xpad->odata[10] = 0x80; /* length of pulse */
|
||||
+ xpad->odata[11] = 0x00; /* stop period of pulse */
|
||||
+ xpad->odata[12] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 13;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ mutex_unlock(&xpad->odata_mutex);
|
||||
+ dev_dbg(&xpad->dev->dev,
|
||||
+ "%s - rumble command sent to unsupported xpad type: %d\n",
|
||||
+ __func__, xpad->xtype);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
- return 0;
|
||||
+ if (!xpad->irq_out_active) {
|
||||
+ retval = usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
|
||||
+ xpad->irq_out_active = 1;
|
||||
+ } else {
|
||||
+ retval = -EIO;
|
||||
+ dev_dbg(&xpad->dev->dev, "%s - dropped, irq_out is active\n",
|
||||
+ __func__);
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&xpad->odata_mutex);
|
||||
+
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static int xpad_init_ff(struct usb_xpad *xpad)
|
||||
@@ -881,17 +903,78 @@ struct xpad_led {
|
||||
struct usb_xpad *xpad;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * set the LEDs on Xbox360 / Wireless Controllers
|
||||
+ * @param command
|
||||
+ * 0: off
|
||||
+ * 1: all blink, then previous setting
|
||||
+ * 2: 1/top-left blink, then on
|
||||
+ * 3: 2/top-right blink, then on
|
||||
+ * 4: 3/bottom-left blink, then on
|
||||
+ * 5: 4/bottom-right blink, then on
|
||||
+ * 6: 1/top-left on
|
||||
+ * 7: 2/top-right on
|
||||
+ * 8: 3/bottom-left on
|
||||
+ * 9: 4/bottom-right on
|
||||
+ * 10: rotate
|
||||
+ * 11: blink, based on previous setting
|
||||
+ * 12: slow blink, based on previous setting
|
||||
+ * 13: rotate with two lights
|
||||
+ * 14: persistent slow all blink
|
||||
+ * 15: blink once, then previous setting
|
||||
+ */
|
||||
static void xpad_send_led_command(struct usb_xpad *xpad, int command)
|
||||
{
|
||||
- if (command >= 0 && command < 14) {
|
||||
- mutex_lock(&xpad->odata_mutex);
|
||||
+ command %= 16;
|
||||
+
|
||||
+ mutex_lock(&xpad->odata_mutex);
|
||||
+
|
||||
+ switch (xpad->xtype) {
|
||||
+ case XTYPE_XBOX360:
|
||||
xpad->odata[0] = 0x01;
|
||||
xpad->odata[1] = 0x03;
|
||||
xpad->odata[2] = command;
|
||||
xpad->irq_out->transfer_buffer_length = 3;
|
||||
- usb_submit_urb(xpad->irq_out, GFP_KERNEL);
|
||||
- mutex_unlock(&xpad->odata_mutex);
|
||||
+ break;
|
||||
+ case XTYPE_XBOX360W:
|
||||
+ xpad->odata[0] = 0x00;
|
||||
+ xpad->odata[1] = 0x00;
|
||||
+ xpad->odata[2] = 0x08;
|
||||
+ xpad->odata[3] = 0x40 + command;
|
||||
+ xpad->odata[4] = 0x00;
|
||||
+ xpad->odata[5] = 0x00;
|
||||
+ xpad->odata[6] = 0x00;
|
||||
+ xpad->odata[7] = 0x00;
|
||||
+ xpad->odata[8] = 0x00;
|
||||
+ xpad->odata[9] = 0x00;
|
||||
+ xpad->odata[10] = 0x00;
|
||||
+ xpad->odata[11] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 12;
|
||||
+ break;
|
||||
}
|
||||
+
|
||||
+ if (!xpad->irq_out_active) {
|
||||
+ usb_submit_urb(xpad->irq_out, GFP_KERNEL);
|
||||
+ xpad->irq_out_active = 1;
|
||||
+ } else
|
||||
+ dev_dbg(&xpad->dev->dev, "%s - dropped, irq_out is active\n",
|
||||
+ __func__);
|
||||
+
|
||||
+ mutex_unlock(&xpad->odata_mutex);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Light up the segment corresponding to the pad number on Xbox 360 Controllers
|
||||
+ */
|
||||
+static void xpad_identify_controller(struct usb_xpad *xpad)
|
||||
+{
|
||||
+ if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
|
||||
+ return;
|
||||
+
|
||||
+ xpad->pad_nr = find_first_zero_bit(&xpad_pad_seq, 32);
|
||||
+ set_bit(xpad->pad_nr, &xpad_pad_seq);
|
||||
+
|
||||
+ xpad_send_led_command(xpad, (xpad->pad_nr % 4) + 2);
|
||||
}
|
||||
|
||||
static void xpad_led_set(struct led_classdev *led_cdev,
|
||||
@@ -905,22 +988,18 @@ static void xpad_led_set(struct led_classdev *led_cdev,
|
||||
|
||||
static int xpad_led_probe(struct usb_xpad *xpad)
|
||||
{
|
||||
- static atomic_t led_seq = ATOMIC_INIT(-1);
|
||||
- unsigned long led_no;
|
||||
struct xpad_led *led;
|
||||
struct led_classdev *led_cdev;
|
||||
int error;
|
||||
|
||||
- if (xpad->xtype != XTYPE_XBOX360)
|
||||
+ if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
|
||||
return 0;
|
||||
|
||||
xpad->led = led = kzalloc(sizeof(struct xpad_led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
- led_no = atomic_inc_return(&led_seq);
|
||||
-
|
||||
- snprintf(led->name, sizeof(led->name), "xpad%lu", led_no);
|
||||
+ snprintf(led->name, sizeof(led->name), "xpad%lu", xpad->pad_nr);
|
||||
led->xpad = xpad;
|
||||
|
||||
led_cdev = &led->led_cdev;
|
||||
@@ -934,11 +1013,6 @@ static int xpad_led_probe(struct usb_xpad *xpad)
|
||||
return error;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * Light up the segment corresponding to controller number
|
||||
- */
|
||||
- xpad_send_led_command(xpad, (led_no % 4) + 2);
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -954,12 +1028,14 @@ static void xpad_led_disconnect(struct usb_xpad *xpad)
|
||||
#else
|
||||
static int xpad_led_probe(struct usb_xpad *xpad) { return 0; }
|
||||
static void xpad_led_disconnect(struct usb_xpad *xpad) { }
|
||||
+static void xpad_identify_controller(struct usb_xpad *xpad) { }
|
||||
#endif
|
||||
|
||||
|
||||
static int xpad_open(struct input_dev *dev)
|
||||
{
|
||||
struct usb_xpad *xpad = input_get_drvdata(dev);
|
||||
+ int retval;
|
||||
|
||||
/* URB was submitted in probe */
|
||||
if (xpad->xtype == XTYPE_XBOX360W)
|
||||
@@ -970,11 +1046,17 @@ static int xpad_open(struct input_dev *dev)
|
||||
return -EIO;
|
||||
|
||||
if (xpad->xtype == XTYPE_XBOXONE) {
|
||||
+ mutex_lock(&xpad->odata_mutex);
|
||||
/* Xbox one controller needs to be initialized. */
|
||||
xpad->odata[0] = 0x05;
|
||||
xpad->odata[1] = 0x20;
|
||||
- xpad->irq_out->transfer_buffer_length = 2;
|
||||
- return usb_submit_urb(xpad->irq_out, GFP_KERNEL);
|
||||
+ xpad->odata[2] = xpad->odata_serial++; /* packet serial */
|
||||
+ xpad->odata[3] = 0x01; /* rumble bit enable? */
|
||||
+ xpad->odata[4] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 5;
|
||||
+ retval = usb_submit_urb(xpad->irq_out, GFP_KERNEL);
|
||||
+ mutex_unlock(&xpad->odata_mutex);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1016,11 +1098,103 @@ static void xpad_set_up_abs(struct input_dev *input_dev, signed short abs)
|
||||
}
|
||||
}
|
||||
|
||||
+static int xpad_init_input(struct usb_xpad *xpad)
|
||||
+{
|
||||
+ struct input_dev *input_dev;
|
||||
+ int i, error;
|
||||
+
|
||||
+ input_dev = input_allocate_device();
|
||||
+ if (!input_dev)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ xpad->dev = input_dev;
|
||||
+ input_dev->name = xpad->name;
|
||||
+ input_dev->phys = xpad->phys;
|
||||
+ usb_to_input_id(xpad->udev, &input_dev->id);
|
||||
+ input_dev->dev.parent = &xpad->intf->dev;
|
||||
+
|
||||
+ input_set_drvdata(input_dev, xpad);
|
||||
+
|
||||
+ input_dev->open = xpad_open;
|
||||
+ input_dev->close = xpad_close;
|
||||
+
|
||||
+ input_dev->evbit[0] = BIT_MASK(EV_KEY);
|
||||
+
|
||||
+ if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
|
||||
+ input_dev->evbit[0] |= BIT_MASK(EV_ABS);
|
||||
+ /* set up axes */
|
||||
+ for (i = 0; xpad_abs[i] >= 0; i++)
|
||||
+ xpad_set_up_abs(input_dev, xpad_abs[i]);
|
||||
+ }
|
||||
+
|
||||
+ /* set up standard buttons */
|
||||
+ for (i = 0; xpad_common_btn[i] >= 0; i++)
|
||||
+ __set_bit(xpad_common_btn[i], input_dev->keybit);
|
||||
+
|
||||
+ /* set up model-specific ones */
|
||||
+ if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W ||
|
||||
+ xpad->xtype == XTYPE_XBOXONE) {
|
||||
+ for (i = 0; xpad360_btn[i] >= 0; i++)
|
||||
+ __set_bit(xpad360_btn[i], input_dev->keybit);
|
||||
+ } else {
|
||||
+ for (i = 0; xpad_btn[i] >= 0; i++)
|
||||
+ __set_bit(xpad_btn[i], input_dev->keybit);
|
||||
+ }
|
||||
+
|
||||
+ if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
|
||||
+ for (i = 0; xpad_btn_pad[i] >= 0; i++)
|
||||
+ __set_bit(xpad_btn_pad[i], input_dev->keybit);
|
||||
+ }
|
||||
+ /* this should be a simple else block. However historically xbox360w
|
||||
+ * has mapped DPAD to buttons while xbox360 did not.
|
||||
+ * This made no sense, but now we can not just switch back and have to
|
||||
+ * support both behaviors.
|
||||
+ */
|
||||
+ if(!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
|
||||
+ xpad->xtype == XTYPE_XBOX360W) {
|
||||
+ for (i = 0; xpad_abs_pad[i] >= 0; i++)
|
||||
+ xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
|
||||
+ }
|
||||
+
|
||||
+ if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
|
||||
+ for (i = 0; xpad_btn_triggers[i] >= 0; i++)
|
||||
+ __set_bit(xpad_btn_triggers[i], input_dev->keybit);
|
||||
+ } else {
|
||||
+ for (i = 0; xpad_abs_triggers[i] >= 0; i++)
|
||||
+ xpad_set_up_abs(input_dev, xpad_abs_triggers[i]);
|
||||
+ }
|
||||
+
|
||||
+ xpad_identify_controller(xpad);
|
||||
+
|
||||
+ error = xpad_init_ff(xpad);
|
||||
+ if (error)
|
||||
+ goto fail_init_ff;
|
||||
+
|
||||
+ error = xpad_led_probe(xpad);
|
||||
+ if (error)
|
||||
+ goto fail_init_led;
|
||||
+
|
||||
+ error = input_register_device(xpad->dev);
|
||||
+ if (error)
|
||||
+ goto fail_input_register;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+fail_input_register:
|
||||
+ xpad_led_disconnect(xpad);
|
||||
+
|
||||
+fail_init_led:
|
||||
+ input_ff_destroy(input_dev);
|
||||
+
|
||||
+fail_init_ff:
|
||||
+ input_free_device(input_dev);
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
{
|
||||
struct usb_device *udev = interface_to_usbdev(intf);
|
||||
struct usb_xpad *xpad;
|
||||
- struct input_dev *input_dev;
|
||||
struct usb_endpoint_descriptor *ep_irq_in;
|
||||
int ep_irq_in_idx;
|
||||
int i, error;
|
||||
@@ -1042,12 +1216,14 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
}
|
||||
|
||||
xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);
|
||||
- input_dev = input_allocate_device();
|
||||
- if (!xpad || !input_dev) {
|
||||
+ if (!xpad) {
|
||||
error = -ENOMEM;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
+ usb_make_path(udev, xpad->phys, sizeof(xpad->phys));
|
||||
+ strlcat(xpad->phys, "/input0", sizeof(xpad->phys));
|
||||
+
|
||||
xpad->idata = usb_alloc_coherent(udev, XPAD_PKT_LEN,
|
||||
GFP_KERNEL, &xpad->idata_dma);
|
||||
if (!xpad->idata) {
|
||||
@@ -1065,6 +1241,8 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
xpad->intf = intf;
|
||||
xpad->mapping = xpad_device[i].mapping;
|
||||
xpad->xtype = xpad_device[i].xtype;
|
||||
+ xpad->name = xpad_device[i].name;
|
||||
+ INIT_WORK(&xpad->work, presence_work_function);
|
||||
|
||||
if (xpad->xtype == XTYPE_UNKNOWN) {
|
||||
if (intf->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC) {
|
||||
@@ -1083,71 +1261,10 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
xpad->mapping |= MAP_STICKS_TO_NULL;
|
||||
}
|
||||
|
||||
- xpad->dev = input_dev;
|
||||
- usb_make_path(udev, xpad->phys, sizeof(xpad->phys));
|
||||
- strlcat(xpad->phys, "/input0", sizeof(xpad->phys));
|
||||
-
|
||||
- input_dev->name = xpad_device[i].name;
|
||||
- input_dev->phys = xpad->phys;
|
||||
- usb_to_input_id(udev, &input_dev->id);
|
||||
- input_dev->dev.parent = &intf->dev;
|
||||
-
|
||||
- input_set_drvdata(input_dev, xpad);
|
||||
-
|
||||
- input_dev->open = xpad_open;
|
||||
- input_dev->close = xpad_close;
|
||||
-
|
||||
- input_dev->evbit[0] = BIT_MASK(EV_KEY);
|
||||
-
|
||||
- if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
|
||||
- input_dev->evbit[0] |= BIT_MASK(EV_ABS);
|
||||
- /* set up axes */
|
||||
- for (i = 0; xpad_abs[i] >= 0; i++)
|
||||
- xpad_set_up_abs(input_dev, xpad_abs[i]);
|
||||
- }
|
||||
-
|
||||
- /* set up standard buttons */
|
||||
- for (i = 0; xpad_common_btn[i] >= 0; i++)
|
||||
- __set_bit(xpad_common_btn[i], input_dev->keybit);
|
||||
-
|
||||
- /* set up model-specific ones */
|
||||
- if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W ||
|
||||
- xpad->xtype == XTYPE_XBOXONE) {
|
||||
- for (i = 0; xpad360_btn[i] >= 0; i++)
|
||||
- __set_bit(xpad360_btn[i], input_dev->keybit);
|
||||
- } else {
|
||||
- for (i = 0; xpad_btn[i] >= 0; i++)
|
||||
- __set_bit(xpad_btn[i], input_dev->keybit);
|
||||
- }
|
||||
-
|
||||
- if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
|
||||
- for (i = 0; xpad_btn_pad[i] >= 0; i++)
|
||||
- __set_bit(xpad_btn_pad[i], input_dev->keybit);
|
||||
- } else {
|
||||
- for (i = 0; xpad_abs_pad[i] >= 0; i++)
|
||||
- xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
|
||||
- }
|
||||
-
|
||||
- if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
|
||||
- for (i = 0; xpad_btn_triggers[i] >= 0; i++)
|
||||
- __set_bit(xpad_btn_triggers[i], input_dev->keybit);
|
||||
- } else {
|
||||
- for (i = 0; xpad_abs_triggers[i] >= 0; i++)
|
||||
- xpad_set_up_abs(input_dev, xpad_abs_triggers[i]);
|
||||
- }
|
||||
-
|
||||
error = xpad_init_output(intf, xpad);
|
||||
if (error)
|
||||
goto fail3;
|
||||
|
||||
- error = xpad_init_ff(xpad);
|
||||
- if (error)
|
||||
- goto fail4;
|
||||
-
|
||||
- error = xpad_led_probe(xpad);
|
||||
- if (error)
|
||||
- goto fail5;
|
||||
-
|
||||
/* Xbox One controller has in/out endpoints swapped. */
|
||||
ep_irq_in_idx = xpad->xtype == XTYPE_XBOXONE ? 1 : 0;
|
||||
ep_irq_in = &intf->cur_altsetting->endpoint[ep_irq_in_idx].desc;
|
||||
@@ -1159,60 +1276,10 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
xpad->irq_in->transfer_dma = xpad->idata_dma;
|
||||
xpad->irq_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
|
||||
- error = input_register_device(xpad->dev);
|
||||
- if (error)
|
||||
- goto fail6;
|
||||
-
|
||||
usb_set_intfdata(intf, xpad);
|
||||
|
||||
if (xpad->xtype == XTYPE_XBOX360W) {
|
||||
/*
|
||||
- * Setup the message to set the LEDs on the
|
||||
- * controller when it shows up
|
||||
- */
|
||||
- xpad->bulk_out = usb_alloc_urb(0, GFP_KERNEL);
|
||||
- if (!xpad->bulk_out) {
|
||||
- error = -ENOMEM;
|
||||
- goto fail7;
|
||||
- }
|
||||
-
|
||||
- xpad->bdata = kzalloc(XPAD_PKT_LEN, GFP_KERNEL);
|
||||
- if (!xpad->bdata) {
|
||||
- error = -ENOMEM;
|
||||
- goto fail8;
|
||||
- }
|
||||
-
|
||||
- xpad->bdata[2] = 0x08;
|
||||
- switch (intf->cur_altsetting->desc.bInterfaceNumber) {
|
||||
- case 0:
|
||||
- xpad->bdata[3] = 0x42;
|
||||
- break;
|
||||
- case 2:
|
||||
- xpad->bdata[3] = 0x43;
|
||||
- break;
|
||||
- case 4:
|
||||
- xpad->bdata[3] = 0x44;
|
||||
- break;
|
||||
- case 6:
|
||||
- xpad->bdata[3] = 0x45;
|
||||
- }
|
||||
-
|
||||
- ep_irq_in = &intf->cur_altsetting->endpoint[1].desc;
|
||||
- if (usb_endpoint_is_bulk_out(ep_irq_in)) {
|
||||
- usb_fill_bulk_urb(xpad->bulk_out, udev,
|
||||
- usb_sndbulkpipe(udev,
|
||||
- ep_irq_in->bEndpointAddress),
|
||||
- xpad->bdata, XPAD_PKT_LEN,
|
||||
- xpad_bulk_out, xpad);
|
||||
- } else {
|
||||
- usb_fill_int_urb(xpad->bulk_out, udev,
|
||||
- usb_sndintpipe(udev,
|
||||
- ep_irq_in->bEndpointAddress),
|
||||
- xpad->bdata, XPAD_PKT_LEN,
|
||||
- xpad_bulk_out, xpad, 0);
|
||||
- }
|
||||
-
|
||||
- /*
|
||||
* Submit the int URB immediately rather than waiting for open
|
||||
* because we get status messages from the device whether
|
||||
* or not any controllers are attached. In fact, it's
|
||||
@@ -1221,56 +1288,116 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||
*/
|
||||
xpad->irq_in->dev = xpad->udev;
|
||||
error = usb_submit_urb(xpad->irq_in, GFP_KERNEL);
|
||||
+ if (error) {
|
||||
+ usb_kill_urb(xpad->irq_in);
|
||||
+ goto fail4;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * send presence packet
|
||||
+ * This will force the controller to resend connection packets.
|
||||
+ * This is useful in the case we activate the module after the
|
||||
+ * adapter has been plugged in, as it won't automatically
|
||||
+ * send us info about the controllers.
|
||||
+ */
|
||||
+ mutex_lock(&xpad->odata_mutex);
|
||||
+ xpad->odata[0] = 0x08;
|
||||
+ xpad->odata[1] = 0x00;
|
||||
+ xpad->odata[2] = 0x0F;
|
||||
+ xpad->odata[3] = 0xC0;
|
||||
+ xpad->odata[4] = 0x00;
|
||||
+ xpad->odata[5] = 0x00;
|
||||
+ xpad->odata[6] = 0x00;
|
||||
+ xpad->odata[7] = 0x00;
|
||||
+ xpad->odata[8] = 0x00;
|
||||
+ xpad->odata[9] = 0x00;
|
||||
+ xpad->odata[10] = 0x00;
|
||||
+ xpad->odata[11] = 0x00;
|
||||
+ xpad->irq_out->transfer_buffer_length = 12;
|
||||
+
|
||||
+ if (!xpad->irq_out_active) {
|
||||
+ usb_submit_urb(xpad->irq_out, GFP_KERNEL);
|
||||
+ xpad->irq_out_active = 1;
|
||||
+ } else
|
||||
+ dev_dbg(&xpad->dev->dev,
|
||||
+ "%s - dropped, irq_out is active\n", __func__);
|
||||
+
|
||||
+ mutex_unlock(&xpad->odata_mutex);
|
||||
+ } else {
|
||||
+ xpad->pad_present = 1;
|
||||
+ error = xpad_init_input(xpad);
|
||||
if (error)
|
||||
- goto fail9;
|
||||
+ goto fail4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
- fail9: kfree(xpad->bdata);
|
||||
- fail8: usb_free_urb(xpad->bulk_out);
|
||||
- fail7: input_unregister_device(input_dev);
|
||||
- input_dev = NULL;
|
||||
- fail6: xpad_led_disconnect(xpad);
|
||||
- fail5: if (input_dev)
|
||||
- input_ff_destroy(input_dev);
|
||||
fail4: xpad_deinit_output(xpad);
|
||||
fail3: usb_free_urb(xpad->irq_in);
|
||||
fail2: usb_free_coherent(udev, XPAD_PKT_LEN, xpad->idata, xpad->idata_dma);
|
||||
- fail1: input_free_device(input_dev);
|
||||
- kfree(xpad);
|
||||
+ fail1: kfree(xpad);
|
||||
return error;
|
||||
|
||||
}
|
||||
|
||||
-static void xpad_disconnect(struct usb_interface *intf)
|
||||
+static void xpad_deinit_input(struct usb_xpad *xpad)
|
||||
{
|
||||
- struct usb_xpad *xpad = usb_get_intfdata (intf);
|
||||
-
|
||||
xpad_led_disconnect(xpad);
|
||||
input_unregister_device(xpad->dev);
|
||||
- xpad_deinit_output(xpad);
|
||||
+
|
||||
+ if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
|
||||
+ return;
|
||||
+
|
||||
+ clear_bit(xpad->pad_nr, &xpad_pad_seq);
|
||||
+}
|
||||
+
|
||||
+static void xpad_stop_communication(struct usb_xpad *xpad) {
|
||||
+ xpad_stop_output(xpad);
|
||||
|
||||
if (xpad->xtype == XTYPE_XBOX360W) {
|
||||
- usb_kill_urb(xpad->bulk_out);
|
||||
- usb_free_urb(xpad->bulk_out);
|
||||
usb_kill_urb(xpad->irq_in);
|
||||
}
|
||||
|
||||
+ cancel_work_sync(&xpad->work);
|
||||
+}
|
||||
+
|
||||
+static void xpad_disconnect(struct usb_interface *intf)
|
||||
+{
|
||||
+ struct usb_xpad *xpad = usb_get_intfdata (intf);
|
||||
+
|
||||
+ if (xpad->pad_present)
|
||||
+ xpad_deinit_input(xpad);
|
||||
+
|
||||
+ xpad_stop_communication(xpad);
|
||||
+
|
||||
+ xpad_deinit_output(xpad);
|
||||
+
|
||||
usb_free_urb(xpad->irq_in);
|
||||
usb_free_coherent(xpad->udev, XPAD_PKT_LEN,
|
||||
xpad->idata, xpad->idata_dma);
|
||||
|
||||
- kfree(xpad->bdata);
|
||||
kfree(xpad);
|
||||
|
||||
usb_set_intfdata(intf, NULL);
|
||||
}
|
||||
|
||||
+static int xpad_suspend(struct usb_interface *intf, pm_message_t message) {
|
||||
+ struct usb_xpad *xpad = usb_get_intfdata (intf);
|
||||
+ xpad_stop_communication(xpad);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int xpad_resume(struct usb_interface *intf) {
|
||||
+ usb_queue_reset_device(intf);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static struct usb_driver xpad_driver = {
|
||||
.name = "xpad",
|
||||
.probe = xpad_probe,
|
||||
.disconnect = xpad_disconnect,
|
||||
+ .suspend = xpad_suspend,
|
||||
+ .resume = xpad_resume,
|
||||
.id_table = xpad_table,
|
||||
};
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
@ -134,7 +134,7 @@ diff -urN a/drivers/media/pci/saa7164/saa7164-cards.c b/drivers/media/pci/saa716
|
||||
+ .name = "SI2168-1",
|
||||
+ .i2c_bus_nr = SAA7164_I2C_BUS_2,
|
||||
+ .i2c_bus_addr = 0xc8 >> 1,
|
||||
+ .i2c_reg_len = REGLEN_8bit,
|
||||
+ .i2c_reg_len = REGLEN_0bit,
|
||||
+ }, {
|
||||
+ .id = 0x25,
|
||||
+ .type = SAA7164_UNIT_TUNER,
|
||||
@ -148,7 +148,7 @@ diff -urN a/drivers/media/pci/saa7164/saa7164-cards.c b/drivers/media/pci/saa716
|
||||
+ .name = "SI2168-2",
|
||||
+ .i2c_bus_nr = SAA7164_I2C_BUS_2,
|
||||
+ .i2c_bus_addr = 0xcc >> 1,
|
||||
+ .i2c_reg_len = REGLEN_8bit,
|
||||
+ .i2c_reg_len = REGLEN_0bit,
|
||||
+ } },
|
||||
+ },
|
||||
};
|
||||
@ -540,29 +540,6 @@ diff -urN a/drivers/media/pci/saa7164/saa7164-dvb.c b/drivers/media/pci/saa7164/
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
diff -urN a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c
|
||||
--- a/drivers/media/pci/saa7164/saa7164-encoder.c 2015-06-22 08:05:43.000000000 +0300
|
||||
+++ b/drivers/media/pci/saa7164/saa7164-encoder.c 2015-06-24 18:41:23.254376349 +0300
|
||||
@@ -721,13 +721,14 @@
|
||||
sizeof(cap->card));
|
||||
sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
|
||||
|
||||
- cap->capabilities =
|
||||
+ cap->device_caps =
|
||||
V4L2_CAP_VIDEO_CAPTURE |
|
||||
- V4L2_CAP_READWRITE |
|
||||
- 0;
|
||||
+ V4L2_CAP_READWRITE |
|
||||
+ V4L2_CAP_TUNER;
|
||||
|
||||
- cap->capabilities |= V4L2_CAP_TUNER;
|
||||
- cap->version = 0;
|
||||
+ cap->capabilities = cap->device_caps |
|
||||
+ V4L2_CAP_VBI_CAPTURE |
|
||||
+ V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff -urN a/drivers/media/pci/saa7164/saa7164.h b/drivers/media/pci/saa7164/saa7164.h
|
||||
--- a/drivers/media/pci/saa7164/saa7164.h 2015-06-22 08:05:43.000000000 +0300
|
||||
+++ b/drivers/media/pci/saa7164/saa7164.h 2015-06-24 18:41:57.246377117 +0300
|
||||
@ -593,26 +570,21 @@ diff -urN a/drivers/media/pci/saa7164/saa7164.h b/drivers/media/pci/saa7164/saa7
|
||||
|
||||
struct cmd cmds[SAA_CMD_MAX_MSG_UNITS];
|
||||
struct mutex lock;
|
||||
diff -urN a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.c
|
||||
--- a/drivers/media/pci/saa7164/saa7164-vbi.c 2015-06-22 08:05:43.000000000 +0300
|
||||
+++ b/drivers/media/pci/saa7164/saa7164-vbi.c 2015-06-24 18:42:05.582377305 +0300
|
||||
@@ -660,13 +660,14 @@
|
||||
sizeof(cap->card));
|
||||
sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
|
||||
|
||||
- cap->capabilities =
|
||||
+ cap->device_caps =
|
||||
V4L2_CAP_VBI_CAPTURE |
|
||||
- V4L2_CAP_READWRITE |
|
||||
- 0;
|
||||
+ V4L2_CAP_READWRITE |
|
||||
+ V4L2_CAP_TUNER;
|
||||
|
||||
- cap->capabilities |= V4L2_CAP_TUNER;
|
||||
- cap->version = 0;
|
||||
+ cap->capabilities = cap->device_caps |
|
||||
+ V4L2_CAP_VIDEO_CAPTURE |
|
||||
+ V4L2_CAP_DEVICE_CAPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff -urN a/drivers/media/pci/saa7164/saa7164-i2c.c b/drivers/media/pci/saa7164/saa7164-i2c.c
|
||||
--- a/drivers/media/pci/saa7164/saa7164-i2c.c
|
||||
+++ b/drivers/media/pci/saa7164/saa7164-i2c.c
|
||||
@@ -39,9 +39,10 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num)
|
||||
dprintk(DBGLVL_I2C, "%s(num = %d) addr = 0x%02x len = 0x%x\n",
|
||||
__func__, num, msgs[i].addr, msgs[i].len);
|
||||
if (msgs[i].flags & I2C_M_RD) {
|
||||
- /* Unsupported - Yet*/
|
||||
- printk(KERN_ERR "%s() Unsupported - Yet\n", __func__);
|
||||
- continue;
|
||||
+ retval = saa7164_api_i2c_read(bus,
|
||||
+ msgs[i].addr,
|
||||
+ 0 /* reglen */,
|
||||
+ NULL /* reg */, msgs[i].len, msgs[i].buf);
|
||||
} else if (i + 1 < num && (msgs[i + 1].flags & I2C_M_RD) &&
|
||||
msgs[i].addr == msgs[i + 1].addr) {
|
||||
/* write then read from same address */
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.argustv"
|
||||
PKG_VERSION="3e2350c"
|
||||
PKG_VERSION="96c8026"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.demo"
|
||||
PKG_VERSION="92cea88"
|
||||
PKG_VERSION="3b2cd18"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.dvblink"
|
||||
PKG_VERSION="bf96fc7"
|
||||
PKG_VERSION="cf756e9"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.dvbviewer"
|
||||
PKG_VERSION="ecf820e"
|
||||
PKG_VERSION="cbfd455"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.filmon"
|
||||
PKG_VERSION="dab922f"
|
||||
PKG_VERSION="5c41f4e"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.hts"
|
||||
PKG_VERSION="d46b745"
|
||||
PKG_VERSION="5c22440"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.iptvsimple"
|
||||
PKG_VERSION="0e05337"
|
||||
PKG_VERSION="23defeb"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.mediaportal.tvserver"
|
||||
PKG_VERSION="9cf9f36"
|
||||
PKG_VERSION="29809d1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.mythtv"
|
||||
PKG_VERSION="30d4e6f"
|
||||
PKG_VERSION="538e24d"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.nextpvr"
|
||||
PKG_VERSION="8d7b706"
|
||||
PKG_VERSION="3a205e4"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.njoy"
|
||||
PKG_VERSION="e7f9458"
|
||||
PKG_VERSION="4f88a09"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.pctv"
|
||||
PKG_VERSION="0a6b235"
|
||||
PKG_VERSION="d23160c"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.stalker"
|
||||
PKG_VERSION="c9f2ac3"
|
||||
PKG_VERSION="5f6eb19"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.vbox"
|
||||
PKG_VERSION="387c70a"
|
||||
PKG_VERSION="874eb88"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.vdr.vnsi"
|
||||
PKG_VERSION="c361ac4"
|
||||
PKG_VERSION="550a4a2"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.vuplus"
|
||||
PKG_VERSION="f7dfd47"
|
||||
PKG_VERSION="96115e9"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="pvr.wmc"
|
||||
PKG_VERSION="162053c"
|
||||
PKG_VERSION="e19c3e9"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="kodi-theme-Confluence"
|
||||
PKG_VERSION="15.0-rc2-0aa930b"
|
||||
PKG_VERSION="15.1-f4dda26"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -37,26 +37,26 @@
|
||||
</section>
|
||||
|
||||
<section id="pvr">
|
||||
<category id="epg" label="22020" help="36218">
|
||||
<category id="epg">
|
||||
<group id="2">
|
||||
<setting id="epg.preventupdateswhileplayingtv" type="boolean" label="19230" help="36222">
|
||||
<setting id="epg.preventupdateswhileplayingtv">
|
||||
<default>true</default>
|
||||
</setting>
|
||||
<setting id="epg.ignoredbforclient" type="boolean" label="19072" help="36223">
|
||||
<setting id="epg.ignoredbforclient">
|
||||
<default>true</default>
|
||||
</setting>
|
||||
</group>
|
||||
</category>
|
||||
<category id="pvrplayback">
|
||||
<group id="1">
|
||||
<setting id="pvrplayback.signalquality" type="boolean" label="19037" help="36229">
|
||||
<setting id="pvrplayback.signalquality">
|
||||
<default>false</default>
|
||||
</setting>
|
||||
</group>
|
||||
</category>
|
||||
<category id="pvrpowermanagement">
|
||||
<group id="2">
|
||||
<setting id="pvrpowermanagement.setwakeupcmd" type="string" label="19245" help="">
|
||||
<setting id="pvrpowermanagement.setwakeupcmd">
|
||||
<default>/usr/bin/setwakeup.sh</default>
|
||||
</setting>
|
||||
</group>
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="kodi"
|
||||
PKG_VERSION="15.0-rc2-0aa930b"
|
||||
PKG_VERSION="15.1-f4dda26"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -0,0 +1,106 @@
|
||||
diff -Naur kodi-15.0-2f34a0c/system/Lircmap.xml kodi-15.0-2f34a0c.patch/system/Lircmap.xml
|
||||
--- kodi-15.0-2f34a0c/system/Lircmap.xml 2015-07-22 10:07:05.000000000 +0200
|
||||
+++ kodi-15.0-2f34a0c.patch/system/Lircmap.xml 2015-07-28 10:47:41.202213181 +0200
|
||||
@@ -493,6 +493,7 @@
|
||||
<teletext>KEY_TEXT</teletext>
|
||||
<clear>KEY_DELETE</clear>
|
||||
</remote>
|
||||
+
|
||||
<remote device="mediacenter">
|
||||
<pause>pause</pause>
|
||||
<stop>stop</stop>
|
||||
@@ -544,50 +545,93 @@
|
||||
<up>KEY_UP</up>
|
||||
<down>KEY_DOWN</down>
|
||||
<select>KEY_OK</select>
|
||||
- <enter>KEY_ENTER</enter>
|
||||
+ <select>KEY_ENTER</select>
|
||||
+ <select>KEY_KPENTER</select>
|
||||
+ <select>KEY_SELECT</select>
|
||||
<clear>KEY_DELETE</clear>
|
||||
+ <clear>KEY_ESC</clear>
|
||||
<start>KEY_MEDIA</start>
|
||||
+ <start>KEY_HOME</start>
|
||||
<back>KEY_EXIT</back>
|
||||
+ <back>KEY_BACK</back>
|
||||
+ <back>KEY_BACKSPACE</back>
|
||||
+ <back>KEY_ESC</back>
|
||||
+ <back>KEY_E</back>
|
||||
<record>KEY_RECORD</record>
|
||||
<play>KEY_PLAY</play>
|
||||
+ <play>KEY_PLAYPAUSE</play>
|
||||
<pause>KEY_PAUSE</pause>
|
||||
<stop>KEY_STOP</stop>
|
||||
+ <stop>KEY_STOPCD</stop>
|
||||
<forward>KEY_FASTFORWARD</forward>
|
||||
+ <forward>KEY_FFORWARD</forward>
|
||||
+ <forward>KEY_FORWARD</forward>
|
||||
<reverse>KEY_REWIND</reverse>
|
||||
<volumeplus>KEY_VOLUMEUP</volumeplus>
|
||||
+ <volumeplus>KEY_VOLUP</volumeplus>
|
||||
<volumeminus>KEY_VOLUMEDOWN</volumeminus>
|
||||
+ <volumeminus>KEY_VOLDOWN</volumeminus>
|
||||
<channelplus>KEY_CHANNELUP</channelplus>
|
||||
+ <channelplus>KEY_CHUP</channelplus>
|
||||
+ <channelplus>KEY_PAGEUP</channelplus>
|
||||
<channelminus>KEY_CHANNELDOWN</channelminus>
|
||||
+ <channelminus>KEY_CHDOWN</channelminus>
|
||||
+ <channelminus>KEY_PAGEDOWN</channelminus>
|
||||
<skipplus>KEY_NEXT</skipplus>
|
||||
+ <skipplus>KEY_NEXTSONG</skipplus>
|
||||
<skipminus>KEY_PREVIOUS</skipminus>
|
||||
+ <skipminus>KEY_PREVIOUSSONG</skipminus>
|
||||
<title>KEY_EPG</title>
|
||||
+ <title>KEY_TV2</title>
|
||||
+ <title>KEY_CONTEXT_MENU</title>
|
||||
<subtitle>KEY_SUBTITLE</subtitle>
|
||||
+ <subtitle>KEY_TITLE</subtitle>
|
||||
<language>KEY_LANGUAGE</language>
|
||||
<info>KEY_INFO</info>
|
||||
+ <info>KEY_PROPS</info>
|
||||
<display>KEY_ZOOM</display>
|
||||
+ <display>KEY_ANGLE</display>
|
||||
<mute>KEY_MUTE</mute>
|
||||
<power>KEY_POWER</power>
|
||||
+ <power>KEY_SLEEP</power>
|
||||
+ <power>KEY_WAKEUP</power>
|
||||
<eject>KEY_EJECTCD</eject>
|
||||
<eject>KEY_EJECTCLOSECD</eject>
|
||||
<menu>KEY_DVD</menu>
|
||||
<menu>KEY_MENU</menu>
|
||||
<myvideo>KEY_VIDEO</myvideo>
|
||||
<mymusic>KEY_AUDIO</mymusic>
|
||||
+ <mymusic>KEY_MP3</mymusic>
|
||||
<mypictures>KEY_CAMERA</mypictures>
|
||||
+ <mypictures>KEY_IMAGES</mypictures>
|
||||
<mytv>KEY_TUNER</mytv>
|
||||
<mytv>KEY_TV</mytv>
|
||||
+ <mytv>KEY_PVR</mytv>
|
||||
<teletext>KEY_TEXT</teletext>
|
||||
+ <one>KEY_1</one>
|
||||
<one>KEY_NUMERIC_1</one>
|
||||
+ <two>KEY_2</two>
|
||||
<two>KEY_NUMERIC_2</two>
|
||||
+ <three>KEY_3</three>
|
||||
<three>KEY_NUMERIC_3</three>
|
||||
+ <four>KEY_4</four>
|
||||
<four>KEY_NUMERIC_4</four>
|
||||
+ <five>KEY_5</five>
|
||||
<five>KEY_NUMERIC_5</five>
|
||||
+ <six>KEY_6</six>
|
||||
<six>KEY_NUMERIC_6</six>
|
||||
+ <seven>KEY_7</seven>
|
||||
<seven>KEY_NUMERIC_7</seven>
|
||||
+ <eight>KEY_8</eight>
|
||||
<eight>KEY_NUMERIC_8</eight>
|
||||
+ <nine>KEY_9</nine>
|
||||
<nine>KEY_NUMERIC_9</nine>
|
||||
+ <zero>KEY_0</zero>
|
||||
<zero>KEY_NUMERIC_0</zero>
|
||||
+ <star>KEY_STAR</star>
|
||||
+ <star>KEY_KPASTERISK</star>
|
||||
<star>KEY_NUMERIC_STAR</star>
|
||||
+ <hash>KEY_POUND</hash>
|
||||
<hash>KEY_NUMERIC_POUND</hash>
|
||||
<red>KEY_RED</red>
|
||||
<green>KEY_GREEN</green>
|
@ -0,0 +1,27 @@
|
||||
diff -Naur kodi-15.0-2f34a0c/system/keymaps/keyboard.xml kodi-15.0-2f34a0c.patch/system/keymaps/keyboard.xml
|
||||
--- kodi-15.0-2f34a0c/system/keymaps/keyboard.xml 2015-07-22 10:07:05.000000000 +0200
|
||||
+++ kodi-15.0-2f34a0c.patch/system/keymaps/keyboard.xml 2015-07-30 21:05:38.691232224 +0200
|
||||
@@ -139,6 +139,8 @@
|
||||
<f mod="ctrl">SkipNext</f> <!-- Skip -->
|
||||
<b mod="ctrl">SkipPrevious</b> <!-- Replay -->
|
||||
<d mod="ctrl">Info</d> <!-- MCE Details -->
|
||||
+ <r mod="ctrl">Record</r> <!-- Record -->
|
||||
+ <f4 mod="alt">PreviousMenu</f4> <!-- Exit -->
|
||||
<f10>VolumeUp</f10> <!-- MCE Vol up -->
|
||||
<f9>VolumeDown</f9> <!-- MCE Vol down -->
|
||||
<f8>Mute</f8> <!-- MCE mute -->
|
||||
diff -Naur kodi-15.0-2f34a0c/system/keymaps/mouse.xml kodi-15.0-2f34a0c.patch/system/keymaps/mouse.xml
|
||||
--- kodi-15.0-2f34a0c/system/keymaps/mouse.xml 2015-07-22 10:07:05.000000000 +0200
|
||||
+++ kodi-15.0-2f34a0c.patch/system/keymaps/mouse.xml 2015-07-30 20:37:26.697642374 +0200
|
||||
@@ -29,4 +29,11 @@
|
||||
<wheeldown>NextPicture</wheeldown>
|
||||
</mouse>
|
||||
</SlideShow>
|
||||
+ <FullscreenVideo>
|
||||
+ <mouse>
|
||||
+ <rightclick>Info</rightclick>
|
||||
+ </mouse>
|
||||
+ </FullscreenVideo>
|
||||
+
|
||||
+
|
||||
</keymap>
|
@ -1,12 +0,0 @@
|
||||
diff -Naur kodi-15.0-rc1-9ff25f8/configure.ac kodi-15.0-rc1-9ff25f8.patch/configure.ac
|
||||
--- kodi-15.0-rc1-9ff25f8/configure.ac 2015-07-02 23:35:21.000000000 +0200
|
||||
+++ kodi-15.0-rc1-9ff25f8.patch/configure.ac 2015-07-04 08:15:52.284856500 +0200
|
||||
@@ -1051,7 +1051,7 @@
|
||||
AC_DEFINE([HAVE_LIBEGL],[1],["Define to 1 if you have the `EGL' library (-lEGL)."])
|
||||
AC_DEFINE([HAVE_LIBGLESV2],[1],["Define to 1 if you have the `GLESv2' library (-lGLESv2)."])
|
||||
AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.)
|
||||
- LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm -lmmal -lmmal_core -lmmal_util"
|
||||
+ LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm -lmmal -lmmal_core -lmmal_util -lvcsm"
|
||||
else
|
||||
AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library))
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="ffmpeg"
|
||||
PKG_VERSION="2.6.3"
|
||||
PKG_VERSION="2.6.4"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="LGPL"
|
||||
|
@ -92,7 +92,8 @@ post_makeinstall_target() {
|
||||
-e "s|^# PreferredTechnologies.*|PreferredTechnologies = ethernet,wifi,cellular|g" \
|
||||
-e "s|^# TetheringTechnologies.*|TetheringTechnologies = wifi|g" \
|
||||
-e "s|^# AllowHostnameUpdates.*|AllowHostnameUpdates = false|g" \
|
||||
-e "s|^# PersistentTetheringMode.*|PersistentTetheringMode = true|g"
|
||||
-e "s|^# PersistentTetheringMode.*|PersistentTetheringMode = true|g" \
|
||||
-e "s|^# NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb|NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,docker,veth|g"
|
||||
|
||||
mkdir -p $INSTALL/usr/config
|
||||
cp $PKG_DIR/config/hosts.conf $INSTALL/usr/config
|
||||
|
@ -10,6 +10,7 @@ Type=dbus
|
||||
BusName=net.connman
|
||||
Restart=on-failure
|
||||
EnvironmentFile=-/run/openelec/debug/connman.conf
|
||||
ExecStartPre=-/bin/sh -c "echo -e 'nameserver 8.8.8.8\nnameserver 8.8.4.4' > /etc/resolv.conf"
|
||||
ExecStartPre=-/bin/sh -c "cat /storage/.cache/hostname > /proc/sys/kernel/hostname"
|
||||
ExecStartPre=-/bin/sh -c "cat /storage/.config/hosts.conf > /etc/hosts"
|
||||
ExecStartPre=/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libtirpc"
|
||||
PKG_VERSION="0.2.5"
|
||||
PKG_VERSION="0.3.2"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -0,0 +1,95 @@
|
||||
Submitted By: Douglas R. Reno <renodr2002@gmail.com>
|
||||
Date: 2015-06-24
|
||||
Initial Package Version: 0.3.2
|
||||
Origin: BLFS Ticket #6616, Armin K.
|
||||
Upstream Status: Applied
|
||||
Description: Restore some old API functions that were taken out. Thanks goes to Armin K. for the patch.
|
||||
|
||||
diff -Naur a/src/Makefile.am b/src/Makefile.am
|
||||
--- a/src/Makefile.am 2015-06-16 17:35:08.000000000 +0200
|
||||
+++ b/src/Makefile.am 2015-06-17 21:23:05.185276962 +0200
|
||||
@@ -69,7 +69,7 @@
|
||||
endif
|
||||
|
||||
libtirpc_la_SOURCES += key_call.c key_prot_xdr.c getpublickey.c
|
||||
-libtirpc_la_SOURCES += netname.c netnamer.c rtime.c
|
||||
+libtirpc_la_SOURCES += netname.c netnamer.c rpcdname.c rtime.c
|
||||
|
||||
CLEANFILES = cscope.* *~
|
||||
DISTCLEANFILES = Makefile.in
|
||||
diff -Naur a/src/rpcdname.c b/src/rpcdname.c
|
||||
--- a/src/rpcdname.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/src/rpcdname.c 2015-06-17 21:23:05.186276982 +0200
|
||||
@@ -0,0 +1,72 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2009, Sun Microsystems, Inc.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions are met:
|
||||
+ * - Redistributions of source code must retain the above copyright notice,
|
||||
+ * this list of conditions and the following disclaimer.
|
||||
+ * - Redistributions in binary form must reproduce the above copyright notice,
|
||||
+ * this list of conditions and the following disclaimer in the documentation
|
||||
+ * and/or other materials provided with the distribution.
|
||||
+ * - Neither the name of Sun Microsystems, Inc. nor the names of its
|
||||
+ * contributors may be used to endorse or promote products derived
|
||||
+ * from this software without specific prior written permission.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
+ * POSSIBILITY OF SUCH DAMAGE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * rpcdname.c
|
||||
+ * Gets the default domain name
|
||||
+ */
|
||||
+
|
||||
+#include <stdlib.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+static char *default_domain = 0;
|
||||
+
|
||||
+static char *
|
||||
+get_default_domain()
|
||||
+{
|
||||
+ char temp[256];
|
||||
+
|
||||
+ if (default_domain)
|
||||
+ return (default_domain);
|
||||
+ if (getdomainname(temp, sizeof(temp)) < 0)
|
||||
+ return (0);
|
||||
+ if ((int) strlen(temp) > 0) {
|
||||
+ default_domain = (char *)malloc((strlen(temp)+(unsigned)1));
|
||||
+ if (default_domain == 0)
|
||||
+ return (0);
|
||||
+ (void) strcpy(default_domain, temp);
|
||||
+ return (default_domain);
|
||||
+ }
|
||||
+ return (0);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * This is a wrapper for the system call getdomainname which returns a
|
||||
+ * ypclnt.h error code in the failure case. It also checks to see that
|
||||
+ * the domain name is non-null, knowing that the null string is going to
|
||||
+ * get rejected elsewhere in the NIS client package.
|
||||
+ */
|
||||
+int
|
||||
+__rpc_get_default_domain(domain)
|
||||
+ char **domain;
|
||||
+{
|
||||
+ if ((*domain = get_default_domain()) != 0)
|
||||
+ return (0);
|
||||
+ return (-1);
|
||||
+}
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="openssh"
|
||||
PKG_VERSION="6.9p1"
|
||||
PKG_VERSION="7.0p1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="OSS"
|
||||
|
@ -17,7 +17,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="wireless-regdb"
|
||||
PKG_VERSION="2015.06.05"
|
||||
PKG_VERSION="2015.07.20"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -1,39 +1,8 @@
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_PAUSE = KEY_PAUSE # Pause
|
||||
KEY_INFO = KEY_INFO # Info
|
||||
KEY_VOLDOWN = KEY_VOLUMEDOWN # Volume Down
|
||||
KEY_VOLUP = KEY_VOLUMEUP # Volume Up
|
||||
KEY_CHDOWN = KEY_CHANNELDOWN # Channel Down
|
||||
KEY_CHUP = KEY_CHANNELUP # Channel Up
|
||||
KEY_FORWARD = KEY_FORWARD # Forward
|
||||
KEY_PLAY = KEY_PLAY
|
||||
KEY_CLEAR = KEY_CLEAR # Clear
|
||||
KEY_BACK = KEY_BACK # BACK/Clear
|
||||
KEY_UP = KEY_UP # Up
|
||||
KEY_DOWN = KEY_DOWN # Direction Down
|
||||
KEY_MENU = KEY_MENU # Menu
|
||||
KEY_EXIT = KEY_EXIT # Back/Exit
|
||||
KEY_LEFT = KEY_LEFT # Direction Left
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
KEY_OK = KEY_OK # Direction OK (also used for Enter)
|
||||
KEY_ENTER = KEY_ENTER # Enter (also used for Direction OK)
|
||||
KEY_STOP = KEY_STOP # Stop
|
||||
KEY_OK = KEY_ENTER # Direction OK (also used for Enter)
|
||||
KEY_FFORWARD = KEY_FASTFORWARD # Forward
|
||||
KEY_REWIND = KEY_REWIND # Rewind
|
||||
KEY_RED = KEY_RED # Red
|
||||
KEY_GREEN = KEY_GREEN # Green
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow
|
||||
KEY_BLUE = KEY_BLUE # Blue
|
||||
KEY_GUIDE = KEY_EPG # EPG
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
# = # Power
|
||||
ctrl+shift+alt+KEY_2 = KEY_PVR # TV/DVR
|
||||
ctrl+shift+alt+KEY_H = KEY_PRINT # Print
|
||||
alt+KEY_F4 = KEY_CLOSE # Close
|
||||
@ -6,36 +5,13 @@
|
||||
ctrl+shift+alt+KEY_4 = KEY_MEDIA # Pictures
|
||||
ctrl+shift+alt+KEY_5 = KEY_VIDEO # Videos
|
||||
ctrl+shift+alt+KEY_1 = KEY_CONTEXT_MENU # DVD/Menu
|
||||
#KEY_UP = KEY_UP # Up
|
||||
#KEY_DOWN = KEY_DOWN # Down
|
||||
#KEY_LEFT = KEY_LEFT # Left
|
||||
#KEY_RIGHT = KEY_RIGHT # Right
|
||||
KEY_BACKSPACE = KEY_BACK # Back
|
||||
KEY_ENTER = KEY_OK # Ok
|
||||
KEY_TAB = KEY_TAB # Tab
|
||||
ctrl+KEY_B = KEY_PREVIOUS # Previous
|
||||
ctrl+KEY_P = KEY_PLAYPAUSE # Play/Pause
|
||||
ctrl+KEY_F = KEY_NEXT # Next
|
||||
ctrl+shift+KEY_B = KEY_REWIND # Rew
|
||||
ctrl+KEY_S = KEY_STOP # Stop
|
||||
ctrl+shift+KEY_F = KEY_FORWARD # Fwd
|
||||
# = KEY_VOLUMEDOWN # Vol-
|
||||
# = KEY_VOLUMEUP # Vol+
|
||||
ctrl+shift+alt+KEY_HOME = KEY_MENU # Home
|
||||
#KEY_PAGEDOWN = KEY_PAGEDOWN # Ch-
|
||||
#KEY_PAGEUP = KEY_PAGEUP # Ch+
|
||||
# = KEY_MUTE # Mute
|
||||
ctrl+KEY_R = KEY_RECORD # Record
|
||||
# = # Toggle
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
ctrl+shift+alt+KEY_F = KEY_SHUFFLE # Shuffle
|
||||
ctrl+shift+alt+KEY_B = KEY_MEDIA_REPEAT # Repeat
|
||||
|
@ -1,61 +1,14 @@
|
||||
# Logitech, Inc. UltraX Media Remote
|
||||
# Bus=001 Device=009 Product=046d Version=c101
|
||||
|
||||
KEY_RED = KEY_RED # Red
|
||||
KEY_HOME = KEY_HOME # Home
|
||||
KEY_CLOSE = KEY_CLOSE # Close
|
||||
|
||||
KEY_TV = KEY_TV # Live TV
|
||||
KEY_DVD = KEY_DVD # DVD
|
||||
KEY_MEDIA = KEY_MEDIA # Pictures
|
||||
KEY_VIDEO = KEY_VIDEO # Videos
|
||||
KEY_MP3 = KEY_AUDIO # Music
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
|
||||
KEY_DELETE = KEY_DELETE # Delete/Clear
|
||||
KEY_KPENTER = KEY_OK # Enter/OK
|
||||
KEY_ENTER = KEY_OK # OK
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_KPENTER = KEY_ENTER # Enter/OK
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
KEY_PLAYPAUSE = KEY_PLAY # Play/Pause
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd
|
||||
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # Channel Up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # Channel Down
|
||||
|
||||
KEY_EXIT = KEY_EXIT # Back
|
||||
KEY_BACK = KEY_EXIT # Back
|
||||
KEY_MENU = KEY_MENU # Menu
|
||||
KEY_ANGLE = KEY_ANGLE # Angle
|
||||
KEY_AUDIO = KEY_AUDIO # Audio
|
||||
KEY_LAST = KEY_LAST # Last
|
||||
KEY_LANGUAGE = KEY_LANGUAGE # Language
|
||||
KEY_AGAIN = KEY_MEDIA_REPEAT # Repeat
|
||||
KEY_PROPS = KEY_INFO # Info/EPG
|
||||
KEY_SUBTITLE = KEY_SUBTITLE # Subtitle
|
||||
KEY_SHUFFLE = KEY_SHUFFLE # Shuffle
|
||||
KEY_TEXT = KEY_TEXT # Teletext
|
||||
|
@ -22,7 +22,7 @@
|
||||
KEY_DOWN = KEY_DOWN # Direction Down
|
||||
KEY_LEFT = KEY_LEFT # Direction Left
|
||||
KEY_RIGHT = KEY_RIGHT # Direction Right
|
||||
KEY_ENTER = KEY_OK # Direction OK (also used for Enter)
|
||||
KEY_ENTER = KEY_ENTER # Direction OK (also used for Enter)
|
||||
BTN_MOUSE = BTN_LEFT # Mouse Left
|
||||
#BTN_RIGHT = KEY_INFO # Mouse Right (also used for Information)
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Volume Up
|
||||
|
@ -1,8 +1,4 @@
|
||||
# Apple Infrared Remote Controller
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_FORWARD = KEY_NEXT # Next
|
||||
KEY_BACK = KEY_PREVIOUS # Prev
|
||||
KEY_PLAYPAUSE = KEY_PLAYPAUSE # Play/Pause
|
||||
KEY_MENU = KEY_MENU # Menu
|
||||
|
@ -1,36 +1,10 @@
|
||||
# Giada N20 Remote
|
||||
# Bus=0003 Vendor=0709 Product=9137 Version=0111
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
KEY_ENTER = KEY_OK # Enter & Ok
|
||||
KEY_BACK = KEY_EXIT # Back
|
||||
KEY_ESC = KEY_CLEAR # Clear
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
|
||||
KEY_PLAY = KEY_PLAY # Play
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_PAUSE = KEY_PAUSE # Pause
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
@ -41,5 +15,3 @@
|
||||
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # Hash (#)
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # Star (*)
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
|
@ -1,41 +1,12 @@
|
||||
# Remote 0755:2626 Aureal Semiconductor (iRF Media Technology W-01RN USB_V3.1)
|
||||
|
||||
KEY_NUMERIC_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_NUMERIC_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_NUMERIC_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_NUMERIC_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_NUMERIC_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_NUMERIC_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_NUMERIC_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_NUMERIC_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_NUMERIC_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_NUMERIC_0 = KEY_NUMERIC_0 # 0
|
||||
KEY_NUMERIC_STAR = KEY_NUMERIC_STAR # *
|
||||
KEY_NUMERIC_POUND = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
ctrl+shift+KEY_B = KEY_REWIND # Rewind
|
||||
ctrl+KEY_LEFT = NULL # Rew (Hide)
|
||||
ctrl+shift+KEY_LEFT = NULL # Rew
|
||||
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Forward
|
||||
ctrl+shift+KEY_F = NULL # Fwd (Hide)
|
||||
ctrl+KEY_RIGHT = NULL # Fwd (Hide)
|
||||
ctrl+shift+KEY_RIGHT = NULL # Fwd
|
||||
@ -58,11 +29,7 @@
|
||||
|
||||
KEY_PAGEUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_PAGEDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
KEY_RED = KEY_RED # Red Key
|
||||
KEY_HOMEPAGE = KEY_GREEN # Green Key
|
||||
KEY_MAIL = KEY_YELLOW # Yellow Key
|
||||
|
||||
@ -71,9 +38,7 @@
|
||||
ctrl+KEY_I = KEY_CAMERA # Pictures
|
||||
ctrl+shift+KEY_M = KEY_DVD # DVD/VCD
|
||||
ctrl+KEY_E = KEY_VIDEO # Videos
|
||||
KEY_RADIO = KEY_RADIO # Radio
|
||||
ctrl+KEY_A = KEY_RADIO # Radio
|
||||
KEY_TUNER = KEY_TUNER # Tuner
|
||||
ctrl+shift+KEY_T = KEY_TUNER # Tuner
|
||||
KEY_PVR = KEY_TV # PVR
|
||||
|
||||
@ -81,22 +46,11 @@
|
||||
ctrl+KEY_ENTER = NULL # Full Screen (Hide)
|
||||
alt+KEY_ENTER = KEY_ZOOM # Full Screen
|
||||
|
||||
KEY_INFO = KEY_INFO # Info
|
||||
KEY_EPG = KEY_EPG # EPG
|
||||
KEY_SUBTITLE = KEY_SUBTITLE # Subtitle
|
||||
|
||||
KEY_ENTER = KEY_OK # Enter
|
||||
KEY_OK = KEY_OK # Ok
|
||||
KEY_DELETE = KEY_DELETE # Clear
|
||||
KEY_EXIT = KEY_EXIT # BACK
|
||||
KEY_OK = KEY_ENTER # Ok
|
||||
KEY_BACKSPACE = KEY_EXIT # BACK
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
|
||||
alt+KEY_F4 = KEY_CLOSE # Close
|
||||
meta+KEY_D = KEY_INFO # Desktop, remapped to Info in XBMC
|
||||
KEY_COMPOSE = KEY_EPG # More, remapped to Context Menu in XBMC
|
||||
ctrl+KEY_R = KEY_RECORD # Record
|
||||
KEY_BACK = KEY_BACK # Previous
|
||||
KEY_FORWARD = KEY_FORWARD # Next
|
||||
KEY_ESC = KEY_DELETE # Clear
|
||||
|
@ -1,65 +1,13 @@
|
||||
# X10 Remote
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Volume Up
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Volume Down
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # Channel Up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # Channel Down
|
||||
|
||||
KEY_OK = KEY_OK # Direction OK (also used for Enter)
|
||||
KEY_UP = KEY_UP # Direction Up
|
||||
KEY_DOWN = KEY_DOWN # Direction Down
|
||||
KEY_LEFT = KEY_LEFT # Direction Left
|
||||
KEY_RIGHT = KEY_RIGHT # Direction Right
|
||||
|
||||
KEY_PLAY = KEY_PLAY # Play (also used for Pause)
|
||||
KEY_STOP = KEY_STOP # Stop #deprecated
|
||||
KEY_OK = KEY_ENTER # Direction OK (also used for Enter)
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_PAUSE = KEY_PAUSE # PAUSE
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
|
||||
KEY_FORWARD = KEY_FORWARD # Forward # deprecated
|
||||
KEY_FASTFORWARD = KEY_FORWARD # Forward
|
||||
KEY_REWIND = KEY_REWIND # Reverse
|
||||
KEY_NEXT = KEY_NEXT # Next track
|
||||
KEY_PREVIOUS = KEY_PREVIOUS # Pre-track
|
||||
KEY_LAST = KEY_LAST # Last
|
||||
|
||||
KEY_VIDEO = KEY_VIDEO # My Videos
|
||||
KEY_DVD = KEY_DVD # DVD Menu
|
||||
KEY_AUDIO = KEY_AUDIO # My Music
|
||||
KEY_IMAGES = KEY_CAMERA # My Pictures
|
||||
KEY_CAMERA = KEY_CAMERA # Camera
|
||||
KEY_TV = KEY_TUNER # My TV
|
||||
KEY_RADIO = KEY_RADIO # My Radio
|
||||
KEY_TEXT = KEY_TEXT # Text
|
||||
KEY_EPG = KEY_EPG # EPG
|
||||
|
||||
KEY_MENU = KEY_MENU # Menu
|
||||
KEY_SELECT = KEY_MEDIA # Start Key/Select Key
|
||||
KEY_INFO = KEY_INFO # Info
|
||||
KEY_BACK = KEY_EXIT # Back
|
||||
|
||||
# KEY_RED = KEY_LANGUAGE # Red/Audio
|
||||
# KEY_GREEN = KEY_SUBTITLE # Green/Subtitle
|
||||
# KEY_YELLOW = KEY_ZOOM # Yellow/Angle
|
||||
# KEY_BLUE = KEY_INFO # Blue/Title
|
||||
|
||||
KEY_RED = KEY_RED # Red/Audio
|
||||
KEY_GREEN = KEY_GREEN # Green/Subtitle
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow/Angle
|
||||
KEY_BLUE = KEY_BLUE # Blue/Title
|
||||
|
||||
|
@ -2,23 +2,10 @@
|
||||
# mode 1, keyboard red # keyboard on
|
||||
# mode 2, mouse blue # mouse on
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
BTN_LEFT = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
alt+KEY_F4 = KEY_POWER # Power
|
||||
#? KEY_SLEEP = KEY_POWER # Sleep # remapped to Power
|
||||
#? KEY_WAKEUP = KEY_POWER # WakeUp # remapped to Power
|
||||
|
||||
ctrl+KEY_R = KEY_RECORD # Record
|
||||
ctrl+KEY_P = KEY_PAUSE # Pause
|
||||
@ -38,14 +25,7 @@
|
||||
KEY_COMPOSE = KEY_INFO # Info/EPG
|
||||
alt+meta+KEY_ENTER = KEY_MEDIA # Media
|
||||
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_ENTER = KEY_OK # Enter & Ok
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_F10 = KEY_VOLUMEUP # Vol +
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_F9 = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_PAGEUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_PAGEDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
@ -56,17 +36,12 @@
|
||||
ctrl+KEY_U = KEY_SUBTITLE # Subtitles
|
||||
ctrl+KEY_G = KEY_EPG # Program # remapped to EPG (Contextmenu)
|
||||
|
||||
KEY_VIDEO = KEY_VIDEO # Videos
|
||||
KEY_DVD = KEY_DVD # DVD
|
||||
ctrl+shift+KEY_M = KEY_DVD # DVD
|
||||
KEY_MP3 = KEY_AUDIO # Music
|
||||
ctrl+KEY_M = KEY_AUDIO # Audio
|
||||
KEY_CAMERA = KEY_CAMERA # Pictures
|
||||
ctrl+KEY_T = KEY_TUNER # LiveTV
|
||||
ctrl+KEY_E = KEY_TUNER # TV
|
||||
ctrl+KEY_O = KEY_PVR # RecordedTV
|
||||
|
||||
# KEY_RED = KEY_RED # Red
|
||||
ctrl+KEY_I = KEY_GREEN # Green
|
||||
alt+KEY_TAB = KEY_YELLOW # Yellow
|
||||
# KEY_BLUE = KEY_BLUE # Blue
|
||||
|
@ -2,46 +2,15 @@
|
||||
|
||||
KEY_SLEEP = KEY_POWER # Power
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
KEY_BACKSPACE = KEY_EXIT # Backspace
|
||||
KEY_ENTER = KEY_OK # Enter
|
||||
|
||||
KEY_PLAYPAUSE = KEY_PLAY # Play/Pause
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
|
||||
KEY_PVR = KEY_MEDIA # Home
|
||||
KEY_TV = KEY_TV # Live TV
|
||||
KEY_AUDIO = KEY_AUDIO # Audio
|
||||
KEY_AUX = KEY_CAMERA # Photo
|
||||
KEY_VIDEO = KEY_VIDEO # Videos
|
||||
KEY_DVD = KEY_DVD # DVD/VCD
|
||||
|
||||
KEY_MENU = KEY_EPG # Menu (used for XBMC's context menu)
|
||||
KEY_K = KEY_EPG # Title (used for XBMC's context menu)
|
||||
|
@ -1,13 +1,3 @@
|
||||
KEY_1 = KEY_NUMERIC_1
|
||||
KEY_2 = KEY_NUMERIC_2
|
||||
KEY_3 = KEY_NUMERIC_3
|
||||
KEY_4 = KEY_NUMERIC_4
|
||||
KEY_5 = KEY_NUMERIC_5
|
||||
KEY_6 = KEY_NUMERIC_6
|
||||
KEY_7 = KEY_NUMERIC_7
|
||||
KEY_8 = KEY_NUMERIC_8
|
||||
KEY_9 = KEY_NUMERIC_9
|
||||
KEY_0 = KEY_NUMERIC_0
|
||||
KEY_M = KEY_MUTE
|
||||
KEY_R = KEY_VOLUMEDOWN # -/-- key
|
||||
KEY_S = KEY_VOLUMEUP # A/B key
|
||||
@ -15,11 +5,6 @@
|
||||
KEY_F6 = KEY_PREVIOUS # KEY_GREEN
|
||||
KEY_F7 = KEY_NEXT # KEY_YELLOW
|
||||
KEY_F8 = KEY_BLUE
|
||||
KEY_ENTER = KEY_OK
|
||||
KEY_UP = KEY_UP
|
||||
KEY_DOWN = KEY_DOWN
|
||||
KEY_LEFT = KEY_LEFT
|
||||
KEY_RIGHT = KEY_RIGHT
|
||||
KEY_E = KEY_PROGRAM
|
||||
KEY_F = KEY_EXIT
|
||||
KEY_I = KEY_INFO
|
||||
|
@ -1,23 +1,5 @@
|
||||
# Remote 18b1:0037 Petalynx Maxter
|
||||
|
||||
KEY_NUMERIC_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_NUMERIC_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_NUMERIC_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_NUMERIC_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_NUMERIC_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_NUMERIC_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_NUMERIC_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_NUMERIC_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_NUMERIC_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_NUMERIC_0 = KEY_NUMERIC_0 # 0
|
||||
KEY_NUMERIC_STAR = KEY_NUMERIC_STAR # *
|
||||
KEY_NUMERIC_POUND = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
|
||||
@ -30,29 +12,13 @@
|
||||
|
||||
KEY_PAGEUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_PAGEDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
KEY_RED = KEY_RED # Red Key
|
||||
KEY_GREEN = KEY_GREEN # Green Key
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow Key
|
||||
KEY_BLUE = KEY_BLUE # Blue Key
|
||||
|
||||
KEY_RADIO = KEY_RADIO # Radio
|
||||
KEY_TUNER = KEY_TUNER # Tuner
|
||||
KEY_PVR = KEY_TV # PVR
|
||||
|
||||
KEY_EPG = KEY_EPG # EPG
|
||||
KEY_SUBTITLE = KEY_SUBTITLE # Subtitle
|
||||
|
||||
KEY_ENTER = KEY_OK # Enter
|
||||
KEY_OK = KEY_OK # Ok
|
||||
KEY_DELETE = KEY_DELETE # Clear
|
||||
KEY_OK = KEY_ENTER # Ok
|
||||
KEY_EXIT = KEY_EXIT # BACK
|
||||
|
||||
KEY_SLEEP = KEY_POWER # Power
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
KEY_ESC = KEY_ESC # Escape
|
||||
KEY_BACK = KEY_EXIT # Back
|
||||
|
||||
|
@ -1,38 +1,16 @@
|
||||
# 1d57:ac01 MS-Tech
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_PAGEUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_PAGEDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
ctrl+KEY_F = KEY_NEXT # Next
|
||||
ctrl+KEY_B = KEY_PREVIOUS # Prev
|
||||
|
||||
KEY_DELETE = KEY_DELETE # Delete/Clear
|
||||
alt+KEY_F4 = KEY_EXIT # Exit
|
||||
KEY_BACKSPACE = KEY_EXIT # Back
|
||||
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_ENTER = KEY_OK # Enter & Ok
|
||||
|
||||
KEY_COMPOSE = KEY_INFO # Info
|
||||
ctrl+KEY_R = KEY_RECORD # Record
|
||||
ctrl+KEY_P = KEY_PAUSE # Pause
|
||||
|
@ -5,13 +5,3 @@ BTN_X = KEY_F4
|
||||
BNT_Y = KEY_F5
|
||||
BTN_Z = KEY_F6
|
||||
BTN_START = KEY_ENTER
|
||||
KEY_0 = KEY_NUMERIC_0
|
||||
KEY_1 = KEY_NUMERIC_1
|
||||
KEY_2 = KEY_NUMERIC_2
|
||||
KEY_3 = KEY_NUMERIC_3
|
||||
KEY_4 = KEY_NUMERIC_4
|
||||
KEY_5 = KEY_NUMERIC_5
|
||||
KEY_6 = KEY_NUMERIC_6
|
||||
KEY_7 = KEY_NUMERIC_7
|
||||
KEY_8 = KEY_NUMERIC_8
|
||||
KEY_9 = KEY_NUMERIC_9
|
||||
|
@ -4,16 +4,12 @@
|
||||
# Bus=0003 Vendor=04b4 Product=0100 Version=0001
|
||||
# N: Name="Cyp Se WitheHome"
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
alt+meta+KEY_ENTER = KEY_MEDIA # Start Key
|
||||
ctrl+shift+KEY_P = KEY_PLAY # Play
|
||||
ctrl+KEY_R = KEY_RECORD # Record
|
||||
ctrl+KEY_P = KEY_PAUSE # Pause
|
||||
ctrl+KEY_S = KEY_STOP # Stop
|
||||
ctrl+shift+KEY_S = KEY_STOP # Stop
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Volume Up
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Volume Down
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
|
||||
ctrl+shift+KEY_F = KEY_FASTFORWARD # Forward
|
||||
ctrl+shift+KEY_B = KEY_REWIND # Reverse
|
||||
@ -23,26 +19,10 @@
|
||||
KEY_PAGEDOWN = KEY_CHANNELDOWN # Channel Up
|
||||
KEY_PAGEUP = KEY_CHANNELUP # Channel Down
|
||||
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_KPASTERISK = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_UP = KEY_UP # Direction Up
|
||||
KEY_DOWN = KEY_DOWN # Direction Down
|
||||
KEY_LEFT = KEY_LEFT # Direction Left
|
||||
KEY_RIGHT = KEY_RIGHT # Direction Right
|
||||
KEY_ENTER = KEY_OK # Direction OK (also used for Enter)
|
||||
KEY_BACKSPACE = KEY_EXIT # Back
|
||||
KEY_DELETE = KEY_DELETE # Clear
|
||||
|
||||
ctrl+KEY_V = KEY_MENU # Menu
|
||||
ctrl+shift+KEY_M = KEY_MENU # Menu
|
||||
|
@ -1,24 +1 @@
|
||||
KEY_1 = KEY_NUMERIC_1
|
||||
KEY_2 = KEY_NUMERIC_2
|
||||
KEY_3 = KEY_NUMERIC_3
|
||||
KEY_4 = KEY_NUMERIC_4
|
||||
KEY_5 = KEY_NUMERIC_5
|
||||
KEY_6 = KEY_NUMERIC_6
|
||||
KEY_7 = KEY_NUMERIC_7
|
||||
KEY_8 = KEY_NUMERIC_8
|
||||
KEY_9 = KEY_NUMERIC_9
|
||||
KEY_0 = KEY_NUMERIC_0
|
||||
KEY_E = KEY_BACK
|
||||
KEY_KP1 = KEY_NUMERIC_1
|
||||
KEY_KP2 = KEY_NUMERIC_2
|
||||
KEY_KP3 = KEY_NUMERIC_3
|
||||
KEY_KP4 = KEY_NUMERIC_4
|
||||
KEY_KP5 = KEY_NUMERIC_5
|
||||
KEY_KP6 = KEY_NUMERIC_6
|
||||
KEY_KP7 = KEY_NUMERIC_7
|
||||
KEY_KP8 = KEY_NUMERIC_8
|
||||
KEY_KP9 = KEY_NUMERIC_9
|
||||
KEY_KP0 = KEY_NUMERIC_0
|
||||
KEY_KPASTERISK = KEY_NUMERIC_STAR
|
||||
|
||||
KEY_ENTER = KEY_OK
|
||||
# nothing to remap
|
@ -1,45 +0,0 @@
|
||||
KEY_1 = KEY_NUMERIC_1
|
||||
KEY_2 = KEY_NUMERIC_2
|
||||
KEY_3 = KEY_NUMERIC_3
|
||||
KEY_4 = KEY_NUMERIC_4
|
||||
KEY_5 = KEY_NUMERIC_5
|
||||
KEY_6 = KEY_NUMERIC_6
|
||||
KEY_7 = KEY_NUMERIC_7
|
||||
KEY_8 = KEY_NUMERIC_8
|
||||
KEY_9 = KEY_NUMERIC_9
|
||||
KEY_0 = KEY_NUMERIC_0
|
||||
KEY_STAR = KEY_NUMERIC_STAR
|
||||
KEY_POUND = KEY_NUMERIC_POUND
|
||||
KEY_KP1 = KEY_NUMERIC_1
|
||||
KEY_KP2 = KEY_NUMERIC_2
|
||||
KEY_KP3 = KEY_NUMERIC_3
|
||||
KEY_KP4 = KEY_NUMERIC_4
|
||||
KEY_KP5 = KEY_NUMERIC_5
|
||||
KEY_KP6 = KEY_NUMERIC_6
|
||||
KEY_KP7 = KEY_NUMERIC_7
|
||||
KEY_KP8 = KEY_NUMERIC_8
|
||||
KEY_KP9 = KEY_NUMERIC_9
|
||||
KEY_KP0 = KEY_NUMERIC_0
|
||||
KEY_KPASTERISK = KEY_NUMERIC_STAR
|
||||
|
||||
KEY_E = KEY_EXIT
|
||||
KEY_BACK = KEY_EXIT
|
||||
KEY_BACKSPACE = KEY_EXIT
|
||||
KEY_ESC = KEY_EXIT
|
||||
KEY_STOPCD = KEY_STOP
|
||||
KEY_NEXTSONG = KEY_NEXT
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS
|
||||
KEY_PROPS = KEY_INFO
|
||||
KEY_ANGLE = KEY_ZOOM
|
||||
KEY_MP3 = KEY_AUDIO
|
||||
KEY_TEXT = KEY_TEXT
|
||||
KEY_EPG = KEY_EPG
|
||||
|
||||
KEY_ENTER = KEY_OK
|
||||
KEY_PLAYPAUSE = KEY_PLAY
|
||||
KEY_TITLE = KEY_SUBTITLE
|
||||
KEY_CONTEXT_MENU = KEY_EPG # used for context menu
|
||||
KEY_EJECTCLOSECD = KEY_EJECT
|
||||
KEY_EJECTCD = KEY_EJECT
|
||||
|
||||
KEY_SLEEP = KEY_POWER
|
@ -1,22 +1,5 @@
|
||||
KEY_UP = KEY_UP
|
||||
KEY_DOWN = KEY_DOWN
|
||||
KEY_LEFT = KEY_LEFT
|
||||
KEY_RIGHT = KEY_RIGHT
|
||||
KEY_ENTER = KEY_OK
|
||||
KEY_PAGEDOWN = KEY_PAGEDOWN
|
||||
KEY_PAGEUP = KEY_PAGEUP
|
||||
alt+meta+KEY_ENTER = KEY_MENU
|
||||
KEY_BACKSPACE = KEY_BACK
|
||||
KEY_1 = KEY_NUMERIC_1
|
||||
KEY_2 = KEY_NUMERIC_2
|
||||
KEY_3 = KEY_NUMERIC_3
|
||||
KEY_4 = KEY_NUMERIC_4
|
||||
KEY_5 = KEY_NUMERIC_5
|
||||
KEY_6 = KEY_NUMERIC_6
|
||||
KEY_7 = KEY_NUMERIC_7
|
||||
KEY_8 = KEY_NUMERIC_8
|
||||
KEY_9 = KEY_NUMERIC_9
|
||||
KEY_0 = KEY_NUMERIC_0
|
||||
KEY_EQUAL = KEY_CHANNELUP
|
||||
ctrl+KEY_EQUAL = KEY_CHANNELUP
|
||||
KEY_MINUS = KEY_CHANNELDOWN
|
||||
|
@ -1,2 +0,0 @@
|
||||
# Power Button (ACPI)
|
||||
KEY_POWER = KEY_POWER
|
@ -2,30 +2,10 @@
|
||||
|
||||
KEY_EJECTCD = KEY_EJECT # Eject
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
|
||||
KEY_AUDIO = KEY_LANGUAGE # Audio
|
||||
KEY_SUBTITLE = KEY_SUBTITLE # Subtitle
|
||||
KEY_ANGLE = KEY_ZOOM # Angle
|
||||
KEY_CLEAR = KEY_DELETE # Clear
|
||||
KEY_TIME = KEY_TIME # Time
|
||||
|
||||
KEY_RED = KEY_RED # Red
|
||||
KEY_GREEN = KEY_GREEN # Green
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow
|
||||
KEY_BLUE = KEY_BLUE # Blue
|
||||
|
||||
KEY_INFO = KEY_INFO # Display
|
||||
KEY_MENU = KEY_MENU # Top Menu
|
||||
KEY_CONTEXT_MENU = KEY_EPG # Pop UP/MENU
|
||||
KEY_ESC = KEY_EXIT # Return
|
||||
|
||||
@ -34,30 +14,16 @@ KEY_OPTION = KEY_OPTION # Options
|
||||
KEY_SCREEN = KEY_SCREEN # View
|
||||
BTN_0 = KEY_EXIT # X
|
||||
|
||||
KEY_UP = KEY_UP # Direction Up
|
||||
KEY_DOWN = KEY_DOWN # Direction Down
|
||||
KEY_LEFT = KEY_LEFT # Direction Left
|
||||
KEY_RIGHT = KEY_RIGHT # Direction Right
|
||||
KEY_ENTER = KEY_OK # Enter
|
||||
|
||||
BTN_TL = KEY_VOLUMEUP # L1 -> Volume Upn
|
||||
BTN_TL2 = KEY_VOLUMEDOWN # L2 -> Volume down
|
||||
BTN_THUMBL = KEY_MUTE # L3 -> Mute
|
||||
|
||||
KEY_HOMEPAGE = KEY_MEDIA # PS3 Menu
|
||||
KEY_SELECT = KEY_RECORD # Select
|
||||
BTN_START = KEY_OK # Start
|
||||
BTN_START = KEY_ENTER # Start
|
||||
|
||||
BTN_TR = KEY_CHANNELUP # R1 -> Channel Up
|
||||
BTN_TR2 = KEY_CHANNELDOWN # R2 -> Channel down
|
||||
BTN_THUMBR = KEY_PREVIOUS # R3 -> Previous Channel
|
||||
|
||||
KEY_PLAY = KEY_PLAY # Play
|
||||
KEY_STOP = KEY_STOP # Stop
|
||||
KEY_PAUSE = KEY_PAUSE # Pause
|
||||
KEY_REWIND = KEY_REWIND # Reverse
|
||||
KEY_FORWARD = KEY_FASTFORWARD # Forward
|
||||
KEY_PREVIOUS = KEY_PREVIOUS # Pre-track
|
||||
KEY_NEXT = KEY_NEXT # Next track
|
||||
KEY_FRAMEBACK = KEY_FRAMEBACK # Step back
|
||||
KEY_FRAMEFORWARD = KEY_FRAMEFORWARD # Step forward
|
||||
|
@ -2,55 +2,18 @@
|
||||
# 0471:206c PHILIPS MCE USB IR Receiver- Spinel plus
|
||||
# 0471:20cc PHILIPS MCE USB IR Receiver- Spinel plus
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
KEY_SLEEP = KEY_POWER # Sleep # remapped to Power
|
||||
KEY_WAKEUP = KEY_POWER # WakeUp # remapped to Power
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_PAUSE = KEY_PAUSE # Pause
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
KEY_PLAY = KEY_PLAY # Play
|
||||
KEY_PLAYPAUSE = KEY_PLAY # Play/Pause
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
KEY_BACK = KEY_EXIT # BACK
|
||||
KEY_PROPS = KEY_INFO # Info/EPG
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_ENTER = KEY_OK # Enter & Ok
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_PROGRAM = KEY_EPG # Program # remapped to EPG (Contextmenu)
|
||||
KEY_ESC = KEY_DELETE # Delete/Clear
|
||||
KEY_HOME = KEY_DELETE # Delete/Clear
|
||||
KEY_TEXT = KEY_TEXT # Teletext
|
||||
KEY_MEDIA = KEY_MEDIA # Media
|
||||
|
||||
KEY_VIDEO = KEY_VIDEO # Videos
|
||||
KEY_DVD = KEY_DVD # DVD
|
||||
KEY_MP3 = KEY_AUDIO # Music
|
||||
KEY_CAMERA = KEY_CAMERA # Pictures
|
||||
|
||||
KEY_RED = KEY_RED # Red
|
||||
KEY_GREEN = KEY_GREEN # Green
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow
|
||||
KEY_BLUE = KEY_BLUE # Blue
|
||||
KEY_SLEEP = KEY_POWER # Sleep # remapped to Power
|
||||
KEY_WAKEUP = KEY_POWER # WakeUp # remapped to Power
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_PLAYPAUSE = KEY_PLAY # Play/Pause
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
KEY_BACK = KEY_EXIT # BACK
|
||||
KEY_PROPS = KEY_INFO # Info/EPG
|
||||
KEY_PROGRAM = KEY_EPG # Program # remapped to EPG (Contextmenu)
|
||||
KEY_ESC = KEY_DELETE # Delete/Clear
|
||||
KEY_HOME = KEY_DELETE # Delete/Clear
|
||||
KEY_MP3 = KEY_AUDIO # Music
|
||||
|
@ -1,43 +1,15 @@
|
||||
# TiVii S660 Remote
|
||||
# Bus=0003 Vendor=9022 Product=d660 Version=0000
|
||||
|
||||
KEY_POWER = KEY_POWER # Power
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
|
||||
KEY_OK = KEY_OK # Ok
|
||||
KEY_F5 = KEY_OK # Enter
|
||||
KEY_OK = KEY_ENTER # Ok
|
||||
KEY_F5 = KEY_ENTER # Enter
|
||||
|
||||
KEY_PLAYPAUSE = KEY_PLAY # Play/Pause
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_EPG = KEY_STOP # remap EPG to STOP, because there is no STOP button
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd
|
||||
KEY_OPEN = KEY_NEXT # Next
|
||||
KEY_TIME = KEY_PREVIOUS # Prev
|
||||
|
||||
KEY_F6 = KEY_MEDIA # HOME
|
||||
KEY_INFO = KEY_INFO # Info
|
||||
KEY_AUDIO = KEY_NUMERIC_POUND # Audio
|
||||
KEY_SUBTITLE = KEY_NUMERIC_STAR # Subtitle
|
||||
|
||||
|
@ -5,67 +5,21 @@
|
||||
# 0766:0204 Topseed Cyberlink
|
||||
# 1784:0004 Topseed 2 RF Combo
|
||||
|
||||
KEY_1 = KEY_NUMERIC_1 # 1
|
||||
KEY_2 = KEY_NUMERIC_2 # 2
|
||||
KEY_3 = KEY_NUMERIC_3 # 3
|
||||
KEY_4 = KEY_NUMERIC_4 # 4
|
||||
KEY_5 = KEY_NUMERIC_5 # 5
|
||||
KEY_6 = KEY_NUMERIC_6 # 6
|
||||
KEY_7 = KEY_NUMERIC_7 # 7
|
||||
KEY_8 = KEY_NUMERIC_8 # 8
|
||||
KEY_9 = KEY_NUMERIC_9 # 9
|
||||
KEY_0 = KEY_NUMERIC_0 # 0
|
||||
shift+KEY_8 = KEY_NUMERIC_STAR # *
|
||||
shift+KEY_3 = KEY_NUMERIC_POUND # #
|
||||
|
||||
KEY_UP = KEY_UP # Up Arrow
|
||||
KEY_DOWN = KEY_DOWN # Down Arrow
|
||||
KEY_LEFT = KEY_LEFT # Left Arrow
|
||||
KEY_RIGHT = KEY_RIGHT # Right Arrow
|
||||
KEY_ENTER = KEY_OK # Enter & Ok
|
||||
KEY_DELETE = KEY_DELETE # Delete/Clear
|
||||
KEY_BACK = KEY_EXIT # BACK
|
||||
KEY_ESC = KEY_DELETE # Delete/Clear
|
||||
|
||||
KEY_HOME = KEY_HOME # Home
|
||||
KEY_MEDIA = KEY_MEDIA # Home
|
||||
KEY_SLEEP = KEY_POWER # Power
|
||||
|
||||
KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol -
|
||||
KEY_VOLUMEUP = KEY_VOLUMEUP # Vol +
|
||||
KEY_MUTE = KEY_MUTE # Mute
|
||||
KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up
|
||||
KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down
|
||||
KEY_PLAY = KEY_PLAY # Play
|
||||
KEY_RECORD = KEY_RECORD # Record
|
||||
KEY_REWIND = KEY_REWIND # Rev
|
||||
KEY_PAUSE = KEY_PAUSE # Pause
|
||||
KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd
|
||||
KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev
|
||||
KEY_STOPCD = KEY_STOP # Stop
|
||||
KEY_NEXTSONG = KEY_NEXT # Next
|
||||
|
||||
KEY_DVD = KEY_DVD # DVD/VCD
|
||||
KEY_MP3 = KEY_AUDIO # Music
|
||||
KEY_CAMERA = KEY_CAMERA # Pictures
|
||||
KEY_VIDEO = KEY_VIDEO # Videos
|
||||
KEY_RADIO = KEY_ZOOM # Radio # Remap because we need the zoom key
|
||||
KEY_AUDIO = KEY_AUDIO # SAP
|
||||
KEY_TV = KEY_TV # Live TV
|
||||
KEY_TV2 = KEY_EPG # EPG
|
||||
|
||||
KEY_TEXT = KEY_TEXT # Teletext/CC
|
||||
KEY_LAST = KEY_LAST # Last CH
|
||||
KEY_SUBTITLE = KEY_SUBTITLE # Subtitle
|
||||
KEY_PROGRAM = KEY_SUBTITLE # Program # remapped to Subtitle
|
||||
|
||||
KEY_LANGUAGE = KEY_LANGUAGE # Language
|
||||
KEY_ANGLE = KEY_ANGLE # Angle
|
||||
KEY_MODE = KEY_MODE # Radio # Remap because we need the zoom key
|
||||
KEY_PROPS = KEY_INFO # Info/EPG
|
||||
KEY_MENU = KEY_MENU # DVD Menu
|
||||
|
||||
KEY_RED = KEY_RED # Red
|
||||
KEY_GREEN = KEY_GREEN # Green
|
||||
KEY_YELLOW = KEY_YELLOW # Yellow
|
||||
KEY_BLUE = KEY_BLUE # Blue
|
||||
|
@ -1,11 +1,6 @@
|
||||
BTN_A = KEY_OK # Ok
|
||||
BTN_A = KEY_ENTER # Ok
|
||||
BTN_B = KEY_EXIT # Back/Exit
|
||||
|
||||
KEY_UP = KEY_UP # Up
|
||||
KEY_DOWN = KEY_DOWN # Down
|
||||
KEY_LEFT = KEY_LEFT # Left
|
||||
KEY_RIGHT = KEY_RIGHT # Right
|
||||
|
||||
KEY_PREVIOUS = KEY_VOLUMEDOWN # Vol-
|
||||
KEY_NEXT = KEY_VOLUMEUP # Vol+
|
||||
|
||||
|
@ -55,19 +55,19 @@ ATTRS{name}=="bdremoteng", \
|
||||
#-------------------------------------------------------------------------------
|
||||
SUBSYSTEMS=="rc", \
|
||||
ENV{eventlircd_enable}="true", \
|
||||
ENV{eventlircd_evmap}="ircore.evmap"
|
||||
ENV{eventlircd_evmap}="default.evmap"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Ask eventlircd to handle power button.
|
||||
#-------------------------------------------------------------------------------
|
||||
SUBSYSTEMS=="acpi", ATTRS{hid}=="LNXPWRBN", \
|
||||
ENV{eventlircd_enable}="true", \
|
||||
ENV{eventlircd_evmap}="power.evmap"
|
||||
ENV{eventlircd_evmap}="default.evmap"
|
||||
|
||||
# WeTek Play keyboard (power button)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="key_input", \
|
||||
ENV{eventlircd_enable}="true", \
|
||||
ENV{eventlircd_evmap}="power.evmap"
|
||||
ENV{eventlircd_evmap}="default.evmap"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Ask eventlircd to handle USB HID devices that show up as event devices and are
|
||||
|
@ -35,6 +35,9 @@ case "$SYSTEM_TYPE" in
|
||||
"SolidRun Cubox-i Dual/Quad")
|
||||
export SYSTEM_TYPE="cuboxi"
|
||||
;;
|
||||
"Udoo i.MX6 Dual-lite Board"|"Udoo i.MX6 Quad Board")
|
||||
export SYSTEM_TYPE="udoo"
|
||||
;;
|
||||
*)
|
||||
export SYSTEM_TYPE="undef"
|
||||
;;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user