meshcore.js/src/connection/nodejs_serial_connection.js
Manuel Bahamóndez-Honores 2d4cb35e51 Replace hand-written .d.ts with JSDoc + tsc auto-generation
- Delete hand-written index.d.ts that drifted from source
- Add JSDoc type annotations to all source files
- Create src/types.js with shared typedefs (SelfInfo, Contact,
  ContactMessage, ChannelInfo, RepeaterStats, etc.)
- Add tsconfig.json for declaration generation
- Add build:types script and prepublishOnly hook
- Add GitHub Actions CI workflow for type checking
- Use Uint8Array everywhere (no Buffer references)
- Add semantic type aliases (EpochSeconds, Milliseconds, MilliVolts)
- Add typed event overloads on Connection (on/once/off)
- All 11 PR #15 review comments addressed
2026-02-18 05:49:46 -03:00

67 lines
1.8 KiB
JavaScript

import SerialConnection from "./serial_connection.js";
class NodeJSSerialConnection extends SerialConnection {
/**
* @param {string} path serial port to connect to, e.g: "/dev/ttyACM0" or "/dev/cu.usbmodem14401"
*/
constructor(path) {
super();
/** @type {string} */
this.serialPortPath = path;
}
/** @returns {Promise<void>} */
async connect() {
// note: serialport module is only available in NodeJS, you shouldn't use NodeJSSerialConnection from a web browser
const { SerialPort } = await import('serialport');
// create new serial port
this.serialPort = new SerialPort({
autoOpen: false, // don't auto open, we want to control this manually
path: this.serialPortPath, // e.g: "/dev/ttyACM0" or "/dev/cu.usbmodem14401"
baudRate: 115200,
});
this.serialPort.on("open", async () => {
await this.onConnected();
});
this.serialPort.on("close", () => {
this.onDisconnected();
});
this.serialPort.on("error", function(err) {
console.log("SerialPort Error: ", err.message)
});
this.serialPort.on("data", async (data) => {
await this.onDataReceived(data);
});
// open serial connection
this.serialPort.open();
}
/** @returns {Promise<void>} */
async close() {
try {
await this.serialPort.close();
} catch(e) {
console.log("failed to close serial port, ignoring...", e);
}
}
/**
* @param {Uint8Array} bytes
* @returns {Promise<void>}
*/
/* override */ async write(bytes) {
this.serialPort.write(bytes);
}
}
export default NodeJSSerialConnection;