SegLCDLib
Loading...
Searching...
No Matches
SegLCD_PCF85176_T1T2Lcd.h
Go to the documentation of this file.
1#ifndef SEGLCD_PCx85_T1T2LCD_H
2#define SEGLCD_PCx85_T1T2LCD_H
3
4
5#if !defined(SEGLCD_DISABLE_ALL_LCDS) || defined(SEGLCD_ENABLE_PCF85176_T1T2LCD)
7
22 public:
23 typedef enum : uint8_t {
26 UNIT_T2_C = 0x20,
28 } UnitFlags;
29
30 typedef enum : uint8_t {
31 LABEL_T1 = 0x01,
32 LABEL_T2 = 0x02
34
35 SegLCD_PCF85176_T1T2Lcd(SegTransportI2C& transport, uint8_t address = DEFAULT_PCX85_I2C_ADDRESS, uint8_t subaddress = DEFAULT_SUBADDRESS);
36 void init() override;
37 void setBatteryLevel(uint8_t value);
38 void setSignalLevel(uint8_t value);
39 void setClockSymbol(bool status, uint8_t index = 0);
40 void setUnits(uint8_t units);
41 void setT1T2Labels(uint8_t t1t2);
42 void clearUnits(uint8_t units);
43 void clearT1T2Labels(uint8_t t1t2);
44 void setCursor(uint8_t row, uint8_t col) override;
45 using SegLCDLib::write;
46 size_t write(uint8_t ch) override;
47
48 private:
49 void _setColon(uint8_t row, uint8_t col, bool state) override;
50 void _setDecimal(uint8_t row, uint8_t col, bool state) override;
51 static constexpr uint8_t ADDR_SIGNAL_CLOCK = 0;
52 static constexpr uint8_t ADDR_BATT = 2;
53 static constexpr uint8_t ADDR_LABELS = 4;
54 static constexpr uint8_t ADDR_CLOCK_T1T2_LABELS_SEGS = 6;
55 static constexpr uint8_t ADDR_DAY_SEG = 14;
56 static constexpr uint8_t ADDR_T1_SEGS = 16;
57 static constexpr uint8_t ADDR_T2_SEGS = 24;
58
59 static constexpr uint8_t RAM_SIZE = 16;
60
61 // RAM layout (matches _ramBuffer allocation):
62 static constexpr uint8_t OFFSET_SIGCLK = 0;
63 static constexpr uint8_t OFFSET_BATT = 1; // ADDR_BATT / 2 = 1
64 static constexpr uint8_t OFFSET_LABELS = 2; // ADDR_LABELS / 2 = 2
65 static constexpr uint8_t OFFSET_CLOCK = 3; // ADDR_CLOCK_T1T2_LABELS_SEGS / 2 = 3
66 static constexpr uint8_t OFFSET_DAY = 7; // ADDR_DAY_SEG / 2 = 7
67 static constexpr uint8_t OFFSET_T1 = 8; // ADDR_T1_SEGS / 2 = 8
68 static constexpr uint8_t OFFSET_T2 = 12; // ADDR_T2_SEGS / 2 = 12
69
70 static constexpr uint8_t FLAG_COLON_CLOCK = 0x01;
71
72 static constexpr uint8_t ROW_CLOCK = 0;
73 static constexpr uint8_t ROW_T1 = 1;
74 static constexpr uint8_t ROW_T2 = 2;
75
76 static constexpr uint8_t DECIMAL_POINT_BIT = 0x01;
77 static constexpr uint8_t DECIMAL_MIN_ROW = 1;
78 static constexpr uint8_t DECIMAL_MAX_ROW = 2;
79 static constexpr uint8_t DECIMAL_MIN_COL = 0;
80 static constexpr uint8_t DECIMAL_MAX_COL = 3;
81 static constexpr int8_t DECIMAL_COL_OFFSET = -1;
82
83 // Symbols constants
84 static constexpr uint8_t SYMBOL_CLOCK_MASK = 0x04;
85 static constexpr uint8_t SYMBOL_T1T2_MASK = 0x01;
86
87 // Signal/Battery level constants
88 static constexpr uint8_t MAX_BATTERY_LEVEL = 4;
89 static constexpr uint8_t BATTERY_MASK = 0xF0;
90 static constexpr uint8_t BATTERY_LEVEL_SEG[MAX_BATTERY_LEVEL] = {0x10, 0x80, 0x40, 0x20};
91
92 static constexpr uint8_t MAX_SIGNAL_LEVEL = 5;
93 static constexpr uint8_t SIGNAL_MASK = 0xF8;
94 static constexpr uint8_t SIGNAL_LEVEL_BITS[MAX_SIGNAL_LEVEL] = {0x80, 0x40, 0x20, 0x10, 0x08};
95
96 uint8_t _mapSegments(uint8_t val);
97};
98#endif
99
100#endif
Implementation of the PCF85176 controllers.
Definition SegDriver_PCF85176.h:9
static constexpr uint8_t DEFAULT_PCX85_I2C_ADDRESS
Definition SegDriver_PCx85.h:18
static constexpr uint8_t DEFAULT_SUBADDRESS
Definition SegDriver_PCx85.h:19
virtual size_t write(uint8_t)
Definition SegLCDLib.h:113
Multi-zone T1/T2 LCD with clock display (PCF85176).
Definition SegLCD_PCF85176_T1T2Lcd.h:21
static constexpr uint8_t ADDR_SIGNAL_CLOCK
Definition SegLCD_PCF85176_T1T2Lcd.h:51
void setCursor(uint8_t row, uint8_t col) override
Set cursor on exact digit.
Definition SegLCD_PCF85176_T1T2Lcd.cpp:144
void init() override
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCD_PCF85176_T1T2Lcd.cpp:9
static constexpr uint8_t BATTERY_LEVEL_SEG[MAX_BATTERY_LEVEL]
Definition SegLCD_PCF85176_T1T2Lcd.h:90
static constexpr uint8_t MAX_SIGNAL_LEVEL
Definition SegLCD_PCF85176_T1T2Lcd.h:92
static constexpr uint8_t SYMBOL_T1T2_MASK
Definition SegLCD_PCF85176_T1T2Lcd.h:85
static constexpr uint8_t OFFSET_LABELS
Definition SegLCD_PCF85176_T1T2Lcd.h:64
void setClockSymbol(bool status, uint8_t index=0)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:54
size_t write(uint8_t ch) override
Definition SegLCD_PCF85176_T1T2Lcd.cpp:152
uint8_t _mapSegments(uint8_t val)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:233
void _setColon(uint8_t row, uint8_t col, bool state) override
Virtual method for setting colon.
Definition SegLCD_PCF85176_T1T2Lcd.cpp:97
static constexpr uint8_t OFFSET_T1
Definition SegLCD_PCF85176_T1T2Lcd.h:67
static constexpr uint8_t ROW_T2
Definition SegLCD_PCF85176_T1T2Lcd.h:74
static constexpr uint8_t ADDR_DAY_SEG
Definition SegLCD_PCF85176_T1T2Lcd.h:55
static constexpr uint8_t DECIMAL_MIN_COL
Definition SegLCD_PCF85176_T1T2Lcd.h:79
static constexpr uint8_t ADDR_CLOCK_T1T2_LABELS_SEGS
Definition SegLCD_PCF85176_T1T2Lcd.h:54
static constexpr uint8_t DECIMAL_MAX_ROW
Definition SegLCD_PCF85176_T1T2Lcd.h:78
static constexpr uint8_t SYMBOL_CLOCK_MASK
Definition SegLCD_PCF85176_T1T2Lcd.h:84
void _setDecimal(uint8_t row, uint8_t col, bool state) override
Virtual method for setting decimal point.
Definition SegLCD_PCF85176_T1T2Lcd.cpp:110
void setSignalLevel(uint8_t value)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:33
static constexpr uint8_t OFFSET_SIGCLK
Definition SegLCD_PCF85176_T1T2Lcd.h:62
static constexpr uint8_t ROW_CLOCK
Definition SegLCD_PCF85176_T1T2Lcd.h:72
LabelT1T2Enum
Definition SegLCD_PCF85176_T1T2Lcd.h:30
@ LABEL_T2
Definition SegLCD_PCF85176_T1T2Lcd.h:32
@ LABEL_T1
Definition SegLCD_PCF85176_T1T2Lcd.h:31
static constexpr uint8_t RAM_SIZE
Definition SegLCD_PCF85176_T1T2Lcd.h:59
void clearT1T2Labels(uint8_t t1t2)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:86
static constexpr uint8_t ADDR_LABELS
Definition SegLCD_PCF85176_T1T2Lcd.h:53
static constexpr uint8_t DECIMAL_MIN_ROW
Definition SegLCD_PCF85176_T1T2Lcd.h:77
static constexpr uint8_t MAX_BATTERY_LEVEL
Definition SegLCD_PCF85176_T1T2Lcd.h:88
static constexpr uint8_t OFFSET_CLOCK
Definition SegLCD_PCF85176_T1T2Lcd.h:65
void clearUnits(uint8_t units)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:70
static constexpr uint8_t DECIMAL_POINT_BIT
Definition SegLCD_PCF85176_T1T2Lcd.h:76
static constexpr uint8_t DECIMAL_MAX_COL
Definition SegLCD_PCF85176_T1T2Lcd.h:80
static constexpr uint8_t SIGNAL_MASK
Definition SegLCD_PCF85176_T1T2Lcd.h:93
static constexpr int8_t DECIMAL_COL_OFFSET
Definition SegLCD_PCF85176_T1T2Lcd.h:81
static constexpr uint8_t OFFSET_T2
Definition SegLCD_PCF85176_T1T2Lcd.h:68
static constexpr uint8_t ADDR_T1_SEGS
Definition SegLCD_PCF85176_T1T2Lcd.h:56
static constexpr uint8_t ADDR_T2_SEGS
Definition SegLCD_PCF85176_T1T2Lcd.h:57
UnitFlags
Definition SegLCD_PCF85176_T1T2Lcd.h:23
@ UNIT_T1_C_DOWN
Definition SegLCD_PCF85176_T1T2Lcd.h:25
@ UNIT_T2_C
Definition SegLCD_PCF85176_T1T2Lcd.h:26
@ UNIT_T2_HUM
Definition SegLCD_PCF85176_T1T2Lcd.h:27
@ UNIT_T1_C_UP
Definition SegLCD_PCF85176_T1T2Lcd.h:24
static constexpr uint8_t BATTERY_MASK
Definition SegLCD_PCF85176_T1T2Lcd.h:89
static constexpr uint8_t OFFSET_DAY
Definition SegLCD_PCF85176_T1T2Lcd.h:66
void setUnits(uint8_t units)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:65
static constexpr uint8_t OFFSET_BATT
Definition SegLCD_PCF85176_T1T2Lcd.h:63
void setBatteryLevel(uint8_t value)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:14
static constexpr uint8_t ROW_T1
Definition SegLCD_PCF85176_T1T2Lcd.h:73
static constexpr uint8_t SIGNAL_LEVEL_BITS[MAX_SIGNAL_LEVEL]
Definition SegLCD_PCF85176_T1T2Lcd.h:94
void setT1T2Labels(uint8_t t1t2)
Definition SegLCD_PCF85176_T1T2Lcd.cpp:75
static constexpr uint8_t FLAG_COLON_CLOCK
Definition SegLCD_PCF85176_T1T2Lcd.h:70
static constexpr uint8_t ADDR_BATT
Definition SegLCD_PCF85176_T1T2Lcd.h:52
Abstract I2C transport.
Definition SegTransport.h:54