forked from pvx/litsimaja
82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
from lib.Config import Config
|
|
from lib.LoopSwitch import LoopSwitch
|
|
from lib.Regions import Regions
|
|
from lib.Tempo import Tempo
|
|
|
|
|
|
class Litsimaja(object):
|
|
def __init__(self):
|
|
self._config = Config()
|
|
if self.conf('USE_EMULATOR'):
|
|
module = __import__('lib.strip.TkinterStrip', None, None, ['TkinterStrip'])
|
|
class_name = 'TkinterStrip'
|
|
else:
|
|
module = __import__('rpi_ws281x', None, None, ['PixelStrip'])
|
|
class_name = 'PixelStrip'
|
|
|
|
loaded_class = getattr(module, class_name)
|
|
self._strip = loaded_class(
|
|
self.conf('STRIP_PIXELS'), self.conf('STRIP_GPIO_PIN'), self.conf('STRIP_HZ'), self.conf('STRIP_DMA'),
|
|
self.conf('STRIP_INVERT'), self.conf('STRIP_BRIGHTNESS'), self.conf('STRIP_CHANNEL'),
|
|
self.conf('STRIP_TYPE')
|
|
)
|
|
self._loops = []
|
|
self._strip.begin()
|
|
self._regions: Regions = Regions(self.count_pixels(), self.conf('REGIONS'))
|
|
self._tempo: Tempo = Tempo(self.conf('BPM_DEFAULT'))
|
|
self._selected_program = None
|
|
|
|
def count_pixels(self) -> int:
|
|
return self._strip.numPixels()
|
|
|
|
def get_strip(self):
|
|
return self._strip
|
|
|
|
def set_pixel_color(self, n: int, color: int) -> None:
|
|
if self._regions.is_pixel_enabled(n):
|
|
self._strip.setPixelColor(n, color)
|
|
else:
|
|
self._strip.setPixelColor(n, 0)
|
|
|
|
def show(self) -> None:
|
|
self._strip.show()
|
|
|
|
def add_loop(self, loop: LoopSwitch):
|
|
self.clear_loops()
|
|
self._loops.append(loop)
|
|
|
|
def clear_loops(self):
|
|
for loop in self._loops:
|
|
loop.stop()
|
|
self._loops.clear()
|
|
|
|
def switch_region(self, region_id: int):
|
|
self._regions.switch_region(region_id)
|
|
|
|
def get_region_ids(self):
|
|
return self._regions.list_region_ids()
|
|
|
|
def build_status_array(self):
|
|
data = {'success': True}
|
|
features = {
|
|
'program': self._selected_program,
|
|
'tempo': {
|
|
'bpm': self.get_tempo().get_bpm()
|
|
},
|
|
}
|
|
regions = []
|
|
for region_id in self._regions.list_region_ids():
|
|
regions.append(self._regions.is_region_enabled(region_id))
|
|
features['region'] = regions
|
|
data['features'] = features
|
|
return data
|
|
|
|
def get_tempo(self):
|
|
return self._tempo
|
|
|
|
def set_selected_program(self, program_name: str):
|
|
self._selected_program = program_name
|
|
|
|
def conf(self, key: str):
|
|
return self._config.get(key)
|