@ikalogic/at1000 0.6.0 → 0.7.0
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/build/{at1000-BGZGhgco.mjs → at1000-Bav5xUM1.mjs} +3 -3
- package/build/{at1000-BGZGhgco.mjs.map → at1000-Bav5xUM1.mjs.map} +1 -1
- package/build/{at1000-D9r6GCs0.cjs → at1000-DjoKZEha.cjs} +3 -3
- package/build/at1000-DjoKZEha.cjs.map +1 -0
- package/build/browser.cjs +1 -1
- package/build/browser.d.cts +3 -3
- package/build/browser.d.cts.map +1 -1
- package/build/browser.d.mts +3 -3
- package/build/browser.d.mts.map +1 -1
- package/build/browser.mjs +1 -1
- package/build/{com-XQjoTBdU.d.cts → com-Bkkgrsep.d.cts} +177 -177
- package/build/{com-XQjoTBdU.d.cts.map → com-Bkkgrsep.d.cts.map} +1 -1
- package/build/{com-XQjoTBdU.d.mts → com-Bkkgrsep.d.mts} +177 -177
- package/build/{com-XQjoTBdU.d.mts.map → com-Bkkgrsep.d.mts.map} +1 -1
- package/build/com.cjs +1 -1
- package/build/com.d.cts +1 -1
- package/build/com.d.mts +1 -1
- package/build/{common-BSrNhbq_.cjs → common-BUohXSqz.cjs} +2 -2
- package/build/{common-BSrNhbq_.cjs.map → common-BUohXSqz.cjs.map} +1 -1
- package/build/{events-Cf7iAMZP.d.cts → events-8aTmwMUi.d.cts} +6 -6
- package/build/events-8aTmwMUi.d.cts.map +1 -0
- package/build/{events-Cf7iAMZP.d.mts → events-8aTmwMUi.d.mts} +6 -6
- package/build/events-8aTmwMUi.d.mts.map +1 -0
- package/build/events.cjs +1 -1
- package/build/events.d.cts +1 -1
- package/build/events.d.mts +1 -1
- package/build/events.mjs +1 -1
- package/build/gpio-5-tRkdTW.d.mts +712 -0
- package/build/gpio-5-tRkdTW.d.mts.map +1 -0
- package/build/gpio-D3QEeLKh.d.cts +712 -0
- package/build/gpio-D3QEeLKh.d.cts.map +1 -0
- package/build/gpio.cjs +1 -1
- package/build/gpio.cjs.map +1 -1
- package/build/gpio.d.cts +2 -2
- package/build/gpio.d.mts +2 -2
- package/build/gpio.mjs +1 -1
- package/build/gpio.mjs.map +1 -1
- package/build/{hmi-B-potLdl.d.cts → hmi-BEMiVKDF.d.cts} +2 -2
- package/build/hmi-BEMiVKDF.d.cts.map +1 -0
- package/build/{hmi-B-potLdl.d.mts → hmi-BEMiVKDF.d.mts} +2 -2
- package/build/hmi-BEMiVKDF.d.mts.map +1 -0
- package/build/hmi.cjs +1 -1
- package/build/hmi.d.cts +1 -1
- package/build/hmi.d.mts +1 -1
- package/build/{host-DJ8SAGMC.d.mts → host-BBjSKRqs.d.mts} +6 -6
- package/build/host-BBjSKRqs.d.mts.map +1 -0
- package/build/{host-BCOEcUog.d.cts → host-DlP73amZ.d.cts} +6 -6
- package/build/host-DlP73amZ.d.cts.map +1 -0
- package/build/{management-BGrPAG5k.cjs → management-DqBsC1HB.cjs} +2 -2
- package/build/management-DqBsC1HB.cjs.map +1 -0
- package/build/{management-CuI4cenF.mjs → management-StKcAkgo.mjs} +2 -2
- package/build/management-StKcAkgo.mjs.map +1 -0
- package/build/management.cjs +1 -1
- package/build/management.d.cts +81 -82
- package/build/management.d.cts.map +1 -1
- package/build/management.d.mts +81 -82
- package/build/management.d.mts.map +1 -1
- package/build/management.mjs +1 -1
- package/build/node.cjs +1 -1
- package/build/node.cjs.map +1 -1
- package/build/node.d.cts +3 -3
- package/build/node.d.cts.map +1 -1
- package/build/node.d.mts +3 -3
- package/build/node.d.mts.map +1 -1
- package/build/node.mjs +1 -1
- package/build/node.mjs.map +1 -1
- package/build/package-DNfLRnEC.mjs +2 -0
- package/build/package-DNfLRnEC.mjs.map +1 -0
- package/build/{package-DDLRsahz.cjs → package-iERj9NJ6.cjs} +2 -2
- package/build/package-iERj9NJ6.cjs.map +1 -0
- package/build/{power-B8QFbKdP.d.cts → power-B3oUS0wU.d.cts} +18 -18
- package/build/power-B3oUS0wU.d.cts.map +1 -0
- package/build/{power-BZmXOJyK.d.mts → power-D08VFff6.d.mts} +18 -18
- package/build/power-D08VFff6.d.mts.map +1 -0
- package/build/power.cjs +1 -1
- package/build/power.d.cts +1 -1
- package/build/power.d.mts +1 -1
- package/build/relays-TADiLsPk.d.cts.map +1 -1
- package/build/relays-TADiLsPk.d.mts.map +1 -1
- package/build/relays.cjs +1 -1
- package/build/{rolldown-runtime-CMqjfN_6.cjs → rolldown-runtime-BocRIvOZ.cjs} +1 -1
- package/build/session-qWW9mqWH.d.cts.map +1 -1
- package/build/session-qWW9mqWH.d.mts.map +1 -1
- package/build/session.cjs +1 -1
- package/build/session.mjs +1 -1
- package/package.json +12 -22
- package/build/at1000-D9r6GCs0.cjs.map +0 -1
- package/build/events-Cf7iAMZP.d.cts.map +0 -1
- package/build/events-Cf7iAMZP.d.mts.map +0 -1
- package/build/gpio-Bk1VEKYF.d.cts +0 -416
- package/build/gpio-Bk1VEKYF.d.cts.map +0 -1
- package/build/gpio-bFe112uI.d.mts +0 -416
- package/build/gpio-bFe112uI.d.mts.map +0 -1
- package/build/hmi-B-potLdl.d.cts.map +0 -1
- package/build/hmi-B-potLdl.d.mts.map +0 -1
- package/build/host-BCOEcUog.d.cts.map +0 -1
- package/build/host-DJ8SAGMC.d.mts.map +0 -1
- package/build/management-BGrPAG5k.cjs.map +0 -1
- package/build/management-CuI4cenF.mjs.map +0 -1
- package/build/package-CXtuh0C5.mjs +0 -2
- package/build/package-CXtuh0C5.mjs.map +0 -1
- package/build/package-DDLRsahz.cjs.map +0 -1
- package/build/power-B8QFbKdP.d.cts.map +0 -1
- package/build/power-BZmXOJyK.d.mts.map +0 -1
package/build/relays.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BocRIvOZ.cjs");let t=require("valibot");t=e.t(t,1);const n=t.picklist([`open`,`closed`]),r=t.array(n),i=t.object({state:n}),a=t.picklist([`open`,`close`]);t.object({action:a});var o=class{fetch;constructor(e){this.fetch=e}reset(){return this.fetch(`/relays/reset`,{method:`POST`,parseResponse:()=>{}})}relay(e){return new s(this.fetch,e)}read(){return this.fetch(`/relays`,{schema:r})}open(){return this.fetch(`/relays`,{method:`POST`,body:{action:`open`},schema:r})}close(){return this.fetch(`/relays`,{method:`POST`,body:{action:`close`},schema:r})}},s=class{fetch;id;constructor(e,t){this.fetch=e,this.id=t}async read(){return(await this.fetch(`/relays/${this.id}`,{schema:i})).state}async is_open(){return await this.read()===`open`}async is_closed(){return await this.read()===`closed`}async open(){return(await this.fetch(`/relays/${this.id}`,{method:`POST`,body:{action:`open`},schema:i})).state}async close(){return(await this.fetch(`/relays/${this.id}`,{method:`POST`,body:{action:`close`},schema:i})).state}};exports.Relay=s,exports.RelaysApi=o,exports.relayState=i,exports.states=r;
|
|
2
2
|
//# sourceMappingURL=relays.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-qWW9mqWH.d.cts","names":[],"sources":["../src/api/session.ts"],"mappings":";;;cAKa,cAAY,EAAA;;;;;;;KAOb,eAAe,EAAE,mBAAmB;;KAGpC;EAAoB;EAA4B;EAAgB;;;;;;;;;;;;;;iBAgBtD,aACpB,iBACA,MAAM,kBACL;;cAmBU;mBACkB;
|
|
1
|
+
{"version":3,"file":"session-qWW9mqWH.d.cts","names":[],"sources":["../src/api/session.ts"],"mappings":";;;cAKa,cAAY,EAAA;;;;;;;KAOb,eAAe,EAAE,mBAAmB;;KAGpC;EAAoB;EAA4B;EAAgB;;;;;;;;;;;;;;iBAgBtD,aACpB,iBACA,MAAM,kBACL;;cAmBU;mBACkB;EAA7B,YAA6B,OAAO;;;;;EAMpC,SAAS,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-qWW9mqWH.d.mts","names":[],"sources":["../src/api/session.ts"],"mappings":";;;cAKa,cAAY,EAAA;;;;;;;KAOb,eAAe,EAAE,mBAAmB;;KAGpC;EAAoB;EAA4B;EAAgB;;;;;;;;;;;;;;iBAgBtD,aACpB,iBACA,MAAM,kBACL;;cAmBU;mBACkB;
|
|
1
|
+
{"version":3,"file":"session-qWW9mqWH.d.mts","names":[],"sources":["../src/api/session.ts"],"mappings":";;;cAKa,cAAY,EAAA;;;;;;;KAOb,eAAe,EAAE,mBAAmB;;KAGpC;EAAoB;EAA4B;EAAgB;;;;;;;;;;;;;;iBAgBtD,aACpB,iBACA,MAAM,kBACL;;cAmBU;mBACkB;EAA7B,YAA6B,OAAO;;;;;EAMpC,SAAS,QAAQ"}
|
package/build/session.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./at1000-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./at1000-DjoKZEha.cjs");exports.SessionApi=e.a,exports.open_session=e.o,exports.sessionState=e.s;
|
package/build/session.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,o as t,s as n}from"./at1000-
|
|
1
|
+
import{a as e,o as t,s as n}from"./at1000-Bav5xUM1.mjs";export{e as SessionApi,t as open_session,n as sessionState};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikalogic/at1000",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Ikalogic AT1000 API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/node.cjs",
|
|
@@ -119,38 +119,28 @@
|
|
|
119
119
|
"scripts": {
|
|
120
120
|
"build": "bun --bun tsdown && bun --bun publint",
|
|
121
121
|
"check": "bun --bun tsc --noEmit && bun --bun oxlint --type-aware --deny-warnings",
|
|
122
|
+
"check:sequence-types": "bun --bun tsc --noEmit -p tsconfig.sequence-tests.json",
|
|
122
123
|
"dev": "bun --bun tsdown --watch",
|
|
123
124
|
"release": "bun publish",
|
|
124
|
-
"test": "bun test --coverage"
|
|
125
|
-
"docs": "bun typedoc-pkg -o build/docs"
|
|
125
|
+
"test": "bun test --coverage"
|
|
126
126
|
},
|
|
127
127
|
"dependencies": {
|
|
128
128
|
"dns-packet": "^5.6.1",
|
|
129
|
-
"ip-address": "^10.
|
|
130
|
-
"up-fetch": "^2.6.
|
|
131
|
-
"valibot": "^1.
|
|
129
|
+
"ip-address": "^10.7.0",
|
|
130
|
+
"up-fetch": "^2.6.1",
|
|
131
|
+
"valibot": "^1.5.0"
|
|
132
132
|
},
|
|
133
133
|
"devDependencies": {
|
|
134
|
-
"@arethetypeswrong/core": "^0.18.
|
|
134
|
+
"@arethetypeswrong/core": "^0.18.5",
|
|
135
135
|
"@ikalogic/at1000-relay-board": "0.0.1",
|
|
136
136
|
"@ikalogic/bk2831e": "0.0.1",
|
|
137
137
|
"@ikalogic/hm310p": "0.0.1",
|
|
138
138
|
"@ikalogic/transport": "0.1.0",
|
|
139
|
-
"@types/bun": "^1.
|
|
139
|
+
"@types/bun": "^1.4.2",
|
|
140
140
|
"@types/dns-packet": "^5.6.5",
|
|
141
|
-
"@types/node": "^25.9.
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"typedoc": "^0.28.19",
|
|
146
|
-
"typescript": "^6.0.3"
|
|
147
|
-
},
|
|
148
|
-
"typedocOptions": {
|
|
149
|
-
"out": "build/docs",
|
|
150
|
-
"entryPoints": [
|
|
151
|
-
"./src/browser.ts",
|
|
152
|
-
"./src/node.ts",
|
|
153
|
-
"./src/api/*"
|
|
154
|
-
]
|
|
141
|
+
"@types/node": "^25.9.5",
|
|
142
|
+
"publint": "^0.3.24",
|
|
143
|
+
"tsdown": "^0.23.0",
|
|
144
|
+
"typescript": "^7.0.2"
|
|
155
145
|
}
|
|
156
146
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"at1000-D9r6GCs0.cjs","names":["v","v","canConfig","rs232Config","rs485Config","spiConfig","i2cConfig","uartConfig","canFrame","digitalState","analogState","analogInputConfiguration","analogOutputConfiguration","digitalInputConfiguration","digitalOutputConfiguration","openDrainConfiguration","syncState","text","color","progress","playbackConfiguration","internalKnobEvent","calibrationData","calibrationState","projectEvent","updateStatus","dutState","usbState","relayState","states","format_host_for_url","format_host_for_url","ComApi","HmiApi","GpioApi","ManagementApi","PowerApi","RelaysApi"],"sources":["../src/api/session.ts","../src/api/events.ts","../src/at1000.ts"],"sourcesContent":["import type { UpFetch } from 'up-fetch';\nimport * as v from 'valibot';\n\nimport { parseApiError } from '../at1000';\n\nexport const sessionState = v.object({\n active: v.boolean(),\n kind: v.optional(v.picklist(['remote', 'project'])),\n label: v.optional(v.string()),\n project: v.optional(v.string()),\n since: v.optional(v.number()),\n});\nexport type SessionState = v.InferOutput<typeof sessionState>;\n\n/** Body for `POST /v0/session/open`. */\nexport type SessionOpenBody = { kind: 'remote' | 'project'; label?: string; project?: string };\n\nconst openResponse = v.object({ token: v.string() });\n\n/**\n * Opens an exclusive session on the device (last-open-wins). Returns the minted\n * session token, or `undefined` when the server predates the session model.\n *\n * Deliberately uses a direct `fetch` (not the shared up-fetch client) so the\n * response status is inspectable before any structured-error handler throws:\n * pre-session servers answer the unmatched route with 404/405, which we degrade\n * to `undefined` rather than surface as a failure. A 30 s timeout (not the SDK\n * default 1 s) covers a remote-kind open synchronously stopping any running\n * project container; the host is already known-alive from the preceding info\n * probe, so the long timeout never hangs on dead hosts.\n */\nexport async function open_session(\n baseUrl: string,\n body: SessionOpenBody,\n): Promise<string | undefined> {\n const response = await fetch(`${baseUrl}/session/open`, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: { 'content-type': 'application/json' },\n signal: AbortSignal.timeout(30_000),\n });\n\n if (response.status === 404 || response.status === 405) {\n return undefined; // legacy server without the session model\n }\n if (!response.ok) {\n await parseApiError(response, 'POST');\n }\n\n return v.parse(openResponse, await response.json()).token;\n}\n\n/** @hideconstructor */\nexport class SessionApi {\n constructor(private readonly fetch: UpFetch) {}\n\n /**\n * Reads the current device session state.\n * @returns The active holder (kind/label/project/since) or `{ active: false }`.\n */\n state(): Promise<SessionState> {\n return this.fetch('/session/state', { schema: sessionState });\n }\n}\n","import * as v from 'valibot';\n\nimport { format_host_for_url } from '../host';\nimport {\n canConfig,\n canFrame,\n i2cConfig,\n rs232Config,\n rs485Config,\n spiConfig,\n uartConfig,\n} from './com';\nimport {\n analogInputConfiguration,\n analogOutputConfiguration,\n analogState,\n digitalInputConfiguration,\n digitalOutputConfiguration,\n digitalState,\n openDrainConfiguration,\n syncState,\n} from './gpio';\nimport { color, internalKnobEvent, playbackConfiguration, progress, text } from './hmi';\nimport { calibrationData, calibrationState, projectEvent, updateStatus } from './management';\nimport { dutState, usbState } from './power';\nimport { relayState, states } from './relays';\nimport { sessionState } from './session';\n\n// Receive-side serial bytes. Distinct from com's `serialData`, whose string->bytes\n// transform is for request bodies; events deliver raw byte arrays.\nconst rxBytes = v.array(v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(255)));\n\n// Schema for the `data` payload of each event, keyed by the wire `type` literal.\nconst eventDataSchemas = {\n 'com.can_config': canConfig,\n 'com.rs232_config': rs232Config,\n 'com.rs485_config': rs485Config,\n 'com.spi_config': spiConfig,\n 'com.i2c_config': i2cConfig,\n 'com.uart_config': uartConfig,\n 'com.can_rx': v.array(canFrame),\n 'com.uart_rx': rxBytes,\n 'com.rs232_rx': rxBytes,\n 'com.rs485_rx': rxBytes,\n 'gpio.state': v.union([digitalState, analogState]),\n 'gpio.config': v.union([\n analogInputConfiguration,\n analogOutputConfiguration,\n digitalInputConfiguration,\n digitalOutputConfiguration,\n openDrainConfiguration,\n ]),\n // Mirrors the glz::meta of gpio::sync_hold_state_t (apps/server/src/api/resources/gpio.hpp).\n 'gpio.sync': syncState,\n 'hmi.text': text,\n 'hmi.colors': color,\n // `data` absent (progress hidden) is accepted by v.optional.\n 'hmi.progress': v.optional(progress),\n 'hmi.play': playbackConfiguration,\n 'hmi.knob': internalKnobEvent,\n 'management.datetime': v.object({ epoch_seconds: v.number() }),\n 'management.calibration': calibrationData,\n 'management.calibration_state': calibrationState,\n 'management.project': projectEvent,\n 'management.update_status': updateStatus,\n 'power.dut': dutState,\n 'power.usb': usbState,\n 'relays.state': relayState,\n 'relays.states': states,\n 'session.state': sessionState,\n} as const;\n\nconst dataLessEvents = [\n 'com.reset',\n 'gpio.reset',\n 'hmi.clear',\n 'hmi.reset',\n 'power.reset',\n 'relays.reset',\n] as const;\n\nconst envelope = v.object({\n type: v.string(),\n id: v.optional(v.pipe(v.number(), v.integer())),\n ts: v.number(),\n data: v.optional(v.unknown()),\n});\n\ntype EventDataSchemas = typeof eventDataSchemas;\n\n/** Every event `type` literal the server can emit. */\nexport type EventType = keyof EventDataSchemas | (typeof dataLessEvents)[number];\n\ntype PayloadEvent = {\n [K in keyof EventDataSchemas]: {\n type: K;\n id?: number;\n ts: number;\n data: v.InferOutput<EventDataSchemas[K]>;\n };\n}[keyof EventDataSchemas];\n\ntype DataLessEvent = { type: (typeof dataLessEvents)[number]; id?: number; ts: number };\n\n/** A fully-typed device event for a known `type`. */\nexport type DeviceEvent = PayloadEvent | DataLessEvent;\n\n/**\n * Shape delivered to `'*'` listeners. Forward-compatible: a newer server may emit\n * a `type` this SDK does not model, surfaced here with an untyped `data`.\n */\nexport type AnyDeviceEvent = DeviceEvent | {\n type: string;\n id?: number;\n ts: number;\n data?: unknown;\n};\n\ntype EventListener = (event: AnyDeviceEvent) => void;\ntype StateListener = (connected: boolean) => void;\n\nconst reconnectBaseDelayMs = 500;\nconst reconnectMaxDelayMs = 8_000;\nconst defaultConnectTimeoutMs = 5_000;\n\nconst debugLog = (...args: unknown[]): void => console.debug('[at1000:events]', ...args);\n\n/** @hideconstructor */\nexport class EventsApi {\n private socket: WebSocket | undefined;\n private readonly listeners = new Map<string, Set<EventListener>>();\n private readonly stateListeners = new Set<StateListener>();\n private shouldReconnect = false;\n private reconnectDelayMs = reconnectBaseDelayMs;\n private reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n private _connected = false;\n private connectPromise: Promise<void> | undefined;\n\n constructor(private readonly host: string) {}\n\n /** Whether the WebSocket is currently open. */\n get connected(): boolean {\n return this._connected;\n }\n\n /**\n * Open the event stream. Resolves once the socket is open, rejects on failure or\n * after `timeout` ms. A no-op while already connected. Auto-reconnect arms only\n * after the first successful open, so a failed initial `connect()` (e.g. old\n * firmware without `/v0/events`) rejects without scheduling retries.\n */\n async connect(options?: { timeout?: number }): Promise<void> {\n if (typeof WebSocket === 'undefined') {\n throw new Error(\n 'WebSocket is not available in this runtime (Node >= 22, Bun, or a browser is required)',\n );\n }\n if (this._connected) {\n return;\n }\n // Coalesce concurrent opens: the layout holder-banner effect and the\n // projects page both call connect() on the shared per-client socket. Without\n // this a second caller starts a second openSocket() that orphans the first\n // (leaked WS + a connect() that never settles). Reuse the in-flight open.\n this.connectPromise ??= this.openSocket(options?.timeout ?? defaultConnectTimeoutMs);\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n /** Close the stream and cancel any pending reconnect. */\n close(): void {\n this.shouldReconnect = false;\n if (this.reconnectTimer !== undefined) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n const socket = this.socket;\n this.socket = undefined;\n if (socket !== undefined) {\n socket.close();\n }\n this.setConnected(false);\n }\n\n /**\n * Subscribe to an event `type`, or `'*'` for every event. Returns an unsubscribe\n * function. Listeners survive reconnects and are isolated: a throwing listener\n * does not break dispatch to the others.\n */\n on<T extends EventType>(\n type: T,\n listener: (event: Extract<DeviceEvent, { type: T }>) => void,\n ): () => void;\n on(type: '*', listener: (event: AnyDeviceEvent) => void): () => void;\n on(type: string, listener: (event: any) => void): () => void {\n let set = this.listeners.get(type);\n if (set === undefined) {\n set = new Set();\n this.listeners.set(type, set);\n }\n set.add(listener);\n return () => {\n const current = this.listeners.get(type);\n if (current === undefined) {\n return;\n }\n current.delete(listener);\n if (current.size === 0) {\n this.listeners.delete(type);\n }\n };\n }\n\n /** Subscribe to connection state changes. Returns an unsubscribe function. */\n onStateChange(listener: StateListener): () => void {\n this.stateListeners.add(listener);\n return () => {\n this.stateListeners.delete(listener);\n };\n }\n\n private openSocket(timeoutMs: number): Promise<void> {\n const { promise, resolve, reject } = Promise.withResolvers<void>();\n const url = `ws://${format_host_for_url(this.host)}/v0/events`;\n const socket = new WebSocket(url);\n this.socket = socket;\n\n let settled = false;\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n socket.close();\n reject(new Error(`Timed out connecting to ${url}`));\n }\n }, timeoutMs);\n\n socket.onopen = () => {\n if (this.socket !== socket || settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n this.shouldReconnect = true;\n this.reconnectDelayMs = reconnectBaseDelayMs;\n this.setConnected(true);\n debugLog('open', url);\n resolve();\n };\n\n socket.onmessage = (event) => {\n if (this.socket === socket) {\n this.handleMessage(event.data);\n }\n };\n\n socket.onerror = () => {\n debugLog('error', url);\n if (this.socket === socket && !settled) {\n settled = true;\n clearTimeout(timer);\n reject(new Error(`Failed to connect to ${url}`));\n }\n };\n\n socket.onclose = () => {\n if (this.socket !== socket) {\n return;\n }\n debugLog('close', url);\n clearTimeout(timer);\n this.setConnected(false);\n if (!settled) {\n settled = true;\n reject(new Error(`Connection to ${url} closed before opening`));\n return;\n }\n if (this.shouldReconnect) {\n this.scheduleReconnect();\n }\n };\n\n return promise;\n }\n\n private scheduleReconnect(): void {\n if (!this.shouldReconnect || this.reconnectTimer !== undefined) {\n return;\n }\n const delay = this.reconnectDelayMs;\n debugLog('reconnecting in', delay, 'ms');\n this.reconnectDelayMs = Math.min(this.reconnectDelayMs * 2, reconnectMaxDelayMs);\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = undefined;\n if (!this.shouldReconnect) {\n return;\n }\n // A failed attempt rejects this promise; onclose then schedules the next retry.\n this.openSocket(defaultConnectTimeoutMs).catch(() => {});\n }, delay);\n }\n\n private handleMessage(data: unknown): void {\n if (typeof data !== 'string') {\n debugLog('drop: non-string frame');\n return;\n }\n let raw: unknown;\n try {\n raw = JSON.parse(data);\n } catch {\n debugLog('drop: invalid JSON', data);\n return;\n }\n\n debugLog('recv', raw);\n const parsed = v.safeParse(envelope, raw);\n if (!parsed.success) {\n debugLog('drop: malformed envelope', parsed.issues);\n return;\n }\n const { type, id, ts } = parsed.output;\n\n if (type in eventDataSchemas) {\n const schema = eventDataSchemas[type as keyof EventDataSchemas] as v.GenericSchema;\n const payload = v.safeParse(schema, parsed.output.data);\n if (!payload.success) {\n debugLog('drop: payload validation failed for', type, payload.issues);\n return;\n }\n const event: AnyDeviceEvent = { type, id, ts, data: payload.output };\n debugLog('dispatch', type);\n this.emitTo(type, event);\n this.emitTo('*', event);\n return;\n }\n\n if ((dataLessEvents as readonly string[]).includes(type)) {\n const event: AnyDeviceEvent = { type, id, ts };\n debugLog('dispatch (dataless)', type);\n this.emitTo(type, event);\n this.emitTo('*', event);\n return;\n }\n\n // Unknown type: deliver the raw envelope to '*' only (server may be newer).\n debugLog('drop: unknown type', type);\n this.emitTo('*', { type, id, ts, data: parsed.output.data });\n }\n\n private emitTo(key: string, event: AnyDeviceEvent): void {\n const set = this.listeners.get(key);\n if (set === undefined) {\n return;\n }\n for (const listener of set) {\n try {\n listener(event);\n } catch {\n // One throwing listener must not break dispatch to the others.\n }\n }\n }\n\n private setConnected(connected: boolean): void {\n if (this._connected === connected) {\n return;\n }\n this._connected = connected;\n for (const listener of this.stateListeners) {\n try {\n listener(connected);\n } catch {\n // Ignore throwing state listeners.\n }\n }\n }\n}\n","import { type UpFetch, up } from 'up-fetch';\n\nimport { ComApi } from './api/com';\nimport { EventsApi } from './api/events';\nimport { GpioApi } from './api/gpio';\nimport { HmiApi } from './api/hmi';\nimport { type Information, ManagementApi } from './api/management';\nimport { PowerApi } from './api/power';\nimport { RelaysApi } from './api/relays';\nimport { SessionApi, open_session } from './api/session';\nimport { format_host_for_url } from './host';\n\n/** Structured error thrown for AT1000 API responses carrying `{ code, message, suggestion, path }`. */\nexport class ApiError extends Error {\n readonly code: string;\n /** Raw human-readable server message (without code/suggestion/path). */\n readonly detail: string;\n readonly suggestion: string;\n readonly path: string;\n\n constructor(body: { code: string; message: string; suggestion: string; path: string }) {\n const formattedSuggestion = body.suggestion.replace(/\\n/g, '\\n ');\n super(\n `${body.message} (${body.code})\\n Suggestion: ${formattedSuggestion}\\n Path: ${body.path}`,\n );\n this.code = body.code;\n this.detail = body.message;\n this.suggestion = body.suggestion;\n this.path = body.path;\n }\n}\n\n/** Type guard for the AT1000 structured error body. */\nfunction isApiErrorBody(\n value: unknown,\n): value is { code: string; message: string; suggestion: string; path: string } {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return ['code', 'message', 'suggestion', 'path'].every((key) => typeof record[key] === 'string');\n}\n\n/**\n * Shared rejection handler for every AT1000 up-fetch client. Parses a structured\n * `{ code, message, suggestion, path }` body into an {@link ApiError}, otherwise\n * throws a generic error carrying the HTTP status. Written once so the per-client\n * factory and `open_session` share one code path.\n */\nexport async function parseApiError(response: Response, method: string): Promise<never> {\n let errorData: unknown;\n const contentType = response.headers.get('content-type');\n try {\n errorData = contentType?.includes('application/json')\n ? await response.json()\n : await response.text();\n } catch {\n errorData = 'Failed to parse response body';\n }\n\n if (isApiErrorBody(errorData)) {\n throw new ApiError(errorData);\n }\n\n throw new Error(\n `API request to ${method} ${response.url} failed with status ${response.status}: ${\n typeof errorData === 'string' ? errorData : JSON.stringify(errorData)\n }`,\n );\n}\n\n/** Options for opening a device. */\nexport interface OpenOptions {\n /** Open read-only: skip `session/open`, mint no token, send no session header. */\n readonly?: boolean;\n /** Human-readable holder label shown to other clients and on the front panel. */\n label?: string;\n}\n\n/** @hideconstructor */\nexport class AT1000Base {\n /**\n * IP address or hostname of the AT1000 device\n */\n public readonly host: string;\n /**\n * Device information\n */\n public readonly info: Information;\n /**\n * Session token minted by `open()`, or `undefined` for a read-only or legacy\n * (pre-session) client. Sent as the `X-AT1000-Session` header on every request.\n */\n public readonly token: string | undefined;\n /**\n * `false` only when a pre-session server was detected during an exclusive\n * `open()` (no `/v0/session/*` routes). Read-only opens never probe and report `true`.\n */\n public readonly sessionSupported: boolean;\n\n private fetch: UpFetch;\n /**\n * COM API\n */\n public readonly com: ComApi;\n /**\n * HMI API\n */\n public readonly hmi: HmiApi;\n /**\n * GPIO API\n */\n public readonly gpio: GpioApi;\n /**\n * Management API\n */\n public readonly management: ManagementApi;\n /**\n * Power management API\n */\n public readonly power: PowerApi;\n /**\n * Relays API\n */\n public readonly relays: RelaysApi;\n /**\n * Real-time events API (WebSocket). Call `events.connect()` then `events.on(...)`.\n */\n public readonly events: EventsApi;\n /**\n * Session API. Read the current holder via `session.state()`.\n */\n public readonly session: SessionApi;\n\n constructor(host: string, info: Information, token?: string, sessionSupported = true) {\n this.host = host;\n this.info = info;\n this.token = token;\n this.sessionSupported = sessionSupported;\n\n this.fetch = up(\n fetch,\n () => ({\n baseUrl: `http://${format_host_for_url(this.host)}/v0`,\n timeout: 1000,\n headers: this.token\n ? { 'X-AT1000-Session': this.token }\n : undefined,\n parseRejected: (response, request) => parseApiError(response, request.method),\n }),\n );\n\n this.com = new ComApi(this.fetch);\n this.hmi = new HmiApi(this.fetch);\n this.gpio = new GpioApi(this.fetch, this.info);\n this.management = new ManagementApi(this.fetch, this.host);\n this.power = new PowerApi(this.fetch, this.info);\n this.relays = new RelaysApi(this.fetch);\n this.events = new EventsApi(this.host);\n this.session = new SessionApi(this.fetch);\n }\n\n async reset() {\n await this.com.reset();\n await this.hmi.reset();\n await this.gpio.reset();\n await this.power.reset();\n await this.relays.reset();\n }\n\n protected static async openBase(\n host: string,\n options?: OpenOptions,\n session?: { kind: 'remote' | 'project'; project?: string; defaultLabel?: string },\n ): Promise<AT1000Base> {\n if (!host?.trim()) {\n throw new Error(\n 'No device address provided. Pass a host from findDevices() or findLocalDevice().',\n );\n }\n const base = `http://${format_host_for_url(host)}/v0`;\n\n // Re-fetch info to validate reachability (bare client, no session header yet).\n const bare = up(\n fetch,\n () => ({\n baseUrl: base,\n timeout: 1000,\n parseRejected: (response, request) =>\n parseApiError(response, request.method),\n }),\n );\n const info = await new ManagementApi(bare, host).info();\n\n if (options?.readonly) {\n return new AT1000Base(host, info);\n }\n\n const token = await open_session(base, {\n kind: session?.kind ?? 'remote',\n label: options?.label ?? session?.defaultLabel,\n project: session?.project,\n });\n // `undefined` => pre-session server: keep a working, tokenless client.\n return token === undefined\n ? new AT1000Base(host, info, undefined, false)\n : new AT1000Base(host, info, token);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events-Cf7iAMZP.d.cts","names":[],"sources":["../src/api/events.ts"],"mappings":";;cAiCM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCA;KAgBD,0BAA0B;;KAGnB,kBAAkB,2BAA2B;KAEpD,kBACF,WAAW;EACV,MAAM;EACN;EACA;EACA,MAAM,EAAE,YAAY,iBAAiB;WAEjC;KAEH;EAAkB,cAAc;EAAyB;EAAa;;;KAG/D,cAAc,eAAe;;;;;KAM7B,iBAAiB;EAC3B;EACA;EACA;EACA;;KAIG,iBAAiB;;cAST;mBAUkB;UATrB;mBACS;mBACA;UACT;UACA;UACA;UACA;UACA;EAEqB,YAAA;;MAGzB;;;;;;;EAUE,QAAQ;IAAY;MAAqB;;EAsB/C;;;;;;EAmBA,GAAG,UAAU,WACX,MAAM,GACN,WAAW,OAAO,QAAQ;IAAe,MAAM;;EAEjD,GAAG,WAAW,WAAW,OAAO;;EAqBhC,cAAc,UAAU;UAOhB;UA+DA;UAiBA;UAgDA;UAcA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events-Cf7iAMZP.d.mts","names":[],"sources":["../src/api/events.ts"],"mappings":";;cAiCM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCA;KAgBD,0BAA0B;;KAGnB,kBAAkB,2BAA2B;KAEpD,kBACF,WAAW;EACV,MAAM;EACN;EACA;EACA,MAAM,EAAE,YAAY,iBAAiB;WAEjC;KAEH;EAAkB,cAAc;EAAyB;EAAa;;;KAG/D,cAAc,eAAe;;;;;KAM7B,iBAAiB;EAC3B;EACA;EACA;EACA;;KAIG,iBAAiB;;cAST;mBAUkB;UATrB;mBACS;mBACA;UACT;UACA;UACA;UACA;UACA;EAEqB,YAAA;;MAGzB;;;;;;;EAUE,QAAQ;IAAY;MAAqB;;EAsB/C;;;;;;EAmBA,GAAG,UAAU,WACX,MAAM,GACN,WAAW,OAAO,QAAQ;IAAe,MAAM;;EAEjD,GAAG,WAAW,WAAW,OAAO;;EAqBhC,cAAc,UAAU;UAOhB;UA+DA;UAiBA;UAgDA;UAcA"}
|
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
import { t as AnalogOutputLevel } from "./common-Cv6nZZS9.cjs";
|
|
2
|
-
import { Information } from "./management.cjs";
|
|
3
|
-
import { UpFetch } from "up-fetch";
|
|
4
|
-
import * as v from "valibot";
|
|
5
|
-
//#region src/api/gpio.d.ts
|
|
6
|
-
declare const analogInputConfiguration: v.ObjectSchema<{
|
|
7
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
8
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
9
|
-
}, undefined>;
|
|
10
|
-
declare const analogOutputConfiguration: v.ObjectSchema<{
|
|
11
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
12
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
13
|
-
readonly value: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
|
|
14
|
-
}, undefined>;
|
|
15
|
-
/**
|
|
16
|
-
* Input thresholds `vil` and `vih` are in [-25, 25] V, inclusive.
|
|
17
|
-
*/
|
|
18
|
-
declare const digitalInputConfiguration: v.ObjectSchema<{
|
|
19
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
20
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
21
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
22
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
23
|
-
}, undefined>;
|
|
24
|
-
/**
|
|
25
|
-
* Readback thresholds `vil` and `vih` are in [-25, 25] V, inclusive.
|
|
26
|
-
* Output levels `vol` and `voh` are in [0, 24] V, inclusive.
|
|
27
|
-
*/
|
|
28
|
-
declare const digitalOutputConfiguration: v.ObjectSchema<{
|
|
29
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
30
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
31
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
32
|
-
readonly vol: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
33
|
-
readonly voh: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
34
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
35
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
36
|
-
}, undefined>;
|
|
37
|
-
/**
|
|
38
|
-
* Readback thresholds `vil` and `vih` are in [-25, 25] V, inclusive.
|
|
39
|
-
*/
|
|
40
|
-
declare const openDrainConfiguration: v.ObjectSchema<{
|
|
41
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
42
|
-
readonly direction: v.LiteralSchema<"open_drain", undefined>;
|
|
43
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
44
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
45
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
46
|
-
}, undefined>;
|
|
47
|
-
type AnalogInputConfiguration = v.InferOutput<typeof analogInputConfiguration>;
|
|
48
|
-
type AnalogOutputConfiguration = v.InferOutput<typeof analogOutputConfiguration>;
|
|
49
|
-
type DigitalInputConfiguration = v.InferOutput<typeof digitalInputConfiguration>;
|
|
50
|
-
type DigitalOutputConfiguration = v.InferOutput<typeof digitalOutputConfiguration>;
|
|
51
|
-
type OpenDrainConfiguration = v.InferOutput<typeof openDrainConfiguration>;
|
|
52
|
-
declare const partialAnalogOutputConfiguration: Omit<v.ObjectSchema<{
|
|
53
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
54
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
55
|
-
readonly value: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
|
|
56
|
-
}, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
|
|
57
|
-
readonly entries: Omit<{
|
|
58
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
59
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
60
|
-
readonly value: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
|
|
61
|
-
}, "mode" | "direction">;
|
|
62
|
-
readonly "~standard": v.StandardProps<{
|
|
63
|
-
value?: number | undefined;
|
|
64
|
-
}, {
|
|
65
|
-
value?: number | undefined;
|
|
66
|
-
}>;
|
|
67
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
68
|
-
value?: number | undefined;
|
|
69
|
-
}, v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MaxValueIssue<number, 24>>;
|
|
70
|
-
readonly "~types"?: {
|
|
71
|
-
readonly input: {
|
|
72
|
-
value?: number | undefined;
|
|
73
|
-
};
|
|
74
|
-
readonly output: {
|
|
75
|
-
value?: number | undefined;
|
|
76
|
-
};
|
|
77
|
-
readonly issue: v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MaxValueIssue<number, 24>;
|
|
78
|
-
} | undefined;
|
|
79
|
-
};
|
|
80
|
-
type PartialAnalogOutputConfiguration = v.InferOutput<typeof partialAnalogOutputConfiguration>;
|
|
81
|
-
declare const partialDigitalInputConfiguration: Omit<v.ObjectSchema<{
|
|
82
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
83
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
84
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
85
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
86
|
-
}, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
|
|
87
|
-
readonly entries: Omit<{
|
|
88
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
89
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
90
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
91
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
92
|
-
}, "mode" | "direction">;
|
|
93
|
-
readonly "~standard": v.StandardProps<{
|
|
94
|
-
vil: number;
|
|
95
|
-
vih: number;
|
|
96
|
-
}, {
|
|
97
|
-
vil: number;
|
|
98
|
-
vih: number;
|
|
99
|
-
}>;
|
|
100
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
101
|
-
vil: number;
|
|
102
|
-
vih: number;
|
|
103
|
-
}, v.NumberIssue | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25>>;
|
|
104
|
-
readonly "~types"?: {
|
|
105
|
-
readonly input: {
|
|
106
|
-
vil: number;
|
|
107
|
-
vih: number;
|
|
108
|
-
};
|
|
109
|
-
readonly output: {
|
|
110
|
-
vil: number;
|
|
111
|
-
vih: number;
|
|
112
|
-
};
|
|
113
|
-
readonly issue: v.NumberIssue | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25>;
|
|
114
|
-
} | undefined;
|
|
115
|
-
};
|
|
116
|
-
type PartialDigitalInputConfiguration = v.InferOutput<typeof partialDigitalInputConfiguration>;
|
|
117
|
-
declare const partialDigitalOutputConfiguration: Omit<Omit<v.ObjectSchema<{
|
|
118
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
119
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
120
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
121
|
-
readonly vol: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
122
|
-
readonly voh: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
123
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
124
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
125
|
-
}, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
|
|
126
|
-
readonly entries: Omit<{
|
|
127
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
128
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
129
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
130
|
-
readonly vol: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
131
|
-
readonly voh: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
132
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
133
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
134
|
-
}, "mode" | "direction">;
|
|
135
|
-
readonly "~standard": v.StandardProps<{
|
|
136
|
-
value: number | boolean;
|
|
137
|
-
vil: number;
|
|
138
|
-
vih: number;
|
|
139
|
-
vol: number;
|
|
140
|
-
voh: number;
|
|
141
|
-
}, {
|
|
142
|
-
value: boolean;
|
|
143
|
-
vil: number;
|
|
144
|
-
vih: number;
|
|
145
|
-
vol: number;
|
|
146
|
-
voh: number;
|
|
147
|
-
}>;
|
|
148
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
149
|
-
value: boolean;
|
|
150
|
-
vil: number;
|
|
151
|
-
vih: number;
|
|
152
|
-
vol: number;
|
|
153
|
-
voh: number;
|
|
154
|
-
}, v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.MaxValueIssue<number, 24> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>>;
|
|
155
|
-
readonly "~types"?: {
|
|
156
|
-
readonly input: {
|
|
157
|
-
value: number | boolean;
|
|
158
|
-
vil: number;
|
|
159
|
-
vih: number;
|
|
160
|
-
vol: number;
|
|
161
|
-
voh: number;
|
|
162
|
-
};
|
|
163
|
-
readonly output: {
|
|
164
|
-
value: boolean;
|
|
165
|
-
vil: number;
|
|
166
|
-
vih: number;
|
|
167
|
-
vol: number;
|
|
168
|
-
voh: number;
|
|
169
|
-
};
|
|
170
|
-
readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.MaxValueIssue<number, 24> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>;
|
|
171
|
-
} | undefined;
|
|
172
|
-
}, "~types" | "~run" | "~standard" | "entries"> & {
|
|
173
|
-
readonly entries: {
|
|
174
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
175
|
-
readonly vil: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>, undefined>;
|
|
176
|
-
readonly vih: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>, undefined>;
|
|
177
|
-
readonly vol: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
178
|
-
readonly voh: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
179
|
-
};
|
|
180
|
-
readonly "~standard": v.StandardProps<{
|
|
181
|
-
value: number | boolean;
|
|
182
|
-
vil?: number | undefined;
|
|
183
|
-
vih?: number | undefined;
|
|
184
|
-
vol: number;
|
|
185
|
-
voh: number;
|
|
186
|
-
}, {
|
|
187
|
-
value: boolean;
|
|
188
|
-
vil?: number | undefined;
|
|
189
|
-
vih?: number | undefined;
|
|
190
|
-
vol: number;
|
|
191
|
-
voh: number;
|
|
192
|
-
}>;
|
|
193
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
194
|
-
value: boolean;
|
|
195
|
-
vil?: number | undefined;
|
|
196
|
-
vih?: number | undefined;
|
|
197
|
-
vol: number;
|
|
198
|
-
voh: number;
|
|
199
|
-
}, v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.MaxValueIssue<number, 24> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>>;
|
|
200
|
-
readonly "~types"?: {
|
|
201
|
-
readonly input: {
|
|
202
|
-
value: number | boolean;
|
|
203
|
-
vil?: number | undefined;
|
|
204
|
-
vih?: number | undefined;
|
|
205
|
-
vol: number;
|
|
206
|
-
voh: number;
|
|
207
|
-
};
|
|
208
|
-
readonly output: {
|
|
209
|
-
value: boolean;
|
|
210
|
-
vil?: number | undefined;
|
|
211
|
-
vih?: number | undefined;
|
|
212
|
-
vol: number;
|
|
213
|
-
voh: number;
|
|
214
|
-
};
|
|
215
|
-
readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, 0> | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.MaxValueIssue<number, 24> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>;
|
|
216
|
-
} | undefined;
|
|
217
|
-
};
|
|
218
|
-
type PartialDigitalOutputConfiguration = v.InferInput<typeof partialDigitalOutputConfiguration>;
|
|
219
|
-
declare const partialOpenDrainConfiguration: Omit<v.ObjectSchema<{
|
|
220
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
221
|
-
readonly direction: v.LiteralSchema<"open_drain", undefined>;
|
|
222
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
223
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
224
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
225
|
-
}, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
|
|
226
|
-
readonly entries: Omit<{
|
|
227
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
228
|
-
readonly direction: v.LiteralSchema<"open_drain", undefined>;
|
|
229
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
230
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
231
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
232
|
-
}, "mode" | "direction">;
|
|
233
|
-
readonly "~standard": v.StandardProps<{
|
|
234
|
-
value: number | boolean;
|
|
235
|
-
vil: number;
|
|
236
|
-
vih: number;
|
|
237
|
-
}, {
|
|
238
|
-
value: boolean;
|
|
239
|
-
vil: number;
|
|
240
|
-
vih: number;
|
|
241
|
-
}>;
|
|
242
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
243
|
-
value: boolean;
|
|
244
|
-
vil: number;
|
|
245
|
-
vih: number;
|
|
246
|
-
}, v.BooleanIssue | v.NumberIssue | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>>;
|
|
247
|
-
readonly "~types"?: {
|
|
248
|
-
readonly input: {
|
|
249
|
-
value: number | boolean;
|
|
250
|
-
vil: number;
|
|
251
|
-
vih: number;
|
|
252
|
-
};
|
|
253
|
-
readonly output: {
|
|
254
|
-
value: boolean;
|
|
255
|
-
vil: number;
|
|
256
|
-
vih: number;
|
|
257
|
-
};
|
|
258
|
-
readonly issue: v.BooleanIssue | v.NumberIssue | v.ObjectIssue | v.MinValueIssue<number, -25> | v.MaxValueIssue<number, 25> | v.UnionIssue<v.BooleanIssue | v.NumberIssue>;
|
|
259
|
-
} | undefined;
|
|
260
|
-
};
|
|
261
|
-
type PartialOpenDrainConfiguration = v.InferOutput<typeof partialOpenDrainConfiguration>;
|
|
262
|
-
declare const digitalState: v.ObjectSchema<{
|
|
263
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
264
|
-
}, undefined>;
|
|
265
|
-
declare const analogState: v.ObjectSchema<{
|
|
266
|
-
readonly value: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
267
|
-
}, undefined>;
|
|
268
|
-
declare const syncConfiguration: v.ObjectSchema<{
|
|
269
|
-
readonly action: v.PicklistSchema<["release", "hold"], "Invalid sync action">;
|
|
270
|
-
}, undefined>;
|
|
271
|
-
type SyncConfiguration = v.InferOutput<typeof syncConfiguration>;
|
|
272
|
-
declare const syncState: v.ObjectSchema<{
|
|
273
|
-
readonly hold_state: v.PicklistSchema<["held", "released"], undefined>;
|
|
274
|
-
}, undefined>;
|
|
275
|
-
type SyncState = v.InferOutput<typeof syncState>;
|
|
276
|
-
declare const gpioConfiguration: v.UnionSchema<[v.ObjectSchema<{
|
|
277
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
278
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
279
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
280
|
-
readonly vol: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
281
|
-
readonly voh: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>;
|
|
282
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
283
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
284
|
-
}, undefined>, v.ObjectSchema<{
|
|
285
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
286
|
-
readonly direction: v.LiteralSchema<"open_drain", undefined>;
|
|
287
|
-
readonly value: v.SchemaWithPipe<readonly [v.UnionSchema<[v.BooleanSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.ToBooleanAction<number | boolean>]>;
|
|
288
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
289
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
290
|
-
}, undefined>, v.ObjectSchema<{
|
|
291
|
-
readonly mode: v.LiteralSchema<"digital", undefined>;
|
|
292
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
293
|
-
readonly vil: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
294
|
-
readonly vih: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -25, undefined>, v.MaxValueAction<number, 25, undefined>]>;
|
|
295
|
-
}, undefined>, v.ObjectSchema<{
|
|
296
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
297
|
-
readonly direction: v.LiteralSchema<"output", undefined>;
|
|
298
|
-
readonly value: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
|
|
299
|
-
}, undefined>, v.ObjectSchema<{
|
|
300
|
-
readonly mode: v.LiteralSchema<"analog", undefined>;
|
|
301
|
-
readonly direction: v.LiteralSchema<"input", undefined>;
|
|
302
|
-
}, undefined>], undefined>;
|
|
303
|
-
type GpioConfiguration = v.InferOutput<typeof gpioConfiguration>;
|
|
304
|
-
/** @hideconstructor */
|
|
305
|
-
declare class GpioApi {
|
|
306
|
-
private readonly fetch;
|
|
307
|
-
private count;
|
|
308
|
-
constructor(fetch: UpFetch, info: Information);
|
|
309
|
-
/**
|
|
310
|
-
* Resets all IO configurations to default.
|
|
311
|
-
*/
|
|
312
|
-
reset(): Promise<void>;
|
|
313
|
-
/**
|
|
314
|
-
* Access a specific digital IO pin by id.
|
|
315
|
-
* @param io The IO pin id.
|
|
316
|
-
* @returns The digital IO instance.
|
|
317
|
-
*/
|
|
318
|
-
digital(io: number): DigitalIO;
|
|
319
|
-
/**
|
|
320
|
-
* Access a specific analog IO pin by id.
|
|
321
|
-
* @param io The IO pin id.
|
|
322
|
-
* @returns The analog IO instance.
|
|
323
|
-
*/
|
|
324
|
-
analog(io: number): AnalogIO;
|
|
325
|
-
/**
|
|
326
|
-
* Holds the current state of all GPIO pins.
|
|
327
|
-
* @returns The applied sync state.
|
|
328
|
-
*/
|
|
329
|
-
hold(): Promise<SyncConfiguration>;
|
|
330
|
-
/**
|
|
331
|
-
* Releases control of the IO pins, allowing external control.
|
|
332
|
-
*
|
|
333
|
-
* This also sets the device as a slave.
|
|
334
|
-
*
|
|
335
|
-
* @returns The applied sync state.
|
|
336
|
-
*/
|
|
337
|
-
release(): Promise<SyncConfiguration>;
|
|
338
|
-
/**
|
|
339
|
-
* Reads back the current configuration of a specific IO pin.
|
|
340
|
-
* @param io The IO pin id.
|
|
341
|
-
* @returns The pin's current configuration.
|
|
342
|
-
*/
|
|
343
|
-
read_config(io: number): Promise<GpioConfiguration>;
|
|
344
|
-
/**
|
|
345
|
-
* Reads the current hold state of all GPIO pins.
|
|
346
|
-
* @returns The current sync state.
|
|
347
|
-
*/
|
|
348
|
-
read_sync(): Promise<SyncState>;
|
|
349
|
-
}
|
|
350
|
-
/** @hideconstructor */
|
|
351
|
-
declare class DigitalIO {
|
|
352
|
-
private readonly fetch;
|
|
353
|
-
readonly id: number;
|
|
354
|
-
constructor(fetch: UpFetch, id: number);
|
|
355
|
-
/**
|
|
356
|
-
* Configure the pin as a digital input.
|
|
357
|
-
* @param config The digital input configuration.
|
|
358
|
-
* @returns The applied configuration.
|
|
359
|
-
*/
|
|
360
|
-
configure_input(config: PartialDigitalInputConfiguration): Promise<DigitalInputConfiguration>;
|
|
361
|
-
/**
|
|
362
|
-
* Configures the pin as a digital output.
|
|
363
|
-
* @param config The digital output configuration.
|
|
364
|
-
* @returns The applied configuration.
|
|
365
|
-
*/
|
|
366
|
-
configure_output(config: PartialDigitalOutputConfiguration): Promise<DigitalOutputConfiguration>;
|
|
367
|
-
/**
|
|
368
|
-
* Reads the current state of the pin.
|
|
369
|
-
* @returns The current state of the pin.
|
|
370
|
-
*/
|
|
371
|
-
read(): Promise<boolean>;
|
|
372
|
-
/**
|
|
373
|
-
* Writes a value to the pin.
|
|
374
|
-
* @param value The value to write.
|
|
375
|
-
* @returns The written value.
|
|
376
|
-
*/
|
|
377
|
-
write(value: boolean | number): Promise<boolean>;
|
|
378
|
-
/**
|
|
379
|
-
* Configure the pin as an open drain output.
|
|
380
|
-
* @param config The open drain configuration.
|
|
381
|
-
* @returns The applied configuration.
|
|
382
|
-
*/
|
|
383
|
-
configure_open_drain(config: PartialOpenDrainConfiguration): Promise<OpenDrainConfiguration>;
|
|
384
|
-
}
|
|
385
|
-
/** @hideconstructor */
|
|
386
|
-
declare class AnalogIO {
|
|
387
|
-
private readonly fetch;
|
|
388
|
-
readonly id: number;
|
|
389
|
-
constructor(fetch: UpFetch, id: number);
|
|
390
|
-
/**
|
|
391
|
-
* Configures the pin as an analog input.
|
|
392
|
-
* @returns The applied configuration.
|
|
393
|
-
* @returns The applied configuration.
|
|
394
|
-
*/
|
|
395
|
-
configure_input(): Promise<AnalogInputConfiguration>;
|
|
396
|
-
/**
|
|
397
|
-
* Configures the pin as an analog output.
|
|
398
|
-
* @param config The analog output configuration.
|
|
399
|
-
* @returns The applied configuration.
|
|
400
|
-
*/
|
|
401
|
-
configure_output(value: AnalogOutputLevel): Promise<AnalogOutputConfiguration>;
|
|
402
|
-
/**
|
|
403
|
-
* Reads the current state of the pin.
|
|
404
|
-
* @returns The current state of the pin.
|
|
405
|
-
*/
|
|
406
|
-
read(): Promise<number>;
|
|
407
|
-
/**
|
|
408
|
-
* Writes a value to the pin.
|
|
409
|
-
* @param value The value to write.
|
|
410
|
-
* @returns The written value.
|
|
411
|
-
*/
|
|
412
|
-
write(value: number): Promise<number>;
|
|
413
|
-
}
|
|
414
|
-
//#endregion
|
|
415
|
-
export { openDrainConfiguration as C, gpioConfiguration as S, analogOutputConfiguration as _, DigitalInputConfiguration as a, digitalOutputConfiguration as b, GpioConfiguration as c, PartialDigitalInputConfiguration as d, PartialDigitalOutputConfiguration as f, analogInputConfiguration as g, SyncState as h, DigitalIO as i, OpenDrainConfiguration as l, SyncConfiguration as m, AnalogInputConfiguration as n, DigitalOutputConfiguration as o, PartialOpenDrainConfiguration as p, AnalogOutputConfiguration as r, GpioApi as s, AnalogIO as t, PartialAnalogOutputConfiguration as u, analogState as v, syncState as w, digitalState as x, digitalInputConfiguration as y };
|
|
416
|
-
//# sourceMappingURL=gpio-Bk1VEKYF.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gpio-Bk1VEKYF.d.cts","names":[],"sources":["../src/api/gpio.ts"],"mappings":";;;;;cASa,0BAAwB,EAAA;;;;cAIxB,2BAAyB,EAAA;;;;;;;;cAQzB,2BAAyB,EAAA;;;;;;;;;;cAUzB,4BAA0B,EAAA;;;;;;;;;;;;cAY1B,wBAAsB,EAAA;;;;;;;KAOvB,2BAA2B,EAAE,mBAAmB;KAChD,4BAA4B,EAAE,mBAAmB;KACjD,4BAA4B,EAAE,mBAAmB;KACjD,6BAA6B,EAAE,mBAAmB;KAClD,yBAAyB,EAAE,mBAAmB;cAEpD,kCAAgC,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAC1B,mCAAmC,EAAE,mBACxC;cAEH,kCAAgC,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAC1B,mCAAmC,EAAE,mBACxC;cAEH,mCAAiC,KAAA,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAI3B,oCAAoC,EAAE,kBACzC;cAEH,+BAA6B,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KACvB,gCAAgC,EAAE,mBAAmB;cAEpD,cAAY,EAAA;;;cACZ,aAAW,EAAA;;;cAElB,mBAAiB,EAAA;mBAAjB,EAAA;;KACM,oBAAoB,EAAE,mBAAmB;cAExC,WAAS,EAAA;uBAAT,EAAA;;KACD,YAAY,EAAE,mBAAmB;cAEhC,mBAAiB,EAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOlB,oBAAoB,EAAE,mBAAmB;;cAGxC;mBAGkB;UAFrB;EAEqB,YAAA,OAAO,SAAS,MAAM;;;;EAOnD,SAAS;;;;;;EAST,QAAQ,aAAa;;;;;;EAiBrB,OAAO,aAAa;;;;;EAgBpB,QAAQ,QAAQ;;;;;;;;EAehB,WAAW,QAAQ;;;;;;EAanB,YAAY,aAAa,QAAQ;;;;;EAgBjC,aAAa,QAAQ;;;cAMV;mBACkB;WAAgC;EAAhC,YAAA,OAAO,SAAyB;;;;;;EAO7D,gBAAgB,QAAQ,mCAAmC,QAAQ;;;;;;EAgBnE,iBAAiB,QAAQ,oCAAoC,QAAQ;;;;;EAwB/D,QAAQ;;;;;;EASR,MAAM,0BAA0B;;;;;;EActC,qBAAqB,QAAQ,gCAAgC,QAAQ;;;cAa1D;mBACkB;WAAgC;EAAhC,YAAA,OAAO,SAAyB;;;;;;EAO7D,mBAAmB,QAAQ;;;;;;EAa3B,iBAAiB,OAAO,oBAAoB,QAAQ;;;;;EAe9C,QAAQ;;;;;;EASR,MAAM,gBAAgB"}
|