@leonardojc/capacitor-ioboard 2.0.18 → 2.1.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.
@@ -219,7 +219,93 @@ public class CapacitorIoboardPlugin extends Plugin implements SerialConnectionMa
219
219
  }
220
220
  }
221
221
 
222
- @PluginMethod
222
+ /**
223
+ * Send a raw frame and block until a complete response is received.
224
+ *
225
+ * Unlike sendRawCommand(), this method:
226
+ * 1. Does NOT flush pending input before writing (avoids discarding board ACKs)
227
+ * 2. Uses a blocking drain-loop to accumulate exactly `expectedResponseBytes` bytes
228
+ * (default 9 = size of an F3 OTA response frame)
229
+ * 3. Returns the raw response bytes directly in call.resolve() — no listener needed
230
+ *
231
+ * This is the correct approach for OTA: one atomic write→read round-trip per packet,
232
+ * matching what the manufacturer's UART.java does with a blocking read().
233
+ *
234
+ * Parameters:
235
+ * data int[] — frame bytes to send (required)
236
+ * expectedResponseBytes int — how many bytes to wait for (default 9)
237
+ * timeoutMs int — total wait timeout in ms (default 5000)
238
+ */
239
+ @PluginMethod
240
+ public void sendFrameAndWaitResponse(PluginCall call) {
241
+ logDebug("📤 sendFrameAndWaitResponse called");
242
+
243
+ if (serialManager == null || !serialManager.isConnected()) {
244
+ call.reject("Not connected to serial port");
245
+ return;
246
+ }
247
+
248
+ try {
249
+ JSArray dataArray = call.getArray("data");
250
+ if (dataArray == null) {
251
+ call.reject("data parameter is required");
252
+ return;
253
+ }
254
+
255
+ final int expectedBytes = call.getInt("expectedResponseBytes", 9);
256
+ final int timeoutMs = call.getInt("timeoutMs", 5000);
257
+ final int delayMs = call.getInt("delayMs", 0); // optional pre-write delay
258
+
259
+ // Build frame byte array
260
+ byte[] frame = new byte[dataArray.length()];
261
+ for (int i = 0; i < dataArray.length(); i++) {
262
+ frame[i] = (byte) dataArray.getInt(i);
263
+ }
264
+
265
+ logDebug("📤 OTA TX (" + frame.length + " bytes): "
266
+ + bytesToHex(frame.length > 20
267
+ ? java.util.Arrays.copyOf(frame, 20) : frame)
268
+ + (frame.length > 20 ? "..." : ""));
269
+
270
+ // Optional pre-write delay (matches manufacturer Thread.sleep(300))
271
+ if (delayMs > 0) {
272
+ Thread.sleep(delayMs);
273
+ }
274
+
275
+ // Write the frame + arm the response accumulator atomically
276
+ serialManager.writeRawNoFlush(frame, expectedBytes);
277
+
278
+ // Wait for ReadThread to accumulate the response
279
+ byte[] response = serialManager.readExact(timeoutMs);
280
+
281
+ if (response == null) {
282
+ call.reject("OTA response timeout (" + timeoutMs + "ms, expected "
283
+ + expectedBytes + " bytes)");
284
+ return;
285
+ }
286
+
287
+ logDebug("📥 OTA RX (" + response.length + " bytes): " + bytesToHex(response));
288
+
289
+ // Return raw bytes as array of unsigned ints
290
+ JSArray responseArray = new JSArray();
291
+ for (byte b : response) {
292
+ responseArray.put(b & 0xFF);
293
+ }
294
+
295
+ JSObject result = new JSObject();
296
+ result.put("success", true);
297
+ result.put("rawData", responseArray);
298
+ result.put("bytesSent", frame.length);
299
+ result.put("bytesReceived", response.length);
300
+ call.resolve(result);
301
+
302
+ } catch (Exception e) {
303
+ logError("sendFrameAndWaitResponse error: " + e.getMessage(), e);
304
+ call.reject("sendFrameAndWaitResponse error: " + e.getMessage());
305
+ }
306
+ }
307
+
308
+ @PluginMethod
223
309
  public void getStatus(PluginCall call) {
224
310
  logDebug("📊 getStatus called");
225
311
 
@@ -529,8 +615,7 @@ public class CapacitorIoboardPlugin extends Plugin implements SerialConnectionMa
529
615
  // SerialDataListener implementation
530
616
  @Override
531
617
  public void onDataReceived(byte[] data) {
532
- String dataString = new String(data);
533
- //Log.d(TAG, "Data received: " + dataString);
618
+ //Log.d(TAG, "Data received: " + data.length + " bytes");
534
619
 
535
620
  // Store response for getStatus() waiting
536
621
  synchronized (responseLock) {
@@ -538,8 +623,15 @@ public class CapacitorIoboardPlugin extends Plugin implements SerialConnectionMa
538
623
  responseLock.notifyAll();
539
624
  }
540
625
 
626
+ // Convert byte array to JSArray (array of numbers 0-255)
627
+ // This preserves the raw bytes without corruption
628
+ JSArray dataArray = new JSArray();
629
+ for (byte b : data) {
630
+ dataArray.put(b & 0xFF); // Convert signed byte to unsigned int (0-255)
631
+ }
632
+
541
633
  JSObject result = new JSObject();
542
- result.put("rawData", dataString);
634
+ result.put("rawData", dataArray); // Send as array instead of string
543
635
  result.put("timestamp", System.currentTimeMillis());
544
636
 
545
637
  notifyListeners("dataReceived", result);
@@ -36,6 +36,15 @@ public class SerialConnectionManager {
36
36
  private Handler mainHandler;
37
37
  private SerialDataListener listener;
38
38
  private ExecutorService executorService;
39
+
40
+ // ─── OTA round-trip accumulator (CountDownLatch approach) ─────────────────
41
+ // ReadThread feeds bytes here; readExact() waits on latch until full.
42
+ private final Object otaLock = new Object();
43
+ private byte[] otaBuffer = null;
44
+ private int otaExpectedBytes = 0;
45
+ private int otaReceived = 0;
46
+ private boolean otaReady = false; // set true when full, read once by readExact
47
+ private java.util.concurrent.CountDownLatch otaLatch = null;
39
48
 
40
49
  public SerialConnectionManager() {
41
50
  mainHandler = new Handler(Looper.getMainLooper());
@@ -281,7 +290,87 @@ public class SerialConnectionManager {
281
290
  public boolean isConnected() {
282
291
  return isConnected;
283
292
  }
284
-
293
+
294
+ // ─── OTA-safe write + read ────────────────────────────────────────────────
295
+
296
+ /**
297
+ * Write an OTA frame and prepare to collect `expectedBytes` response bytes.
298
+ *
299
+ * Steps (must all happen atomically before the board responds):
300
+ * 1. Flush any leftover bytes from previous operations.
301
+ * 2. Set up the CountDownLatch accumulator so ReadThread can feed bytes.
302
+ * 3. Write the frame.
303
+ *
304
+ * Follow immediately with readExact(timeoutMs) to wait for the response.
305
+ */
306
+ public void writeRawNoFlush(byte[] data, int expectedBytes) throws java.io.IOException {
307
+ if (!isConnected || serialOutputStream == null) {
308
+ throw new java.io.IOException("Port not open");
309
+ }
310
+ // 1. Flush leftover bytes (garbage from previous commands)
311
+ if (serialInputStream != null) {
312
+ try {
313
+ int leftover = serialInputStream.available();
314
+ if (leftover > 0) {
315
+ byte[] discard = new byte[leftover];
316
+ serialInputStream.read(discard);
317
+ logDebug("writeRawNoFlush: discarded " + leftover + " leftover bytes");
318
+ }
319
+ } catch (java.io.IOException ignored) {}
320
+ }
321
+ // 2. Arm the accumulator BEFORE writing — board may respond very fast
322
+ synchronized (otaLock) {
323
+ otaBuffer = new byte[expectedBytes];
324
+ otaExpectedBytes = expectedBytes;
325
+ otaReceived = 0;
326
+ otaReady = false;
327
+ otaLatch = new java.util.concurrent.CountDownLatch(1);
328
+ }
329
+ logDebug("writeRawNoFlush: " + data.length + " bytes → expecting " + expectedBytes + " response bytes");
330
+ // 3. Write
331
+ serialOutputStream.write(data);
332
+ serialOutputStream.flush();
333
+ }
334
+
335
+ /**
336
+ * Wait for the response bytes collected by the ReadThread after writeRawNoFlush().
337
+ * Returns null on timeout or error.
338
+ */
339
+ public byte[] readExact(int timeoutMs) {
340
+ java.util.concurrent.CountDownLatch latch;
341
+ synchronized (otaLock) {
342
+ latch = otaLatch;
343
+ }
344
+ if (latch == null) {
345
+ logWarning("readExact: no latch — was writeRawNoFlush called?");
346
+ return null;
347
+ }
348
+ try {
349
+ boolean ok = latch.await(timeoutMs, java.util.concurrent.TimeUnit.MILLISECONDS);
350
+ synchronized (otaLock) {
351
+ // Snapshot the result while holding the lock, before clearing
352
+ byte[] result = (ok && otaReady && otaBuffer != null)
353
+ ? java.util.Arrays.copyOf(otaBuffer, otaExpectedBytes)
354
+ : null;
355
+ // Disarm accumulator
356
+ otaBuffer = null;
357
+ otaLatch = null;
358
+ otaExpectedBytes = 0;
359
+ otaReceived = 0;
360
+ otaReady = false;
361
+ if (!ok) logWarning("readExact: timeout (" + timeoutMs + "ms)");
362
+ return result;
363
+ }
364
+ } catch (InterruptedException e) {
365
+ Thread.currentThread().interrupt();
366
+ synchronized (otaLock) {
367
+ otaBuffer = null; otaLatch = null;
368
+ otaExpectedBytes = 0; otaReceived = 0; otaReady = false;
369
+ }
370
+ return null;
371
+ }
372
+ }
373
+
285
374
  /**
286
375
  * Gets the current port path
287
376
  */
@@ -339,15 +428,31 @@ public class SerialConnectionManager {
339
428
  while (isConnected && !Thread.currentThread().isInterrupted()) {
340
429
  try {
341
430
  if (serialInputStream != null) {
342
- // Check if data is available
343
- int available = serialInputStream.available();
344
- if (available > 0) {
345
- // Log.d(TAG, "📨 Data available: " + available + " bytes");
346
-
347
- int bytesRead = serialInputStream.read(buffer, 0, Math.min(available, buffer.length));
348
- if (bytesRead > 0) {
349
- byte[] data = new byte[bytesRead];
350
- System.arraycopy(buffer, 0, data, 0, bytesRead);
431
+ // BLOCKING read matches manufacturer test app UART.java.
432
+ // available() is unreliable on /dev/ttyS* character devices on Android
433
+ // (returns 0 even when bytes ARE in the kernel buffer), causing missed frames.
434
+ // Direct read() blocks the thread until at least 1 byte arrives — no polling needed.
435
+ int bytesRead = serialInputStream.read(buffer);
436
+ if (bytesRead > 0) {
437
+ byte[] data = new byte[bytesRead];
438
+ System.arraycopy(buffer, 0, data, 0, bytesRead);
439
+
440
+ // ── OTA accumulator: feed bytes into latch buffer ──
441
+ synchronized (otaLock) {
442
+ if (otaBuffer != null && otaReceived < otaExpectedBytes) {
443
+ int toCopy = Math.min(bytesRead, otaExpectedBytes - otaReceived);
444
+ System.arraycopy(data, 0, otaBuffer, otaReceived, toCopy);
445
+ otaReceived += toCopy;
446
+ logDebug("OTA accumulator: " + otaReceived + "/" + otaExpectedBytes + " bytes");
447
+ if (otaReceived >= otaExpectedBytes && otaLatch != null) {
448
+ otaReady = true;
449
+ otaLatch.countDown();
450
+ }
451
+ continue; // do NOT notify regular listener
452
+ }
453
+ }
454
+ // Non-OTA bytes — log them so we can see unexpected board messages
455
+ logDebug("📡 Non-OTA RX (" + bytesRead + " bytes): " + bytesToHex(data));
351
456
 
352
457
  // Enhanced logging for received data (DEBUG only for detailed hex)
353
458
  logDebug("=== 📥 RECEIVED FROM IOBOARD ===");
@@ -405,13 +510,9 @@ public class SerialConnectionManager {
405
510
  notifyDataReceived(data);
406
511
  }
407
512
  } else {
408
- // No data available, small sleep to prevent busy waiting
409
- Thread.sleep(50); // Increased from 10ms to 50ms
513
+ Log.w(TAG, "Serial input stream is null");
514
+ Thread.sleep(100);
410
515
  }
411
- } else {
412
- Log.w(TAG, "Serial input stream is null");
413
- Thread.sleep(100);
414
- }
415
516
  } catch (InterruptedException e) {
416
517
  Log.d(TAG, "📡 Reader thread interrupted");
417
518
  break;
@@ -91,6 +91,31 @@ export interface CapacitorIoboardPlugin {
91
91
  * @param options OTA data parameters
92
92
  */
93
93
  sendOTAData(options: OTADataOptions): Promise<IOBoardResponse>;
94
+ /**
95
+ * Send a raw frame and block until a complete response is received.
96
+ *
97
+ * This is the correct method for OTA updates. Unlike sendRawCommand():
98
+ * - Does NOT flush pending serial input before writing (no dropped ACKs)
99
+ * - Blocks with a drain-loop until exactly `expectedResponseBytes` bytes arrive
100
+ * - Returns the response bytes directly — no separate dataReceived listener needed
101
+ *
102
+ * @param options.data Frame bytes as number[] (0-255)
103
+ * @param options.expectedResponseBytes How many bytes to wait for (default 9 = F3 response)
104
+ * @param options.timeoutMs Max wait time in ms (default 5000)
105
+ * @param options.delayMs Optional pre-write delay in ms (default 0)
106
+ */
107
+ sendFrameAndWaitResponse(options: {
108
+ data: number[];
109
+ expectedResponseBytes?: number;
110
+ timeoutMs?: number;
111
+ delayMs?: number;
112
+ }): Promise<{
113
+ success: boolean;
114
+ rawData: number[];
115
+ bytesSent?: number;
116
+ bytesReceived?: number;
117
+ error?: string;
118
+ }>;
94
119
  }
95
120
  export interface IOBoardResponse {
96
121
  success: boolean;
package/dist/esm/web.d.ts CHANGED
@@ -12,4 +12,5 @@ export declare class CapacitorIoboardWeb extends WebPlugin {
12
12
  controlMultiple(options: any): Promise<any>;
13
13
  startOTAUpdate(options: any): Promise<any>;
14
14
  sendOTAData(options: any): Promise<any>;
15
+ sendFrameAndWaitResponse(options: any): Promise<any>;
15
16
  }
package/dist/esm/web.js CHANGED
@@ -92,4 +92,16 @@ export class CapacitorIoboardWeb extends WebPlugin {
92
92
  }
93
93
  return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };
94
94
  }
95
+ async sendFrameAndWaitResponse(options) {
96
+ var _a, _b;
97
+ console.log("Web: sendFrameAndWaitResponse (stub) — not supported in browser");
98
+ // Web stub: simulate a '#' ACK response (9-byte F3 frame with header '#' = 0x23)
99
+ await new Promise(resolve => setTimeout(resolve, 50));
100
+ return {
101
+ success: true,
102
+ rawData: [0x0D, 0x09, 0x01, 0xF3, 0x23, 0x00, 0x00, 0xCC, 0x0A],
103
+ bytesSent: (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
104
+ bytesReceived: 9
105
+ };
106
+ }
95
107
  }
@@ -337,6 +337,18 @@ class CapacitorIoboardWeb extends core.WebPlugin {
337
337
  }
338
338
  return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };
339
339
  }
340
+ async sendFrameAndWaitResponse(options) {
341
+ var _a, _b;
342
+ console.log("Web: sendFrameAndWaitResponse (stub) — not supported in browser");
343
+ // Web stub: simulate a '#' ACK response (9-byte F3 frame with header '#' = 0x23)
344
+ await new Promise(resolve => setTimeout(resolve, 50));
345
+ return {
346
+ success: true,
347
+ rawData: [0x0D, 0x09, 0x01, 0xF3, 0x23, 0x00, 0x00, 0xCC, 0x0A],
348
+ bytesSent: (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
349
+ bytesReceived: 9
350
+ };
351
+ }
340
352
  }
341
353
 
342
354
  var web = /*#__PURE__*/Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/protocol.js","esm/index.js","esm/web.js"],"sourcesContent":["// Protocol Constants\nexport const IOBOARD_PROTOCOL = {\n SOI: 0x0D,\n EOI: 0x0A,\n FRAME_TYPES: {\n STATUS_QUERY: 0x00,\n SINGLE_PALLET: 0x01,\n FULL_PALLET: 0x02,\n OTA_REQUEST: 0xF1,\n OTA_DATA: 0xF2,\n OTA_RESPONSE: 0xF3\n },\n DEFAULT_BAUD_RATE: 115200,\n DEFAULT_DATA_BITS: 8,\n DEFAULT_STOP_BITS: 1,\n DEFAULT_PARITY: 'none',\n DEFAULT_TIMEOUT: 5000,\n // Address range\n MIN_ADDRESS: 1,\n MAX_ADDRESS: 63,\n // Pallet range\n MIN_PALLET: 0,\n MAX_PALLET: 7,\n // OTA Constants\n OTA_PACKET_SIZE: 128,\n // Response codes\n OTA_RESPONSES: {\n AREA_REQUEST: 0x26,\n REQUEST_A_ZONE: 0x41,\n REQUEST_B_ZONE: 0x42,\n DATA_REQUEST: 0x23,\n COMPLETION: 0x4F,\n ERROR: 0x45, // 'E'\n },\n // Error codes\n OTA_ERROR_CODES: {\n ILLEGAL_VERSION: 9,\n NON_OTA_STATUS: 8,\n WRITE_FAILED: 7,\n VERIFICATION_FAILED: 6,\n TRANSFER_FAILED: 5\n }\n};\n","/**\n * IOBOARD Protocol utilities for frame construction and parsing\n */\nexport class IOBoardProtocol {\n /**\n * Calculate CRC-16 CCITT checksum\n */\n static calculateCRC16(data) {\n let crc = 0xFFFF;\n for (const byte of data) {\n crc ^= (byte << 8);\n for (let bit = 0; bit < 8; bit++) {\n if (crc & 0x8000) {\n crc = (crc << 1) ^ 0x1021;\n }\n else {\n crc = crc << 1;\n }\n crc &= 0xFFFF;\n }\n }\n return crc;\n }\n /**\n * Build a command frame for IOBOARD\n */\n static buildFrame(address, frameType, data) {\n const frame = [];\n // SOI\n frame.push(0x0D);\n // Address\n frame.push(address);\n // Frame Type\n frame.push(frameType);\n // Data\n frame.push(...data);\n // Calculate CRC for address + frameType + data\n const crcData = [address, frameType, ...data];\n const crc = this.calculateCRC16(crcData);\n // CRC (high byte first)\n frame.push((crc >> 8) & 0xFF);\n frame.push(crc & 0xFF);\n // EOI\n frame.push(0x0A);\n return frame;\n }\n /**\n * Parse a response frame from IOBOARD\n */\n static parseFrame(frame) {\n if (frame.length < 6) {\n return { success: false, error: 'Frame too short' };\n }\n // Check SOI and EOI\n if (frame[0] !== 0x0D || frame[frame.length - 1] !== 0x0A) {\n return { success: false, error: 'Invalid frame markers' };\n }\n const address = frame[1];\n const frameType = frame[2];\n const dataLength = frame.length - 6; // SOI + Address + FrameType + CRC(2) + EOI\n const data = frame.slice(3, 3 + dataLength);\n // Extract CRC from frame\n const receivedCRC = (frame[frame.length - 3] << 8) | frame[frame.length - 2];\n // Calculate expected CRC\n const crcData = [address, frameType, ...data];\n const expectedCRC = this.calculateCRC16(crcData);\n if (receivedCRC !== expectedCRC) {\n return {\n success: false,\n error: `CRC mismatch: expected ${expectedCRC.toString(16)}, got ${receivedCRC.toString(16)}`\n };\n }\n return {\n success: true,\n address,\n frameType,\n data\n };\n }\n /**\n * Build status query frame\n */\n static buildStatusQuery(address) {\n return this.buildFrame(address, 0x00, []);\n }\n /**\n * Build single pallet control frame\n */\n static buildSinglePalletControl(address, palletNumber, doorLock, ledControl) {\n const data = [];\n // Pallet number\n data.push(palletNumber);\n // Door lock control (1 = unlock, 0 = no action)\n data.push(doorLock ? 1 : 0);\n // LED control (6 bytes)\n data.push(ledControl.red);\n data.push(ledControl.green);\n data.push(ledControl.blue);\n data.push(ledControl.intensity);\n data.push(ledControl.blinkTimes);\n data.push(ledControl.blinkSpeed);\n return this.buildFrame(address, 0x01, data);\n }\n /**\n * Build full pallet control frame\n */\n static buildFullPalletControl(address, doorLockControl, extendedControl, ledControls) {\n const data = [];\n // Door lock control (8-bit mask)\n data.push(doorLockControl);\n // Extended control\n data.push(extendedControl);\n // LED controls for 8 pallets (48 bytes total)\n for (let i = 0; i < 8; i++) {\n const led = ledControls[i] || {\n red: 0, green: 0, blue: 0,\n intensity: 0, blinkTimes: 0, blinkSpeed: 0\n };\n data.push(led.red);\n data.push(led.green);\n data.push(led.blue);\n data.push(led.intensity);\n data.push(led.blinkTimes);\n data.push(led.blinkSpeed);\n }\n return this.buildFrame(address, 0x02, data);\n }\n /**\n * Build OTA notification frame\n */\n static buildOTANotification(address, majorVersion, minorVersion, patchVersion, firmwareSize) {\n const data = [];\n // Version (3 bytes)\n data.push(majorVersion);\n data.push(minorVersion);\n data.push(patchVersion);\n // Firmware size (4 bytes, little-endian)\n data.push(firmwareSize & 0xFF);\n data.push((firmwareSize >> 8) & 0xFF);\n data.push((firmwareSize >> 16) & 0xFF);\n data.push((firmwareSize >> 24) & 0xFF);\n return this.buildFrame(address, 0xF1, data);\n }\n /**\n * Build OTA data frame\n */\n static buildOTAData(address, packetNumber, data) {\n const frameData = [];\n // Packet number (4 bytes, little-endian)\n frameData.push(packetNumber & 0xFF);\n frameData.push((packetNumber >> 8) & 0xFF);\n frameData.push((packetNumber >> 16) & 0xFF);\n frameData.push((packetNumber >> 24) & 0xFF);\n // Data bytes (up to 128 bytes)\n for (let i = 0; i < data.length; i++) {\n frameData.push(data[i]);\n }\n return this.buildFrame(address, 0xF2, frameData);\n }\n /**\n * Parse status response\n */\n static parseStatusResponse(data) {\n if (data.length < 4) {\n return null;\n }\n return {\n doorLockStatus: data[0],\n softwareVersion: {\n major: data[1],\n minor: data[2],\n patch: data[3]\n }\n };\n }\n /**\n * Convert frame to hex string for debugging\n */\n static frameToHex(frame) {\n return frame.map(b => b.toString(16).padStart(2, '0')).join(' ').toUpperCase();\n }\n /**\n * Convert hex string to frame\n */\n static hexToFrame(hex) {\n return hex.split(' ')\n .map(h => h.trim())\n .filter(h => h.length > 0)\n .map(h => parseInt(h, 16));\n }\n}\n","import { registerPlugin } from '@capacitor/core';\nconst CapacitorIoboard = registerPlugin('CapacitorIoboard', {\n web: () => import('./web').then(m => new m.CapacitorIoboardWeb()),\n});\nexport * from './definitions';\nexport * from './protocol';\nexport { CapacitorIoboard };\n","import { WebPlugin } from \"@capacitor/core\";\nexport class CapacitorIoboardWeb extends WebPlugin {\n constructor() {\n super();\n console.log(\"IOBoard Web Plugin v2.0 initialized\");\n }\n async connect(options) {\n console.log(\"Web: Connecting to IOBoard...\", options);\n await new Promise(resolve => setTimeout(resolve, 1000));\n return { success: true, message: `Connected to IOBoard at ${options.portPath}` };\n }\n async disconnect() {\n console.log(\"Web: Disconnecting from IOBoard...\");\n return { success: true, message: \"Disconnected from IOBoard\" };\n }\n async isConnected() {\n return { connected: false, portPath: null };\n }\n async listPorts() {\n console.log(\"Web: Listing available ports...\");\n const ports = [\"/dev/ttyS0\", \"/dev/ttyS1\", \"/dev/ttyS2\", \"/dev/ttyUSB0\", \"COM1\", \"COM2\", \"COM3\"];\n return { success: true, ports };\n }\n async getStatus(options) {\n console.log(\"Web: Getting device status...\", options);\n await new Promise(resolve => setTimeout(resolve, 100));\n return {\n success: true,\n status: {\n address: options.address,\n connected: true,\n firmwareVersion: \"2.1.0\",\n palletStates: Array(8).fill(false),\n temperature: 25.5,\n voltage: 12.0,\n uptime: 86400\n }\n };\n }\n async unlockPallet(options) {\n console.log(\"Web: Unlocking pallet...\", options);\n await new Promise(resolve => setTimeout(resolve, 200));\n return {\n success: true,\n message: `Pallet ${options.palletNumber} unlocked with RGB(${options.red}, ${options.green}, ${options.blue})`\n };\n }\n async controlMultiplePallets(options) {\n console.log(\"Web: Controlling multiple pallets...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n const { address, color, intensity, blinkTimes, blinkSpeed, pallets } = options;\n return {\n success: true,\n message: `Controlled ${pallets.length} pallets with ${color} color at ${intensity}% intensity`,\n details: {\n address,\n color,\n intensity,\n blinkTimes,\n blinkSpeed,\n palletsControlled: pallets\n }\n };\n }\n async executeMultipleActions(options) {\n console.log(\"Web: Executing multiple actions...\", options);\n const { actions, delayBetweenCommands = 100 } = options;\n await new Promise(resolve => setTimeout(resolve, actions.length * (delayBetweenCommands + 50)));\n return {\n success: true,\n totalActions: actions.length,\n successCount: actions.length,\n failCount: 0,\n message: `All ${actions.length} actions executed successfully`\n };\n }\n async controlMultiple(options) {\n console.log(\"Web: Controlling multiple LEDs...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n return { success: true, message: `Controlled ${options.leds.length} LEDs successfully` };\n }\n async startOTAUpdate(options) {\n console.log(\"Web: Starting OTA update...\", options);\n await new Promise(resolve => setTimeout(resolve, 500));\n return { success: true, message: `OTA update started for ${options.fileName} (${options.fileSize} bytes)` };\n }\n async sendOTAData(options) {\n console.log(\"Web: Sending OTA data packet...\", options.packetNumber);\n await new Promise(resolve => setTimeout(resolve, 50));\n if (Math.random() < 0.05) {\n return { success: false, error: `Packet ${options.packetNumber} transmission failed` };\n }\n return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/protocol.js","esm/index.js","esm/web.js"],"sourcesContent":["// Protocol Constants\nexport const IOBOARD_PROTOCOL = {\n SOI: 0x0D,\n EOI: 0x0A,\n FRAME_TYPES: {\n STATUS_QUERY: 0x00,\n SINGLE_PALLET: 0x01,\n FULL_PALLET: 0x02,\n OTA_REQUEST: 0xF1,\n OTA_DATA: 0xF2,\n OTA_RESPONSE: 0xF3\n },\n DEFAULT_BAUD_RATE: 115200,\n DEFAULT_DATA_BITS: 8,\n DEFAULT_STOP_BITS: 1,\n DEFAULT_PARITY: 'none',\n DEFAULT_TIMEOUT: 5000,\n // Address range\n MIN_ADDRESS: 1,\n MAX_ADDRESS: 63,\n // Pallet range\n MIN_PALLET: 0,\n MAX_PALLET: 7,\n // OTA Constants\n OTA_PACKET_SIZE: 128,\n // Response codes\n OTA_RESPONSES: {\n AREA_REQUEST: 0x26,\n REQUEST_A_ZONE: 0x41,\n REQUEST_B_ZONE: 0x42,\n DATA_REQUEST: 0x23,\n COMPLETION: 0x4F,\n ERROR: 0x45, // 'E'\n },\n // Error codes\n OTA_ERROR_CODES: {\n ILLEGAL_VERSION: 9,\n NON_OTA_STATUS: 8,\n WRITE_FAILED: 7,\n VERIFICATION_FAILED: 6,\n TRANSFER_FAILED: 5\n }\n};\n","/**\n * IOBOARD Protocol utilities for frame construction and parsing\n */\nexport class IOBoardProtocol {\n /**\n * Calculate CRC-16 CCITT checksum\n */\n static calculateCRC16(data) {\n let crc = 0xFFFF;\n for (const byte of data) {\n crc ^= (byte << 8);\n for (let bit = 0; bit < 8; bit++) {\n if (crc & 0x8000) {\n crc = (crc << 1) ^ 0x1021;\n }\n else {\n crc = crc << 1;\n }\n crc &= 0xFFFF;\n }\n }\n return crc;\n }\n /**\n * Build a command frame for IOBOARD\n */\n static buildFrame(address, frameType, data) {\n const frame = [];\n // SOI\n frame.push(0x0D);\n // Address\n frame.push(address);\n // Frame Type\n frame.push(frameType);\n // Data\n frame.push(...data);\n // Calculate CRC for address + frameType + data\n const crcData = [address, frameType, ...data];\n const crc = this.calculateCRC16(crcData);\n // CRC (high byte first)\n frame.push((crc >> 8) & 0xFF);\n frame.push(crc & 0xFF);\n // EOI\n frame.push(0x0A);\n return frame;\n }\n /**\n * Parse a response frame from IOBOARD\n */\n static parseFrame(frame) {\n if (frame.length < 6) {\n return { success: false, error: 'Frame too short' };\n }\n // Check SOI and EOI\n if (frame[0] !== 0x0D || frame[frame.length - 1] !== 0x0A) {\n return { success: false, error: 'Invalid frame markers' };\n }\n const address = frame[1];\n const frameType = frame[2];\n const dataLength = frame.length - 6; // SOI + Address + FrameType + CRC(2) + EOI\n const data = frame.slice(3, 3 + dataLength);\n // Extract CRC from frame\n const receivedCRC = (frame[frame.length - 3] << 8) | frame[frame.length - 2];\n // Calculate expected CRC\n const crcData = [address, frameType, ...data];\n const expectedCRC = this.calculateCRC16(crcData);\n if (receivedCRC !== expectedCRC) {\n return {\n success: false,\n error: `CRC mismatch: expected ${expectedCRC.toString(16)}, got ${receivedCRC.toString(16)}`\n };\n }\n return {\n success: true,\n address,\n frameType,\n data\n };\n }\n /**\n * Build status query frame\n */\n static buildStatusQuery(address) {\n return this.buildFrame(address, 0x00, []);\n }\n /**\n * Build single pallet control frame\n */\n static buildSinglePalletControl(address, palletNumber, doorLock, ledControl) {\n const data = [];\n // Pallet number\n data.push(palletNumber);\n // Door lock control (1 = unlock, 0 = no action)\n data.push(doorLock ? 1 : 0);\n // LED control (6 bytes)\n data.push(ledControl.red);\n data.push(ledControl.green);\n data.push(ledControl.blue);\n data.push(ledControl.intensity);\n data.push(ledControl.blinkTimes);\n data.push(ledControl.blinkSpeed);\n return this.buildFrame(address, 0x01, data);\n }\n /**\n * Build full pallet control frame\n */\n static buildFullPalletControl(address, doorLockControl, extendedControl, ledControls) {\n const data = [];\n // Door lock control (8-bit mask)\n data.push(doorLockControl);\n // Extended control\n data.push(extendedControl);\n // LED controls for 8 pallets (48 bytes total)\n for (let i = 0; i < 8; i++) {\n const led = ledControls[i] || {\n red: 0, green: 0, blue: 0,\n intensity: 0, blinkTimes: 0, blinkSpeed: 0\n };\n data.push(led.red);\n data.push(led.green);\n data.push(led.blue);\n data.push(led.intensity);\n data.push(led.blinkTimes);\n data.push(led.blinkSpeed);\n }\n return this.buildFrame(address, 0x02, data);\n }\n /**\n * Build OTA notification frame\n */\n static buildOTANotification(address, majorVersion, minorVersion, patchVersion, firmwareSize) {\n const data = [];\n // Version (3 bytes)\n data.push(majorVersion);\n data.push(minorVersion);\n data.push(patchVersion);\n // Firmware size (4 bytes, little-endian)\n data.push(firmwareSize & 0xFF);\n data.push((firmwareSize >> 8) & 0xFF);\n data.push((firmwareSize >> 16) & 0xFF);\n data.push((firmwareSize >> 24) & 0xFF);\n return this.buildFrame(address, 0xF1, data);\n }\n /**\n * Build OTA data frame\n */\n static buildOTAData(address, packetNumber, data) {\n const frameData = [];\n // Packet number (4 bytes, little-endian)\n frameData.push(packetNumber & 0xFF);\n frameData.push((packetNumber >> 8) & 0xFF);\n frameData.push((packetNumber >> 16) & 0xFF);\n frameData.push((packetNumber >> 24) & 0xFF);\n // Data bytes (up to 128 bytes)\n for (let i = 0; i < data.length; i++) {\n frameData.push(data[i]);\n }\n return this.buildFrame(address, 0xF2, frameData);\n }\n /**\n * Parse status response\n */\n static parseStatusResponse(data) {\n if (data.length < 4) {\n return null;\n }\n return {\n doorLockStatus: data[0],\n softwareVersion: {\n major: data[1],\n minor: data[2],\n patch: data[3]\n }\n };\n }\n /**\n * Convert frame to hex string for debugging\n */\n static frameToHex(frame) {\n return frame.map(b => b.toString(16).padStart(2, '0')).join(' ').toUpperCase();\n }\n /**\n * Convert hex string to frame\n */\n static hexToFrame(hex) {\n return hex.split(' ')\n .map(h => h.trim())\n .filter(h => h.length > 0)\n .map(h => parseInt(h, 16));\n }\n}\n","import { registerPlugin } from '@capacitor/core';\nconst CapacitorIoboard = registerPlugin('CapacitorIoboard', {\n web: () => import('./web').then(m => new m.CapacitorIoboardWeb()),\n});\nexport * from './definitions';\nexport * from './protocol';\nexport { CapacitorIoboard };\n","import { WebPlugin } from \"@capacitor/core\";\nexport class CapacitorIoboardWeb extends WebPlugin {\n constructor() {\n super();\n console.log(\"IOBoard Web Plugin v2.0 initialized\");\n }\n async connect(options) {\n console.log(\"Web: Connecting to IOBoard...\", options);\n await new Promise(resolve => setTimeout(resolve, 1000));\n return { success: true, message: `Connected to IOBoard at ${options.portPath}` };\n }\n async disconnect() {\n console.log(\"Web: Disconnecting from IOBoard...\");\n return { success: true, message: \"Disconnected from IOBoard\" };\n }\n async isConnected() {\n return { connected: false, portPath: null };\n }\n async listPorts() {\n console.log(\"Web: Listing available ports...\");\n const ports = [\"/dev/ttyS0\", \"/dev/ttyS1\", \"/dev/ttyS2\", \"/dev/ttyUSB0\", \"COM1\", \"COM2\", \"COM3\"];\n return { success: true, ports };\n }\n async getStatus(options) {\n console.log(\"Web: Getting device status...\", options);\n await new Promise(resolve => setTimeout(resolve, 100));\n return {\n success: true,\n status: {\n address: options.address,\n connected: true,\n firmwareVersion: \"2.1.0\",\n palletStates: Array(8).fill(false),\n temperature: 25.5,\n voltage: 12.0,\n uptime: 86400\n }\n };\n }\n async unlockPallet(options) {\n console.log(\"Web: Unlocking pallet...\", options);\n await new Promise(resolve => setTimeout(resolve, 200));\n return {\n success: true,\n message: `Pallet ${options.palletNumber} unlocked with RGB(${options.red}, ${options.green}, ${options.blue})`\n };\n }\n async controlMultiplePallets(options) {\n console.log(\"Web: Controlling multiple pallets...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n const { address, color, intensity, blinkTimes, blinkSpeed, pallets } = options;\n return {\n success: true,\n message: `Controlled ${pallets.length} pallets with ${color} color at ${intensity}% intensity`,\n details: {\n address,\n color,\n intensity,\n blinkTimes,\n blinkSpeed,\n palletsControlled: pallets\n }\n };\n }\n async executeMultipleActions(options) {\n console.log(\"Web: Executing multiple actions...\", options);\n const { actions, delayBetweenCommands = 100 } = options;\n await new Promise(resolve => setTimeout(resolve, actions.length * (delayBetweenCommands + 50)));\n return {\n success: true,\n totalActions: actions.length,\n successCount: actions.length,\n failCount: 0,\n message: `All ${actions.length} actions executed successfully`\n };\n }\n async controlMultiple(options) {\n console.log(\"Web: Controlling multiple LEDs...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n return { success: true, message: `Controlled ${options.leds.length} LEDs successfully` };\n }\n async startOTAUpdate(options) {\n console.log(\"Web: Starting OTA update...\", options);\n await new Promise(resolve => setTimeout(resolve, 500));\n return { success: true, message: `OTA update started for ${options.fileName} (${options.fileSize} bytes)` };\n }\n async sendOTAData(options) {\n console.log(\"Web: Sending OTA data packet...\", options.packetNumber);\n await new Promise(resolve => setTimeout(resolve, 50));\n if (Math.random() < 0.05) {\n return { success: false, error: `Packet ${options.packetNumber} transmission failed` };\n }\n return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };\n }\n async sendFrameAndWaitResponse(options) {\n var _a, _b;\n console.log(\"Web: sendFrameAndWaitResponse (stub) — not supported in browser\");\n // Web stub: simulate a '#' ACK response (9-byte F3 frame with header '#' = 0x23)\n await new Promise(resolve => setTimeout(resolve, 50));\n return {\n success: true,\n rawData: [0x0D, 0x09, 0x01, 0xF3, 0x23, 0x00, 0x00, 0xCC, 0x0A],\n bytesSent: (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,\n bytesReceived: 9\n };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -334,6 +334,18 @@ var capacitorIoboard = (function (exports, core) {
334
334
  }
335
335
  return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };
336
336
  }
337
+ async sendFrameAndWaitResponse(options) {
338
+ var _a, _b;
339
+ console.log("Web: sendFrameAndWaitResponse (stub) — not supported in browser");
340
+ // Web stub: simulate a '#' ACK response (9-byte F3 frame with header '#' = 0x23)
341
+ await new Promise(resolve => setTimeout(resolve, 50));
342
+ return {
343
+ success: true,
344
+ rawData: [0x0D, 0x09, 0x01, 0xF3, 0x23, 0x00, 0x00, 0xCC, 0x0A],
345
+ bytesSent: (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
346
+ bytesReceived: 9
347
+ };
348
+ }
337
349
  }
338
350
 
339
351
  var web = /*#__PURE__*/Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/protocol.js","esm/index.js","esm/web.js"],"sourcesContent":["// Protocol Constants\nexport const IOBOARD_PROTOCOL = {\n SOI: 0x0D,\n EOI: 0x0A,\n FRAME_TYPES: {\n STATUS_QUERY: 0x00,\n SINGLE_PALLET: 0x01,\n FULL_PALLET: 0x02,\n OTA_REQUEST: 0xF1,\n OTA_DATA: 0xF2,\n OTA_RESPONSE: 0xF3\n },\n DEFAULT_BAUD_RATE: 115200,\n DEFAULT_DATA_BITS: 8,\n DEFAULT_STOP_BITS: 1,\n DEFAULT_PARITY: 'none',\n DEFAULT_TIMEOUT: 5000,\n // Address range\n MIN_ADDRESS: 1,\n MAX_ADDRESS: 63,\n // Pallet range\n MIN_PALLET: 0,\n MAX_PALLET: 7,\n // OTA Constants\n OTA_PACKET_SIZE: 128,\n // Response codes\n OTA_RESPONSES: {\n AREA_REQUEST: 0x26,\n REQUEST_A_ZONE: 0x41,\n REQUEST_B_ZONE: 0x42,\n DATA_REQUEST: 0x23,\n COMPLETION: 0x4F,\n ERROR: 0x45, // 'E'\n },\n // Error codes\n OTA_ERROR_CODES: {\n ILLEGAL_VERSION: 9,\n NON_OTA_STATUS: 8,\n WRITE_FAILED: 7,\n VERIFICATION_FAILED: 6,\n TRANSFER_FAILED: 5\n }\n};\n","/**\n * IOBOARD Protocol utilities for frame construction and parsing\n */\nexport class IOBoardProtocol {\n /**\n * Calculate CRC-16 CCITT checksum\n */\n static calculateCRC16(data) {\n let crc = 0xFFFF;\n for (const byte of data) {\n crc ^= (byte << 8);\n for (let bit = 0; bit < 8; bit++) {\n if (crc & 0x8000) {\n crc = (crc << 1) ^ 0x1021;\n }\n else {\n crc = crc << 1;\n }\n crc &= 0xFFFF;\n }\n }\n return crc;\n }\n /**\n * Build a command frame for IOBOARD\n */\n static buildFrame(address, frameType, data) {\n const frame = [];\n // SOI\n frame.push(0x0D);\n // Address\n frame.push(address);\n // Frame Type\n frame.push(frameType);\n // Data\n frame.push(...data);\n // Calculate CRC for address + frameType + data\n const crcData = [address, frameType, ...data];\n const crc = this.calculateCRC16(crcData);\n // CRC (high byte first)\n frame.push((crc >> 8) & 0xFF);\n frame.push(crc & 0xFF);\n // EOI\n frame.push(0x0A);\n return frame;\n }\n /**\n * Parse a response frame from IOBOARD\n */\n static parseFrame(frame) {\n if (frame.length < 6) {\n return { success: false, error: 'Frame too short' };\n }\n // Check SOI and EOI\n if (frame[0] !== 0x0D || frame[frame.length - 1] !== 0x0A) {\n return { success: false, error: 'Invalid frame markers' };\n }\n const address = frame[1];\n const frameType = frame[2];\n const dataLength = frame.length - 6; // SOI + Address + FrameType + CRC(2) + EOI\n const data = frame.slice(3, 3 + dataLength);\n // Extract CRC from frame\n const receivedCRC = (frame[frame.length - 3] << 8) | frame[frame.length - 2];\n // Calculate expected CRC\n const crcData = [address, frameType, ...data];\n const expectedCRC = this.calculateCRC16(crcData);\n if (receivedCRC !== expectedCRC) {\n return {\n success: false,\n error: `CRC mismatch: expected ${expectedCRC.toString(16)}, got ${receivedCRC.toString(16)}`\n };\n }\n return {\n success: true,\n address,\n frameType,\n data\n };\n }\n /**\n * Build status query frame\n */\n static buildStatusQuery(address) {\n return this.buildFrame(address, 0x00, []);\n }\n /**\n * Build single pallet control frame\n */\n static buildSinglePalletControl(address, palletNumber, doorLock, ledControl) {\n const data = [];\n // Pallet number\n data.push(palletNumber);\n // Door lock control (1 = unlock, 0 = no action)\n data.push(doorLock ? 1 : 0);\n // LED control (6 bytes)\n data.push(ledControl.red);\n data.push(ledControl.green);\n data.push(ledControl.blue);\n data.push(ledControl.intensity);\n data.push(ledControl.blinkTimes);\n data.push(ledControl.blinkSpeed);\n return this.buildFrame(address, 0x01, data);\n }\n /**\n * Build full pallet control frame\n */\n static buildFullPalletControl(address, doorLockControl, extendedControl, ledControls) {\n const data = [];\n // Door lock control (8-bit mask)\n data.push(doorLockControl);\n // Extended control\n data.push(extendedControl);\n // LED controls for 8 pallets (48 bytes total)\n for (let i = 0; i < 8; i++) {\n const led = ledControls[i] || {\n red: 0, green: 0, blue: 0,\n intensity: 0, blinkTimes: 0, blinkSpeed: 0\n };\n data.push(led.red);\n data.push(led.green);\n data.push(led.blue);\n data.push(led.intensity);\n data.push(led.blinkTimes);\n data.push(led.blinkSpeed);\n }\n return this.buildFrame(address, 0x02, data);\n }\n /**\n * Build OTA notification frame\n */\n static buildOTANotification(address, majorVersion, minorVersion, patchVersion, firmwareSize) {\n const data = [];\n // Version (3 bytes)\n data.push(majorVersion);\n data.push(minorVersion);\n data.push(patchVersion);\n // Firmware size (4 bytes, little-endian)\n data.push(firmwareSize & 0xFF);\n data.push((firmwareSize >> 8) & 0xFF);\n data.push((firmwareSize >> 16) & 0xFF);\n data.push((firmwareSize >> 24) & 0xFF);\n return this.buildFrame(address, 0xF1, data);\n }\n /**\n * Build OTA data frame\n */\n static buildOTAData(address, packetNumber, data) {\n const frameData = [];\n // Packet number (4 bytes, little-endian)\n frameData.push(packetNumber & 0xFF);\n frameData.push((packetNumber >> 8) & 0xFF);\n frameData.push((packetNumber >> 16) & 0xFF);\n frameData.push((packetNumber >> 24) & 0xFF);\n // Data bytes (up to 128 bytes)\n for (let i = 0; i < data.length; i++) {\n frameData.push(data[i]);\n }\n return this.buildFrame(address, 0xF2, frameData);\n }\n /**\n * Parse status response\n */\n static parseStatusResponse(data) {\n if (data.length < 4) {\n return null;\n }\n return {\n doorLockStatus: data[0],\n softwareVersion: {\n major: data[1],\n minor: data[2],\n patch: data[3]\n }\n };\n }\n /**\n * Convert frame to hex string for debugging\n */\n static frameToHex(frame) {\n return frame.map(b => b.toString(16).padStart(2, '0')).join(' ').toUpperCase();\n }\n /**\n * Convert hex string to frame\n */\n static hexToFrame(hex) {\n return hex.split(' ')\n .map(h => h.trim())\n .filter(h => h.length > 0)\n .map(h => parseInt(h, 16));\n }\n}\n","import { registerPlugin } from '@capacitor/core';\nconst CapacitorIoboard = registerPlugin('CapacitorIoboard', {\n web: () => import('./web').then(m => new m.CapacitorIoboardWeb()),\n});\nexport * from './definitions';\nexport * from './protocol';\nexport { CapacitorIoboard };\n","import { WebPlugin } from \"@capacitor/core\";\nexport class CapacitorIoboardWeb extends WebPlugin {\n constructor() {\n super();\n console.log(\"IOBoard Web Plugin v2.0 initialized\");\n }\n async connect(options) {\n console.log(\"Web: Connecting to IOBoard...\", options);\n await new Promise(resolve => setTimeout(resolve, 1000));\n return { success: true, message: `Connected to IOBoard at ${options.portPath}` };\n }\n async disconnect() {\n console.log(\"Web: Disconnecting from IOBoard...\");\n return { success: true, message: \"Disconnected from IOBoard\" };\n }\n async isConnected() {\n return { connected: false, portPath: null };\n }\n async listPorts() {\n console.log(\"Web: Listing available ports...\");\n const ports = [\"/dev/ttyS0\", \"/dev/ttyS1\", \"/dev/ttyS2\", \"/dev/ttyUSB0\", \"COM1\", \"COM2\", \"COM3\"];\n return { success: true, ports };\n }\n async getStatus(options) {\n console.log(\"Web: Getting device status...\", options);\n await new Promise(resolve => setTimeout(resolve, 100));\n return {\n success: true,\n status: {\n address: options.address,\n connected: true,\n firmwareVersion: \"2.1.0\",\n palletStates: Array(8).fill(false),\n temperature: 25.5,\n voltage: 12.0,\n uptime: 86400\n }\n };\n }\n async unlockPallet(options) {\n console.log(\"Web: Unlocking pallet...\", options);\n await new Promise(resolve => setTimeout(resolve, 200));\n return {\n success: true,\n message: `Pallet ${options.palletNumber} unlocked with RGB(${options.red}, ${options.green}, ${options.blue})`\n };\n }\n async controlMultiplePallets(options) {\n console.log(\"Web: Controlling multiple pallets...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n const { address, color, intensity, blinkTimes, blinkSpeed, pallets } = options;\n return {\n success: true,\n message: `Controlled ${pallets.length} pallets with ${color} color at ${intensity}% intensity`,\n details: {\n address,\n color,\n intensity,\n blinkTimes,\n blinkSpeed,\n palletsControlled: pallets\n }\n };\n }\n async executeMultipleActions(options) {\n console.log(\"Web: Executing multiple actions...\", options);\n const { actions, delayBetweenCommands = 100 } = options;\n await new Promise(resolve => setTimeout(resolve, actions.length * (delayBetweenCommands + 50)));\n return {\n success: true,\n totalActions: actions.length,\n successCount: actions.length,\n failCount: 0,\n message: `All ${actions.length} actions executed successfully`\n };\n }\n async controlMultiple(options) {\n console.log(\"Web: Controlling multiple LEDs...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n return { success: true, message: `Controlled ${options.leds.length} LEDs successfully` };\n }\n async startOTAUpdate(options) {\n console.log(\"Web: Starting OTA update...\", options);\n await new Promise(resolve => setTimeout(resolve, 500));\n return { success: true, message: `OTA update started for ${options.fileName} (${options.fileSize} bytes)` };\n }\n async sendOTAData(options) {\n console.log(\"Web: Sending OTA data packet...\", options.packetNumber);\n await new Promise(resolve => setTimeout(resolve, 50));\n if (Math.random() < 0.05) {\n return { success: false, error: `Packet ${options.packetNumber} transmission failed` };\n }\n return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/protocol.js","esm/index.js","esm/web.js"],"sourcesContent":["// Protocol Constants\nexport const IOBOARD_PROTOCOL = {\n SOI: 0x0D,\n EOI: 0x0A,\n FRAME_TYPES: {\n STATUS_QUERY: 0x00,\n SINGLE_PALLET: 0x01,\n FULL_PALLET: 0x02,\n OTA_REQUEST: 0xF1,\n OTA_DATA: 0xF2,\n OTA_RESPONSE: 0xF3\n },\n DEFAULT_BAUD_RATE: 115200,\n DEFAULT_DATA_BITS: 8,\n DEFAULT_STOP_BITS: 1,\n DEFAULT_PARITY: 'none',\n DEFAULT_TIMEOUT: 5000,\n // Address range\n MIN_ADDRESS: 1,\n MAX_ADDRESS: 63,\n // Pallet range\n MIN_PALLET: 0,\n MAX_PALLET: 7,\n // OTA Constants\n OTA_PACKET_SIZE: 128,\n // Response codes\n OTA_RESPONSES: {\n AREA_REQUEST: 0x26,\n REQUEST_A_ZONE: 0x41,\n REQUEST_B_ZONE: 0x42,\n DATA_REQUEST: 0x23,\n COMPLETION: 0x4F,\n ERROR: 0x45, // 'E'\n },\n // Error codes\n OTA_ERROR_CODES: {\n ILLEGAL_VERSION: 9,\n NON_OTA_STATUS: 8,\n WRITE_FAILED: 7,\n VERIFICATION_FAILED: 6,\n TRANSFER_FAILED: 5\n }\n};\n","/**\n * IOBOARD Protocol utilities for frame construction and parsing\n */\nexport class IOBoardProtocol {\n /**\n * Calculate CRC-16 CCITT checksum\n */\n static calculateCRC16(data) {\n let crc = 0xFFFF;\n for (const byte of data) {\n crc ^= (byte << 8);\n for (let bit = 0; bit < 8; bit++) {\n if (crc & 0x8000) {\n crc = (crc << 1) ^ 0x1021;\n }\n else {\n crc = crc << 1;\n }\n crc &= 0xFFFF;\n }\n }\n return crc;\n }\n /**\n * Build a command frame for IOBOARD\n */\n static buildFrame(address, frameType, data) {\n const frame = [];\n // SOI\n frame.push(0x0D);\n // Address\n frame.push(address);\n // Frame Type\n frame.push(frameType);\n // Data\n frame.push(...data);\n // Calculate CRC for address + frameType + data\n const crcData = [address, frameType, ...data];\n const crc = this.calculateCRC16(crcData);\n // CRC (high byte first)\n frame.push((crc >> 8) & 0xFF);\n frame.push(crc & 0xFF);\n // EOI\n frame.push(0x0A);\n return frame;\n }\n /**\n * Parse a response frame from IOBOARD\n */\n static parseFrame(frame) {\n if (frame.length < 6) {\n return { success: false, error: 'Frame too short' };\n }\n // Check SOI and EOI\n if (frame[0] !== 0x0D || frame[frame.length - 1] !== 0x0A) {\n return { success: false, error: 'Invalid frame markers' };\n }\n const address = frame[1];\n const frameType = frame[2];\n const dataLength = frame.length - 6; // SOI + Address + FrameType + CRC(2) + EOI\n const data = frame.slice(3, 3 + dataLength);\n // Extract CRC from frame\n const receivedCRC = (frame[frame.length - 3] << 8) | frame[frame.length - 2];\n // Calculate expected CRC\n const crcData = [address, frameType, ...data];\n const expectedCRC = this.calculateCRC16(crcData);\n if (receivedCRC !== expectedCRC) {\n return {\n success: false,\n error: `CRC mismatch: expected ${expectedCRC.toString(16)}, got ${receivedCRC.toString(16)}`\n };\n }\n return {\n success: true,\n address,\n frameType,\n data\n };\n }\n /**\n * Build status query frame\n */\n static buildStatusQuery(address) {\n return this.buildFrame(address, 0x00, []);\n }\n /**\n * Build single pallet control frame\n */\n static buildSinglePalletControl(address, palletNumber, doorLock, ledControl) {\n const data = [];\n // Pallet number\n data.push(palletNumber);\n // Door lock control (1 = unlock, 0 = no action)\n data.push(doorLock ? 1 : 0);\n // LED control (6 bytes)\n data.push(ledControl.red);\n data.push(ledControl.green);\n data.push(ledControl.blue);\n data.push(ledControl.intensity);\n data.push(ledControl.blinkTimes);\n data.push(ledControl.blinkSpeed);\n return this.buildFrame(address, 0x01, data);\n }\n /**\n * Build full pallet control frame\n */\n static buildFullPalletControl(address, doorLockControl, extendedControl, ledControls) {\n const data = [];\n // Door lock control (8-bit mask)\n data.push(doorLockControl);\n // Extended control\n data.push(extendedControl);\n // LED controls for 8 pallets (48 bytes total)\n for (let i = 0; i < 8; i++) {\n const led = ledControls[i] || {\n red: 0, green: 0, blue: 0,\n intensity: 0, blinkTimes: 0, blinkSpeed: 0\n };\n data.push(led.red);\n data.push(led.green);\n data.push(led.blue);\n data.push(led.intensity);\n data.push(led.blinkTimes);\n data.push(led.blinkSpeed);\n }\n return this.buildFrame(address, 0x02, data);\n }\n /**\n * Build OTA notification frame\n */\n static buildOTANotification(address, majorVersion, minorVersion, patchVersion, firmwareSize) {\n const data = [];\n // Version (3 bytes)\n data.push(majorVersion);\n data.push(minorVersion);\n data.push(patchVersion);\n // Firmware size (4 bytes, little-endian)\n data.push(firmwareSize & 0xFF);\n data.push((firmwareSize >> 8) & 0xFF);\n data.push((firmwareSize >> 16) & 0xFF);\n data.push((firmwareSize >> 24) & 0xFF);\n return this.buildFrame(address, 0xF1, data);\n }\n /**\n * Build OTA data frame\n */\n static buildOTAData(address, packetNumber, data) {\n const frameData = [];\n // Packet number (4 bytes, little-endian)\n frameData.push(packetNumber & 0xFF);\n frameData.push((packetNumber >> 8) & 0xFF);\n frameData.push((packetNumber >> 16) & 0xFF);\n frameData.push((packetNumber >> 24) & 0xFF);\n // Data bytes (up to 128 bytes)\n for (let i = 0; i < data.length; i++) {\n frameData.push(data[i]);\n }\n return this.buildFrame(address, 0xF2, frameData);\n }\n /**\n * Parse status response\n */\n static parseStatusResponse(data) {\n if (data.length < 4) {\n return null;\n }\n return {\n doorLockStatus: data[0],\n softwareVersion: {\n major: data[1],\n minor: data[2],\n patch: data[3]\n }\n };\n }\n /**\n * Convert frame to hex string for debugging\n */\n static frameToHex(frame) {\n return frame.map(b => b.toString(16).padStart(2, '0')).join(' ').toUpperCase();\n }\n /**\n * Convert hex string to frame\n */\n static hexToFrame(hex) {\n return hex.split(' ')\n .map(h => h.trim())\n .filter(h => h.length > 0)\n .map(h => parseInt(h, 16));\n }\n}\n","import { registerPlugin } from '@capacitor/core';\nconst CapacitorIoboard = registerPlugin('CapacitorIoboard', {\n web: () => import('./web').then(m => new m.CapacitorIoboardWeb()),\n});\nexport * from './definitions';\nexport * from './protocol';\nexport { CapacitorIoboard };\n","import { WebPlugin } from \"@capacitor/core\";\nexport class CapacitorIoboardWeb extends WebPlugin {\n constructor() {\n super();\n console.log(\"IOBoard Web Plugin v2.0 initialized\");\n }\n async connect(options) {\n console.log(\"Web: Connecting to IOBoard...\", options);\n await new Promise(resolve => setTimeout(resolve, 1000));\n return { success: true, message: `Connected to IOBoard at ${options.portPath}` };\n }\n async disconnect() {\n console.log(\"Web: Disconnecting from IOBoard...\");\n return { success: true, message: \"Disconnected from IOBoard\" };\n }\n async isConnected() {\n return { connected: false, portPath: null };\n }\n async listPorts() {\n console.log(\"Web: Listing available ports...\");\n const ports = [\"/dev/ttyS0\", \"/dev/ttyS1\", \"/dev/ttyS2\", \"/dev/ttyUSB0\", \"COM1\", \"COM2\", \"COM3\"];\n return { success: true, ports };\n }\n async getStatus(options) {\n console.log(\"Web: Getting device status...\", options);\n await new Promise(resolve => setTimeout(resolve, 100));\n return {\n success: true,\n status: {\n address: options.address,\n connected: true,\n firmwareVersion: \"2.1.0\",\n palletStates: Array(8).fill(false),\n temperature: 25.5,\n voltage: 12.0,\n uptime: 86400\n }\n };\n }\n async unlockPallet(options) {\n console.log(\"Web: Unlocking pallet...\", options);\n await new Promise(resolve => setTimeout(resolve, 200));\n return {\n success: true,\n message: `Pallet ${options.palletNumber} unlocked with RGB(${options.red}, ${options.green}, ${options.blue})`\n };\n }\n async controlMultiplePallets(options) {\n console.log(\"Web: Controlling multiple pallets...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n const { address, color, intensity, blinkTimes, blinkSpeed, pallets } = options;\n return {\n success: true,\n message: `Controlled ${pallets.length} pallets with ${color} color at ${intensity}% intensity`,\n details: {\n address,\n color,\n intensity,\n blinkTimes,\n blinkSpeed,\n palletsControlled: pallets\n }\n };\n }\n async executeMultipleActions(options) {\n console.log(\"Web: Executing multiple actions...\", options);\n const { actions, delayBetweenCommands = 100 } = options;\n await new Promise(resolve => setTimeout(resolve, actions.length * (delayBetweenCommands + 50)));\n return {\n success: true,\n totalActions: actions.length,\n successCount: actions.length,\n failCount: 0,\n message: `All ${actions.length} actions executed successfully`\n };\n }\n async controlMultiple(options) {\n console.log(\"Web: Controlling multiple LEDs...\", options);\n await new Promise(resolve => setTimeout(resolve, 300));\n return { success: true, message: `Controlled ${options.leds.length} LEDs successfully` };\n }\n async startOTAUpdate(options) {\n console.log(\"Web: Starting OTA update...\", options);\n await new Promise(resolve => setTimeout(resolve, 500));\n return { success: true, message: `OTA update started for ${options.fileName} (${options.fileSize} bytes)` };\n }\n async sendOTAData(options) {\n console.log(\"Web: Sending OTA data packet...\", options.packetNumber);\n await new Promise(resolve => setTimeout(resolve, 50));\n if (Math.random() < 0.05) {\n return { success: false, error: `Packet ${options.packetNumber} transmission failed` };\n }\n return { success: true, message: `OTA packet ${options.packetNumber} sent successfully` };\n }\n async sendFrameAndWaitResponse(options) {\n var _a, _b;\n console.log(\"Web: sendFrameAndWaitResponse (stub) — not supported in browser\");\n // Web stub: simulate a '#' ACK response (9-byte F3 frame with header '#' = 0x23)\n await new Promise(resolve => setTimeout(resolve, 50));\n return {\n success: true,\n rawData: [0x0D, 0x09, 0x01, 0xF3, 0x23, 0x00, 0x00, 0xCC, 0x0A],\n bytesSent: (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,\n bytesReceived: 9\n };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leonardojc/capacitor-ioboard",
3
- "version": "2.0.18",
3
+ "version": "2.1.0",
4
4
  "description": "A comprehensive Capacitor plugin for IOBoard devices with integrated serial communication and complete MTC3P08L protocol support including OTA updates",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",