mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
# 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
|