各位大佬好
????按照官方文檔的示例??
????????
????WCHBLEInit??
????WCHBLEEnumDevice?
????WCHBLEOpenDevice? ?
? ? 上邊這三個(gè)函數(shù)都通了,? 然后?WCHBLEOpenDevice 這個(gè)方法的回調(diào)函數(shù)沒有觸發(fā),當(dāng)然這個(gè)不影響流程不用也行
????WCHBLEGetAllServicesUUID
? ? 然后這個(gè)返回的uuid 是前邊四位, 比如說我在瀏覽器上使用的uuid 全稱叫做?0000abf0-0000-1000-8000-00805f9b34fb
? ? 這個(gè)函數(shù)返回的是 f0 ab? 一個(gè) ushort類型的兩個(gè)字節(jié) ,
? ? 我想問一下? ,這個(gè)返回值是全部的嗎?還是說他們被截?cái)嗔恕?/span>
????WCHBLEGetMtu
????這個(gè)mtu也沒什么問題
????
????WCHBLEGetCharacteristicByUUID?
????這個(gè)是我比較苦惱的一個(gè)方法,我看文檔上邊他的入?yún)⑹?
? ? [?WCHBLEHANDLE, 'ushort',?ref.refType('ushort'),?ref.refType('ushort') ]
? ? 除了第二個(gè)參數(shù)? 比?WCHBLEGetAllServicesUUID 多了一個(gè)?ushort 以外? 基本都是一樣的。
? ? 但是執(zhí)行完?WCHBLEGetCharacteristicByUUID? 這個(gè)方法, 內(nèi)存里邊什么都沒有 ,返回值是0,也不報(bào)錯(cuò)。
? ? 第一個(gè)參數(shù)因?yàn)榍斑吅枚喾椒ㄓ昧怂晕覜]有考慮他有問題
? ? 第三個(gè)和第四個(gè)參數(shù),我改了很多格式或者直接傳入buffer
? ? 我比較懷疑的是第二個(gè)參數(shù) ,我嘗試了用
????const ServiceUUID = ref.alloc(ref.types.ushort)
? ? ? ? ? ? ServiceUUID[0] = 0xf0
? ? ? ? ? ? ServiceUUID[1] = 0xab
????或者
????
????const?ServiceUUID?=?ref.alloc(ref.types.ushort)
? ? ? ? ? ??ServiceUUID[0] =?0xab
? ? ? ? ? ??ServiceUUID[1] =?0xf0
????或者 直接使用?WCHBLEGetAllServicesUUID 第二個(gè)參數(shù)的返回值??pUUIDArry
? ??
? ? 甚至是字符串
? ? 下邊是我的定義和調(diào)用? 有大佬能幫忙看看嗎?救救孩子
? ? ? ? const voidRef = ref.refType('void')
? ? ? ? // 訂閱回調(diào)
? ? ? ? const ParamInf = ref.refType('void')
? ? ? ? // 藍(lán)牙對(duì)象
? ? ? ? const WCHBLEHANDLE = ref.refType('void')
? ? ? ? // 連接回調(diào)函數(shù)類型
? ? ? ? const pFunDevConnChangeCallBack ?= ffi.Function('void',[voidRef,'uchar'])
? ? ? ? // 訂閱回調(diào)
? ? ? ? const pFunReadCallBack = ffi.Function('void',[ParamInf,ref.refType('char'),'ulong'] )
? ? ? ? const dll = ffi.Library('./LIB//x64/WCHBLEDLL.dll', {
? ? ? ? ? ? 'WCHBLEOpenDevice': [ WCHBLEHANDLE, ['char*',pFunDevConnChangeCallBack ] ],
? ? ? ? ? ? 'WCHBLEGetCharacteristicByUUID': [ 'uchar',
????????????????[WCHBLEHANDLE,'ushort',ref.refType('ushort'),ref.refType('ushort') ????????]
?????????????]
???????? });
????????????
????????
? ? ? ? // 連接藍(lán)牙回調(diào)函數(shù)
? ? ? ? const pFunDevConnChange = ffi.Callback('void',[voidRef,'uchar'],function (hDev,ConnectStatus){
? ? ? ? ? ? console.log('xxx')
? ? ? ? ? ? console.log(hDev)
? ? ? ? ? ? console.log(ConnectStatus)
? ? ? ? })
? ? ? ? global.__bleCallback = pFunDevConnChange
? ? ? ? const activeBleBufferRef = bleMap.get('EVA_ZERO_PA01')
? ? ? ? // 連接
? ? ? ? const WCHBLEHANDLEResult = ?await dll.WCHBLEOpenDevice(activeBleBufferRef,pFunDevConnChange)
? ? ? ? global.WCHBLEHANDLEResult = WCHBLEHANDLEResult
? ? ? ? console.log('連接成功')
????????????
? ? ? ?// 獲取主服務(wù)下得特征值服務(wù)
? ? ? ? // 函數(shù)返回值為 0 成功;
? ? ? ? // 返回值為 1 設(shè)備句柄無效;
? ? ? ? // 返回值為其他表示獲取失敗。
? ? ? ? const pCharacteristicUUIDArry = Buffer.alloc(200)
? ? ? ? const pCharacteristicUUIDArryLen = ref.alloc(ref.types.ushort,404)
? ?
? ? ? ? const WCHBLEGetCharacteristicByUUIDResult = ?await dll.WCHBLEGetCharacteristicByUUID(
? ? ? ? ? ? WCHBLEHANDLEResult,
? ? ? ? ? ? activeService,// 這個(gè)是上圖 f0 ab 那段內(nèi)存
? ? ? ? ? ? pCharacteristicUUIDArry,
? ? ? ? ? ? pCharacteristicUUIDArryLen
? ? ? ? )
? ? ? ? if(WCHBLEGetCharacteristicByUUIDResult){
? ? ? ? ? ? console.log('獲取特征值服務(wù)失敗',WCHBLEGetCharacteristicByUUIDResult)
? ? ? ? ? ? return
? ? ? ? }