123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- var printCharBuffers = [null, [], []]
- var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined
- var HEAP8 = null
- var HEAPU8 = null
- var HEAP16 = null
- var HEAPU16 = null
- var HEAP32 = null
- var HEAPU32 = null
- var HEAPF32 = null
- var HEAPF64 = null
- function printChar(stream, curr) {
- var buffer = printCharBuffers[stream];
-
- if (curr === 0 || curr === 10) {
-
-
- let str = UTF8ArrayToString(buffer, 0)
- console.log(str)
- buffer.length = 0;
- } else {
- buffer.push(curr);
- }
- }
- function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
- var endIdx = idx + maxBytesToRead;
- var endPtr = idx;
-
-
-
-
-
- while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
- if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
- return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
- }
- var str = '';
-
-
- while (idx < endPtr) {
-
-
-
-
- var u0 = heapOrArray[idx++];
- if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
- var u1 = heapOrArray[idx++] & 63;
- if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
- var u2 = heapOrArray[idx++] & 63;
- if ((u0 & 0xF0) == 0xE0) {
- u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
- } else {
-
- u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);
- }
- if (u0 < 0x10000) {
- str += String.fromCharCode(u0);
- } else {
- var ch = u0 - 0x10000;
- str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
- }
- }
- return str;
- }
- const wasmapi = {
- wasmInstance: null,
- wasmFuncs: null,
- wasmDataPtr: {
- installBtsDataPtr: 0,
- bleBtsDataPtr: 0,
- audioDataPtr: 0,
- currentLocationCoordPtr: 0,
- accDataPtr: 0,
- },
- data: {
- audioDataList: [],
- oneFrameLen: 12000,
- bleBtsMonitorSuccessFlag: false,
- bleBtsDataList: [],
- installBtsInjectFlag: false,
- accDataList: [],
- },
-
- _emscripten_memcpy_js(dest, src, num) {
- HEAPU8.copyWithin(dest, src, src + num)
- },
- _emscripten_resize_heap(requestedSize) {
- let oldSize = HEAPU8.length
-
- requestedSize >>>= 0
- this.abortOnCannotGrowMemory(requestedSize)
- },
- abortOnCannotGrowMemory(requestedSize) {
- abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`);
- },
- _fd_write(fd, iov, iovcnt, pnum) {
- let num = 0
- for (let i = 0; i < iovcnt; i++) {
- let ptr = HEAP32[((iov) >> 2)]
- let len = HEAP32[(((iov) + (4)) >> 2)]
- iov += 8
- for (let j = 0; j < len; j++) {
- printChar(fd, HEAPU8[ptr + j])
- }
- num += len
- }
- HEAP32[((pnum) >> 2)] = num
- return 0
- },
- _fd_close(fd) {
- abort('fd_close called without SYSCALLS_REQUIRE_FILESYSTEM');
- return 0
- },
- _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
- abort('it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM')
- return 0;
- },
- _emscripten_date_now() {
- return new Date().getTime()
- },
-
-
-
-
-
-
-
- loadWxWasm() {
- let self = this
- let configParam = {}
- configParam.emscripten_memcpy_js = this._emscripten_memcpy_js
- configParam.emscripten_resize_heap = this._emscripten_resize_heap
- configParam.fd_write = this._fd_write
- configParam.fd_close = this._fd_close
- configParam.fd_seek = this._fd_seek
- configParam.emscripten_date_now = this._emscripten_date_now
-
-
- let importObject = {}
- importObject.env = configParam
- importObject.wasi_snapshot_preview1 = configParam
-
-
-
- WXWebAssembly.instantiate("wasm/aplm8000sdk.wasm", importObject).then((res) => {
- self.wasmInstance = res.instance
- self.wasmFuncs = this.wasmInstance.exports
- if (self.wasmInstance.exports['memory']) {
- let buf = self.wasmInstance.exports['memory'].buffer
- HEAP8 = new Int8Array(buf)
- HEAPU8 = new Uint8Array(buf)
- HEAP16 = new Int16Array(buf)
- HEAPU16 = new Uint16Array(buf)
- HEAP32 = new Int32Array(buf)
- HEAPU32 = new Uint32Array(buf)
- HEAPF32 = new Float32Array(buf)
- HEAPF64 = new Float64Array(buf)
- }
-
- self.wasmFuncs.main()
-
- self.wasmDataPtr.bleBtsDataPtr = self.wasmFuncs.exchange_js_get_route_bts_save_address()
-
- self.wasmDataPtr.installBtsDataPtr = self.wasmFuncs.exchange_js_get_install_bts_save_address()
-
- self.wasmDataPtr.audioDataPtr = self.wasmFuncs.exchange_js_get_audio_data_save_address()
-
- self.wasmDataPtr.currentLocationCoordPtr = self.wasmFuncs.exchange_js_get_current_location_coord_save_address()
-
- self.wasmDataPtr.accDataPtr = self.wasmFuncs.exchange_js_get_acc_save_address()
-
- worker.postMessage({
- message: 'WORKER_MAIN_START_MONITOR_BLE_BTS',
- data: ''
- })
-
-
-
-
-
-
-
-
-
-
- }).catch((err) => {
- console.log("加载wasm对象出错", err)
- })
- },
-
- saveBleBtsDataToLocal(dataList) {
- if (!dataList || dataList.length < 4) {
- return
- }
-
- this.data.bleBtsMonitorSuccessFlag = true
- this.data.bleBtsDataList.splice(0, this.data.bleBtsDataList.length)
- this.data.bleBtsDataList = dataList
-
- if (!this.data.installBtsInjectFlag) {
- worker.postMessage({
- message: 'WORKER_MAIN_ORGANIZE_INSTALL_BTS_DATA',
- data: ''
- })
- }
- },
-
- clearBleBtsData() {
- this.data.bleBtsMonitorSuccessFlag = false
- this.data.bleBtsDataList.splice(0, this.data.bleBtsDataList.length)
- },
-
- sendBleBtsDataToWasm() {
- let dataList = []
-
- if (!this.data.bleBtsMonitorSuccessFlag) {
- return
- }
-
- dataList = this.data.bleBtsDataList
- let dataLen = dataList.length
- if (this.wasmDataPtr.bleBtsDataPtr > 0) {
- let ptr = this.wasmDataPtr.bleBtsDataPtr / 4
- for (let i = 0; i < dataLen; i++) {
- HEAP32[ptr + i] = dataList[i]
- }
- } else {
- console.log("蓝牙指针尚未初始化")
- }
-
- this.data.bleBtsDataList.splice(0, this.data.bleBtsDataList.length)
- this.data.bleBtsMonitorSuccessFlag = false
-
-
-
-
- },
-
- sendInstallBtsDataToWasm(dataList) {
-
- if (this.wasmDataPtr.installBtsDataPtr > 0) {
- this.data.installBtsInjectFlag = true
-
- let ptr = this.wasmDataPtr.installBtsDataPtr / 4
- for (let i = 0; i < dataList.length; i++) {
- HEAP32[ptr + i] = dataList[i]
- }
-
-
-
- worker.postMessage({
- message: 'WORKER_MAIN_START_REC',
- data: ''
- })
- }
-
-
-
-
- },
-
-
- processAudioData(buffer) {
-
- this.sendBleBtsDataToWasm()
-
-
- const dataView = new DataView(buffer);
-
- let sample = 0
- let dataLen = Math.floor(dataView.byteLength / 2)
- if (dataLen > 0) {
-
- for (let i = 0; i < dataLen; i++) {
- sample = dataView.getInt16(2 * i, true)
- this.data.audioDataList.push(sample)
- }
-
- let frameCounter = Math.floor(this.data.audioDataList.length / this.data.oneFrameLen)
- if (frameCounter) {
-
- const dataList = this.data.audioDataList.splice(0, frameCounter * this.data.oneFrameLen)
-
- let ptr = this.wasmDataPtr.audioDataPtr / 2
- for (let i = 0; i < frameCounter; i++) {
-
-
- let baseIndex = i * this.data.oneFrameLen
- for (let j = 0; j < this.data.oneFrameLen; j++) {
- let item = dataList[baseIndex + j]
- HEAP16[ptr + j] = item
- }
-
- let oneFrameAccDataList = []
- oneFrameAccDataList = this.organizeOneFrameAccData()
- this.injectAccDataToWasm(oneFrameAccDataList)
-
- let result = this.wasmFuncs.exchange_js_notice_wasm_start_work()
-
-
-
- if (result != 1) {
- console.log("音频数据处理错误")
- } else {
- let item = []
-
- let locationCoordPtr = this.wasmDataPtr.currentLocationCoordPtr / 4
-
- for (let i = 0; i < 18; i++) {
- item.push(HEAP32[locationCoordPtr + i])
- }
-
-
- if (item[0] === 1 && item[1] === 1) {
- let coord = {}
- coord.x = item[2]
- coord.y = item[3]
-
- const imuMoveFlag = item[17]
- if (imuMoveFlag == 50) {
-
- worker.postMessage({
- message: 'WORKER_MAIN_CURRENT_LOCATION_COORD',
- data: coord
- })
- } else {
- console.log("imu move flag:", imuMoveFlag)
- }
- }
-
-
-
-
-
- }
- }
- }
- }
- return
- },
-
- storeAccData(oneAccData) {
- let item = {}
- item.timestamp = oneAccData.timestamp
- item.x = oneAccData.x
- item.y = oneAccData.y
- item.z = oneAccData.z
- this.data.accDataList.push(item)
- },
-
- organizeOneFrameAccData() {
- let oneFrameAccData = []
- if (this.data.accDataList.length > 0) {
- let stopTimestamp = this.data.accDataList[0].timestamp + 260
- let accCounter = 0
- for (let k = 0; k < this.data.accDataList.length; k++) {
- let oneAcc = {}
- oneAcc = this.data.accDataList[k]
- if (oneAcc.timestamp <= stopTimestamp) {
- oneFrameAccData.push(oneAcc)
- accCounter++
- } else {
- break
- }
- }
- this.data.accDataList = this.data.accDataList.slice(accCounter)
- }
- return oneFrameAccData
- },
-
- injectAccDataToWasm(dataList) {
- let ptr = this.wasmDataPtr.accDataPtr / 4
- let wLen = dataList.length;
- let item = {}
- if (wLen > 0) {
-
- HEAPU32[ptr] = wLen
- ptr++
-
- for (let i = 0; i < wLen; i++) {
- item = dataList[i]
- ptr = ptr + i * 3
- HEAPF32[ptr] = item.x
- HEAPF32[ptr + 1] = item.y
- HEAPF32[ptr + 2] = item.z
- }
-
- this.wasmFuncs.exchange_js_notice_wasm_save_acc()
- }
- },
-
- noticeWasmFreeMemory() {
- this.wasmFuncs.exchange_js_notice_wasm_free_memory()
- }
- }
- export default wasmapi
|