Cypress技术论坛
直播中

史娟

7年用户 144经验值
私信 关注
[问答]

如何将服务器限制为只与一个客户端绑定?

在BLE 4.2组件配置对话框上,我在GAP安全页面上设置了以下设置:
安全模式:模式1;安全级别:未经认证的加密配对;I/O能力:无输入无输出;绑定要求:绑定。
我想设置最大的键合装置:1,但由于某种原因,设定固定在4,变灰。数据表表示只有在启用绑定时才启用该设置,并且在“BLE V3.10”(SiC)中不可用。所以它应该是可用的,但它不是!
我还试图在代码中使用它:使用CyBlyGAPGETBooDeDeCeSeLIST获取绑定设备的计数,以查看绑定请求是否为Gt;0。这很好,除了我无法计算如何拒绝请求!CyLabyEvtGAPHAuthOrthReq在我的事件处理程序中被触发,但是即使我在EvestPARAM中设置“Authr”代码,配对仍然完成,并且在绑定列表中有两个设备。如果这确实阻止了绑定,我不确定无论如何都会起作用,因为CyByLyEvtGAPHAuthOrgReq似乎已经在绑定列表中的设备重新连接时触发。
我试图实现的是,在一个客户端和一个服务器之间建立一个绑定,而不需要一个密钥等将一个服务器绑定到一个新的客户端,您必须删除服务器中现有的绑定记录,这需要物理访问,但看起来唯一的实现方法是绑定机智。H三附加设备,然后把它们锁在抽屉里,这样固定大小的债券清单就满了!
有人能给我一个前进的道路吗?

回帖(2)

刘辉

2019-10-24 10:14:24
你好,
有一次,您与预期的设备绑定,您可以简单地设置CyByAuthOnfOf.Booin=CyLyth-GAPB-BooNoNo.NO;
当做,
- Madhu Sudhan
举报

史娟

2019-10-24 10:25:35
再次感谢Madhu。
但是我注意到API帮助文件中没有记录。
我最后采取了以下的替代方法:
在配置/间隙设置/广告设置中设置过滤策略:“扫描请求:任意连接请求:白名单”。
在CyByLyEvtGAPHAuthAuthOrth:和CyByLyEvtStaskon:使用CyLygGAPGETBooDeDeCeStLIST和CyLabyGAPDeDeCiTeWiThelEistRIST将设备地址从绑定列表复制到白名单。
将API函数CyByrgGAPStad广告复制到我自己的版本中,并将其修改为:
UITC8 BReCPIOAdFieldRealPrase= 0xFFU;CyLabyAppIReultTyt bReCpPyGAPSTART广告(UIT8广告IdvalType,UTI8ByPASTFILE){CyLuffiApIILRESULTREST APIREST;//JH:将这些行添加到API中复制的版本:IF(BReCpCyAdvFieldPrase==0xFFU)BReCpPyAdvFieldReals= CyByLydIsPrimyMoDeField.AdvPARAM-gt;AdvFlutRealPosivices;CysLyDebug MyDeField.AdvPARAM-G.AdvFlutOrd= =(ByPasFlter)?CybLyGAPxScMyAythyCalnOn:B/E****(AdvultIdValyType & gt;CyByLuffAuthChina自定义){APIRESULL CyByrErrOr.ValuiDyPosil参数;}否则((CyByLyStayeOxList==CyByLyGestStE.())和;((CyByLyEvEnthller-Fland;CyBylStaskFig)==0U){BrcPyLeSythEng=(CyByLyGestStand()))如果(CyrPyIdValyType=CyByLyAuthChina快速){CyByLyFlxFasdAdvIdTimeOUT;CybLyDebug MyDeField.AdvPARAM-GT;Advutvmin=CyByLyFasdAdvIntIn min;CyByLyStudioMyDeFieln.AdvPARAM-GT;AdvutvMax=CyByLyFasthAdvIn InthMax;}否则(广告)Yype=CyLyByDyjyMyDeFiFo.Avto=CyLyLySuffyAdvIdTimeOUT;CysLyDebug MyDeField.AdvPARAM-G.Advutvmin=CyLyLySuffyAdvIn In Min;CysLyDebug MyDeFieln.AdvPARAM-GT;AdvutvMax=CyLyLySlavyAdvIn InMax;} /*不更新广告间隔*/{}CyByLuffEngultInValyType = Apple SimultIVALYTYPE;APIRESULL CYBLYGGAPPATION Debug模式(&CyByLyDebug MyDeFielf);如果(CyByrErrOrthOrk==APIREST){CyByLyEvEnthalLeFrase} = CyByLyStudioFig;}否则{ApReMeultCyByrErrOr.ValuiDySt.;}返回(ApReMead);}现在我当债券列表为空时,可以重写该过滤器,并在债券已被配置时将其应用于配置中,防止任何其他设备连接,从而防止粘接。
令人恼火的是,不能通过发布的API来做这种事情。我发现(硬方法)你必须在配置中使用白名单设置过滤策略,否则CyByLyGAPDeDeCiTeWoThelEistScript失败,所以你不能在没有一个过滤策略的情况下启动,然后设置一个绑定,这将是更自然的。
-约翰
举报

更多回帖

发帖
×
20
完善资料,
赚取积分