Files
printer-driver/PROGRESO.md
T
2026-10-02 11:36:59 +02:00

2.0 KiB

Progreso

Estado actual

  • Fase 2 — Buffer dinámico. (Fase 1 cerrada en Fedora; falta probar en Windows.)
  • Paso actual: 2.2, escpos_buffer_append_byte con realloc y duplicado de capacidad.
  • Entorno activo: Fedora 42 nativo (gcc 15.2, clang 20, make 4.4, gdb 17, valgrind 3.26).

Hecho

  • include/escpos.h + src/escpos.c con escpos_version(), y hello.c que la usa. Compila y enlaza a mano en Windows y en Fedora.
  • samples/hello_world.bin: ESC @, texto, LF, ESC d 5, GS V 0.
  • Emulador ESC/POS en Go (emulator/) para probar sin gastar papel.

Conceptos de C aprendidos

  • Etapas de compilación, unidades de traducción, cabeceras, include guards, static para encapsular, nm y errores del enlazador.
  • Cadenas terminadas en '\0', const char *.
  • Memoria virtual de un proceso, modo usuario y modo núcleo.
  • Make: reglas, dependencias por fechas, variables, regla patrón con $@ $< $^, .PHONY.
  • Pila y montón, malloc/free, NULL, propiedad de punteros, tipo opaco, typedef, ->, uint8_t/size_t, Valgrind.

Decisiones de diseño

  • Prefijo escpos_ para toda la API pública.
  • escpos_buffer es un tipo opaco: declarado en escpos.h, definido en src/buffer.c. Campos uint8_t *data, size_t len, size_t cap.
  • Estilo: nombres en snake_case y llave de apertura en línea aparte (estilo Allman) en funciones, structs y bloques. Aplicarlo a todo el proyecto, también a escpos.c.
  • Lo generado va en build/, que se crea en las recetas con mkdir -p y no se versiona.

Pendiente / puntos débiles

  • .gitignore creado. Siguen versionados emulator/escpos-emu.exe y goruntime/goruntime.exe.
  • Ficheros sin salto de línea final: corregido; editor configurado.
  • Make: costó entender que va hacia atrás desde el objetivo, y que una regla patrón es una plantilla. Repasar con la sección de docs/06-make.md.
  • Punteros: le cuesta saber cuándo hace falta * y cuándo no (también le pasaba en Go). Reforzar con ejemplos de su propio código.
  • Impresoras físicas: sin registrar marca y modelo.