ESPHome 2025.8.1
Loading...
Searching...
No Matches
pvvx_display.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <cinttypes>
8
9#ifdef USE_ESP32
10#include <esp_gattc_api.h>
11#ifdef USE_TIME
13#endif
14
15namespace esphome {
16namespace pvvx_mithermometer {
17
18class PVVXDisplay;
19
31
32using pvvx_writer_t = std::function<void(PVVXDisplay &)>;
33
35 public:
36 void set_writer(pvvx_writer_t &&writer) { this->writer_ = writer; }
37 void set_auto_clear(bool auto_clear_enabled) { this->auto_clear_enabled_ = auto_clear_enabled; }
38 void set_disconnect_delay(uint32_t ms) { this->disconnect_delay_ms_ = ms; }
39
40 void dump_config() override;
41
42 void update() override;
43
44 void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
45 esp_ble_gattc_cb_param_t *param) override;
46 void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) override;
47
49 void set_validity_period(uint16_t validity_period) { this->validity_period_ = validity_period; }
51 void clear() {
52 this->bignum_ = 0;
53 this->smallnum_ = 0;
54 this->cfg_ = 0;
55 }
62 void print_bignum(float bignum) { this->bignum_ = bignum * 10; }
68 void print_smallnum(float smallnum) { this->smallnum_ = smallnum; }
87 void print_happy(bool happy = true) { this->setcfgbit_(0, happy); }
89 void print_sad(bool sad = true) { this->setcfgbit_(1, sad); }
91 void print_bracket(bool bracket = true) { this->setcfgbit_(2, bracket); }
93 void print_percent(bool percent = true) { this->setcfgbit_(3, percent); }
95 void print_battery(bool battery = true) { this->setcfgbit_(4, battery); }
97 void print_unit(UNIT unit) { this->cfg_ = (this->cfg_ & 0x1F) | ((unit & 0x7) << 5); }
98
99 void display();
100
101#ifdef USE_TIME
102 void set_time(time::RealTimeClock *time) { this->time_ = time; };
103#endif
104
105 protected:
107 uint32_t disconnect_delay_ms_ = 5000;
108 uint16_t validity_period_ = 300;
109 uint16_t bignum_ = 0;
110 uint16_t smallnum_ = 0;
111 uint8_t cfg_ = 0;
112
113 void setcfgbit_(uint8_t bit, bool value);
114 void send_to_setup_char_(uint8_t *blk, size_t size);
115 void delayed_disconnect_();
117#ifdef USE_TIME
118 void sync_time_();
120#endif
121 uint16_t char_handle_ = 0;
123
125 esp32_ble_tracker::ESPBTUUID::from_raw("00001f10-0000-1000-8000-00805f9b34fb");
127 esp32_ble_tracker::ESPBTUUID::from_raw("00001f1f-0000-1000-8000-00805f9b34fb");
128
130};
131
132} // namespace pvvx_mithermometer
133} // namespace esphome
134
135#endif
This class simplifies creating components that periodically check a state.
Definition component.h:425
void send_to_setup_char_(uint8_t *blk, size_t size)
void print_bignum(float bignum)
Print the big number.
void print_bracket(bool bracket=true)
Print round brackets around the face.
void setcfgbit_(uint8_t bit, bool value)
void print_battery(bool battery=true)
Print battery sign.
void set_time(time::RealTimeClock *time)
esp32_ble_tracker::ESPBTUUID service_uuid_
void set_validity_period(uint16_t validity_period)
Set validity period of the display information in seconds (1..65535)
esp32_ble_tracker::ESPBTUUID char_uuid_
void set_auto_clear(bool auto_clear_enabled)
void print_smallnum(float smallnum)
Print the small number.
void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) override
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param) override
void print_happy(bool happy=true)
Print a happy face.
void set_writer(pvvx_writer_t &&writer)
void print_percent(bool percent=true)
Print percent sign at small number.
void print_sad(bool sad=true)
Print a sad face.
void print_unit(UNIT unit)
Print unit of big number.
The RealTimeClock class exposes common timekeeping functions via the device's local real-time clock.
std::function< void(PVVXDisplay &)> pvvx_writer_t
UNIT
Possible units for the big number.
@ UNIT_NONE
do not show a unit
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7