forked from pvx/litsimaja
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
81 lines
2.5 KiB
from pyleds.lib.Config import Config |
|
from pyleds.lib.LoopSwitch import LoopSwitch |
|
from pyleds.lib.Regions import Regions |
|
from pyleds.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)
|
|
|