wch_ble_dll 连接成功回调函数不生效,无法获取特征值 ,请大佬们帮看看

各位大佬好

    按照官方文档的示例  

        

    WCHBLEInit  

    WCHBLEEnumDevice 

    WCHBLEOpenDevice   

    上边这三个函数都通了,  然后 WCHBLEOpenDevice 这个方法的回调函数没有触发,当然这个不影响流程不用也行


    WCHBLEGetAllServicesUUID

    然后这个返回的uuid 是前边四位, 比如说我在浏览器上使用的uuid 全称叫做 0000abf0-0000-1000-8000-00805f9b34fb

    这个函数返回的是 f0 ab  一个 ushort类型的两个字节 ,

    我想问一下  ,这个返回值是全部的吗?还是说他们被截断了。


    WCHBLEGetMtu

    这个mtu也没什么问题

    

    WCHBLEGetCharacteristicByUUID 

    这个是我比较苦恼的一个方法,我看文档上边他的入参是 

    [ WCHBLEHANDLE, 'ushort'ref.refType('ushort'), ref.refType('ushort') ]

    除了第二个参数  比 WCHBLEGetAllServicesUUID 多了一个 ushort 以外  基本都是一样的。

    但是执行完 WCHBLEGetCharacteristicByUUID  这个方法, 内存里边什么都没有 ,返回值是0,也不报错。

    第一个参数因为前边好多方法用了所以我没有考虑他有问题

    第三个和第四个参数,我改了很多格式或者直接传入buffer

    我比较怀疑的是第二个参数 ,我尝试了用

    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 第二个参数的返回值  pUUIDArry

    image.png


    甚至是字符串


    下边是我的定义和调用  有大佬能帮忙看看吗?救救孩子


        const voidRef = ref.refType('void')


        // 订阅回调

        const ParamInf = ref.refType('void')

        // 蓝牙对象

        const WCHBLEHANDLE = ref.refType('void')

        // 连接回调函数类型

        const pFunDevConnChangeCallBack  = ffi.Function('void',[voidRef,'uchar'])

        // 订阅回调

        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')         ]

             ]

         });

            


        

        // 连接蓝牙回调函数

        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('连接成功')

            

       // 获取主服务下得特征值服务

        // 函数返回值为 0 成功;

        // 返回值为 1 设备句柄无效;

        // 返回值为其他表示获取失败。

        const pCharacteristicUUIDArry = Buffer.alloc(200)

        const pCharacteristicUUIDArryLen = ref.alloc(ref.types.ushort,404)

   

        const WCHBLEGetCharacteristicByUUIDResult =  await dll.WCHBLEGetCharacteristicByUUID(

            WCHBLEHANDLEResult,

            activeService,// 这个是上图 f0 ab 那段内存

            pCharacteristicUUIDArry,

            pCharacteristicUUIDArryLen

        )

        if(WCHBLEGetCharacteristicByUUIDResult){

            console.log('获取特征值服务失败',WCHBLEGetCharacteristicByUUIDResult)

            return

        }


我邮箱个人信息保护,已隐藏 谢谢大佬们


或者谁能提供下   dll 的源码吗? 官网没有找到, 谢谢


您好,请查收邮件获取联系方式。


只有登录才能回复,可以选择微信账号登录