@opendisplay/opendisplay 1.1.0 → 1.1.2
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/index.cjs +50 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +50 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -664,6 +664,7 @@ declare class OpenDisplayDevice {
|
|
|
664
664
|
compress?: boolean;
|
|
665
665
|
onProgress?: (current: number, total: number, stage: string) => void;
|
|
666
666
|
onStatusChange?: (message: string) => void;
|
|
667
|
+
onUploadComplete?: (uploadTimeSeconds: number) => void;
|
|
667
668
|
}): Promise<void>;
|
|
668
669
|
/**
|
|
669
670
|
* Execute image upload using compressed or uncompressed protocol.
|
package/dist/index.d.ts
CHANGED
|
@@ -664,6 +664,7 @@ declare class OpenDisplayDevice {
|
|
|
664
664
|
compress?: boolean;
|
|
665
665
|
onProgress?: (current: number, total: number, stage: string) => void;
|
|
666
666
|
onStatusChange?: (message: string) => void;
|
|
667
|
+
onUploadComplete?: (uploadTimeSeconds: number) => void;
|
|
667
668
|
}): Promise<void>;
|
|
668
669
|
/**
|
|
669
670
|
* Execute image upload using compressed or uncompressed protocol.
|
package/dist/index.js
CHANGED
|
@@ -250,6 +250,8 @@ var CommandCode = /* @__PURE__ */ ((CommandCode3) => {
|
|
|
250
250
|
CommandCode3[CommandCode3["DIRECT_WRITE_START"] = 112] = "DIRECT_WRITE_START";
|
|
251
251
|
CommandCode3[CommandCode3["DIRECT_WRITE_DATA"] = 113] = "DIRECT_WRITE_DATA";
|
|
252
252
|
CommandCode3[CommandCode3["DIRECT_WRITE_END"] = 114] = "DIRECT_WRITE_END";
|
|
253
|
+
CommandCode3[CommandCode3["REFRESH_COMPLETE"] = 115] = "REFRESH_COMPLETE";
|
|
254
|
+
CommandCode3[CommandCode3["REFRESH_TIMEOUT"] = 116] = "REFRESH_TIMEOUT";
|
|
253
255
|
return CommandCode3;
|
|
254
256
|
})(CommandCode || {});
|
|
255
257
|
|
|
@@ -1340,6 +1342,16 @@ var BLEConnection = class {
|
|
|
1340
1342
|
}
|
|
1341
1343
|
return this.notificationQueue.dequeue(timeoutMs);
|
|
1342
1344
|
}
|
|
1345
|
+
/**
|
|
1346
|
+
* Clear the notification queue.
|
|
1347
|
+
*
|
|
1348
|
+
* Useful for clearing any stale responses before starting a new operation.
|
|
1349
|
+
* This drains any buffered notifications and cancels pending read requests.
|
|
1350
|
+
*/
|
|
1351
|
+
clearQueue() {
|
|
1352
|
+
console.debug(`Clearing notification queue (${this.notificationQueue.size} buffered)`);
|
|
1353
|
+
this.notificationQueue.clear("Queue cleared by request");
|
|
1354
|
+
}
|
|
1343
1355
|
/**
|
|
1344
1356
|
* Handle incoming BLE notifications.
|
|
1345
1357
|
*
|
|
@@ -1675,6 +1687,7 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1675
1687
|
const compress = options.compress ?? true;
|
|
1676
1688
|
const onProgress = options.onProgress;
|
|
1677
1689
|
const onStatusChange = options.onStatusChange;
|
|
1690
|
+
const onUploadComplete = options.onUploadComplete;
|
|
1678
1691
|
console.log(
|
|
1679
1692
|
`Uploading image (${this.width}x${this.height}, ${ColorScheme4[this.colorScheme]})`
|
|
1680
1693
|
);
|
|
@@ -1700,7 +1713,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1700
1713
|
compressedData,
|
|
1701
1714
|
uncompressedSize: encodedData.length,
|
|
1702
1715
|
onProgress,
|
|
1703
|
-
onStatusChange
|
|
1716
|
+
onStatusChange,
|
|
1717
|
+
onUploadComplete
|
|
1704
1718
|
});
|
|
1705
1719
|
} else {
|
|
1706
1720
|
console.log(
|
|
@@ -1711,7 +1725,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1711
1725
|
imageData: encodedData,
|
|
1712
1726
|
refreshMode,
|
|
1713
1727
|
onProgress,
|
|
1714
|
-
onStatusChange
|
|
1728
|
+
onStatusChange,
|
|
1729
|
+
onUploadComplete
|
|
1715
1730
|
});
|
|
1716
1731
|
}
|
|
1717
1732
|
} else {
|
|
@@ -1721,7 +1736,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1721
1736
|
imageData: encodedData,
|
|
1722
1737
|
refreshMode,
|
|
1723
1738
|
onProgress,
|
|
1724
|
-
onStatusChange
|
|
1739
|
+
onStatusChange,
|
|
1740
|
+
onUploadComplete
|
|
1725
1741
|
});
|
|
1726
1742
|
}
|
|
1727
1743
|
console.log("Image upload complete");
|
|
@@ -1738,8 +1754,11 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1738
1754
|
compressedData,
|
|
1739
1755
|
uncompressedSize,
|
|
1740
1756
|
onProgress,
|
|
1741
|
-
onStatusChange
|
|
1757
|
+
onStatusChange,
|
|
1758
|
+
onUploadComplete
|
|
1742
1759
|
} = params;
|
|
1760
|
+
this.connection.clearQueue();
|
|
1761
|
+
const uploadStartTime = Date.now();
|
|
1743
1762
|
let startCmd;
|
|
1744
1763
|
let remainingCompressed = null;
|
|
1745
1764
|
if (useCompression && compressedData && uncompressedSize) {
|
|
@@ -1762,13 +1781,38 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1762
1781
|
autoCompleted = await this.sendDataChunks(imageData, onProgress, onStatusChange);
|
|
1763
1782
|
}
|
|
1764
1783
|
if (!autoCompleted) {
|
|
1765
|
-
onStatusChange?.("Refreshing display...");
|
|
1766
1784
|
const endCmd = buildDirectWriteEndCommand(refreshMode);
|
|
1767
1785
|
await this.connection.writeCommand(endCmd);
|
|
1768
1786
|
response = await this.connection.readResponse(
|
|
1769
|
-
_OpenDisplayDevice.
|
|
1787
|
+
_OpenDisplayDevice.TIMEOUT_ACK
|
|
1770
1788
|
);
|
|
1771
1789
|
validateAckResponse(response, 114 /* DIRECT_WRITE_END */);
|
|
1790
|
+
const uploadTime = (Date.now() - uploadStartTime) / 1e3;
|
|
1791
|
+
onUploadComplete?.(uploadTime);
|
|
1792
|
+
onStatusChange?.(
|
|
1793
|
+
`Upload complete (${uploadTime.toFixed(1)}s), refreshing display...`
|
|
1794
|
+
);
|
|
1795
|
+
const refreshStartTime = Date.now();
|
|
1796
|
+
const refreshResponse = await this.connection.readResponse(
|
|
1797
|
+
_OpenDisplayDevice.TIMEOUT_REFRESH
|
|
1798
|
+
);
|
|
1799
|
+
const [responseCode] = checkResponseType(refreshResponse);
|
|
1800
|
+
if (responseCode === 115 /* REFRESH_COMPLETE */) {
|
|
1801
|
+
const refreshTime = (Date.now() - refreshStartTime) / 1e3;
|
|
1802
|
+
const totalTime = (Date.now() - uploadStartTime) / 1e3;
|
|
1803
|
+
console.log(
|
|
1804
|
+
`Refresh complete (${refreshTime.toFixed(1)}s), total time: ${totalTime.toFixed(1)}s`
|
|
1805
|
+
);
|
|
1806
|
+
onStatusChange?.(
|
|
1807
|
+
`Refresh complete (${refreshTime.toFixed(1)}s)`
|
|
1808
|
+
);
|
|
1809
|
+
} else if (responseCode === 116 /* REFRESH_TIMEOUT */) {
|
|
1810
|
+
throw new ProtocolError("Display refresh timed out");
|
|
1811
|
+
} else {
|
|
1812
|
+
throw new ProtocolError(
|
|
1813
|
+
`Unexpected refresh response: 0x${responseCode.toString(16).padStart(4, "0")}`
|
|
1814
|
+
);
|
|
1815
|
+
}
|
|
1772
1816
|
}
|
|
1773
1817
|
}
|
|
1774
1818
|
/**
|