emic-bus
v0.1.0
Published
EMICBus V2 desde Node: COBS, CRC, tramas, Intel HEX PIC24, cliente del programador V2 y transporte serie hacia la pasarela V3. Port byte a byte del JS del editor (verificado en hardware).
Readme
emic-bus — EMICBus V2 desde Node
Port a TypeScript, byte a byte, del protocolo EMICBus V2 del editor web (EMIC.Web.IDE/wwwroot/js/ide/emicbus-v2/,
a su vez port de EMIC-CLI/Services/Serial/V2/, verificado en hardware): COBS, CRC16/32, tramas largas y cortas
(incluido MSG_SRC), Intel HEX PIC24, el cliente del programador V2 y un transporte serie sobre serialport
hacia la pasarela V3. Lo usa emic-mcp para las tools de hardware; el editor sigue con su copia JS.
import { openGateway, MODE_PROGRAMADOR, loadWords, extractEntry, hexLinesOf } from "emic-bus";
const gw = await openGateway(undefined, { mode: MODE_PROGRAMADOR }); // resuelve el puerto (VID 04D8 / PID 00DF o sonda)
try {
await gw.client.resetSystem();
const modules = await gw.client.listenAnnounces(3000);
const words = loadWords(hexLinesOf(hexText));
await gw.client.assignId(modules[0].uid, 0x3e);
const info = await gw.client.info(0x3e);
await gw.client.sessionOpen(0x3e, modules[0].uid);
const result = await gw.client.programApp(0x3e, words, extractEntry(words)!, info!.appStart, info!.appEnd, "Pres", "Termo");
await gw.client.sessionClose(0x3e);
} finally {
await gw.client.setMode(MODE_PASARELA); // todos corriendo
await gw.close();
}Linkes la única abstracción del transporte (send,poll(ms),clearInput):NodeSerialLinkpara Node, o un link falso para tests.serialportse importa en diferido: el núcleo del protocolo no carga el binario nativo.- Tests:
npm test(vectores del selftest del editor + cliente contra un link guionado + link con un serialport falso).
