rm heartrate driver, maybe break sim
parent
4e24fe518a
commit
ada48a8715
2
TODO.md
2
TODO.md
|
@ -11,6 +11,8 @@
|
|||
* Remove unused bits in general.
|
||||
* Mirrors of all submodules.
|
||||
* Graphics, e.g. `logo.py`.
|
||||
* Set default time and enable Alarm.
|
||||
* Multiple alarms.
|
||||
|
||||
# Time
|
||||
* Accurate within a couple seconds. `;)`
|
||||
|
|
|
@ -13,7 +13,6 @@ freeze('../..', manifest_240x240.manifest +
|
|||
'draw565.py',
|
||||
'drivers/battery.py',
|
||||
'drivers/cst816s.py',
|
||||
'drivers/hrs3300.py',
|
||||
'drivers/nrf_rtc.py',
|
||||
'drivers/signal.py',
|
||||
'drivers/st7789.py',
|
||||
|
|
|
@ -26,7 +26,6 @@ from machine import SPI
|
|||
|
||||
from drivers.battery import Battery
|
||||
from drivers.cst816s import CST816S
|
||||
from drivers.hrs3300 import HRS3300
|
||||
from drivers.signal import Signal
|
||||
from drivers.st7789 import ST7789_SPI
|
||||
from drivers.vibrator import Vibrator
|
||||
|
@ -89,7 +88,6 @@ try:
|
|||
Signal(Pin('CHARGING', Pin.IN), invert=True),
|
||||
Signal(Pin('USB_PWR', Pin.IN), invert=True))
|
||||
i2c = I2C(1, scl='I2C_SCL', sda='I2C_SDA')
|
||||
hrs = HRS3300(i2c)
|
||||
touch = CST816S(i2c,
|
||||
Pin('TP_INT', Pin.IN), Pin('TP_RST', Pin.OUT, value=0),
|
||||
_callback)
|
||||
|
|
|
@ -133,47 +133,6 @@ class RTC(object):
|
|||
def get_uptime_ms(self):
|
||||
return int(self.uptime * 1000)
|
||||
|
||||
class HRS():
|
||||
DATA = (
|
||||
9084,9084,9025,9025,9009,9009,9009,9015,9015,9024,9024,9024,9073,9073,9074,9074,
|
||||
9074,9100,9100,9097,9097,9097,9045,9045,9023,9023,9023,9035,9035,9039,9039,9039,
|
||||
9049,9049,9052,9052,9052,9066,9066,9070,9070,9070,9078,9078,9081,9081,9081,9092,
|
||||
9092,9093,9093,9093,9094,9094,9108,9108,9108,9124,9124,9122,9122,9122,9100,9100,
|
||||
9110,9110,9110,9112,9112,9118,9118,9118,9127,9127,9136,9136,9136,9147,9147,9154,
|
||||
9154,9154,9156,9156,9153,9153,9153,9152,9152,9156,9156,9156,9161,9161,9161,9177,
|
||||
9177,9186,9186,9196,9196,9196,9201,9201,9201,9189,9189,9176,9176,9176,9176,9176,
|
||||
9175,9175,9175,9175,9175,9180,9180,9180,9189,9189,9202,9202,9202,9207,9207,9181,
|
||||
9181,9181,9167,9167,9169,9169,9169,9163,9163,9164,9164,9164,9165,9165,9172,9172,
|
||||
9172,9180,9180,9192,9192,9192,9178,9178,9161,9161,9161,9163,9163,9173,9173,9173,
|
||||
9170,9170,9179,9179,9183,9183,9183,9196,9196,9207,9207,9207,9208,9208,9186,9186,
|
||||
9186,9182,9182,9193,9193,9193,9197,9197,9188,9204,9204,9212,9212,9212,9223,9223,
|
||||
9228,9228,9228,9235,9235,9215,9215,9215,9217,9217,9225,9225,9225,9230,9230,9237,
|
||||
9237,9237,9246,9246,9260,9260,9260,9270,9270,9269,9269,9269,9256,9256,9256,9256,
|
||||
9256,9263,9263,9274,9274,9274,9288,9288,9292,9292,9292,9307,9307,9310
|
||||
)
|
||||
def __init__(self):
|
||||
self._i = 0
|
||||
self._step = 1
|
||||
|
||||
def enable(self):
|
||||
pass
|
||||
|
||||
def disable(self):
|
||||
pass
|
||||
|
||||
def read_hrs(self):
|
||||
d = self.DATA[self._i]
|
||||
|
||||
self._i += self._step
|
||||
if self._i >= len(self.DATA):
|
||||
self._i -= 1
|
||||
self._step = -1
|
||||
elif self._i < 0:
|
||||
self._i += 1
|
||||
self._step = 1
|
||||
|
||||
return d
|
||||
|
||||
backlight = Backlight()
|
||||
spi = SPI(0)
|
||||
spi.init(polarity=1, phase=1, baudrate=8000000)
|
||||
|
@ -186,7 +145,6 @@ drawable = draw565.Draw565(display)
|
|||
accel = Accelerometer()
|
||||
battery = Battery()
|
||||
button = Pin('BUTTON', Pin.IN, quiet=True)
|
||||
hrs = HRS()
|
||||
rtc = RTC()
|
||||
touch = CST816S(I2C(0), Pin('TP_INT', Pin.IN, quiet=True), Pin('TP_RST', Pin.OUT, quiet=True))
|
||||
vibrator = Vibrator(Pin('MOTOR', Pin.OUT, value=0), active_low=True)
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
# Copyright (C) 2020 Daniel Thompson
|
||||
|
||||
"""HRS3300 driver
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
"""
|
||||
|
||||
from micropython import const
|
||||
|
||||
_I2CADDR = const(0x44)
|
||||
|
||||
_ID = const(0x00)
|
||||
_ENABLE = const(0x01)
|
||||
_ENABLE_HEN = const(0x80)
|
||||
_C1DATAM = const(0x08)
|
||||
_C0DATAM = const(0x09)
|
||||
_C0DATAH = const(0x0a)
|
||||
_PDRIVER = const(0x0c)
|
||||
_C1DATAH = const(0x0d)
|
||||
_C1DATAL = const(0x0e)
|
||||
_C0DATAL = const(0x0f)
|
||||
_RES = const(0x16)
|
||||
_HGAIN = const(0x17)
|
||||
|
||||
class HRS3300:
|
||||
def __init__(self, i2c):
|
||||
self._i2c = i2c
|
||||
|
||||
def init(self):
|
||||
w = self.write_reg
|
||||
|
||||
# HRS disabled, 12.5 ms wait time between cycles, (partly) 20mA drive
|
||||
w(_ENABLE, 0x60)
|
||||
|
||||
# (partly) 20mA drive, power on, "magic" (datasheet says both
|
||||
# "reserved" and "set low nibble to 8" but 0xe gives better results
|
||||
# and is used by at least two other HRS3300 drivers
|
||||
w(_PDRIVER, 0x6e)
|
||||
|
||||
# HRS and ALS both in 16-bit mode
|
||||
w(_RES, 0x88)
|
||||
|
||||
# 64x gain
|
||||
w(_HGAIN, 0x10)
|
||||
|
||||
def read_reg(self, addr):
|
||||
return self._i2c.readfrom_mem(_I2CADDR, addr, 1)[0]
|
||||
|
||||
def write_reg(self, addr, val):
|
||||
self._i2c.writeto_mem(_I2CADDR, addr, bytes((val,)))
|
||||
|
||||
def enable(self):
|
||||
self.init()
|
||||
|
||||
enable = self.read_reg(_ENABLE)
|
||||
enable |= _ENABLE_HEN
|
||||
self.write_reg(_ENABLE, enable)
|
||||
|
||||
def disable(self):
|
||||
enable = self.read_reg(_ENABLE)
|
||||
enable &= ~_ENABLE_HEN
|
||||
self.write_reg(_ENABLE, enable)
|
||||
|
||||
def read_hrs(self):
|
||||
# TODO: Try fusing the read of H & L
|
||||
m = self.read_reg(_C0DATAM)
|
||||
h = self.read_reg(_C0DATAH)
|
||||
l = self.read_reg(_C0DATAL)
|
||||
|
||||
return (m << 8) | ((h & 0x0f) << 4) | (l & 0x0f) | ((l & 0x30) << 12)
|
||||
|
||||
def read_als(self):
|
||||
# TODO: Try fusing the read of H & L
|
||||
m = self.read_reg(_C1DATAM)
|
||||
h = self.read_reg(_C1DATAH)
|
||||
l = self.read_reg(_C1DATAL)
|
||||
|
||||
return (m << 3) | ((h & 0x3f) << 11) | (l & 0x07)
|
||||
|
||||
def set_gain(self, gain):
|
||||
if gain > 64:
|
||||
gain = 64
|
||||
hgain = 0
|
||||
while (1 << hgain) < gain:
|
||||
hgain += 1
|
||||
self.write_reg(_HGAIN, hgain << 2)
|
||||
|
||||
def set_drive(self, drive):
|
||||
en = self.read_reg(_ENABLE)
|
||||
pd = self.read_reg(_PDRIVER)
|
||||
|
||||
en = (en & 0xf7) | ((drive & 2) << 2)
|
||||
pd = (pd & 0xbf) | ((drive & 1) << 6)
|
||||
|
||||
self.write_reg(_ENABLE, en)
|
||||
self.write_reg(_PDRIVER, pd)
|
Loading…
Reference in New Issue