UNPKG

ngx-serial

Version:

NgxSerial eases the use of the Serial Web API in Angular.

103 lines 12.9 kB
import { __awaiter } from "tslib"; export class NgxSerial { constructor(readFunction, options, controlCharacter) { this.options = { baudRate: 9600, dataBits: 8, parity: 'none', bufferSize: 256, flowControl: 'none' }; //Default this.controlCharacter = "\n"; this.keepReading = true; this.readFunction = readFunction; if (options) this.options = options; if (controlCharacter) this.controlCharacter = controlCharacter; } sendData(data) { return __awaiter(this, void 0, void 0, function* () { yield this.writer.write(data); }); } readLoop() { return __awaiter(this, void 0, void 0, function* () { while (this.port.readable && this.keepReading) { const textDecoder = new TextDecoderStream(); this.readableStreamClosed = this.port.readable.pipeTo(textDecoder.writable); this.reader = textDecoder.readable .pipeThrough(new TransformStream(new LineBreakTransformer(this.controlCharacter))) .getReader(); try { while (true) { const { value, done } = yield this.reader.read(); if (done) { break; } if (value) { this.readFunction(value); } } } catch (error) { console.error("Read Loop error. Have the serial device been disconnected ? "); } } }); } close(callback) { return __awaiter(this, void 0, void 0, function* () { this.keepReading = false; this.reader.cancel(); yield this.readableStreamClosed.catch(() => { }); this.writer.close(); yield this.writableStreamClosed; yield this.port.close(); callback(null); }); } connect(callback) { return __awaiter(this, void 0, void 0, function* () { this.keepReading = true; if ("serial" in navigator) { // The Web Serial API is supported by the browser. let nav = navigator; const ports = yield nav.serial.getPorts(); try { this.port = yield nav.serial.requestPort(); } catch (error) { console.error("Requesting port error: " + error); return; } try { yield this.port.open(this.options); } catch (error) { console.error("Opening port error: " + error); return; } const textEncoder = new TextEncoderStream(); this.writableStreamClosed = textEncoder.readable.pipeTo(this.port.writable); this.writer = textEncoder.writable.getWriter(); this.readLoop(); callback(this.port); } else { console.error("This browser does NOT support the Web Serial API"); } }); } } class LineBreakTransformer { constructor(controlCharacter) { this.container = ""; this.container = ''; this.controlCharacter = controlCharacter; } transform(chunk, controller) { this.container += chunk; const lines = this.container.split(this.controlCharacter); this.container = lines.pop(); lines.forEach((line) => controller.enqueue(line)); } flush(controller) { controller.enqueue(this.container); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZXJpYWwvc3JjL2xpYi9uZ3gtc2VyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxNQUFNLE9BQU8sU0FBUztJQVlsQixZQUFZLFlBQXNCLEVBQUUsT0FBYSxFQUFFLGdCQUFzQjtRQVRqRSxZQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFHMUcscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBSWhDLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBR2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksT0FBTztZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksZ0JBQWdCO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUU3QyxDQUFDO0lBQ1ksUUFBUSxDQUFDLElBQVk7O1lBQ2hDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztLQUFBO0lBRWEsUUFBUTs7WUFHcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFHO2dCQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRO3FCQUMv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QTtJQUMxQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVMsRUFBRSxVQUFjO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQWM7UUFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTk9ORV9UWVBFIH0gZnJvbSBcIkBhbmd1bGFyL2NvbXBpbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBOZ3hTZXJpYWwge1xuXG4gICAgcHJpdmF0ZSBwb3J0OiBhbnk7XG4gICAgcHJpdmF0ZSBvcHRpb25zID0geyBiYXVkUmF0ZTogOTYwMCwgZGF0YUJpdHM6IDgsIHBhcml0eTogJ25vbmUnLCBidWZmZXJTaXplOiAyNTYsIGZsb3dDb250cm9sOiAnbm9uZScgfTsgLy9EZWZhdWx0XG4gICAgcHJpdmF0ZSB3cml0ZXI6IGFueTtcbiAgICBwcml2YXRlIHJlYWRGdW5jdGlvbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBjb250cm9sQ2hhcmFjdGVyOiBzdHJpbmcgPSBcIlxcblwiO1xuICAgIHByaXZhdGUgcmVhZGVyOmFueTtcbiAgICBwcml2YXRlIHJlYWRhYmxlU3RyZWFtQ2xvc2VkOmFueTtcbiAgICBwcml2YXRlIHdyaXRhYmxlU3RyZWFtQ2xvc2VkOmFueTtcbiAgICBwcml2YXRlIGtlZXBSZWFkaW5nOmJvb2xlYW4gPSB0cnVlO1xuICBcbiAgICBjb25zdHJ1Y3RvcihyZWFkRnVuY3Rpb246IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55LCBjb250cm9sQ2hhcmFjdGVyPzogYW55KSB7XG4gICAgICB0aGlzLnJlYWRGdW5jdGlvbiA9IHJlYWRGdW5jdGlvbjtcbiAgICAgIGlmIChvcHRpb25zKVxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgaWYgKGNvbnRyb2xDaGFyYWN0ZXIpXG4gICAgICAgIHRoaXMuY29udHJvbENoYXJhY3RlciA9IGNvbnRyb2xDaGFyYWN0ZXI7XG4gIFxuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc2VuZERhdGEoZGF0YTogc3RyaW5nKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlci53cml0ZShkYXRhKTtcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgYXN5bmMgcmVhZExvb3AoKSB7XG4gICAgICBcbiAgXG4gICAgICB3aGlsZSAodGhpcy5wb3J0LnJlYWRhYmxlICYmIHRoaXMua2VlcFJlYWRpbmcgKSB7XG4gICAgICAgIGNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyU3RyZWFtKCk7XG4gICAgICAgIHRoaXMucmVhZGFibGVTdHJlYW1DbG9zZWQgPSB0aGlzLnBvcnQucmVhZGFibGUucGlwZVRvKHRleHREZWNvZGVyLndyaXRhYmxlKTtcbiAgICAgICAgdGhpcy5yZWFkZXIgPSB0ZXh0RGVjb2Rlci5yZWFkYWJsZVxuICAgICAgICAgIC5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG5ldyBMaW5lQnJlYWtUcmFuc2Zvcm1lcih0aGlzLmNvbnRyb2xDaGFyYWN0ZXIpKSlcbiAgICAgICAgICAuZ2V0UmVhZGVyKCk7XG4gIFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCB0aGlzLnJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlYWRGdW5jdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFkIExvb3AgZXJyb3IuIEhhdmUgdGhlIHNlcmlhbCBkZXZpY2UgYmVlbiBkaXNjb25uZWN0ZWQgPyBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGNsb3NlKGNhbGxiYWNrOkZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLmtlZXBSZWFkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnJlYWRlci5jYW5jZWwoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVhZGFibGVTdHJlYW1DbG9zZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdGhpcy53cml0ZXIuY2xvc2UoKTtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGFibGVTdHJlYW1DbG9zZWQ7XG4gICAgICBhd2FpdCB0aGlzLnBvcnQuY2xvc2UoKTtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgXG4gICAgcHVibGljIGFzeW5jIGNvbm5lY3QoY2FsbGJhY2s6RnVuY3Rpb24pIHtcbiAgICAgIHRoaXMua2VlcFJlYWRpbmcgPSB0cnVlO1xuICAgICAgaWYgKFwic2VyaWFsXCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgIC8vIFRoZSBXZWIgU2VyaWFsIEFQSSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG4gICAgICAgIGxldCBuYXY6IGFueSA9IG5hdmlnYXRvcjtcbiAgICAgICAgY29uc3QgcG9ydHMgPSBhd2FpdCBuYXYuc2VyaWFsLmdldFBvcnRzKCk7XG4gIFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IG5hdi5zZXJpYWwucmVxdWVzdFBvcnQoKTtcbiAgXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlJlcXVlc3RpbmcgcG9ydCBlcnJvcjogXCIgKyBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gIFxuICAgICAgICB0cnkge1xuICAgICAgICAgYXdhaXQgdGhpcy5wb3J0Lm9wZW4odGhpcy5vcHRpb25zKTtcbiAgXG4gIFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJPcGVuaW5nIHBvcnQgZXJyb3I6IFwiICsgZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICBcbiAgICAgICAgY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXJTdHJlYW0oKTtcbiAgICAgICAgdGhpcy53cml0YWJsZVN0cmVhbUNsb3NlZCA9IHRleHRFbmNvZGVyLnJlYWRhYmxlLnBpcGVUbyh0aGlzLnBvcnQud3JpdGFibGUpO1xuICAgICAgICB0aGlzLndyaXRlciA9IHRleHRFbmNvZGVyLndyaXRhYmxlLmdldFdyaXRlcigpO1xuICBcbiAgICAgICAgdGhpcy5yZWFkTG9vcCgpO1xuICBcbiAgICAgICAgY2FsbGJhY2sodGhpcy5wb3J0KTtcbiAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXMgTk9UIHN1cHBvcnQgdGhlIFdlYiBTZXJpYWwgQVBJXCIpO1xuICAgICAgfVxuICBcbiAgICB9XG4gIH1cbiAgXG4gIGNsYXNzIExpbmVCcmVha1RyYW5zZm9ybWVyIHtcbiAgICBjb250YWluZXI6IGFueT1cIlwiO1xuICAgIHByaXZhdGUgY29udHJvbENoYXJhY3Rlcjogc3RyaW5nO1xuICBcbiAgICBjb25zdHJ1Y3Rvcihjb250cm9sQ2hhcmFjdGVyOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gJyc7XG4gICAgICB0aGlzLmNvbnRyb2xDaGFyYWN0ZXIgPSBjb250cm9sQ2hhcmFjdGVyXG4gICAgfVxuICBcbiAgICB0cmFuc2Zvcm0oY2h1bms6YW55LCBjb250cm9sbGVyOmFueSkge1xuICAgICAgdGhpcy5jb250YWluZXIgKz0gY2h1bms7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuY29udGFpbmVyLnNwbGl0KHRoaXMuY29udHJvbENoYXJhY3Rlcik7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGxpbmVzLnBvcCgpO1xuICAgICAgbGluZXMuZm9yRWFjaCgobGluZTogYW55KSA9PiBjb250cm9sbGVyLmVucXVldWUobGluZSkpO1xuICAgIH1cbiAgXG4gICAgZmx1c2goY29udHJvbGxlcjphbnkpIHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgfVxuICB9Il19