2 Commits

Author SHA1 Message Date
96eb02fbbf moved protobuf files to new repo 2017-01-31 19:42:28 +01:00
d79dde527f first implementation of protobuf
restructure in client server model
loads of work still missing
2017-01-31 15:00:44 +01:00
27 changed files with 1471 additions and 400 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "protobuf"]
path = protobuf
url = git@github.com:LED-Freaks/LedD-protobuf.git

33
ledd.py
View File

@@ -32,41 +32,13 @@ Options:
""" """
import logging import logging
import sys
import os import os
from pkgutil import iter_modules import sys
import coloredlogs
from docopt import docopt from docopt import docopt
import ledd.daemon
import ledd import ledd
import ledd.daemon
if "smbus" not in (name for loader, name, ispkg in iter_modules()):
print("smbus not found, installing replacement")
class SMBus:
def __init__(self, i2c_address):
self.i2c_address = i2c_address
self.channels = {}
def write_word_data(self, addr, cmd, val):
if (cmd - 6) % 4 == 0:
self.channels[(cmd - 6) // 4] = val
def read_word_data(self, addr, cmd):
if (cmd - 8) // 4 not in self.channels:
self.channels[(cmd - 8) // 4] = 0
return self.channels[(cmd - 8) // 4]
class SMBusModule:
SMBus = SMBus
sys.modules['smbus'] = SMBusModule
sys.modules['smbus'].SMBus = SMBus
def pid_exists(processid): def pid_exists(processid):
@@ -93,7 +65,6 @@ if __name__ == "__main__":
lvl = logging.DEBUG lvl = logging.DEBUG
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
coloredlogs.install(level=lvl)
try: try:
with open('ledd.pid', 'r') as f: with open('ledd.pid', 'r') as f:

View File

@@ -13,23 +13,5 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from json import JSONEncoder
from sqlalchemy.orm import sessionmaker, scoped_session VERSION = "0.2"
from sqlalchemy.ext.declarative import declarative_base
VERSION = "0.1"
engine = None
session = scoped_session(sessionmaker())
""" :type : sqlalchemy.orm.scoping.scoped_session """
Base = declarative_base()
Base.query = session.query_property()
def _default(self, obj):
return getattr(obj.__class__, "to_json", _default.default)(obj)
_default.default = JSONEncoder().default
JSONEncoder.default = _default

62
ledd/client.py Normal file
View File

@@ -0,0 +1,62 @@
import asyncio
import socket
from ledd import VERSION
from ledd.protobuf import client_pb2
from ledd.protobuf.ledd_pb2 import WrapperMsg, LedD
class LedDClientProtocol(asyncio.Protocol):
def connection_made(self, transport):
print("Connected to client!")
def data_received(self, data):
print('Data received: {!r}'.format(data.decode()))
def connection_lost(self, exc):
print('The client closed the connection')
class Client:
def __init__(self):
super().__init__()
self.msg = client_pb2.Client()
self.proto = None
self.transport = None
def init_from_db(self, row):
self.msg.name = row['name']
self.msg.addr = row['addr']
self.msg.id = row['id']
self.msg.options = row['options']
self.msg.resolution = row['reso']
self.msg.port = row['port']
def init_from_msg(self, msg):
client = client_pb2.Client()
self.msg = client.ParseFromString(msg)
def connect(self):
ledd = LedD()
ledd.version = VERSION
ledd.hostname = socket.gethostname()
wrapper = WrapperMsg()
wrapper.type = WrapperMsg.Type.DISCOVER
wrapper.ledd = ledd
loop = asyncio.get_event_loop()
coro = loop.create_connection(LedDClientProtocol, self.msg.addr, self.msg.port)
loop.run_until_complete(coro)
self.transport = coro[0]
self.proto = coro[1]
self.send_to_client(wrapper.SerializeToString())
def is_connected(self):
return not self.transport.is_closing()
def send_to_client(self, data):
if self.is_connected() and data:
self.transport.write(data)

0
ledd/client/__init__.py Normal file
View File

0
ledd/client/socket.py Normal file
View File

View File

@@ -1,148 +0,0 @@
# LEDD Project
# Copyright (C) 2015 LEDD Team
#
# This program 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.
#
# This program 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/>.
import errno
import logging
import time
import smbus
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship, reconstructor
from . import Base
PCA9685_SUBADR1 = 0x2
PCA9685_SUBADR2 = 0x3
PCA9685_SUBADR3 = 0x4
PCA9685_MODE1 = 0x00
PCA9685_MODE2 = 0x01
PCA9685_PRESCALE = 0xFE
LED0_ON_L = 0x06
LED0_ON_H = 0x07
LED0_OFF_L = 0x08
LED0_OFF_H = 0x09
ALLLED_ON_L = 0xFA
ALLLED_ON_H = 0xFB
ALLLED_OFF_L = 0xFC
ALLLED_OFF_H = 0xFD
class Controller(Base):
__tablename__ = "controller"
id = Column(Integer, primary_key=True)
channels = Column(Integer)
i2c_device = Column(Integer)
address = Column(String)
stripes = relationship("Stripe", backref="controller")
_pwm_freq = Column("pwm_freq", Integer, default=1526)
"""
A controller controls a number of stripes.
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._mode = None
self.bus = smbus.SMBus(self.i2c_device)
self._address = int(self.address, 16)
self.pwm_freq = self._pwm_freq
@reconstructor
def init_on_load(self):
self._mode = None
self.bus = smbus.SMBus(self.i2c_device)
self._address = int(self.address, 16)
self.pwm_freq = self._pwm_freq
def __repr__(self):
return "<Controller stripes={} cid={}>".format(len(self.stripes), self.id)
def set_channel(self, channel, val, gamma):
self.bus.write_word_data(self._address, LED0_OFF_L + 4 * channel, self.gamma_correct(gamma, int(val * 4095),
4095))
self.bus.write_word_data(self._address, LED0_ON_L + 4 * channel, 0)
def set_all_channel(self, val):
self.bus.write_word_data(self._address, ALLLED_OFF_L, int(val * 4095))
self.bus.write_word_data(self._address, ALLLED_ON_L, 0)
@staticmethod
def gamma_correct(gamma, val, maxval):
corrected = int(pow(float(val) / float(maxval), float(gamma)) * float(maxval) + 0.5)
logging.getLogger(__name__).debug("GammaCorrect: in=%s out=%s, gamma=%s", val, corrected, gamma)
return corrected
def get_channel(self, channel):
try:
return self.bus.read_word_data(self._address, LED0_OFF_L + 4 * channel) / 4095
except OSError as e:
if int(e) == errno.ECOMM:
return 0
else:
raise
def reset(self):
self.mode = int("0b00100001", 2) # MODE1 -> 0b00000001
time.sleep(0.015)
self.mode = int("0b10100001", 2)
@property
def mode(self):
self._mode = self.bus.read_byte_data(self._address, PCA9685_MODE1)
logging.getLogger(__name__).debug("Controller mode: %s", bin(self._mode))
return self._mode
@mode.setter
def mode(self, mode):
self.bus.write_byte_data(self._address, PCA9685_MODE1, mode)
self._mode = mode
logging.getLogger(__name__).debug("Controller mode: %s", bin(self._mode))
@property
def pwm_freq(self):
self._pwm_freq = round(390625 / ((self.bus.read_byte_data(self._address, PCA9685_PRESCALE) + 1) * 64))
return self._pwm_freq
@pwm_freq.setter
def pwm_freq(self, value):
if value < 24 or value > 1526:
raise ValueError("PWM frequency must be 24Hz <= pwm_freq <= 1526Hz: {}".format(value))
prescal = round((25000000.0 / (4096.0 * value))) - 1
logging.getLogger(__name__).debug("Presacle value: %s", prescal)
self.mode = int("0b00110001", 2)
self.bus.write_byte_data(self._address, PCA9685_PRESCALE, prescal)
self.reset()
self._pwm_freq = value
def to_json(self):
return {
'id': self.id,
'pwm_freq': self.pwm_freq,
'channel': self.channels,
'address': self.address,
'stripes': self.stripes,
'cstripes': len(self.stripes),
'i2c_device': self.i2c_device,
'mode': self.mode
}
def close(self):
self.bus.close()

View File

@@ -20,21 +20,17 @@ import errno
import logging import logging
import os import os
import signal import signal
import sqlite3
import sys import sys
import spectra import spectra
from jsonrpc import JSONRPCResponseManager, dispatcher
from jsonrpc.exceptions import JSONRPCError, JSONRPCInvalidParams
from sqlalchemy import create_engine
from sqlalchemy.exc import OperationalError
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from ledd import VERSION from ledd import VERSION
from ledd.controller import Controller from ledd.db_helper import check_db
from ledd.effectstack import EffectStack from ledd.effect.effectstack import EffectStack
from ledd.models import Meta from ledd.led.rgb_stripe import RGBStripe
from ledd.stripe import Stripe from ledd.protobuf.ledd_pb2 import WrapperMsg
from . import Base, session
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@@ -42,8 +38,11 @@ daemonSection = 'daemon'
databaseSection = 'db' databaseSection = 'db'
""" :type : asyncio.BaseEventLoop """ """ :type : asyncio.BaseEventLoop """
effects = [] effects = []
stripes = [] leds = []
controller = [] clients = []
conn = None
loop = None
server = None
def run(): def run():
@@ -57,23 +56,13 @@ def run():
log.info("No config file found!") log.info("No config file found!")
# SQL init # SQL init
global engine global conn
engine = create_engine("sqlite:///" + config.get(databaseSection, 'name', fallback='ledd.sqlite'), conn = sqlite3.connect(config.get(databaseSection, 'name', fallback='ledd.sqlite'))
echo=log.getEffectiveLevel() == logging.DEBUG) conn.row_factory = sqlite3.Row
session.configure(bind=engine) check_db(conn)
Base.metadata.bind = engine
if not check_db():
init_db()
logging.getLogger("asyncio").setLevel(log.getEffectiveLevel()) logging.getLogger("asyncio").setLevel(log.getEffectiveLevel())
# Load to cache
global controller, stripes
controller = Controller.query.all()
for c in controller:
stripes.extend(c.stripes)
# sigterm handler # sigterm handler
def sigterm_handler(): def sigterm_handler():
raise SystemExit raise SystemExit
@@ -83,6 +72,9 @@ def run():
# init plugins # init plugins
# TODO: check all plugins for existing hooks # TODO: check all plugins for existing hooks
# init clients
# main loop # main loop
global loop, server global loop, server
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
@@ -95,15 +87,15 @@ def run():
except (KeyboardInterrupt, SystemExit): except (KeyboardInterrupt, SystemExit):
log.info("Exiting") log.info("Exiting")
for c in controller: for c in clients:
c.close() c.close()
try: try:
os.remove("ledd.pid") os.remove("ledd.pid")
except FileNotFoundError: except FileNotFoundError:
pass pass
session.commit() conn.commit()
session.close() conn.close()
if server is not None: if server is not None:
server.close() server.close()
if loop is not None: if loop is not None:
@@ -112,32 +104,6 @@ def run():
sys.exit(0) sys.exit(0)
def check_db():
"""
Checks database version
:return: database validity
:rtype: bool
"""
try:
db_version = Meta.get_version()
if db_version is not None:
log.info("DB connection established; db_version=%s", db_version)
return True
except OperationalError:
return False
return False
def init_db():
Base.metadata.drop_all()
Base.metadata.create_all()
session.add(Meta(option="db_version", value="2"))
session.commit()
check_db()
@dispatcher.add_method
def start_effect(**kwargs): def start_effect(**kwargs):
""" """
Part of the Color API. Used to start a specific effect. Part of the Color API. Used to start a specific effect.
@@ -145,10 +111,7 @@ def start_effect(**kwargs):
:param kwargs: :param kwargs:
""" """
if "sids" not in kwargs or "eid" not in kwargs or "eopt" not in kwargs: for stripe in RGBStripe.query.filter(RGBStripe.id.in_(kwargs['sids'])):
return JSONRPCInvalidParams()
for stripe in Stripe.query.filter(Stripe.id.in_(kwargs['sids'])):
# TODO: add anything required to start effect with req_json['eid'] # TODO: add anything required to start effect with req_json['eid']
# on stripes[] with options in req_json['eopt'] # on stripes[] with options in req_json['eopt']
effect = EffectStack() effect = EffectStack()
@@ -160,15 +123,14 @@ def start_effect(**kwargs):
rjson = { rjson = {
'eident': None, # unique effect identifier that identifies excatly this effect started on this set of 'eident': None, # unique effect identifier that identifies excatly this effect started on this set of
# stripes, used to stop them later and to give informations about running effects # stripes, used to stop them later and to give informations about running effect
} }
return rjson return rjson
return JSONRPCError(-1003, "Stripeid not found") # return JSONRPCError(-1003, "Stripeid not found")
@dispatcher.add_method
def stop_effect(**kwargs): def stop_effect(**kwargs):
""" """
Part of the Color API. Used to stop a specific effect. Part of the Color API. Used to stop a specific effect.
@@ -178,27 +140,25 @@ def stop_effect(**kwargs):
# TODO: add stop effect by eident logic # TODO: add stop effect by eident logic
@dispatcher.add_method
def get_effects(**kwargs): def get_effects(**kwargs):
""" """
Part of the Color API. Used to show all available and running effects. Part of the Color API. Used to show all available and running effect.
Required parameters: - Required parameters: -
""" """
# TODO: list all effects here and on which stripes they run atm # TODO: list all effect here and on which stripes they run atm
# TODO: all effects get runtime only ids, "eid"'s. They are shown here for the client to start effects. # TODO: all effect get runtime only ids, "eid"'s. They are shown here for the client to start effect.
# TODO: All options that an effect may have need to be transmitted here too with "eopt". # TODO: All options that an effect may have need to be transmitted here too with "eopt".
@dispatcher.add_method
def set_color(**kwargs): def set_color(**kwargs):
""" """
Part of the Color API. Used to set color of a stripe. Part of the Color API. Used to set color of a stripe.
Required parameters: stripe ID: sid; HSV values hsv: h,s,v, controller id: cid Required parameters: stripe ID: sid; HSV values hsv: h,s,v, controller id: cid
""" """
if "sid" not in kwargs or "hsv" not in kwargs: # if "sid" not in kwargs or "hsv" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
stripe = get_stripe(kwargs['sid']) stripe = get_stripe(kwargs['sid'])
@@ -213,20 +173,17 @@ def set_color(**kwargs):
raise raise
else: else:
log.warning("Stripe not found: id=%s", kwargs['sid']) log.warning("Stripe not found: id=%s", kwargs['sid'])
return JSONRPCError(-1003, "Stripeid not found") # return JSONRPCError(-1003, "Stripeid not found")
return ""
@dispatcher.add_method
def set_color_all(**kwargs): def set_color_all(**kwargs):
""" """
Part of the Color API. Used to set brightness of all stripes a controller owns. Part of the Color API. Used to set brightness of all stripes a controller owns.
Required parameters: controller id: cid, value: v Required parameters: controller id: cid, value: v
""" """
if "cid" not in kwargs or "v" not in kwargs: # if "cid" not in kwargs or "v" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
try: try:
c = get_controller(kwargs['cid']) c = get_controller(kwargs['cid'])
@@ -235,113 +192,109 @@ def set_color_all(**kwargs):
c.set_all_channel(kwargs['v']) c.set_all_channel(kwargs['v'])
except NoResultFound: except NoResultFound:
log.warning("Controller not found: id=%s", kwargs['cid']) log.warning("Controller not found: id=%s", kwargs['cid'])
return JSONRPCError(-1002, "Controller not found") # return JSONRPCError(-1002, "Controller not found")
return "" return ""
@dispatcher.add_method def add_client(**kwargs):
def add_controller(**kwargs):
""" """
Part of the Color API. Used to add a controller. Part of the ledd protocol. Used to add a client.
Required parameters: channels; i2c_dev: number of i2c device (e.g. /dev/i2c-1 would be i2c_dev = 1);
address: hexdecimal address of controller on i2c bus, e.g. 0x40
""" """
if "i2c_dev" not in kwargs or "channels" not in kwargs or "address" not in kwargs: # if "i2c_dev" not in kwargs or "channels" not in kwargs or "address" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
try: try:
ncontroller = Controller(channels=int(kwargs['channels']), i2c_device=int(kwargs['i2c_dev']), pass
address=kwargs['address'], _pwm_freq=1526) # ncontroller = Controller(channels=int(kwargs['channels']), i2c_device=int(kwargs['i2c_dev']),
# address=kwargs['address'], _pwm_freq=1526)
except OSError as e: except OSError as e:
log.error("Error opening i2c device: %s (%s)", kwargs['i2c_dev'], e) log.error("Error opening i2c device: %s (%s)", kwargs['i2c_dev'], e)
return JSONRPCError(-1004, "Error while opening i2c device", e) # return JSONRPCError(-1004, "Error while opening i2c device", e)
session.add(ncontroller) # session = Session()
session.commit() # session.add(ncontroller)
# session.commit()
controller.append(ncontroller) # clients.append(ncontroller)
return {'cid': ncontroller.id} # return {'cid': ncontroller.id}
@dispatcher.add_method
def get_color(**kwargs): def get_color(**kwargs):
""" """
Part of the Color API. Used to get the current color of an stripe. Part of the Color API. Used to get the current color of an stripe.
Required parameters: sid Required parameters: sid
""" """
if "sid" not in kwargs: # if "sid" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
stripe = get_stripe(kwargs['sid']) stripe = get_stripe(kwargs['sid'])
if not stripe: if not stripe:
log.warning("Stripe not found: id=%s", kwargs['sid']) log.warning("Stripe not found: id=%s", kwargs['sid'])
return JSONRPCError(-1003, "Stripeid not found") # return JSONRPCError(-1003, "Stripeid not found")
if stripe.color: if stripe.color:
return {'color': stripe.color.values} return {'color': stripe.color.values}
else: else:
log.warning("Stripe has no color: id=%s", kwargs['sid']) log.warning("Stripe has no color: id=%s", kwargs['sid'])
return JSONRPCError(-1009, "Internal Error") # return JSONRPCError(-1009, "Internal Error")
@dispatcher.add_method def add_led(**kwargs):
def add_stripe(**kwargs):
""" """
Part of the Color API. Used to add stripes. Part of the Color API. Used to add stripes.
Required parameters: name; rgb: bool; map: r: r-channel, g: g-channel, b: b-channel, cid Required parameters: name; rgb: bool; map: r: r-channel, g: g-channel, b: b-channel, cid
""" """
if "name" not in kwargs or "rgb" not in kwargs or "map" not in kwargs or "cid" not in kwargs: # if "name" not in kwargs or "rgb" not in kwargs or "map" not in kwargs or "cid" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
c = get_controller(kwargs['cid']) c = get_controller(kwargs['cid'])
""" :type c: ledd.controller.Controller """ """ :type c: ledd.controller.Controller """
if c is None: if c is None:
log.warning("Controller not found: id=%s", kwargs['cid']) log.warning("Controller not found: id=%s", kwargs['cid'])
return JSONRPCError(-1002, "Controller not found") # return JSONRPCError(-1002, "Controller not found")
s = Stripe(name=kwargs['name'], rgb=bool(kwargs['rgb']), s = RGBStripe(name=kwargs['name'], rgb=bool(kwargs['rgb']),
channel_r=kwargs['map']['r'], channel_g=kwargs['map']['g'], channel_b=kwargs['map']['b']) channel_r=kwargs['map']['r'], channel_g=kwargs['map']['g'], channel_b=kwargs['map']['b'])
s.controller = c s.controller = c
log.debug("Added stripe %s to controller %s; new len %s", s.id, c.id, len(c.stripes)) log.debug("Added stripe %s to controller %s; new len %s", s.id, c.id, len(c.stripes))
session.add(s) # session = Session()
session.commit() # session.add(s)
stripes.append(s) # session.commit()
leds.append(s)
return {'sid': s.id} return {'sid': s.id}
@dispatcher.add_method def get_leds(**kwargs):
def get_stripes(**kwargs):
""" """
Part of the Color API. Used to get all registered stripes known to the daemon. Part of the Color API. Used to get all registered stripes known to the daemon.
Required parameters: - Required parameters: -
""" """
rjson = { rjson = {
'ccount': len(controller), # 'ccount': len(controller),
'controller': controller # 'controller': controller
} }
return rjson return rjson
@dispatcher.add_method
def test_channel(**kwargs): def test_channel(**kwargs):
""" """
Part of the Color API. Used to test a channel on a specified controller. Part of the Color API. Used to test a channel on a specified controller.
Required parameters: controller id: cid, channel, value Required parameters: controller id: cid, channel, value
""" """
if "cid" not in kwargs or "channel" not in kwargs or "value" not in kwargs: # if "cid" not in kwargs or "channel" not in kwargs or "value" not in kwargs:
return JSONRPCInvalidParams() # return JSONRPCInvalidParams()
contr = get_controller(kwargs['cid']) contr = get_controller(kwargs['cid'])
""" :type : ledd.controller.Controller """ """ :type : ledd.controller.Controller """
@@ -350,14 +303,13 @@ def test_channel(**kwargs):
try: try:
contr.set_channel(kwargs['channel'], kwargs['value'], 2.8) contr.set_channel(kwargs['channel'], kwargs['value'], 2.8)
except OSError as e: except OSError as e:
return JSONRPCError(-1009, "Internal Error", e) pass
# return JSONRPCError(-1009, "Internal Error", e)
else: else:
return JSONRPCError(-1002, "Controller not found") pass
# return JSONRPCError(-1002, "Controller not found")
return ""
@dispatcher.add_method
def discover(**kwargs): def discover(**kwargs):
""" """
Part of the Color API. Used by mobile applications to find the controller. Part of the Color API. Used by mobile applications to find the controller.
@@ -368,15 +320,33 @@ def discover(**kwargs):
def get_stripe(sid): def get_stripe(sid):
for s in stripes: pass
if s.id == sid: # for s in stripes:
return s # if s.id == sid:
# return s
def get_controller(cid): def get_controller(cid):
for c in controller: pass
if c.id == cid: # for c in controller:
return c # if c.id == cid:
# return c
function_mapping = {WrapperMsg.Type.LED_GET_ALL: get_leds,
WrapperMsg.Type.LED_ADD: add_led,
WrapperMsg.Type.CLIENT_ADD: add_client,
# WrapperMsg.Type.LED_PERC_SET: ,
# WrapperMsg.Type.LED_PERC_GET: ,
# WrapperMsg.Type.CLIENT_LED_SET: ,
# WrapperMsg.Type.CLIENT_GET: ,
# WrapperMsg.Type.CLIENT_GET_LED_OPTIONS: ,
# WrapperMsg.Type.CLIENT_SET_LOCAL_DIRECT: ,
# WrapperMsg.Type.LEDGROUP_GET: ,
# WrapperMsg.Type.LEDGROUP_GET_ALL: ,
# WrapperMsg.Type.LEDGROUP_SET_COLOR: ,
# WrapperMsg.Type.LEDGROUP_ADD: ,
}
class LedDProtocol(asyncio.Protocol): class LedDProtocol(asyncio.Protocol):
@@ -388,21 +358,23 @@ class LedDProtocol(asyncio.Protocol):
def data_received(self, data): def data_received(self, data):
try: try:
d_decoded = data.decode() wrapper_msg = WrapperMsg()
wrapper_msg = wrapper_msg.ParseFromString(data)
except UnicodeDecodeError: except UnicodeDecodeError:
log.warning("Recieved undecodable data, ignoring") log.warning("Recieved undecodable data, ignoring")
else: else:
self.select_task(d_decoded) self.select_task(wrapper_msg)
def select_task(self, data): def select_task(self, data):
if data: if data:
data_split = data.splitlines() response = function_mapping[data.type](data)
for line in data_split:
if line: if response:
try: try:
self.transport.write(JSONRPCResponseManager.handle(line, dispatcher).json.encode()) # noinspection PyUnresolvedReferences
except TypeError as te: self.transport.write(response.SerializeToString())
log.warning("Can't send response: %s", te) except TypeError as te:
log.warning("Can't send response: %s", te)
def connection_lost(self, exc): def connection_lost(self, exc):
log.info("Lost connection to %s", self.transport.get_extra_info("peername")) log.info("Lost connection to %s", self.transport.get_extra_info("peername"))

22
ledd/db_helper.py Normal file
View File

@@ -0,0 +1,22 @@
DB_VERSION = 1
def check_db(conn):
cur = conn.cursor()
cur.execute("SELECT value FROM meta WHERE name='version'")
ver = cur.fetchone()
if ver:
ver = int(ver)
if ver < DB_VERSION:
upgrade_db(conn, ver, DB_VERSION)
else:
with open('sql/ledd.sql', 'r') as f:
cur.executescript(f.read())
conn.commit()
def upgrade_db(conn, old, new):
pass

View File

@@ -17,7 +17,7 @@
class BaseEffect(object): class BaseEffect(object):
""" """
This class only defines default meta-data for effects. This class only defines default meta-data for effect.
""" """
name = "BaseEffect" name = "BaseEffect"
version = "0.1" version = "0.1"

View File

@@ -16,7 +16,7 @@
import asyncio import asyncio
from ledd.effects.fadeeffect import FadeEffect from ledd.effect.fadeeffect import FadeEffect
class EffectStack(object): class EffectStack(object):

View File

@@ -16,7 +16,7 @@
import spectra import spectra
from ledd.effects.generatoreffect import GeneratorEffect from ledd.effect.generatoreffect import GeneratorEffect
class FadeEffect(GeneratorEffect): class FadeEffect(GeneratorEffect):

View File

@@ -16,12 +16,12 @@
from spectra import Color from spectra import Color
from ledd.effects.baseeffect import BaseEffect from ledd.effect.baseeffect import BaseEffect
class GeneratorEffect(BaseEffect): class GeneratorEffect(BaseEffect):
""" """
This is a base class for simple effects. This is a base class for simple effect.
It should yield a new color on each execution. It should yield a new color on each execution.
""" """

0
ledd/led/__init__.py Normal file
View File

View File

@@ -15,16 +15,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from spectra import Color from spectra import Color
from sqlalchemy import Integer, ForeignKey, String, Float, Boolean
from sqlalchemy import Column
from sqlalchemy.orm import reconstructor
from . import Base
class Stripe(Base): class RGBStripe:
""" """
A stripe is the smallest controllable unit. A group of leds representing an common RGB stripe.
""" """
__tablename__ = "stripe" __tablename__ = "stripe"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)

View File

@@ -1,29 +0,0 @@
# LEDD Project
# Copyright (C) 2015 LEDD Team
#
# This program 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.
#
# This program 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/>.
from sqlalchemy import String, Column
from . import Base
class Meta(Base):
__tablename__ = "meta"
option = Column(String, primary_key=True)
value = Column(String)
@classmethod
def get_version(cls):
return cls.query.filter(Meta.option == "db_version").first()

View File

379
ledd/protobuf/client_pb2.py Normal file
View File

@@ -0,0 +1,379 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: client.proto
import sys
_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='client.proto',
package='ledd',
syntax='proto3',
serialized_pb=_b(
'\n\x0c\x63lient.proto\x12\x04ledd\"\xd3\x01\n\x06\x43lient\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x0f\n\x07max_led\x18\x03 \x01(\x05\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\x12\x12\n\nresolution\x18\x06 \x01(\x05\x12\x0c\n\x04port\x18\x07 \x01(\x05\x12*\n\x07options\x18\n \x03(\x0b\x32\x19.ledd.Client.OptionsEntry\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"(\n\x07\x43lients\x12\x1d\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x0c.ledd.Client\"?\n\x16\x43lientSetPercentageAll\x12\x12\n\npercentage\x18\x01 \x01(\x02\x12\x11\n\tclient_id\x18\x02 \x03(\x05\"<\n\x14\x43lientSetLocalDirect\x12\x10\n\x08local_id\x18\x01 \x01(\x05\x12\x12\n\npercentage\x18\x02 \x01(\x02\"x\n\x10\x43lientLEDOptions\x12\x34\n\x07options\x18\x01 \x03(\x0b\x32#.ledd.ClientLEDOptions.OptionsEntry\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x62\x06proto3')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_CLIENT_OPTIONSENTRY = _descriptor.Descriptor(
name='OptionsEntry',
full_name='ledd.Client.OptionsEntry',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='ledd.Client.OptionsEntry.key', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='value', full_name='ledd.Client.OptionsEntry.value', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=188,
serialized_end=234,
)
_CLIENT = _descriptor.Descriptor(
name='Client',
full_name='ledd.Client',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='ledd.Client.id', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='address', full_name='ledd.Client.address', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='max_led', full_name='ledd.Client.max_led', index=2,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='name', full_name='ledd.Client.name', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='version', full_name='ledd.Client.version', index=4,
number=5, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='resolution', full_name='ledd.Client.resolution', index=5,
number=6, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='port', full_name='ledd.Client.port', index=6,
number=7, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='options', full_name='ledd.Client.options', index=7,
number=10, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[_CLIENT_OPTIONSENTRY, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=23,
serialized_end=234,
)
_CLIENTS = _descriptor.Descriptor(
name='Clients',
full_name='ledd.Clients',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='clients', full_name='ledd.Clients.clients', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=236,
serialized_end=276,
)
_CLIENTSETPERCENTAGEALL = _descriptor.Descriptor(
name='ClientSetPercentageAll',
full_name='ledd.ClientSetPercentageAll',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='percentage', full_name='ledd.ClientSetPercentageAll.percentage', index=0,
number=1, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client_id', full_name='ledd.ClientSetPercentageAll.client_id', index=1,
number=2, type=5, cpp_type=1, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=278,
serialized_end=341,
)
_CLIENTSETLOCALDIRECT = _descriptor.Descriptor(
name='ClientSetLocalDirect',
full_name='ledd.ClientSetLocalDirect',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='local_id', full_name='ledd.ClientSetLocalDirect.local_id', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='percentage', full_name='ledd.ClientSetLocalDirect.percentage', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=343,
serialized_end=403,
)
_CLIENTLEDOPTIONS_OPTIONSENTRY = _descriptor.Descriptor(
name='OptionsEntry',
full_name='ledd.ClientLEDOptions.OptionsEntry',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='ledd.ClientLEDOptions.OptionsEntry.key', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='value', full_name='ledd.ClientLEDOptions.OptionsEntry.value', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=188,
serialized_end=234,
)
_CLIENTLEDOPTIONS = _descriptor.Descriptor(
name='ClientLEDOptions',
full_name='ledd.ClientLEDOptions',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='options', full_name='ledd.ClientLEDOptions.options', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[_CLIENTLEDOPTIONS_OPTIONSENTRY, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=405,
serialized_end=525,
)
_CLIENT_OPTIONSENTRY.containing_type = _CLIENT
_CLIENT.fields_by_name['options'].message_type = _CLIENT_OPTIONSENTRY
_CLIENTS.fields_by_name['clients'].message_type = _CLIENT
_CLIENTLEDOPTIONS_OPTIONSENTRY.containing_type = _CLIENTLEDOPTIONS
_CLIENTLEDOPTIONS.fields_by_name['options'].message_type = _CLIENTLEDOPTIONS_OPTIONSENTRY
DESCRIPTOR.message_types_by_name['Client'] = _CLIENT
DESCRIPTOR.message_types_by_name['Clients'] = _CLIENTS
DESCRIPTOR.message_types_by_name['ClientSetPercentageAll'] = _CLIENTSETPERCENTAGEALL
DESCRIPTOR.message_types_by_name['ClientSetLocalDirect'] = _CLIENTSETLOCALDIRECT
DESCRIPTOR.message_types_by_name['ClientLEDOptions'] = _CLIENTLEDOPTIONS
Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), dict(
OptionsEntry=_reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), dict(
DESCRIPTOR=_CLIENT_OPTIONSENTRY,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.Client.OptionsEntry)
))
,
DESCRIPTOR=_CLIENT,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.Client)
))
_sym_db.RegisterMessage(Client)
_sym_db.RegisterMessage(Client.OptionsEntry)
Clients = _reflection.GeneratedProtocolMessageType('Clients', (_message.Message,), dict(
DESCRIPTOR=_CLIENTS,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.Clients)
))
_sym_db.RegisterMessage(Clients)
ClientSetPercentageAll = _reflection.GeneratedProtocolMessageType('ClientSetPercentageAll', (_message.Message,), dict(
DESCRIPTOR=_CLIENTSETPERCENTAGEALL,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.ClientSetPercentageAll)
))
_sym_db.RegisterMessage(ClientSetPercentageAll)
ClientSetLocalDirect = _reflection.GeneratedProtocolMessageType('ClientSetLocalDirect', (_message.Message,), dict(
DESCRIPTOR=_CLIENTSETLOCALDIRECT,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.ClientSetLocalDirect)
))
_sym_db.RegisterMessage(ClientSetLocalDirect)
ClientLEDOptions = _reflection.GeneratedProtocolMessageType('ClientLEDOptions', (_message.Message,), dict(
OptionsEntry=_reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), dict(
DESCRIPTOR=_CLIENTLEDOPTIONS_OPTIONSENTRY,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.ClientLEDOptions.OptionsEntry)
))
,
DESCRIPTOR=_CLIENTLEDOPTIONS,
__module__='client_pb2'
# @@protoc_insertion_point(class_scope:ledd.ClientLEDOptions)
))
_sym_db.RegisterMessage(ClientLEDOptions)
_sym_db.RegisterMessage(ClientLEDOptions.OptionsEntry)
_CLIENT_OPTIONSENTRY.has_options = True
_CLIENT_OPTIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
_CLIENTLEDOPTIONS_OPTIONSENTRY.has_options = True
_CLIENTLEDOPTIONS_OPTIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
# @@protoc_insertion_point(module_scope)

79
ledd/protobuf/hsv_pb2.py Normal file
View File

@@ -0,0 +1,79 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hsv.proto
import sys
_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='hsv.proto',
package='ledd',
syntax='proto3',
serialized_pb=_b(
'\n\thsv.proto\x12\x04ledd\",\n\x03HSV\x12\x0b\n\x03hue\x18\x01 \x01(\x02\x12\x0b\n\x03sat\x18\x02 \x01(\x02\x12\x0b\n\x03val\x18\x03 \x01(\x02\x62\x06proto3')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_HSV = _descriptor.Descriptor(
name='HSV',
full_name='ledd.HSV',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='hue', full_name='ledd.HSV.hue', index=0,
number=1, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='sat', full_name='ledd.HSV.sat', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='val', full_name='ledd.HSV.val', index=2,
number=3, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=19,
serialized_end=63,
)
DESCRIPTOR.message_types_by_name['HSV'] = _HSV
HSV = _reflection.GeneratedProtocolMessageType('HSV', (_message.Message,), dict(
DESCRIPTOR=_HSV,
__module__='hsv_pb2'
# @@protoc_insertion_point(class_scope:ledd.HSV)
))
_sym_db.RegisterMessage(HSV)
# @@protoc_insertion_point(module_scope)

450
ledd/protobuf/led_pb2.py Normal file
View File

@@ -0,0 +1,450 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: led.proto
import sys
_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from . import hsv_pb2 as hsv__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='led.proto',
package='ledd',
syntax='proto3',
serialized_pb=_b(
'\n\tled.proto\x12\x04ledd\x1a\thsv.proto\"\x9d\x01\n\x03LED\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x10\n\x08local_id\x18\x03 \x01(\x05\x12\x11\n\tclient_id\x18\x04 \x01(\x05\x12\'\n\x07options\x18\n \x03(\x0b\x32\x16.ledd.LED.OptionsEntry\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x08LEDGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12&\n\x04type\x18\x03 \x01(\x0e\x32\x18.ledd.LEDGroup.GroupType\x12\x0c\n\x04size\x18\x04 \x01(\x05\x12\x0f\n\x07led_ids\x18\n \x03(\x05\"\x1e\n\tGroupType\x12\x07\n\x03RGB\x10\x00\x12\x08\n\x04USER\x10\x01\"\x1f\n\x04LEDs\x12\x17\n\x04leds\x18\x01 \x03(\x0b\x32\t.ledd.LED\"/\n\tLEDGroups\x12\"\n\nled_groups\x18\x01 \x03(\x0b\x32\x0e.ledd.LEDGroup\"0\n\rLEDPercentage\x12\x0b\n\x03led\x18\x01 \x01(\x05\x12\x12\n\npercentage\x18\x02 \x01(\x02\"8\n\rLEDGroupColor\x12\r\n\x05group\x18\x01 \x01(\x05\x12\x18\n\x05\x63olor\x18\x02 \x01(\x0b\x32\t.ledd.HSV\"1\n\x12LEDGroupPercentage\x12\r\n\x05group\x18\x01 \x01(\x05\x12\x0c\n\x04perc\x18\x02 \x01(\x02\x62\x06proto3')
,
dependencies=[hsv__pb2.DESCRIPTOR, ])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_LEDGROUP_GROUPTYPE = _descriptor.EnumDescriptor(
name='GroupType',
full_name='ledd.LEDGroup.GroupType',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='RGB', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='USER', index=1, number=1,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=300,
serialized_end=330,
)
_sym_db.RegisterEnumDescriptor(_LEDGROUP_GROUPTYPE)
_LED_OPTIONSENTRY = _descriptor.Descriptor(
name='OptionsEntry',
full_name='ledd.LED.OptionsEntry',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='ledd.LED.OptionsEntry.key', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='value', full_name='ledd.LED.OptionsEntry.value', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=142,
serialized_end=188,
)
_LED = _descriptor.Descriptor(
name='LED',
full_name='ledd.LED',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='ledd.LED.name', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='id', full_name='ledd.LED.id', index=1,
number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='local_id', full_name='ledd.LED.local_id', index=2,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client_id', full_name='ledd.LED.client_id', index=3,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='options', full_name='ledd.LED.options', index=4,
number=10, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[_LED_OPTIONSENTRY, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=31,
serialized_end=188,
)
_LEDGROUP = _descriptor.Descriptor(
name='LEDGroup',
full_name='ledd.LEDGroup',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='ledd.LEDGroup.name', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='id', full_name='ledd.LEDGroup.id', index=1,
number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='type', full_name='ledd.LEDGroup.type', index=2,
number=3, type=14, cpp_type=8, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='size', full_name='ledd.LEDGroup.size', index=3,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_ids', full_name='ledd.LEDGroup.led_ids', index=4,
number=10, type=5, cpp_type=1, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
_LEDGROUP_GROUPTYPE,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=191,
serialized_end=330,
)
_LEDS = _descriptor.Descriptor(
name='LEDs',
full_name='ledd.LEDs',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='leds', full_name='ledd.LEDs.leds', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=332,
serialized_end=363,
)
_LEDGROUPS = _descriptor.Descriptor(
name='LEDGroups',
full_name='ledd.LEDGroups',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='led_groups', full_name='ledd.LEDGroups.led_groups', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=365,
serialized_end=412,
)
_LEDPERCENTAGE = _descriptor.Descriptor(
name='LEDPercentage',
full_name='ledd.LEDPercentage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='led', full_name='ledd.LEDPercentage.led', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='percentage', full_name='ledd.LEDPercentage.percentage', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=414,
serialized_end=462,
)
_LEDGROUPCOLOR = _descriptor.Descriptor(
name='LEDGroupColor',
full_name='ledd.LEDGroupColor',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='group', full_name='ledd.LEDGroupColor.group', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='color', full_name='ledd.LEDGroupColor.color', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=464,
serialized_end=520,
)
_LEDGROUPPERCENTAGE = _descriptor.Descriptor(
name='LEDGroupPercentage',
full_name='ledd.LEDGroupPercentage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='group', full_name='ledd.LEDGroupPercentage.group', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='perc', full_name='ledd.LEDGroupPercentage.perc', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=522,
serialized_end=571,
)
_LED_OPTIONSENTRY.containing_type = _LED
_LED.fields_by_name['options'].message_type = _LED_OPTIONSENTRY
_LEDGROUP.fields_by_name['type'].enum_type = _LEDGROUP_GROUPTYPE
_LEDGROUP_GROUPTYPE.containing_type = _LEDGROUP
_LEDS.fields_by_name['leds'].message_type = _LED
_LEDGROUPS.fields_by_name['led_groups'].message_type = _LEDGROUP
_LEDGROUPCOLOR.fields_by_name['color'].message_type = hsv__pb2._HSV
DESCRIPTOR.message_types_by_name['LED'] = _LED
DESCRIPTOR.message_types_by_name['LEDGroup'] = _LEDGROUP
DESCRIPTOR.message_types_by_name['LEDs'] = _LEDS
DESCRIPTOR.message_types_by_name['LEDGroups'] = _LEDGROUPS
DESCRIPTOR.message_types_by_name['LEDPercentage'] = _LEDPERCENTAGE
DESCRIPTOR.message_types_by_name['LEDGroupColor'] = _LEDGROUPCOLOR
DESCRIPTOR.message_types_by_name['LEDGroupPercentage'] = _LEDGROUPPERCENTAGE
LED = _reflection.GeneratedProtocolMessageType('LED', (_message.Message,), dict(
OptionsEntry=_reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), dict(
DESCRIPTOR=_LED_OPTIONSENTRY,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LED.OptionsEntry)
))
,
DESCRIPTOR=_LED,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LED)
))
_sym_db.RegisterMessage(LED)
_sym_db.RegisterMessage(LED.OptionsEntry)
LEDGroup = _reflection.GeneratedProtocolMessageType('LEDGroup', (_message.Message,), dict(
DESCRIPTOR=_LEDGROUP,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDGroup)
))
_sym_db.RegisterMessage(LEDGroup)
LEDs = _reflection.GeneratedProtocolMessageType('LEDs', (_message.Message,), dict(
DESCRIPTOR=_LEDS,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDs)
))
_sym_db.RegisterMessage(LEDs)
LEDGroups = _reflection.GeneratedProtocolMessageType('LEDGroups', (_message.Message,), dict(
DESCRIPTOR=_LEDGROUPS,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDGroups)
))
_sym_db.RegisterMessage(LEDGroups)
LEDPercentage = _reflection.GeneratedProtocolMessageType('LEDPercentage', (_message.Message,), dict(
DESCRIPTOR=_LEDPERCENTAGE,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDPercentage)
))
_sym_db.RegisterMessage(LEDPercentage)
LEDGroupColor = _reflection.GeneratedProtocolMessageType('LEDGroupColor', (_message.Message,), dict(
DESCRIPTOR=_LEDGROUPCOLOR,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDGroupColor)
))
_sym_db.RegisterMessage(LEDGroupColor)
LEDGroupPercentage = _reflection.GeneratedProtocolMessageType('LEDGroupPercentage', (_message.Message,), dict(
DESCRIPTOR=_LEDGROUPPERCENTAGE,
__module__='led_pb2'
# @@protoc_insertion_point(class_scope:ledd.LEDGroupPercentage)
))
_sym_db.RegisterMessage(LEDGroupPercentage)
_LED_OPTIONSENTRY.has_options = True
_LED_OPTIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
# @@protoc_insertion_point(module_scope)

295
ledd/protobuf/ledd_pb2.py Normal file
View File

@@ -0,0 +1,295 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: ledd.proto
import sys
_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from . import led_pb2 as led__pb2
from . import client_pb2 as client__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='ledd.proto',
package='ledd',
syntax='proto3',
serialized_pb=_b(
'\n\nledd.proto\x12\x04ledd\x1a\tled.proto\x1a\x0c\x63lient.proto\")\n\x04LedD\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"\xe1\x06\n\nWrapperMsg\x12#\n\x04type\x18\x01 \x01(\x0e\x32\x15.ledd.WrapperMsg.Type\x12\x16\n\x03led\x18\x02 \x01(\x0b\x32\t.ledd.LED\x12\x18\n\x04leds\x18\x03 \x01(\x0b\x32\n.ledd.LEDs\x12!\n\tled_group\x18\x04 \x01(\x0b\x32\x0e.ledd.LEDGroup\x12#\n\nled_groups\x18\x05 \x01(\x0b\x32\x0f.ledd.LEDGroups\x12%\n\x08led_perc\x18\x06 \x01(\x0b\x32\x13.ledd.LEDPercentage\x12,\n\x0fled_group_color\x18\x07 \x01(\x0b\x32\x13.ledd.LEDGroupColor\x12\x18\n\x04ledd\x18\x08 \x01(\x0b\x32\n.ledd.LedD\x12\x1c\n\x06\x63lient\x18\t \x01(\x0b\x32\x0c.ledd.Client\x12\x1e\n\x07\x63lients\x18\n \x01(\x0b\x32\r.ledd.Clients\x12\x35\n\x11\x63lient_set_direct\x18\x0b \x01(\x0b\x32\x1a.ledd.ClientSetLocalDirect\x12\x32\n\x12\x63lient_led_options\x18\x0c \x01(\x0b\x32\x16.ledd.ClientLEDOptions\x12\x39\n\x13\x63lient_set_perc_all\x18\r \x01(\x0b\x32\x1c.ledd.ClientSetPercentageAll\x12\x30\n\x0eled_group_perc\x18\x0e \x01(\x0b\x32\x18.ledd.LEDGroupPercentage\"\xae\x02\n\x04Type\x12\x0f\n\x0bLED_GET_ALL\x10\x00\x12\x0b\n\x07LED_ADD\x10\x01\x12\x0e\n\nCLIENT_ADD\x10\x02\x12\x17\n\x13\x43LIENT_SET_PERC_ALL\x10\x03\x12\x10\n\x0cLED_PERC_SET\x10\x04\x12\x10\n\x0cLED_PERC_GET\x10\x05\x12\x12\n\x0e\x43LIENT_LED_SET\x10\x06\x12\x0c\n\x08\x44ISCOVER\x10\x07\x12\x0e\n\nCLIENT_GET\x10\x08\x12\x1a\n\x16\x43LIENT_GET_LED_OPTIONS\x10\t\x12\x1b\n\x17\x43LIENT_SET_LOCAL_DIRECT\x10\n\x12\x10\n\x0cLEDGROUP_GET\x10\x0b\x12\x14\n\x10LEDGROUP_GET_ALL\x10\x0c\x12\x16\n\x12LEDGROUP_SET_COLOR\x10\r\x12\x10\n\x0cLEDGROUP_ADD\x10\x0e\x62\x06proto3')
,
dependencies=[led__pb2.DESCRIPTOR, client__pb2.DESCRIPTOR, ])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_WRAPPERMSG_TYPE = _descriptor.EnumDescriptor(
name='Type',
full_name='ledd.WrapperMsg.Type',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='LED_GET_ALL', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LED_ADD', index=1, number=1,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_ADD', index=2, number=2,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_SET_PERC_ALL', index=3, number=3,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LED_PERC_SET', index=4, number=4,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LED_PERC_GET', index=5, number=5,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_LED_SET', index=6, number=6,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DISCOVER', index=7, number=7,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_GET', index=8, number=8,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_GET_LED_OPTIONS', index=9, number=9,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT_SET_LOCAL_DIRECT', index=10, number=10,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LEDGROUP_GET', index=11, number=11,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LEDGROUP_GET_ALL', index=12, number=12,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LEDGROUP_SET_COLOR', index=13, number=13,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='LEDGROUP_ADD', index=14, number=14,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=652,
serialized_end=954,
)
_sym_db.RegisterEnumDescriptor(_WRAPPERMSG_TYPE)
_LEDD = _descriptor.Descriptor(
name='LedD',
full_name='ledd.LedD',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='hostname', full_name='ledd.LedD.hostname', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='version', full_name='ledd.LedD.version', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=45,
serialized_end=86,
)
_WRAPPERMSG = _descriptor.Descriptor(
name='WrapperMsg',
full_name='ledd.WrapperMsg',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='type', full_name='ledd.WrapperMsg.type', index=0,
number=1, type=14, cpp_type=8, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led', full_name='ledd.WrapperMsg.led', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='leds', full_name='ledd.WrapperMsg.leds', index=2,
number=3, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_group', full_name='ledd.WrapperMsg.led_group', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_groups', full_name='ledd.WrapperMsg.led_groups', index=4,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_perc', full_name='ledd.WrapperMsg.led_perc', index=5,
number=6, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_group_color', full_name='ledd.WrapperMsg.led_group_color', index=6,
number=7, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='ledd', full_name='ledd.WrapperMsg.ledd', index=7,
number=8, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client', full_name='ledd.WrapperMsg.client', index=8,
number=9, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='clients', full_name='ledd.WrapperMsg.clients', index=9,
number=10, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client_set_direct', full_name='ledd.WrapperMsg.client_set_direct', index=10,
number=11, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client_led_options', full_name='ledd.WrapperMsg.client_led_options', index=11,
number=12, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='client_set_perc_all', full_name='ledd.WrapperMsg.client_set_perc_all', index=12,
number=13, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='led_group_perc', full_name='ledd.WrapperMsg.led_group_perc', index=13,
number=14, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
_WRAPPERMSG_TYPE,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=89,
serialized_end=954,
)
_WRAPPERMSG.fields_by_name['type'].enum_type = _WRAPPERMSG_TYPE
_WRAPPERMSG.fields_by_name['led'].message_type = led__pb2._LED
_WRAPPERMSG.fields_by_name['leds'].message_type = led__pb2._LEDS
_WRAPPERMSG.fields_by_name['led_group'].message_type = led__pb2._LEDGROUP
_WRAPPERMSG.fields_by_name['led_groups'].message_type = led__pb2._LEDGROUPS
_WRAPPERMSG.fields_by_name['led_perc'].message_type = led__pb2._LEDPERCENTAGE
_WRAPPERMSG.fields_by_name['led_group_color'].message_type = led__pb2._LEDGROUPCOLOR
_WRAPPERMSG.fields_by_name['ledd'].message_type = _LEDD
_WRAPPERMSG.fields_by_name['client'].message_type = client__pb2._CLIENT
_WRAPPERMSG.fields_by_name['clients'].message_type = client__pb2._CLIENTS
_WRAPPERMSG.fields_by_name['client_set_direct'].message_type = client__pb2._CLIENTSETLOCALDIRECT
_WRAPPERMSG.fields_by_name['client_led_options'].message_type = client__pb2._CLIENTLEDOPTIONS
_WRAPPERMSG.fields_by_name['client_set_perc_all'].message_type = client__pb2._CLIENTSETPERCENTAGEALL
_WRAPPERMSG.fields_by_name['led_group_perc'].message_type = led__pb2._LEDGROUPPERCENTAGE
_WRAPPERMSG_TYPE.containing_type = _WRAPPERMSG
DESCRIPTOR.message_types_by_name['LedD'] = _LEDD
DESCRIPTOR.message_types_by_name['WrapperMsg'] = _WRAPPERMSG
LedD = _reflection.GeneratedProtocolMessageType('LedD', (_message.Message,), dict(
DESCRIPTOR=_LEDD,
__module__='ledd_pb2'
# @@protoc_insertion_point(class_scope:ledd.LedD)
))
_sym_db.RegisterMessage(LedD)
WrapperMsg = _reflection.GeneratedProtocolMessageType('WrapperMsg', (_message.Message,), dict(
DESCRIPTOR=_WRAPPERMSG,
__module__='ledd_pb2'
# @@protoc_insertion_point(class_scope:ledd.WrapperMsg)
))
_sym_db.RegisterMessage(WrapperMsg)
# @@protoc_insertion_point(module_scope)

View File

@@ -1,24 +0,0 @@
CREATE TABLE `stripes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
`name` TEXT,
`rgb` INTEGER,
`controller_id` INTEGER,
`channel_r` INTEGER,
`channel_g` INTEGER,
`channel_b` INTEGER,
`channel_r_gamma` REAL DEFAULT 2.8,
`channel_g_gamma` REAL DEFAULT 2.8,
`channel_b_gamma` REAL DEFAULT 2.8
);
CREATE TABLE "meta" (
`option` TEXT,
`value` TEXT
);
INSERT INTO `meta` VALUES ('db_version', '2');
CREATE TABLE "controller" (
`id` INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
`address` TEXT,
`i2c_device` INTEGER,
`channels` INTEGER,
`pwm_freq` INTEGER
);

View File

@@ -1,5 +0,0 @@
ALTER TABLE stripes ADD COLUMN channel_r_gamma REAL DEFAULT 2.8;
ALTER TABLE stripes ADD COLUMN channel_g_gamma REAL DEFAULT 2.8;
ALTER TABLE stripes ADD COLUMN channel_b_gamma REAL DEFAULT 2.8;
REPLACE INTO meta (`option`, `value`) VALUES (`db_version`, `2`);

1
protobuf Submodule

Submodule protobuf added at 2d846c167d

View File

@@ -25,6 +25,10 @@ setup(name='LedD',
license='GPLv3', license='GPLv3',
packages=['ledd'], packages=['ledd'],
install_requires=[ install_requires=[
'nose', 'spectra', 'docopt', 'jsonrpc', 'sqlalchemy', 'coloredlogs' 'nose', 'spectra', 'docopt',
], ],
extras_require={
'systemd_logging': ["python-systemd"],
'colored_logging': ["coloreddlogs"]
},
zip_safe=False) zip_safe=False)

62
sql/ledd.sql Normal file
View File

@@ -0,0 +1,62 @@
CREATE TABLE `meta` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT NOT NULL,
`value` TEXT NOT NULL
);
CREATE TABLE `client` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`connect_type` INT NOT NULL,
`addr` TEXT NOT NULL,
`reso` INT NULL,
`name` TEXT NOT NULL,
`options` TEXT NULL,
`port` INT NOT NULL
);
CREATE TABLE `led` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT NULL,
`options` TEXT NULL,
`local_id` INT NULL,
`client_id` INT NOT NULL,
CONSTRAINT `fk_led_client`
FOREIGN KEY (`client_id`)
REFERENCES `client` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE INDEX `fk_led_client_idx`
ON `led` (`client_id` ASC);
CREATE TABLE IF NOT EXISTS `group` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT NOT NULL,
`type` INT NOT NULL
);
CREATE TABLE IF NOT EXISTS `led_has_group` (
`led_id` INT NOT NULL,
`group_id` INT NOT NULL,
PRIMARY KEY (`led_id`, `group_id`),
CONSTRAINT `fk_led_has_group_led1`
FOREIGN KEY (`led_id`)
REFERENCES `led` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_led_has_group_group1`
FOREIGN KEY (`group_id`)
REFERENCES `group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE INDEX `fk_led_has_group_group1_idx`
ON `led_has_group` (`group_id` ASC);
CREATE INDEX `fk_led_has_group_led1_idx`
ON `led_has_group` (`led_id` ASC);
INSERT INTO meta ("name", "value") VALUES ("version", "1");