SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
PmicAdcBase.hpp
Go to the documentation of this file.
1
39#pragma once
40
41#include <stdint.h>
42#include <math.h>
43
45{
46public:
60 enum class Channel : uint16_t {
61 VBUS_VOLTAGE = (1 << 0),
62 VBUS_CURRENT = (1 << 1),
63 BAT_VOLTAGE = (1 << 2),
64 BAT_CURRENT = (1 << 3),
65 VSYS_VOLTAGE = (1 << 4),
66 DIE_TEMPERATURE = (1 << 5),
67 BAT_TEMPERATURE = (1 << 6),
68 BAT_PERCENTAGE = (1 << 7),
69 ACIN_VOLTAGE = (1 << 8),
70 ACIN_CURRENT = (1 << 9),
71 };
72
73 virtual ~PmicAdcBase() = default;
74
85 {
86 return enableChannels(static_cast<uint32_t>(mask));
87 }
88
95 {
96 return disableChannels(static_cast<uint32_t>(mask));
97 }
98
109 virtual bool enableChannels(uint32_t mask) = 0;
110
116 virtual bool disableChannels(uint32_t mask) = 0;
117
124 virtual bool read(Channel ch, float &out) = 0;
125
126protected:
140 template<typename Func>
141 static void forEachChannel(uint32_t mask, Func fn)
142 {
143 while (mask) {
144 uint32_t bit = mask & (-mask); // isolate lowest set bit
145 fn(bit);
146 mask &= mask - 1; // clear lowest set bit
147 }
148 }
149};
150
157{
158 return static_cast<PmicAdcBase::Channel>(
159 static_cast<uint16_t>(a) | static_cast<uint16_t>(b));
160}
161
166{
167 a = a | b;
168 return a;
169}
PmicAdcBase::Channel & operator|=(PmicAdcBase::Channel &a, PmicAdcBase::Channel b)
Bitwise OR assignment operator for Channel values.
PmicAdcBase::Channel operator|(PmicAdcBase::Channel a, PmicAdcBase::Channel b)
Bitwise OR operator for combining Channel values.
static void forEachChannel(uint32_t mask, Func fn)
Helper to iterate over set bits in a bitmask.
bool disableChannels(Channel mask)
Disable one or more ADC channels by Channel enum.
virtual bool read(Channel ch, float &out)=0
Read a single ADC channel value.
virtual ~PmicAdcBase()=default
bool enableChannels(Channel mask)
Enable one or more ADC channels by Channel enum.
Channel
ADC channel bitmask.
@ BAT_PERCENTAGE
Battery percentage.
@ DIE_TEMPERATURE
Die temperature.
@ BAT_VOLTAGE
Battery voltage.
@ BAT_TEMPERATURE
Battery temperature.
@ ACIN_VOLTAGE
ACIN voltage.
@ BAT_CURRENT
Battery current.
@ VBUS_CURRENT
VBUS current.
@ VBUS_VOLTAGE
VBUS voltage.
@ ACIN_CURRENT
ACIN current.
@ VSYS_VOLTAGE
VSYS voltage.
virtual bool disableChannels(uint32_t mask)=0
Disable one or more ADC channels.
virtual bool enableChannels(uint32_t mask)=0
Enable one or more ADC channels.