@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.cjs
CHANGED
|
@@ -306,6 +306,8 @@ var CommandCode = /* @__PURE__ */ ((CommandCode3) => {
|
|
|
306
306
|
CommandCode3[CommandCode3["DIRECT_WRITE_START"] = 112] = "DIRECT_WRITE_START";
|
|
307
307
|
CommandCode3[CommandCode3["DIRECT_WRITE_DATA"] = 113] = "DIRECT_WRITE_DATA";
|
|
308
308
|
CommandCode3[CommandCode3["DIRECT_WRITE_END"] = 114] = "DIRECT_WRITE_END";
|
|
309
|
+
CommandCode3[CommandCode3["REFRESH_COMPLETE"] = 115] = "REFRESH_COMPLETE";
|
|
310
|
+
CommandCode3[CommandCode3["REFRESH_TIMEOUT"] = 116] = "REFRESH_TIMEOUT";
|
|
309
311
|
return CommandCode3;
|
|
310
312
|
})(CommandCode || {});
|
|
311
313
|
|
|
@@ -1396,6 +1398,16 @@ var BLEConnection = class {
|
|
|
1396
1398
|
}
|
|
1397
1399
|
return this.notificationQueue.dequeue(timeoutMs);
|
|
1398
1400
|
}
|
|
1401
|
+
/**
|
|
1402
|
+
* Clear the notification queue.
|
|
1403
|
+
*
|
|
1404
|
+
* Useful for clearing any stale responses before starting a new operation.
|
|
1405
|
+
* This drains any buffered notifications and cancels pending read requests.
|
|
1406
|
+
*/
|
|
1407
|
+
clearQueue() {
|
|
1408
|
+
console.debug(`Clearing notification queue (${this.notificationQueue.size} buffered)`);
|
|
1409
|
+
this.notificationQueue.clear("Queue cleared by request");
|
|
1410
|
+
}
|
|
1399
1411
|
/**
|
|
1400
1412
|
* Handle incoming BLE notifications.
|
|
1401
1413
|
*
|
|
@@ -1731,6 +1743,7 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1731
1743
|
const compress = options.compress ?? true;
|
|
1732
1744
|
const onProgress = options.onProgress;
|
|
1733
1745
|
const onStatusChange = options.onStatusChange;
|
|
1746
|
+
const onUploadComplete = options.onUploadComplete;
|
|
1734
1747
|
console.log(
|
|
1735
1748
|
`Uploading image (${this.width}x${this.height}, ${import_epaper_dithering4.ColorScheme[this.colorScheme]})`
|
|
1736
1749
|
);
|
|
@@ -1756,7 +1769,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1756
1769
|
compressedData,
|
|
1757
1770
|
uncompressedSize: encodedData.length,
|
|
1758
1771
|
onProgress,
|
|
1759
|
-
onStatusChange
|
|
1772
|
+
onStatusChange,
|
|
1773
|
+
onUploadComplete
|
|
1760
1774
|
});
|
|
1761
1775
|
} else {
|
|
1762
1776
|
console.log(
|
|
@@ -1767,7 +1781,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1767
1781
|
imageData: encodedData,
|
|
1768
1782
|
refreshMode,
|
|
1769
1783
|
onProgress,
|
|
1770
|
-
onStatusChange
|
|
1784
|
+
onStatusChange,
|
|
1785
|
+
onUploadComplete
|
|
1771
1786
|
});
|
|
1772
1787
|
}
|
|
1773
1788
|
} else {
|
|
@@ -1777,7 +1792,8 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1777
1792
|
imageData: encodedData,
|
|
1778
1793
|
refreshMode,
|
|
1779
1794
|
onProgress,
|
|
1780
|
-
onStatusChange
|
|
1795
|
+
onStatusChange,
|
|
1796
|
+
onUploadComplete
|
|
1781
1797
|
});
|
|
1782
1798
|
}
|
|
1783
1799
|
console.log("Image upload complete");
|
|
@@ -1794,8 +1810,11 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1794
1810
|
compressedData,
|
|
1795
1811
|
uncompressedSize,
|
|
1796
1812
|
onProgress,
|
|
1797
|
-
onStatusChange
|
|
1813
|
+
onStatusChange,
|
|
1814
|
+
onUploadComplete
|
|
1798
1815
|
} = params;
|
|
1816
|
+
this.connection.clearQueue();
|
|
1817
|
+
const uploadStartTime = Date.now();
|
|
1799
1818
|
let startCmd;
|
|
1800
1819
|
let remainingCompressed = null;
|
|
1801
1820
|
if (useCompression && compressedData && uncompressedSize) {
|
|
@@ -1818,13 +1837,38 @@ var OpenDisplayDevice = class _OpenDisplayDevice {
|
|
|
1818
1837
|
autoCompleted = await this.sendDataChunks(imageData, onProgress, onStatusChange);
|
|
1819
1838
|
}
|
|
1820
1839
|
if (!autoCompleted) {
|
|
1821
|
-
onStatusChange?.("Refreshing display...");
|
|
1822
1840
|
const endCmd = buildDirectWriteEndCommand(refreshMode);
|
|
1823
1841
|
await this.connection.writeCommand(endCmd);
|
|
1824
1842
|
response = await this.connection.readResponse(
|
|
1825
|
-
_OpenDisplayDevice.
|
|
1843
|
+
_OpenDisplayDevice.TIMEOUT_ACK
|
|
1826
1844
|
);
|
|
1827
1845
|
validateAckResponse(response, 114 /* DIRECT_WRITE_END */);
|
|
1846
|
+
const uploadTime = (Date.now() - uploadStartTime) / 1e3;
|
|
1847
|
+
onUploadComplete?.(uploadTime);
|
|
1848
|
+
onStatusChange?.(
|
|
1849
|
+
`Upload complete (${uploadTime.toFixed(1)}s), refreshing display...`
|
|
1850
|
+
);
|
|
1851
|
+
const refreshStartTime = Date.now();
|
|
1852
|
+
const refreshResponse = await this.connection.readResponse(
|
|
1853
|
+
_OpenDisplayDevice.TIMEOUT_REFRESH
|
|
1854
|
+
);
|
|
1855
|
+
const [responseCode] = checkResponseType(refreshResponse);
|
|
1856
|
+
if (responseCode === 115 /* REFRESH_COMPLETE */) {
|
|
1857
|
+
const refreshTime = (Date.now() - refreshStartTime) / 1e3;
|
|
1858
|
+
const totalTime = (Date.now() - uploadStartTime) / 1e3;
|
|
1859
|
+
console.log(
|
|
1860
|
+
`Refresh complete (${refreshTime.toFixed(1)}s), total time: ${totalTime.toFixed(1)}s`
|
|
1861
|
+
);
|
|
1862
|
+
onStatusChange?.(
|
|
1863
|
+
`Refresh complete (${refreshTime.toFixed(1)}s)`
|
|
1864
|
+
);
|
|
1865
|
+
} else if (responseCode === 116 /* REFRESH_TIMEOUT */) {
|
|
1866
|
+
throw new ProtocolError("Display refresh timed out");
|
|
1867
|
+
} else {
|
|
1868
|
+
throw new ProtocolError(
|
|
1869
|
+
`Unexpected refresh response: 0x${responseCode.toString(16).padStart(4, "0")}`
|
|
1870
|
+
);
|
|
1871
|
+
}
|
|
1828
1872
|
}
|
|
1829
1873
|
}
|
|
1830
1874
|
/**
|