- Combine the reading of all `HRS3300` registers into one I2C read so data is not partial - Downsizes both HRS and ALS to 16bit as the sensor does not generate larger than 16bit values in its current configuration - Increasing the resolution by 1 bit doubles the sensor acquisition time, since we are already at 10Hz we are never going to use a higher resolution - The PPG algorithm buffers for ALS/HRS are already 16bit anyway - Remove functions for setting gain / drive that are unused throughout the codebase - Calculate constants with constexpr
48 lines
1 KiB
C++
48 lines
1 KiB
C++
#pragma once
|
|
|
|
#include "drivers/TwiMaster.h"
|
|
|
|
namespace Pinetime {
|
|
namespace Drivers {
|
|
class Hrs3300 {
|
|
public:
|
|
enum class Registers : uint8_t {
|
|
Id = 0x00,
|
|
Enable = 0x01,
|
|
EnableHen = 0x80,
|
|
C1dataM = 0x08,
|
|
C0DataM = 0x09,
|
|
C0DataH = 0x0a,
|
|
PDriver = 0x0c,
|
|
C1dataH = 0x0d,
|
|
C1dataL = 0x0e,
|
|
C0dataL = 0x0f,
|
|
Res = 0x16,
|
|
Hgain = 0x17
|
|
};
|
|
|
|
struct PackedHrsAls {
|
|
uint16_t hrs;
|
|
uint16_t als;
|
|
};
|
|
|
|
Hrs3300(TwiMaster& twiMaster, uint8_t twiAddress);
|
|
Hrs3300(const Hrs3300&) = delete;
|
|
Hrs3300& operator=(const Hrs3300&) = delete;
|
|
Hrs3300(Hrs3300&&) = delete;
|
|
Hrs3300& operator=(Hrs3300&&) = delete;
|
|
|
|
void Init();
|
|
void Enable();
|
|
void Disable();
|
|
PackedHrsAls ReadHrsAls();
|
|
|
|
private:
|
|
TwiMaster& twiMaster;
|
|
uint8_t twiAddress;
|
|
|
|
void WriteRegister(uint8_t reg, uint8_t data);
|
|
uint8_t ReadRegister(uint8_t reg);
|
|
};
|
|
}
|
|
}
|