| 166 | |
| 167 | |
| 168 | class BBQ10Keyboard: |
| 169 | def __init__(self, i2c, BBQI2CDevice=None): |
| 170 | self._i2cdelay = 0.01 |
| 171 | |
| 172 | if not BBQI2CDevice: |
| 173 | self._i2c = I2CDevice(i2c, _ADDRESS_KBD) |
| 174 | else: |
| 175 | self._i2c = BBQI2CDevice |
| 176 | |
| 177 | self._buffer = bytearray(2) |
| 178 | self.reset() |
| 179 | |
| 180 | def reset(self): |
| 181 | with self._i2c as i2c: |
| 182 | self._buffer[0] = _REG_RST |
| 183 | time.sleep(self._i2cdelay) |
| 184 | i2c.write(self._buffer, end=1) |
| 185 | |
| 186 | # need to wait! |
| 187 | time.sleep(0.05) |
| 188 | |
| 189 | @property |
| 190 | def version(self): |
| 191 | ver = self._read_register(_REG_VER) |
| 192 | return (ver >> 4, ver & 0x0F) |
| 193 | |
| 194 | @property |
| 195 | def status(self): |
| 196 | return self._read_register(_REG_KEY) |
| 197 | |
| 198 | @property |
| 199 | def key_count(self): |
| 200 | return self.status & KEY_COUNT_MASK |
| 201 | |
| 202 | @property |
| 203 | def key(self): |
| 204 | if self.key_count == 0: |
| 205 | return None |
| 206 | |
| 207 | with self._i2c as i2c: |
| 208 | self._buffer[0] = _REG_FIF |
| 209 | time.sleep(self._i2cdelay) |
| 210 | i2c.write(self._buffer, end=1) |
| 211 | time.sleep(self._i2cdelay) |
| 212 | i2c.readinto(self._buffer, end=2) |
| 213 | |
| 214 | return (int(self._buffer[0]), chr(self._buffer[1])) |
| 215 | |
| 216 | @property |
| 217 | def keys(self): |
| 218 | keys = [] |
| 219 | |
| 220 | for _ in range(self.key_count): |
| 221 | keys.append(self.key) |
| 222 | |
| 223 | return keys |
| 224 | |
| 225 | @property |
no outgoing calls
no test coverage detected