refactor(domain): remove qr third_party generator

This commit is contained in:
admin
2026-03-01 13:32:31 +08:00
parent c6602032c7
commit e694a85997
5 changed files with 0 additions and 1568 deletions

View File

@@ -7,7 +7,6 @@
#include "esp_heap_caps.h"
#include "png.h"
#include "qrcodegen.h"
#define RASTER_WIDTH 384
#define RASTER_BYTES_PER_ROW (RASTER_WIDTH / 8)
@@ -388,144 +387,3 @@ esp_err_t raster_tools_convert_png_to_raster_384(const uint8_t *png,
free(gray);
return convert_rc;
}
static enum qrcodegen_Ecc map_qr_ecc(uint8_t ecc_level) {
switch (ecc_level) {
case 0:
return qrcodegen_Ecc_LOW;
case 1:
return qrcodegen_Ecc_MEDIUM;
case 2:
return qrcodegen_Ecc_QUARTILE;
case 3:
default:
return qrcodegen_Ecc_HIGH;
}
}
esp_err_t raster_tools_render_qr_384(const char *text,
uint8_t module_scale,
uint8_t margin_modules,
uint8_t ecc_level,
uint16_t max_height,
uint16_t *out_width,
uint16_t *out_height,
uint8_t **out_raster,
size_t *out_len,
char *err,
size_t err_len) {
if (text == NULL || text[0] == '\0' ||
out_width == NULL || out_height == NULL || out_raster == NULL || out_len == NULL) {
if (err != NULL && err_len > 0) {
snprintf(err, err_len, "invalid args");
}
return ESP_ERR_INVALID_ARG;
}
if (max_height == 0 || max_height > 3000) {
max_height = 3000;
}
if (margin_modules == 0) {
margin_modules = 2;
}
size_t qr_buf_len = qrcodegen_BUFFER_LEN_MAX;
uint8_t *temp = (uint8_t *)malloc(qr_buf_len);
uint8_t *qr = (uint8_t *)malloc(qr_buf_len);
if (temp == NULL || qr == NULL) {
free(temp);
free(qr);
if (err != NULL && err_len > 0) {
snprintf(err, err_len, "no memory");
}
return ESP_ERR_NO_MEM;
}
bool ok = qrcodegen_encodeText(text,
temp,
qr,
map_qr_ecc(ecc_level),
qrcodegen_VERSION_MIN,
qrcodegen_VERSION_MAX,
qrcodegen_Mask_AUTO,
true);
if (!ok) {
free(temp);
free(qr);
if (err != NULL && err_len > 0) {
snprintf(err, err_len, "qr encode failed");
}
return ESP_FAIL;
}
int qr_size = qrcodegen_getSize(qr);
int full_modules = qr_size + 2 * margin_modules;
if (module_scale == 0) {
module_scale = (uint8_t)(RASTER_WIDTH / full_modules);
if (module_scale == 0) {
module_scale = 1;
}
}
uint32_t image_size = (uint32_t)full_modules * module_scale;
if (image_size > RASTER_WIDTH || image_size > max_height) {
free(temp);
free(qr);
if (err != NULL && err_len > 0) {
snprintf(err, err_len, "qr too large for 384 width");
}
return ESP_ERR_INVALID_SIZE;
}
uint16_t out_h = (uint16_t)image_size;
size_t len = (size_t)RASTER_BYTES_PER_ROW * out_h;
uint8_t *raster = (uint8_t *)calloc_prefer_psram(1, len);
if (raster == NULL) {
free(temp);
free(qr);
if (err != NULL && err_len > 0) {
snprintf(err, err_len, "no memory");
}
return ESP_ERR_NO_MEM;
}
uint16_t x_origin = (uint16_t)((RASTER_WIDTH - image_size) / 2);
for (int my = 0; my < full_modules; ++my) {
for (int mx = 0; mx < full_modules; ++mx) {
int qx = mx - margin_modules;
int qy = my - margin_modules;
bool black = (qx >= 0 && qx < qr_size && qy >= 0 && qy < qr_size)
? qrcodegen_getModule(qr, qx, qy)
: false;
if (!black) {
continue;
}
uint16_t px0 = (uint16_t)(x_origin + mx * module_scale);
uint16_t py0 = (uint16_t)(my * module_scale);
for (uint8_t sy = 0; sy < module_scale; ++sy) {
uint16_t py = (uint16_t)(py0 + sy);
if (py >= out_h) {
continue;
}
for (uint8_t sx = 0; sx < module_scale; ++sx) {
uint16_t px = (uint16_t)(px0 + sx);
if (px < RASTER_WIDTH) {
set_black(raster, RASTER_WIDTH, px, py);
}
}
}
}
}
free(temp);
free(qr);
*out_width = RASTER_WIDTH;
*out_height = out_h;
*out_raster = raster;
*out_len = len;
return ESP_OK;
}