diff --git a/scanner/pages/emblemscanner/emblemscanner.js b/scanner/pages/emblemscanner/emblemscanner.js index 6e502e4..5ebce11 100644 --- a/scanner/pages/emblemscanner/emblemscanner.js +++ b/scanner/pages/emblemscanner/emblemscanner.js @@ -221,12 +221,24 @@ Page({ useExperimentalWorker: true, }); - // Pass the WASM file path to the worker - worker.wasmFilePath = this.data.wasmFilePath; - + // Send WASM path via message (this is the only supported method) + if (worker && this.data.wasmFilePath) { + console.log("Sending WASM path via message:", this.data.wasmFilePath); + worker.postMessage({ + type: "wasm_path", + path: this.data.wasmFilePath + }); + } + worker.onMessage((msg) => { console.log('Worker message:', msg.type); + if (msg.type === "ready") { + console.log('Worker is ready'); + // Worker is ready to process frames + return; + } + if (msg.type === "result") { // Clear processing flag when we get a result this.setData({ worker_processing: false }); diff --git a/scanner/pages/emblemscanner/worker/index.js b/scanner/pages/emblemscanner/worker/index.js index 3b11cc0..11e3643 100644 --- a/scanner/pages/emblemscanner/worker/index.js +++ b/scanner/pages/emblemscanner/worker/index.js @@ -1,12 +1,10 @@ console.log("hello from emblemscanner worker"); -// Load qrtool module first, then set WASM path -// The wasmFilePath will be passed from the main thread when the worker is created +// Load qrtool module first - WASM path will be set via message let qrtool = require('./qrtool.wx.js'); +let wasmPathReceived = false; -if (typeof worker !== "undefined" && worker.wasmFilePath) { - qrtool['setWasmPath'](worker.wasmFilePath); -} +console.log("QRTool loaded, waiting for WASM path via message..."); @@ -15,9 +13,14 @@ var qrtool_ready = false; qrtool.onRuntimeInitialized = () => { console.log("emblemscanner qrtool ready"); qrtool_ready = true; - worker.postMessage({ - type: "ready", - }); + if (wasmPathReceived) { + console.log("QRTool initialized successfully with WASM path"); + worker.postMessage({ + type: "ready", + }); + } else { + console.log("QRTool initialized but WASM path not received yet"); + } } var submit_message = null; @@ -51,6 +54,42 @@ function handle_frame(data, width, height, camera_sensitivity) { worker.onMessage((msg) => { console.log("emblemscanner worker got message", msg.type); + + // Handle WASM path message for initialization + if (msg.type === "wasm_path" && msg.path) { + console.log("Received WASM path via message:", msg.path); + if (typeof qrtool !== "undefined" && qrtool['setWasmPath']) { + qrtool['setWasmPath'](msg.path); + wasmPathReceived = true; + console.log("WASM path set via message"); + + // If qrtool is already ready, send ready message immediately + if (qrtool_ready) { + console.log("QRTool is already ready, sending ready message"); + worker.postMessage({ + type: "ready", + }); + } else { + console.log("Waiting for qrtool to become ready..."); + } + } + return; // Don't process further until qrtool is ready + } + + // If WASM path hasn't been received yet, return error + if (!wasmPathReceived) { + console.log("WASM path not received yet, cannot process messages"); + worker.postMessage({ + type: "result", + res: { + ok: false, + err: "wasm_path not received yet", + }, + processing_time: 0, + }); + return; + } + if (!qrtool_ready) { console.log("qrtool not ready"); worker.postMessage({