mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
Compare commits
176 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d400f1239 | ||
|
|
8a7f1edad0 | ||
|
|
b6027210f5 | ||
|
|
113b2829ab | ||
|
|
0e2b1c616b | ||
|
|
0ef9bd02e5 | ||
|
|
b63c7cfe41 | ||
|
|
b4a9b00c60 | ||
|
|
5225394e95 | ||
|
|
8daa6cd4a2 | ||
|
|
bd66701ec9 | ||
|
|
1279115624 | ||
|
|
2d418f67cc | ||
|
|
934cb939f3 | ||
|
|
a032fbd82e | ||
|
|
2f3ef07ca5 | ||
|
|
dc44c45496 | ||
|
|
97c44d6185 | ||
|
|
8cb1faf75a | ||
|
|
1d18803bd6 | ||
|
|
0f9583da99 | ||
|
|
e748d109b4 | ||
|
|
95422fadf0 | ||
|
|
d7e956544a | ||
|
|
267a536c16 | ||
|
|
987f53ca59 | ||
|
|
a3f6e5a14a | ||
|
|
91594773df | ||
|
|
0019bbb7db | ||
|
|
1f360da59f | ||
|
|
42d2f83366 | ||
|
|
3c36022773 | ||
|
|
7bd39a17c5 | ||
|
|
f0b6c134bc | ||
|
|
68a053bf5d | ||
|
|
61e8300e84 | ||
|
|
a01d717b01 | ||
|
|
ef00cbec7a | ||
|
|
ba4d163046 | ||
|
|
d44512f065 | ||
|
|
644437a35c | ||
|
|
86a09910c8 | ||
|
|
324c9b9e91 | ||
|
|
18835008d7 | ||
|
|
424156e8c2 | ||
|
|
58652ed54f | ||
|
|
7fe797c21d | ||
|
|
8a44aff0ae | ||
|
|
b350409a87 | ||
|
|
02c26cf74c | ||
|
|
10ceab95eb | ||
|
|
19eab3c0b4 | ||
|
|
1de4183ac9 | ||
|
|
8468cb546d | ||
|
|
1ef9d61701 | ||
|
|
8b74db943e | ||
|
|
a25d0284bb | ||
|
|
6c35c7744d | ||
|
|
d015207763 | ||
|
|
309c06aa95 | ||
|
|
48454e8f09 | ||
|
|
dce3e3d9b2 | ||
|
|
bf92570214 | ||
|
|
f308199746 | ||
|
|
33a9e93a8b | ||
|
|
7e8d54b030 | ||
|
|
44e5a963ec | ||
|
|
84b141fb03 | ||
|
|
549631cc92 | ||
|
|
79faa669af | ||
|
|
ef314ac176 | ||
|
|
1994796f5f | ||
|
|
c5c03e9217 | ||
|
|
ae802aa241 | ||
|
|
45b4a7eaf9 | ||
|
|
2e82cb8bfe | ||
|
|
a8f0af8f9f | ||
|
|
b01294dfbd | ||
|
|
075cd80895 | ||
|
|
17402b185f | ||
|
|
ecfc4182fb | ||
|
|
997b403b4c | ||
|
|
b66f07ff23 | ||
|
|
3c407df2fc | ||
|
|
65b88d4550 | ||
|
|
5224281992 | ||
|
|
ed3f230d16 | ||
|
|
37fb055954 | ||
|
|
531c4785ec | ||
|
|
5897e8155e | ||
|
|
61ad04c423 | ||
|
|
10e8774143 | ||
|
|
0423b4c8b6 | ||
|
|
c01f524e80 | ||
|
|
89c4916d11 | ||
|
|
f25a4c7159 | ||
|
|
48bda22cbc | ||
|
|
43df7485f8 | ||
|
|
2c5d302d8e | ||
|
|
02cca7dc25 | ||
|
|
0127603ce4 | ||
|
|
78cb67eebf | ||
|
|
d7d0f551e2 | ||
|
|
6027f4759b | ||
|
|
076d6c901a | ||
|
|
a48dc02c2e | ||
|
|
2ab4c72852 | ||
|
|
b1ace294eb | ||
|
|
1e505759d7 | ||
|
|
2082afff78 | ||
|
|
fb0007845a | ||
|
|
d7fc0eb6f0 | ||
|
|
8bfb08e555 | ||
|
|
abc9d658a2 | ||
|
|
0e5401939e | ||
|
|
6e69cd582f | ||
|
|
54072e33c8 | ||
|
|
08c38cb59a | ||
|
|
235fb0c12b | ||
|
|
8ac3106fb6 | ||
|
|
5b5284cd6a | ||
|
|
08565fa0e3 | ||
|
|
0bd4793492 | ||
|
|
04b8036e32 | ||
|
|
0eb36d786b | ||
|
|
195c206669 | ||
|
|
fbf0c54b71 | ||
|
|
9a24528e3f | ||
|
|
775df5da16 | ||
|
|
7604df2686 | ||
|
|
17ab4518fd | ||
|
|
bb9f7fa623 | ||
|
|
c3e674ed7d | ||
|
|
5f777dcbe8 | ||
|
|
6400a8cb7e | ||
|
|
7aabe781cb | ||
|
|
5cdbdf0303 | ||
|
|
9d6a971612 | ||
|
|
dc1d83925e | ||
|
|
f8ec58745e | ||
|
|
85cb44de99 | ||
|
|
c10e761b0d | ||
|
|
6c8ab49eec | ||
|
|
9e9e6befb3 | ||
|
|
f470d833b7 | ||
|
|
06f48133bb | ||
|
|
8ebda35e84 | ||
|
|
4fb34fc66a | ||
|
|
26e3588d79 | ||
|
|
e50834fd82 | ||
|
|
0b13c7b6fe | ||
|
|
b96e205f14 | ||
|
|
7ae3eb5b10 | ||
|
|
9e39ce6f1c | ||
|
|
1122893a50 | ||
|
|
ffdd6878a3 | ||
|
|
4ef5e73ae6 | ||
|
|
69f3db483e | ||
|
|
2fb1df6623 | ||
|
|
6202251a6c | ||
|
|
caaf067615 | ||
|
|
18d9847829 | ||
|
|
505ccecbc8 | ||
|
|
50fc3b5569 | ||
|
|
8f4bdc77cc | ||
|
|
902f198d46 | ||
|
|
3d10ea2d16 | ||
|
|
0f73329ce0 | ||
|
|
1fd115b699 | ||
|
|
58fc3e7ea9 | ||
|
|
c0ed05c6f6 | ||
|
|
ca952e8937 | ||
|
|
08c06b05cf | ||
|
|
284432cf4f | ||
|
|
c502b14ce6 | ||
|
|
707655ced2 |
19
Makefile
19
Makefile
@@ -14,25 +14,6 @@ image:
|
||||
noobs:
|
||||
./scripts/image noobs
|
||||
|
||||
amlpkg:
|
||||
./scripts/image amlpkg
|
||||
|
||||
# legacy sequential build targets
|
||||
system-st:
|
||||
./scripts/image_st
|
||||
|
||||
release-st:
|
||||
./scripts/image_st release
|
||||
|
||||
image-st:
|
||||
./scripts/image_st mkimage
|
||||
|
||||
noobs-st:
|
||||
./scripts/image_st noobs
|
||||
|
||||
amlpkg-st:
|
||||
./scripts/image_st amlpkg
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIRS)/* $(BUILD_DIRS)/.stamps
|
||||
|
||||
|
||||
@@ -357,11 +357,9 @@ setup_toolchain() {
|
||||
create_meson_conf() {
|
||||
local endian root properties
|
||||
case "$1" in
|
||||
target|init) endian="little"
|
||||
root="$SYSROOT_PREFIX/usr"
|
||||
target|init) root="$SYSROOT_PREFIX/usr"
|
||||
;;
|
||||
host|bootstrap) endian="big"
|
||||
root="$TOOLCHAIN"
|
||||
host|bootstrap) root="$TOOLCHAIN"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -380,12 +378,14 @@ llvm-config = '$SYSROOT_PREFIX/usr/bin/llvm-config-host'
|
||||
system = 'linux'
|
||||
cpu_family = '$TARGET_ARCH'
|
||||
cpu = '$TARGET_SUBARCH'
|
||||
endian = '$endian'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
root = '$root'
|
||||
$(python -c "import os; print('c_args = {}'.format([x for x in os.getenv('CFLAGS').split()]))")
|
||||
$(python -c "import os; print('c_link_args = {}'.format([x for x in os.getenv('LDFLAGS').split()]))")
|
||||
$(python -c "import os; print('cpp_args = {}'.format([x for x in os.getenv('CXXFLAGS').split()]))")
|
||||
$(python -c "import os; print('cpp_link_args = {}'.format([x for x in os.getenv('LDFLAGS').split()]))")
|
||||
${!properties}
|
||||
EOF
|
||||
}
|
||||
@@ -989,8 +989,10 @@ kernel_config_path() {
|
||||
$pkg_linux_dir/config/$config_name \
|
||||
; do
|
||||
[[ $cfg =~ /devices//linux/ ]] && continue
|
||||
[ -f "$cfg" ] && echo "$cfg" && break
|
||||
[ -f "$cfg" ] && echo "$cfg" && return
|
||||
done
|
||||
|
||||
die "ERROR: Unable to locate kernel config for ${LINUX} - looking for ${config_name}"
|
||||
}
|
||||
|
||||
kernel_make() {
|
||||
@@ -1155,6 +1157,8 @@ done
|
||||
}
|
||||
|
||||
install_addon_files() {
|
||||
mkdir -p "$1"
|
||||
|
||||
install_addon_source "$1"
|
||||
install_addon_images "$1"
|
||||
create_addon_xml "$1"
|
||||
@@ -1190,7 +1194,7 @@ add_user() {
|
||||
|
||||
mkdir -p ${INSTALL}/usr/cache
|
||||
touch ${INSTALL}/usr/cache/shadow
|
||||
ln -sf /storage/.cache/shadow ${INSTALL}/etc/shadow
|
||||
ln -sf /storage/.cache/shadow ${INSTALL}/etc/shadow 2>/dev/null || true
|
||||
|
||||
PASSWORD="$2"
|
||||
if [ "$PASSWORD" = "x" ]; then
|
||||
@@ -1262,7 +1266,7 @@ pkg_lock() {
|
||||
|
||||
# As we now have the lock, if .failed still exists then a previous process must have failed
|
||||
if [ -f "${THREAD_CONTROL}/locks/${pkg}.${task}.failed" ]; then
|
||||
fail_seq="$(cat "${THREAD_CONTROL}/locks/${pkg}.${task}.failed")"
|
||||
fail_seq="$(< "${THREAD_CONTROL}/locks/${pkg}.${task}.failed")"
|
||||
print_color CLR_ERROR "FAILURE: ${pkg}.${task}.failed exists, a previous dependency process has failed (seq: ${fail_seq})\n"
|
||||
if [ -d "${THREAD_CONTROL}/logs" ]; then
|
||||
cat <<EOF
|
||||
@@ -1320,15 +1324,18 @@ update_dashboard() {
|
||||
|
||||
sedline=$((MTJOBID + 2))
|
||||
|
||||
num=$(cat "${THREAD_CONTROL}/status" | wc -l)
|
||||
while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
|
||||
num=$(< "${THREAD_CONTROL}/status.max")
|
||||
if [ ${num} -lt ${sedline} ]; then
|
||||
echo ${sedline} >"${THREAD_CONTROL}/status.max"
|
||||
for i in $(seq $((num + 1)) ${sedline}); do echo "" >>"${THREAD_CONTROL}/status"; done
|
||||
fi
|
||||
|
||||
num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1))
|
||||
num=$(< "${THREAD_CONTROL}/progress.prev")
|
||||
projdevarch="${PROJECT}/"
|
||||
[ -n "${DEVICE}" ] && projdevarch+="${DEVICE}/"
|
||||
projdevarch+="${TARGET_ARCH}"
|
||||
TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
|
||||
printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}"
|
||||
printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" $((num + 1)) ${MTMAXJOBS} "${elapsed}"
|
||||
printf -v preamble "%b%-105s %s" "\e[2J\e[0;0H" "${preamble//\//\\/}" "$(date "+%Y-%m-%d %H:%M:%S")"
|
||||
|
||||
if [ "${DISABLE_COLORS}" != "yes" ]; then
|
||||
|
||||
@@ -107,8 +107,9 @@ package_worker() {
|
||||
(
|
||||
flock --exclusive 95
|
||||
[ ${result} -eq 0 ] && status="DONE" || status="FAIL"
|
||||
num=$(($(cat "${THREAD_CONTROL}/progress") + 1))
|
||||
num=$(< "${THREAD_CONTROL}/progress")
|
||||
mv "${THREAD_CONTROL}/progress" "${THREAD_CONTROL}/progress.prev"
|
||||
num=$((num + 1))
|
||||
echo ${num} >"${THREAD_CONTROL}/progress"
|
||||
printf "[%0*d/%0*d] [%-4s] %-7s %s\n" ${#jobs} ${num} ${#jobs} ${jobs} "${status}" "${task}" "${pkgname}" >&2
|
||||
) 95>"${THREAD_CONTROL}/locks/.progress"
|
||||
@@ -143,6 +144,7 @@ start_multithread_build() {
|
||||
mkdir -p "${THREAD_CONTROL}/locks"
|
||||
echo -1 >"${THREAD_CONTROL}/progress.prev"
|
||||
echo 0 >"${THREAD_CONTROL}/progress"
|
||||
echo 0 >"${THREAD_CONTROL}/status.max"
|
||||
touch "${THREAD_CONTROL}/status"
|
||||
|
||||
[ "${THREADCOUNT}" = "0" ] && THREADCOUNT=1
|
||||
|
||||
@@ -53,7 +53,6 @@ show_config() {
|
||||
config_message="$config_message\n $dashes$dashes"
|
||||
|
||||
config_message="$config_message\n - Remote support:\t\t\t $REMOTE_SUPPORT"
|
||||
config_message="$config_message\n - ATV Remote support:\t\t\t $ATVCLIENT_SUPPORT"
|
||||
config_message="$config_message\n - CEC Adapter support:\t\t\t $CEC_SUPPORT"
|
||||
config_message="$config_message\n - CEC Framework support:\t\t $CEC_FRAMEWORK_SUPPORT"
|
||||
config_message="$config_message\n - Kodi Joystick support:\t\t $JOYSTICK_SUPPORT"
|
||||
@@ -105,10 +104,6 @@ show_config() {
|
||||
config_message="$config_message\n - OEM Support:\t\t\t\t $OEM_SUPPORT"
|
||||
config_message="$config_message\n - Default ROOT Password:\t\t $ROOT_PASSWORD"
|
||||
config_message="$config_message\n - Bootloader:\t\t\t\t $BOOTLOADER"
|
||||
if [ "$BOOTLOADER" = "u-boot" ]; then
|
||||
config_message="$config_message\n - U-Boot configuration:\t\t $UBOOT_CONFIG"
|
||||
config_message="$config_message\n - U-Boot config file:\t\t $UBOOT_CONFIGFILE"
|
||||
fi
|
||||
config_message="$config_message\n - UDevil support:\t\t\t $UDEVIL"
|
||||
config_message="$config_message\n - Installer support:\t\t\t $INSTALLER_SUPPORT"
|
||||
for config_package in $ADDITIONAL_PACKAGES; do
|
||||
|
||||
@@ -140,9 +140,6 @@
|
||||
# build and install remote support (yes / no)
|
||||
REMOTE_SUPPORT="yes"
|
||||
|
||||
# build and install ATV IR remote support (yes / no)
|
||||
ATVCLIENT_SUPPORT="yes"
|
||||
|
||||
# build and install Joystick support (yes / no)
|
||||
JOYSTICK_SUPPORT="yes"
|
||||
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
OS_VERSION="9.1"
|
||||
|
||||
# ADDON_VERSION: Addon version
|
||||
ADDON_VERSION="9.1"
|
||||
ADDON_VERSION="9.1.900"
|
||||
|
||||
@@ -10,14 +10,6 @@ PKG_URL="https://github.com/mighty-p/t2scan/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_LONGDESC="A small channel scan tool which generates DVB-T/T2 channels.conf files."
|
||||
|
||||
# aml 3.14 hack
|
||||
pre_configure_target() {
|
||||
if [ "$LINUX" = "amlogic-3.14" -o "$LINUX" = "amlogic-3.10" ]; then
|
||||
sed -i 's/DVB_HEADER=0/DVB_HEADER=1/g' $PKG_BUILD/configure*
|
||||
sed -i 's/HAS_DVB_API5=0/HAS_DVB_API5=1/g' $PKG_BUILD/configure*
|
||||
fi
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
:
|
||||
}
|
||||
|
||||
@@ -11,14 +11,6 @@ PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_LONGDESC="A channel scan tool which generates ATSC, DVB-C, DVB-S/S2 and DVB-T channels.conf files."
|
||||
PKG_TOOLCHAIN="autotools"
|
||||
|
||||
# aml 3.14 hack
|
||||
pre_configure_target() {
|
||||
if [ "$LINUX" = "amlogic-3.14" -o "$LINUX" = "amlogic-3.10" ]; then
|
||||
sed -i 's/DVB_HEADER=0/DVB_HEADER=1/g' $PKG_BUILD/configure*
|
||||
sed -i 's/HAS_DVB_API5=0/HAS_DVB_API5=1/g' $PKG_BUILD/configure*
|
||||
fi
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
:
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ PKG_SHA256="4ebc271e9e5cea84a683375a0f7e91086e5dac90c5d51bb3f169f75386107a62"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="http://lftp.yar.ru/"
|
||||
PKG_URL="http://lftp.yar.ru/ftp/${PKG_NAME}-${PKG_VERSION}.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain readline openssl zlib"
|
||||
PKG_DEPENDS_TARGET="toolchain readline openssl zlib libidn2"
|
||||
PKG_LONGDESC="A sophisticated ftp/http client, and a file transfer program supporting a number of network protocols."
|
||||
|
||||
PKG_CONFIGURE_OPTS_TARGET="--disable-nls \
|
||||
|
||||
@@ -10,6 +10,10 @@ PKG_URL="http://www.udpxy.com/download/1_23/${PKG_NAME}.${PKG_VERSION}-prod.tar.
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_LONGDESC="A UDP-to-HTTP multicast traffic relay daemon."
|
||||
|
||||
configure_target() {
|
||||
export CFLAGS+=" -Wno-stringop-truncation"
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
:
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ PKG_NAME="repository.linuxserver.docker"
|
||||
PKG_VERSION="9.0"
|
||||
PKG_REV="102"
|
||||
PKG_ARCH="any"
|
||||
PKG_ADDON_PROJECTS="any !WeTek_Core !WeTek_Play"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://linuxserver.io"
|
||||
PKG_URL=""
|
||||
|
||||
@@ -48,7 +48,6 @@ addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp -P $PKG_BUILD/.$TARGET_NAME/src/boblightd $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp -P $PKG_BUILD/.$TARGET_NAME/src/boblight-constant $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp -P $PKG_BUILD/.$TARGET_NAME/src/boblight-aml $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
if [ "$DISPLAYSERVER" = "x11" ] ; then
|
||||
cp -P $PKG_BUILD/.$TARGET_NAME/src/boblight-X11 $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
fi
|
||||
|
||||
@@ -1,632 +0,0 @@
|
||||
diff --git a/src/Makefile.am b/src/Makefile.am
|
||||
index 9ba5381..c5a4dc6 100644
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -7,6 +7,7 @@ AM_CFLAGS =\
|
||||
-g
|
||||
|
||||
bin_PROGRAMS = boblightd \
|
||||
+ boblight-aml \
|
||||
boblight-constant
|
||||
|
||||
|
||||
@@ -19,6 +20,11 @@ endif
|
||||
|
||||
endif
|
||||
|
||||
+boblight_aml_SOURCES = clients/boblight-aml/boblight-aml.cpp
|
||||
+boblight_aml_SOURCES += clients/boblight-aml/flagmanager-aml.cpp
|
||||
+boblight_aml_SOURCES += clients/flagmanager.cpp
|
||||
+boblight_aml_SOURCES += util/misc.cpp
|
||||
+
|
||||
boblight_v4l_SOURCES = \
|
||||
clients/boblight-v4l/boblight-v4l.cpp \
|
||||
clients/boblight-v4l/flagmanager-v4l.cpp \
|
||||
diff -urPp src/clients/boblight-aml.cpp src/clients/boblight-aml/boblight-aml.cpp
|
||||
--- /dev/null Thu Jan 1 00:00:00 1970
|
||||
+++ b/src/clients/boblight-aml/boblight-aml.cpp Thu Jan 15 10:24:16 2015
|
||||
@@ -0,0 +1,491 @@
|
||||
+/*
|
||||
+ * boblight
|
||||
+ * Copyright (C) Bob 2009
|
||||
+ *
|
||||
+ * boblight is free software: you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License as published by the
|
||||
+ * Free Software Foundation, either version 3 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * boblight is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
+ * See the GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#define BOBLIGHT_DLOPEN
|
||||
+#include "lib/boblight.h"
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+#include <signal.h>
|
||||
+#include <algorithm>
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <errno.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <sys/poll.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/time.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+
|
||||
+#include "config.h"
|
||||
+#include "util/misc.h"
|
||||
+#include "util/timeutils.h"
|
||||
+#include "flagmanager-aml.h"
|
||||
+
|
||||
+using namespace std;
|
||||
+
|
||||
+//from linux/amlogic/amports/amvideocap.h
|
||||
+#define AMVIDEOCAP_IOC_MAGIC 'V'
|
||||
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
|
||||
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
|
||||
+
|
||||
+
|
||||
+// helper class - tries to load the "movie" settings from the script.xbmc.boblight addon
|
||||
+// and pass them to the boblight-aml client
|
||||
+class CBoblightAddonSettings
|
||||
+{
|
||||
+ public:
|
||||
+ CBoblightAddonSettings() : m_bobdisable(false), m_settingsLoaded(false)
|
||||
+ {
|
||||
+ m_settingsLoaded = loadBoblightAddonSettings();
|
||||
+ }
|
||||
+
|
||||
+ std::string getBoblightClientCmdLine()
|
||||
+ {
|
||||
+ std::string cmdLine = "";
|
||||
+ //convert bool string to lowercase
|
||||
+ transform(m_interpolation.begin(), m_interpolation.end(), m_interpolation.begin(), ::tolower);
|
||||
+
|
||||
+ cmdLine += "-s " + m_ip + ":" + m_port;
|
||||
+ cmdLine += " -o autospeed=" + m_autospeed;
|
||||
+ cmdLine += " -o interpolation=" + m_interpolation;
|
||||
+ cmdLine += " -o saturation=" + m_saturation;
|
||||
+ cmdLine += " -o speed=" + m_speed;
|
||||
+ cmdLine += " -o threshold=" + m_threshold;
|
||||
+ cmdLine += " -o value=" + m_value;
|
||||
+ return cmdLine;
|
||||
+ }
|
||||
+
|
||||
+ bool m_bobdisable;
|
||||
+ bool m_settingsLoaded;
|
||||
+ std::string m_ip;
|
||||
+ std::string m_port;
|
||||
+ std::string m_autospeed;
|
||||
+ std::string m_interpolation;
|
||||
+ std::string m_saturation;
|
||||
+ std::string m_speed;
|
||||
+ std::string m_threshold;
|
||||
+ std::string m_value;
|
||||
+
|
||||
+ private:
|
||||
+ #define SETTINGS_ATTR_BOBDISABLE "bobdisable"
|
||||
+ #define SETTINGS_ATTR_IP "hostip"
|
||||
+ #define SETTINGS_ATTR_PORT "hostport"
|
||||
+ #define SETTINGS_ATTR_AUTOSPEED "movie_autospeed"
|
||||
+ #define SETTINGS_ATTR_INTERPOLATION "movie_interpolation"
|
||||
+ #define SETTINGS_ATTR_SATURATION "movie_saturation"
|
||||
+ #define SETTINGS_ATTR_SPEED "movie_speed"
|
||||
+ #define SETTINGS_ATTR_THRESHOLD "movie_threshold"
|
||||
+ #define SETTINGS_ATTR_VALUE "movie_value"
|
||||
+ #define KODI_HOME_ENV_VAR "HOME"
|
||||
+
|
||||
+ bool loadBoblightAddonSettings()
|
||||
+ {
|
||||
+ bool ret = false;
|
||||
+ char *kodiHome = getenv(KODI_HOME_ENV_VAR);
|
||||
+ //fallback to custom settings file in case boblight addon is not installed
|
||||
+ std::string settingsFile = "/storage/boblight-aml.xml";
|
||||
+
|
||||
+ if (kodiHome != NULL)
|
||||
+ {
|
||||
+ settingsFile = std::string(kodiHome) + "/.kodi/userdata/addon_data/script.xbmc.boblight/settings.xml";
|
||||
+ }
|
||||
+
|
||||
+ FILE *fd = fopen(settingsFile.c_str(), "r");
|
||||
+
|
||||
+ if (fd != NULL)
|
||||
+ {
|
||||
+ fseek(fd, 0, SEEK_END);
|
||||
+ size_t fileSize = ftell(fd);
|
||||
+ fseek(fd, 0, SEEK_SET);
|
||||
+ if (fileSize > 0)
|
||||
+ {
|
||||
+ if (fileSize > 32000)//read 16k max - there shouldn't be a bigger settings.xml from boblight [tm]
|
||||
+ fileSize = 32000;
|
||||
+ char *xmlBuffer = new char[fileSize];
|
||||
+ size_t readCount = fread(xmlBuffer, fileSize, 1, fd);
|
||||
+ fclose(fd);
|
||||
+
|
||||
+ if (readCount == 1)
|
||||
+ {
|
||||
+ parseBoblightSettings(std::string(xmlBuffer));
|
||||
+ ret = true;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ fprintf(stderr, "Failed reading boblight addon settings.xml");
|
||||
+ }
|
||||
+ delete[] xmlBuffer;
|
||||
+ }
|
||||
+ }
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ void parseBoblightSettings(std::string xmlBuffer)
|
||||
+ {
|
||||
+ std::string settings_bobdisable_str;
|
||||
+ settings_bobdisable_str = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_BOBDISABLE);
|
||||
+ if (settings_bobdisable_str == "true" || settings_bobdisable_str == "True")
|
||||
+ m_bobdisable = true;
|
||||
+
|
||||
+ m_ip = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_IP);
|
||||
+ m_port = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_PORT);
|
||||
+ m_autospeed = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_AUTOSPEED);
|
||||
+ m_interpolation = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_INTERPOLATION);
|
||||
+ m_saturation = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_SATURATION);
|
||||
+ m_speed = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_SPEED);
|
||||
+ m_threshold = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_THRESHOLD);
|
||||
+ m_value = getValueFromXmlBuffer(xmlBuffer, SETTINGS_ATTR_VALUE);
|
||||
+ }
|
||||
+
|
||||
+ std::string getValueFromXmlBuffer(const std::string &xmlBuffer, const char* xmlAttribute)
|
||||
+ {
|
||||
+ size_t strPos = 0;
|
||||
+ std::string valueStr;
|
||||
+
|
||||
+ // each line in the xml looks like this:
|
||||
+ // <setting id="movie_value" value="1.000006" />
|
||||
+ // find the attribute
|
||||
+ if ((strPos = xmlBuffer.find(xmlAttribute)) != std::string::npos)
|
||||
+ {
|
||||
+ size_t strPos2 = 0;
|
||||
+ // from movie_value" value="1.000006" /> look for "value"
|
||||
+ if ((strPos2 = xmlBuffer.find("value", strPos)) != std::string::npos)
|
||||
+ {
|
||||
+ size_t strPos3 = 0;
|
||||
+ // from value="1.000006" /> look for "="
|
||||
+ if ((strPos3 = xmlBuffer.find("=", strPos2)) != std::string::npos)
|
||||
+ {
|
||||
+ //extract the value - strPos3 points to ="1.000006"
|
||||
+ int valueOffset = 1; //skip the "="
|
||||
+ if (xmlBuffer[strPos3 + valueOffset] == '"')
|
||||
+ valueOffset++;//skip " if needed
|
||||
+ int strLen = 0;
|
||||
+ do
|
||||
+ {
|
||||
+ // value stops with " or space
|
||||
+ if (xmlBuffer[strPos3 + valueOffset + strLen] == '"' ||
|
||||
+ xmlBuffer[strPos3 + valueOffset + strLen] == ' ')
|
||||
+ break;
|
||||
+ strLen++;
|
||||
+ } while (strLen < 20);// no insane xml garbage ...
|
||||
+
|
||||
+ valueStr = xmlBuffer.substr(strPos3 + valueOffset, strLen);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return valueStr;
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+struct aml_snapshot_t {
|
||||
+ unsigned int dst_width;
|
||||
+ unsigned int dst_height;
|
||||
+ unsigned int dst_stride;
|
||||
+ unsigned int dst_size;
|
||||
+ void *dst_vaddr;
|
||||
+};
|
||||
+
|
||||
+volatile bool g_stop = false;
|
||||
+CFlagManagerAML g_flagmanager;
|
||||
+/*********************************************************
|
||||
+ *********************************************************/
|
||||
+static void SignalHandler(int signum)
|
||||
+{
|
||||
+ if (signum == SIGTERM)
|
||||
+ {
|
||||
+ fprintf(stderr, "caught SIGTERM\n");
|
||||
+ g_stop = true;
|
||||
+ }
|
||||
+ else if (signum == SIGINT)
|
||||
+ {
|
||||
+ fprintf(stderr, "caught SIGTERM\n");
|
||||
+ g_stop = true;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#define VIDEO_PATH "/dev/amvideo"
|
||||
+#define AMSTREAM_IOC_MAGIC 'S'
|
||||
+#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR(AMSTREAM_IOC_MAGIC, 0x48, unsigned long)
|
||||
+static int amvideo_utils_video_playing()
|
||||
+{
|
||||
+ int video_fd;
|
||||
+ int video_disable;
|
||||
+
|
||||
+ video_fd = open(VIDEO_PATH, O_RDWR);
|
||||
+ if (video_fd < 0) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ ioctl(video_fd, AMSTREAM_IOC_GET_VIDEO_DISABLE, &video_disable);
|
||||
+ if (video_disable)
|
||||
+ {
|
||||
+ close(video_fd);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ close(video_fd);
|
||||
+
|
||||
+// fprintf(stderr, "pos x %d y %d w %d h %d\n",snapshot.src_x, snapshot.src_y,snapshot.src_width,snapshot.src_height);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int capture_frame(int fd, aml_snapshot_t &snapshot)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ ssize_t readResult = pread(fd, snapshot.dst_vaddr, snapshot.dst_size, 0);
|
||||
+
|
||||
+ if (readResult < snapshot.dst_size)
|
||||
+ {
|
||||
+ fprintf(stderr, "frame read returned %d\n", readResult);
|
||||
+ }
|
||||
+ //fprintf(stderr, "requ: %d read %d \n", snapshot.dst_size, readResult);
|
||||
+ fprintf(stderr, ".");
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int configure_capture(int fd, aml_snapshot_t &snapshot)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+ int ioctlret = 0;
|
||||
+
|
||||
+ if ((ioctlret = ioctl(fd, AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH, snapshot.dst_width)) != 0)
|
||||
+ {
|
||||
+ ret = 2;
|
||||
+ fprintf(stderr, "Error setting frame width (ret: %d errno: %d)\n", ioctlret, errno);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ if ((ioctlret = ioctl(fd, AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT, snapshot.dst_height)) != 0)
|
||||
+ {
|
||||
+ ret = 3;
|
||||
+ fprintf(stderr, "Error setting frame height (ret: %d errno: %d)\n", ioctlret, errno);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void frameToboblight(void *boblight, uint8_t* outputptr, int w, int h, int stride)
|
||||
+{
|
||||
+ if (!boblight)
|
||||
+ {
|
||||
+ fprintf(stderr, "no boblight\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ if (!outputptr)
|
||||
+ {
|
||||
+ fprintf(stderr, "no outputptr\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ //read out pixels and hand them to libboblight
|
||||
+ uint8_t* buffptr;
|
||||
+ for (int y = h; y > 0; y--) {
|
||||
+ buffptr = outputptr + stride * y;
|
||||
+ for (int x = 0; x < w; x++) {
|
||||
+ int rgb[3];
|
||||
+ rgb[2] = *(buffptr++);
|
||||
+ rgb[1] = *(buffptr++);
|
||||
+ rgb[0] = *(buffptr++);
|
||||
+
|
||||
+ //fprintf(stdout, "frameToboblight: x(%d), y(%d)\n", x, y);
|
||||
+
|
||||
+ boblight_addpixelxy(boblight, x, y, rgb);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int Run(void* boblight)
|
||||
+{
|
||||
+ int snapshot_fd = -1;
|
||||
+ aml_snapshot_t aml_snapshot = {0};
|
||||
+ int lastPriority = 255;
|
||||
+
|
||||
+ aml_snapshot.dst_width = 160;
|
||||
+ aml_snapshot.dst_height = 160;
|
||||
+
|
||||
+ // calc stride, size and alloc mem
|
||||
+ aml_snapshot.dst_stride = aml_snapshot.dst_width * 3;
|
||||
+ aml_snapshot.dst_size = aml_snapshot.dst_stride * aml_snapshot.dst_height;
|
||||
+ aml_snapshot.dst_vaddr = calloc(aml_snapshot.dst_size, 1);
|
||||
+
|
||||
+ fprintf(stdout, "Connection to boblightd config: width(%d), height(%d)\n",
|
||||
+ aml_snapshot.dst_width, aml_snapshot.dst_height);
|
||||
+ //tell libboblight how big our image is
|
||||
+ boblight_setscanrange(boblight, (int)aml_snapshot.dst_width, (int)aml_snapshot.dst_height);
|
||||
+
|
||||
+ while(!g_stop)
|
||||
+ {
|
||||
+ int64_t bgn = GetTimeUs();
|
||||
+
|
||||
+ if (snapshot_fd == -1) {
|
||||
+ snapshot_fd = open(g_flagmanager.m_device.c_str(), O_RDWR, 0);
|
||||
+
|
||||
+ if (snapshot_fd == -1) {
|
||||
+ sleep(1);
|
||||
+ continue;
|
||||
+ } else {
|
||||
+ fprintf(stdout, "snapshot_fd(%d) \n", snapshot_fd);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // match source ratio if possible
|
||||
+ if (amvideo_utils_video_playing() != 0) {
|
||||
+ if ( lastPriority != 255)
|
||||
+ {
|
||||
+ boblight_setpriority(boblight, 255);
|
||||
+ lastPriority = 255;
|
||||
+ }
|
||||
+ sleep(1);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (configure_capture(snapshot_fd, aml_snapshot) == 0)
|
||||
+ {
|
||||
+ if (capture_frame(snapshot_fd, aml_snapshot) == 0)
|
||||
+ {
|
||||
+ // image to boblight convert.
|
||||
+ frameToboblight(boblight, (uint8_t*)aml_snapshot.dst_vaddr,
|
||||
+ aml_snapshot.dst_width, aml_snapshot.dst_height, aml_snapshot.dst_stride);
|
||||
+
|
||||
+ if (lastPriority != g_flagmanager.m_priority)
|
||||
+ {
|
||||
+ boblight_setpriority(boblight, g_flagmanager.m_priority);
|
||||
+ lastPriority = g_flagmanager.m_priority;
|
||||
+ }
|
||||
+ if (!boblight_sendrgb(boblight, 1, NULL))
|
||||
+ {
|
||||
+ // some error happened, probably connection broken, so bitch and try again
|
||||
+ PrintError(boblight_geterror(boblight));
|
||||
+ boblight_destroy(boblight);
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ fprintf(stdout, "nap time\n");
|
||||
+ sleep(1);
|
||||
+ }
|
||||
+ }
|
||||
+ int64_t end = GetTimeUs();
|
||||
+ float calc_time_ms = (float)(end - bgn) / 1000.0;
|
||||
+ // throttle to 100ms max cycle rate
|
||||
+ calc_time_ms -= 100.0;
|
||||
+ if ((int)calc_time_ms < 0)
|
||||
+ usleep((int)(-calc_time_ms * 1000));
|
||||
+ }
|
||||
+
|
||||
+ // last image is black
|
||||
+ boblight_setpriority(boblight, 255);
|
||||
+ boblight_destroy(boblight);
|
||||
+ close(snapshot_fd);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*********************************************************
|
||||
+ *********************************************************/
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ //load the boblight lib, if it fails we get a char* from dlerror()
|
||||
+ const char* boblight_error = boblight_loadlibrary(NULL);
|
||||
+ if (boblight_error)
|
||||
+ {
|
||||
+ PrintError(boblight_error);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ //try to parse the flags and bitch to stderr if there's an error
|
||||
+ try {
|
||||
+ g_flagmanager.ParseFlags(argc, argv);
|
||||
+ }
|
||||
+ catch (string error) {
|
||||
+ PrintError(error);
|
||||
+ g_flagmanager.PrintHelpMessage();
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (g_flagmanager.m_printhelp) {
|
||||
+ g_flagmanager.PrintHelpMessage();
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (g_flagmanager.m_printboblightoptions) {
|
||||
+ g_flagmanager.PrintBoblightOptions();
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ // check if we only should generate a cmdline based
|
||||
+ // on settings from possible found boblight addon
|
||||
+ if (g_flagmanager.generateCmdLine)
|
||||
+ {
|
||||
+ CBoblightAddonSettings settings;
|
||||
+ string cmdLine = "-p 100"; //default cmdline just contains priority 100
|
||||
+
|
||||
+ if (settings.m_settingsLoaded)
|
||||
+ cmdLine += " " + settings.getBoblightClientCmdLine();
|
||||
+ fprintf(stdout, "%s", cmdLine.c_str());
|
||||
+ return 0;//exit
|
||||
+ }
|
||||
+
|
||||
+ fprintf(stderr, "Using device: %s \n", g_flagmanager.m_device.c_str());
|
||||
+
|
||||
+ //set up signal handlers
|
||||
+ signal(SIGINT, SignalHandler);
|
||||
+ signal(SIGTERM, SignalHandler);
|
||||
+
|
||||
+ //keep running until we want to quit
|
||||
+ while(!g_stop) {
|
||||
+ //init boblight
|
||||
+ void* boblight = boblight_init();
|
||||
+
|
||||
+ fprintf(stdout, "Connecting to boblightd(%p)\n", boblight);
|
||||
+
|
||||
+ //try to connect, if we can't then bitch to stderr and destroy boblight
|
||||
+ if (!boblight_connect(boblight, g_flagmanager.m_address, g_flagmanager.m_port, 5000000) ||
|
||||
+ !boblight_setpriority(boblight, 255)) {
|
||||
+ PrintError(boblight_geterror(boblight));
|
||||
+ fprintf(stdout, "Waiting 10 seconds before trying again\n");
|
||||
+ boblight_destroy(boblight);
|
||||
+ sleep(2);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ fprintf(stdout, "Connection to boblightd opened\n");
|
||||
+
|
||||
+ //try to parse the boblight flags and bitch to stderr if we can't
|
||||
+ try {
|
||||
+ g_flagmanager.ParseBoblightOptions(boblight);
|
||||
+ }
|
||||
+ catch (string error) {
|
||||
+ PrintError(error);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ Run(boblight);
|
||||
+ }
|
||||
+ catch (string error) {
|
||||
+ PrintError(error);
|
||||
+ boblight_destroy(boblight);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+ fprintf(stdout, "Exiting\n");
|
||||
+}
|
||||
diff -urPp src/clients/flagmanager-aml.cpp src/clients/boblight-aml/flagmanager-aml.cpp
|
||||
--- /dev/null Thu Jan 1 00:00:00 1970
|
||||
+++ b/src/clients/boblight-aml/flagmanager-aml.cpp Thu Jan 15 10:21:40 2015
|
||||
@@ -0,0 +1,68 @@
|
||||
+/*
|
||||
+ * boblight
|
||||
+ * Copyright (C) Bob 2009
|
||||
+ *
|
||||
+ * boblight is free software: you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License as published by the
|
||||
+ * Free Software Foundation, either version 3 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * boblight is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
+ * See the GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#include <iostream>
|
||||
+
|
||||
+#include "flagmanager-aml.h"
|
||||
+#include "util/misc.h"
|
||||
+#include "config.h"
|
||||
+
|
||||
+#define DEFAULT_CAPTURE_DEVICE "/dev/amvideocap0"
|
||||
+
|
||||
+using namespace std;
|
||||
+
|
||||
+CFlagManagerAML::CFlagManagerAML()
|
||||
+{
|
||||
+ // extend the flags -d -> device
|
||||
+ // -g -> only generate cmdline from possible found boblight addon settings.xml
|
||||
+ m_flags += "d:g";
|
||||
+ m_device = DEFAULT_CAPTURE_DEVICE;
|
||||
+ generateCmdLine = false;
|
||||
+}
|
||||
+
|
||||
+void CFlagManagerAML::ParseFlagsExtended(int& argc, char**& argv, int& c, char*& optarg)
|
||||
+{
|
||||
+ if (c == 'd') //devicename
|
||||
+ {
|
||||
+ if (optarg) //optional device
|
||||
+ {
|
||||
+ m_device = optarg;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (c == 'g') //generate cmdline
|
||||
+ {
|
||||
+ generateCmdLine = true;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void CFlagManagerAML::PrintHelpMessage()
|
||||
+{
|
||||
+ cout << "Usage: boblight-aml\n";
|
||||
+ cout << "\n";
|
||||
+ cout << " options:\n";
|
||||
+ cout << "\n";
|
||||
+ cout << " -p priority, from 0 to 255, default is 128\n";
|
||||
+ cout << " -s address[:port], set the address and optional port to connect to\n";
|
||||
+ cout << " -o add libboblight option, syntax: [light:]option=value\n";
|
||||
+ cout << " -l list libboblight options\n";
|
||||
+ cout << " -f fork\n";
|
||||
+ cout << " -d <device> (defaults to " << m_device << ")\n";
|
||||
+ cout << " -g try to find the settings.xml file from boblight addon and return the cmdline to use its options\n";
|
||||
+ cout << "\n";
|
||||
+}
|
||||
diff -urPp src/clients/flagmanager-aml.h src/clients/boblight-aml/flagmanager-aml.h
|
||||
--- /dev/null Thu Jan 1 00:00:00 1970
|
||||
+++ b/src/clients/boblight-aml/flagmanager-aml.h Thu Jan 15 10:20:15 2015
|
||||
@@ -0,0 +1,36 @@
|
||||
+/*
|
||||
+ * boblight
|
||||
+ * Copyright (C) Bob 2009
|
||||
+ *
|
||||
+ * boblight is free software: you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License as published by the
|
||||
+ * Free Software Foundation, either version 3 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * boblight is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
+ * See the GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#ifndef FLAGMANAGERAML
|
||||
+#define FLAGMANAGERAML
|
||||
+
|
||||
+#include "clients/flagmanager.h"
|
||||
+
|
||||
+class CFlagManagerAML : public CFlagManager
|
||||
+{
|
||||
+ public:
|
||||
+ CFlagManagerAML();
|
||||
+ void ParseFlagsExtended(int& argc, char**& argv, int& c, char*& optarg);
|
||||
+
|
||||
+ void PrintHelpMessage();
|
||||
+ std::string m_device; //device to open for amvideocap
|
||||
+ bool generateCmdLine;
|
||||
+
|
||||
+};
|
||||
+
|
||||
+#endif //FLAGMANAGERAML
|
||||
\ No newline at end of file
|
||||
@@ -18,10 +18,4 @@ if [ -x $ADDON_DIR/bin/boblight-X11 -a -e $ADDON_HOME/boblight.X11 ] ; then
|
||||
boblight-X11 -f >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ -x $ADDON_DIR/bin/boblight-aml -a -e /dev/amvideocap0 ] ; then
|
||||
#generates cmdline from boblight addon settings
|
||||
CMDLINE=`boblight-aml -g`
|
||||
boblight-aml $CMDLINE >/dev/null 2>&1 &
|
||||
fi
|
||||
|
||||
exec boblightd -c $ADDON_HOME/boblight.conf > $ADDON_LOG_FILE 2>&1
|
||||
|
||||
@@ -7,7 +7,6 @@ PKG_VERSION="18.09.5"
|
||||
PKG_SHA256="57f2a5d3374d86a8eb680c91df4351f5cb648351b9b32520c6fd2d66e7e97fd5"
|
||||
PKG_REV="125"
|
||||
PKG_ARCH="any"
|
||||
PKG_ADDON_PROJECTS="any !WeTek_Core !WeTek_Play"
|
||||
PKG_LICENSE="ASL"
|
||||
PKG_SITE="http://www.docker.com/"
|
||||
PKG_URL="https://github.com/docker/docker-ce/archive/v${PKG_VERSION}.tar.gz"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
110
|
||||
- Rewrite add-on from scratch
|
||||
- Add support for APPS, SETUP, CVBS (X92) and POWER (A1 Max) indicators.
|
||||
- Add a configuration dialog:
|
||||
* Adjust display brightness.
|
||||
* Storage access indication.
|
||||
* Advanced hardware configuration of the display.
|
||||
- Fix crash if aml_fd628 module is not loaded (led_on, led_off files don't exist)
|
||||
- Fix disable add-on from Kodi UI.
|
||||
- Turn off indicators when add-on is disabled.
|
||||
|
||||
100
|
||||
- Initial add-on
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,30 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="fd628"
|
||||
PKG_VERSION="1.1"
|
||||
PKG_REV="100"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://libreelec.tv"
|
||||
PKG_URL=""
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_SECTION="service"
|
||||
PKG_SHORTDESC="fd628: Kodi service to light up additional icons on devices with FD628 display"
|
||||
PKG_LONGDESC="fd628: Kodi service to light up additional icons on devices with FD628 display"
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="service.fd628"
|
||||
PKG_ADDON_PROJECTS="S905 S912"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
|
||||
make_target() {
|
||||
sed -e "s|@PKG_VERSION@|$PKG_VERSION|g" \
|
||||
-i addon.xml
|
||||
}
|
||||
|
||||
addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
|
||||
cp -R $PKG_BUILD/* $ADDON_BUILD/$PKG_ADDON_ID
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="service.fd628"
|
||||
name="FD628 Display"
|
||||
version="@PKG_VERSION@"
|
||||
provider-name="Team LibreELEC">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
</requires>
|
||||
<extension point="xbmc.service"
|
||||
library="resources/lib/service.py"
|
||||
start="startup">
|
||||
</extension>
|
||||
<extension point="xbmc.addon.metadata">
|
||||
<summary>Service for controlling FD628 VFD display icons</summary>
|
||||
<description>Service for controlling FD628 VFD display icons, e.g. Ethernet/WiFi connection status and Time</description>
|
||||
<platform>all</platform>
|
||||
<assets>
|
||||
<icon>resources/icon.png</icon>
|
||||
</assets>
|
||||
</extension>
|
||||
</addon>
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
# Kodi Media Center language file
|
||||
# Addon Name: FD628 Display
|
||||
# Addon id: service.fd628
|
||||
# Addon Provider: Team LibreELEC
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: XBMC-Addons\n"
|
||||
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
|
||||
"POT-Creation-Date: 2018-02-12 17:48+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
# Kodi Settings
|
||||
msgctxt "#30000"
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30001"
|
||||
msgid "Turn on display"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30002"
|
||||
msgid "Display brightness"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30003"
|
||||
msgid "Advanced settings"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30004"
|
||||
msgid "Display type"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30026"
|
||||
msgid "Common anode display (transposed ram)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30013"
|
||||
msgid "Enable storage access (RW) indicator"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30014"
|
||||
msgid "Select which icon is to be used as the access indicator"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30028"
|
||||
msgid "Clock colon (:) always on"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30015"
|
||||
msgid "play"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "pause"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30017"
|
||||
msgid "hdmi"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30018"
|
||||
msgid "cvbs"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30019"
|
||||
msgid "eth"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30020"
|
||||
msgid "wifi"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30021"
|
||||
msgid "setup"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30022"
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30023"
|
||||
msgid "usb"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30024"
|
||||
msgid "sd"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30025"
|
||||
msgid "alarm"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30027"
|
||||
msgid "power"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30012"
|
||||
msgid "Reorder character indexes"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30005"
|
||||
msgid "Index 0"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30006"
|
||||
msgid "Index 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30007"
|
||||
msgid "Index 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30008"
|
||||
msgid "Index 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30009"
|
||||
msgid "Index 4"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30010"
|
||||
msgid "Index 5"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30011"
|
||||
msgid "Index 6"
|
||||
msgstr ""
|
||||
|
||||
# Max index 30028
|
||||
@@ -1,78 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import os
|
||||
import struct
|
||||
from fd628utils import *
|
||||
|
||||
_led_cmd = '/sys/class/leds/le-vfd/led_cmd'
|
||||
|
||||
class fd628Dev:
|
||||
def __init__(self):
|
||||
import ioctl
|
||||
import ctypes
|
||||
size = ctypes.sizeof(ctypes.c_int(0))
|
||||
self._FD628_IOC_MAGIC = ord('M')
|
||||
self._FD628_IOC_SMODE = ioctl.IOW(self._FD628_IOC_MAGIC, 1, size)
|
||||
self._FD628_IOC_GMODE = ioctl.IOR(self._FD628_IOC_MAGIC, 2, size)
|
||||
self._FD628_IOC_SBRIGHT = ioctl.IOW(self._FD628_IOC_MAGIC, 3, size)
|
||||
self._FD628_IOC_GBRIGHT = ioctl.IOR(self._FD628_IOC_MAGIC, 4, size)
|
||||
self._FD628_IOC_POWER = ioctl.IOW(self._FD628_IOC_MAGIC, 5, size)
|
||||
self._FD628_IOC_GVER = ioctl.IOR(self._FD628_IOC_MAGIC, 6, size)
|
||||
self._FD628_IOC_STATUS_LED = ioctl.IOW(self._FD628_IOC_MAGIC, 7, size)
|
||||
self._FD628_IOC_GDISPLAY_TYPE = ioctl.IOR(self._FD628_IOC_MAGIC, 8, size)
|
||||
self._FD628_IOC_SDISPLAY_TYPE = ioctl.IOW(self._FD628_IOC_MAGIC, 9, size)
|
||||
self._FD628_IOC_SCHARS_ORDER = ioctl.IOW(self._FD628_IOC_MAGIC, 10, 7)
|
||||
self._FD628_IOC_USE_DTB_CONFIG = ioctl.IOW(self._FD628_IOC_MAGIC, 11, size)
|
||||
self._FD628_IOC_MAXNR = 12
|
||||
|
||||
def enableDisplay(self, value):
|
||||
self.__writeFD628(self._FD628_IOC_POWER, int(value))
|
||||
|
||||
def getBrightness(self):
|
||||
return self.__readFD628(self._FD628_IOC_GBRIGHT)
|
||||
|
||||
def setBrightness(self, value):
|
||||
self.__writeFD628(self._FD628_IOC_SBRIGHT, value)
|
||||
|
||||
def getDisplayType(self):
|
||||
return self.__readFD628(self._FD628_IOC_GDISPLAY_TYPE)
|
||||
|
||||
def setDisplayType(self, value):
|
||||
self.__writeFD628(self._FD628_IOC_SDISPLAY_TYPE, value)
|
||||
|
||||
def setCharacterOrder(self, value):
|
||||
pack = struct.pack('BBBBBBB', value[0], value[1], value[2], value[3], value[4], value[5], value[6])
|
||||
self.__writeFD628(self._FD628_IOC_SCHARS_ORDER, pack, True)
|
||||
|
||||
def useDtbConfig(self):
|
||||
self.__writeFD628(self._FD628_IOC_USE_DTB_CONFIG, 0)
|
||||
|
||||
def __readFD628(self, cmd, isBuf = False):
|
||||
import ioctl
|
||||
ret = None
|
||||
if (ioctl.DIR(cmd) == ioctl.READ and self.__writeFD628(cmd, 0)):
|
||||
with open(_led_cmd, "rb") as vfd:
|
||||
ret = vfd.read()
|
||||
if (ret == ''):
|
||||
ret = None
|
||||
if (not isBuf and ret != None):
|
||||
ret = int(ret, 0)
|
||||
kodiLog('fd628Dev.__readFD628: value = {0}'.format(str(ret)))
|
||||
return ret
|
||||
|
||||
def __writeFD628(self, cmd, value, isBuf = False):
|
||||
ret = False
|
||||
if (os.path.isfile(_led_cmd)):
|
||||
if isBuf:
|
||||
value = ''.join([struct.pack('I', cmd), value])
|
||||
else:
|
||||
value = struct.pack('Ii', cmd, value)
|
||||
kodiLog('fd628Dev.__writeFD628: value = {0}'.format(repr(value)))
|
||||
try:
|
||||
with open(_led_cmd, "wb") as vfd:
|
||||
vfd.write(value)
|
||||
ret = True
|
||||
except Exception as inst:
|
||||
kodiLogError(inst)
|
||||
return ret
|
||||
@@ -1,95 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import xbmcaddon
|
||||
|
||||
addon = xbmcaddon.Addon(id='service.fd628')
|
||||
|
||||
def getSetting(id):
|
||||
return addon.getSetting(id)
|
||||
|
||||
def getSettingBool(id):
|
||||
value = getSetting(id).lower()
|
||||
if (value == 'true'):
|
||||
value = True
|
||||
else:
|
||||
value = False
|
||||
return value
|
||||
|
||||
def getSettingInt(id):
|
||||
return int(getSetting(id))
|
||||
|
||||
def getSettingNumber(id):
|
||||
return float(getSetting(id))
|
||||
|
||||
class fd628Settings:
|
||||
def __init__(self):
|
||||
self.readValues()
|
||||
|
||||
def isDisplayOn(self):
|
||||
return self._displayOn
|
||||
|
||||
def isAdvancedSettings(self):
|
||||
return self._displayAdvanced
|
||||
|
||||
def getBrightness(self):
|
||||
return self._displayBrightness
|
||||
|
||||
def getDisplayType(self):
|
||||
return self._displayType
|
||||
|
||||
def isCommonAnode(self):
|
||||
return self._commonAnode
|
||||
|
||||
def getDisplay(self):
|
||||
value = self.getDisplayType()
|
||||
if (self.isCommonAnode()):
|
||||
value = value + (1 << 16)
|
||||
return value
|
||||
|
||||
def getCharacterIndex(self, i):
|
||||
return self._characterIndexes[i]
|
||||
|
||||
def getCharacterIndexes(self):
|
||||
return self._characterIndexes
|
||||
|
||||
def isStorageIndicator(self):
|
||||
return self._storageIndicator
|
||||
|
||||
def getStorageIndicatorIcon(self):
|
||||
return self._storageIndicatorIcon
|
||||
|
||||
def isColonOn(self):
|
||||
return self._colonOn
|
||||
|
||||
def readValues(self):
|
||||
self._displayAdvanced = False
|
||||
self._displayOn = getSettingBool('display.on')
|
||||
if (self._displayOn):
|
||||
self._displayBrightness = getSettingInt('display.brightness')
|
||||
self._storageIndicator = getSettingBool('display.storage.indicator')
|
||||
self._storageIndicatorIcon = getSetting('display.storage.indicator.icon')
|
||||
self._colonOn = getSettingBool('display.colon.on')
|
||||
self._displayAdvanced = getSettingBool('display.advanced')
|
||||
if (self._displayAdvanced):
|
||||
self._displayType = getSettingInt('display.type')
|
||||
self._commonAnode = getSettingBool('display.common.anode')
|
||||
self._characterIndexes = []
|
||||
for i in range(7):
|
||||
self._characterIndexes.append(getSettingInt('display.char.index{0}'.format(i)))
|
||||
else:
|
||||
self.__initDefaultValues()
|
||||
else:
|
||||
self.__initDefaultValues()
|
||||
|
||||
def __initDefaultValues(self):
|
||||
if not (self._displayOn):
|
||||
self._displayBrightness = 7
|
||||
self._storageIndicator = False
|
||||
self._storageIndicatorIcon = ''
|
||||
self._colonOn = False
|
||||
self._displayAdvanced = False
|
||||
if not (self._displayAdvanced):
|
||||
self._displayType = 0
|
||||
self._commonAnode = False
|
||||
self._characterIndexes = range(0, 7)
|
||||
@@ -1,187 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import xbmc
|
||||
import os
|
||||
from fd628utils import *
|
||||
|
||||
class fd628State(object):
|
||||
def __init__(self, ledName):
|
||||
self._value = False
|
||||
self._hasChanged = False
|
||||
self._ledName = ledName
|
||||
|
||||
def _getStr(self, className):
|
||||
return '{0} ({1})'.format(className, self._ledName)
|
||||
|
||||
def update(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def getValue(self):
|
||||
return self._value
|
||||
|
||||
def hasChanged(self):
|
||||
return self._hasChanged
|
||||
|
||||
def getLedName(self):
|
||||
return self._ledName
|
||||
|
||||
def _update(self, value):
|
||||
if (value != self._value):
|
||||
self._hasChanged = True
|
||||
self._value = value
|
||||
else:
|
||||
self._hasChanged = False
|
||||
|
||||
class fd628IconIndicator(fd628State):
|
||||
def __init__(self, on, ledName):
|
||||
super(fd628IconIndicator, self).__init__(ledName)
|
||||
self._on = on
|
||||
|
||||
def __str__(self):
|
||||
return self._getStr('fd628IconIndicator')
|
||||
|
||||
def turnOn(self):
|
||||
self._on = True
|
||||
|
||||
def turnOff(self):
|
||||
self._on = False
|
||||
|
||||
def toggle(self):
|
||||
self._on = not self._on
|
||||
|
||||
def update(self):
|
||||
self._update(self._on)
|
||||
|
||||
class fd628CondVisibility(fd628State):
|
||||
def __init__(self, ledName, cmd):
|
||||
super(fd628CondVisibility, self).__init__(ledName)
|
||||
self._cmd = cmd
|
||||
|
||||
def __str__(self):
|
||||
return self._getStr('fd628CondVisibility')
|
||||
|
||||
def update(self):
|
||||
value = xbmc.getCondVisibility(self._cmd)
|
||||
self._update(value)
|
||||
|
||||
class fd628FileContains(fd628State):
|
||||
def __init__(self, ledName, path, strings):
|
||||
super(fd628FileContains, self).__init__(ledName)
|
||||
self._path = path
|
||||
self._strings = strings
|
||||
|
||||
def __str__(self):
|
||||
return self._getStr('fd628FileContains')
|
||||
|
||||
def update(self):
|
||||
if (os.path.isfile(self._path)):
|
||||
with open(self._path, 'rb') as state:
|
||||
content = state.read()
|
||||
value = self.__checkContent(content)
|
||||
self._update(value)
|
||||
else:
|
||||
self._update(False)
|
||||
|
||||
def __checkContent(self, content):
|
||||
ret = False
|
||||
for s in self._strings:
|
||||
if (s in content):
|
||||
ret = True
|
||||
break
|
||||
return ret
|
||||
|
||||
class fd628WindowChecker(fd628State):
|
||||
def __init__(self, ledName, windows):
|
||||
super(fd628WindowChecker, self).__init__(ledName)
|
||||
self._windows = windows
|
||||
|
||||
def __str__(self):
|
||||
return self._getStr('fd628WindowChecker')
|
||||
|
||||
def update(self):
|
||||
value = False
|
||||
for id in self._windows:
|
||||
if (xbmc.getCondVisibility('Window.IsVisible({0})'.format(id))):
|
||||
value = True
|
||||
break
|
||||
self._update(value)
|
||||
|
||||
class fd628ExtStorageChecker(fd628State):
|
||||
def __init__(self, ledName, path):
|
||||
super(fd628ExtStorageChecker, self).__init__(ledName)
|
||||
self._path = path
|
||||
|
||||
def __str__(self):
|
||||
return self._getStr('fd628ExtStorageChecker')
|
||||
|
||||
def update(self):
|
||||
value = False
|
||||
for folder, subs, files in os.walk('/dev/disk/by-uuid'):
|
||||
for filename in files:
|
||||
path = os.path.realpath(os.path.join(folder, filename))
|
||||
if (path.startswith(self._path)):
|
||||
value = True
|
||||
break
|
||||
self._update(value)
|
||||
|
||||
class fd628ExtStorageCount(fd628State):
|
||||
def __init__(self, ledName, drives, type):
|
||||
super(fd628ExtStorageCount, self).__init__(ledName)
|
||||
if (drives == None): # Monitor all drives
|
||||
self._drives = None
|
||||
drives = self.__getAllDrives()
|
||||
else: # Monitor listed drives
|
||||
self._drives = drives
|
||||
drives = self.__getSelectedDrives()
|
||||
self._driveStats = {key: self.__readStatus(key) for key in drives}
|
||||
kodiLogNotice('fd628ExtStorageCount.__init__: Drive stats ' + str(self._driveStats))
|
||||
self._read = False
|
||||
self._write = False
|
||||
if (type == 'r'):
|
||||
self._read = True
|
||||
elif (type == 'w'):
|
||||
self._write = True
|
||||
elif (type == 'rw'):
|
||||
self._read = True
|
||||
self._write = True
|
||||
else:
|
||||
raise Exception('\'type\' must be \'r\', \'w\' or \'rw\'.')
|
||||
|
||||
def update(self):
|
||||
value = False
|
||||
if (self._drives == None):
|
||||
drives = self.__getAllDrives()
|
||||
else:
|
||||
drives = self.__getSelectedDrives()
|
||||
for drive in drives:
|
||||
if (not drive in self._driveStats):
|
||||
self._driveStats[drive] = None
|
||||
kodiLogNotice('fd628ExtStorageCount.update: New drive found \'{0}\''.format(drive))
|
||||
for path, stats in self._driveStats.iteritems():
|
||||
newStats = self.__readStatus(path)
|
||||
if (stats != None and newStats != None):
|
||||
if (self._read):
|
||||
value = value or stats[0] != newStats[0]
|
||||
if (self._write):
|
||||
value = value or stats[1] != newStats[1]
|
||||
self._driveStats[path] = newStats
|
||||
self._update(value)
|
||||
|
||||
def __readStatus(self, path):
|
||||
path = os.path.join('/sys/block', path, 'stat')
|
||||
if (os.path.isfile(path)):
|
||||
with open(path, 'rb') as status:
|
||||
values = status.read().split()
|
||||
return (values[2], values[6])
|
||||
else:
|
||||
return None
|
||||
|
||||
def __getAllDrives(self):
|
||||
drives = []
|
||||
for folder, subs, files in os.walk('/sys/block'):
|
||||
drives = [sub for sub in subs if (not sub.startswith('loop'))]
|
||||
return drives
|
||||
|
||||
def __getSelectedDrives(self):
|
||||
return [drive for drive in self.__getAllDrives() if ([d for d in self._drives if drive.startswith(d)])]
|
||||
@@ -1,19 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
|
||||
addonName = xbmcaddon.Addon(id='service.fd628').getAddonInfo('name')
|
||||
|
||||
def kodiLog(message, level = xbmc.LOGDEBUG):
|
||||
xbmc.log('{0} -> {1}'.format(addonName, str(message)), level)
|
||||
|
||||
def kodiLogError(message):
|
||||
kodiLog(message, xbmc.LOGERROR)
|
||||
|
||||
def kodiLogWarning(message):
|
||||
kodiLog(message, xbmc.LOGWARNING)
|
||||
|
||||
def kodiLogNotice(message):
|
||||
kodiLog(message, xbmc.LOGNOTICE)
|
||||
@@ -1,89 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
"""
|
||||
Author: SpliFF
|
||||
License: Public Domain
|
||||
|
||||
Python ioctl constants and functions module
|
||||
|
||||
Mostly follows specifications in asm-generic/ioctl.h from linux 2.5.36
|
||||
|
||||
Notable differences:
|
||||
* no architecture dependant stuff
|
||||
* size parameters are all passed as bytes, not types (ie pass 4, not int)
|
||||
|
||||
!! WARNING EXPERIMENTAL SOFTWARE !!
|
||||
Make sure the values returned by these functions are properly tested before using fcntl on anything remotely valuable!
|
||||
"""
|
||||
|
||||
NRBITS = 8
|
||||
TYPEBITS = 8
|
||||
|
||||
# may be arch dependent
|
||||
|
||||
SIZEBITS = 14
|
||||
DIRBITS = 2
|
||||
|
||||
NRMASK = (1 << NRBITS) - 1
|
||||
TYPEMASK = (1 << TYPEBITS) - 1
|
||||
SIZEMASK = (1 << SIZEBITS) - 1
|
||||
DIRMASK = (1 << DIRBITS) - 1
|
||||
|
||||
NRSHIFT = 0
|
||||
TYPESHIFT = NRSHIFT + NRBITS
|
||||
SIZESHIFT = TYPESHIFT + TYPEBITS
|
||||
DIRSHIFT = SIZESHIFT + SIZEBITS
|
||||
|
||||
# may be arch dependent
|
||||
|
||||
NONE = 0x0
|
||||
WRITE = 0x1
|
||||
READ = 0x2
|
||||
|
||||
# for the drivers/sound files...
|
||||
|
||||
IN = WRITE << DIRSHIFT
|
||||
OUT = READ << DIRSHIFT
|
||||
INOUT = (WRITE | READ) << DIRSHIFT
|
||||
IOCSIZE_MASK = SIZEMASK << SIZESHIFT
|
||||
IOCSIZE_SHIFT = SIZESHIFT
|
||||
|
||||
# used to create numbers ...
|
||||
|
||||
def IO( _type, nr):
|
||||
return IOC(NONE, _type, nr, 0)
|
||||
|
||||
def IOC(direction, _type, nr, size):
|
||||
return (direction << DIRSHIFT) | (_type << TYPESHIFT) | (nr << NRSHIFT) | (size << SIZESHIFT)
|
||||
|
||||
def IOR( _type, nr, size):
|
||||
return IOC(READ, _type, nr, size)
|
||||
|
||||
def IOW(_type, nr, size):
|
||||
return IOC(WRITE, _type, nr, size)
|
||||
|
||||
def IOWR(_type, nr, size):
|
||||
return IOC(READ|WRITE, _type, nr, size)
|
||||
|
||||
def IOR_BAD(_type, nr, size):
|
||||
return IOC(READ, _type, nr, size)
|
||||
|
||||
def IOW_BAD(_type, nr, size):
|
||||
return IOC(WRITE, _type, nr, size)
|
||||
|
||||
def IOWR_BAD(_type, nr, size):
|
||||
return IOC(READ|WRITE, _type, nr, size)
|
||||
|
||||
# used to decode ioctl numbers..
|
||||
|
||||
def DIR(nr):
|
||||
return (nr >> DIRSHIFT) & DIRMASK
|
||||
|
||||
def TYPE(nr):
|
||||
return (nr >> TYPESHIFT) & TYPEMASK
|
||||
|
||||
def NR(nr):
|
||||
return (nr >> NRSHIFT) & NRMASK
|
||||
|
||||
def SIZE(nr):
|
||||
return (nr >> SIZESHIFT) & SIZEMASK
|
||||
@@ -1,143 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import xbmcaddon
|
||||
import threading
|
||||
import os
|
||||
import fd628states
|
||||
import fd628dev
|
||||
import fd628settings
|
||||
from fd628utils import *
|
||||
|
||||
addon = xbmcaddon.Addon(id='service.fd628')
|
||||
|
||||
class fd628Monitor(xbmc.Monitor):
|
||||
def __init__(self):
|
||||
super(fd628Monitor, self).__init__()
|
||||
self._settingsChangedCallback = None
|
||||
|
||||
def setSettingsChangedCallback(self, callbackObject):
|
||||
self._settingsChangedCallback = callbackObject
|
||||
|
||||
def onSettingsChanged(self):
|
||||
kodiLog('Enter fd628Monitor.onSettingsChanged')
|
||||
if (self._settingsChangedCallback != None):
|
||||
self._settingsChangedCallback.onSettingsChanged()
|
||||
|
||||
class fd628Addon():
|
||||
def __init__(self, monitor):
|
||||
self._fd628 = fd628dev.fd628Dev()
|
||||
self._states = []
|
||||
self._monitor = monitor
|
||||
self._monitor.setSettingsChangedCallback(self)
|
||||
self._settings = fd628settings.fd628Settings()
|
||||
self._vfdon = '/sys/class/leds/le-vfd/led_on'
|
||||
self._vfdoff = '/sys/class/leds/le-vfd/led_off'
|
||||
self._rlock = threading.RLock()
|
||||
|
||||
def run(self):
|
||||
firstLoop = True
|
||||
while not self._monitor.abortRequested():
|
||||
if self._monitor.waitForAbort(0.5):
|
||||
break
|
||||
if (not os.path.isfile(self._vfdon) or not os.path.isfile(self._vfdoff)):
|
||||
firstLoop = True
|
||||
continue
|
||||
if (firstLoop):
|
||||
self.onSettingsChanged()
|
||||
firstLoop = False
|
||||
self.__updateIndicators()
|
||||
self.__cleanUp()
|
||||
|
||||
def __updateIndicators(self):
|
||||
ledon = []
|
||||
ledoff = []
|
||||
if (self._rlock.acquire()):
|
||||
for state in self._states:
|
||||
state.update()
|
||||
if (state.hasChanged()):
|
||||
if (state.getValue()):
|
||||
ledon.append(state.getLedName())
|
||||
else:
|
||||
ledoff.append(state.getLedName())
|
||||
self.__writeFile(self._vfdon, ledon)
|
||||
self.__writeFile(self._vfdoff, ledoff)
|
||||
self._rlock.release()
|
||||
|
||||
def __cleanUp(self):
|
||||
self.__turnOffIndicators()
|
||||
self._monitor = None
|
||||
|
||||
def __turnOffIndicators(self):
|
||||
if (self._rlock.acquire()):
|
||||
ledoff = [state.getLedName() for state in self._states]
|
||||
self.__writeFile(self._vfdoff, ledoff)
|
||||
self._rlock.release()
|
||||
|
||||
def __writeFile(self, path, values):
|
||||
if (os.path.isfile(path)):
|
||||
with open(path, "wb") as vfd:
|
||||
for j in values:
|
||||
vfd.write(j)
|
||||
vfd.flush()
|
||||
|
||||
def onSettingsChanged(self):
|
||||
kodiLog('Enter fd628Addon.onSettingsChanged')
|
||||
self._settings.readValues()
|
||||
if (self._rlock.acquire()):
|
||||
self.__createStates()
|
||||
self._fd628.enableDisplay(self._settings.isDisplayOn())
|
||||
if (self._settings.isDisplayOn()):
|
||||
self._fd628.setBrightness(self._settings.getBrightness())
|
||||
if (self._settings.isAdvancedSettings()):
|
||||
self._fd628.setDisplayType(self._settings.getDisplay())
|
||||
self._fd628.setCharacterOrder(self._settings.getCharacterIndexes())
|
||||
else:
|
||||
self._fd628.useDtbConfig()
|
||||
if (self._colonIcon != None and self._settings.isColonOn()):
|
||||
self._colonIcon.turnOn()
|
||||
self.__updateIndicators()
|
||||
self._rlock.release()
|
||||
kodiLog('isDisplayOn = {0}'.format(self._settings.isDisplayOn()))
|
||||
kodiLog('getBrightness = {0}'.format(self._settings.getBrightness()))
|
||||
kodiLog('isAdvancedSettings = {0}'.format(self._settings.isAdvancedSettings()))
|
||||
kodiLog('getDisplayType = {0}'.format(self._settings.getDisplayType()))
|
||||
kodiLog('isCommonAnode = {0}'.format(self._settings.isCommonAnode()))
|
||||
kodiLog('getCharacterIndexex = {0}'.format(self._settings.getCharacterIndexes()))
|
||||
|
||||
def __createStates(self):
|
||||
settingsWindows = ['settings', 'systeminfo', 'systemsettings', 'servicesettings', 'pvrsettings', \
|
||||
'playersettings', 'mediasettings', 'interfacesettings', 'profiles', 'skinsettings', 'videossettings', \
|
||||
'musicsettings', 'appearancesettings', 'picturessettings', 'weathersettings', 'gamesettings', \
|
||||
'service-LibreELEC-Settings-mainWindow.xml', 'service-LibreELEC-Settings-wizard.xml', \
|
||||
'service-LibreELEC-Settings-getPasskey.xml']
|
||||
appsWindows = ['addonbrowser', 'addonsettings', 'addoninformation', 'addon', 'programs']
|
||||
states = []
|
||||
states.append(fd628states.fd628IconIndicator(True, 'power'))
|
||||
states.append(fd628states.fd628CondVisibility('play', 'Player.Playing'))
|
||||
states.append(fd628states.fd628CondVisibility('pause', 'Player.Paused'))
|
||||
states.append(fd628states.fd628FileContains('hdmi', '/sys/class/amhdmitx/amhdmitx0/hpd_state', ['1']))
|
||||
states.append(fd628states.fd628FileContains('cvbs', '/sys/class/display/mode', ['cvbs']))
|
||||
states.append(fd628states.fd628FileContains('eth', '/sys/class/net/eth0/operstate', ['up', 'unknown']))
|
||||
states.append(fd628states.fd628FileContains('wifi', '/sys/class/net/wlan0/operstate', ['up']))
|
||||
states.append(fd628states.fd628WindowChecker('setup', settingsWindows))
|
||||
states.append(fd628states.fd628WindowChecker('apps', appsWindows))
|
||||
states.append(fd628states.fd628ExtStorageChecker('usb', '/dev/sd'))
|
||||
states.append(fd628states.fd628ExtStorageChecker('sd', '/dev/mmcblk'))
|
||||
self._colonIcon = fd628states.fd628IconIndicator(False, 'colon')
|
||||
states.append(self._colonIcon)
|
||||
if (self._settings.isStorageIndicator()):
|
||||
for state in states:
|
||||
if (state.getLedName() == self._settings.getStorageIndicatorIcon()):
|
||||
states.remove(state)
|
||||
break
|
||||
states.append(fd628states.fd628ExtStorageCount(self._settings.getStorageIndicatorIcon(), None, 'rw'))
|
||||
kodiLog('Active states: ' + str([str(state) for state in states]))
|
||||
self.__turnOffIndicators()
|
||||
self._states = states
|
||||
|
||||
monitor = fd628Monitor()
|
||||
fd628 = fd628Addon(monitor)
|
||||
kodiLog('Service start.')
|
||||
fd628.run()
|
||||
kodiLog('Service stop.')
|
||||
@@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings>
|
||||
<category label="30000">
|
||||
<setting label="30001" type="bool" id="display.on" default="true" />
|
||||
<setting label="30002" type="slider" id="display.brightness" default="7" range="0,7" option="int" visible="eq(-1,true)" />
|
||||
<setting label="30013" type="bool" id="display.storage.indicator" default="false" visible="eq(-2,true)" />
|
||||
<setting label="30014" type="labelenum" id="display.storage.indicator.icon" lvalues="30025|30015|30016|30017|30018|30019|30020|30021|30022|30023|30024|30027" default="30025" visible="eq(-3,true) + eq(-1,true)" subsetting="true" />
|
||||
<setting label="30028" type="bool" id="display.colon.on" default="false" visible="eq(-4,true)" />
|
||||
<setting label="30003" type="bool" id="display.advanced" default="false" visible="eq(-5,true)" />
|
||||
<setting label="30004" type="enum" id="display.type" values="0|1|2|3|4|5|6" default="1" visible="eq(-6,true) + eq(-1,true)" subsetting="true" />
|
||||
<setting label="30026" type="bool" id="display.common.anode" default="false" visible="eq(-7,true) + eq(-2,true)" subsetting="true" />
|
||||
<setting type="lsep" label="30012" visible="eq(-8,true) + eq(-3,true)" />
|
||||
<setting label="30005" type="enum" id="display.char.index0" values="0|1|2|3|4|5|6" default="0" visible="eq(-9 ,true) + eq(-4,true)" subsetting="true" />
|
||||
<setting label="30006" type="enum" id="display.char.index1" values="0|1|2|3|4|5|6" default="1" visible="eq(-10,true) + eq(-5,true)" subsetting="true" />
|
||||
<setting label="30007" type="enum" id="display.char.index2" values="0|1|2|3|4|5|6" default="2" visible="eq(-11,true) + eq(-6,true)" subsetting="true" />
|
||||
<setting label="30008" type="enum" id="display.char.index3" values="0|1|2|3|4|5|6" default="3" visible="eq(-12,true) + eq(-7,true)" subsetting="true" />
|
||||
<setting label="30009" type="enum" id="display.char.index4" values="0|1|2|3|4|5|6" default="4" visible="eq(-13,true) + eq(-8,true)" subsetting="true" />
|
||||
<setting label="30010" type="enum" id="display.char.index5" values="0|1|2|3|4|5|6" default="5" visible="false" subsetting="true" />
|
||||
<setting label="30011" type="enum" id="display.char.index6" values="0|1|2|3|4|5|6" default="6" visible="false" subsetting="true" />
|
||||
</category>
|
||||
</settings>
|
||||
@@ -25,10 +25,7 @@ PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=0"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=1"
|
||||
PKG_X11_SUPPORT="-DENABLE_X11=0"
|
||||
|
||||
if [ "$KODIPLAYER_DRIVER" = "libamcodec" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libamcodec"
|
||||
PKG_AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=1"
|
||||
elif [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then
|
||||
if [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver"
|
||||
PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=1"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=0"
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
From 49f9c51f5519d48bae601c174914f82e8e71e093 Mon Sep 17 00:00:00 2001
|
||||
From: redpanther <redpanther@spooky-online.de>
|
||||
Date: Wed, 31 Aug 2016 14:39:14 +0200
|
||||
Subject: [PATCH] fix amlogic for newer kernels crosscompile stay on 32bit aml
|
||||
with kernel 3.10
|
||||
|
||||
backport 58a8e22 from hyperion.ng
|
||||
---
|
||||
libsrc/grabber/amlogic/AmlogicGrabber.cpp | 10 +++++++---
|
||||
libsrc/grabber/amlogic/CMakeLists.txt | 7 +++++++
|
||||
2 files changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libsrc/grabber/amlogic/AmlogicGrabber.cpp b/libsrc/grabber/amlogic/AmlogicGrabber.cpp
|
||||
index 11cd280..5f39883 100644
|
||||
--- a/libsrc/grabber/amlogic/AmlogicGrabber.cpp
|
||||
+++ b/libsrc/grabber/amlogic/AmlogicGrabber.cpp
|
||||
@@ -20,9 +20,13 @@
|
||||
#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
|
||||
#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
|
||||
|
||||
-// Flags copied from 'include/linux/amlogic/amports/amvstream.h' at https://github.com/codesnake/linux-amlogic
|
||||
-#define AMSTREAM_IOC_MAGIC 'S'
|
||||
-#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR(AMSTREAM_IOC_MAGIC, 0x48, unsigned long)
|
||||
+#if HAVE_AML_HEADER
|
||||
+ #include <amcodec/amports/amstream.h>
|
||||
+#else
|
||||
+ // Flags copied from 'include/linux/amlogic/amports/amvstream.h' at https://github.com/codesnake/linux-amlogic
|
||||
+ #define AMSTREAM_IOC_MAGIC 'S'
|
||||
+ #define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR(AMSTREAM_IOC_MAGIC, 0x48, unsigned long)
|
||||
+#endif
|
||||
|
||||
AmlogicGrabber::AmlogicGrabber(const unsigned width, const unsigned height) :
|
||||
// Minimum required width or height is 160
|
||||
diff --git a/libsrc/grabber/amlogic/CMakeLists.txt b/libsrc/grabber/amlogic/CMakeLists.txt
|
||||
index cf8844b..326f7c7 100644
|
||||
--- a/libsrc/grabber/amlogic/CMakeLists.txt
|
||||
+++ b/libsrc/grabber/amlogic/CMakeLists.txt
|
||||
@@ -1,3 +1,4 @@
|
||||
+INCLUDE (CheckIncludeFiles)
|
||||
|
||||
# Define the current source locations
|
||||
SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/grabber)
|
||||
@@ -21,6 +22,12 @@ else(ENABLE_QT5)
|
||||
QT4_WRAP_CPP(AmlogicHEADERS_MOC ${AmlogicQT_HEADERS})
|
||||
endif(ENABLE_QT5)
|
||||
|
||||
+CHECK_INCLUDE_FILES ("amcodec/amports/amstream.h" HAVE_AML_HEADER)
|
||||
+IF (${HAVE_AML_HEADER})
|
||||
+ ADD_DEFINITIONS( -DHAVE_AML_HEADER )
|
||||
+ENDIF()
|
||||
+
|
||||
+
|
||||
add_library(amlogic-grabber
|
||||
${AmlogicHEADERS}
|
||||
${AmlogicQT_HEADERS}
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
109
|
||||
- Update to version 11518
|
||||
- fixed missing Modules
|
||||
|
||||
108
|
||||
- Update to version 11517
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="oscam"
|
||||
PKG_VERSION="a2ee0528f1de527748aaf7a79982ed112ffa3183"
|
||||
PKG_SHA256="24315471faea612a25b39fc14050f4fad4365715fde48dcb0032ebdce770282d"
|
||||
PKG_VERSION_NUMBER="11517"
|
||||
PKG_REV="108"
|
||||
PKG_VERSION="e8ce7359fa920ca8d63aca9dde4f0eeb1f1f72f1"
|
||||
PKG_SHA256="93610d3d61479cae87340a0a3d7dc8c04b326b662f58f4181ac08c87897bd80b"
|
||||
PKG_VERSION_NUMBER="11518"
|
||||
PKG_REV="109"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.streamboard.tv/oscam/wiki"
|
||||
@@ -19,17 +19,53 @@ PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="OSCam"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET="-DLIBUSBDIR=$SYSROOT_PREFIX/usr \
|
||||
-DWITH_SSL=1 \
|
||||
-DHAVE_LIBCRYPTO=1 \
|
||||
-DHAVE_DVBAPI=1 \
|
||||
-DWITH_STAPI=0 \
|
||||
-DWEBIF=1 \
|
||||
-DWITH_DEBUG=0 \
|
||||
-DOPTIONAL_INCLUDE_DIR=$SYSROOT_PREFIX/usr/include \
|
||||
-DSTATIC_LIBUSB=1 \
|
||||
-DCLOCKFIX=0 \
|
||||
-DCARDREADER_DB2COM=OFF"
|
||||
PKG_CMAKE_OPTS_TARGET="\
|
||||
`#Building` \
|
||||
-DLIBUSBDIR=$SYSROOT_PREFIX/usr \
|
||||
-DOPTIONAL_INCLUDE_DIR=$SYSROOT_PREFIX/usr/include \
|
||||
\
|
||||
`#Readers` \
|
||||
-DCARDREADER_DB2COM=OFF \
|
||||
-DCARDREADER_DRECAS=ON \
|
||||
-DCARDREADER_INTERNAL=OFF \
|
||||
-DCARDREADER_MP35=ON \
|
||||
-DCARDREADER_PHOENIX=ON \
|
||||
-DCARDREADER_SC8IN1=ON \
|
||||
-DCARDREADER_SMARGO=ON \
|
||||
-DCARDREADER_STAPI5=OFF \
|
||||
-DCARDREADER_STAPI=OFF \
|
||||
-DCARDREADER_STINGER=ON \
|
||||
\
|
||||
`#Protocol` \
|
||||
-DMODULE_CAMD33=OFF \
|
||||
-DMODULE_CAMD35=ON \
|
||||
-DMODULE_CAMD35_TCP=ON \
|
||||
-DMODULE_CCCAM=ON \
|
||||
-DMODULE_CCCSHARE=ON \
|
||||
-DMODULE_CONSTCW=ON \
|
||||
-DMODULE_GBOX=ON \
|
||||
-DMODULE_GHTTP=ON \
|
||||
-DMODULE_NEWCAMD=ON \
|
||||
-DMODULE_PANDORA=ON \
|
||||
-DMODULE_RADEGAST=ON \
|
||||
-DMODULE_SCAM=ON \
|
||||
-DMODULE_SERIAL=ON \
|
||||
\
|
||||
`#Features` \
|
||||
-DCLOCKFIX=0 \
|
||||
-DCS_ANTICASC=ON \
|
||||
-DCS_CACHEEX=ON \
|
||||
-DCW_CYCLE_CHECK=ON \
|
||||
-DHAVE_DVBAPI=1 \
|
||||
-DHAVE_LIBCRYPTO=1 \
|
||||
-DSTATIC_LIBUSB=1 \
|
||||
-DTOUCH=ON \
|
||||
-DWEBIF=1 \
|
||||
-DWEBIF_LIVELOG=1 \
|
||||
-DWEBIF_JQUERY=1 \
|
||||
-DWITH_DEBUG=0 \
|
||||
-DWITH_SSL=1 \
|
||||
-DWITH_STAPI=0"
|
||||
|
||||
pre_configure_target() {
|
||||
export OSCAM_ADDON_VERSION="$PKG_VERSION_NUMBER"
|
||||
|
||||
@@ -20,9 +20,7 @@ PKG_ADDON_PROJECTS="Slice Slice3"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
|
||||
makeinstall_target() {
|
||||
PKG_ADDON_INSTALL_DIR="${INSTALL}/usr/share/kodi/addons/${PKG_SECTION}.${PKG_NAME}"
|
||||
mkdir -p "${PKG_ADDON_INSTALL_DIR}"
|
||||
install_addon_files "${PKG_ADDON_INSTALL_DIR}"
|
||||
install_addon_files "${INSTALL}/usr/share/kodi/addons/${PKG_SECTION}.${PKG_NAME}"
|
||||
}
|
||||
|
||||
addon() {
|
||||
|
||||
@@ -5,7 +5,7 @@ PKG_NAME="touchscreen"
|
||||
PKG_VERSION="1.0"
|
||||
PKG_REV="101"
|
||||
PKG_ARCH="any"
|
||||
PKG_ADDON_PROJECTS="Generic RPi Amlogic"
|
||||
PKG_ADDON_PROJECTS="Generic RPi"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE=""
|
||||
PKG_URL=""
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
119
|
||||
- Use system libidn2
|
||||
|
||||
118
|
||||
- update to 4.2.7-44
|
||||
- fix tv_grab_file usage of & in urls
|
||||
|
||||
@@ -5,7 +5,7 @@ PKG_NAME="tvheadend42"
|
||||
PKG_VERSION="5c218500579d5bd1c1f7e7a4b5f7f0fb35baa626"
|
||||
PKG_SHA256="a9fe5a4c36aa185e3f0a73a709f0dc05794ae9c12f5d888985b559ff68a2508d"
|
||||
PKG_VERSION_NUMBER="4.2.7-44"
|
||||
PKG_REV="118"
|
||||
PKG_REV="119"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.tvheadend.org"
|
||||
@@ -114,7 +114,6 @@ addon() {
|
||||
cp -PL $(get_build_dir gnutls)/.INSTALL_PKG/usr/lib/libgnutls.so.30 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libnettle.so.6 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libhogweed.so.4 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir libidn2)/.install_pkg/usr/lib/libidn2.so.4 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gmp)/.install_pkg/usr/lib/libgmp.so.10 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
|
||||
# set only version (revision will be added by buildsystem)
|
||||
|
||||
@@ -5,7 +5,6 @@ PKG_NAME="tvmosaic"
|
||||
PKG_VERSION="1.0.0-16296"
|
||||
PKG_SHA256="63d48e7b0912f2efb6e894252a13d8312679cdcb155ebe3fa758dc88b4f91816"
|
||||
PKG_REV="100"
|
||||
PKG_ARCH="any"
|
||||
PKG_ARCH="arm"
|
||||
PKG_LICENSE="Prop."
|
||||
PKG_SITE="https://tv-mosaic.com"
|
||||
|
||||
@@ -36,11 +36,6 @@ PKG_ADDON_NAME=".Net Core Runtime"
|
||||
PKG_ADDON_TYPE="xbmc.python.script"
|
||||
PKG_MAINTAINER="Anton Voyl (awiouy)"
|
||||
|
||||
unpack() {
|
||||
mkdir -p $PKG_BUILD
|
||||
$SCRIPTS/extract $PKG_NAME $PKG_BUILD
|
||||
}
|
||||
|
||||
addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp -r $PKG_BUILD/$PKG_NAME-$PKG_VERSION/* \
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
106
|
||||
- Use system libidn2
|
||||
|
||||
105
|
||||
- Removed FDK-AAC
|
||||
- Build with GNUTLS
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
PKG_NAME="ffmpeg-tools"
|
||||
PKG_VERSION="1.0"
|
||||
PKG_REV="105"
|
||||
PKG_REV="106"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://libreelec.tv"
|
||||
@@ -25,7 +25,6 @@ addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gmp)/.install_pkg/usr/lib/libgmp.so.10 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gnutls)/.INSTALL_PKG/usr/lib/libgnutls.so.30 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir libidn2)/.install_pkg/usr/lib/libidn2.so.4 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libhogweed.so.4 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libnettle.so.6 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="alsa-lib"
|
||||
PKG_VERSION="1.1.8"
|
||||
PKG_SHA256="3cdc3a93a6427a26d8efab4ada2152e64dd89140d981f6ffa003e85be707aedf"
|
||||
PKG_VERSION="1.1.9"
|
||||
PKG_SHA256="488373aef5396682f3a411a6d064ae0ad196b9c96269d0bb912fbdeec94b994b"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.alsa-project.org/"
|
||||
PKG_URL="ftp://ftp.alsa-project.org/pub/lib/alsa-lib-$PKG_VERSION.tar.bz2"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="alsa-utils"
|
||||
PKG_VERSION="1.1.8"
|
||||
PKG_SHA256="fd9bf528922b3829a91913b89a1858c58a0b24271a7b5f529923aa9ea12fa4cf"
|
||||
PKG_VERSION="1.1.9"
|
||||
PKG_SHA256="5ddf2cbddb4bd1a4a2a6492a09c25898b08c3ad64893c3655be14194cf0a213a"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.alsa-project.org/"
|
||||
PKG_URL="ftp://ftp.alsa-project.org/pub/utils/alsa-utils-$PKG_VERSION.tar.bz2"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libmodplug"
|
||||
PKG_VERSION="0.8.8.5"
|
||||
PKG_SHA256="77462d12ee99476c8645cb5511363e3906b88b33a6b54362b4dbc0f39aa2daad"
|
||||
PKG_VERSION="0.8.9.0"
|
||||
PKG_SHA256="457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://modplug-xmms.sourceforge.net/"
|
||||
PKG_URL="$SOURCEFORGE_SRC/modplug-xmms/libmodplug/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libopenmpt"
|
||||
PKG_VERSION="0.3.1"
|
||||
PKG_SHA256="6fc5614926edd523d5585e40fdaf0b2ea08689d4dc91de49511d02503744cbb5"
|
||||
PKG_VERSION="0.4.5"
|
||||
PKG_SHA256="0b4cc0cc8fbbdabc6263a900ff3560dae7be43be011b6f2bc9913f7a0ed3a521"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="http://lib.openmpt.org/libopenmpt/"
|
||||
PKG_URL="http://lib.openmpt.org/files/libopenmpt/src/${PKG_NAME}-${PKG_VERSION}+release.autotools.tar.gz"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libsamplerate"
|
||||
PKG_VERSION="0.1.8"
|
||||
PKG_SHA256="93b54bdf46d5e6d2354b7034395fe329c222a966790de34520702bb9642f1c06"
|
||||
PKG_VERSION="0.1.9"
|
||||
PKG_SHA256="0a7eb168e2f21353fb6d84da152e4512126f7dc48ccb0be80578c565413444c1"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.mega-nerd.com/SRC/"
|
||||
PKG_URL="http://www.mega-nerd.com/SRC/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="rpi-cirrus-config"
|
||||
PKG_VERSION="0.0.1"
|
||||
PKG_SHA256="a2a580d9738aaf4e901d8215cedd1df5d95b1e057165cfd9b72335e0dc6c40e4"
|
||||
PKG_VERSION="0.0.2"
|
||||
PKG_SHA256="cc11c47f1f2b6d5e72dcdea828ba57e0dcaf74161f675a4a9f395054f5d82d31"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/HiassofT/rpi-cirrus-config"
|
||||
PKG_URL="https://github.com/HiassofT/rpi-cirrus-config/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="sbc"
|
||||
PKG_VERSION="1.3"
|
||||
PKG_SHA256="4a358581fb57b98e0c1c34606a35343f31f908f57c26659e51495f75e283785d"
|
||||
PKG_VERSION="1.4"
|
||||
PKG_SHA256="050058cfc5a2709d324868ddbb82f9b796ba6c4f5e00cb6a715b3841ee13dfe9"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.bluez.org/"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/bluetooth/sbc-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="lz4"
|
||||
PKG_VERSION="1.8.2"
|
||||
PKG_SHA256="0963fbe9ee90acd1d15e9f09e826eaaf8ea0312e854803caf2db0a6dd40f4464"
|
||||
PKG_VERSION="1.9.1"
|
||||
PKG_SHA256="f8377c89dad5c9f266edc0be9b73595296ecafd5bfa1000de148096c50052dc4"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/lz4/lz4"
|
||||
PKG_URL="https://github.com/lz4/lz4/archive/v$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="minizip"
|
||||
PKG_VERSION="1.1"
|
||||
PKG_SHA256="5666b5ee3e85dfd2dd119970613c12e6267d31813f07d3ffa5d359fe272cb6d1"
|
||||
PKG_VERSION="2.8.8"
|
||||
PKG_SHA256="a551063636ae4f989baefc6a20870f5b28246052a372a2ce124ebf3f66018db0"
|
||||
PKG_LICENSE="zlib"
|
||||
PKG_SITE="https://github.com/nmoinvaz/minizip"
|
||||
PKG_URL="https://github.com/nmoinvaz/minizip/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="mariadb-connector-c"
|
||||
PKG_VERSION="3.0.6"
|
||||
PKG_SHA256="46181f8c95c096ac1aa6cb0ca80f4ed0e746873cfd6af84f3bac925d7e2cd091"
|
||||
PKG_VERSION="3.1.1"
|
||||
PKG_SHA256="63a0ecfa3c87ba0361aef3b2c849abe280f7371030e84f41ce0dc4466db85637"
|
||||
PKG_LICENSE="LGPL"
|
||||
PKG_SITE="https://mariadb.org/"
|
||||
PKG_URL="https://github.com/MariaDB/mariadb-connector-c/archive/v$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="edid-decode"
|
||||
PKG_VERSION="f56f329"
|
||||
PKG_SHA256="d9347ddf6933c6f90c79230b1898da5686083f0e5ebb7ef67acb011108cfaeae"
|
||||
PKG_VERSION="15df4aebf06da579241c58949493b866139d0e2b"
|
||||
PKG_SHA256="58743c8ba768134ef1421e1ce9f4edf0eafdae29377fe5b8f4cb285f16dc142e"
|
||||
PKG_LICENSE="None"
|
||||
PKG_SITE="https://cgit.freedesktop.org/xorg/app/edid-decode/"
|
||||
PKG_URL="https://cgit.freedesktop.org/xorg/app/edid-decode/snapshot/$PKG_VERSION.tar.xz"
|
||||
PKG_SITE="https://git.linuxtv.org/edid-decode.git/"
|
||||
PKG_URL="https://git.linuxtv.org/edid-decode.git/snapshot/$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_LONGDESC="Decode EDID data in human-readable format"
|
||||
|
||||
|
||||
@@ -66,10 +66,12 @@ make_target() {
|
||||
make configure-host
|
||||
make -C libiberty
|
||||
make -C bfd
|
||||
make -C opcodes
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p $SYSROOT_PREFIX/usr/lib
|
||||
cp libiberty/libiberty.a $SYSROOT_PREFIX/usr/lib
|
||||
make DESTDIR="$SYSROOT_PREFIX" -C bfd install
|
||||
make DESTDIR="$SYSROOT_PREFIX" -C opcodes install
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="cmake"
|
||||
PKG_VERSION="3.14.3"
|
||||
PKG_SHA256="215d0b64e81307182b29b63e562edf30b3875b834efdad09b3fcb5a7d2f4b632"
|
||||
PKG_VERSION="3.14.5"
|
||||
PKG_SHA256="505ae49ebe3c63c595fa5f814975d8b72848447ee13b6613b0f8b96ebda18c06"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="http://www.cmake.org/"
|
||||
PKG_URL="http://www.cmake.org/files/v${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="flatbuffers"
|
||||
PKG_VERSION="1.10.0"
|
||||
PKG_SHA256="3714e3db8c51e43028e10ad7adffb9a36fc4aa5b1a363c2d0c4303dd1be59a7c"
|
||||
PKG_VERSION="1.11.0"
|
||||
PKG_SHA256="3f4a286642094f45b1b77228656fbd7ea123964f19502f9ecfd29933fd23a50b"
|
||||
PKG_LICENSE="Apache-2.0"
|
||||
PKG_SITE="https://github.com/google/flatbuffers"
|
||||
PKG_URL="https://github.com/google/flatbuffers/archive/v$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -18,9 +18,7 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-shared \
|
||||
--disable-debug \
|
||||
--disable-deprecated \
|
||||
--disable-silent-rules \
|
||||
--enable-charsets \
|
||||
--with-gnu-ld \
|
||||
--without-glib"
|
||||
--with-gnu-ld"
|
||||
|
||||
pre_configure_target() {
|
||||
export CFLAGS="$CFLAGS -DFRIBIDI_CHUNK_SIZE=4080"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="glib"
|
||||
PKG_VERSION="2.59.3"
|
||||
PKG_SHA256="dfefafbc37bbcfb8101f3f181f880e8b7a8bee48620c92869ec4ef1d3d648e5e"
|
||||
PKG_VERSION="2.61.1"
|
||||
PKG_SHA256="f8d827955f0d8e197ff5c2105dd6ac4f6b63d15cd021eb1de66534c92a762161"
|
||||
PKG_LICENSE="LGPL"
|
||||
PKG_SITE="http://www.gtk.org/"
|
||||
PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="heimdal"
|
||||
PKG_VERSION="7.5.0"
|
||||
PKG_SHA256="ad67fef994dc2268fb0b1a8164b39330d184f425057867485a178e9785a7f35a"
|
||||
PKG_VERSION="7.7.0"
|
||||
PKG_SHA256="f7d414d0914abb0e151a276b4de22cf4977fd6c28bd9ecdd990407b1138a945c"
|
||||
PKG_LICENSE="BSD-3c"
|
||||
PKG_SITE="http://www.h5l.org/"
|
||||
PKG_URL="https://github.com/heimdal/heimdal/archive/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libcap"
|
||||
PKG_VERSION="2.26"
|
||||
PKG_SHA256="b630b7c484271b3ba867680d6a14b10a86cfa67247a14631b14c06731d5a458b"
|
||||
PKG_VERSION="2.27"
|
||||
PKG_SHA256="dac1792d0118bee6aae6ba7fb93ff1602c6a9bda812fd63916eee1435b9c486a"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE=""
|
||||
PKG_URL="http://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
|
||||
@@ -16,22 +16,13 @@ PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=1 \
|
||||
-DCMAKE_INSTALL_LIBDIR_NOARCH:STRING=lib \
|
||||
-DSKIP_PYTHON_WRAPPER=1 \
|
||||
-DHAVE_IMX_API=0 \
|
||||
-DHAVE_AOCEC_API=0 -DHAVE_AMLOGIC_API=0 \
|
||||
-DHAVE_GIT_BIN=0"
|
||||
|
||||
if [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver"
|
||||
fi
|
||||
|
||||
if [ "$KODIPLAYER_DRIVER" = "libamcodec" ]; then
|
||||
if [ "$TARGET_KERNEL_ARCH" = "arm64" ]; then
|
||||
PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AOCEC_API=1"
|
||||
else
|
||||
PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AMLOGIC_API=1"
|
||||
fi
|
||||
else
|
||||
PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AOCEC_API=0 -DHAVE_AMLOGIC_API=0"
|
||||
fi
|
||||
|
||||
# libX11 and xrandr to read the sink's EDID, used to determine the PC's HDMI physical address
|
||||
if [ "$DISPLAYSERVER" = "x11" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libX11 libXrandr"
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="swig"
|
||||
PKG_VERSION="3.0.12"
|
||||
PKG_SHA256="7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d"
|
||||
PKG_VERSION="4.0.0"
|
||||
PKG_SHA256="e8a39cd6437e342cdcbd5af27a9bf11b62dc9efec9248065debcb8276fcbb925"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.swig.org"
|
||||
PKG_URL="$SOURCEFORGE_SRC/swig/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_HOST="ccache:host"
|
||||
PKG_LONGDESC="SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages."
|
||||
|
||||
PKG_CONFIGURE_OPTS_HOST="--program-suffix=3.0 \
|
||||
PKG_CONFIGURE_OPTS_HOST="--program-suffix=4.0 \
|
||||
--with-pcre-prefix=$TOOLCHAIN \
|
||||
--with-boost=no \
|
||||
--without-pcre \
|
||||
@@ -39,5 +40,5 @@ PKG_CONFIGURE_OPTS_HOST="--program-suffix=3.0 \
|
||||
--without-d"
|
||||
|
||||
post_makeinstall_host() {
|
||||
ln -sf swig3.0 $TOOLCHAIN/bin/swig
|
||||
ln -sf swig4.0 $TOOLCHAIN/bin/swig
|
||||
}
|
||||
|
||||
@@ -15,16 +15,12 @@ PKG_LIBNAME="ppsspp_libretro.so"
|
||||
PKG_LIBPATH="lib/$PKG_LIBNAME"
|
||||
PKG_LIBVAR="PPSSPP_LIB"
|
||||
|
||||
if [ "$PROJECT" = "Amlogic" ] || [ "$PROJECT" = "RPi" ]; then
|
||||
case $DEVICE in
|
||||
KVIM|RPi2|S905|Odroid_C2)
|
||||
PKG_ARCH_ARM="-DARMV7=ON \
|
||||
if target_has_feature neon; then
|
||||
PKG_ARCH_ARM="-DARMV7=ON \
|
||||
-DUSING_FBDEV=ON \
|
||||
-DUSING_EGL=ON \
|
||||
-DUSING_GLES2=ON \
|
||||
-DUSING_X11_VULKAN=OFF"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET="-DLIBRETRO=ON \
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="glew"
|
||||
PKG_VERSION="1.13.0"
|
||||
PKG_SHA256="aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7"
|
||||
PKG_VERSION="2.1.0"
|
||||
PKG_SHA256="04de91e7e6763039bc11940095cd9c7f880baba82196a7765f727ac05a993c95"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="http://glew.sourceforge.net/"
|
||||
PKG_URL="$SOURCEFORGE_SRC/glew/glew/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tgz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="glm"
|
||||
PKG_VERSION="0.9.9.2"
|
||||
PKG_SHA256="209b5943d393925e1a6ecb6734e7507b8f6add25e72a605b25d0d0d382e64fd4"
|
||||
PKG_VERSION="0.9.9.5"
|
||||
PKG_SHA256="4fe34860ce69156f63eea6c3d84c91cadfc330353cf275ff394aef4e163cafee"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="https://glm.g-truc.net/"
|
||||
PKG_URL="https://github.com/g-truc/glm/releases/download/$PKG_VERSION/glm-$PKG_VERSION.zip"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libdrm"
|
||||
PKG_VERSION="2.4.97"
|
||||
PKG_SHA256="77d0ccda3e10d6593398edb70b1566bfe1a23a39bd3da98ace2147692eadd123"
|
||||
PKG_VERSION="2.4.98"
|
||||
PKG_SHA256="8be0edccaca3abde8b6bb1431b46354c7fab46e9b91cc6946ba65b51f56f1894"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://dri.freedesktop.org"
|
||||
PKG_URL="http://dri.freedesktop.org/libdrm/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
# in Xorg.log
|
||||
|
||||
PKG_NAME="libepoxy"
|
||||
PKG_VERSION="1.5.2"
|
||||
PKG_SHA256="a9562386519eb3fd7f03209f279f697a8cba520d3c155d6e253c3e138beca7d8"
|
||||
PKG_VERSION="1.5.3"
|
||||
PKG_SHA256="002958c5528321edd53440235d3c44e71b5b1e09b9177e8daf677450b6c4433d"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/anholt/libepoxy"
|
||||
PKG_URL="https://github.com/anholt/libepoxy/releases/download/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
|
||||
@@ -2,26 +2,42 @@
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libmali"
|
||||
PKG_VERSION="ad56ed30985471c0950a654cc9db1e86310650d5"
|
||||
PKG_SHA256="72438ea73cf6c2e8e770545872386b66ccad200c568261e5304845547099c9ed"
|
||||
PKG_VERSION="4cbf211cfd9b07854aab4978e50b1151052c6d4c"
|
||||
PKG_SHA256="d3c5dd43ee0830feada4a86d32b9c794cddab29a863dfd1dddb3954f380086c5"
|
||||
PKG_ARCH="arm aarch64"
|
||||
PKG_LICENSE="nonfree"
|
||||
PKG_SITE="https://github.com/LibreELEC/libmali"
|
||||
PKG_URL="https://github.com/LibreELEC/libmali/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_LONGDESC="OpenGL ES user-space binary for the ARM Mali GPU family"
|
||||
PKG_STAMP="$MALI_FAMILY"
|
||||
|
||||
PKG_DEPENDS_TARGET="libdrm"
|
||||
|
||||
if [ "$MALI_FAMILY" = "t620" -o "$MALI_FAMILY" = "t720" -o "$MALI_FAMILY" = "g52" ]; then
|
||||
if listcontains "$MALI_FAMILY" "(t620|t720)"; then
|
||||
PKG_DEPENDS_TARGET+=" wayland"
|
||||
fi
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET="-DMALI_VARIANT=$MALI_FAMILY"
|
||||
|
||||
if [ -n "$MALI_REVISION" ]; then
|
||||
PKG_CMAKE_OPTS_TARGET+=" -DMALI_REVISION=$MALI_REVISION"
|
||||
if [ "$LINUX" != "rockchip-4.4" ]; then
|
||||
listcontains "$MALI_FAMILY" "4[0-9]+" && PKG_DEPENDS_TARGET+=" mali-utgard"
|
||||
listcontains "$MALI_FAMILY" "t[0-9]+" && PKG_DEPENDS_TARGET+=" mali-midgard"
|
||||
listcontains "$MALI_FAMILY" "g[0-9]+" && PKG_DEPENDS_TARGET+=" mali-bifrost"
|
||||
fi
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET="-DMALI_VARIANT=${MALI_FAMILY// /;}"
|
||||
|
||||
if [ "$TARGET_ARCH" = "aarch64" ]; then
|
||||
PKG_CMAKE_OPTS_TARGET+=" -DMALI_ARCH=aarch64-linux-gnu"
|
||||
fi
|
||||
|
||||
post_makeinstall_target() {
|
||||
mkdir -p $INSTALL/usr/bin
|
||||
cp -v $PKG_DIR/scripts/libmali-setup $INSTALL/usr/bin
|
||||
|
||||
if [ $(ls -1q $INSTALL/usr/lib/libmali-*.so | wc -l) -gt 1 ]; then
|
||||
ln -sfv /var/lib/libmali/libmali.so $INSTALL/usr/lib/libmali.so
|
||||
fi
|
||||
}
|
||||
|
||||
post_install() {
|
||||
enable_service libmali-setup.service
|
||||
}
|
||||
|
||||
44
packages/graphics/libmali/scripts/libmali-setup
Executable file
44
packages/graphics/libmali/scripts/libmali-setup
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/sh
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
GPUINFO=/sys/kernel/debug/mali/version
|
||||
[ ! -f "$GPUINFO" ] && GPUINFO=$(find /sys/devices/platform -name gpuinfo)
|
||||
|
||||
echo "GPUINFO: $GPUINFO"
|
||||
[ ! -f "$GPUINFO" ] && exit
|
||||
|
||||
GPU=$(cat $GPUINFO)
|
||||
echo "GPU: $GPU"
|
||||
|
||||
case $GPU in
|
||||
Mali-400*) LIB="libmali-utgard-400-*.so" ;;
|
||||
Mali-450*) LIB="libmali-utgard-450-*.so" ;;
|
||||
Mali-T60x*) LIB="libmali-midgard-t60x-*.so" ;;
|
||||
Mali-T62x*) LIB="libmali-midgard-t620-*.so" ;;
|
||||
Mali-T72x*) LIB="libmali-midgard-t720-*.so" ;;
|
||||
Mali-T76x*r0p0*) LIB="libmali-midgard-t76x-*-r0p0-*.so" ;;
|
||||
Mali-T76x*r1p0*) LIB="libmali-midgard-t76x-*-r1p0-*.so" ;;
|
||||
Mali-T82x*) LIB="libmali-midgard-t82x-*.so" ;;
|
||||
Mali-T83x*) LIB="libmali-midgard-t83x-*.so" ;;
|
||||
Mali-T86x*) LIB="libmali-midgard-t86x-*.so" ;;
|
||||
Mali-T88x*) LIB="libmali-midgard-t88x-*.so" ;;
|
||||
Mali-G31*) LIB="libmali-bifrost-g31-*.so" ;;
|
||||
Mali-G51*) LIB="libmali-bifrost-g51-*.so" ;;
|
||||
Mali-G52*) LIB="libmali-bifrost-g52-*.so" ;;
|
||||
Mali-G71*) LIB="libmali-bifrost-g71-*.so" ;;
|
||||
Mali-G72*) LIB="libmali-bifrost-g72-*.so" ;;
|
||||
Mali-G76*) LIB="libmali-bifrost-g76-*.so" ;;
|
||||
esac
|
||||
|
||||
echo "LIB: $LIB"
|
||||
[ -z "$LIB" ] && exit
|
||||
|
||||
LIBMALI=$(find /usr/lib -name $LIB)
|
||||
|
||||
echo "LIBMALI: $LIBMALI"
|
||||
[ ! -f "$LIBMALI" ] && exit
|
||||
|
||||
mkdir -p /var/lib/libmali
|
||||
ln -sf $LIBMALI /var/lib/libmali/libmali.so
|
||||
12
packages/graphics/libmali/system.d/libmali-setup.service
Normal file
12
packages/graphics/libmali/system.d/libmali-setup.service
Normal file
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Setup symlink for ARM Mali library
|
||||
Before=graphical.target
|
||||
After=multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/libmali-setup
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libraw"
|
||||
PKG_VERSION="0.18.7"
|
||||
PKG_SHA256="87e347c261a8e87935d9a23afd750d27676b99f540e8552314d40db0ea315771"
|
||||
PKG_VERSION="0.19.2"
|
||||
PKG_SHA256="400d47969292291d297873a06fb0535ccce70728117463927ddd9452aa849644"
|
||||
PKG_LICENSE="LGPL"
|
||||
PKG_SITE="http://www.libraw.org/"
|
||||
PKG_URL="http://www.libraw.org/data/LibRaw-$PKG_VERSION.tar.gz"
|
||||
@@ -17,6 +17,4 @@ PKG_CONFIGURE_OPTS_TARGET="--enable-static \
|
||||
--enable-jpeg \
|
||||
--disable-jasper \
|
||||
--disable-lcms \
|
||||
--disable-examples \
|
||||
--disable-demosaic-pack-gpl2 \
|
||||
--disable-demosaic-pack-gpl3"
|
||||
--disable-examples"
|
||||
|
||||
@@ -1,340 +0,0 @@
|
||||
From 158398653a14e8b5884d744ec711ba31a8ceafdc Mon Sep 17 00:00:00 2001
|
||||
From: Alex Tutubalin <lexa@lexa.ru>
|
||||
Date: Fri, 2 Feb 2018 08:31:47 +0300
|
||||
Subject: [PATCH] powf64=>libraw_powf64
|
||||
|
||||
---
|
||||
internal/dcraw_common.cpp | 98 +++++++++++++++++++++++------------------------
|
||||
2 files changed, 98 insertions(+), 98 deletions(-)
|
||||
|
||||
diff --git a/internal/dcraw_common.cpp b/internal/dcraw_common.cpp
|
||||
index a9b45db0..66eb08e4 100644
|
||||
--- a/internal/dcraw_common.cpp
|
||||
+++ b/internal/dcraw_common.cpp
|
||||
@@ -5849,7 +5849,7 @@ static float powf_lim(float a, float b, float limup)
|
||||
{
|
||||
return (b>limup || b < -limup)?0.f:powf(a,b);
|
||||
}
|
||||
-static float powf64(float a, float b)
|
||||
+static float libraw_powf64(float a, float b)
|
||||
{
|
||||
return powf_lim(a,b,64.f);
|
||||
}
|
||||
@@ -5873,7 +5873,7 @@ static float my_roundf(float x) {
|
||||
static float _CanonConvertAperture(ushort in)
|
||||
{
|
||||
if ((in == (ushort)0xffe0) || (in == (ushort)0x7fff)) return 0.0f;
|
||||
- return powf64(2.0, in/64.0);
|
||||
+ return libraw_powf64(2.0, in/64.0);
|
||||
}
|
||||
|
||||
static float _CanonConvertEV (short in)
|
||||
@@ -6336,21 +6336,21 @@ void CLASS processNikonLensData (uchar *LensData, unsigned len)
|
||||
if (fabsf(imgdata.lens.makernotes.MinFocal) < 1.1f)
|
||||
{
|
||||
if ((imgdata.lens.nikon.NikonLensType ^ (uchar)0x01) || LensData[i + 2])
|
||||
- imgdata.lens.makernotes.MinFocal = 5.0f * powf64(2.0f, (float)LensData[i + 2] / 24.0f);
|
||||
+ imgdata.lens.makernotes.MinFocal = 5.0f * libraw_powf64(2.0f, (float)LensData[i + 2] / 24.0f);
|
||||
if ((imgdata.lens.nikon.NikonLensType ^ (uchar)0x01) || LensData[i + 3])
|
||||
- imgdata.lens.makernotes.MaxFocal = 5.0f * powf64(2.0f, (float)LensData[i + 3] / 24.0f);
|
||||
+ imgdata.lens.makernotes.MaxFocal = 5.0f * libraw_powf64(2.0f, (float)LensData[i + 3] / 24.0f);
|
||||
if ((imgdata.lens.nikon.NikonLensType ^ (uchar)0x01) || LensData[i + 4])
|
||||
- imgdata.lens.makernotes.MaxAp4MinFocal = powf64(2.0f, (float)LensData[i + 4] / 24.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MinFocal = libraw_powf64(2.0f, (float)LensData[i + 4] / 24.0f);
|
||||
if ((imgdata.lens.nikon.NikonLensType ^ (uchar)0x01) || LensData[i + 5])
|
||||
- imgdata.lens.makernotes.MaxAp4MaxFocal = powf64(2.0f, (float)LensData[i + 5] / 24.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MaxFocal = libraw_powf64(2.0f, (float)LensData[i + 5] / 24.0f);
|
||||
}
|
||||
imgdata.lens.nikon.NikonMCUVersion = LensData[i + 6];
|
||||
if (i != 2)
|
||||
{
|
||||
if ((LensData[i - 1]) &&
|
||||
(fabsf(imgdata.lens.makernotes.CurFocal) < 1.1f))
|
||||
- imgdata.lens.makernotes.CurFocal = 5.0f * powf64(2.0f, (float)LensData[i - 1] / 24.0f);
|
||||
- if (LensData[i + 7]) imgdata.lens.nikon.NikonEffectiveMaxAp = powf64(2.0f, (float)LensData[i + 7] / 24.0f);
|
||||
+ imgdata.lens.makernotes.CurFocal = 5.0f * libraw_powf64(2.0f, (float)LensData[i - 1] / 24.0f);
|
||||
+ if (LensData[i + 7]) imgdata.lens.nikon.NikonEffectiveMaxAp = libraw_powf64(2.0f, (float)LensData[i + 7] / 24.0f);
|
||||
}
|
||||
imgdata.lens.makernotes.LensID =
|
||||
(unsigned long long) LensData[i] << 56 |
|
||||
@@ -6827,13 +6827,13 @@ void CLASS PentaxLensInfo (unsigned id, unsigned len) // tag 0x0207
|
||||
if (table_buf[iLensData+9] &&
|
||||
(fabs(imgdata.lens.makernotes.CurFocal) < 0.1f))
|
||||
imgdata.lens.makernotes.CurFocal =
|
||||
- 10*(table_buf[iLensData+9]>>2) * powf64(4, (table_buf[iLensData+9] & 0x03)-2);
|
||||
+ 10*(table_buf[iLensData+9]>>2) * libraw_powf64(4, (table_buf[iLensData+9] & 0x03)-2);
|
||||
if (table_buf[iLensData+10] & 0xf0)
|
||||
imgdata.lens.makernotes.MaxAp4CurFocal =
|
||||
- powf64(2.0f, (float)((table_buf[iLensData+10] & 0xf0) >>4)/4.0f);
|
||||
+ libraw_powf64(2.0f, (float)((table_buf[iLensData+10] & 0xf0) >>4)/4.0f);
|
||||
if (table_buf[iLensData+10] & 0x0f)
|
||||
imgdata.lens.makernotes.MinAp4CurFocal =
|
||||
- powf64(2.0f, (float)((table_buf[iLensData+10] & 0x0f) + 10)/4.0f);
|
||||
+ libraw_powf64(2.0f, (float)((table_buf[iLensData+10] & 0x0f) + 10)/4.0f);
|
||||
|
||||
if (iLensData != 12)
|
||||
{
|
||||
@@ -6854,14 +6854,14 @@ void CLASS PentaxLensInfo (unsigned id, unsigned len) // tag 0x0207
|
||||
if ((table_buf[iLensData+14] > 1) &&
|
||||
(fabs(imgdata.lens.makernotes.MaxAp4CurFocal) < 0.7f))
|
||||
imgdata.lens.makernotes.MaxAp4CurFocal =
|
||||
- powf64(2.0f, (float)((table_buf[iLensData+14] & 0x7f) -1)/32.0f);
|
||||
+ libraw_powf64(2.0f, (float)((table_buf[iLensData+14] & 0x7f) -1)/32.0f);
|
||||
}
|
||||
else if ((id != 0x12e76) && // K-5
|
||||
(table_buf[iLensData+15] > 1) &&
|
||||
(fabs(imgdata.lens.makernotes.MaxAp4CurFocal) < 0.7f))
|
||||
{
|
||||
imgdata.lens.makernotes.MaxAp4CurFocal =
|
||||
- powf64(2.0f, (float)((table_buf[iLensData+15] & 0x7f) -1)/32.0f);
|
||||
+ libraw_powf64(2.0f, (float)((table_buf[iLensData+15] & 0x7f) -1)/32.0f);
|
||||
}
|
||||
}
|
||||
free(table_buf);
|
||||
@@ -7349,11 +7349,11 @@ void CLASS process_Sony_0x9050 (uchar * buf, unsigned id)
|
||||
{
|
||||
if (buf[0])
|
||||
imgdata.lens.makernotes.MaxAp4CurFocal =
|
||||
- my_roundf(powf64(2.0f, ((float)SonySubstitution[buf[0]] / 8.0 - 1.06f) / 2.0f)*10.0f) / 10.0f;
|
||||
+ my_roundf(libraw_powf64(2.0f, ((float)SonySubstitution[buf[0]] / 8.0 - 1.06f) / 2.0f)*10.0f) / 10.0f;
|
||||
|
||||
if (buf[1])
|
||||
imgdata.lens.makernotes.MinAp4CurFocal =
|
||||
- my_roundf(powf64(2.0f, ((float)SonySubstitution[buf[1]] / 8.0 - 1.06f) / 2.0f)*10.0f) / 10.0f;
|
||||
+ my_roundf(libraw_powf64(2.0f, ((float)SonySubstitution[buf[1]] / 8.0 - 1.06f) / 2.0f)*10.0f) / 10.0f;
|
||||
}
|
||||
|
||||
if (imgdata.lens.makernotes.CameraMount != LIBRAW_MOUNT_FixedLens)
|
||||
@@ -7363,7 +7363,7 @@ void CLASS process_Sony_0x9050 (uchar * buf, unsigned id)
|
||||
lid = SonySubstitution[buf[0x3d]] << 8 |
|
||||
SonySubstitution[buf[0x3c]];
|
||||
imgdata.lens.makernotes.CurAp =
|
||||
- powf64(2.0f, ((float)lid/256.0f - 16.0f) / 2.0f);
|
||||
+ libraw_powf64(2.0f, ((float)lid/256.0f - 16.0f) / 2.0f);
|
||||
}
|
||||
if (buf[0x105] &&
|
||||
(imgdata.lens.makernotes.LensMount != LIBRAW_MOUNT_Canon_EF) &&
|
||||
@@ -7749,7 +7749,7 @@ void CLASS parse_makernote_0xc634(int base, int uptag, unsigned dng_writer)
|
||||
{
|
||||
unsigned char cc;
|
||||
fread(&cc, 1, 1, ifp);
|
||||
- iso_speed = (int)(100.0 * powf64(2.0, (double)(cc) / 12.0 - 5.0));
|
||||
+ iso_speed = (int)(100.0 * libraw_powf64(2.0, (double)(cc) / 12.0 - 5.0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -7794,7 +7794,7 @@ void CLASS parse_makernote_0xc634(int base, int uptag, unsigned dng_writer)
|
||||
}
|
||||
break;
|
||||
case 0x1002:
|
||||
- imgdata.lens.makernotes.CurAp = powf64(2.0f, getreal(type)/2);
|
||||
+ imgdata.lens.makernotes.CurAp = libraw_powf64(2.0f, getreal(type)/2);
|
||||
break;
|
||||
case 0x20100102:
|
||||
stmread(imgdata.shootinginfo.InternalBodySerial, len, ifp);
|
||||
@@ -7821,10 +7821,10 @@ void CLASS parse_makernote_0xc634(int base, int uptag, unsigned dng_writer)
|
||||
stmread(imgdata.lens.makernotes.Lens,len, ifp);
|
||||
break;
|
||||
case 0x20100205:
|
||||
- imgdata.lens.makernotes.MaxAp4MinFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MinFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100206:
|
||||
- imgdata.lens.makernotes.MaxAp4MaxFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MaxFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100207:
|
||||
imgdata.lens.makernotes.MinFocal = (float)get2();
|
||||
@@ -7835,7 +7835,7 @@ void CLASS parse_makernote_0xc634(int base, int uptag, unsigned dng_writer)
|
||||
imgdata.lens.makernotes.MaxFocal = imgdata.lens.makernotes.MinFocal;
|
||||
break;
|
||||
case 0x2010020a:
|
||||
- imgdata.lens.makernotes.MaxAp4CurFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4CurFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100301:
|
||||
imgdata.lens.makernotes.TeleconverterID = fgetc(ifp) << 8;
|
||||
@@ -8144,7 +8144,7 @@ void CLASS parse_makernote_0xc634(int base, int uptag, unsigned dng_writer)
|
||||
lid = (((ushort)table_buf[2])<<8) |
|
||||
((ushort)table_buf[3]);
|
||||
imgdata.lens.makernotes.CurAp =
|
||||
- powf64(2.0f, ((float)lid/8.0f-1.0f)/2.0f);
|
||||
+ libraw_powf64(2.0f, ((float)lid/8.0f-1.0f)/2.0f);
|
||||
}
|
||||
break;
|
||||
case 1536:
|
||||
@@ -8675,7 +8675,7 @@ void CLASS parse_makernote (int base, int uptag)
|
||||
}
|
||||
break;
|
||||
case 0x1002:
|
||||
- imgdata.lens.makernotes.CurAp = powf64(2.0f, getreal(type)/2);
|
||||
+ imgdata.lens.makernotes.CurAp = libraw_powf64(2.0f, getreal(type)/2);
|
||||
break;
|
||||
case 0x20401112:
|
||||
imgdata.makernotes.olympus.OlympusCropID = get2();
|
||||
@@ -8709,10 +8709,10 @@ void CLASS parse_makernote (int base, int uptag)
|
||||
stmread(imgdata.lens.makernotes.Lens, len, ifp);
|
||||
break;
|
||||
case 0x20100205:
|
||||
- imgdata.lens.makernotes.MaxAp4MinFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MinFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100206:
|
||||
- imgdata.lens.makernotes.MaxAp4MaxFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4MaxFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100207:
|
||||
imgdata.lens.makernotes.MinFocal = (float)get2();
|
||||
@@ -8723,7 +8723,7 @@ void CLASS parse_makernote (int base, int uptag)
|
||||
imgdata.lens.makernotes.MaxFocal = imgdata.lens.makernotes.MinFocal;
|
||||
break;
|
||||
case 0x2010020a:
|
||||
- imgdata.lens.makernotes.MaxAp4CurFocal = powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4CurFocal = libraw_powf64(sqrt(2.0f), get2() / 256.0f);
|
||||
break;
|
||||
case 0x20100301:
|
||||
imgdata.lens.makernotes.TeleconverterID = fgetc(ifp) << 8;
|
||||
@@ -9150,7 +9150,7 @@ void CLASS parse_makernote (int base, int uptag)
|
||||
lid = (((ushort)table_buf[2])<<8) |
|
||||
((ushort)table_buf[3]);
|
||||
imgdata.lens.makernotes.CurAp =
|
||||
- powf64(2.0f, ((float)lid/8.0f-1.0f)/2.0f);
|
||||
+ libraw_powf64(2.0f, ((float)lid/8.0f-1.0f)/2.0f);
|
||||
}
|
||||
break;
|
||||
case 1536:
|
||||
@@ -9248,19 +9248,19 @@ void CLASS parse_makernote (int base, int uptag)
|
||||
{
|
||||
unsigned char cc;
|
||||
fread(&cc,1,1,ifp);
|
||||
- iso_speed = int(100.0 * powf64(2.0f,float(cc)/12.0-5.0));
|
||||
+ iso_speed = int(100.0 * libraw_powf64(2.0f,float(cc)/12.0-5.0));
|
||||
}
|
||||
if (tag == 4 && len > 26 && len < 35) {
|
||||
if ((i=(get4(),get2())) != 0x7fff && (!iso_speed || iso_speed == 65535))
|
||||
- iso_speed = 50 * powf64(2.0, i/32.0 - 4);
|
||||
+ iso_speed = 50 * libraw_powf64(2.0, i/32.0 - 4);
|
||||
#ifdef LIBRAW_LIBRARY_BUILD
|
||||
get4();
|
||||
#else
|
||||
if ((i=(get2(),get2())) != 0x7fff && !aperture)
|
||||
- aperture = powf64(2.0, i/64.0);
|
||||
+ aperture = libraw_powf64(2.0, i/64.0);
|
||||
#endif
|
||||
if ((i=get2()) != 0xffff && !shutter)
|
||||
- shutter = powf64(2.0, (short) i/-32.0);
|
||||
+ shutter = libraw_powf64(2.0, (short) i/-32.0);
|
||||
wbi = (get2(),get2());
|
||||
shot_order = (get2(),get2());
|
||||
}
|
||||
@@ -9854,7 +9854,7 @@ void CLASS parse_exif (int base)
|
||||
imgdata.lens.Lens[0] = 0;
|
||||
break;
|
||||
case 0x9205:
|
||||
- imgdata.lens.EXIF_MaxAp = powf64(2.0f, (getreal(type) / 2.0f));
|
||||
+ imgdata.lens.EXIF_MaxAp = libraw_powf64(2.0f, (getreal(type) / 2.0f));
|
||||
break;
|
||||
#endif
|
||||
case 33434: tiff_ifd[tiff_nifds-1].t_shutter =
|
||||
@@ -9869,11 +9869,11 @@ void CLASS parse_exif (int base)
|
||||
case 36868: get_timestamp(0); break;
|
||||
case 37377: if ((expo = -getreal(type)) < 128 && shutter == 0.)
|
||||
tiff_ifd[tiff_nifds-1].t_shutter =
|
||||
- shutter = powf64(2.0, expo);
|
||||
+ shutter = libraw_powf64(2.0, expo);
|
||||
break;
|
||||
case 37378: // 0x9202 ApertureValue
|
||||
if ((fabs(ape = getreal(type))<256.0) && (!aperture))
|
||||
- aperture = powf64(2.0, ape/2);
|
||||
+ aperture = libraw_powf64(2.0, ape/2);
|
||||
break;
|
||||
case 37385: flash_used = getreal(type); break;
|
||||
case 37386: focal_len = getreal(type); break;
|
||||
@@ -10769,7 +10769,7 @@ int CLASS parse_tiff_ifd (int base)
|
||||
imgdata.lens.Lens[0] = 0;
|
||||
break;
|
||||
case 0x9205:
|
||||
- imgdata.lens.EXIF_MaxAp = powf64(2.0f, (getreal(type) / 2.0f));
|
||||
+ imgdata.lens.EXIF_MaxAp = libraw_powf64(2.0f, (getreal(type) / 2.0f));
|
||||
break;
|
||||
// IB end
|
||||
#endif
|
||||
@@ -11804,22 +11804,22 @@ void CLASS parse_ciff (int offset, int length, int depth)
|
||||
thumb_length = len;
|
||||
}
|
||||
if (type == 0x1818) {
|
||||
- shutter = powf64(2.0f, -int_to_float((get4(),get4())));
|
||||
- aperture = powf64(2.0f, int_to_float(get4())/2);
|
||||
+ shutter = libraw_powf64(2.0f, -int_to_float((get4(),get4())));
|
||||
+ aperture = libraw_powf64(2.0f, int_to_float(get4())/2);
|
||||
#ifdef LIBRAW_LIBRARY_BUILD
|
||||
imgdata.lens.makernotes.CurAp = aperture;
|
||||
#endif
|
||||
}
|
||||
if (type == 0x102a) {
|
||||
// iso_speed = pow (2.0, (get4(),get2())/32.0 - 4) * 50;
|
||||
- iso_speed = powf64(2.0f, ((get2(),get2()) + get2())/32.0f - 5.0f) * 100.0f;
|
||||
+ iso_speed = libraw_powf64(2.0f, ((get2(),get2()) + get2())/32.0f - 5.0f) * 100.0f;
|
||||
#ifdef LIBRAW_LIBRARY_BUILD
|
||||
aperture = _CanonConvertAperture((get2(),get2()));
|
||||
imgdata.lens.makernotes.CurAp = aperture;
|
||||
#else
|
||||
- aperture = powf64(2.0, (get2(),(short)get2())/64.0);
|
||||
+ aperture = libraw_powf64(2.0, (get2(),(short)get2())/64.0);
|
||||
#endif
|
||||
- shutter = powf64(2.0,-((short)get2())/32.0);
|
||||
+ shutter = libraw_powf64(2.0,-((short)get2())/32.0);
|
||||
wbi = (get2(),get2());
|
||||
if (wbi > 17) wbi = 0;
|
||||
fseek (ifp, 32, SEEK_CUR);
|
||||
@@ -12024,8 +12024,8 @@ void CLASS parse_phase_one (int base)
|
||||
setPhaseOneFeatures(unique_id);
|
||||
break;
|
||||
case 0x0401:
|
||||
- if (type == 4) imgdata.lens.makernotes.CurAp = powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
- else imgdata.lens.makernotes.CurAp = powf64(2.0f, (getreal(type)/2.0f));
|
||||
+ if (type == 4) imgdata.lens.makernotes.CurAp = libraw_powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
+ else imgdata.lens.makernotes.CurAp = libraw_powf64(2.0f, (getreal(type)/2.0f));
|
||||
break;
|
||||
case 0x0403:
|
||||
if (type == 4) imgdata.lens.makernotes.CurFocal = int_to_float(data);
|
||||
@@ -12039,16 +12039,16 @@ void CLASS parse_phase_one (int base)
|
||||
break;
|
||||
case 0x0414:
|
||||
if (type == 4) {
|
||||
- imgdata.lens.makernotes.MaxAp4CurFocal = powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
+ imgdata.lens.makernotes.MaxAp4CurFocal = libraw_powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
} else {
|
||||
- imgdata.lens.makernotes.MaxAp4CurFocal = powf64(2.0f, (getreal(type) / 2.0f));
|
||||
+ imgdata.lens.makernotes.MaxAp4CurFocal = libraw_powf64(2.0f, (getreal(type) / 2.0f));
|
||||
}
|
||||
break;
|
||||
case 0x0415:
|
||||
if (type == 4) {
|
||||
- imgdata.lens.makernotes.MinAp4CurFocal = powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
+ imgdata.lens.makernotes.MinAp4CurFocal = libraw_powf64(2.0f, (int_to_float(data)/2.0f));
|
||||
} else {
|
||||
- imgdata.lens.makernotes.MinAp4CurFocal = powf64(2.0f, (getreal(type) / 2.0f));
|
||||
+ imgdata.lens.makernotes.MinAp4CurFocal = libraw_powf64(2.0f, (getreal(type) / 2.0f));
|
||||
}
|
||||
break;
|
||||
case 0x0416:
|
||||
@@ -14237,15 +14237,15 @@ void CLASS identify()
|
||||
case 18: iso_speed = 320; break;
|
||||
case 19: iso_speed = 400; break;
|
||||
}
|
||||
- shutter = powf64(2.0f, (((float)get4())/8.0f)) / 16000.0f;
|
||||
+ shutter = libraw_powf64(2.0f, (((float)get4())/8.0f)) / 16000.0f;
|
||||
FORC4 cam_mul[c ^ (c >> 1)] = get4();
|
||||
fseek (ifp, 88, SEEK_SET);
|
||||
- aperture = powf64(2.0f, ((float)get4())/16.0f);
|
||||
+ aperture = libraw_powf64(2.0f, ((float)get4())/16.0f);
|
||||
fseek (ifp, 112, SEEK_SET);
|
||||
focal_len = get4();
|
||||
#ifdef LIBRAW_LIBRARY_BUILD
|
||||
fseek (ifp, 104, SEEK_SET);
|
||||
- imgdata.lens.makernotes.MaxAp4CurFocal = powf64(2.0f, ((float)get4())/16.0f);
|
||||
+ imgdata.lens.makernotes.MaxAp4CurFocal = libraw_powf64(2.0f, ((float)get4())/16.0f);
|
||||
fseek (ifp, 124, SEEK_SET);
|
||||
stmread(imgdata.lens.makernotes.Lens, 32, ifp);
|
||||
imgdata.lens.makernotes.CameraMount = LIBRAW_MOUNT_Contax_N;
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="mesa"
|
||||
PKG_VERSION="19.0.3"
|
||||
PKG_SHA256="46a8b46bfbd3f8a3eccf3edcfa94e68f13bd6429b71ed8b57a24c6a0543c824e"
|
||||
PKG_VERSION="19.1.0"
|
||||
PKG_SHA256="0cb9a6dbc7019dd99be581488ff05ff56f49445cab82c28f0e610b2a4221620f"
|
||||
PKG_LICENSE="OSS"
|
||||
PKG_SITE="http://www.mesa3d.org/"
|
||||
PKG_URL="https://github.com/mesa3d/mesa/archive/mesa-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
|
||||
PKG_NAME="opengl-meson"
|
||||
PKG_ARCH="arm aarch64"
|
||||
PKG_LICENSE="nonfree"
|
||||
PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/filesystem/"
|
||||
case $MESON_FAMILY in
|
||||
8)
|
||||
PKG_VERSION="8-r5p1-02rel0-armhf"
|
||||
PKG_SHA256="717739c9f65f6782e3185aad09d01f228873315f70f9a58c0526b9e63a6e386f"
|
||||
;;
|
||||
6)
|
||||
PKG_VERSION="6-r5p1-02rel0-armhf"
|
||||
PKG_SHA256="de38a1fa23191bd5de5c85c66627d4537775ee4634b71baa8d0e241b8b9d4ba2"
|
||||
;;
|
||||
gxbb)
|
||||
if [ "$TARGET_ARCH" = "arm" ]; then
|
||||
PKG_VERSION="8-r5p1-02rel0-armhf"
|
||||
PKG_SHA256="717739c9f65f6782e3185aad09d01f228873315f70f9a58c0526b9e63a6e386f"
|
||||
else
|
||||
PKG_VERSION="gxbb-r5p1-01rel0"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_LONGDESC="OpenGL ES pre-compiled libraries for Mali GPUs found in Amlogic Meson SoCs."
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p $SYSROOT_PREFIX/usr/include
|
||||
cp -PR usr/include/* $SYSROOT_PREFIX/usr/include
|
||||
|
||||
mkdir -p $SYSROOT_PREFIX/usr/lib
|
||||
cp -PR usr/lib/libMali.so $SYSROOT_PREFIX/usr/lib
|
||||
|
||||
ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libEGL.so.1.4
|
||||
ln -sf libEGL.so.1.4 $SYSROOT_PREFIX/usr/lib/libEGL.so.1
|
||||
ln -sf libEGL.so.1 $SYSROOT_PREFIX/usr/lib/libEGL.so
|
||||
|
||||
ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so.1.1
|
||||
ln -sf libGLESv1_CM.so.1.1 $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so.1
|
||||
ln -sf libGLESv1_CM.so.1 $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so
|
||||
|
||||
ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libGLESv2.so.2.0
|
||||
ln -sf libGLESv2.so.2.0 $SYSROOT_PREFIX/usr/lib/libGLESv2.so.2
|
||||
ln -sf libGLESv2.so.2 $SYSROOT_PREFIX/usr/lib/libGLESv2.so
|
||||
|
||||
mkdir -p $INSTALL/usr/lib
|
||||
cp -PR usr/lib/libMali.so $INSTALL/usr/lib
|
||||
|
||||
ln -sf libMali.so $INSTALL/usr/lib/libEGL.so.1.4
|
||||
ln -sf libEGL.so.1.4 $INSTALL/usr/lib/libEGL.so.1
|
||||
ln -sf libEGL.so.1 $INSTALL/usr/lib/libEGL.so
|
||||
|
||||
ln -sf libMali.so $INSTALL/usr/lib/libGLESv1_CM.so.1.1
|
||||
ln -sf libGLESv1_CM.so.1.1 $INSTALL/usr/lib/libGLESv1_CM.so.1
|
||||
ln -sf libGLESv1_CM.so.1 $INSTALL/usr/lib/libGLESv1_CM.so
|
||||
|
||||
ln -sf libMali.so $INSTALL/usr/lib/libGLESv2.so.2.0
|
||||
ln -sf libGLESv2.so.2.0 $INSTALL/usr/lib/libGLESv2.so.2
|
||||
ln -sf libGLESv2.so.2 $INSTALL/usr/lib/libGLESv2.so
|
||||
}
|
||||
|
||||
post_install() {
|
||||
enable_service unbind-console.service
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
[Unit]
|
||||
Description=Unbind framebuffer console
|
||||
|
||||
ConditionPathExists=/sys/class/vtconsole/vtcon1/bind
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c 'echo 0 > /sys/class/vtconsole/vtcon1/bind'
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
PKG_NAME="Python2"
|
||||
# When changing PKG_VERSION remember to sync PKG_PYTHON_VERSION!
|
||||
PKG_VERSION="2.7.15"
|
||||
PKG_SHA256="22d9b1ac5b26135ad2b8c2901a9413537e08749a753356ee913c84dbd2df5574"
|
||||
PKG_VERSION="2.7.16"
|
||||
PKG_SHA256="f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7"
|
||||
PKG_LICENSE="OSS"
|
||||
PKG_SITE="http://www.python.org/"
|
||||
PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/${PKG_NAME::-1}-$PKG_VERSION.tar.xz"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
PKG_NAME="Python3"
|
||||
# When changing PKG_VERSION remember to sync PKG_PYTHON_VERSION!
|
||||
PKG_VERSION="3.7.2"
|
||||
PKG_SHA256="d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb"
|
||||
PKG_VERSION="3.7.3"
|
||||
PKG_SHA256="da60b54064d4cfcd9c26576f6df2690e62085123826cff2e667e72a91952d318"
|
||||
PKG_LICENSE="OSS"
|
||||
PKG_SITE="http://www.python.org/"
|
||||
PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/${PKG_NAME::-1}-$PKG_VERSION.tar.xz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="crazycat"
|
||||
PKG_VERSION="c59ee3624b7f6bf5bdaeec7c73c69ef4938d3952"
|
||||
PKG_SHA256="00b9fade221327e1aed8f06ef0477f2761b57cc5fe6310c4536e361b17a595d1"
|
||||
PKG_VERSION="532599d255411a24f93b585a92b1b0c49e2012f7"
|
||||
PKG_SHA256="0e3addc3562057a77edefdde0052a78aec145c4dd5b737b53dd25ce389b95093"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://bitbucket.org/CrazyCat/media_build"
|
||||
PKG_URL="https://bitbucket.org/CrazyCat/media_build/get/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
100
|
||||
- Initial add-on
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 67 KiB |
@@ -1,51 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="crazycat_aml"
|
||||
PKG_VERSION="835dc72da3ee63df7f4057bd0507887454c005d1"
|
||||
PKG_SHA256="3d68d368a9eda15688c6686caa854a045a753740ec93553d80a4bcfc14c2950a"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://bitbucket.org/CrazyCat/media_build"
|
||||
PKG_URL="https://bitbucket.org/CrazyCat/media_build/get/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain linux media_tree_cc_aml"
|
||||
PKG_NEED_UNPACK="$LINUX_DEPENDS media_tree_cc_aml"
|
||||
PKG_SECTION="driver.dvb"
|
||||
PKG_LONGDESC="DVB drivers from the latest kernel"
|
||||
|
||||
PKG_IS_ADDON="embedded"
|
||||
PKG_IS_KERNEL_PKG="yes"
|
||||
PKG_ADDON_IS_STANDALONE="yes"
|
||||
PKG_ADDON_NAME="DVB drivers from the latest kernel"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
PKG_ADDON_VERSION="${ADDON_VERSION}.${PKG_REV}"
|
||||
|
||||
pre_make_target() {
|
||||
export KERNEL_VER=$(get_module_dir)
|
||||
export LDFLAGS=""
|
||||
}
|
||||
|
||||
make_target() {
|
||||
cp -RP $(get_build_dir media_tree_cc_aml)/* $PKG_BUILD/linux
|
||||
|
||||
# compile modules
|
||||
echo "obj-y += video_dev/" >> "$PKG_BUILD/linux/drivers/media/platform/meson/Makefile"
|
||||
echo "obj-y += wetek/" >> "$PKG_BUILD/linux/drivers/media/platform/meson/Makefile"
|
||||
|
||||
# make config all
|
||||
kernel_make VER=$KERNEL_VER SRCDIR=$(kernel_path) allyesconfig
|
||||
|
||||
# deactivate several build options
|
||||
sed '/CONFIG_VIDEO_S5C73M3=m/d' -i $PKG_BUILD/v4l/.config
|
||||
|
||||
# enable AML drivers
|
||||
echo "CONFIG_IR_MESON=m" >> $PKG_BUILD/v4l/.config
|
||||
echo "CONFIG_V4L_AMLOGIC_VIDEO=m" >> $PKG_BUILD/v4l/.config
|
||||
echo "CONFIG_VIDEOBUF_RESOURCE=m" >> $PKG_BUILD/v4l/.config
|
||||
|
||||
kernel_make VER=$KERNEL_VER SRCDIR=$(kernel_path)
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
install_driver_addon_files "$PKG_BUILD/v4l/"
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
[Patch] without this patch you need to install libproc-processtable-perl at host system
|
||||
|
||||
--- a/v4l/Makefile
|
||||
+++ b/v4l/Makefile
|
||||
@@ -51,7 +51,7 @@
|
||||
@echo Kernel build directory is $(OUTDIR)
|
||||
$(MAKE) -C ../linux apply_patches
|
||||
$(MAKE) -C $(OUTDIR) SUBDIRS=$(PWD) $(MYCFLAGS) modules
|
||||
- ./scripts/rmmod.pl check
|
||||
+# ./scripts/rmmod.pl check
|
||||
# $(MAKE) checkpatch
|
||||
|
||||
mismatch:: prepare firmware
|
||||
@@ -1,13 +0,0 @@
|
||||
--- a/v4l/scripts/make_kconfig.pl
|
||||
+++ b/v4l/scripts/make_kconfig.pl
|
||||
@@ -626,6 +626,10 @@ ($$)
|
||||
close OUT;
|
||||
|
||||
# These options should default to off
|
||||
+disable_config('MEDIA_ANALOG_TV_SUPPORT');
|
||||
+disable_config('MEDIA_CAMERA_SUPPORT');
|
||||
+disable_config('MEDIA_CEC_SUPPORT');
|
||||
+disable_config('SOC_CAMERA');
|
||||
disable_config('DVB_AV7110_FIRMWARE');
|
||||
disable_config('DVB_CINERGYT2_TUNING');
|
||||
disable_config('VIDEO_HELPER_CHIPS_AUTO');
|
||||
@@ -1,7 +0,0 @@
|
||||
--- /dev/null
|
||||
+++ b/v4l/config-mycompat.h
|
||||
@@ -0,0 +1,3 @@
|
||||
+#undef NEED_PFN_TO_PHYS
|
||||
+#undef NEED_WRITEL_RELAXED
|
||||
+#undef NEED_PM_RUNTIME_GET
|
||||
--
|
||||
@@ -1,2 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="media_tree"
|
||||
PKG_VERSION="2019-01-10-15d90a6ae98e"
|
||||
PKG_SHA256="cf170bfc0e78959c6b289db6f4cf7ec7b400dd4704f45909e1535a935702e8bc"
|
||||
PKG_VERSION="2017-08-20-3b6471c7becd"
|
||||
PKG_SHA256="7fa8d0be68991d1bc6a244888cf2308d2f6152748c1d417efa0784d101ba262b"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://git.linuxtv.org/media_tree.git"
|
||||
PKG_URL="http://linuxtv.org/downloads/drivers/linux-media-${PKG_VERSION}.tar.bz2"
|
||||
@@ -15,7 +15,9 @@ PKG_TOOLCHAIN="manual"
|
||||
unpack() {
|
||||
mkdir -p $PKG_BUILD/
|
||||
tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2 -C $PKG_BUILD/
|
||||
}
|
||||
|
||||
post_unpack() {
|
||||
# hack/workaround for borked upstream kernel/media_build
|
||||
# without removing atomisp there a lot additional includes that
|
||||
# slowdown build process after modpost from 3min to 6min
|
||||
|
||||
@@ -2,7 +2,7 @@ Combined patches from https://github.com/b-rad-NDi/Ubuntu-media-tree-kernel-buil
|
||||
to support all kind of Hauppauge DVB cards.
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
index 0e1f5da..409db8e 100644
|
||||
index 99c6289..ceaf617 100644
|
||||
--- a/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
+++ b/drivers/media/dvb-frontends/lgdt3306a.c
|
||||
@@ -855,6 +855,7 @@ static int lgdt3306a_fe_sleep(struct dvb_frontend *fe)
|
||||
@@ -48,7 +48,7 @@ index 0e1f5da..409db8e 100644
|
||||
return ret;
|
||||
}
|
||||
diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
|
||||
index 324493e..4d43424 100644
|
||||
index 17301c6..9b021ac 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168.c
|
||||
+++ b/drivers/media/dvb-frontends/si2168.c
|
||||
@@ -18,6 +18,10 @@
|
||||
@@ -420,7 +420,7 @@ index 324493e..4d43424 100644
|
||||
cmd.wlen = 6;
|
||||
cmd.rlen = 4;
|
||||
ret = si2168_cmd_execute(client, &cmd);
|
||||
@@ -714,6 +960,11 @@ static const struct dvb_frontend_ops si2168_ops = {
|
||||
@@ -717,6 +963,11 @@ static const struct dvb_frontend_ops si2168_ops = {
|
||||
.set_frontend = si2168_set_frontend,
|
||||
|
||||
.read_status = si2168_read_status,
|
||||
@@ -433,40 +433,30 @@ index 324493e..4d43424 100644
|
||||
|
||||
static int si2168_probe(struct i2c_client *client,
|
||||
diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
|
||||
index b168bf3..1f06119 100644
|
||||
index f071a94..14ce009 100644
|
||||
--- a/drivers/media/i2c/cx25840/cx25840-core.c
|
||||
+++ b/drivers/media/i2c/cx25840/cx25840-core.c
|
||||
@@ -684,14 +684,14 @@ static void cx23885_initialize(struct i2c_client *client)
|
||||
*/
|
||||
cx25840_write4(client, 0x404, 0x0010253e);
|
||||
|
||||
- /* CC on - Undocumented Register */
|
||||
+ /* CC on - VBI_LINE_CTRL3, FLD_VBI_MD_LINE12 */
|
||||
cx25840_write(client, state->vbi_regs_offset + 0x42f, 0x66);
|
||||
|
||||
/* HVR-1250 / HVR1850 DIF related */
|
||||
/* Power everything up */
|
||||
cx25840_write4(client, 0x130, 0x0);
|
||||
|
||||
- /* Undocumented */
|
||||
+ /* SRC_COMB_CFG */
|
||||
if (is_cx23888(state))
|
||||
cx25840_write4(client, 0x454, 0x6628021F);
|
||||
else
|
||||
@@ -1127,16 +1127,25 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
|
||||
@@ -1495,23 +1495,25 @@ static int set_input(struct i2c_client *client,
|
||||
cx25840_write4(client, 0x410, 0xffff0dbf);
|
||||
cx25840_write4(client, 0x414, 0x00137d03);
|
||||
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x42c, 0x42600000);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x430, 0x0000039b);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x438, 0x00000000);
|
||||
-
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x440, 0xF8E3E824);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x444, 0x401040dc);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x448, 0xcd3f02a0);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x44c, 0x161f1000);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x450, 0x00000802);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x42c,
|
||||
- 0x42600000);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x430,
|
||||
- 0x0000039b);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x438,
|
||||
- 0x00000000);
|
||||
-
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x440,
|
||||
- 0xF8E3E824);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x444,
|
||||
- 0x401040dc);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x448,
|
||||
- 0xcd3f02a0);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x44c,
|
||||
- 0x161f1000);
|
||||
- cx25840_write4(client, state->vbi_regs_offset + 0x450,
|
||||
- 0x00000802);
|
||||
+ /* These are not VBI controls */
|
||||
+ if (is_cx23888(state)) {
|
||||
+ /* 888 MISC_TIM_CTRL */
|
||||
@@ -486,17 +476,9 @@ index b168bf3..1f06119 100644
|
||||
+ /* 888 HTL_CTRL */
|
||||
+ cx25840_write4(client, 0x450, 0x00000802);
|
||||
+ }
|
||||
|
||||
cx25840_write4(client, 0x91c, 0x01000000);
|
||||
cx25840_write4(client, 0x8e0, 0x03063870);
|
||||
cx25840_write4(client, 0x8d4, 0x7FFF0024);
|
||||
@@ -1743,6 +1752,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
if (is_cx2388x(state) || is_cx231xx(state))
|
||||
return 0;
|
||||
|
||||
+ /* PIN_CTRL1 */
|
||||
if (enable) {
|
||||
v = cx25840_read(client, 0x115) | 0x0c;
|
||||
cx25840_write(client, 0x115, v);
|
||||
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
index ed3210d..9598b99 100644
|
||||
--- a/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
@@ -589,10 +571,10 @@ index ed3210d..9598b99 100644
|
||||
.vmux = CX25840_VIN7_CH3 |
|
||||
CX25840_VIN4_CH2 |
|
||||
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
index 0d0929c..0366c4d 100644
|
||||
index e2e63f0..aea7738 100644
|
||||
--- a/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
@@ -2382,6 +2382,16 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
@@ -2383,6 +2383,16 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
goto frontend_detach;
|
||||
}
|
||||
port->i2c_client_tuner = client_tuner;
|
||||
@@ -609,7 +591,7 @@ index 0d0929c..0366c4d 100644
|
||||
break;
|
||||
|
||||
/* port c - terrestrial/cable */
|
||||
@@ -2471,6 +2481,16 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
@@ -2472,6 +2482,16 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
goto frontend_detach;
|
||||
}
|
||||
port->i2c_client_tuner = client_tuner;
|
||||
@@ -626,7 +608,7 @@ index 0d0929c..0366c4d 100644
|
||||
break;
|
||||
|
||||
/* port c - terrestrial/cable */
|
||||
@@ -2542,6 +2562,11 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
@@ -2543,6 +2563,11 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
goto frontend_detach;
|
||||
}
|
||||
port->i2c_client_tuner = client_tuner;
|
||||
@@ -768,7 +750,7 @@ index 168178c..6d6e7fb 100644
|
||||
break;
|
||||
default:
|
||||
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
|
||||
index d389f1f..b93f333 100644
|
||||
index d389f1f..2563ab4 100644
|
||||
--- a/drivers/media/tuners/si2157.c
|
||||
+++ b/drivers/media/tuners/si2157.c
|
||||
@@ -1,5 +1,5 @@
|
||||
@@ -833,7 +815,25 @@ index d389f1f..b93f333 100644
|
||||
/* power up */
|
||||
if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
|
||||
memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);
|
||||
@@ -230,6 +235,45 @@ skip_fw_download:
|
||||
@@ -138,6 +143,7 @@ static int si2157_init(struct dvb_frontend *fe)
|
||||
chip_id = cmd.args[1] << 24 | cmd.args[2] << 16 | cmd.args[3] << 8 |
|
||||
cmd.args[4] << 0;
|
||||
|
||||
+ #define SI2177_A30 ('A' << 24 | 77 << 16 | '3' << 8 | '0' << 0)
|
||||
#define SI2158_A20 ('A' << 24 | 58 << 16 | '2' << 8 | '0' << 0)
|
||||
#define SI2148_A20 ('A' << 24 | 48 << 16 | '2' << 8 | '0' << 0)
|
||||
#define SI2157_A30 ('A' << 24 | 57 << 16 | '3' << 8 | '0' << 0)
|
||||
@@ -153,6 +159,9 @@ static int si2157_init(struct dvb_frontend *fe)
|
||||
case SI2141_A10:
|
||||
fw_name = SI2141_A10_FIRMWARE;
|
||||
break;
|
||||
+ case SI2177_A30:
|
||||
+ fw_name = SI2157_A30_FIRMWARE;
|
||||
+ break;
|
||||
case SI2157_A30:
|
||||
case SI2147_A30:
|
||||
case SI2146_A10:
|
||||
@@ -230,6 +239,45 @@ skip_fw_download:
|
||||
|
||||
dev_info(&client->dev, "firmware version: %c.%c.%d\n",
|
||||
cmd.args[6], cmd.args[7], cmd.args[8]);
|
||||
@@ -879,7 +879,7 @@ index d389f1f..b93f333 100644
|
||||
warm:
|
||||
/* init statistics in order signal app which are supported */
|
||||
c->strength.len = 1;
|
||||
@@ -274,6 +318,84 @@ err:
|
||||
@@ -274,6 +322,84 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -964,7 +964,7 @@ index d389f1f..b93f333 100644
|
||||
static int si2157_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct i2c_client *client = fe->tuner_priv;
|
||||
@@ -344,7 +466,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -344,7 +470,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
@@ -973,7 +973,7 @@ index d389f1f..b93f333 100644
|
||||
if (if_frequency != dev->if_frequency) {
|
||||
memcpy(cmd.args, "\x14\x00\x06\x07", 4);
|
||||
cmd.args[4] = (if_frequency / 1000) & 0xff;
|
||||
@@ -358,7 +480,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -358,7 +484,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
dev->if_frequency = if_frequency;
|
||||
}
|
||||
|
||||
@@ -982,7 +982,7 @@ index d389f1f..b93f333 100644
|
||||
memcpy(cmd.args, "\x41\x00\x00\x00\x00\x00\x00\x00", 8);
|
||||
cmd.args[4] = (c->frequency >> 0) & 0xff;
|
||||
cmd.args[5] = (c->frequency >> 8) & 0xff;
|
||||
@@ -370,24 +492,298 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -370,24 +496,298 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
@@ -991,15 +991,15 @@ index d389f1f..b93f333 100644
|
||||
+
|
||||
+ si2157_tune_wait(client, 1); /* wait to complete, ignore any errors */
|
||||
+
|
||||
+ return 0;
|
||||
+err:
|
||||
return 0;
|
||||
err:
|
||||
+ dev->bandwidth = 0;
|
||||
+ dev->frequency = 0;
|
||||
+ dev->if_frequency = 0;
|
||||
+ dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int si2157_set_analog_params(struct dvb_frontend *fe,
|
||||
+ struct analog_parameters *params)
|
||||
+{
|
||||
@@ -1202,15 +1202,15 @@ index d389f1f..b93f333 100644
|
||||
+
|
||||
+ si2157_tune_wait(client, 0); /* wait to complete, ignore any errors */
|
||||
+
|
||||
return 0;
|
||||
err:
|
||||
+ return 0;
|
||||
+err:
|
||||
+ dev->bandwidth = 0;
|
||||
+ dev->frequency = 0;
|
||||
+ dev->if_frequency = 0;
|
||||
dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int si2157_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
||||
+{
|
||||
+ struct i2c_client *client = fe->tuner_priv;
|
||||
@@ -1283,7 +1283,7 @@ index d389f1f..b93f333 100644
|
||||
.frequency_min_hz = 42 * MHz,
|
||||
.frequency_max_hz = 870 * MHz,
|
||||
},
|
||||
@@ -395,7 +791,12 @@ static const struct dvb_tuner_ops si2157_ops = {
|
||||
@@ -395,7 +795,12 @@ static const struct dvb_tuner_ops si2157_ops = {
|
||||
.init = si2157_init,
|
||||
.sleep = si2157_sleep,
|
||||
.set_params = si2157_set_params,
|
||||
@@ -1297,7 +1297,7 @@ index d389f1f..b93f333 100644
|
||||
};
|
||||
|
||||
static void si2157_stat_work(struct work_struct *work)
|
||||
@@ -455,7 +856,7 @@ static int si2157_probe(struct i2c_client *client,
|
||||
@@ -455,7 +860,7 @@ static int si2157_probe(struct i2c_client *client,
|
||||
cmd.wlen = 0;
|
||||
cmd.rlen = 1;
|
||||
ret = si2157_cmd_execute(client, &cmd);
|
||||
@@ -1306,8 +1306,21 @@ index d389f1f..b93f333 100644
|
||||
goto err_kfree;
|
||||
|
||||
memcpy(&fe->ops.tuner_ops, &si2157_ops, sizeof(struct dvb_tuner_ops));
|
||||
@@ -529,6 +934,7 @@ static const struct i2c_device_id si2157_id_table[] = {
|
||||
{"si2157", SI2157_CHIPTYPE_SI2157},
|
||||
{"si2146", SI2157_CHIPTYPE_SI2146},
|
||||
{"si2141", SI2157_CHIPTYPE_SI2141},
|
||||
+ {"si2177", SI2157_CHIPTYPE_SI2177},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, si2157_id_table);
|
||||
@@ -550,3 +956,4 @@ MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_FIRMWARE(SI2158_A20_FIRMWARE);
|
||||
MODULE_FIRMWARE(SI2141_A10_FIRMWARE);
|
||||
+MODULE_FIRMWARE(SI2157_A30_FIRMWARE);
|
||||
diff --git a/drivers/media/tuners/si2157_priv.h b/drivers/media/tuners/si2157_priv.h
|
||||
index 50f8630..1e5ce5b 100644
|
||||
index 50f8630..84ed808 100644
|
||||
--- a/drivers/media/tuners/si2157_priv.h
|
||||
+++ b/drivers/media/tuners/si2157_priv.h
|
||||
@@ -37,6 +37,8 @@ struct si2157_dev {
|
||||
@@ -1319,11 +1332,26 @@ index 50f8630..1e5ce5b 100644
|
||||
struct delayed_work stat_work;
|
||||
|
||||
#if defined(CONFIG_MEDIA_CONTROLLER)
|
||||
@@ -50,6 +52,7 @@ struct si2157_dev {
|
||||
#define SI2157_CHIPTYPE_SI2157 0
|
||||
#define SI2157_CHIPTYPE_SI2146 1
|
||||
#define SI2157_CHIPTYPE_SI2141 2
|
||||
+#define SI2157_CHIPTYPE_SI2177 3
|
||||
|
||||
/* firmware command struct */
|
||||
#define SI2157_ARGLEN 30
|
||||
@@ -61,5 +64,5 @@ struct si2157_cmd {
|
||||
|
||||
#define SI2158_A20_FIRMWARE "dvb-tuner-si2158-a20-01.fw"
|
||||
#define SI2141_A10_FIRMWARE "dvb-tuner-si2141-a10-01.fw"
|
||||
-
|
||||
+#define SI2157_A30_FIRMWARE "dvb-tuner-si2157-a30-05.fw"
|
||||
#endif
|
||||
diff --git a/drivers/media/usb/cx231xx/cx231xx-avcore.c b/drivers/media/usb/cx231xx/cx231xx-avcore.c
|
||||
index fdd3c22..25aa7bb 100644
|
||||
index d417b5f..f575ae0 100644
|
||||
--- a/drivers/media/usb/cx231xx/cx231xx-avcore.c
|
||||
+++ b/drivers/media/usb/cx231xx/cx231xx-avcore.c
|
||||
@@ -599,14 +599,27 @@ int cx231xx_set_video_input_mux(struct cx231xx *dev, u8 input)
|
||||
@@ -587,14 +587,27 @@ int cx231xx_set_video_input_mux(struct cx231xx *dev, u8 input)
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@@ -1354,7 +1382,7 @@ index fdd3c22..25aa7bb 100644
|
||||
|
||||
break;
|
||||
default:
|
||||
@@ -1205,12 +1218,22 @@ int cx231xx_set_audio_decoder_input(struct cx231xx *dev,
|
||||
@@ -1193,12 +1206,22 @@ int cx231xx_set_audio_decoder_input(struct cx231xx *dev,
|
||||
cx231xx_set_field(FLD_SIF_EN, 0));
|
||||
break;
|
||||
default:
|
||||
@@ -1381,10 +1409,10 @@ index fdd3c22..25aa7bb 100644
|
||||
break;
|
||||
|
||||
diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
index 0d451c4..d5e51a5 100644
|
||||
index f882047..77c118b 100644
|
||||
--- a/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
+++ b/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
@@ -1293,7 +1293,7 @@ int cx231xx_s_frequency(struct file *file, void *priv,
|
||||
@@ -1281,7 +1281,7 @@ int cx231xx_s_frequency(struct file *file, void *priv,
|
||||
struct cx231xx_fh *fh = priv;
|
||||
struct cx231xx *dev = fh->dev;
|
||||
struct v4l2_frequency new_freq = *f;
|
||||
@@ -1393,7 +1421,7 @@ index 0d451c4..d5e51a5 100644
|
||||
u32 if_frequency = 5400000;
|
||||
|
||||
dev_dbg(dev->dev,
|
||||
@@ -1310,14 +1310,30 @@ int cx231xx_s_frequency(struct file *file, void *priv,
|
||||
@@ -1298,14 +1298,30 @@ int cx231xx_s_frequency(struct file *file, void *priv,
|
||||
/* set pre channel change settings in DIF first */
|
||||
rc = cx231xx_tuner_pre_channel_change(dev);
|
||||
|
||||
@@ -1428,7 +1456,7 @@ index 0d451c4..d5e51a5 100644
|
||||
if (dev->norm & (V4L2_STD_MN | V4L2_STD_NTSC_443))
|
||||
if_frequency = 5400000; /*5.4MHz */
|
||||
else if (dev->norm & V4L2_STD_B)
|
||||
@@ -1584,8 +1600,19 @@ int cx231xx_querycap(struct file *file, void *priv,
|
||||
@@ -1572,8 +1588,19 @@ int cx231xx_querycap(struct file *file, void *priv,
|
||||
else
|
||||
cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE;
|
||||
}
|
||||
@@ -1449,7 +1477,7 @@ index 0d451c4..d5e51a5 100644
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_READWRITE |
|
||||
V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VIDEO_CAPTURE |
|
||||
V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
|
||||
@@ -2191,10 +2218,20 @@ static void cx231xx_vdev_init(struct cx231xx *dev,
|
||||
@@ -2179,10 +2206,20 @@ static void cx231xx_vdev_init(struct cx231xx *dev,
|
||||
|
||||
video_set_drvdata(vfd, dev);
|
||||
if (dev->tuner_type == TUNER_ABSENT) {
|
||||
@@ -1474,6 +1502,582 @@ index 0d451c4..d5e51a5 100644
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/media/usb/pvrusb2/Kconfig b/drivers/media/usb/pvrusb2/Kconfig
|
||||
index 64f9df0..e6a4f73 100644
|
||||
--- a/drivers/media/usb/pvrusb2/Kconfig
|
||||
+++ b/drivers/media/usb/pvrusb2/Kconfig
|
||||
@@ -41,6 +41,8 @@ config VIDEO_PVRUSB2_DVB
|
||||
select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select DVB_TDA10048 if MEDIA_SUBDRV_AUTOSELECT
|
||||
+ select DVB_LGDT3306A if MEDIA_SUBDRV_AUTOSELECT
|
||||
+ select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_SIMPLE if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_TDA8290 if MEDIA_SUBDRV_AUTOSELECT
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-cx2584x-v4l.c b/drivers/media/usb/pvrusb2/pvrusb2-cx2584x-v4l.c
|
||||
index d5bec0f..36016ab 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-cx2584x-v4l.c
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-cx2584x-v4l.c
|
||||
@@ -111,10 +111,35 @@ static const struct routing_scheme routing_defav400 = {
|
||||
.cnt = ARRAY_SIZE(routing_schemeav400),
|
||||
};
|
||||
|
||||
+static const struct routing_scheme_item routing_scheme160xxx[] = {
|
||||
+ [PVR2_CVAL_INPUT_TV] = {
|
||||
+ .vid = CX25840_COMPOSITE7,
|
||||
+ .aud = CX25840_AUDIO8,
|
||||
+ },
|
||||
+ [PVR2_CVAL_INPUT_RADIO] = {
|
||||
+ .vid = CX25840_COMPOSITE4,
|
||||
+ .aud = CX25840_AUDIO6,
|
||||
+ },
|
||||
+ [PVR2_CVAL_INPUT_COMPOSITE] = {
|
||||
+ .vid = CX25840_COMPOSITE3,
|
||||
+ .aud = CX25840_AUDIO_SERIAL,
|
||||
+ },
|
||||
+ [PVR2_CVAL_INPUT_SVIDEO] = {
|
||||
+ .vid = CX25840_SVIDEO1,
|
||||
+ .aud = CX25840_AUDIO_SERIAL,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static const struct routing_scheme routing_def160xxx = {
|
||||
+ .def = routing_scheme160xxx,
|
||||
+ .cnt = ARRAY_SIZE(routing_scheme160xxx),
|
||||
+};
|
||||
+
|
||||
static const struct routing_scheme *routing_schemes[] = {
|
||||
[PVR2_ROUTING_SCHEME_HAUPPAUGE] = &routing_def0,
|
||||
[PVR2_ROUTING_SCHEME_GOTVIEW] = &routing_defgv,
|
||||
[PVR2_ROUTING_SCHEME_AV400] = &routing_defav400,
|
||||
+ [PVR2_ROUTING_SCHEME_HAUP160XXX] = &routing_def160xxx,
|
||||
};
|
||||
|
||||
void pvr2_cx25840_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-devattr.c b/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
|
||||
index 06de1c8..97b4fc8 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
|
||||
@@ -37,6 +37,9 @@ pvr2_device_desc structures.
|
||||
#include "tda18271.h"
|
||||
#include "tda8290.h"
|
||||
#include "tuner-simple.h"
|
||||
+#include "si2157.h"
|
||||
+#include "lgdt3306a.h"
|
||||
+#include "si2168.h"
|
||||
#endif
|
||||
|
||||
|
||||
@@ -188,10 +191,10 @@ static struct lgdt330x_config pvr2_lgdt3303_config = {
|
||||
|
||||
static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config,
|
||||
- 0x0e,
|
||||
- &adap->channel.hdw->i2c_adap);
|
||||
- if (adap->fe)
|
||||
+ adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config,
|
||||
+ 0x0e,
|
||||
+ &adap->channel.hdw->i2c_adap);
|
||||
+ if (adap->fe[0])
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
@@ -199,7 +202,7 @@ static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap)
|
||||
|
||||
static int pvr2_lgh06xf_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- dvb_attach(simple_tuner_attach, adap->fe,
|
||||
+ dvb_attach(simple_tuner_attach, adap->fe[0],
|
||||
&adap->channel.hdw->i2c_adap, 0x61,
|
||||
TUNER_LG_TDVS_H06XF);
|
||||
|
||||
@@ -248,10 +251,10 @@ static struct lgdt330x_config pvr2_lgdt3302_config = {
|
||||
|
||||
static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config,
|
||||
+ adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config,
|
||||
0x0e,
|
||||
&adap->channel.hdw->i2c_adap);
|
||||
- if (adap->fe)
|
||||
+ if (adap->fe[0])
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
@@ -259,7 +262,7 @@ static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap)
|
||||
|
||||
static int pvr2_fcv1236d_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- dvb_attach(simple_tuner_attach, adap->fe,
|
||||
+ dvb_attach(simple_tuner_attach, adap->fe[0],
|
||||
&adap->channel.hdw->i2c_adap, 0x61,
|
||||
TUNER_PHILIPS_FCV1236D);
|
||||
|
||||
@@ -335,9 +338,9 @@ static struct tda18271_config hauppauge_tda18271_dvb_config = {
|
||||
|
||||
static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- adap->fe = dvb_attach(tda10048_attach, &hauppauge_tda10048_config,
|
||||
+ adap->fe[0] = dvb_attach(tda10048_attach, &hauppauge_tda10048_config,
|
||||
&adap->channel.hdw->i2c_adap);
|
||||
- if (adap->fe)
|
||||
+ if (adap->fe[0])
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
@@ -345,10 +348,10 @@ static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap)
|
||||
|
||||
static int pvr2_73xxx_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- dvb_attach(tda829x_attach, adap->fe,
|
||||
+ dvb_attach(tda829x_attach, adap->fe[0],
|
||||
&adap->channel.hdw->i2c_adap, 0x42,
|
||||
&tda829x_no_probe);
|
||||
- dvb_attach(tda18271_attach, adap->fe, 0x60,
|
||||
+ dvb_attach(tda18271_attach, adap->fe[0], 0x60,
|
||||
&adap->channel.hdw->i2c_adap,
|
||||
&hauppauge_tda18271_dvb_config);
|
||||
|
||||
@@ -433,9 +436,9 @@ static struct tda18271_config hauppauge_tda18271_config = {
|
||||
|
||||
static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- adap->fe = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config,
|
||||
+ adap->fe[0] = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config,
|
||||
&adap->channel.hdw->i2c_adap);
|
||||
- if (adap->fe)
|
||||
+ if (adap->fe[0])
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
@@ -443,9 +446,9 @@ static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap)
|
||||
|
||||
static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- adap->fe = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config,
|
||||
+ adap->fe[0] = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config,
|
||||
&adap->channel.hdw->i2c_adap);
|
||||
- if (adap->fe)
|
||||
+ if (adap->fe[0])
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
@@ -453,10 +456,10 @@ static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap)
|
||||
|
||||
static int pvr2_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- dvb_attach(tda829x_attach, adap->fe,
|
||||
+ dvb_attach(tda829x_attach, adap->fe[0],
|
||||
&adap->channel.hdw->i2c_adap, 0x42,
|
||||
&tda829x_no_probe);
|
||||
- dvb_attach(tda18271_attach, adap->fe, 0x60,
|
||||
+ dvb_attach(tda18271_attach, adap->fe[0], 0x60,
|
||||
&adap->channel.hdw->i2c_adap,
|
||||
&hauppauge_tda18271_config);
|
||||
|
||||
@@ -525,7 +528,164 @@ static const struct pvr2_device_desc pvr2_device_751xx = {
|
||||
#endif
|
||||
};
|
||||
|
||||
+/*------------------------------------------------------------------------*/
|
||||
+/* Hauppauge PVR-USB2 Model 160000 / 160111 -- HVR-1955 / HVR-1975 */
|
||||
+
|
||||
+#ifdef CONFIG_VIDEO_PVRUSB2_DVB
|
||||
+static int pvr2_si2157_attach(struct pvr2_dvb_adapter *adap);
|
||||
+static int pvr2_si2168_attach(struct pvr2_dvb_adapter *adap);
|
||||
+static int pvr2_dual_fe_attach(struct pvr2_dvb_adapter *adap);
|
||||
+static int pvr2_lgdt3306a_attach(struct pvr2_dvb_adapter *adap);
|
||||
+
|
||||
+static const struct pvr2_dvb_props pvr2_160000_dvb_props = {
|
||||
+ .frontend_attach = pvr2_dual_fe_attach,
|
||||
+ .tuner_attach = pvr2_si2157_attach,
|
||||
+};
|
||||
+static const struct pvr2_dvb_props pvr2_160111_dvb_props = {
|
||||
+ .frontend_attach = pvr2_lgdt3306a_attach,
|
||||
+ .tuner_attach = pvr2_si2157_attach,
|
||||
+};
|
||||
+
|
||||
+static int pvr2_si2157_attach(struct pvr2_dvb_adapter *adap)
|
||||
+{
|
||||
+ struct si2157_config si2157_config = {};
|
||||
+
|
||||
+ si2157_config.inversion = 1;
|
||||
+ si2157_config.fe = adap->fe[0];
|
||||
+
|
||||
+ adap->i2c_client_tuner = dvb_module_probe("si2157", "si2177",
|
||||
+ &adap->channel.hdw->i2c_adap,
|
||||
+ 0x60, &si2157_config);
|
||||
+
|
||||
+ if (!adap->i2c_client_tuner)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int pvr2_si2168_attach(struct pvr2_dvb_adapter *adap)
|
||||
+{
|
||||
+ struct si2168_config si2168_config = {};
|
||||
+ struct i2c_adapter *adapter;
|
||||
+
|
||||
+ pr_debug("%s()\n", __func__);
|
||||
+
|
||||
+ si2168_config.fe = &adap->fe[1];
|
||||
+ si2168_config.i2c_adapter = &adapter;
|
||||
+ si2168_config.ts_mode = SI2168_TS_PARALLEL; /*2, 1-serial, 2-parallel.*/
|
||||
+ si2168_config.ts_clock_gapped = 1; /*0-disabled, 1-enabled.*/
|
||||
+ si2168_config.ts_clock_inv = 0; /*0-not-invert, 1-invert*/
|
||||
+ si2168_config.spectral_inversion = 1; /*0-not-invert, 1-invert*/
|
||||
+
|
||||
+ adap->i2c_client_demod[1] = dvb_module_probe("si2168", NULL,
|
||||
+ &adap->channel.hdw->i2c_adap,
|
||||
+ 0x64, &si2168_config);
|
||||
+
|
||||
+ if (!adap->i2c_client_demod[1])
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int pvr2_lgdt3306a_attach(struct pvr2_dvb_adapter *adap)
|
||||
+{
|
||||
+ struct lgdt3306a_config lgdt3306a_config;
|
||||
+ struct i2c_adapter *adapter;
|
||||
+
|
||||
+ pr_debug("%s()\n", __func__);
|
||||
+
|
||||
+ lgdt3306a_config.fe = &adap->fe[0];
|
||||
+ lgdt3306a_config.i2c_adapter = &adapter;
|
||||
+ lgdt3306a_config.deny_i2c_rptr = 1;
|
||||
+ lgdt3306a_config.spectral_inversion = 1;
|
||||
+ lgdt3306a_config.qam_if_khz = 4000;
|
||||
+ lgdt3306a_config.vsb_if_khz = 3250;
|
||||
+ lgdt3306a_config.mpeg_mode = LGDT3306A_MPEG_PARALLEL;
|
||||
+ lgdt3306a_config.tpclk_edge = LGDT3306A_TPCLK_FALLING_EDGE;
|
||||
+ lgdt3306a_config.tpvalid_polarity = LGDT3306A_TP_VALID_LOW;
|
||||
+ lgdt3306a_config.xtalMHz = 25, /* demod clock MHz; 24/25 supported */
|
||||
+
|
||||
+ adap->i2c_client_demod[0] = dvb_module_probe("lgdt3306a", NULL,
|
||||
+ &adap->channel.hdw->i2c_adap,
|
||||
+ 0x59, &lgdt3306a_config);
|
||||
+
|
||||
+ if (!adap->i2c_client_demod[0])
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int pvr2_dual_fe_attach(struct pvr2_dvb_adapter *adap)
|
||||
+{
|
||||
+ pr_debug("%s()\n", __func__);
|
||||
+
|
||||
+ if (pvr2_lgdt3306a_attach(adap) != 0)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ if (pvr2_si2168_attach(adap) != 0) {
|
||||
+ dvb_module_release(adap->i2c_client_demod[0]);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#define PVR2_FIRMWARE_160xxx "v4l-pvrusb2-160xxx-01.fw"
|
||||
+static const char *pvr2_fw1_names_160xxx[] = {
|
||||
+ PVR2_FIRMWARE_160xxx,
|
||||
+};
|
||||
+
|
||||
+static const struct pvr2_device_client_desc pvr2_cli_160xxx[] = {
|
||||
+ { .module_id = PVR2_CLIENT_ID_CX25840 },
|
||||
+};
|
||||
+
|
||||
+static const struct pvr2_device_desc pvr2_device_160000 = {
|
||||
+ .description = "WinTV HVR-1975 Model 160000",
|
||||
+ .shortname = "160000",
|
||||
+ .client_table.lst = pvr2_cli_160xxx,
|
||||
+ .client_table.cnt = ARRAY_SIZE(pvr2_cli_160xxx),
|
||||
+ .fx2_firmware.lst = pvr2_fw1_names_160xxx,
|
||||
+ .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_160xxx),
|
||||
+ .default_tuner_type = TUNER_ABSENT,
|
||||
+ .flag_has_cx25840 = !0,
|
||||
+ .flag_has_hauppauge_rom = !0,
|
||||
+ .flag_has_analogtuner = !0,
|
||||
+ .flag_has_composite = !0,
|
||||
+ .flag_has_svideo = !0,
|
||||
+ .flag_fx2_16kb = !0,
|
||||
+ .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
|
||||
+ .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,
|
||||
+ .default_std_mask = V4L2_STD_NTSC_M,
|
||||
+ .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,
|
||||
+ .ir_scheme = PVR2_IR_SCHEME_ZILOG,
|
||||
+#ifdef CONFIG_VIDEO_PVRUSB2_DVB
|
||||
+ .dvb_props = &pvr2_160000_dvb_props,
|
||||
+#endif
|
||||
+};
|
||||
+static const struct pvr2_device_desc pvr2_device_160111 = {
|
||||
+ .description = "WinTV HVR-1955 Model 160111",
|
||||
+ .shortname = "160111",
|
||||
+ .client_table.lst = pvr2_cli_160xxx,
|
||||
+ .client_table.cnt = ARRAY_SIZE(pvr2_cli_160xxx),
|
||||
+ .fx2_firmware.lst = pvr2_fw1_names_160xxx,
|
||||
+ .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_160xxx),
|
||||
+ .default_tuner_type = TUNER_ABSENT,
|
||||
+ .flag_has_cx25840 = !0,
|
||||
+ .flag_has_hauppauge_rom = !0,
|
||||
+ .flag_has_analogtuner = !0,
|
||||
+ .flag_has_composite = !0,
|
||||
+ .flag_has_svideo = !0,
|
||||
+ .flag_fx2_16kb = !0,
|
||||
+ .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
|
||||
+ .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,
|
||||
+ .default_std_mask = V4L2_STD_NTSC_M,
|
||||
+ .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,
|
||||
+ .ir_scheme = PVR2_IR_SCHEME_ZILOG,
|
||||
+#ifdef CONFIG_VIDEO_PVRUSB2_DVB
|
||||
+ .dvb_props = &pvr2_160111_dvb_props,
|
||||
+#endif
|
||||
+};
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
@@ -552,6 +712,10 @@ struct usb_device_id pvr2_device_table[] = {
|
||||
.driver_info = (kernel_ulong_t)&pvr2_device_751xx},
|
||||
{ USB_DEVICE(0x0ccd, 0x0039),
|
||||
.driver_info = (kernel_ulong_t)&pvr2_device_av400},
|
||||
+ { USB_DEVICE(0x2040, 0x7502),
|
||||
+ .driver_info = (kernel_ulong_t)&pvr2_device_160111},
|
||||
+ { USB_DEVICE(0x2040, 0x7510),
|
||||
+ .driver_info = (kernel_ulong_t)&pvr2_device_160000},
|
||||
{ }
|
||||
};
|
||||
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-devattr.h b/drivers/media/usb/pvrusb2/pvrusb2-devattr.h
|
||||
index c1e7d48..ea0b2bf 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-devattr.h
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-devattr.h
|
||||
@@ -66,6 +66,7 @@ struct pvr2_string_table {
|
||||
#define PVR2_ROUTING_SCHEME_GOTVIEW 1
|
||||
#define PVR2_ROUTING_SCHEME_ONAIR 2
|
||||
#define PVR2_ROUTING_SCHEME_AV400 3
|
||||
+#define PVR2_ROUTING_SCHEME_HAUP160XXX 4
|
||||
|
||||
#define PVR2_DIGITAL_SCHEME_NONE 0
|
||||
#define PVR2_DIGITAL_SCHEME_HAUPPAUGE 1
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
|
||||
index 4b32b21..8f492ec 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
|
||||
@@ -343,26 +343,19 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
|
||||
goto done;
|
||||
}
|
||||
|
||||
- if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) {
|
||||
-
|
||||
- if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) {
|
||||
+ if (dvb_props->frontend_attach(adap) == 0 && adap->fe[0]) {
|
||||
+ if (dvb_register_frontend(&adap->dvb_adap, adap->fe[0])) {
|
||||
pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||
"frontend registration failed!");
|
||||
- dvb_frontend_detach(adap->fe);
|
||||
- adap->fe = NULL;
|
||||
ret = -ENODEV;
|
||||
- goto done;
|
||||
+ goto fail_frontend0;
|
||||
}
|
||||
+ if (adap->fe[0]->ops.analog_ops.standby)
|
||||
+ adap->fe[0]->ops.analog_ops.standby(adap->fe[0]);
|
||||
|
||||
- if (dvb_props->tuner_attach)
|
||||
- dvb_props->tuner_attach(adap);
|
||||
-
|
||||
- if (adap->fe->ops.analog_ops.standby)
|
||||
- adap->fe->ops.analog_ops.standby(adap->fe);
|
||||
-
|
||||
- /* Ensure all frontends negotiate bus access */
|
||||
- adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
|
||||
-
|
||||
+ pvr2_trace(PVR2_TRACE_INFO, "transferring fe[%d] ts_bus_ctrl() to pvr2_dvb_bus_ctrl()",
|
||||
+ adap->fe[0]->id);
|
||||
+ adap->fe[0]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
|
||||
} else {
|
||||
pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||
"no frontend was attached!");
|
||||
@@ -370,17 +363,74 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- done:
|
||||
+ if (dvb_props->tuner_attach && dvb_props->tuner_attach(adap)) {
|
||||
+ pvr2_trace(PVR2_TRACE_ERROR_LEGS, "tuner attach failed");
|
||||
+ ret = -ENODEV;
|
||||
+ goto fail_tuner;
|
||||
+ }
|
||||
+
|
||||
+ if (adap->fe[1]) {
|
||||
+ adap->fe[1]->id = 1;
|
||||
+ adap->fe[1]->tuner_priv = adap->fe[0]->tuner_priv;
|
||||
+ memcpy(&adap->fe[1]->ops.tuner_ops,
|
||||
+ &adap->fe[0]->ops.tuner_ops,
|
||||
+ sizeof(struct dvb_tuner_ops));
|
||||
+
|
||||
+ if (dvb_register_frontend(&adap->dvb_adap, adap->fe[1])) {
|
||||
+ pvr2_trace(PVR2_TRACE_ERROR_LEGS,
|
||||
+ "frontend registration failed!");
|
||||
+ ret = -ENODEV;
|
||||
+ goto fail_frontend1;
|
||||
+ }
|
||||
+ /* MFE lock */
|
||||
+ adap->dvb_adap.mfe_shared = 1;
|
||||
+
|
||||
+ if (adap->fe[1]->ops.analog_ops.standby)
|
||||
+ adap->fe[1]->ops.analog_ops.standby(adap->fe[1]);
|
||||
+
|
||||
+ pvr2_trace(PVR2_TRACE_INFO, "transferring fe[%d] ts_bus_ctrl() to pvr2_dvb_bus_ctrl()",
|
||||
+ adap->fe[1]->id);
|
||||
+ adap->fe[1]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
|
||||
+ }
|
||||
+done:
|
||||
pvr2_channel_limit_inputs(&adap->channel, 0);
|
||||
return ret;
|
||||
+
|
||||
+fail_frontend1:
|
||||
+ dvb_frontend_detach(adap->fe[1]);
|
||||
+ adap->fe[1] = NULL;
|
||||
+fail_tuner:
|
||||
+ dvb_unregister_frontend(adap->fe[0]);
|
||||
+fail_frontend0:
|
||||
+ dvb_frontend_detach(adap->fe[0]);
|
||||
+ adap->fe[0] = NULL;
|
||||
+ dvb_module_release(adap->i2c_client_tuner);
|
||||
+ dvb_module_release(adap->i2c_client_demod[1]);
|
||||
+ dvb_module_release(adap->i2c_client_demod[0]);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int pvr2_dvb_frontend_exit(struct pvr2_dvb_adapter *adap)
|
||||
{
|
||||
- if (adap->fe != NULL) {
|
||||
- dvb_unregister_frontend(adap->fe);
|
||||
- dvb_frontend_detach(adap->fe);
|
||||
+ if (adap->fe[1]) {
|
||||
+ dvb_unregister_frontend(adap->fe[1]);
|
||||
+ dvb_frontend_detach(adap->fe[1]);
|
||||
+ adap->fe[1] = NULL;
|
||||
+ }
|
||||
+ if (adap->fe[0]) {
|
||||
+ dvb_unregister_frontend(adap->fe[0]);
|
||||
+ dvb_frontend_detach(adap->fe[0]);
|
||||
+ adap->fe[0] = NULL;
|
||||
}
|
||||
+
|
||||
+ dvb_module_release(adap->i2c_client_tuner);
|
||||
+ adap->i2c_client_tuner = NULL;
|
||||
+ dvb_module_release(adap->i2c_client_demod[1]);
|
||||
+ adap->i2c_client_demod[1] = NULL;
|
||||
+ dvb_module_release(adap->i2c_client_demod[0]);
|
||||
+ adap->i2c_client_demod[0] = NULL;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.h b/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
|
||||
index e7f71fb..c0b27f5 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
|
||||
@@ -18,7 +18,10 @@ struct pvr2_dvb_adapter {
|
||||
struct dmxdev dmxdev;
|
||||
struct dvb_demux demux;
|
||||
struct dvb_net dvb_net;
|
||||
- struct dvb_frontend *fe;
|
||||
+ struct dvb_frontend *fe[2];
|
||||
+
|
||||
+ struct i2c_client *i2c_client_demod[2];
|
||||
+ struct i2c_client *i2c_client_tuner;
|
||||
|
||||
int feedcount;
|
||||
int max_feed_count;
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-fx2-cmd.h b/drivers/media/usb/pvrusb2/pvrusb2-fx2-cmd.h
|
||||
index 0a01de4..640b033 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-fx2-cmd.h
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-fx2-cmd.h
|
||||
@@ -38,6 +38,10 @@
|
||||
|
||||
#define FX2CMD_FWPOST1 0x52u
|
||||
|
||||
+/* These 2 only exist on Model 160xxx */
|
||||
+#define FX2CMD_HCW_DEMOD_RESET_PIN 0xd4u
|
||||
+#define FX2CMD_HCW_MAKO_SLEEP_PIN 0xd5u
|
||||
+
|
||||
#define FX2CMD_POWER_OFF 0xdcu
|
||||
#define FX2CMD_POWER_ON 0xdeu
|
||||
|
||||
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
|
||||
index 1914391..63916ca 100644
|
||||
--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
|
||||
+++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
|
||||
@@ -316,6 +316,8 @@ static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
|
||||
{FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
|
||||
{FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
|
||||
{FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
|
||||
+ {FX2CMD_HCW_DEMOD_RESET_PIN, "hcw demod reset pin"},
|
||||
+ {FX2CMD_HCW_MAKO_SLEEP_PIN, "hcw mako sleep pin"},
|
||||
};
|
||||
|
||||
|
||||
@@ -2139,10 +2141,28 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
|
||||
((0) << 16));
|
||||
}
|
||||
|
||||
- // This step MUST happen after the earlier powerup step.
|
||||
+ /* This step MUST happen after the earlier powerup step */
|
||||
pvr2_i2c_core_init(hdw);
|
||||
if (!pvr2_hdw_dev_ok(hdw)) return;
|
||||
|
||||
+ /* Reset demod only on Hauppauge 160xxx platform */
|
||||
+ if (hdw->usb_dev->descriptor.idVendor == 0x2040 &&
|
||||
+ (hdw->usb_dev->descriptor.idProduct == 0x7502 ||
|
||||
+ hdw->usb_dev->descriptor.idProduct == 0x7510)) {
|
||||
+ pr_info("%s(): resetting 160xxx demod\n", __func__);
|
||||
+ /* TODO: not sure this is proper place to reset once only */
|
||||
+ pvr2_issue_simple_cmd(hdw,
|
||||
+ FX2CMD_HCW_DEMOD_RESET_PIN |
|
||||
+ (1 << 8) |
|
||||
+ ((0) << 16));
|
||||
+ msleep(10);
|
||||
+ pvr2_issue_simple_cmd(hdw,
|
||||
+ FX2CMD_HCW_DEMOD_RESET_PIN |
|
||||
+ (1 << 8) |
|
||||
+ ((1) << 16));
|
||||
+ msleep(10);
|
||||
+ }
|
||||
+
|
||||
pvr2_hdw_load_modules(hdw);
|
||||
if (!pvr2_hdw_dev_ok(hdw)) return;
|
||||
|
||||
@@ -4012,6 +4032,20 @@ int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
|
||||
static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
|
||||
{
|
||||
hdw->flag_ok = !0;
|
||||
+
|
||||
+ /* Use this for Hauppauge 160xxx only */
|
||||
+ if (hdw->usb_dev->descriptor.idVendor == 0x2040 &&
|
||||
+ (hdw->usb_dev->descriptor.idProduct == 0x7502 ||
|
||||
+ hdw->usb_dev->descriptor.idProduct == 0x7510)) {
|
||||
+ pr_debug("%s(): resetting demod on Hauppauge 160xxx platform skipped\n",
|
||||
+ __func__);
|
||||
+ /* Can't reset 160xxx or it will trash Demod tristate */
|
||||
+ return pvr2_issue_simple_cmd(hdw,
|
||||
+ FX2CMD_HCW_MAKO_SLEEP_PIN |
|
||||
+ (1 << 8) |
|
||||
+ ((onoff ? 1 : 0) << 16));
|
||||
+ }
|
||||
+
|
||||
return pvr2_issue_simple_cmd(hdw,
|
||||
FX2CMD_HCW_DEMOD_RESETIN |
|
||||
(1 << 8) |
|
||||
--
|
||||
2.17.1
|
||||
|
||||
|
||||
@@ -1,217 +0,0 @@
|
||||
From: Thomas Hollstegge <thomas.hollstegge@gmail.com>
|
||||
[v3] media: dvbsky: Add support for MyGica T230C v2
|
||||
https://lore.kernel.org/patchwork/cover/904817/
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
|
||||
index 4d43424..3402b96 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168.c
|
||||
+++ b/drivers/media/dvb-frontends/si2168.c
|
||||
@@ -96,13 +96,15 @@ static int si2168_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
|
||||
dev_dbg(&client->dev, "%s acquire: %d\n", __func__, acquire);
|
||||
|
||||
/* set TS_MODE property */
|
||||
- memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6);
|
||||
+ memcpy(cmd.args, "\x14\x00\x01\x10\x00\x00", 6);
|
||||
if (acquire)
|
||||
cmd.args[4] |= dev->ts_mode;
|
||||
else
|
||||
cmd.args[4] |= SI2168_TS_TRISTATE;
|
||||
if (dev->ts_clock_gapped)
|
||||
cmd.args[4] |= 0x40;
|
||||
+ cmd.args[4] |= (dev->ts_clock_mode & 0x03) << 4;
|
||||
+
|
||||
cmd.wlen = 6;
|
||||
cmd.rlen = 4;
|
||||
ret = si2168_cmd_execute(client, &cmd);
|
||||
@@ -644,6 +646,18 @@ static int si2168_set_frontend(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
+ /* set TS frequency */
|
||||
+ if (dev->ts_clock_freq) {
|
||||
+ memcpy(cmd.args, "\x14\x00\x0d\x10", 4);
|
||||
+ cmd.args[4] = ((dev->ts_clock_freq / 10000) >> 0) & 0xff;
|
||||
+ cmd.args[5] = ((dev->ts_clock_freq / 10000) >> 8) & 0xff;
|
||||
+ cmd.wlen = 6;
|
||||
+ cmd.rlen = 4;
|
||||
+ ret = si2168_cmd_execute(client, &cmd);
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
memcpy(cmd.args, "\x14\x00\x08\x10\xd7\x05", 6);
|
||||
cmd.args[5] |= dev->ts_clock_inv ? 0x00 : 0x10;
|
||||
cmd.wlen = 6;
|
||||
@@ -1057,6 +1071,10 @@ static int si2168_probe(struct i2c_client *client,
|
||||
dev->ts_mode = config->ts_mode;
|
||||
dev->ts_clock_inv = config->ts_clock_inv;
|
||||
dev->ts_clock_gapped = config->ts_clock_gapped;
|
||||
+ dev->ts_clock_mode = config->ts_clock_mode;
|
||||
+ if (dev->ts_clock_mode == 0)
|
||||
+ dev->ts_clock_mode = SI2168_TS_CLOCK_MODE_AUTO_ADAPT;
|
||||
+ dev->ts_clock_freq = config->ts_clock_freq;
|
||||
dev->spectral_inversion = config->spectral_inversion;
|
||||
|
||||
dev_info(&client->dev, "Silicon Labs Si2168-%c%d%d successfully identified\n",
|
||||
diff --git a/drivers/media/dvb-frontends/si2168.h b/drivers/media/dvb-frontends/si2168.h
|
||||
index d519edd..3f52ee8 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168.h
|
||||
+++ b/drivers/media/dvb-frontends/si2168.h
|
||||
@@ -47,6 +47,14 @@ struct si2168_config {
|
||||
/* TS clock gapped */
|
||||
bool ts_clock_gapped;
|
||||
|
||||
+ /* TS clock mode */
|
||||
+#define SI2168_TS_CLOCK_MODE_AUTO_ADAPT 0x01
|
||||
+#define SI2168_TS_CLOCK_MODE_MANUAL 0x02
|
||||
+ u8 ts_clock_mode;
|
||||
+
|
||||
+ /* TS clock frequency (for manual mode) */
|
||||
+ u32 ts_clock_freq;
|
||||
+
|
||||
/* Inverted spectrum */
|
||||
bool spectral_inversion;
|
||||
};
|
||||
diff --git a/drivers/media/dvb-frontends/si2168_priv.h b/drivers/media/dvb-frontends/si2168_priv.h
|
||||
index 2d362e1..8173d6c 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168_priv.h
|
||||
+++ b/drivers/media/dvb-frontends/si2168_priv.h
|
||||
@@ -48,6 +48,8 @@ struct si2168_dev {
|
||||
u8 ts_mode;
|
||||
bool ts_clock_inv;
|
||||
bool ts_clock_gapped;
|
||||
+ u8 ts_clock_mode;
|
||||
+ u32 ts_clock_freq;
|
||||
bool spectral_inversion;
|
||||
};
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
index e28bd88..4a4c6ae 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
@@ -583,6 +583,66 @@ static int dvbsky_mygica_t230c_attach(struct dvb_usb_adapter *adap)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int dvbsky_mygica_t230c_v2_attach(struct dvb_usb_adapter *adap)
|
||||
+{
|
||||
+ struct dvbsky_state *state = adap_to_priv(adap);
|
||||
+ struct dvb_usb_device *d = adap_to_d(adap);
|
||||
+ struct i2c_adapter *i2c_adapter;
|
||||
+ struct i2c_client *client_demod, *client_tuner;
|
||||
+ struct i2c_board_info info;
|
||||
+ struct si2168_config si2168_config;
|
||||
+ struct si2157_config si2157_config;
|
||||
+
|
||||
+ /* attach demod */
|
||||
+ memset(&si2168_config, 0, sizeof(si2168_config));
|
||||
+ si2168_config.i2c_adapter = &i2c_adapter;
|
||||
+ si2168_config.fe = &adap->fe[0];
|
||||
+ si2168_config.ts_mode = SI2168_TS_PARALLEL;
|
||||
+ si2168_config.ts_clock_inv = 1;
|
||||
+ si2168_config.ts_clock_mode = SI2168_TS_CLOCK_MODE_MANUAL;
|
||||
+ si2168_config.ts_clock_freq = 10000000;
|
||||
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
+ strlcpy(info.type, "si2168", sizeof(info.type));
|
||||
+ info.addr = 0x64;
|
||||
+ info.platform_data = &si2168_config;
|
||||
+
|
||||
+ request_module("si2168");
|
||||
+ client_demod = i2c_new_device(&d->i2c_adap, &info);
|
||||
+ if (!client_demod || !client_demod->dev.driver)
|
||||
+ goto fail_demod_device;
|
||||
+ if (!try_module_get(client_demod->dev.driver->owner))
|
||||
+ goto fail_demod_module;
|
||||
+
|
||||
+ /* attach tuner */
|
||||
+ memset(&si2157_config, 0, sizeof(si2157_config));
|
||||
+ si2157_config.fe = adap->fe[0];
|
||||
+ si2157_config.if_port = 0;
|
||||
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
+ strlcpy(info.type, "si2141", sizeof(info.type));
|
||||
+ info.addr = 0x60;
|
||||
+ info.platform_data = &si2157_config;
|
||||
+
|
||||
+ request_module("si2157");
|
||||
+ client_tuner = i2c_new_device(i2c_adapter, &info);
|
||||
+ if (!client_tuner || !client_tuner->dev.driver)
|
||||
+ goto fail_tuner_device;
|
||||
+ if (!try_module_get(client_tuner->dev.driver->owner))
|
||||
+ goto fail_tuner_module;
|
||||
+
|
||||
+ state->i2c_client_demod = client_demod;
|
||||
+ state->i2c_client_tuner = client_tuner;
|
||||
+ return 0;
|
||||
+
|
||||
+fail_tuner_module:
|
||||
+ i2c_unregister_device(client_tuner);
|
||||
+fail_tuner_device:
|
||||
+ module_put(client_demod->dev.driver->owner);
|
||||
+fail_demod_module:
|
||||
+ i2c_unregister_device(client_demod);
|
||||
+fail_demod_device:
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+
|
||||
|
||||
static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name)
|
||||
{
|
||||
@@ -762,6 +822,33 @@ static struct dvb_usb_device_properties mygica_t230c_props = {
|
||||
}
|
||||
};
|
||||
|
||||
+static struct dvb_usb_device_properties mygica_t230c_v2_props = {
|
||||
+ .driver_name = KBUILD_MODNAME,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .adapter_nr = adapter_nr,
|
||||
+ .size_of_priv = sizeof(struct dvbsky_state),
|
||||
+
|
||||
+ .generic_bulk_ctrl_endpoint = 0x01,
|
||||
+ .generic_bulk_ctrl_endpoint_response = 0x81,
|
||||
+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
|
||||
+
|
||||
+ .i2c_algo = &dvbsky_i2c_algo,
|
||||
+ .frontend_attach = dvbsky_mygica_t230c_v2_attach,
|
||||
+ .init = dvbsky_init,
|
||||
+ .get_rc_config = dvbsky_get_rc_config,
|
||||
+ .streaming_ctrl = dvbsky_streaming_ctrl,
|
||||
+ .identify_state = dvbsky_identify_state,
|
||||
+ .exit = dvbsky_exit,
|
||||
+
|
||||
+ .num_adapters = 1,
|
||||
+ .adapter = {
|
||||
+ {
|
||||
+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096),
|
||||
+ }
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+
|
||||
static const struct usb_device_id dvbsky_id_table[] = {
|
||||
{ DVB_USB_DEVICE(0x0572, 0x6831,
|
||||
&dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) },
|
||||
@@ -797,6 +884,9 @@ static const struct usb_device_id dvbsky_id_table[] = {
|
||||
{ DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C,
|
||||
&mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C",
|
||||
RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_V2,
|
||||
+ &mygica_t230c_v2_props, "MyGica Mini DVB-T2 USB Stick T230C v2",
|
||||
+ RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, dvbsky_id_table);
|
||||
diff --git a/include/media/dvb-usb-ids.h b/include/media/dvb-usb-ids.h
|
||||
index f9e73b4..d606248 100644
|
||||
--- a/include/media/dvb-usb-ids.h
|
||||
+++ b/include/media/dvb-usb-ids.h
|
||||
@@ -387,6 +387,7 @@
|
||||
#define USB_PID_MYGICA_D689 0xd811
|
||||
#define USB_PID_MYGICA_T230 0xc688
|
||||
#define USB_PID_MYGICA_T230C 0xc689
|
||||
+#define USB_PID_MYGICA_T230C_V2 0xc68a
|
||||
#define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011
|
||||
#define USB_PID_ELGATO_EYETV_DTT 0x0021
|
||||
#define USB_PID_ELGATO_EYETV_DTT_2 0x003f
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="media_tree_cc"
|
||||
PKG_VERSION="2019-03-08"
|
||||
PKG_SHA256="e3394cb051c9bd450e84f6597072fe65ab7d1a45113cfbe5027dd9137129834f"
|
||||
PKG_VERSION="2019-05-12"
|
||||
PKG_SHA256="55bd8b54c83110a30d8ad44761e888a4bad4745f1ae4765dcf44f2752fc96419"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://bitbucket.org/CrazyCat/media_build/downloads/"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
@@ -15,7 +15,9 @@ PKG_TOOLCHAIN="manual"
|
||||
unpack() {
|
||||
mkdir -p $PKG_BUILD/
|
||||
tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2 -C $PKG_BUILD/
|
||||
}
|
||||
|
||||
post_unpack() {
|
||||
# hack/workaround for borked upstream kernel/media_build
|
||||
# without removing atomisp there a lot additional includes that
|
||||
# slowdown build process after modpost from 3min to 6min
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="media_tree_cc_aml"
|
||||
PKG_VERSION="2018-09-23"
|
||||
PKG_SHA256="3b0cf3699317c04d9184b7e25056065fd374b20b851ee86a63ea2c70e219ee9e"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://bitbucket.org/CrazyCat/media_build/downloads/"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_NEED_UNPACK="$LINUX_DEPENDS"
|
||||
PKG_LONGDESC="Source of Linux Kernel media_tree subsystem to build with media_build."
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
unpack() {
|
||||
mkdir -p $PKG_BUILD/
|
||||
tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.xz -C $PKG_BUILD/
|
||||
|
||||
# hack/workaround for borked upstream kernel/media_build
|
||||
# without removing atomisp there a lot additional includes that
|
||||
# slowdown build process after modpost from 3min to 6min
|
||||
# even if atomisp is disabled via kernel.conf
|
||||
rm -rf $PKG_BUILD/drivers/staging/media/atomisp
|
||||
sed -i 's|^.*drivers/staging/media/atomisp.*$||' \
|
||||
$PKG_BUILD/drivers/staging/media/Kconfig
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
From ae1ccaa3587c0bd3d6d01841fa2e668cdf738f1e Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Sun, 3 Feb 2019 14:24:00 +0100
|
||||
Subject: [PATCH] media: rc: ir-rc6-decoder: enable toggle bit for Zotac
|
||||
remotes
|
||||
|
||||
The Zotac RC2604323/01G and RC2604329/02BG remotes use the 32-bit
|
||||
rc6 protocol and toggle bit 15 (0x8000) on repeated button presses,
|
||||
like MCE remotes.
|
||||
|
||||
Add the customer code 0x80340000 to the 32-bit rc6 toggle
|
||||
handling code to get proper scancodes and toggle reports.
|
||||
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
drivers/media/rc/ir-rc6-decoder.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c
|
||||
index d96aed1343e4..5cc302fa4daa 100644
|
||||
--- a/drivers/media/rc/ir-rc6-decoder.c
|
||||
+++ b/drivers/media/rc/ir-rc6-decoder.c
|
||||
@@ -40,6 +40,7 @@
|
||||
#define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */
|
||||
#define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */
|
||||
#define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */
|
||||
+#define RC6_6A_ZOTAC_CC 0x80340000 /* Zotac customer code */
|
||||
#define RC6_6A_KATHREIN_CC 0x80460000 /* Kathrein RCU-676 customer code */
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8 /* Normally in <limits.h> */
|
||||
@@ -246,6 +247,7 @@ static int ir_rc6_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
||||
switch (scancode & RC6_6A_LCC_MASK) {
|
||||
case RC6_6A_MCE_CC:
|
||||
case RC6_6A_KATHREIN_CC:
|
||||
+ case RC6_6A_ZOTAC_CC:
|
||||
protocol = RC_PROTO_RC6_MCE;
|
||||
toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK);
|
||||
scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
|
||||
--
|
||||
2.20.1
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
https://bitbucket.org/CrazyCat/linux_media/commits/ebd9c45524383e09d993563f4bd3cc765796b38a/raw
|
||||
https://forum.libreelec.tv/thread/14405-dual-tbs-5520se-libreelec-9-0-0-intel-generic/?postID=110926#post110926
|
||||
fixes TBS5520se scanning of frequencies
|
||||
|
||||
From: CrazyCat
|
||||
Date: Mon, 12 Nov 2018 19:49:55 +0200
|
||||
Subject: [PATCH] si2183: Fixed minimal frequency for DVB-C.
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/si2183.c b/drivers/media/dvb-frontends/si2183.c
|
||||
index f1cc0da..333abd0 100644
|
||||
--- a/drivers/media/dvb-frontends/si2183.c
|
||||
+++ b/drivers/media/dvb-frontends/si2183.c
|
||||
@@ -1335,7 +1335,7 @@ static int si2183_set_property(struct dvb_frontend *fe,
|
||||
break;
|
||||
case SYS_DVBC_ANNEX_A:
|
||||
case SYS_DVBC_ANNEX_B:
|
||||
- fe->ops.info.frequency_min_hz = 470 * MHz;
|
||||
+ fe->ops.info.frequency_min_hz = 47 * MHz;
|
||||
fe->ops.info.frequency_max_hz = 862 * MHz;
|
||||
fe->ops.info.frequency_stepsize_hz = 62500;
|
||||
break;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="digital_devices"
|
||||
PKG_VERSION="e3601828472485b299495ec15dcd7e4cc4c770a3"
|
||||
PKG_SHA256="2e75a97602cd7512655020d7147a18eee76a9b7befa2aaca82d1548a0995c313"
|
||||
PKG_VERSION="040a1c58b660781297acc5eda09d934ced245c5e"
|
||||
PKG_SHA256="a0d7e8e78bc9e56b014d61585506dcb5fef4fa8b31d5f5e5aeaabb98343a3611"
|
||||
PKG_ARCH="x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/DigitalDevices/dddvb/"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="dvb-latest"
|
||||
PKG_VERSION="c23276037794bae357fa8d23e3a4f11af9ad46e9"
|
||||
PKG_SHA256="c69d5c6af435887bd46d8da4816f724905e36fd7d080c8e1c437fbe4848ea813"
|
||||
PKG_VERSION="d121a2bedf6dd541c6182041142ec54fd94760ab"
|
||||
PKG_SHA256="45dcd91f283ee9cfd7a75b291ab40c6b25d054362960c63d5a806db9b9489f70"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://git.linuxtv.org/media_build.git"
|
||||
PKG_URL="https://git.linuxtv.org/media_build.git/snapshot/${PKG_VERSION}.tar.gz"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="RTL8192CU"
|
||||
PKG_VERSION="d7c7e6aa73fc457cfc5e5272878d111c657ce6dc"
|
||||
PKG_SHA256="3b7a4b198913fa45958c7309e0358c34628d791038a473f6d4e95bcf70b7d56f"
|
||||
PKG_VERSION="f32ef3984db7c7f7644edec0fa28a63a47b1a7d6"
|
||||
PKG_SHA256="7e8df7cce0918630121c7493a6333d392b3099b1126e8c355aa221cee032c80b"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/pvaret/rtl8192cu-fixes"
|
||||
PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
--- a/os_dep/linux/os_intfs.c 2013-09-11 05:56:55.000000000 +0200
|
||||
+++ b/os_dep/linux/os_intfs.c 2013-11-12 00:30:41.158248277 +0100
|
||||
@@ -277,6 +277,18 @@
|
||||
|
||||
#define RTW_PROC_NAME DRV_NAME
|
||||
|
||||
+#ifndef create_proc_entry
|
||||
+/* dummy routines */
|
||||
+void rtw_proc_remove_one(struct net_device *dev)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+void rtw_proc_init_one(struct net_device *dev)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#else /* create_proc_entry not defined */
|
||||
+
|
||||
void rtw_proc_init_one(struct net_device *dev)
|
||||
{
|
||||
struct proc_dir_entry *dir_dev = NULL;
|
||||
@@ -751,6 +763,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
+#endif /* create_proc_entry not defined */
|
||||
#endif
|
||||
|
||||
uint loadparam( _adapter *padapter, _nic_hdl pnetdev);
|
||||
@@ -1,22 +0,0 @@
|
||||
diff -Naur RTL8192CU-v4.0.2_9000.20130911/os_dep/linux/pci_intf.c RTL8192CU-v4.0.2_9000.20130911.patch/os_dep/linux/pci_intf.c
|
||||
--- RTL8192CU-v4.0.2_9000.20130911/os_dep/linux/pci_intf.c 2013-09-11 05:56:55.000000000 +0200
|
||||
+++ RTL8192CU-v4.0.2_9000.20130911.patch/os_dep/linux/pci_intf.c 2014-04-22 23:25:02.082908033 +0200
|
||||
@@ -1963,7 +1963,6 @@
|
||||
|
||||
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
|
||||
DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
|
||||
- DBG_871X("Build at: %s %s\n", __DATE__, __TIME__);
|
||||
pci_drvpriv.drv_registered = _TRUE;
|
||||
|
||||
rtw_suspend_lock_init();
|
||||
diff -Naur RTL8192CU-v4.0.2_9000.20130911/os_dep/linux/usb_intf.c RTL8192CU-v4.0.2_9000.20130911.patch/os_dep/linux/usb_intf.c
|
||||
--- RTL8192CU-v4.0.2_9000.20130911/os_dep/linux/usb_intf.c 2013-09-11 05:56:55.000000000 +0200
|
||||
+++ RTL8192CU-v4.0.2_9000.20130911.patch/os_dep/linux/usb_intf.c 2014-04-22 23:25:21.337862827 +0200
|
||||
@@ -1577,7 +1577,6 @@
|
||||
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
|
||||
|
||||
DBG_871X(DRV_NAME " driver version=%s\n", DRIVERVERSION);
|
||||
- DBG_871X("build time: %s %s\n", __DATE__, __TIME__);
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
|
||||
//console_suspend_enabled=0;
|
||||
@@ -1,25 +0,0 @@
|
||||
diff -Naur RTL8192CU-v4.0.2_9000.20130911/include/ieee80211.h RTL8192CU-v4.0.2_9000.20130911.patch/include/ieee80211.h
|
||||
--- RTL8192CU-v4.0.2_9000.20130911/include/ieee80211.h 2013-09-11 05:56:55.000000000 +0200
|
||||
+++ RTL8192CU-v4.0.2_9000.20130911.patch/include/ieee80211.h 2015-11-03 14:05:03.789280151 +0100
|
||||
@@ -1194,18 +1194,18 @@
|
||||
(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
|
||||
(((Addr[5]) & 0xff) == 0xff))
|
||||
#else
|
||||
-extern __inline int is_multicast_mac_addr(const u8 *addr)
|
||||
+static __inline int is_multicast_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
}
|
||||
|
||||
-extern __inline int is_broadcast_mac_addr(const u8 *addr)
|
||||
+static __inline int is_broadcast_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
|
||||
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
|
||||
}
|
||||
|
||||
-extern __inline int is_zero_mac_addr(const u8 *addr)
|
||||
+static __inline int is_zero_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
|
||||
(addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="RTL8192DU"
|
||||
PKG_VERSION="3105cd3179d5e60a7aa675611a3592a45b29bfcb"
|
||||
PKG_SHA256="0a19e86192418d4179def917a9cea3aa0f2f2da7c44a520c085b9d78d9d2c09e"
|
||||
PKG_VERSION="72b53f8a6c2a6696d60791df4455c3073fffc4e4"
|
||||
PKG_SHA256="dec3cc45601c2c6dab47816523cb5a5731393d34cc75ec0f96a91191d3563fdd"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/lwfinger/rtl8192du"
|
||||
PKG_URL="https://github.com/lwfinger/rtl8192du/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="RTL8192EU"
|
||||
PKG_VERSION="b63646fb61fec4895f0fd4aec1a0cb0e8873eaeb"
|
||||
PKG_SHA256="7e24457f371121e1f587ec759b3338bc9b63bd03632840a11076791155c0c93f"
|
||||
PKG_VERSION="0a7199b457b25edc4d9534158a068e486b1c8bb0"
|
||||
PKG_SHA256="defee6fda236bc9d77cd5cf0ceca8e86f820a1f9fa5d63c5ca7c369be1a3513e"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/Mange/rtl8192eu-linux-driver"
|
||||
PKG_URL="https://github.com/Mange/rtl8192eu-linux-driver/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
diff -Naur a/include/ieee80211.h b/include/ieee80211.h
|
||||
--- a/include/ieee80211.h
|
||||
+++ b/include/ieee80211.h
|
||||
@@ -1314,18 +1314,18 @@
|
||||
(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
|
||||
(((Addr[5]) & 0xff) == 0xff))
|
||||
#else
|
||||
-extern __inline int is_multicast_mac_addr(const u8 *addr)
|
||||
+static __inline int is_multicast_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
}
|
||||
|
||||
-extern __inline int is_broadcast_mac_addr(const u8 *addr)
|
||||
+static __inline int is_broadcast_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
|
||||
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
|
||||
}
|
||||
|
||||
-extern __inline int is_zero_mac_addr(const u8 *addr)
|
||||
+static __inline int is_zero_mac_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
|
||||
(addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
|
||||
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="RTL8812AU"
|
||||
PKG_VERSION="7c257daf52d0aac298c13135bd3ff5f388edc72b"
|
||||
PKG_SHA256="88eaed2f0b394a36f806f02bd245e7bd181e2aaafc2b7ff4521f4adb2fa6dc29"
|
||||
PKG_VERSION="bdfef37665b34be7a84835fba97e44447b30f98c"
|
||||
PKG_SHA256="44ccdeb90da2e750330108e71e6986e1a9000ba2e6b5709460a271d570a75769"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/MilhouseVH/RTL8812AU"
|
||||
PKG_URL="https://github.com/MilhouseVH/RTL8812AU/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="RTL8188EU-aml"
|
||||
PKG_VERSION="2d358c5"
|
||||
PKG_SHA256="adf31d56d3a94bca814f1bd0de24af61fae85d25a259124b5d16c1d23cc72c91"
|
||||
PKG_ARCH="arm aarch64"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8188eu"
|
||||
PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8188eu/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain linux"
|
||||
PKG_NEED_UNPACK="$LINUX_DEPENDS"
|
||||
PKG_LONGDESC="Realtek RTL8188EU Linux driver"
|
||||
PKG_IS_KERNEL_PKG="yes"
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
post_unpack() {
|
||||
sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile
|
||||
sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h
|
||||
sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c
|
||||
}
|
||||
|
||||
make_target() {
|
||||
LDFLAGS="" make -C $(kernel_path) M=$PKG_BUILD/rtl8xxx_EU \
|
||||
ARCH=$TARGET_KERNEL_ARCH \
|
||||
KSRC=$(kernel_path) \
|
||||
CROSS_COMPILE=$TARGET_KERNEL_PREFIX \
|
||||
USER_EXTRA_CFLAGS="-fgnu89-inline"
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||
find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user