@danidoble/webserial
Version:
WebSerial API wrapper
1,183 lines (1,182 loc) • 44.8 kB
JavaScript
import { K as C, D as f, w as u, g as y } from "./kernel-BnWXOCde.js";
import { o as i } from "./relay-DP8PLsDP.js";
class w extends C {
__device = {
type: "esplus",
support_cart: !1,
withdraw: {
in_process: !1,
seconds: 60,
interval: 0
},
// waiting for user withdraw products
cart: {
in_process: !1
},
channels: {
verification: {
clear() {
this.running = !1, this.current = 1, this.channels = [];
},
running: !1,
start: 1,
end: 80,
current: 1,
channels: []
}
}
};
constructor({
filters: t = null,
config_port: e,
no_device: n = 1,
device_listen_on_channel: r = 1,
type: a = "esplus",
support_cart: o = !0,
socket: c = !1
} = {}) {
if (super({ filters: t, config_port: e, no_device: n, device_listen_on_channel: r, socket: c }), this.__internal__.device.type = "jofemar", f.getCustom(this.typeDevice, n))
throw new Error(`Device ${this.typeDevice} ${n} already exists`);
this.__internal__.dispense.must_response = !0, this.__internal__.time.response_general = 800, this.__internal__.time.response_engines = 800, this.__internal__.dispense.limit_counter = 40, this.__internal__.dispense.timeout = 0, this.__internal__.dispense.timeout_time = 4e3, this.__internal__.dispense.interval = 0, this.__internal__.dispense.interval_time = 1e3, this.__internal__.device.hex_number = (128 + this.listenOnChannel).toString(16), this.__internal__.device.door_open = !1, this.__internal__.dispense.elevator = {
locking_time: 60,
locking_interval: 0,
need_reset: !1
}, this.deviceType = a, this.supportCart = o, this.#h(), f.add(this), this.#l();
}
set startChannelVerification(t) {
const e = parseInt(t);
if (isNaN(e)) throw new Error("Invalid start channel verification, must be a number");
if (e < 1 || e > 126) throw new Error("Invalid start channel verification, valid range is 1 to 126");
this.__device.channels.verification.start = e;
}
set endChannelVerification(t) {
const e = parseInt(t);
if (isNaN(e)) throw new Error("Invalid end channel verification, must be a number");
if (e < 1 || e > 126) throw new Error("Invalid end channel verification, valid range is 1 to 126");
this.__device.channels.verification.end = e;
}
set listenOnChannel(t) {
if (t = parseInt(t), isNaN(t) || t < 1 || t > 31) throw new Error("Invalid port number, valid range is 1 to 31");
this.__internal__.device.listen_on_port = t, this.__internal__.serial.bytes_connection = this.serialSetConnectionConstant(t), this.__internal__.device.hex_number = (128 + t).toString(16);
}
/**
* @deperecated
* @param {string|number} channel
*/
set listenOnPort(t) {
this.listenOnChannel = t;
}
set deviceType(t) {
if (typeof t != "string") throw new Error("Invalid device type, must be a string");
this.__device.type = t;
}
set supportCart(t) {
if (typeof t != "boolean") throw new Error("Invalid support cart, must be a boolean");
this.__device.support_cart = t;
}
#h() {
const t = [
"dispensing:withdrawal",
"command-executed",
"keyboard:pressed",
"door:event",
"program:version",
"machine:faults",
"clock:registers",
"machine:activity",
"check:language",
"check:beeper",
"check:isolation-tray",
"check:engine-voltage",
"check:push-over",
"check:extractor-after-dispense",
"check:standby-after-collect",
"check:standby-without-collect",
"check:elevator-speed",
"check:expiration-by-temperature",
"check:temperature-before-expiration",
"check:expiration-after",
"check:temperature-scale",
"check:machine-id",
"temperature:working",
"temperature:current",
"jofemar:warning",
"jofemar:error",
"serial:message",
"reset:errors",
"channels",
"channel:status",
"machine:status"
];
for (const e of t)
this.serialRegisterAvailableListener(e);
}
#l() {
this.on("internal:dispense:running", this.#q.bind(this));
}
serialSetConnectionConstant(t = 1) {
return i.connection({ channel: t });
}
async #s() {
if (!this.__internal__.dispense.elevator.locking_interval)
return this.__internal__.dispense.elevator.need_reset && (this.__internal__.dispense.elevator.need_reset = !1, await this.resetWaitingProductRemovedError(), await u(500)), this.__internal__.dispense.status = "elevator-locked", this.__internal__.dispense.elevator.locking_time = 60, new Promise((t) => {
this.__internal__.dispense.elevator.locking_interval = setInterval(() => {
this.dispatch("dispensing:withdrawal", {
elevator: !0,
seconds: this.__internal__.dispense.elevator.locking_time,
description: "Please recall products from the elevator"
}), this.__internal__.dispense.elevator.locking_time -= 1, this.__internal__.dispense.elevator.locking_time <= 0 && (clearInterval(this.__internal__.dispense.elevator.locking_interval), this.__internal__.dispense.elevator.locking_interval = 0, t(!0));
}, 1e3);
});
}
#d(t) {
return t.name = "ok", t.description = "The last command was executed successfully", t.no_code = 1, this.dispatch("command-executed", t), t;
}
#p(t, e) {
e.additional = {
hex: t,
dec: this.hexToDec(t),
ascii: null
};
const n = {
30: "0",
31: "1",
32: "2",
33: "3",
34: "4",
35: "5",
36: "6",
37: "7",
38: "8",
39: "9",
"2a": "*",
23: "#",
41: "A",
42: "B",
43: "C",
44: "D"
}, r = t.toString().toLowerCase();
return e.additional.ascii = n[r] ?? null, e.name = "Key pressed", e.description = `The key ${e.additional.ascii} was pressed`, e.no_code = 2, this.dispatch("keyboard:pressed", e.additional), e;
}
#u(t, e) {
return e.additional = { open: !1 }, e.no_code = 3, t === "4f" ? (e.name = "door open", e.description = "The door was opened", e.additional.open = !0, this.__internal__.device.door_open = !0, this.dispatch("door:event", e.additional)) : t === "43" ? (e.name = "door close", e.description = "The door was closed", e.additional.open = !1, this.__internal__.device.door_open = !1, this.dispatch("door:event", e.additional)) : (e.name = "door event", e.description = "The door event received is unknown", this.dispatch("door:event", { open: e.additional.open, message: e })), e;
}
#_(t, e) {
e.no_code = 404;
let n = t[5] ?? null;
return n && this.listenOnChannel > 1 && (n = this.hexToDec(n) - this.listenOnChannel + 1, n = this.decToHex(n)), n && (n === "FD" ? (e.no_code = 4, e.name = "channel disconnected", e.description = "The channel is disconnected", e.additional = { active: !1 }) : n === "FC" ? (e.no_code = 5, e.name = "channel connected", e.description = "The channel is connected", e.additional = { active: !0 }) : (e.no_code = 6, e.name = "channel sold out", e.description = "The channel is empty", e.additional = { active: !0 }), this.__device.channels.verification.running && (this.__device.channels.verification.channels.push({
selection: this.__device.channels.verification.current,
active: e.additional.active
}), e.additional.selection = this.__device.channels.verification.current), this.dispatch("channel:status", e.additional)), e;
}
#f(t, e) {
e.no_code = 39, e.name = "Program version";
const n = t.slice(4, 12), r = n.map((a) => String.fromCharCode(this.hexToDec(a))).join("");
return e.additional = { version: r, hex: n }, e.description = `The program version is ${r}`, this.dispatch("program:version", e.additional), e;
}
#y(t, e) {
e.no_code = 39, e.name = "Machine faults", e.description = "No faults detected", e.additional = { no_faults: 0, faults: [] };
const n = t.slice(4, -3);
if (n.length > 1 && n[0] !== "30") {
e.description = "Machine has faults";
const r = {
31: "Busy",
32: "Invalid tray",
33: "Invalid channel",
34: "Empty channel",
35: "Jam in elevator engine",
36: "Malfunction in the elevator belt or product detector",
37: "Failure in one of the photo transistors in the cabinet",
38: "No channels detected",
39: "Product detector fault",
41: "Machine display is disconnected",
42: "Product alarm under elevator",
43: "Error when elevator approaching to a position",
44: "Fault in keyboard",
45: "Eeprom writing error",
46: "Fault communicating with temperature control",
47: "The thermometer is disconnected",
48: "Thermometer programming lost",
49: "Thermometer faulty",
"4a": "Channels power consumption detector faulty",
"4b": "Elevator does not find channel or tray",
"4c": "Elevator does not find delivery product position",
"4d": "Interior of elevator blocked",
"4e": "Error in tester of product detector",
"4f": "Waiting for product to be removed",
50: "Product expired by temperature reasons",
51: "Automatic door faulty",
59: "Product is expired",
"5a": "Product is expired",
61: "Product is expired",
62: "Product is expired",
63: "Product is expired",
64: "Product detector didn't change during its verification test"
};
for (const a of n)
r[a] && e.additional.faults && typeof e.additional.no_faults < "u" && (e.additional.faults.push(r[a] || "Unknown fault"), e.additional.no_faults++);
}
return this.dispatch("machine:faults", e.additional), e;
}
#v(t, e) {
e.no_code = 40, e.name = "Clock registers", e.description = "Clock registers";
const n = t.slice(4, -3), r = n.map((_) => String.fromCharCode(this.hexToDec(_))).join(""), [a, o] = r.split(" "), [c, h] = a.split(":"), [l, s, d] = o.split("-"), p = new Date(
2e3 + parseInt(d),
parseInt(s) - 1,
parseInt(l),
parseInt(c),
parseInt(h)
);
return e.additional = {
day: l,
month: s,
year: d,
hours: c,
minutes: h,
formatted: r,
date: p,
hex: n
}, this.dispatch("clock:registers", e.additional), e;
}
#C(t, e) {
e.no_code = 41, e.name = "Machine activity", e.description = "Events from read machine activity";
const n = String.fromCharCode(this.hexToDec(t[4]));
if (n !== "0") {
const r = t.slice(5, -3);
if (n === "T" && r.length === 4) {
const a = String.fromCharCode(this.hexToDec(r[0])), o = String.fromCharCode(this.hexToDec(r[1])), c = String.fromCharCode(this.hexToDec(r[3]));
e.additional = {
ascii: n,
type: "DU.d",
dozens: a,
units: o,
decimals: c,
time: parseFloat(`${a}${o}.${c}`),
meaning: "Extraction time (in seconds)"
};
} else if (["B", "D", "E", "F", "G"].includes(n) && r.length === 3) {
const a = String.fromCharCode(this.hexToDec(r[0])), o = String.fromCharCode(this.hexToDec(r[1])), c = String.fromCharCode(this.hexToDec(r[2])), h = parseInt(`${a}${o}${c}`), l = {
B: "Error on going to tray channel",
D: "Error on product detector",
E: "Extraction of channel ok",
F: "Error on engine intensity detection",
G: "Error on product exit door"
};
e.additional = {
type: "HDU",
hundreds: a,
dozens: o,
decimals: c,
channel: h,
selection: h - 109,
ascii: n,
meaning: l[n] || "Unknown"
};
} else if (r.length === 13) {
const a = r.map((v) => String.fromCharCode(this.hexToDec(v))).join(""), o = parseInt(a.slice(0, 2)), c = parseInt(a.slice(2, 4)), h = parseInt(a.slice(4, 6)), l = parseInt(a.slice(7, 9)), s = parseInt(a.slice(9, 11)) - 1, d = 2e3 + parseInt(a.slice(11, 13)), p = new Date(d, s, l, o, c, h), _ = {
A: "Attempt to close product exit door",
C: "Closing of exterior door",
H: "Error on opening of product exit door",
I: "New attempt to arrive at product exit position after an error on first attempt",
J: "Power on cooling unit",
K: "Power off cooling unit",
L: "Start of defrosting",
M: "End of defrosting",
O: "Opening of exterior door",
R: "Memory reset",
S: "Error on going to product exit position",
Y: "Power on machine",
Z: "Power off machine",
c: "Closing of inner door",
e: "New attempt to extract from channel due no product detection when elevator arrived to product exit position",
o: "Opening of inner door"
};
e.additional = {
type: "hhmmssWddMMAA",
date: p,
hex: r,
formatted: p.toLocaleString(),
ascii: n,
meaning: _[n] || "Unknown"
};
}
}
return this.dispatch("machine:activity", e.additional), e;
}
#T(t, e) {
const n = {
30: "Spanish",
31: "English",
32: "French"
};
return e.no_code = 42, e.name = "Language", e.description = `The language is ${n[t] || "unknown"}`, e.additional = {
hex: t,
language: n[t] || "unknown"
}, this.dispatch("check:language", e.additional), e;
}
#k(t, e) {
return e.no_code = 43, e.name = "Beeper", e.description = `The beeper is ${t === "30" ? "on" : "off"}`, e.additional = {
hex: t,
beeper: t === "30"
}, this.dispatch("check:beeper", e.additional), e;
}
#m(t, e) {
e.no_code = 44, e.name = "Isolation tray", e.description = "Isolation tray";
const n = this.hexToDec(t) - 139;
return e.additional = {
hex: t,
tray: n
}, this.dispatch("check:isolation-tray", e.additional), e;
}
#w(t, e) {
e.no_code = 45, e.name = "Engine voltage", e.description = "Engine voltage";
const n = (this.hexToDec(t) - 128) / 2 + 5;
return e.additional = {
hex: t,
voltage: n
}, this.dispatch("check:engine-voltage", e.additional), e;
}
#b(t, e) {
e.no_code = 46, e.name = "Push over", e.description = "Push over";
const n = t === "30";
return e.additional = {
hex: t,
push: n
}, this.dispatch("check:push-over", e.additional), e;
}
#x(t, e) {
e.no_code = 47, e.name = "Extractor after dispense", e.description = "Extractor after dispense";
const n = (this.hexToDec(t) - 128) / 10;
return e.additional = {
hex: t,
seconds: n
}, this.dispatch("check:extractor-after-dispense", e.additional), e;
}
#E(t, e) {
e.no_code = 48, e.name = "Standby after collect", e.description = "Time to standby after collect product";
const n = this.hexToDec(t) - 128;
return e.additional = {
hex: t,
seconds: n
}, this.dispatch("check:standby-after-collect", e.additional), e;
}
#D(t, e) {
e.no_code = 49, e.name = "Standby without collect", e.description = "Time to standby when product delivery is not collected";
const n = this.hexToDec(t) - 128;
return e.additional = {
hex: t,
minutes: n
}, this.dispatch("check:standby-without-collect", e.additional), e;
}
#O(t, e) {
e.no_code = 50, e.name = "Elevator speed", e.description = "Elevator speed";
const n = t === "30" ? "low" : "high";
return e.additional = {
hex: t,
speed: n
}, this.dispatch("check:elevator-speed", e.additional), e;
}
#M(t, e) {
e.no_code = 51, e.name = "Temperature expiration", e.description = "Temperature expiration";
const n = t === "31";
return e.additional = {
hex: t,
enabled: n
}, this.dispatch("check:expiration-by-temperature", e.additional), e;
}
#I(t, e) {
e.no_code = 52, e.name = "Temperature before expiration", e.description = "Temperature before expiration";
const n = (this.hexToDec(t) - 128) / 2;
return e.additional = {
hex: t,
temperature: n
}, this.dispatch("check:temperature-before-expiration", e.additional), e;
}
#P(t, e) {
e.no_code = 53, e.name = "Time before expiration", e.description = "Time before expiration";
const n = this.hexToDec(t) - 128;
return e.additional = {
hex: t,
minutes: n
}, this.dispatch("check:expiration-after", e.additional), e;
}
#Q(t, e) {
e.no_code = 54, e.name = "Temperature scale", e.description = "Temperature scale";
const n = t === "43" ? "Celsius" : "Fahrenheit";
return e.additional = {
hex: t,
scale: n
}, this.dispatch("check:temperature-scale", e.additional), e;
}
#S(t, e) {
return e.no_code = 54, e.name = "Machine ID", e.description = "Machine ID", e.additional = { hex: t[4], full_hex: t }, this.dispatch("check:machine-id", e.additional), e;
}
#g(t, e) {
return e.no_code = 7, e.name = "working temperature", e.description = `The working temperature is ${t}`, e.additional = {
hex: t,
temperature: {
traditional: (this.hexToDec(t) - this.hexToDec("80")) / 2,
ice_plus: (this.hexToDec(t) - this.hexToDec("80")) / 2 - 25.5
}
}, this.dispatch("temperature:working", e.additional), e;
}
#A(t, e) {
return e.no_code = 8, e.name = "current temperature", e.additional = {
sign: null,
tens: null,
units: null,
decimals: null,
type_degrees: null,
formatted: null,
decimal_point: t[7] === "2e" ? "." : null,
degrees: t[9] === "7f" ? "°" : null,
error: null
}, t[4] === "2b" ? e.additional.sign = t[4] = "+" : ["2e", "2d"].includes(t[4]) ? e.additional.sign = t[4] = "-" : t[4] === "20" && (e.additional.error = "Error in thermometer"), this.hexToDec(t[5]) >= 48 && this.hexToDec(t[5]) <= 57 ? e.additional.tens = this.hexToDec(t[5]) - 48 : t[5] === "2a" && (e.additional.error = "Error in thermometer"), this.hexToDec(t[6]) >= 48 && this.hexToDec(t[6]) <= 57 ? e.additional.units = this.hexToDec(t[6]) - 48 : t[6] === "2a" && (e.additional.error = "Error in thermometer"), this.hexToDec(t[8]) >= 48 && this.hexToDec(t[8]) <= 57 ? e.additional.decimals = this.hexToDec(t[8]) - 48 : t[8] === "2a" && (e.additional.error = "Error in thermometer"), t[10] === "43" ? e.additional.type_degrees = "C" : t[10] === "46" && (e.additional.type_degrees = "F"), e.additional.error === "Error in thermometer" ? (e.additional.formatted = "Error in thermometer", e.description = "The current temperature cannot be read because there is an error in the thermometer") : (e.additional.formatted = (e.additional.sign ?? "") + (e.additional.tens ?? "") + (e.additional.units ?? "") + (e.additional.decimal_point ?? "") + (e.additional.decimals ?? "") + (e.additional.degrees ?? "") + (e.additional.type_degrees ?? ""), e.description = `The current temperature is ${e.additional.formatted}`), this.dispatch("temperature:current", e.additional), e;
}
#B(t, e, n = 128) {
if (t[1] && (e.additional.machine || (e.additional.machine = { hex: null, dec: null }), e.additional.machine.hex = t[1], e.additional.machine.dec = this.hexToDec(t[1]) - n), !(t[1] && t[2]))
e = this.#d(e);
else
switch (t[2]) {
case "54":
e.request = "--automatic", e = this.#p(t[3], e);
break;
case "50":
e.request = "--automatic", e = this.#u(t[3], e);
break;
case "43":
switch (e.request = "check-data", t[3]) {
case "41":
e = this.#C(t, e);
break;
case "43":
e.request = "channel-status", e = this.#_(t, e);
break;
case "50":
e = this.#f(t, e);
break;
case "53":
e = this.#y(t, e);
break;
case "54":
e.request = "working-temperature", e = this.#g(t[4], e);
break;
case "72":
e = this.#v(t, e);
break;
case "74":
e.request = "current-temperature", e = this.#A(t, e);
break;
case "49":
e = this.#T(t[4], e);
break;
case "5a":
e = this.#k(t[4], e);
break;
case "42":
e = this.#m(t[4], e);
break;
case "47":
e = this.#w(t[4], e);
break;
case "4e":
e = this.#S(t, e);
break;
case "4f":
e = this.#b(t[4], e);
break;
case "45":
e = this.#x(t[4], e);
break;
case "46":
e = this.#E(t[4], e);
break;
case "48":
e = this.#D(t[4], e);
break;
case "76":
e = this.#O(t[4], e);
break;
case "63":
e = this.#M(t[4], e);
break;
case "65":
e = this.#I(t[4], e);
break;
case "66":
e = this.#P(t[4], e);
break;
case "67":
e = this.#Q(t[4], e);
break;
}
break;
}
return e;
}
#n() {
this.__internal__.dispense.dispensing && (this.__internal__.dispense.status = !0);
}
#e() {
this.__internal__.dispense.dispensing && (this.__internal__.dispense.status = !1);
}
#a() {
this.__internal__.dispense.dispensing && (this.__internal__.dispense.status = "elevator-locked");
}
#t({
type: t = null,
severity: e = "low"
} = {}) {
this.dispatch("jofemar:warning", { type: t, severity: e });
}
#i({
type: t = null,
severity: e = "high"
} = {}) {
this.dispatch("jofemar:error", { type: t, severity: e });
}
#W(t, e) {
if (e.request = "status", t[1] && !t[2]) {
switch (t[1]) {
case "30":
e.name = "Machine ready", e.description = "The machine is ready for instructions", e.no_code = 9, this.#n();
break;
case "31":
e.name = "Machine busy", e.description = "The machine is busy right now", e.no_code = 10;
break;
case "32":
e.name = "Invalid tray", e.description = "The tray requested is invalid", e.no_code = 11, this.#e(), this.#t({ type: "invalid-tray" });
break;
case "33":
e.name = "Invalid channel", e.description = "The channel requested is invalid", e.no_code = 12, this.#e(), this.#t({ type: "invalid-channel" });
break;
case "34":
e.name = "Empty channel", e.description = "The channel requested is empty", e.no_code = 13, this.#e(), this.#t({ type: "empty-channel" });
break;
case "35":
e.name = "Jam", e.description = "Jam in elevator engine", e.no_code = 14, this.#e(), this.#i({ type: "jam" });
break;
case "36":
e.name = "Malfunction", e.description = "Malfunction in the elevator belt or product detector", e.no_code = 15, this.#e(), this.#i({ type: "malfunction" });
break;
case "37":
e.name = "Photo transistors", e.description = "Failure in one of the photo transistors in the cabinet", e.no_code = 16, this.#e(), this.#i({ type: "photo-transistors" });
break;
case "38":
e.name = "Without channels", e.description = "No channels detected", e.no_code = 17, this.#e(), this.#i({ type: "without-channels" });
break;
case "39":
e.name = "Product detector fault", e.description = "Product detector fault", e.no_code = 18, this.#a(), this.#t({ type: "fault-product-detector" });
break;
case "41":
e.name = "Fault in 485 BUS", e.description = "Machine display is disconnected", e.no_code = 19, this.#n(), this.#t({ type: "display-disconnected" });
break;
case "42":
e.name = "Product under elevator", e.description = "Product alarm under elevator", e.no_code = 20, this.#e(), this.#t({ type: "product-under-elevator" });
break;
case "43":
e.name = "Error when elevator approaching to a position", e.description = "Error when elevator approaching to a position", e.no_code = 21, this.#n(), this.#t({ type: "error-approaching-position", severity: "high" });
break;
case "44":
e.name = "Fault in keyboard", e.description = "Fault in keyboard", e.no_code = 22, this.#e(), this.#i({ type: "fault-keyboard" });
break;
case "45":
e.name = "Eeprom writing error", e.description = "Eeprom writing error", e.no_code = 23, this.#e(), this.#i({ type: "eeprom-writing-error", severity: "critical" });
break;
case "46":
e.name = "Fault communicating with temperature control", e.description = "Fault communicating with temperature control", e.no_code = 24, this.#n(), this.#t({ type: "fault-temperature-control" });
break;
case "47":
e.name = "Thermometer disconnected", e.description = "The thermometer is disconnected", e.no_code = 25, this.#n(), this.#t({ type: "thermometer-disconnected" });
break;
case "48":
e.name = "Thermometer programming lost", e.description = "Thermometer programming lost", e.no_code = 26, this.#n(), this.#t({ type: "thermometer-programming-lost" });
break;
case "49":
e.name = "Thermometer faulty", e.description = "Thermometer faulty", e.no_code = 27, this.#n(), this.#t({ type: "thermometer-faulty" });
break;
case "4a":
e.name = "Channels power consumption detector faulty", e.description = "Channels power consumption detector faulty", e.no_code = 28, this.#e(), this.#i({ type: "channels-power-consumption-detector-faulty", severity: "critical" });
break;
case "4b":
e.name = "Elevator does not find channel or tray", e.description = "Elevator does not find channel or tray", e.no_code = 29, this.#e(), this.#t({ type: "elevator-not-find-channel-tray" });
break;
case "4c":
e.name = "Elevator does not find delivery product position", e.description = "Elevator does not find delivery product position", e.no_code = 30, this.#e(), this.#i({ type: "elevator-not-find-delivery-position" });
break;
case "4d":
e.name = "Interior of elevator blocked", e.description = "Interior of elevator blocked", e.no_code = 31, this.#a(), this.__internal__.dispense.elevator.need_reset || (this.__internal__.dispense.elevator.need_reset = !0), this.#i({ type: "interior-elevator-blocked", severity: "low" });
break;
case "4e":
e.name = "Error in tester of product detector", e.description = "Error in tester of product detector", e.no_code = 32, this.#e(), this.#i({ type: "error-tester-product-detector" });
break;
case "4f":
e.name = "Waiting for product to be removed", e.description = "Waiting for product to be removed", e.no_code = 33, this.#a();
break;
case "50":
e.name = "Product expired by temperature reasons", e.description = "Product expired by temperature reasons", e.no_code = 34, this.#n(), this.#t({ type: "product-expired-temperature" });
break;
case "51":
e.name = "Automatic door faulty", e.description = "Automatic door faulty", e.no_code = 35, this.#n(), this.#t({ type: "automatic-door-faulty" });
break;
case "59":
case "5a":
case "61":
case "62":
case "63":
switch (e.name = "Product is expired", e.description = "Product is expired", e.additional = { nsf_alarm: 1 }, t[1]) {
case "5a":
e.additional.nsf_alarm = 2;
break;
case "61":
e.additional.nsf_alarm = 3;
break;
case "62":
e.additional.nsf_alarm = 4;
break;
case "63":
e.additional.nsf_alarm = 5;
break;
}
e.no_code = 36, this.#n(), this.#t({ type: "product-expired" });
break;
case "64":
e.name = "Product detector didn't change during its verification test", e.description = "Product detector didn't change during its verification test", e.no_code = 37, this.#n(), this.#t({ type: "automatic-door-faulty" });
break;
}
this.dispatch("machine:status", e);
} else
e.name = "executed", e.description = "The last command was executed successfully", e.no_code = 8, !t[1] && this.__internal__.dispense.dispensing && this.#e();
return e;
}
serialMessage(t) {
t = this.fixHexArray(t);
const e = 128;
let n = {
code: t,
name: null,
description: null,
request: "unknown",
no_code: 0,
additional: {
machine: {
hex: null,
dec: null
}
}
};
switch (t[0]) {
case "02":
n = this.#B(t, n, e);
break;
case "06":
n = this.#W(t, n);
break;
case "15":
n.name = "Checksum error", n.description = "The calculated checksum does not match the received checksum", n.no_code = 38, this.#e();
break;
default:
n.name = "unknown", n.description = "The message received is unknown", n.no_code = 404;
break;
}
this.dispatch("serial:message", n);
}
productRemovedContinueDispensing() {
this.__internal__.dispense.elevator.locking_interval && (this.__internal__.dispense.elevator.locking_time = 0);
}
async dispense({ selection: t = 1, cart: e = !1 } = {}) {
const n = i.dispense({ selection: t, cart: e, machineChannel: this.listenOnChannel }), r = n[5], a = n[6];
this.__internal__.dispense.backup_dispense = {
selection: t,
cart: e,
channel: a,
tray: r
};
let o;
do
o = await this.internalDispense(n), this.#F(), o.error === "elevator-locked" ? await this.#s() : o.error === "no-response" && await u(1e3);
while (["elevator-locked", "no-response"].includes(o.error || ""));
return this.__internal__.dispense.backup_dispense = {}, o;
}
#F() {
this.__internal__.dispense.timeout && clearTimeout(this.__internal__.dispense.timeout), this.__internal__.dispense.interval && clearInterval(this.__internal__.dispense.interval), this.__internal__.dispense.timeout = 0, this.__internal__.dispense.interval = 0;
}
#q() {
this.__internal__.dispense.timeout && clearTimeout(this.__internal__.dispense.timeout), this.__internal__.dispense.interval && clearInterval(this.__internal__.dispense.interval), this.__internal__.dispense.timeout = setTimeout(() => {
this.__internal__.dispense.interval = setInterval(() => {
this.status().then(() => {
});
}, this.__internal__.dispense.interval_time);
}, this.__internal__.dispense.timeout_time);
}
internalClearSensing() {
super.internalClearSensing(), this.__internal__.dispense.timeout && clearTimeout(this.__internal__.dispense.timeout), this.__internal__.dispense.interval && clearInterval(this.__internal__.dispense.interval), this.__internal__.serial.queue.length > 0 && (this.__internal__.serial.queue = this.__internal__.serial.queue.filter((t) => t.action !== "status"));
}
async endDispense() {
const t = i.endCartDispense({ machineChannel: this.listenOnChannel });
return await this.internalDispense(t);
}
async collect() {
return await this.appendToQueue(i.collect({ machineChannel: this.listenOnChannel }), "collect");
}
async #r(t) {
return await this.appendToQueue(
i.reset({
machineChannel: this.listenOnChannel,
type: t
}),
"reset"
);
}
async resetSoldOutErrors() {
return await this.#r("soldOut");
}
async resetWaitingProductRemovedError() {
return await this.#r("waiting");
}
async resetMachineErrors() {
return this.__internal__.serial.queue.length === 0 ? (this.#o(), await this.#r("machine")) : new Promise((t) => {
const e = setInterval(async () => {
this.__internal__.serial.queue.length > 0 || (clearInterval(e), await this.#r("machine"), this.#o(), t(!0));
}, 100);
});
}
#o() {
const t = this.__device.type === "iceplus" ? y(40) : y(25), e = /* @__PURE__ */ new Date(), n = 1e3 * t + e.getTime(), r = new Date(n);
this.dispatch("reset:errors", {
description: "Resetting machine errors",
duration: t,
started_at: e,
finished_at: r
});
}
async resetAllErrors() {
return await this.resetWaitingProductRemovedError(), await u(200), await this.resetSoldOutErrors(), await u(400), await this.resetMachineErrors();
}
async status() {
return await this.appendToQueue(i.status({ machineChannel: this.listenOnChannel }), "status");
}
async #c(t) {
return await this.appendToQueue(
i.lights({
machineChannel: this.listenOnChannel,
type: t
}),
"lights"
);
}
async lightsOn() {
return await this.#c("on");
}
async lightsOff() {
return await this.#c("off");
}
async program(t, e) {
return await this.appendToQueue(
i.program({
machineChannel: this.listenOnChannel,
param1: t,
param2: e
}),
"program"
);
}
async programDisplayLanguage({
language: t = "spanish"
} = {}) {
return await this.appendToQueue(
i.programDisplayLanguage({
machineChannel: this.listenOnChannel,
language: t
}),
"program"
);
}
async programBeeper({ enable: t = !0 } = {}) {
return await this.appendToQueue(
i.programBeeper({
machineChannel: this.listenOnChannel,
enable: t
}),
"program"
);
}
async programDisableWorkingTemperature() {
if (this.__device.type === "iceplus") throw new Error("IcePlus does not support disable working temperature");
return await this.appendToQueue(
i.programDisableWorkingTemperature({
machineChannel: this.listenOnChannel
}),
"program"
);
}
async programDisableThermometer() {
return await this.appendToQueue(
i.programDisableThermometer({
machineChannel: this.listenOnChannel
}),
"program"
);
}
async programWorkingTemperature({ degrees: t = 0.5 } = {}) {
return await this.appendToQueue(
i.programWorkingTemperature({
machineChannel: this.listenOnChannel,
degrees: t,
machineType: this.__device.type
}),
"program"
);
}
async programIsolationTray({ tray: t = 0 } = {}) {
return await this.appendToQueue(
i.programIsolationTray({
machineChannel: this.listenOnChannel,
tray: t
}),
"program"
);
}
async programTimeToStandbyAfterCollect({ seconds: t = 15 } = {}) {
return await this.appendToQueue(
i.programTimeToStandbyAfterCollect({
machineChannel: this.listenOnChannel,
seconds: t
}),
"program"
);
}
async programTimeToStandbyWithoutCollect({ minutes: t = 1 } = {}) {
return await this.appendToQueue(
i.programTimeToStandbyWithoutCollect({
machineChannel: this.listenOnChannel,
minutes: t
}),
"program"
);
}
async programElevatorSpeed({
speed: t = "high"
} = {}) {
return await this.appendToQueue(
i.programElevatorSpeed({
machineChannel: this.listenOnChannel,
speed: t
}),
"program"
);
}
async programTemperatureExpiration({ enable: t = !1 } = {}) {
return await this.appendToQueue(
i.programTemperatureExpiration({
machineChannel: this.listenOnChannel,
enable: t
}),
"program"
);
}
async programEnableTemperatureExpiration() {
return await this.programTemperatureExpiration({ enable: !0 });
}
async programDisableTemperatureExpiration() {
return await this.programTemperatureExpiration({ enable: !1 });
}
async programMachineAddress({ address: t = 1 } = {}) {
return await this.appendToQueue(
i.programMachineAddress({
machineChannel: this.listenOnChannel,
address: t
}),
"program"
);
}
async programTemperatureBeforeExpiration({ degrees: t = 0.5 } = {}) {
return await this.appendToQueue(
i.programTemperatureBeforeExpiration({
machineChannel: this.listenOnChannel,
degrees: t
}),
"program"
);
}
async programTimeBeforeExpirationByTemperature({ minutes: t = 1 } = {}) {
return await this.appendToQueue(
i.programTimeBeforeExpirationByTemperature({
machineChannel: this.listenOnChannel,
minutes: t
}),
"program"
);
}
async programTemperatureScale({
scale: t = "celsius"
} = {}) {
return await this.appendToQueue(
i.programTemperatureScale({
machineChannel: this.listenOnChannel,
scale: t
}),
"program"
);
}
async programVoltageEngine({ selection: t = 1, voltage: e = 5 } = {}) {
return await this.appendToQueue(
i.programVoltageEngine({
machineChannel: this.listenOnChannel,
selection: t,
voltage: e
}),
"voltage-engine"
);
}
async programPushOverProducts({ selection: t = 1, enable: e = !0 } = {}) {
return await this.appendToQueue(
i.programPushOverProducts({
machineChannel: this.listenOnChannel,
selection: t,
enable: e
}),
"push-over-products"
);
}
async programChannelRunningAfterDispense({ selection: t = 1, seconds: e = 0 } = {}) {
return await this.appendToQueue(
i.programChannelRunningAfterDispense({
machineChannel: this.listenOnChannel,
selection: t,
seconds: e
}),
"channel-running-after-dispense"
);
}
async checkData(t, e = 255) {
return await this.appendToQueue(
i.checkData({
machineChannel: this.listenOnChannel,
type: t,
aux: e
}),
"check-data"
);
}
async getDisplayLanguage() {
return await this.appendToQueue(
i.getDisplayLanguage({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getBeeper() {
return await this.appendToQueue(i.getBeeper({ machineChannel: this.listenOnChannel }), "check-data");
}
async getWorkingTemperature() {
return await this.appendToQueue(
i.getWorkingTemperature({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getIsolationTray() {
return await this.appendToQueue(
i.getIsolationTray({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getProgramVersion() {
return await this.appendToQueue(
i.getProgramVersion({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getFaults() {
return await this.appendToQueue(i.getFaults({ machineChannel: this.listenOnChannel }), "check-data");
}
async getMachineId() {
return await this.appendToQueue(
i.getMachineId({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getCurrentTemperature() {
return await this.appendToQueue(
i.getCurrentTemperature({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTimeToStandbyAfterCollect() {
return await this.appendToQueue(
i.getTimeToStandbyAfterCollect({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTimeToStandbyWithoutCollect() {
return await this.appendToQueue(
i.getTimeToStandbyWithoutCollect({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getElevatorSpeed() {
return await this.appendToQueue(
i.getElevatorSpeed({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTemperatureExpiration() {
return await this.appendToQueue(
i.getTemperatureExpiration({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTemperatureBeforeExpiration() {
return await this.appendToQueue(
i.getTemperatureBeforeExpiration({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTimeBeforeExpirationByTemperature() {
return await this.appendToQueue(
i.getTimeBeforeExpirationByTemperature({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getTemperatureScale() {
return await this.appendToQueue(
i.getTemperatureScale({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getClockRegisters() {
return await this.appendToQueue(
i.getClockRegisters({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getMachineActivity() {
return await this.appendToQueue(
i.getMachineActivity({ machineChannel: this.listenOnChannel }),
"check-data"
);
}
async getVoltageEngine({ selection: t = 1 } = {}) {
return await this.appendToQueue(
i.getVoltageEngine({
machineChannel: this.listenOnChannel,
selection: t
}),
"check-data"
);
}
async getChannelPresence({ selection: t = 1 } = {}) {
return await this.appendToQueue(
i.getChannelPresence({
machineChannel: this.listenOnChannel,
selection: t
}),
"check-data"
);
}
async getPushOverProducts({ selection: t = 1 } = {}) {
return await this.appendToQueue(
i.getPushOverProducts({
machineChannel: this.listenOnChannel,
selection: t
}),
"check-data"
);
}
async getChannelRunningAfterDispense({ selection: t = 1 } = {}) {
return await this.appendToQueue(
i.getChannelRunningAfterDispense({
machineChannel: this.listenOnChannel,
selection: t
}),
"check-data"
);
}
async setDisplayStandbyMessage({ message: t = "" } = {}) {
return await this.appendToQueue(
i.setDisplayStandbyMessage({
machineChannel: this.listenOnChannel,
message: t
}),
"display"
);
}
async setDisplayMessageTemporarily({ message: t = "", seconds: e = 1 }) {
return this.appendToQueue(
i.setDisplayMessageTemporarily({
machineChannel: this.listenOnChannel,
message: t,
seconds: e
}),
"display"
);
}
async setDisplayMessageUnlimited({ message: t = "" }) {
return await this.appendToQueue(
i.setDisplayMessageUnlimited({
machineChannel: this.listenOnChannel,
message: t
}),
"display"
);
}
async programClock({ date: t = /* @__PURE__ */ new Date() } = {}) {
return await this.appendToQueue(
i.programClock({
machineChannel: this.listenOnChannel,
date: t
}),
"clock"
);
}
async eventsConfig({ event: t = null, enable: e = !0 } = {}) {
return await this.appendToQueue(
i.eventsConfig({
machineChannel: this.listenOnChannel,
event: t,
enable: e
}),
"events-config"
);
}
async eventEnable({ event: t = null } = {}) {
return await this.appendToQueue(
i.eventEnable({
machineChannel: this.listenOnChannel,
event: t
}),
"events-config"
);
}
async eventDisable({ event: t = null } = {}) {
return await this.appendToQueue(
i.eventEnable({
machineChannel: this.listenOnChannel,
event: t
}),
"events-config"
);
}
async sendCustomCode({ code: t = [] } = { code: [] }) {
return await this.appendToQueue(
i.sendCustomCode({
code: t
}),
"custom"
);
}
async assignChannels() {
const t = this.__device.channels.verification.start, e = this.__device.channels.verification.end;
if (t > e) throw new Error("Invalid range, start must be less than end");
this.__device.channels.verification.clear(), this.__device.channels.verification.running = !0;
for (let n = t; n <= e; n++)
this.__device.channels.verification.current = n, await this.getChannelPresence({ selection: n });
return new Promise((n) => {
const r = setInterval(() => {
this.__device.channels.verification.channels.length === e - t + 1 && (clearInterval(r), this.dispatch("channels", { channels: this.__device.channels.verification.channels }), this.__device.channels.verification.clear(), n(!0));
}, 500);
});
}
}
export {
w as Jofemar
};