Mercurial > micropython-is31fl3728
changeset 2:ac35bd1c3a8c draft default tip
Avoid reading the registers
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 22 Apr 2017 16:41:37 +0200 |
| parents | ce55d0a85b30 |
| children | |
| files | is31fl3728.py |
| diffstat | 1 files changed, 38 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/is31fl3728.py Thu Apr 20 01:43:31 2017 +0200 +++ b/is31fl3728.py Sat Apr 22 16:41:37 2017 +0200 @@ -6,11 +6,14 @@ self.i2c = i2c self.address = address self.buffer = bytearray(8) + self._i2c_buffer = bytearray(1) + self._effect_register = 0 + self._config_register = 0 + self._equalizer_register = 0 - def _register(self, register, value=None): - if value is None: - return self.i2c.readfrom_mem(self.address, register, 1)[0] - self.i2c.writeto_mem(self.address, register, bytearray([value])) + def _register(self, register, value): + self._i2c_buffer[0] = value + self.i2c.writeto_mem(self.address, register, self._i2c_buffer) def fill(self, color=1): color = 0xff if color else 0x00 @@ -33,46 +36,55 @@ self._register(0x0c, 0xff) def brightness(self, value): - register = self._register(0x0d) if value is None: - value = register & 0x0f + value = self._effect_register & 0x0f if value & 0b1000: value &= 0b0111 else: value += 7 return value elif (0 <= value <= 6): - register = register & ~0x0f | (0b1000 | value) & 0x0f + self._effect_register = ( + self._effect_register & ~0x0f | (0b1000 | value) & 0x0f) elif (7 <= value <= 14): - register = register & ~0x0f | (value - 7) & 0x0f + self._effect_register = ( + self._effect_register & ~0x0f | (value - 7) & 0x0f) else: raise ValueError("out of range") - self._register(0x0d, register) - - def _flag(self, register, mask, value=None): - flag = self._register(register) - if value is None: - return bool(flag & mask) - elif value: - flag |= mask - else: - flag &= ~mask - self._register(register, flag) + self._register(0x0d, self._effect_register) def active(self, value=None): - return self._flag(0x00, 0x80, value) + if value is None: + return bool(self._config_register & 0x80) + if value: + self._config_register |= 0x80 + else: + self._config_register &= ~0x80 + self._register(0x00, self._config_register) def equalizer_enabled(self, value=None): - return self._flag(0x0f, 0x40, value) + if value is None: + return bool(self._equalizer_register & 0x40) + if value: + self._equalizer_register |= 0x40 + else: + self._equalizer_register &= ~0x40 + self._register(0x0f, self._equalizer_register) def audio_enabled(self, value=None): - return self._flag(0x00, 0x04, value) + if value is None: + return bool(self._config_register & 0x04) + if value: + self._config_register |= 0x04 + else: + self._config_register &= ~0x04 + self._register(0x00, self._config_register) def audio_gain(self, value=None): - register = self._register(0x0d) if value is None: - return (register & 0x70) >> 4 + return (self._effect_register & 0x70) >> 4 elif not (0 <= value <= 7): raise ValueError("out of range") - register = register & ~0x70 | (value << 4) & 0x70 - self._register(0x0d, register) + self._effect_register = ( + self._effect_register & ~0x70 | (value << 4) & 0x70) + self._register(0x0d, self._effect_register)
