Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-6.0

This commit is contained in:
Stephan Raue 2015-08-18 00:18:22 +02:00
commit 73e9c4455d
133 changed files with 21187 additions and 3594 deletions

View File

@ -1,3 +1,6 @@
6.0.1
- update repo minversion for kodi 15
6.0.0
- rebuild for OpenELEC-6.0

View File

@ -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"

View File

@ -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>

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="sqlite"
PKG_VERSION="autoconf-3081002"
PKG_VERSION="autoconf-3081101"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="PublicDomain"

View File

@ -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"

View File

@ -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)

View File

@ -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"

View File

@ -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 &param);
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 &param) { 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

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="bcm2835-driver"
PKG_VERSION="47d51d6"
PKG_VERSION="53b9bb9"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="nonfree"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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

View 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

View File

@ -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 */

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.argustv"
PKG_VERSION="3e2350c"
PKG_VERSION="96c8026"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.demo"
PKG_VERSION="92cea88"
PKG_VERSION="3b2cd18"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.dvblink"
PKG_VERSION="bf96fc7"
PKG_VERSION="cf756e9"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.dvbviewer"
PKG_VERSION="ecf820e"
PKG_VERSION="cbfd455"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.filmon"
PKG_VERSION="dab922f"
PKG_VERSION="5c41f4e"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.hts"
PKG_VERSION="d46b745"
PKG_VERSION="5c22440"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.iptvsimple"
PKG_VERSION="0e05337"
PKG_VERSION="23defeb"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.mediaportal.tvserver"
PKG_VERSION="9cf9f36"
PKG_VERSION="29809d1"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.mythtv"
PKG_VERSION="30d4e6f"
PKG_VERSION="538e24d"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.nextpvr"
PKG_VERSION="8d7b706"
PKG_VERSION="3a205e4"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.njoy"
PKG_VERSION="e7f9458"
PKG_VERSION="4f88a09"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.pctv"
PKG_VERSION="0a6b235"
PKG_VERSION="d23160c"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.stalker"
PKG_VERSION="c9f2ac3"
PKG_VERSION="5f6eb19"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.vbox"
PKG_VERSION="387c70a"
PKG_VERSION="874eb88"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.vdr.vnsi"
PKG_VERSION="c361ac4"
PKG_VERSION="550a4a2"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.vuplus"
PKG_VERSION="f7dfd47"
PKG_VERSION="96115e9"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="pvr.wmc"
PKG_VERSION="162053c"
PKG_VERSION="e19c3e9"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -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"

View File

@ -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>

View File

@ -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"

View File

@ -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>

View File

@ -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>

View File

@ -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))

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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);
+}

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="openssh"
PKG_VERSION="6.9p1"
PKG_VERSION="7.0p1"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="OSS"

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,2 +0,0 @@
# Power Button (ACPI)
KEY_POWER = KEY_POWER

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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+

View File

@ -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

View File

@ -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