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)