ESPHome 2025.9.0-dev
Loading...
Searching...
No Matches
qr_code.cpp
Go to the documentation of this file.
1#include "qr_code.h"
4#include "esphome/core/log.h"
5
6namespace esphome {
7namespace qr_code {
8
9static const char *const TAG = "qr_code";
10
12 ESP_LOGCONFIG(TAG,
13 "QR code:\n"
14 " Value: '%s'",
15 this->value_.c_str());
16}
17
18void QrCode::set_value(const std::string &value) {
19 this->value_ = value;
20 this->needs_update_ = true;
21}
22
23void QrCode::set_ecc(qrcodegen_Ecc ecc) {
24 this->ecc_ = ecc;
25 this->needs_update_ = true;
26}
27
29 ESP_LOGV(TAG, "Generating QR code");
30 uint8_t tempbuffer[qrcodegen_BUFFER_LEN_MAX];
31
32 if (!qrcodegen_encodeText(this->value_.c_str(), tempbuffer, this->qr_, this->ecc_, qrcodegen_VERSION_MIN,
33 qrcodegen_VERSION_MAX, qrcodegen_Mask_AUTO, true)) {
34 ESP_LOGE(TAG, "Failed to generate QR code");
35 }
36}
37
38void QrCode::draw(display::Display *buff, uint16_t x_offset, uint16_t y_offset, Color color, int scale) {
39 ESP_LOGV(TAG, "Drawing QR code at (%d, %d)", x_offset, y_offset);
40
41 if (this->needs_update_) {
42 this->generate_qr_code();
43 this->needs_update_ = false;
44 }
45
46 uint8_t qrcode_width = qrcodegen_getSize(this->qr_);
47
48 for (int y = 0; y < qrcode_width * scale; y++) {
49 for (int x = 0; x < qrcode_width * scale; x++) {
50 if (qrcodegen_getModule(this->qr_, x / scale, y / scale)) {
51 buff->draw_pixel_at(x_offset + x, y_offset + y, color);
52 }
53 }
54 }
55}
56
58 if (this->needs_update_) {
59 this->generate_qr_code();
60 this->needs_update_ = false;
61 }
62
63 uint8_t size = qrcodegen_getSize(this->qr_);
64
65 return size;
66}
67
68} // namespace qr_code
69} // namespace esphome
void draw_pixel_at(int x, int y)
Set a single pixel at the specified coordinates to default color.
Definition display.h:226
uint8_t qr_[qrcodegen_BUFFER_LEN_MAX]
Definition qr_code.h:33
void draw(display::Display *buff, uint16_t x_offset, uint16_t y_offset, Color color, int scale)
Definition qr_code.cpp:38
void set_ecc(qrcodegen_Ecc ecc)
Definition qr_code.cpp:23
void set_value(const std::string &value)
Definition qr_code.cpp:18
void dump_config() override
Definition qr_code.cpp:11
qrcodegen_Ecc ecc_
Definition qr_code.h:31
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint16_t x
Definition tt21100.cpp:5
uint16_t y
Definition tt21100.cpp:6