@danidoble/webserial 4.3.4 → 4.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boardroid.cjs +1 -1
- package/dist/boardroid.js +506 -478
- package/dist/hopper.cjs +2 -2
- package/dist/hopper.js +117 -114
- package/dist/jofemar.cjs +1 -1
- package/dist/jofemar.js +732 -705
- package/dist/kernel-D8A562gb.cjs +1 -0
- package/dist/kernel-DAtdBEi3.js +815 -0
- package/dist/kernel.cjs +1 -1
- package/dist/kernel.js +2 -2
- package/dist/locker.cjs +1 -1
- package/dist/locker.js +81 -83
- package/dist/pinpad.cjs +21 -21
- package/dist/pinpad.js +3386 -3278
- package/dist/pinpax.cjs +4 -4
- package/dist/pinpax.js +112 -116
- package/dist/relay.cjs +1 -1
- package/dist/relay.js +2 -2
- package/dist/{webserial-core-ByrJ7tlu.js → webserial-core-BjytHor1.js} +179 -182
- package/dist/webserial-core-N14HUamr.cjs +4 -0
- package/dist/webserial.cjs +1 -1
- package/dist/webserial.js +3 -3
- package/package.json +3 -3
- package/dist/kernel-BblykfpT.js +0 -875
- package/dist/kernel-CzkmE_OW.cjs +0 -1
- package/dist/webserial-core-5B5nYtyR.cjs +0 -4
package/dist/hopper.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
`,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./webserial-core-N14HUamr.cjs");class h extends a.Z{__hoppers__={levels:[{id:1,currency:10,key:"Hopper 1",name:"10 Pesos",amount:0,capacity:1e3},{id:2,currency:5,key:"Hopper 2",name:"5 Pesos",amount:0,capacity:1e3},{id:3,currency:2,key:"Hopper 3",name:"2 Pesos",amount:0,capacity:1e3},{id:4,currency:1,key:"Hopper 4",name:"1 Peso",amount:0,capacity:1e3}],balance:0,current:null};constructor({filters:e=null,config_port:t={baudRate:115200,dataBits:8,stopBits:1,parity:"none",bufferSize:32768,flowControl:"none"},no_device:r=1}={filters:null,config_port:{baudRate:115200,dataBits:8,stopBits:1,parity:"none",bufferSize:32768,flowControl:"none"},no_device:1}){if(super({filters:e,config_port:t,no_device:r}),this.__internal__.device.type="hopper",a.h.getCustom(this.typeDevice,r))throw new Error(`Device ${this.typeDevice} ${r} already exists`);this.__internal__.time.response_connection=7e3,this.__internal__.time.response_general=7e3,this.__internal__.serial.delay_first_connection=500,this.__internal__.serial.response.replacer="",this.__internal__.serial.response.limiter=`\r
|
|
2
|
+
`,a.h.add(this),this.#a()}#a(){const e=["levels","hopper:updated","dispense-change","balance:updated","validator:status","change:1x1"];for(const t of e)this.serialRegisterAvailableListener(t)}get balance(){return this.__hoppers__.balance}get currentHopper(){return this.__hoppers__.current}get levels(){return this.__hoppers__.levels}setMaxCapacity({hopper:e=null,capacity:t=1e3}={hopper:null,capacity:1e3}){return this.#r(e),this.__hoppers__.levels[e-1].capacity=t,this}setHopperName({hopper:e=null,name:t=""}={hopper:null,name:""}){if(this.#r(e),typeof t!="string"||t.length===0)throw new TypeError("Name must be a non-empty string");return this.__hoppers__.levels[e-1].name=t,this}setHopperKey({hopper:e=null,key:t=""}={hopper:null,key:""}){if(this.#r(e),typeof t!="string"||t.length===0)throw new TypeError("Key must be a non-empty string");return this.__hoppers__.levels[e-1].key=t,this}setHopperCurrency({hopper:e=null,currency:t=1}={hopper:null,currency:1}){if(this.#r(e),typeof t!="number"||t<=0)throw new RangeError("Currency must be a positive number");return this.__hoppers__.levels[e-1].currency=t,this}#n(e){e.error=!0,e.ascii.includes("ffffff")?(e.name="SINTAX",e.description="Error de Sintaxis",e.no_code=400):e.ascii.includes("ffaaaa")?(e.name="LOWLEVEL",e.description="Bajo nivel de monedas en Hopper (99)",e.no_code=401):e.ascii.includes("ffbbbb")?(e.name="TIMEOUT_DISPENSE",e.description="Error de dispensado, timeout",e.no_code=402):(e.name="UNKNOWN_ERROR",e.description="Unknown error occurred",e.no_code=999),this.dispatch("serial:message",e)}#i(e){if(this.lastAction==="status")e.name="STATUS",e.description="Hoppers status",e.no_code=1,this.__hoppers__.levels[0].amount=this.#t(e.code[9],e.code[10]),this.__hoppers__.levels[1].amount=this.#t(e.code[7],e.code[8]),this.__hoppers__.levels[2].amount=this.#t(e.code[5],e.code[6]),this.__hoppers__.levels[3].amount=this.#t(e.code[3],e.code[4]),e.data=this.__hoppers__.levels,this.dispatch("levels",e.data);else if(this.lastAction==="readHopper"){e.name="READ_HOPPER",e.description=`Hopper ${this.__hoppers__.current} level`,e.no_code=2;const t=this.__hoppers__.current-1;this.__hoppers__.levels[t].amount=this.#t(e.code[9],e.code[10]),e.data=this.__hoppers__.levels,e.hopperId=this.__hoppers__.current,this.dispatch("hopper:updated",this.__hoppers__.levels[t])}else if(this.lastAction==="writeHopper"){e.name="WRITE_HOPPER",e.description="Hopper "+this.__hoppers__.current+" write",e.no_code=3,this.__hoppers__.levels[this.__hoppers__.current-1].amount=this.#t(e.code[9],e.code[10]),e.data=this.__hoppers__.levels,e.hopperId=this.__hoppers__.current;const t=this.__hoppers__.current-1;this.dispatch("hopper:updated",this.__hoppers__.levels[t])}else if(this.lastAction==="dispenseHopper"){e.name="DISPENSEHOPPER",e.description="Hopper "+this.__hoppers__.current+" dispense",e.no_code=4,this.__hoppers__.levels[this.__hoppers__.current-1].amount=this.#t(e.code[9],e.code[10]),e.data=this.__hoppers__.levels,e.hopperId=this.__hoppers__.current;const t=this.__hoppers__.current-1;this.dispatch("hopper:updated",this.__hoppers__.levels[t])}else this.lastAction==="dispenseChange"?(e.name="DISPENSE_CHANGE",e.description="Change dispensed",e.no_code=5,e.data=this.#t(e.code[9],e.code[10]),this.dispatch("dispense-change",{amount:e.data})):this.lastAction==="readBalance"?(e.name="READ_BALANCE",e.description="Read Balance",e.no_code=6,this.__hoppers__.balance=this.#t(e.code[9],e.code[10]),e.data=this.__hoppers__.balance,this.dispatch("balance:updated",{balance:e.data})):this.lastAction==="clearBalance"?(e.name="CLEAR_BALANCE",e.description="Clared hoppers balance",e.no_code=7,this.__hoppers__.balance=this.#t(e.code[9],e.code[10]),e.data=this.__hoppers__.balance,this.dispatch("balance:updated",{balance:e.data})):this.lastAction==="configValidator"?(e.code[2]===1?(e.name="ENABLE_VALIDATOR",e.description="Validator enabled",e.no_code=8,this.dispatch("validator:status",{enabled:!0})):(e.name="DISABLE_VALIDATOR",e.description="Validator disabled",e.no_code=9,this.dispatch("validator:status",{enabled:!1})),e.no_code=400,e.data=e.code[2]===1?"enabled":"disabled"):this.lastAction.includes("change1x1Hopper")&&(e.code[2]===1?(e.name="CHANGE_1X1_HOPPER_1",e.description="Change 1x1 Hopper 1",e.no_code=10):e.code[2]===2?(e.name="CHANGE_1X1_HOPPER_2",e.description="Change 1x1 Hopper 2",e.no_code=11):e.code[2]===3?(e.name="CHANGE_1X1_HOPPER_3",e.description="Change 1x1 Hopper 3",e.no_code=12):e.code[2]===4?(e.name="CHANGE_1X1_HOPPER_4",e.description="Change 1x1 Hopper 4",e.no_code=13):(e.name="CHANGE_1X1_HOPPER_UNKNOWN",e.description="Change 1x1 Hopper Unknown",e.no_code=14),this.dispatch("change:1x1",{hopperId:e.code[2]}));this.dispatch("serial:message",e)}serialMessage(e){const t=this.parseUint8ArrayToString(e),n={ascii:this.asciiToHex(t),code:e,name:"",description:"",request:this.lastAction,no_code:0,error:!1,data:null};if(e.length===3){this.#n(n);return}if(e.length!==13){const i=this.#s({array:e,chunkSize:13});for(const o of i){const p=this.parseUint8ArrayToString(new Uint8Array(o)),s=this.asciiToHex(p),c=this.stringToArrayHex(p);n.code=o,n.hex=c,n.ascii=s,o.length!==13?this.#n(n):this.#i(n)}return}this.#i(n)}#t(e,t){return(e<<8|t)<<16>>16}#r(e){if(typeof e!="number"||e<1||e>4)throw new RangeError("Hopper ID must be a number between 1 and 4");if(typeof e!="number"||!Number.isInteger(e))throw new TypeError("Hopper ID must be an integer")}#o(e){if(typeof e!="number"||e<-32768||e>32767)throw new RangeError("Quantity must be a number between -32768 and 32767");if(typeof e!="number"||!Number.isInteger(e))throw new TypeError("Quantity must be an integer")}#p(e){this.#o(e);const t=e&65535,r=t>>8&255,n=t&255;return[r,n]}#s({array:e,chunkSize:t=13}={}){if(!Array.isArray(e))throw new TypeError("Expected an array");if(typeof t!="number"||t<=0)throw new RangeError("Chunk size must be a positive number");const r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}#e(e){e.length<11&&(e=[...e,...Array(11-e.length).fill(0)]);const r=e.slice(1,11).reduce((n,i)=>{if(typeof i!="number")throw new TypeError("Array must contain only numbers");return n+i},0)&255;return e[11]=r,e[12]=15,e}serialSetConnectionConstant(){return[10,0,0,0,0,0,0,0,0,0,0,0,15]}async sendConnect(){const e=this.#e([10]);return await this.appendToQueue(e,"connect")}async requestStatus(){const e=this.#e([10,10,11,12]);return await this.appendToQueue(e,"status")}async readBalance(){const e=this.#e([10,192,1]);return await this.appendToQueue(e,"readBalance")}async clearBalance(){const e=this.#e([10,192,2]);return await this.appendToQueue(e,"clearBalance")}async forceInvalid(){const e="0A000F00".match(/.{1,2}/g);return await this.appendToQueue(e,"ForceInvalid")}async readHopper({hopper:e=null}={hopper:null}){this.#r(e),this.__hoppers__.current=e;const t=this.#e([10,e,e]);return await this.appendToQueue(t,"readHopper")}async writeHopper({hopper:e=null,quantity:t=0}={hopper:null,quantity:0}){this.#r(e),this.#o(t),this.__hoppers__.current=e;const[r,n]=this.#p(t),i=this.#e([10,240,e,0,0,0,0,0,0,r,n]);return await this.appendToQueue(i,"writeHopper")}async dispenseHopper({hopper:e=null}={hopper:null}){this.#r(e),this.__hoppers__.current=e;const t=this.#e([10,2,e]);return await this.appendToQueue(t,"dispenseHopper")}async dispenseChange({change:e=0}={change:0}){if(typeof e!="number"||e<0||e>32767)throw new RangeError("Change must be a number between 0 and 32767");if(typeof e!="number"||!Number.isInteger(e))throw new TypeError("Change must be an integer");const t=e&255,r=e>>8&255,n=this.#e([10,204,170,0,0,0,0,0,0,r,t]);return await this.appendToQueue(n,"dispenseChange")}async configValidator({enable:e=!1}={enable:!1}){if(typeof e!="boolean")throw new TypeError("Enable must be a boolean");const t=this.#e([10,176,e?1:0]);return await this.appendToQueue(t,"configValidator")}async disableValidator(){return await this.configValidator({enable:!1})}async enableValidator(){return await this.configValidator({enable:!0})}async change1x1({hopper:e=null}={hopper:null}){this.#r(e),this.__hoppers__.current=e;const t=this.#e([10,224,e]);return await this.appendToQueue(t,"change1x1Hopper-"+e)}async sendCustomCode({code:e=[]}={code:[]}){if(!Array.isArray(e)||!e.every(r=>typeof r=="number"&&r>=0&&r<=255))throw new TypeError("Code must be an array of numbers between 0 and 255");const t=this.#e(e);await this.appendToQueue(t,"custom")}}exports.Hopper=h;
|
package/dist/hopper.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { Z as h, h as p } from "./webserial-core-BjytHor1.js";
|
|
2
|
+
class d extends h {
|
|
3
|
+
__hoppers__ = {
|
|
4
|
+
levels: [
|
|
5
|
+
{ id: 1, currency: 10, key: "Hopper 1", name: "10 Pesos", amount: 0, capacity: 1e3 },
|
|
6
|
+
{ id: 2, currency: 5, key: "Hopper 2", name: "5 Pesos", amount: 0, capacity: 1e3 },
|
|
7
|
+
{ id: 3, currency: 2, key: "Hopper 3", name: "2 Pesos", amount: 0, capacity: 1e3 },
|
|
8
|
+
{ id: 4, currency: 1, key: "Hopper 4", name: "1 Peso", amount: 0, capacity: 1e3 }
|
|
9
|
+
],
|
|
10
|
+
balance: 0,
|
|
11
|
+
current: null
|
|
12
|
+
};
|
|
12
13
|
constructor({
|
|
13
14
|
filters: e = null,
|
|
14
15
|
config_port: t = {
|
|
@@ -19,7 +20,7 @@ class O extends I {
|
|
|
19
20
|
bufferSize: 32768,
|
|
20
21
|
flowControl: "none"
|
|
21
22
|
},
|
|
22
|
-
no_device:
|
|
23
|
+
no_device: r = 1
|
|
23
24
|
} = {
|
|
24
25
|
filters: null,
|
|
25
26
|
config_port: {
|
|
@@ -32,22 +33,15 @@ class O extends I {
|
|
|
32
33
|
},
|
|
33
34
|
no_device: 1
|
|
34
35
|
}) {
|
|
35
|
-
super({ filters: e, config_port: t, no_device:
|
|
36
|
-
|
|
37
|
-
x(this, "__hoppers__", {
|
|
38
|
-
levels: [
|
|
39
|
-
{ id: 1, currency: 10, key: "Hopper 1", name: "10 Pesos", amount: 0, capacity: 1e3 },
|
|
40
|
-
{ id: 2, currency: 5, key: "Hopper 2", name: "5 Pesos", amount: 0, capacity: 1e3 },
|
|
41
|
-
{ id: 3, currency: 2, key: "Hopper 3", name: "2 Pesos", amount: 0, capacity: 1e3 },
|
|
42
|
-
{ id: 4, currency: 1, key: "Hopper 4", name: "1 Peso", amount: 0, capacity: 1e3 }
|
|
43
|
-
],
|
|
44
|
-
balance: 0,
|
|
45
|
-
current: null
|
|
46
|
-
});
|
|
47
|
-
if (this.__internal__.device.type = "hopper", E.getCustom(this.typeDevice, i))
|
|
48
|
-
throw new Error(`Device ${this.typeDevice} ${i} already exists`);
|
|
36
|
+
if (super({ filters: e, config_port: t, no_device: r }), this.__internal__.device.type = "hopper", p.getCustom(this.typeDevice, r))
|
|
37
|
+
throw new Error(`Device ${this.typeDevice} ${r} already exists`);
|
|
49
38
|
this.__internal__.time.response_connection = 7e3, this.__internal__.time.response_general = 7e3, this.__internal__.serial.delay_first_connection = 500, this.__internal__.serial.response.replacer = "", this.__internal__.serial.response.limiter = `\r
|
|
50
|
-
`,
|
|
39
|
+
`, p.add(this), this.#a();
|
|
40
|
+
}
|
|
41
|
+
#a() {
|
|
42
|
+
const e = ["levels", "hopper:updated", "dispense-change", "balance:updated", "validator:status", "change:1x1"];
|
|
43
|
+
for (const t of e)
|
|
44
|
+
this.serialRegisterAvailableListener(t);
|
|
51
45
|
}
|
|
52
46
|
get balance() {
|
|
53
47
|
return this.__hoppers__.balance;
|
|
@@ -59,25 +53,52 @@ class O extends I {
|
|
|
59
53
|
return this.__hoppers__.levels;
|
|
60
54
|
}
|
|
61
55
|
setMaxCapacity({ hopper: e = null, capacity: t = 1e3 } = { hopper: null, capacity: 1e3 }) {
|
|
62
|
-
return
|
|
56
|
+
return this.#r(e), this.__hoppers__.levels[e - 1].capacity = t, this;
|
|
63
57
|
}
|
|
64
58
|
setHopperName({ hopper: e = null, name: t = "" } = { hopper: null, name: "" }) {
|
|
65
|
-
if (
|
|
59
|
+
if (this.#r(e), typeof t != "string" || t.length === 0)
|
|
66
60
|
throw new TypeError("Name must be a non-empty string");
|
|
67
61
|
return this.__hoppers__.levels[e - 1].name = t, this;
|
|
68
62
|
}
|
|
69
63
|
setHopperKey({ hopper: e = null, key: t = "" } = { hopper: null, key: "" }) {
|
|
70
|
-
if (
|
|
64
|
+
if (this.#r(e), typeof t != "string" || t.length === 0)
|
|
71
65
|
throw new TypeError("Key must be a non-empty string");
|
|
72
66
|
return this.__hoppers__.levels[e - 1].key = t, this;
|
|
73
67
|
}
|
|
74
68
|
setHopperCurrency({ hopper: e = null, currency: t = 1 } = { hopper: null, currency: 1 }) {
|
|
75
|
-
if (
|
|
69
|
+
if (this.#r(e), typeof t != "number" || t <= 0)
|
|
76
70
|
throw new RangeError("Currency must be a positive number");
|
|
77
71
|
return this.__hoppers__.levels[e - 1].currency = t, this;
|
|
78
72
|
}
|
|
73
|
+
#n(e) {
|
|
74
|
+
e.error = !0, e.ascii.includes("ffffff") ? (e.name = "SINTAX", e.description = "Error de Sintaxis", e.no_code = 400) : e.ascii.includes("ffaaaa") ? (e.name = "LOWLEVEL", e.description = "Bajo nivel de monedas en Hopper (99)", e.no_code = 401) : e.ascii.includes("ffbbbb") ? (e.name = "TIMEOUT_DISPENSE", e.description = "Error de dispensado, timeout", e.no_code = 402) : (e.name = "UNKNOWN_ERROR", e.description = "Unknown error occurred", e.no_code = 999), this.dispatch("serial:message", e);
|
|
75
|
+
}
|
|
76
|
+
#i(e) {
|
|
77
|
+
if (this.lastAction === "status")
|
|
78
|
+
e.name = "STATUS", e.description = "Hoppers status", e.no_code = 1, this.__hoppers__.levels[0].amount = this.#t(e.code[9], e.code[10]), this.__hoppers__.levels[1].amount = this.#t(e.code[7], e.code[8]), this.__hoppers__.levels[2].amount = this.#t(e.code[5], e.code[6]), this.__hoppers__.levels[3].amount = this.#t(e.code[3], e.code[4]), e.data = this.__hoppers__.levels, this.dispatch("levels", e.data);
|
|
79
|
+
else if (this.lastAction === "readHopper") {
|
|
80
|
+
e.name = "READ_HOPPER", e.description = `Hopper ${this.__hoppers__.current} level`, e.no_code = 2;
|
|
81
|
+
const t = this.__hoppers__.current - 1;
|
|
82
|
+
this.__hoppers__.levels[t].amount = this.#t(e.code[9], e.code[10]), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current, this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
83
|
+
} else if (this.lastAction === "writeHopper") {
|
|
84
|
+
e.name = "WRITE_HOPPER", e.description = "Hopper " + this.__hoppers__.current + " write", e.no_code = 3, this.__hoppers__.levels[this.__hoppers__.current - 1].amount = this.#t(
|
|
85
|
+
e.code[9],
|
|
86
|
+
e.code[10]
|
|
87
|
+
), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current;
|
|
88
|
+
const t = this.__hoppers__.current - 1;
|
|
89
|
+
this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
90
|
+
} else if (this.lastAction === "dispenseHopper") {
|
|
91
|
+
e.name = "DISPENSEHOPPER", e.description = "Hopper " + this.__hoppers__.current + " dispense", e.no_code = 4, this.__hoppers__.levels[this.__hoppers__.current - 1].amount = this.#t(
|
|
92
|
+
e.code[9],
|
|
93
|
+
e.code[10]
|
|
94
|
+
), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current;
|
|
95
|
+
const t = this.__hoppers__.current - 1;
|
|
96
|
+
this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
97
|
+
} else this.lastAction === "dispenseChange" ? (e.name = "DISPENSE_CHANGE", e.description = "Change dispensed", e.no_code = 5, e.data = this.#t(e.code[9], e.code[10]), this.dispatch("dispense-change", { amount: e.data })) : this.lastAction === "readBalance" ? (e.name = "READ_BALANCE", e.description = "Read Balance", e.no_code = 6, this.__hoppers__.balance = this.#t(e.code[9], e.code[10]), e.data = this.__hoppers__.balance, this.dispatch("balance:updated", { balance: e.data })) : this.lastAction === "clearBalance" ? (e.name = "CLEAR_BALANCE", e.description = "Clared hoppers balance", e.no_code = 7, this.__hoppers__.balance = this.#t(e.code[9], e.code[10]), e.data = this.__hoppers__.balance, this.dispatch("balance:updated", { balance: e.data })) : this.lastAction === "configValidator" ? (e.code[2] === 1 ? (e.name = "ENABLE_VALIDATOR", e.description = "Validator enabled", e.no_code = 8, this.dispatch("validator:status", { enabled: !0 })) : (e.name = "DISABLE_VALIDATOR", e.description = "Validator disabled", e.no_code = 9, this.dispatch("validator:status", { enabled: !1 })), e.no_code = 400, e.data = e.code[2] === 1 ? "enabled" : "disabled") : this.lastAction.includes("change1x1Hopper") && (e.code[2] === 1 ? (e.name = "CHANGE_1X1_HOPPER_1", e.description = "Change 1x1 Hopper 1", e.no_code = 10) : e.code[2] === 2 ? (e.name = "CHANGE_1X1_HOPPER_2", e.description = "Change 1x1 Hopper 2", e.no_code = 11) : e.code[2] === 3 ? (e.name = "CHANGE_1X1_HOPPER_3", e.description = "Change 1x1 Hopper 3", e.no_code = 12) : e.code[2] === 4 ? (e.name = "CHANGE_1X1_HOPPER_4", e.description = "Change 1x1 Hopper 4", e.no_code = 13) : (e.name = "CHANGE_1X1_HOPPER_UNKNOWN", e.description = "Change 1x1 Hopper Unknown", e.no_code = 14), this.dispatch("change:1x1", { hopperId: e.code[2] }));
|
|
98
|
+
this.dispatch("serial:message", e);
|
|
99
|
+
}
|
|
79
100
|
serialMessage(e) {
|
|
80
|
-
const t = this.parseUint8ArrayToString(e),
|
|
101
|
+
const t = this.parseUint8ArrayToString(e), n = {
|
|
81
102
|
//hex,
|
|
82
103
|
ascii: this.asciiToHex(t),
|
|
83
104
|
code: e,
|
|
@@ -89,36 +110,75 @@ class O extends I {
|
|
|
89
110
|
data: null
|
|
90
111
|
};
|
|
91
112
|
if (e.length === 3) {
|
|
92
|
-
n(
|
|
113
|
+
this.#n(n);
|
|
93
114
|
return;
|
|
94
115
|
}
|
|
95
116
|
if (e.length !== 13) {
|
|
96
|
-
const
|
|
97
|
-
for (const
|
|
98
|
-
const
|
|
99
|
-
|
|
117
|
+
const i = this.#s({ array: e, chunkSize: 13 });
|
|
118
|
+
for (const o of i) {
|
|
119
|
+
const a = this.parseUint8ArrayToString(new Uint8Array(o)), s = this.asciiToHex(a), c = this.stringToArrayHex(a);
|
|
120
|
+
n.code = o, n.hex = c, n.ascii = s, o.length !== 13 ? this.#n(n) : this.#i(n);
|
|
100
121
|
}
|
|
101
122
|
return;
|
|
102
123
|
}
|
|
103
|
-
|
|
124
|
+
this.#i(n);
|
|
125
|
+
}
|
|
126
|
+
#t(e, t) {
|
|
127
|
+
return (e << 8 | t) << 16 >> 16;
|
|
128
|
+
}
|
|
129
|
+
#r(e) {
|
|
130
|
+
if (typeof e != "number" || e < 1 || e > 4)
|
|
131
|
+
throw new RangeError("Hopper ID must be a number between 1 and 4");
|
|
132
|
+
if (typeof e != "number" || !Number.isInteger(e))
|
|
133
|
+
throw new TypeError("Hopper ID must be an integer");
|
|
134
|
+
}
|
|
135
|
+
#o(e) {
|
|
136
|
+
if (typeof e != "number" || e < -32768 || e > 32767)
|
|
137
|
+
throw new RangeError("Quantity must be a number between -32768 and 32767");
|
|
138
|
+
if (typeof e != "number" || !Number.isInteger(e))
|
|
139
|
+
throw new TypeError("Quantity must be an integer");
|
|
140
|
+
}
|
|
141
|
+
#p(e) {
|
|
142
|
+
this.#o(e);
|
|
143
|
+
const t = e & 65535, r = t >> 8 & 255, n = t & 255;
|
|
144
|
+
return [r, n];
|
|
145
|
+
}
|
|
146
|
+
#s({ array: e, chunkSize: t = 13 } = {}) {
|
|
147
|
+
if (!Array.isArray(e))
|
|
148
|
+
throw new TypeError("Expected an array");
|
|
149
|
+
if (typeof t != "number" || t <= 0)
|
|
150
|
+
throw new RangeError("Chunk size must be a positive number");
|
|
151
|
+
const r = [];
|
|
152
|
+
for (let n = 0; n < e.length; n += t)
|
|
153
|
+
r.push(e.slice(n, n + t));
|
|
154
|
+
return r;
|
|
155
|
+
}
|
|
156
|
+
#e(e) {
|
|
157
|
+
e.length < 11 && (e = [...e, ...Array(11 - e.length).fill(0)]);
|
|
158
|
+
const r = e.slice(1, 11).reduce((n, i) => {
|
|
159
|
+
if (typeof i != "number")
|
|
160
|
+
throw new TypeError("Array must contain only numbers");
|
|
161
|
+
return n + i;
|
|
162
|
+
}, 0) & 255;
|
|
163
|
+
return e[11] = r, e[12] = 15, e;
|
|
104
164
|
}
|
|
105
165
|
serialSetConnectionConstant() {
|
|
106
166
|
return [10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15];
|
|
107
167
|
}
|
|
108
168
|
async sendConnect() {
|
|
109
|
-
const e =
|
|
169
|
+
const e = this.#e([10]);
|
|
110
170
|
return await this.appendToQueue(e, "connect");
|
|
111
171
|
}
|
|
112
172
|
async requestStatus() {
|
|
113
|
-
const e =
|
|
173
|
+
const e = this.#e([10, 10, 11, 12]);
|
|
114
174
|
return await this.appendToQueue(e, "status");
|
|
115
175
|
}
|
|
116
176
|
async readBalance() {
|
|
117
|
-
const e =
|
|
177
|
+
const e = this.#e([10, 192, 1]);
|
|
118
178
|
return await this.appendToQueue(e, "readBalance");
|
|
119
179
|
}
|
|
120
180
|
async clearBalance() {
|
|
121
|
-
const e =
|
|
181
|
+
const e = this.#e([10, 192, 2]);
|
|
122
182
|
return await this.appendToQueue(e, "clearBalance");
|
|
123
183
|
}
|
|
124
184
|
async forceInvalid() {
|
|
@@ -126,18 +186,18 @@ class O extends I {
|
|
|
126
186
|
return await this.appendToQueue(e, "ForceInvalid");
|
|
127
187
|
}
|
|
128
188
|
async readHopper({ hopper: e = null } = { hopper: null }) {
|
|
129
|
-
|
|
130
|
-
const t =
|
|
189
|
+
this.#r(e), this.__hoppers__.current = e;
|
|
190
|
+
const t = this.#e([10, e, e]);
|
|
131
191
|
return await this.appendToQueue(t, "readHopper");
|
|
132
192
|
}
|
|
133
193
|
async writeHopper({ hopper: e = null, quantity: t = 0 } = { hopper: null, quantity: 0 }) {
|
|
134
|
-
|
|
135
|
-
const [
|
|
136
|
-
return await this.appendToQueue(
|
|
194
|
+
this.#r(e), this.#o(t), this.__hoppers__.current = e;
|
|
195
|
+
const [r, n] = this.#p(t), i = this.#e([10, 240, e, 0, 0, 0, 0, 0, 0, r, n]);
|
|
196
|
+
return await this.appendToQueue(i, "writeHopper");
|
|
137
197
|
}
|
|
138
198
|
async dispenseHopper({ hopper: e = null } = { hopper: null }) {
|
|
139
|
-
|
|
140
|
-
const t =
|
|
199
|
+
this.#r(e), this.__hoppers__.current = e;
|
|
200
|
+
const t = this.#e([10, 2, e]);
|
|
141
201
|
return await this.appendToQueue(t, "dispenseHopper");
|
|
142
202
|
}
|
|
143
203
|
async dispenseChange({ change: e = 0 } = { change: 0 }) {
|
|
@@ -145,13 +205,13 @@ class O extends I {
|
|
|
145
205
|
throw new RangeError("Change must be a number between 0 and 32767");
|
|
146
206
|
if (typeof e != "number" || !Number.isInteger(e))
|
|
147
207
|
throw new TypeError("Change must be an integer");
|
|
148
|
-
const t = e & 255,
|
|
149
|
-
return await this.appendToQueue(
|
|
208
|
+
const t = e & 255, r = e >> 8 & 255, n = this.#e([10, 204, 170, 0, 0, 0, 0, 0, 0, r, t]);
|
|
209
|
+
return await this.appendToQueue(n, "dispenseChange");
|
|
150
210
|
}
|
|
151
211
|
async configValidator({ enable: e = !1 } = { enable: !1 }) {
|
|
152
212
|
if (typeof e != "boolean")
|
|
153
213
|
throw new TypeError("Enable must be a boolean");
|
|
154
|
-
const t =
|
|
214
|
+
const t = this.#e([10, 176, e ? 1 : 0]);
|
|
155
215
|
return await this.appendToQueue(t, "configValidator");
|
|
156
216
|
}
|
|
157
217
|
async disableValidator() {
|
|
@@ -161,74 +221,17 @@ class O extends I {
|
|
|
161
221
|
return await this.configValidator({ enable: !0 });
|
|
162
222
|
}
|
|
163
223
|
async change1x1({ hopper: e = null } = { hopper: null }) {
|
|
164
|
-
|
|
165
|
-
const t =
|
|
224
|
+
this.#r(e), this.__hoppers__.current = e;
|
|
225
|
+
const t = this.#e([10, 224, e]);
|
|
166
226
|
return await this.appendToQueue(t, "change1x1Hopper-" + e);
|
|
167
227
|
}
|
|
168
228
|
async sendCustomCode({ code: e = [] } = { code: [] }) {
|
|
169
|
-
if (!Array.isArray(e) || !e.every((
|
|
229
|
+
if (!Array.isArray(e) || !e.every((r) => typeof r == "number" && r >= 0 && r <= 255))
|
|
170
230
|
throw new TypeError("Code must be an array of numbers between 0 and 255");
|
|
171
|
-
const t =
|
|
231
|
+
const t = this.#e(e);
|
|
172
232
|
await this.appendToQueue(t, "custom");
|
|
173
233
|
}
|
|
174
234
|
}
|
|
175
|
-
r = new WeakSet(), H = function() {
|
|
176
|
-
const e = ["levels", "hopper:updated", "dispense-change", "balance:updated", "validator:status", "change:1x1"];
|
|
177
|
-
for (const t of e)
|
|
178
|
-
this.serialRegisterAvailableListener(t);
|
|
179
|
-
}, d = function(e) {
|
|
180
|
-
e.error = !0, e.ascii.includes("ffffff") ? (e.name = "SINTAX", e.description = "Error de Sintaxis", e.no_code = 400) : e.ascii.includes("ffaaaa") ? (e.name = "LOWLEVEL", e.description = "Bajo nivel de monedas en Hopper (99)", e.no_code = 401) : e.ascii.includes("ffbbbb") ? (e.name = "TIMEOUT_DISPENSE", e.description = "Error de dispensado, timeout", e.no_code = 402) : (e.name = "UNKNOWN_ERROR", e.description = "Unknown error occurred", e.no_code = 999), this.dispatch("serial:message", e);
|
|
181
|
-
}, u = function(e) {
|
|
182
|
-
if (this.lastAction === "status")
|
|
183
|
-
e.name = "STATUS", e.description = "Hoppers status", e.no_code = 1, this.__hoppers__.levels[0].amount = n(this, r, c).call(this, e.code[9], e.code[10]), this.__hoppers__.levels[1].amount = n(this, r, c).call(this, e.code[7], e.code[8]), this.__hoppers__.levels[2].amount = n(this, r, c).call(this, e.code[5], e.code[6]), this.__hoppers__.levels[3].amount = n(this, r, c).call(this, e.code[3], e.code[4]), e.data = this.__hoppers__.levels, this.dispatch("levels", e.data);
|
|
184
|
-
else if (this.lastAction === "readHopper") {
|
|
185
|
-
e.name = "READ_HOPPER", e.description = `Hopper ${this.__hoppers__.current} level`, e.no_code = 2;
|
|
186
|
-
const t = this.__hoppers__.current - 1;
|
|
187
|
-
this.__hoppers__.levels[t].amount = n(this, r, c).call(this, e.code[9], e.code[10]), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current, this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
188
|
-
} else if (this.lastAction === "writeHopper") {
|
|
189
|
-
e.name = "WRITE_HOPPER", e.description = "Hopper " + this.__hoppers__.current + " write", e.no_code = 3, this.__hoppers__.levels[this.__hoppers__.current - 1].amount = n(this, r, c).call(this, e.code[9], e.code[10]), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current;
|
|
190
|
-
const t = this.__hoppers__.current - 1;
|
|
191
|
-
this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
192
|
-
} else if (this.lastAction === "dispenseHopper") {
|
|
193
|
-
e.name = "DISPENSEHOPPER", e.description = "Hopper " + this.__hoppers__.current + " dispense", e.no_code = 4, this.__hoppers__.levels[this.__hoppers__.current - 1].amount = n(this, r, c).call(this, e.code[9], e.code[10]), e.data = this.__hoppers__.levels, e.hopperId = this.__hoppers__.current;
|
|
194
|
-
const t = this.__hoppers__.current - 1;
|
|
195
|
-
this.dispatch("hopper:updated", this.__hoppers__.levels[t]);
|
|
196
|
-
} else this.lastAction === "dispenseChange" ? (e.name = "DISPENSE_CHANGE", e.description = "Change dispensed", e.no_code = 5, e.data = n(this, r, c).call(this, e.code[9], e.code[10]), this.dispatch("dispense-change", { amount: e.data })) : this.lastAction === "readBalance" ? (e.name = "READ_BALANCE", e.description = "Read Balance", e.no_code = 6, this.__hoppers__.balance = n(this, r, c).call(this, e.code[9], e.code[10]), e.data = this.__hoppers__.balance, this.dispatch("balance:updated", { balance: e.data })) : this.lastAction === "clearBalance" ? (e.name = "CLEAR_BALANCE", e.description = "Clared hoppers balance", e.no_code = 7, this.__hoppers__.balance = n(this, r, c).call(this, e.code[9], e.code[10]), e.data = this.__hoppers__.balance, this.dispatch("balance:updated", { balance: e.data })) : this.lastAction === "configValidator" ? (e.code[2] === 1 ? (e.name = "ENABLE_VALIDATOR", e.description = "Validator enabled", e.no_code = 8, this.dispatch("validator:status", { enabled: !0 })) : (e.name = "DISABLE_VALIDATOR", e.description = "Validator disabled", e.no_code = 9, this.dispatch("validator:status", { enabled: !1 })), e.no_code = 400, e.data = e.code[2] === 1 ? "enabled" : "disabled") : this.lastAction.includes("change1x1Hopper") && (e.code[2] === 1 ? (e.name = "CHANGE_1X1_HOPPER_1", e.description = "Change 1x1 Hopper 1", e.no_code = 10) : e.code[2] === 2 ? (e.name = "CHANGE_1X1_HOPPER_2", e.description = "Change 1x1 Hopper 2", e.no_code = 11) : e.code[2] === 3 ? (e.name = "CHANGE_1X1_HOPPER_3", e.description = "Change 1x1 Hopper 3", e.no_code = 12) : e.code[2] === 4 ? (e.name = "CHANGE_1X1_HOPPER_4", e.description = "Change 1x1 Hopper 4", e.no_code = 13) : (e.name = "CHANGE_1X1_HOPPER_UNKNOWN", e.description = "Change 1x1 Hopper Unknown", e.no_code = 14), this.dispatch("change:1x1", { hopperId: e.code[2] }));
|
|
197
|
-
this.dispatch("serial:message", e);
|
|
198
|
-
}, c = function(e, t) {
|
|
199
|
-
return (e << 8 | t) << 16 >> 16;
|
|
200
|
-
}, h = function(e) {
|
|
201
|
-
if (typeof e != "number" || e < 1 || e > 4)
|
|
202
|
-
throw new RangeError("Hopper ID must be a number between 1 and 4");
|
|
203
|
-
if (typeof e != "number" || !Number.isInteger(e))
|
|
204
|
-
throw new TypeError("Hopper ID must be an integer");
|
|
205
|
-
}, f = function(e) {
|
|
206
|
-
if (typeof e != "number" || e < -32768 || e > 32767)
|
|
207
|
-
throw new RangeError("Quantity must be a number between -32768 and 32767");
|
|
208
|
-
if (typeof e != "number" || !Number.isInteger(e))
|
|
209
|
-
throw new TypeError("Quantity must be an integer");
|
|
210
|
-
}, A = function(e) {
|
|
211
|
-
n(this, r, f).call(this, e);
|
|
212
|
-
const t = e & 65535, i = t >> 8 & 255, o = t & 255;
|
|
213
|
-
return [i, o];
|
|
214
|
-
}, v = function({ array: e, chunkSize: t = 13 } = {}) {
|
|
215
|
-
if (!Array.isArray(e))
|
|
216
|
-
throw new TypeError("Expected an array");
|
|
217
|
-
if (typeof t != "number" || t <= 0)
|
|
218
|
-
throw new RangeError("Chunk size must be a positive number");
|
|
219
|
-
const i = [];
|
|
220
|
-
for (let o = 0; o < e.length; o += t)
|
|
221
|
-
i.push(e.slice(o, o + t));
|
|
222
|
-
return i;
|
|
223
|
-
}, s = function(e) {
|
|
224
|
-
e.length < 11 && (e = [...e, ...Array(11 - e.length).fill(0)]);
|
|
225
|
-
const i = e.slice(1, 11).reduce((o, _) => {
|
|
226
|
-
if (typeof _ != "number")
|
|
227
|
-
throw new TypeError("Array must contain only numbers");
|
|
228
|
-
return o + _;
|
|
229
|
-
}, 0) & 255;
|
|
230
|
-
return e[11] = i, e[12] = 15, e;
|
|
231
|
-
};
|
|
232
235
|
export {
|
|
233
|
-
|
|
236
|
+
d as Hopper
|
|
234
237
|
};
|
package/dist/jofemar.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var le=Object.defineProperty;var O=p=>{throw TypeError(p)};var se=(p,h,t)=>h in p?le(p,h,{enumerable:!0,configurable:!0,writable:!0,value:t}):p[h]=t;var M=(p,h,t)=>se(p,typeof h!="symbol"?h+"":h,t),de=(p,h,t)=>h.has(p)||O("Cannot "+t);var I=(p,h,t)=>h.has(p)?O("Cannot add the same private member more than once"):h instanceof WeakSet?h.add(p):h.set(p,t);var i=(p,h,t)=>(de(p,h,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("./kernel-CzkmE_OW.cjs"),a=require("./relay-DGFymXOw.cjs"),S=require("./webserial-core-5B5nYtyR.cjs");var n,P,Q,g,A,B,W,F,q,R,$,j,N,L,V,J,U,K,H,z,G,Y,Z,X,ee,te,ne,ie,re,u,s,b,d,_,ae,oe,ce,T,E,D;class pe extends v.Kernel{constructor({filters:t=null,config_port:e=null,no_device:r=1,device_listen_on_port:o=1,type:c="esplus",support_cart:l=!0}={}){super({filters:t,config_port:e,no_device:r,device_listen_on_port:o});I(this,n);M(this,"__device",{type:"esplus",support_cart:!1,withdraw:{in_process:!1,seconds:60,interval:0},cart:{in_process:!1},channels:{verification:{clear(){this.running=!1,this.current=1,this.channels=[]},running:!1,start:1,end:80,current:1,channels:[]}}});if(this.__internal__.device.type="jofemar",S.h.getCustom(this.typeDevice,r))throw new Error(`Device ${this.typeDevice} ${r} 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=c,this.supportCart=l,i(this,n,P).call(this),S.h.add(this),i(this,n,Q).call(this)}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)}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}serialSetConnectionConstant(t=1){return a.o.connection({channel:t})}serialMessage(t){let r={code:t,name:null,description:null,request:"unknown",no_code:0,additional:{machine:{hex:null,dec:null}}};switch(t[0]){case"02":r=i(this,n,re).call(this,t,r,128);break;case"06":r=i(this,n,ae).call(this,t,r);break;case"15":r.name="Checksum error",r.description="The calculated checksum does not match the received checksum",r.no_code=38,i(this,n,s).call(this);break;default:r.name="unknown",r.description="The message received is unknown",r.no_code=404;break}this.dispatch("serial:message",r)}productRemovedContinueDispensing(){this.__internal__.dispense.elevator.locking_interval&&(this.__internal__.dispense.elevator.locking_time=0)}async dispense({selection:t=1,cart:e=!1}={}){const r=a.o.dispense({selection:t,cart:e,machineChannel:this.listenOnChannel}),o=r[5],c=r[6];this.__internal__.dispense.backup_dispense={selection:t,cart:e,channel:c,tray:o};let l;do l=await this.internalDispense(r),i(this,n,oe).call(this),l.error==="elevator-locked"?await i(this,n,g).call(this):l.error==="no-response"&&await v.wait(1e3);while(["elevator-locked","no-response"].includes(l.error));return this.__internal__.dispense.backup_dispense={},l}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.type!=="status"))}async endDispense(){const t=a.o.endCartDispense({machineChannel:this.listenOnChannel});return await this.internalDispense(t)}async collect(){return await this.appendToQueue(a.o.collect({machineChannel:this.listenOnChannel}),"collect")}async resetSoldOutErrors(){return await i(this,n,T).call(this,"soldOut")}async resetWaitingProductRemovedError(){return await i(this,n,T).call(this,"waiting")}async resetMachineErrors(){return this.__internal__.serial.queue.length===0?(i(this,n,E).call(this),await i(this,n,T).call(this,"machine")):new Promise(t=>{const e=setInterval(async()=>{this.__internal__.serial.queue.length>0||(clearInterval(e),await i(this,n,T).call(this,"machine"),i(this,n,E).call(this),t(!0))},100)})}async resetAllErrors(){return await this.resetSoldOutErrors(),await v.wait(100),await this.resetWaitingProductRemovedError(),await v.wait(100),await this.resetMachineErrors()}async status(){return await this.appendToQueue(a.o.status({machineChannel:this.listenOnChannel}),"status")}async lightsOn(){return await i(this,n,D).call(this,"on")}async lightsOff(){return await i(this,n,D).call(this,"off")}async program(t,e){return await this.appendToQueue(a.o.program({machineChannel:this.listenOnChannel,param1:t,param2:e}),"program")}async programDisplayLanguage({language:t="spanish"}={}){return await this.appendToQueue(a.o.programDisplayLanguage({machineChannel:this.listenOnChannel,language:t}),"program")}async programBeeper({enable:t=!0}={}){return await this.appendToQueue(a.o.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(a.o.programDisableWorkingTemperature({machineChannel:this.listenOnChannel}),"program")}async programDisableThermometer(){return await this.appendToQueue(a.o.programDisableThermometer({machineChannel:this.listenOnChannel}),"program")}async programWorkingTemperature({degrees:t=.5}={}){return await this.appendToQueue(a.o.programWorkingTemperature({machineChannel:this.listenOnChannel,degrees:t,machineType:this.__device.type}),"program")}async programIsolationTray({tray:t=0}={}){return await this.appendToQueue(a.o.programIsolationTray({machineChannel:this.listenOnChannel,tray:t}),"program")}async programTimeToStandbyAfterCollect({seconds:t=15}={}){return await this.appendToQueue(a.o.programTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel,seconds:t}),"program")}async programTimeToStandbyWithoutCollect({minutes:t=1}={}){return await this.appendToQueue(a.o.programTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programElevatorSpeed({speed:t="high"}={}){return await this.appendToQueue(a.o.programElevatorSpeed({machineChannel:this.listenOnChannel,speed:t}),"program")}async programTemperatureExpiration({enable:t=!1}={}){return await this.appendToQueue(a.o.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(a.o.programMachineAddress({machineChannel:this.listenOnChannel,address:t}),"program")}async programTemperatureBeforeExpiration({degrees:t=.5}={}){return await this.appendToQueue(a.o.programTemperatureBeforeExpiration({machineChannel:this.listenOnChannel,degrees:t}),"program")}async programTimeBeforeExpirationByTemperature({minutes:t=1}={}){return await this.appendToQueue(a.o.programTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programTemperatureScale({scale:t="celsius"}={}){return await this.appendToQueue(a.o.programTemperatureScale({machineChannel:this.listenOnChannel,scale:t}),"program")}async programVoltageEngine({selection:t=1,voltage:e=5}={}){return await this.appendToQueue(a.o.programVoltageEngine({machineChannel:this.listenOnChannel,selection:t,voltage:e}),"voltage-engine")}async programPushOverProducts({selection:t=1,enable:e=!0}={}){return await this.appendToQueue(a.o.programPushOverProducts({machineChannel:this.listenOnChannel,selection:t,enable:e}),"push-over-products")}async programChannelRunningAfterDispense({selection:t=1,seconds:e=0}={}){return await this.appendToQueue(a.o.programChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t,seconds:e}),"channel-running-after-dispense")}async checkData(t,e="FF"){return await this.appendToQueue(a.o.checkData({machineChannel:this.listenOnChannel,type:t,aux:e}),"check-data")}async getDisplayLanguage(){return await this.appendToQueue(a.o.getDisplayLanguage({machineChannel:this.listenOnChannel}),"check-data")}async getBeeper(){return await this.appendToQueue(a.o.getBeeper({machineChannel:this.listenOnChannel}),"check-data")}async getWorkingTemperature(){return await this.appendToQueue(a.o.getWorkingTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getIsolationTray(){return await this.appendToQueue(a.o.getIsolationTray({machineChannel:this.listenOnChannel}),"check-data")}async getProgramVersion(){return await this.appendToQueue(a.o.getProgramVersion({machineChannel:this.listenOnChannel}),"check-data")}async getFaults(){return await this.appendToQueue(a.o.getFaults({machineChannel:this.listenOnChannel}),"check-data")}async getMachineId(){return await this.appendToQueue(a.o.getMachineId({machineChannel:this.listenOnChannel}),"check-data")}async getCurrentTemperature(){return await this.appendToQueue(a.o.getCurrentTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyAfterCollect(){return await this.appendToQueue(a.o.getTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyWithoutCollect(){return await this.appendToQueue(a.o.getTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel}),"check-data")}async getElevatorSpeed(){return await this.appendToQueue(a.o.getElevatorSpeed({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureExpiration(){return await this.appendToQueue(a.o.getTemperatureExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureBeforeExpiration(){return await this.appendToQueue(a.o.getTemperatureBeforeExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTimeBeforeExpirationByTemperature(){return await this.appendToQueue(a.o.getTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureScale(){return await this.appendToQueue(a.o.getTemperatureScale({machineChannel:this.listenOnChannel}),"check-data")}async getClockRegisters(){return await this.appendToQueue(a.o.getClockRegisters({machineChannel:this.listenOnChannel}),"check-data")}async getMachineActivity(){return await this.appendToQueue(a.o.getMachineActivity({machineChannel:this.listenOnChannel}),"check-data")}async getVoltageEngine({selection:t=1}={}){return await this.appendToQueue(a.o.getVoltageEngine({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelPresence({selection:t=1}={}){return await this.appendToQueue(a.o.getChannelPresence({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getPushOverProducts({selection:t=1}={}){return await this.appendToQueue(a.o.getPushOverProducts({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelRunningAfterDispense({selection:t=1}={}){return await this.appendToQueue(a.o.getChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async setDisplayStandbyMessage({message:t=""}={}){return await this.appendToQueue(a.o.setDisplayStandbyMessage({machineChannel:this.listenOnChannel,message:t}),"display")}async setDisplayMessageTemporarily({message:t="",seconds:e=1}){return this.appendToQueue(a.o.setDisplayMessageTemporarily({machineChannel:this.listenOnChannel,message:t,seconds:e}),"display")}async setDisplayMessageUnlimited({message:t=""}){return await this.appendToQueue(a.o.setDisplayMessageUnlimited({machineChannel:this.listenOnChannel,message:t}),"display")}async programClock({date:t=new Date}={}){return await this.appendToQueue(a.o.programClock({machineChannel:this.listenOnChannel,date:t}),"clock")}async eventsConfig({event:t=null,enable:e=!0}={}){return await this.appendToQueue(a.o.eventsConfig({machineChannel:this.listenOnChannel,event:t,enable:e}),"events-config")}async eventEnable({event:t=null}={}){return await this.appendToQueue(a.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async eventDisable({event:t=null}={}){return await this.appendToQueue(a.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async sendCustomCode({code:t=[]}={}){return await this.appendToQueue(a.o.sendCustomCode({machineChannel:this.listenOnChannel,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 r=t;r<=e;r++)this.__device.channels.verification.current=r,await this.getChannelPresence({selection:r});return new Promise(r=>{let o=setInterval(()=>{this.__device.channels.verification.channels.length===e-t+1&&(clearInterval(o),this.dispatch("channels",{channels:this.__device.channels.verification.channels}),this.__device.channels.verification.clear(),r(!0))},500)})}}n=new WeakSet,P=function(){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)},Q=function(){this.on("internal:dispense:running",i(this,n,ce).bind(this))},g=async function(){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 v.wait(500));const t=this;return this.__internal__.dispense.status="elevator-locked",this.__internal__.dispense.elevator.locking_time=60,new Promise(e=>{t.__internal__.dispense.elevator.locking_interval=setInterval(()=>{t.dispatch("dispensing:withdrawal",{elevator:!0,seconds:t.__internal__.dispense.elevator.locking_time,description:"Please recall products from the elevator"}),t.__internal__.dispense.elevator.locking_time-=1,t.__internal__.dispense.elevator.locking_time<=0&&(clearInterval(t.__internal__.dispense.elevator.locking_interval),t.__internal__.dispense.elevator.locking_interval=0,e(!0))},1e3)})},A=function(t,e){return e.name="ok",e.description="The last command was executed successfully",e.no_code=1,this.dispatch("command-executed",e),e},B=function(t,e){e.additional={hex:t,dec:this.hexToDec(t),ascii:null};const r={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"};return e.additional.ascii=r[t]??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},W=function(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},F=function(t,e){e.no_code=404;let r=t[5]??null;return r&&this.listenOnChannel>1&&(r=this.hexToDec(r)-this.listenOnChannel+1,r=this.decToHex(r)),r&&(r==="FD"?(e.no_code=4,e.name="channel disconnected",e.description="The channel is disconnected",e.additional={active:!1}):r==="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},q=function(t,e){e.no_code=39,e.name="Program version";const r=t.slice(4,12),o=r.map(c=>String.fromCharCode(this.hexToDec(c))).join("");return e.additional={version:o,hex:r},e.description=`The program version is ${o}`,this.dispatch("program:version",e.additional),e},R=function(t,e){e.no_code=39,e.name="Machine faults",e.description="No faults detected",e.additional={no_faults:0,faults:[]};const r=t.slice(4,-3);if(r.length>1&&r[0]!=="30"){e.description="Machine has faults";const o={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 c of r)o[c]&&(e.additional.faults.push(o[c]),e.additional.no_faults++)}return this.dispatch("machine:faults",e.additional),e},$=function(t,e){e.no_code=40,e.name="Clock registers",e.description="Clock registers";const r=t.slice(4,-3),o=r.map(x=>String.fromCharCode(this.hexToDec(x))).join(""),[c,l]=o.split(" "),[f,y]=c.split(":"),[C,k,m]=l.split("-"),w=new Date(2e3+parseInt(m),parseInt(k)-1,parseInt(C),parseInt(f),parseInt(y));return e.additional={day:C,month:k,year:m,hours:f,minutes:y,formatted:o,date:w,hex:r},this.dispatch("clock:registers",e.additional),e},j=function(t,e){e.no_code=41,e.name="Machine activity",e.description="Events from read machine activity";const r=String.fromCharCode(this.hexToDec(t[4]));if(r!=="0"){const o=t.slice(5,-3);if(r==="T"&&o.length===4){const c=String.fromCharCode(this.hexToDec(o[0])),l=String.fromCharCode(this.hexToDec(o[1])),f=String.fromCharCode(this.hexToDec(o[3]));e.additional={ascii:r,type:"DU.d",dozens:c,units:l,decimals:f,time:parseFloat(`${c}${l}.${f}`),meaning:"Extraction time (in seconds)"}}else if(["B","D","E","F","G"].includes(r)&&o.length===3){const c=String.fromCharCode(this.hexToDec(o[0])),l=String.fromCharCode(this.hexToDec(o[1])),f=String.fromCharCode(this.hexToDec(o[2])),y=parseInt(`${c}${l}${f}`),C={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:c,dozens:l,decimals:f,channel:y,selection:y-109,ascii:r,meaning:C[r]??"Unknown"}}else if(o.length===13){const c=o.map(he=>String.fromCharCode(this.hexToDec(he))).join(""),l=parseInt(c.slice(0,2)),f=parseInt(c.slice(2,4)),y=parseInt(c.slice(4,6)),C=parseInt(c.slice(7,9)),k=parseInt(c.slice(9,11))-1,m=2e3+parseInt(c.slice(11,13)),w=new Date(m,k,C,l,f,y),x={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:w,hex:o,formatted:w.toLocaleString(),ascii:r,meaning:x[r]??"Unknown"}}}return this.dispatch("machine:activity",e.additional),e},N=function(t,e){const r={30:"Spanish",31:"English",32:"French"};return e.no_code=42,e.name="Language",e.description=`The language is ${r[t]??"unknown"}`,e.additional={hex:t,language:r[t]??"unknown"},this.dispatch("check:language",e.additional),e},L=function(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},V=function(t,e){e.no_code=44,e.name="Isolation tray",e.description="Isolation tray";const r=this.hexToDec(t)-139;return e.additional={hex:t,tray:r},this.dispatch("check:isolation-tray",e.additional),e},J=function(t,e){e.no_code=45,e.name="Engine voltage",e.description="Engine voltage";const r=(this.hexToDec(t)-128)/2+5;return e.additional={hex:t,voltage:r},this.dispatch("check:engine-voltage",e.additional),e},U=function(t,e){e.no_code=46,e.name="Push over",e.description="Push over";const r=t==="30";return e.additional={hex:t,push:r},this.dispatch("check:push-over",e.additional),e},K=function(t,e){e.no_code=47,e.name="Extractor after dispense",e.description="Extractor after dispense";const r=(this.hexToDec(t)-128)/10;return e.additional={hex:t,seconds:r},this.dispatch("check:extractor-after-dispense",e.additional),e},H=function(t,e){e.no_code=48,e.name="Standby after collect",e.description="Time to standby after collect product";const r=this.hexToDec(t)-128;return e.additional={hex:t,seconds:r},this.dispatch("check:standby-after-collect",e.additional),e},z=function(t,e){e.no_code=49,e.name="Standby without collect",e.description="Time to standby when product delivery is not collected";const r=this.hexToDec(t)-128;return e.additional={hex:t,minutes:r},this.dispatch("check:standby-without-collect",e.additional),e},G=function(t,e){e.no_code=50,e.name="Elevator speed",e.description="Elevator speed";const r=t==="30"?"low":"high";return e.additional={hex:t,speed:r},this.dispatch("check:elevator-speed",e.additional),e},Y=function(t,e){e.no_code=51,e.name="Temperature expiration",e.description="Temperature expiration";const r=t==="31";return e.additional={hex:t,enabled:r},this.dispatch("check:expiration-by-temperature",e.additional),e},Z=function(t,e){e.no_code=52,e.name="Temperature before expiration",e.description="Temperature before expiration";const r=(this.hexToDec(t)-128)/2;return e.additional={hex:t,temperature:r},this.dispatch("check:temperature-before-expiration",e.additional),e},X=function(t,e){e.no_code=53,e.name="Time before expiration",e.description="Time before expiration";const r=this.hexToDec(t)-128;return e.additional={hex:t,minutes:r},this.dispatch("check:expiration-after",e.additional),e},ee=function(t,e){e.no_code=54,e.name="Temperature scale",e.description="Temperature scale";const r=t==="43"?"Celsius":"Fahrenheit";return e.additional={hex:t,scale:r},this.dispatch("check:temperature-scale",e.additional),e},te=function(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},ne=function(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},ie=function(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},re=function(t,e,r=128){if(t[1]&&(e.additional.machine.hex=t[1],e.additional.machine.dec=this.hexToDec(t[1])-r),!(t[1]&&t[2]))e=i(this,n,A).call(this,t,e);else switch(t[2]){case"54":e.request="--automatic",e=i(this,n,B).call(this,t[3],e);break;case"50":e.request="--automatic",e=i(this,n,W).call(this,t[3],e);break;case"43":switch(e.request="check-data",t[3]){case"41":e=i(this,n,j).call(this,t,e);break;case"43":e.request="channel-status",e=i(this,n,F).call(this,t,e);break;case"50":e=i(this,n,q).call(this,t,e);break;case"53":e=i(this,n,R).call(this,t,e);break;case"54":e.request="working-temperature",e=i(this,n,ne).call(this,t[4],e);break;case"72":e=i(this,n,$).call(this,t,e);break;case"74":e.request="current-temperature",e=i(this,n,ie).call(this,t,e);break;case"49":e=i(this,n,N).call(this,t[4],e);break;case"5a":e=i(this,n,L).call(this,t[4],e);break;case"42":e=i(this,n,V).call(this,t[4],e);break;case"47":e=i(this,n,J).call(this,t[4],e);break;case"4e":e=i(this,n,te).call(this,t,e);break;case"4f":e=i(this,n,U).call(this,t[4],e);break;case"45":e=i(this,n,K).call(this,t[4],e);break;case"46":e=i(this,n,H).call(this,t[4],e);break;case"48":e=i(this,n,z).call(this,t[4],e);break;case"76":e=i(this,n,G).call(this,t[4],e);break;case"63":e=i(this,n,Y).call(this,t[4],e);break;case"65":e=i(this,n,Z).call(this,t[4],e);break;case"66":e=i(this,n,X).call(this,t[4],e);break;case"67":e=i(this,n,ee).call(this,t[4],e);break}break}return e},u=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!0)},s=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!1)},b=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status="elevator-locked")},d=function({type:t=null,severity:e="low"}={}){this.dispatch("jofemar:warning",{type:t,severity:e})},_=function({type:t=null,severity:e="high"}={}){this.dispatch("jofemar:error",{type:t,severity:e})},ae=function(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,i(this,n,u).call(this);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,i(this,n,s).call(this),i(this,n,d).call(this,{type:"invalid-tray"});break;case"33":e.name="Invalid channel",e.description="The channel requested is invalid",e.no_code=12,i(this,n,s).call(this),i(this,n,d).call(this,{type:"invalid-channel"});break;case"34":e.name="Empty channel",e.description="The channel requested is empty",e.no_code=13,i(this,n,s).call(this),i(this,n,d).call(this,{type:"empty-channel"});break;case"35":e.name="Jam",e.description="Jam in elevator engine",e.no_code=14,i(this,n,s).call(this),i(this,n,_).call(this,{type:"jam"});break;case"36":e.name="Malfunction",e.description="Malfunction in the elevator belt or product detector",e.no_code=15,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{type:"photo-transistors"});break;case"38":e.name="Without channels",e.description="No channels detected",e.no_code=17,i(this,n,s).call(this),i(this,n,_).call(this,{type:"without-channels"});break;case"39":e.name="Product detector fault",e.description="Product detector fault",e.no_code=18,i(this,n,b).call(this),i(this,n,d).call(this,{type:"fault-product-detector"});break;case"41":e.name="Fault in 485 BUS",e.description="Machine display is disconnected",e.no_code=19,i(this,n,u).call(this),i(this,n,d).call(this,{type:"display-disconnected"});break;case"42":e.name="Product under elevator",e.description="Product alarm under elevator",e.no_code=20,i(this,n,s).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{type:"error-approaching-position",severity:"high"});break;case"44":e.name="Fault in keyboard",e.description="Fault in keyboard",e.no_code=22,i(this,n,s).call(this),i(this,n,_).call(this,{type:"fault-keyboard"});break;case"45":e.name="Eeprom writing error",e.description="Eeprom writing error",e.no_code=23,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{type:"fault-temperature-control"});break;case"47":e.name="Thermometer disconnected",e.description="The thermometer is disconnected",e.no_code=25,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-disconnected"});break;case"48":e.name="Thermometer programming lost",e.description="Thermometer programming lost",e.no_code=26,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-programming-lost"});break;case"49":e.name="Thermometer faulty",e.description="Thermometer faulty",e.no_code=27,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-faulty"});break;case"4a":e.name="Channels power consumption detector faulty",e.description="Channels power consumption detector faulty",e.no_code=28,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,d).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,b).call(this),this.__internal__.dispense.elevator.need_reset||(this.__internal__.dispense.elevator.need_reset=!0),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,b).call(this);break;case"50":e.name="Product expired by temperature reasons",e.description="Product expired by temperature reasons",e.no_code=34,i(this,n,u).call(this),i(this,n,d).call(this,{type:"product-expired-temperature"});break;case"51":e.name="Automatic door faulty",e.description="Automatic door faulty",e.no_code=35,i(this,n,u).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{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&&i(this,n,s).call(this);return e},oe=function(){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},ce=function(){this.__internal__.dispense.timeout&&clearTimeout(this.__internal__.dispense.timeout),this.__internal__.dispense.interval&&clearInterval(this.__internal__.dispense.interval);const t=this;t.__internal__.dispense.timeout=setTimeout(()=>{t.__internal__.dispense.interval=setInterval(()=>{t.status().then(()=>{})},t.__internal__.dispense.interval_time)},t.__internal__.dispense.timeout_time)},T=async function(t){return await this.appendToQueue(a.o.reset({machineChannel:this.listenOnChannel,type:t}),"reset")},E=function(){const t=this.__device.type==="iceplus"?v.getSeconds(40):v.getSeconds(25),e=new Date,r=1e3*t+e.getTime(),o=new Date(r);this.dispatch("reset:errors",{description:"Resetting machine errors",duration:t,started_at:e,finished_at:o})},D=async function(t){return await this.appendToQueue(a.o.lights({machineChannel:this.listenOnChannel,type:t}),"lights")};exports.Jofemar=pe;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./kernel-D8A562gb.cjs"),i=require("./relay-DGFymXOw.cjs"),f=require("./webserial-core-N14HUamr.cjs");class v extends l.Kernel{__device={type:"esplus",support_cart:!1,withdraw:{in_process:!1,seconds:60,interval:0},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=null,no_device:n=1,device_listen_on_port:r=1,type:a="esplus",support_cart:o=!0}={}){if(super({filters:t,config_port:e,no_device:n,device_listen_on_port:r}),this.__internal__.device.type="jofemar",f.h.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.h.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)}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.o.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 l.wait(500));const t=this;return this.__internal__.dispense.status="elevator-locked",this.__internal__.dispense.elevator.locking_time=60,new Promise(e=>{t.__internal__.dispense.elevator.locking_interval=setInterval(()=>{t.dispatch("dispensing:withdrawal",{elevator:!0,seconds:t.__internal__.dispense.elevator.locking_time,description:"Please recall products from the elevator"}),t.__internal__.dispense.elevator.locking_time-=1,t.__internal__.dispense.elevator.locking_time<=0&&(clearInterval(t.__internal__.dispense.elevator.locking_interval),t.__internal__.dispense.elevator.locking_interval=0,e(!0))},1e3)})}#d(t,e){return e.name="ok",e.description="The last command was executed successfully",e.no_code=1,this.dispatch("command-executed",e),e}#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"};return e.additional.ascii=n[t]??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.push(r[a]),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(":"),[s,d,p]=o.split("-"),u=new Date(2e3+parseInt(p),parseInt(d)-1,parseInt(s),parseInt(c),parseInt(h));return e.additional={day:s,month:d,year:p,hours:c,minutes:h,formatted:r,date:u,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}`),s={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:s[n]??"Unknown"}}else if(r.length===13){const a=r.map(y=>String.fromCharCode(this.hexToDec(y))).join(""),o=parseInt(a.slice(0,2)),c=parseInt(a.slice(2,4)),h=parseInt(a.slice(4,6)),s=parseInt(a.slice(7,9)),d=parseInt(a.slice(9,11))-1,p=2e3+parseInt(a.slice(11,13)),u=new Date(p,d,s,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:u,hex:r,formatted:u.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}#S(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}#P(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}#Q(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.hex=t[1],e.additional.machine.dec=this.hexToDec(t[1])-n),!(t[1]&&t[2]))e=this.#d(t,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.#Q(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.#S(t[4],e);break;case"67":e=this.#P(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){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,128);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.o.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 l.wait(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);const t=this;t.__internal__.dispense.timeout=setTimeout(()=>{t.__internal__.dispense.interval=setInterval(()=>{t.status().then(()=>{})},t.__internal__.dispense.interval_time)},t.__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.type!=="status"))}async endDispense(){const t=i.o.endCartDispense({machineChannel:this.listenOnChannel});return await this.internalDispense(t)}async collect(){return await this.appendToQueue(i.o.collect({machineChannel:this.listenOnChannel}),"collect")}async#r(t){return await this.appendToQueue(i.o.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"?l.getSeconds(40):l.getSeconds(25),e=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.resetSoldOutErrors(),await l.wait(100),await this.resetWaitingProductRemovedError(),await l.wait(100),await this.resetMachineErrors()}async status(){return await this.appendToQueue(i.o.status({machineChannel:this.listenOnChannel}),"status")}async#c(t){return await this.appendToQueue(i.o.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.o.program({machineChannel:this.listenOnChannel,param1:t,param2:e}),"program")}async programDisplayLanguage({language:t="spanish"}={}){return await this.appendToQueue(i.o.programDisplayLanguage({machineChannel:this.listenOnChannel,language:t}),"program")}async programBeeper({enable:t=!0}={}){return await this.appendToQueue(i.o.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.o.programDisableWorkingTemperature({machineChannel:this.listenOnChannel}),"program")}async programDisableThermometer(){return await this.appendToQueue(i.o.programDisableThermometer({machineChannel:this.listenOnChannel}),"program")}async programWorkingTemperature({degrees:t=.5}={}){return await this.appendToQueue(i.o.programWorkingTemperature({machineChannel:this.listenOnChannel,degrees:t,machineType:this.__device.type}),"program")}async programIsolationTray({tray:t=0}={}){return await this.appendToQueue(i.o.programIsolationTray({machineChannel:this.listenOnChannel,tray:t}),"program")}async programTimeToStandbyAfterCollect({seconds:t=15}={}){return await this.appendToQueue(i.o.programTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel,seconds:t}),"program")}async programTimeToStandbyWithoutCollect({minutes:t=1}={}){return await this.appendToQueue(i.o.programTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programElevatorSpeed({speed:t="high"}={}){return await this.appendToQueue(i.o.programElevatorSpeed({machineChannel:this.listenOnChannel,speed:t}),"program")}async programTemperatureExpiration({enable:t=!1}={}){return await this.appendToQueue(i.o.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.o.programMachineAddress({machineChannel:this.listenOnChannel,address:t}),"program")}async programTemperatureBeforeExpiration({degrees:t=.5}={}){return await this.appendToQueue(i.o.programTemperatureBeforeExpiration({machineChannel:this.listenOnChannel,degrees:t}),"program")}async programTimeBeforeExpirationByTemperature({minutes:t=1}={}){return await this.appendToQueue(i.o.programTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programTemperatureScale({scale:t="celsius"}={}){return await this.appendToQueue(i.o.programTemperatureScale({machineChannel:this.listenOnChannel,scale:t}),"program")}async programVoltageEngine({selection:t=1,voltage:e=5}={}){return await this.appendToQueue(i.o.programVoltageEngine({machineChannel:this.listenOnChannel,selection:t,voltage:e}),"voltage-engine")}async programPushOverProducts({selection:t=1,enable:e=!0}={}){return await this.appendToQueue(i.o.programPushOverProducts({machineChannel:this.listenOnChannel,selection:t,enable:e}),"push-over-products")}async programChannelRunningAfterDispense({selection:t=1,seconds:e=0}={}){return await this.appendToQueue(i.o.programChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t,seconds:e}),"channel-running-after-dispense")}async checkData(t,e="FF"){return await this.appendToQueue(i.o.checkData({machineChannel:this.listenOnChannel,type:t,aux:e}),"check-data")}async getDisplayLanguage(){return await this.appendToQueue(i.o.getDisplayLanguage({machineChannel:this.listenOnChannel}),"check-data")}async getBeeper(){return await this.appendToQueue(i.o.getBeeper({machineChannel:this.listenOnChannel}),"check-data")}async getWorkingTemperature(){return await this.appendToQueue(i.o.getWorkingTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getIsolationTray(){return await this.appendToQueue(i.o.getIsolationTray({machineChannel:this.listenOnChannel}),"check-data")}async getProgramVersion(){return await this.appendToQueue(i.o.getProgramVersion({machineChannel:this.listenOnChannel}),"check-data")}async getFaults(){return await this.appendToQueue(i.o.getFaults({machineChannel:this.listenOnChannel}),"check-data")}async getMachineId(){return await this.appendToQueue(i.o.getMachineId({machineChannel:this.listenOnChannel}),"check-data")}async getCurrentTemperature(){return await this.appendToQueue(i.o.getCurrentTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyAfterCollect(){return await this.appendToQueue(i.o.getTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyWithoutCollect(){return await this.appendToQueue(i.o.getTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel}),"check-data")}async getElevatorSpeed(){return await this.appendToQueue(i.o.getElevatorSpeed({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureExpiration(){return await this.appendToQueue(i.o.getTemperatureExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureBeforeExpiration(){return await this.appendToQueue(i.o.getTemperatureBeforeExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTimeBeforeExpirationByTemperature(){return await this.appendToQueue(i.o.getTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureScale(){return await this.appendToQueue(i.o.getTemperatureScale({machineChannel:this.listenOnChannel}),"check-data")}async getClockRegisters(){return await this.appendToQueue(i.o.getClockRegisters({machineChannel:this.listenOnChannel}),"check-data")}async getMachineActivity(){return await this.appendToQueue(i.o.getMachineActivity({machineChannel:this.listenOnChannel}),"check-data")}async getVoltageEngine({selection:t=1}={}){return await this.appendToQueue(i.o.getVoltageEngine({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelPresence({selection:t=1}={}){return await this.appendToQueue(i.o.getChannelPresence({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getPushOverProducts({selection:t=1}={}){return await this.appendToQueue(i.o.getPushOverProducts({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelRunningAfterDispense({selection:t=1}={}){return await this.appendToQueue(i.o.getChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async setDisplayStandbyMessage({message:t=""}={}){return await this.appendToQueue(i.o.setDisplayStandbyMessage({machineChannel:this.listenOnChannel,message:t}),"display")}async setDisplayMessageTemporarily({message:t="",seconds:e=1}){return this.appendToQueue(i.o.setDisplayMessageTemporarily({machineChannel:this.listenOnChannel,message:t,seconds:e}),"display")}async setDisplayMessageUnlimited({message:t=""}){return await this.appendToQueue(i.o.setDisplayMessageUnlimited({machineChannel:this.listenOnChannel,message:t}),"display")}async programClock({date:t=new Date}={}){return await this.appendToQueue(i.o.programClock({machineChannel:this.listenOnChannel,date:t}),"clock")}async eventsConfig({event:t=null,enable:e=!0}={}){return await this.appendToQueue(i.o.eventsConfig({machineChannel:this.listenOnChannel,event:t,enable:e}),"events-config")}async eventEnable({event:t=null}={}){return await this.appendToQueue(i.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async eventDisable({event:t=null}={}){return await this.appendToQueue(i.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async sendCustomCode({code:t=[]}={}){return await this.appendToQueue(i.o.sendCustomCode({machineChannel:this.listenOnChannel,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=>{let 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)})}}exports.Jofemar=v;
|