Files
xdeSpace/code/led3number/gen_c_test.py
T

96 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成 C 验证程序: 独立复刻填充+新移位逻辑, 输出点阵供与 Python 模拟对照"""
import re
SRC = "/root/.openclaw/media/inbound/led3number---69efe51a-567a-4354-a1b8-6c796c184183.txt"
text = open(SRC, encoding="utf-8", errors="replace").read().replace("\r\n", "\n")
m = re.search(r"Code_Number_16_12\[17\]\[32\]\s*=\s*\{(.*?)\n\};", text, re.S)
entries = re.findall(r"\{([^{}]*)\}", m.group(1))
fonts = []
for e in entries:
fonts.append([int(x, 16) for x in re.findall(r"0[xX][0-9A-Fa-f]+", e)])
# 补到 17 个(未初始化的补 0
while len(fonts) < 17:
fonts.append([0]*32)
# 生成 C 字库
rows = []
for idx, f in enumerate(fonts):
vals = ", ".join(f"0x{v:02X}" for v in f)
rows.append(f" /* {idx} */ {{ {vals} }}")
font_tbl = ",\n".join(rows)
c_code = f'''#include <stdio.h>
#include <stdint.h>
#include <string.h>
static const unsigned char Code_Number_16_12[17][32] = {{
{font_tbl}
}};
/* 模拟: 填充 + 新移位 (照抄 led3number_new.c 逻辑) */
static void process(const uint8_t chars[4], uint8_t out[4][16])
{{
uint8_t code12[8][16];
int roll, i;
memset(code12, 0, sizeof(code12));
for (roll = 0; roll < 4; roll++) {{
uint8_t cc = chars[roll];
for (i = 0; i < 16; i++) {{
if (cc == 0x20) {{
code12[roll*2][i] = Code_Number_16_12[10][i*2];
code12[roll*2+1][i] = Code_Number_16_12[10][i*2+1];
}} else {{
code12[roll*2][i] = Code_Number_16_12[cc-0x30][i*2];
code12[roll*2+1][i] = (uint8_t)(Code_Number_16_12[cc-0x30][i*2+1] << 6);
}}
}}
}}
for (i = 0; i < 16; i++) {{
uint8_t s2 = code12[2][i];
uint8_t s3 = code12[3][i];
uint8_t s4 = code12[4][i];
uint8_t s5 = code12[5][i];
uint8_t s6 = code12[6][i];
uint8_t s7 = code12[7][i];
code12[2][i] = (uint8_t)((s2 >> 1) & 0x1F);
code12[3][i] = (uint8_t)(((s2 & 0x01) << 7) | ((s3 >> 1) & 0x40) | ((s4 >> 3) & 0x07));
code12[4][i] = (uint8_t)(((s4 & 0x07) << 5) | ((s5 & 0x80) >> 3) | ((s6 >> 5) & 0x01));
code12[5][i] = (uint8_t)(((s6 & 0x1F) << 3) | ((s7 & 0x80) >> 5));
}}
memcpy(out, &code12[2][0], 64);
}}
static void render(const char *name, const uint8_t out[4][16])
{{
int r, c;
printf("=== %s ===\\n", name);
printf("col: ");
for (c = 0; c < 32; c++) printf("%d", c % 10);
printf("\\n");
for (r = 0; r < 16; r++) {{
printf("%2d ", r);
for (c = 0; c < 32; c++) {{
uint8_t byte = out[c/8][r];
int bit = (byte >> (7 - (c % 8))) & 1;
putchar(bit ? '#' : '.');
}}
printf("\\n");
}}
}}
int main(void)
{{
uint8_t out[4][16];
/* 字符: 第1个被丢弃(协议), 后3个显示; 0x20=空格 */
process((uint8_t[]){{'1','2','3','0'}}, out); render("NEW 123+0", out);
process((uint8_t[]){{' ','4','5','6'}}, out); render("NEW 456+7", out);
process((uint8_t[]){{'8','8','8','8'}}, out); render("NEW 888+8", out);
return 0;
}}
'''
open("/root/.openclaw/workspace/led3number_test.c", "w").write(c_code)
print("已生成 led3number_test.c")