* Add define for screen I2C frequency * Add functions to get I2C screen frequency and port * Make reclock function aware of screen-set I2C speeds * Refurbish ReClockI2C API * Make ReClockI2C API class * Use new API in AirQualityTelemetry module * Minor changes on some logs * Update esp8266-oled library * Fix esp8266 library * Minor logging changes * Improve setClock and restoreClock cases * Make getter functions const, fix capitalisaiton of new functions * Minor typo, remove pragma once * Low prio debug fixes * Mark getter functions as const (properly) * Fix LOG based on coderabbit feedback --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
#include "configuration.h"
|
|
|
|
#if !MESHTASTIC_EXCLUDE_AIR_QUALITY_SENSOR && __has_include(<SensirionI2cSfa3x.h>)
|
|
|
|
#include "../detect/ReClockI2C.h"
|
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
|
#include "RTC.h"
|
|
#include "TelemetrySensor.h"
|
|
#include <SensirionI2cSfa3x.h>
|
|
|
|
#define SFA30_I2C_CLOCK_SPEED 100000
|
|
#define SFA30_WARMUP_MS 10000
|
|
#define SFA30_NO_ERROR 0
|
|
|
|
class SFA30Sensor : public TelemetrySensor
|
|
{
|
|
private:
|
|
enum class State { IDLE, ACTIVE };
|
|
State state = State::IDLE;
|
|
uint32_t measureStarted = 0;
|
|
|
|
SensirionI2cSfa3x sfa30;
|
|
TwoWire *_bus{};
|
|
uint8_t _address{};
|
|
#ifdef SFA30_I2C_CLOCK_SPEED
|
|
ScanI2C::I2CPort _port = ScanI2C::I2CPort::NO_I2C;
|
|
ReClockI2C reClockI2C;
|
|
#endif
|
|
|
|
bool isError(uint16_t response);
|
|
|
|
public:
|
|
SFA30Sensor();
|
|
virtual bool initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev) override;
|
|
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
|
|
|
|
virtual bool isActive() override;
|
|
virtual void sleep() override;
|
|
virtual uint32_t wakeUp() override;
|
|
virtual bool canSleep() override;
|
|
virtual int32_t wakeUpTimeMs() override;
|
|
virtual int32_t pendingForReadyMs() override;
|
|
};
|
|
|
|
#endif
|