From bb92f80b38f2a9fa5d2c98dc0aa446ed91ecb527 Mon Sep 17 00:00:00 2001 From: Adam Green Date: Tue, 16 Jan 2018 19:46:51 +0000 Subject: [PATCH 1/2] fd628-aml: encase variables to prevent build issues with whitespace in directory names --- packages/linux-drivers/amlogic/fd628-aml/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux-drivers/amlogic/fd628-aml/package.mk b/packages/linux-drivers/amlogic/fd628-aml/package.mk index 84a6d5020a..0cb4df1789 100644 --- a/packages/linux-drivers/amlogic/fd628-aml/package.mk +++ b/packages/linux-drivers/amlogic/fd628-aml/package.mk @@ -37,7 +37,7 @@ pre_make_target() { } make_target() { - make -C $(kernel_path) M=$PKG_BUILD/driver + make -C "$(kernel_path)" M="$PKG_BUILD/driver" make FD628Service } From bd774fd672c87d2d82f3ac5ab43c4d9b90f48574 Mon Sep 17 00:00:00 2001 From: Adam Green Date: Tue, 16 Jan 2018 19:53:58 +0000 Subject: [PATCH 2/2] fd628: new kodi service package to compliment fd628-aml driver --- packages/addons/service/fd628/changelog.txt | 2 + packages/addons/service/fd628/icon/icon.png | Bin 0 -> 31528 bytes packages/addons/service/fd628/package.mk | 45 ++++++++ .../addons/service/fd628/sources/addon.xml | 21 ++++ .../addons/service/fd628/sources/default.py | 104 ++++++++++++++++++ 5 files changed, 172 insertions(+) create mode 100644 packages/addons/service/fd628/changelog.txt create mode 100644 packages/addons/service/fd628/icon/icon.png create mode 100644 packages/addons/service/fd628/package.mk create mode 100644 packages/addons/service/fd628/sources/addon.xml create mode 100644 packages/addons/service/fd628/sources/default.py diff --git a/packages/addons/service/fd628/changelog.txt b/packages/addons/service/fd628/changelog.txt new file mode 100644 index 0000000000..32d81ca428 --- /dev/null +++ b/packages/addons/service/fd628/changelog.txt @@ -0,0 +1,2 @@ +100 +- Initial add-on diff --git a/packages/addons/service/fd628/icon/icon.png b/packages/addons/service/fd628/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..265d6fa9431148d3494e12518e68eb670d323fad GIT binary patch literal 31528 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 IBKm&+4@hXYN&o-= literal 0 HcmV?d00001 diff --git a/packages/addons/service/fd628/package.mk b/packages/addons/service/fd628/package.mk new file mode 100644 index 0000000000..af4cb2aa95 --- /dev/null +++ b/packages/addons/service/fd628/package.mk @@ -0,0 +1,45 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC 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 LibreELEC. If not, see . +################################################################################ + +PKG_NAME="fd628" +PKG_VERSION="1.0" +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" +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 +} diff --git a/packages/addons/service/fd628/sources/addon.xml b/packages/addons/service/fd628/sources/addon.xml new file mode 100644 index 0000000000..431312422f --- /dev/null +++ b/packages/addons/service/fd628/sources/addon.xml @@ -0,0 +1,21 @@ + + + + + + + + + Service for controlling FD628 VFD display icons + Service for controlling FD628 VFD display icons, e.g. Ethernet/WiFi connection status and Time + all + + resources/icon.png + + + diff --git a/packages/addons/service/fd628/sources/default.py b/packages/addons/service/fd628/sources/default.py new file mode 100644 index 0000000000..cefec180a2 --- /dev/null +++ b/packages/addons/service/fd628/sources/default.py @@ -0,0 +1,104 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC 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 LibreELEC. If not, see . +################################################################################ + +import datetime +import xbmcgui +import xbmcaddon +import threading +import time +import sys +import os +import subprocess + +addon = xbmcaddon.Addon(id='service.fd628') + +class clockThreadClass(threading.Thread): + def run(self): + self.shutdown = False + while not self.shutdown: + vfdon = '/sys/class/leds/fd628_dev/led_on' + vfdoff = '/sys/class/leds/fd628_dev/led_off' + ledon = [] + ledoff = [] + play = pause = lanstate = lan = wifistate = wifi = "" + sd_state = sd = usb_state = usb = '' + play = xbmc.getCondVisibility('Player.Playing') + pause = xbmc.getCondVisibility('Player.Paused') + if ( os.path.isfile('/sys/class/amhdmitx/amhdmitx0/hpd_state')): + hpd_state = file('/sys/class/amhdmitx/amhdmitx0/hpd_state', "rb") + hpdstate = hpd_state.read() + p = subprocess.Popen('blkid /dev/sd*', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + for line in p.stdout.readlines(): + usb_state += line + retval = p.wait() + p = subprocess.Popen('blkid /dev/mmcblk* | grep " UUID"', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + for line in p.stdout.readlines(): + sd_state += line + retval = p.wait() + if ( os.path.isfile('/sys/class/net/eth0/operstate')): + lanstate = file('/sys/class/net/eth0/operstate', 'rb') + lan = lanstate.read() + if ( os.path.isfile('/sys/class/net/wlan0/operstate')): + wifistate = file('/sys/class/net/wlan0/operstate', 'rb') + wifi = wifistate.read() + if len(usb_state) > 0 : + ledon.append('usb') + else: + ledoff.append('usb') + if len(sd_state) > 0 : + ledon.append('sd') + else: + ledoff.append('sd') + if (hpdstate == '1'): + ledon.append('hdmi') + else: + ledoff.append('hdmi') + if (lan.find('up')>=0 or lan.find('unknown')>=0): + ledon.append('eth') + else: + ledoff.append('eth') + if (wifi.find('up')>=0): + ledon.append('wifi') + else: + ledoff.append('wifi') + if pause == True: + ledon.append('pause') + else: + ledoff.append('pause') + if play == True: + ledon.append('play') + else: + ledoff.append('play') + for i in ledon: + vfd = file(vfdon, "wb") + vfd.write(i) + vfd.flush() + for j in ledoff: + vfd = file(vfdoff, "wb") + vfd.write(j) + vfd.flush() + time.sleep(0.5) + +class ClockDialog: + def __init__(self): + self.clockThread = clockThreadClass() + self.clockThread.start() + +dialog = ClockDialog() +del dialog +del addon