ti_printer_plugin 1.0.15
ti_printer_plugin: ^1.0.15 copied to clipboard
Plugin Flutter para imprimir y consultar estado en impresoras térmicas ESC/POS por USB, ideal para POS y self-checkout en Linux/Windows.
1.0.15 #
-
Corrección en interpretación de estado USB:
printer_status_interpreter.dart: Cambiastatus[0]→status.lastpara manejar impresoras que devuelven bytes acumulados de consultas anteriores.printer_controller.dart: Agrega pausa de 80ms (_usbStatusCommandGap) entre comandos DLE EOT en USB para evitar superposición de respuestas.
-
Corrección apertura puerto USB en Windows:
ti_printer_plugin.cpp: Pasa&devInfoDatadirectamente aSetupDiGetDeviceInterfaceDetaileliminando llamada redundante aSetupDiEnumDeviceInfo.
1.0.14 #
-
Carga correcta de
CapabilityProfiledesde assets del paquete:CapabilityProfile.load()yCapabilityProfile.getAvailableProfiles()ahora resuelvencapabilities.jsonusando la clave de asset del paquetepackages/ti_printer_plugin/assets/resources/capabilities.json.- La app consumidora ya no necesita declarar ni copiar
assets/resources/capabilities.jsonen su propiopubspec.yaml. - Agregada prueba unitaria para validar la carga del perfil y el listado de perfiles usando un mock del canal de assets.
-
Ejemplo desacoplado de internals:
example/lib/logic/printer_controller.dartyexample/lib/logic/ticket_builder.dartahora importanpackage:ti_printer_plugin/esc_pos_utils_platform/esc_pos_utils_platform.darten lugar de rutassrc/....- La documentación aclara que el barrel público es la forma recomendada de consumir la librería ESC/POS incluida en el plugin.
1.0.13 #
- Reestructuración de directorios:
- La librería
esc_pos_utils_platformse movió deexample/lib/alib/(raíz del plugin), junto conassets/resources/capabilities.json. - Actualizadas todas las importaciones en la app de ejemplo para usar
package:ti_printer_plugin/.... - El plugin ahora incluye la librería ESC/POS como parte de su propia API.
- La librería
1.0.12 #
-
API breaking:
getUsbPrinters()ahora retornaList<PrinterDeviceInfo>en lugar deList<String>:- Nuevo modelo
PrinterDeviceInfoconinstanceId,displayName,vid,pid. openUsbPort()ahora requieredevice.instanceIden vez del string directo.PrinterDeviceInfo.resolvedDisplayName: getter que busca el VID/PID en la base de datos de impresoras conocidas y retorna un nombre legible.- Parseo de VID/PID desde el
instanceIdnativo (formatoUSB\VID_xxxx&PID_xxxx\...).
- Nuevo modelo
-
Nuevo
lib/database_printer.dart:- Clase
KnownUsbPrintery listaknownThermalUsbPrinterscon +30 entradas (Epson, Star, Bixolon, Citizen, Zebra, TSC, DYMO, genéricas POS58/POS80, Gprinter, Rongta). - Función
lookupPrinterInfo(vid, pid)para búsqueda programática. - Exportado desde
ti_printer_plugin.dart.
- Clase
-
Windows
ListUsbInstance()— PLG-16 (Camino A + B):- Camino A: Segunda pasada con
GUID_DEVCLASS_PRINTERpara capturar impresoras con drivers propietarios (Epson, Star, Bixolon), con dedup contra la primera pasada. - Camino B: Retorna
vector<PrinterDeviceInfo>coninstanceId,displayName,vid,pid. - Helpers estáticos reemplazados por lambdas inline para eliminar posibles bugs de linking.
OutputDebugStringAagregado para depurar fallos deSetupDiGetClassDevsyCM_Get_Device_ID.
- Camino A: Segunda pasada con
-
Linux
list_usb_printers()— PLG-18 (VID/PID desde sysfs):- Nuevas funciones helper
resolve_sysfs_path()yread_vid_pid_from_sysfs(). - Cada dispositivo ahora resuelve VID/PID real recorriendo
/sys/dev/char/<major>:<minor>y caminando hacia arriba en el árbol sysfs hasta encontraridVendor/idProduct. displayNamese genera como"USB Printer (VID:0xPPPP, PID:0xPPPP)"si se encontraron VID/PID.- Sin dependencias externas (solo POSIX:
stat,realpath,ifstream,snprintf).
- Nuevas funciones helper
-
Reestructuración del plugin:
- La librería
esc_pos_utils_platformse movió del plugin (lib/) a la app de ejemplo (example/lib/). El plugin ahora es más liviano y solo contiene la capa de comunicación nativa. - Se eliminaron dependencias y archivos no utilizados del plugin.
- La librería
-
API simplificada (Dart + nativo) — PLG-14:
readStatusUsb(Uint8List command)yreadStatusSerial(Uint8List command)ahora aceptanUint8Listdirectamente (ya no requiereMap {"command": ...}).- Actualizados
lib/ti_printer_plugin_method_channel.dart,windows/ti_printer_plugin.cppylinux/ti_printer_plugin.cc.
-
PLG-08 — Encoding respeta codeTable:
- Agregado mapa
_codePageMapscon 9 code pages (CP437, CP850, CP858, CP860, CP863, CP865, CP852, CP857, ISO_8859-15). _encode()consulta_codeTable ?? _styles.codeTablepara seleccionar el mapa activo.
- Agregado mapa
-
PLG-17 — Linux serial retorna NotImplemented:
openSerialPort/closeSerialPort/sendCommandToSerial/readStatusSerialusanfl_method_not_implemented_response_new().
-
PLG-20 — Capabilities duplicado eliminado:
- Eliminados
assets/resources/capabilities.jsonylib/resources/capabilities.jsonde la raíz del plugin. - Conservado
example/assets/resources/capabilities.jsoncomo única copia canónica.
- Eliminados
-
Logo printing (example):
- Corregido error que imprimía un rectángulo negro en lugar del logo.
_createLogo()+imageRaster()reemplazado por_buildLogoBytes()que construye un bitmap 1-bit manualmente (pixel por pixel) y lo envía con el comando rawGS v 0.- Se ignoran píxeles transparentes (alpha <= 128) y se calcula luminancia correcta con pesos RGB.
- Se corrigió el uso de
getBytes()para leer datos de píxeles, evitando inconsistencias congetPixel().
-
Compatibilidad con CMake >= 4.0 (Windows):
- Agregado
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)enwindows/CMakeLists.txtantes deFetchContent_MakeAvailable(googletest), resolviendo el errorCompatibility with CMake < 3.5 has been removed.
- Agregado
-
Mejoras en la app de ejemplo:
PrinterStateyPrinterLogEntryahora usanEquatablepara comparaciones correctas.- Agregado
PrinterStatusViewcon UI de monitoreo en tiempo real (online, papel, tapa, logs). PrinterState.usbPrintersactualizado aList<PrinterDeviceInfo>.PrinterState.selectedUsbPrinteractualizado aPrinterDeviceInfo?.- Logs de
refreshUsbPrinters()muestranresolvedDisplayNameeinstanceIdde cada impresora. DropdownButtonFormFieldusap.resolvedDisplayNamecomo texto visible.TicketBuilderahora usa rutas relativas para importaresc_pos_utils_platform.- Agregados assets
assets/logo.pngyassets/resources/capabilities.jsonen el ejemplo. - Mejorado
PrinterStatusInterpretercon interpretación robusta de flags de estado DLE EOT. - Actualizado
image_utils.dartcon corrección en el cálculo dedstW.
-
Correcciones en Linux:
readStatusUsbalineado con Windows: aceptaUint8Listdirectamente.- Manejo robusto de errores en escritura USB (
send_command_to_usbcon reintento enEINTRy detección deENODEV/EIO/EBADF).
-
Actualización de documentación:
- README, CHANGELOG y
doc/fixes_aplicados_pendientes.mdactualizados con todos los cambios. - Renombrado
docs/→doc/para cumplir convención de pub.dev.
- README, CHANGELOG y
1.0.11 #
- Update documentación
1.0.10 #
- Windows
windows/ti_printer_plugin.cpp- PLG-01:
hUsb_inicializado enINVALID_HANDLE_VALUE. - PLG-02:
ReadStatusUsbyReadStatusSerialdevuelven todos los bytes. - PLG-03: USB abierto con
FILE_FLAG_OVERLAPPEDe I/O async con timeout yCancelIoEx. - PLG-15:
SendCommandToUsbcon loop por escritura parcial. - PLG-19: Conversión UTF-8 -> UTF-16 con
MultiByteToWideChar. - PLG-21: El destructor usa
CloseUsbPort()de forma simétrica. - PLG-22: Se remueve
OVERLAPPEDmuerto deSendCommandToSerial.
- PLG-01:
- Linux
linux/ti_printer_plugin.cc- PLG-02:
read_status_usbdevuelve todos los bytes leídos.
- PLG-02:
- Dart
lib/esc_pos_utils_platform/src/generator.dart- PLG-06:
beep()recursivo concatena retornos. - PLG-07:
oldRrowconcatena el wrap. - PLG-08: Se agrega comentario detallado sobre la limitación de
codeTable. - PLG-09:
_getLexemes("")protegido. - PLG-10:
_intLowHighcon paréntesis correctos. - PLG-11 / PLG-12: Limpieza de dead code en
row()y eliminación del round-tripbytes -> String -> trim. - PLG-13:
drawImagesin asignación dentro del ternario.
- PLG-06:
- Dart
lib/esc_pos_utils_platform/src/qrcode.dart- PLG-04:
pL/pHcon split de 16 bits para soportar payloads mayores a 252 bytes. - PLG-05:
utf8.encodeen lugar delatin1.encode.
- PLG-04:
1.0.9 #
- Se corrige en Windows
MissingPluginExceptionparacloseUsbPorten el canalti_printer_plugin.
1.0.8 #
- Se corrige
MissingPluginExceptionparacloseUsbPorten el canalti_printer_plugin.
1.0.7 #
- Se agrega soporte para
closeUsbPort.
1.0.6 #
- Se corrigen errores para publicacion y validacion en pub.dev.
1.0.5 #
- Se agrega soporte para Linux.
1.0.4 #
- Se eliminan trazas de comandos ESC/POS en consola dentro de
ReadStatusUsb.
1.0.3 #
- Se corrige el manejo de
erroryerror_codeenti_printer_plugin.cpp.
1.0.2 #
- Se comentan salidas por consola en
ti_printer_plugin.
1.0.1 #
- Se eliminan salidas de log.
1.0.0 #
- Versión inicial del plugin.