前言:这篇文章是对于苹果协议文件《HomeKit ADK Integration Guide - Addendum for
Televisions》的学习,针对版本为ADK 6.0电视。描述了将HomeKit ADK的电视简介集成到目标平台中所需的步骤。

总说明

此配置文件用于控制启用Airplay的电视,并需要AirPlay视频SDK来构建AirPlay共享键存储库和MFi软件身份验证示例。ADK公开了一个PAL API,AirPlayTEE,以启用与AirPlay共享密钥存储的集成。这使得将Ed25519长期密钥、设备ID和AirPlay和HomeKit之间共享的配对存储在一个单独的可信执行环境中。所提供的示例假设AirPlay视频公开了一个插座机制和一个回调机制,允许HomeKit电视与AirPlay视频通信。通信机制用于更新HomeKit能够更改的配置,例如电视的配置名称。SDK示例提供了一个通过命令行与电视服务和特征进行交互的接口。这在开发和测试过程中很有用。

1.1.HomeKit电视和AirPlay视频集成概述

这个HomeKit版本提供的电视样本提供了与AirPlay视频的集成。HomeKit电视和AirPlay视频共享相同的Ed25519长期密钥、设备ID和配对,使这两种服务成为相同的附件。Ed25519长期密钥和配对需要驻留在加密安全存储中。同时访问这些秘密需要在AirPlay视频和HomeKit之间的同步。以下资源与电视个人资料相关:

  1. AirPlay视频共享键存储界面。
  2. AirPlay视频MFi软件认证示例。
  3. 为了访问配对键,AirPlay视频使用共享键商店提供的功能。所提供的示例使用一个文件来共享Ed25519的长期秘密、配对和设备ID。
  4. HomeKit使用双平台的AirPlayTEE平台API来存储配对、设备ID和Ed25519长期密钥。所提供的默认实现使用了AirPlay共享密钥存储接口。特定于HomeKit的配置和配置存储在一个单独的HomeKit键值存储中。
  5. 根据AirPlay中的实现,秘密存储在共享的平面文件或硬件受信任的执行环境中。默认的实现使用了一个基于平面文件的密钥链——这需要一个锁定机制,以确保HomeKit和AirPlay都能够安全地修改密钥链的内容。
  6. AirPlay视频直接使用共享密钥存储界面访问它的配对。

请注意,AirPlay视频和HomeKit的配对键并不是静态配置的。相反,它们是在使用附件时生成/交换的。

1.2.HomeKit平台AirPlayTEE界面

HAPPlatformAirPlayTEE接口允许供应商将可信的执行环境插入到HomeKit应用程序中。当附件在运行时,配对指数应该是稳定的。在所提供的实现中,AirPlayTEE接口使用AirPlay共享密钥存储程序API来读取和读写到AirPlay共享密钥存储程序中。

1.3.AirPlay视频插座接口

电视应用程序使用以下界面来配置和控制AirPlay视频:
1、可配置的AirPlay视频属性:

  • HomeKit启用
  • HomeKit访问
  • 控制级别配置名称
  • 安全模式
  • 密码

2、控制AirPlay视频的操作:

  • 重置配对——删除所有的配对播放视频特定的
  • 重置身份——删除设备id和长期密钥存储在播放视频
  • 启动服务器——启动播放视频服务器
  • 停止服务器——停止播放视频服务器
  • 配对开始——通知播放视频配对开始
  • 配对完成——通知播放视频配对完成
  • 设置代码改变——通知播放视频设置代码改变
  • 显示播放设置——通知播放视频显示视频设置

该接口在HirPlay.h中公开,显示在HomeKit侧,并在AirPlay中作为一个套接字通信机制实现

1.4.AirPlay视频回调界面

电视应用程序使用以下界面进行HomeKit和播放视频之间的通知和响应:
1.从AirPlay视频到HomeKit的通知

  • 播放视频开始
  • 播放视频停止
  • 取消配对请求-播放视频请求HomeKit解除配对和工厂重置
  • 更新设置-播放视频通知HomeKit更新的值为可配置的播放视频属性
  • 请求HomeKit日志-播放视频请求HomeKit的日志,如果可用的话

1.5.软件认证

HomeKit依赖于MFiServerTEETask API,作为AirPlay视频SDK的一部分交付,用于软件认证。用于软件身份验证的相关MFi密钥和用于DRM的FairPray秘密是特定于AirPlay的,不需要使用SharedKeyStore接口进行同步。

1.6.单进程

HomeKit包含在播放进程中,而不是单独运行。AirPlay负责创建和管理HomeKit ADK主线程。这就需要将ADK构建为一个库,而不是一个独立的应用程序。在运行make时,请使用“静态”或“共享”目标来生成必要的库。

1.7.动态二维码生成

对于支持显示的配件,设置代码连续生成,每5分钟或每次配对尝试后更改一次。

  • 如果在应用程序初始化期间启用了显示功能,则会自动启动配对模式
  • HAPPlatformAccessorySetupDisplayUpdateSetupPayload通知设置代码更改时(例如每5分钟),向用户显示的二维码必须相应更新。c中的示例代码使用控制台,必须适应使用显示器。
  • 对于具有复杂UI界面的附件,新的API功能HAPPlatformAccessorySetupDisplayHandleStartPairing会在注册配对尝试时通知附件,并可用于引导用户进入显示设置有效负载的配对屏幕。
  • 同样地,HAPPlatformAccessorySetupDisplayHandleStopPairing表示配对尝试何时中止或成功。可以使用HAPAccessoryServerIsPaired API来确定配对是否成功

电视示例使用AirPlay插座通信模式将更新后的二维码发送到AirPlay

1.8.软件认证

HomeKit依赖于作为AirPlay视频SDK的一部分提供的软件认证。用于软件身份验证的相关MFi密钥和用于DRM的FairPray秘密是特定于AirPlay的,不需要使用SharedKeyStore接口进行同步。


2.启用电视配置文件

在使用电视档案时,可以禁用某些ADK功能。当使用示例Makefile时,可以使用“配置文件=电视”构建选项来完成,并导致在HAP和PAL中关闭以下功能:

  • HAP_FEATURE_CAMERA
  • HAP_FEATURE_MICROPHONE
  • HAP_FEATURE_SPEAKER
  • HAP_FEATURE_WIFI_ROUTER
  • HAP_FEATURE_NFC

如果附件需要,这些功能可以安全地单独重新启用。例如,一些配件可能想要使用NFC配对

3.从HomeKit ADK迁移到电视2.x(或更低)到3.0(或更高)

3.1概述

从ADK 3.0开始,ADK现在将只是作为AirPlay共享键存储平台界面的客户端。这样,就可以将AirPlay共享键存储集成到硬件受信任的执行环境中。假定供应商使用由AirPlay视频提供的HomeKit UI功能。

迁移由在ADK/ Applications/Television/ImportLegacySharedKeyStoreFormat.c中定义并在App.c中调用的导入遗留共享密钥存储格式函数控制。假设电视用的HomeKit ADK是用-DHAVE_AIRPLAY_TEE=1和-DHAP_FEATURE_KEY_EXPORT=1编译的。如果升级前的HomeKit ADK的当前版本已经是3.0或更高版本,则不需要迁移。在App.c中调用的导入遗留共享密钥存储格式的调用可以被注释掉。

3.2.迁移过程

电视的HomeKit ADK包含一个PAL模块,它可以理解AirPlay共享键存储的密钥链格式,并能够将数据迁移到HomeKit键值存储中。

在电视示例中实现了以下迁移过程:

  1. 如果不存在一个单独的HomeKit键值存储,则将创建该键值存储。HomeKit键值存储区的默认位置是文件夹。在当前的工作目录中。以前,HomeKit密钥值存储区共同位于AirPlay共享键存储区密钥链文件中。使用导入遗留共享密钥存储格式函数开始迁移。
  2. 平台共享键存储中的函数HAPPlatformSharedKeyStoreMigrate被调用来将Kit数据从共享键链文件导入到HomeKit键值存储中。AirPlay共享键存储密键链文件的位置由定义KEYCHAINS_PATH和KEYCHAIN_DEFAULT_FILENAME(默认值: ~/Library/Keychains/sharedKeyStore.keychain)控制。
  3. 当成功导入所有HomeKit数据后,HomePlay数据将从共享键存储的密钥链文件中删除。
  4. 成功提取后,迁移代码在域kAppKeyValueStoreDomain_Configuration上设置一个标志,在HomeKit键值存储中设置kAppKeyValueStoreKey_SharedKeyStoreMigrated。
  5. 高速平台中的功能HAPPlatformAirPlayTEEMigrateKeyValueStore被调用来将HomeKit LTSK、HomeKit设备ID和HomeKit配对从HomeKit键值存储迁移到AirPlayTEE PAL模块,该模块使用AirPlay共享键存储平台实现。此时,还可以提供一种将LTSK、设备ID和配对存储在硬件可信的执行环境中的实现。
  6. 当HomeKit LTSK、HomeKit设备ID和HomeKit配对被成功迁移时,它们将从HomeKit键值存储中删除。
  7. 成功迁移后,在域kAppKeyValueStoreDomain_Configuration和键kAppKeyValueStoreKey_AirPlayTEEMigrated的HomeKit键值存储中设置一个标志,以指示Ed25519 LTSK、设备ID和配对已迁移到HomeKit AirPlayTEE PAL模块API。

注意:
8. 所提供的示例不迁移由AirPlay拥有的配对。
9. •在ADK 2.1或ADK 2.2中对HAP平台存储价值存储
10. •模块API所做的任何更改和适应都需要集成到HAP平台共享键存储中,以便迁移成功。如果导入Home共享密钥存储格式失败,
11. •HomeKit ADK将中止。在重新启动时,应用程序将重试迁移过程。

4.用树莓派播放电视

一个树莓派可以被用来展示一个电视配件。本节将描述在树莓派上构建和运行带有集成的ADK电视配置文件的AirPlay视频演示应用程序所需的步骤。

4.1.编译

如何构建空气播放演示与集成的ADK使用码头工人

  1. 下载AirPlaySDK从MFi门户
  2. 提取到$(ADK_ROOT)/外部/ADK/src/
  3. 编译静态ADK库
make TARGET=Raspi PROFILE=Television HOMEKITSTORE_DIR=“/home/pi/.HomeKitStore" stati
  1. 静态编译播放启用ADK
make TARGET=RaspiEmu shellcd ./External/AirplaySDK/src/AirPlaySDKmake -C PlatformPOSIX debug=1 stub=1 os=linux adk=1 -j8 platform=raspi shared=0
ADK_ROOT={PATH_TO_ADK} all

4.2.使用树莓派运行

  • 将所有二进制文件推到设备上。
/Tools/install.sh \ -d raspi \ -a External/AirplayVideoSDK/src/AirPlaySDK/AirPlaySDK/build/Debug-linux/airplaydemo \ -n raspberrypi \ -p raspberry \ -i \ -k
  • 运行开始播放,集成ADK电视简介导出
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:.
./airplaydemo —config {path to Airplay video config.ini file}

5.在Ubuntu上看电视

本节将描述在Ubuntu上构建和运行带有集成的ADK电视配置文件的AirPlay视频演示应用程序所需的步骤(推荐值为18.04)。

5.1.编译

如何构建播放演示与集成ADK

  • 使用本地Ubuntu下载从MFi门户
  • 编译静态ADK库
目标=Linux配置文件=电视静态
  • 提取AirPlaySDK
  • 播放编译播放与ADK启用
cd {PATH_TO_AIRPLAY}make -C PlatformPOSIX debug=1 stub=1 os=linux adk=1 -j8 ADK_ROOT={PATH_TO_ADK}
shared=0 all

5.2在Ubuntu上运行

  1. 创建资源调配文件
 ./Tools/provision_raspi.sh --category 31 --display --product-num E3644573 --setup-code
111-22-333 ~/.HomeKitStore
  1. 运行应用程序
{PATH_TO_AIRPLAY}/build/Debug-linux/airplaydemo —config {path to Airplay video config.ini file}

6.在Raspi上播放电视与模拟Airplay

本节将描述在没有播放的树莓派上构建电视示例应用程序所需的步骤。这将有有限的功能,但可以帮助调试HomeKit代码本身

6.1.编译

如何构建电视应用程序

  • 编译ADK
make TARGET=Raspi USE_DISPLAY=1 apps

6.2.在Raspi上运行

  1. 创建配置文件,并将二进制文件推送到设备上
./Tools/install.sh \ -d raspi \ -a Output/Raspi-armv6k-unknown-linux-gnueabihf/Debug/IP/Applications/Television.OpenSSL\ -n raspberrypi \ -p raspberry \ -i \ -k
  1. 运行应用程序
./Television.OpenSSL

7.其他编译选项

本节将描述电视示例应用程序支持的其他ADK编译选项。以下选项可用于修改应用程序的行为。ADK做出选项:

8.电视用的PAL模块

8.1.基于证书的身份验证

基于PAL/POSIX/HAPPlatformMFiSWAuth.c中提供的基于AirPlay视频MFiServerTEETask实现的演示实现。

要编译启用了基于证书的身份验证的电视示例附件,请使用以下命令:

make TARGET=Raspi PROFILE=Television apps

使目标=Raspi配置文件=电视应用程序

ADK不附带测试证书

8.2.AirPlay视频共享钥匙存储器界面

以下PALAPi可以使HomeKit集成到AirPlay共享KeyStore中:

• HAPPlatformAirPlayTEEGetDeviceID
• HAPPlatformAirPlayTEESignBytes
• HAPPlatformAirPlayTEEGetLTPK
• HAPPlatformAirPlayTEEPairingAdd
• HAPPlatformAirPlayTEEPairingSetPermissions
• HAPPlatformAirPlayTEEPairingRead
• HAPPlatformAirPlayTEEPairingRemove
• HAPPlatformAirPlayTEEPairingsEnumerateCallback
• HAPPlatformAirPlayTEEResetPairings
• HAPPlatformAirPlay

请参见文件PAL/POSIX/hAPARPARPLAyTEE.h和PAL/PAR/HAPARPLAyTEE.c集成。

注意:如果访问底层TEE的速度很慢,那么可能可以在HAP平台格式的AirPlayTEE接口中缓存对、Ed25519 LTPK和设备ID。所提供的实现已经包含了一种缓存配对索引的机制。

8.3.AirPlay视频 Socket机制

HomeKit SDK提供了一个AirPlay视频插座机制。它使用一个本地文件系统套接字与AirPlay视频(/tmp/AirPlay控制器)通信。文件系统套接字可以通过在电视和AirPraySDK中设置AIRPLAY2_CONTROLLER_SOCKET_PATH定义来配置。AirPlay视频中的服务器端在AirPlay控制器中实现了。AirPlayControllerClient.{c/h},客户端在AirPlay.c中的电视应用程序中实现。电视应用程序还实现了一个简单的本地测试实现。如果平台不支持文件系统套接字,则该实现可以用于提供基于网络的套接字。

套接字机制使用简单的TLV8消息来进行通信,而不需要进行身份验证。必须确保只有电视应用程序连接到插座。

8.4.自定义唤醒配置

有两个唤醒配置服务可用,但一次只能在附件上启用一个。通过在构建/makkefile8.5中设置= USE_CUSTOM_LPM = 0,可以禁用自定义唤醒配置服务。

8.5唤醒局域网/无线局域网配置

通过禁用自定义唤醒配置(参见第8.4节)和在构建/创建文件中设置USE_WOLAN_LPM = 1,可以启用局域网/无线局域网上的唤醒配置服务。

总结
提供了局域网/无无线局域网低功耗模式功能,以帮助实现和集成ADK IP附件的低功耗模式,如电视。这个功能可以与或没有奖金睡眠代理一起使用。

为了启用此功能,ADK提供了:

  • HAP特性,使Homekit能够在附件上配置低功耗模式设置。
  • HAP级功能还准备进入和退出LPM的附件。
  • 一个到mDNS响应器的接口,它将用一个奖金睡眠代理(BSP)注册附件。

注:供应商负责将附件置于低功耗模式(LPM)中。传统上,将设备放入LPM中意味着只有它的网络接口卡是活动的,以便寻找神奇的数据包(这会唤醒它)。

请阅读HAP规范,了解支持的睡眠配置特征,详细信息,这将提供如何在附件上配置局域网/无线局域网设置的说明。

Bonjour睡眠代理

A Bonjour Sleep Proxy acts as the accessory’s proxy when it’s in low power state and responds to all the
requests intended for the accessory after successful registration of the accessory. This also includes
responding to the mDNS requests which allows the accessory to stay in low power state and suspend its
network activities while tricking other devices in the network that it’s still active and reachable.
The BSP can wake up the suspended accessory by sending a magic packet when a connection/request is
targeted for one of the services the accessory has registered with the BSP. HomeKit resident controllers
such as ATVs and HomePods offer BSPs by default and can manage the suspended IP accessories. The
BSP is also an open standard that is implemented on other devices like routers.

当配件处于低功率状态时,奖金睡眠代理作为配件的代理,并在成功注册配件后响应所有请求。这还包括响应mDNS请求,这允许附件保持在低功耗状态,并暂停其网络活动,同时欺骗网络中的其他设备,使它仍然是活动的和可访问的。当连接/请求针对附件注册的服务时,BSP可以通过发送魔法包来唤醒挂起的附件。HomeKit居民控制器,如atv和HomePods默认提供bsp,并可以管理挂起的IP配件。BSP也是一个开放标准,可以在路由器上实现其他设备。

需要进行的供应商代码修改

1.在附件上实现低功率模式。

2.关于何时输入LPN的选择将根据供应商的实现情况而有所不同。当需要进入低功耗模式时,更新休眠附件的运行状态,并在进入低功耗模式之前调用提供的HAP功能(输入低功率模式())。这将关闭所有打开的TCP会话,并更新Bonjour记录,以使用唤醒号(w#)而不是配置号(c#)。

3.当附件从低功耗模式唤醒时,更新休眠附件的运行状态,并调用提供的HAP功能(())。这将更新Bonjour记录,使其使用配置号(c#),而不是唤醒号(w#)。

4.可选:在将附件置于低功耗模式之前,请使用BSP进行注册。休眠状态可以通过其AF_UNIX低功率模式控制插座通信到基于mDNSRanperder的服务发现,从而将已注册的附件服务传输到本地网络上的Bonjour休眠代理服务器。

树莓派低功率模式模拟

要启用树莓派低功耗模式模拟,请在构建/制造文件中设置USE_WOLAN_LPM = 1、USE_WOLAN_SIMULATION = 1和HAP_TESTING = 1。为了测试目的,我们为树莓派提供了一个基于防火墙的电源管理器模拟。

这并打算在实际部署中使用。该实现实际上并没有实现真正的电源管理api。相反,睡眠状态是通过使用网络过滤器安装防火墙规则来模拟的,它可以在睡眠时阻止所有的ARP和IP流量。因此,实现不能依赖标准网络行为在唤醒后重新声明IP地址,所以每次模拟唤醒时,它都会发送ARP和NDP NA包。

局域网唤醒支持也使用侦听器套接字进行模拟,该套接字扫描使用非官方的WoL以太类型0x0842发送的WoL魔法数据包。其他的WoL数据包不被仿真处理,尽管真实的硬件也会支持不同的数据包。

模拟的睡眠状态通过其AF_UNIX低功率模式控制插座通信给基于mDNSRappender的服务发现。这使得我们的注册服务在睡眠时保持在网络上的可用性,通过将它们转移到本地网络上的奖金睡眠代理服务器。当客户试图连接到我们广告中宣传的DNS-SD服务时,奖金睡眠代理就会发送一个魔法包来唤醒我们。

请注意,唤醒也可能出现在其他原因上(例如,当BSP离线时)。在这种情况下,应用程序有责任重新进入低功耗模式,例如等待短时间来查看客户端在醒来后是否连接到相关的广告服务。唤醒我们的原因只能用这样的启发式方法来确定。

利用树莓派LPM模拟的调用流

1.注册回调,以通知应用程序在电源状态中的更改。

在这种情况下,回调是处理电源管理器的睡眠状态已改变。

//观察电源管理器
HAPPlatformPowerManagerDelegate
电源管理器委托;(电源管理代表,电源管理代表)
powerManagerDelegate.handleSleepStateChanged=处理电源管理器休眠状态改变;

2.要通知电源管理器,配件需要睡眠(支持树莓派LPM模拟)
HAPPlatformPowerManagerSleep(accessoryConfiguration.powerManager);
//调用此函数后,将触发处理电源管理器睡眠状态更改(电源管理器状态的注册代理)。

3.通知附件电源管理器要进入休眠(输入LPM)
调用注册通知附件电源状态更改的委托,处理电源管理器休眠状态更改。睡眠状态将为“kHAPPlatformPowerManagerSleepState_EnteringSleep”.

使用这个回调,ADK能够防止附件睡觉,直到我们通过调用ADK提供的函数HAPPlatformPowerManagerSetPreventSleep.来执行所有必要的清理活动此功能将把电视设置为非活动状态,关闭所有打开的TCP会话,并将Bonjour文本记录从使用配置号(c#)更新为唤醒号(w#)。所有其他附件特定的清理都需要由供应商来实施。

4.电源管理器通知附件已开始唤醒(退出LPM)

睡眠状态更改()被调用。睡眠状态将是“kHAPPlatformPowerManagerSleepState_Awake”。

使用此回调,应用程序休眠操作状态状态将更新为已配置。所提供的ADK提供的功能是,()将把奖金文本记录从使用唤醒号(w#)更新为配置号(c#)。所有其他附件特定的唤醒需要由供应商实施。

5.附件通知电源管理器,它是时候唤醒了(退出LPM)

这是通过调用树莓派LPM模拟函数HAPPlatformPowerManagerExitSleep.来完成的必要时的一个例子是,当使用遥控器来打开电视时。

8.6.集成说明

以下集成说明是成功利用电视档案的ADK实现的关键:

  1. 电视示例应用程序使用它自己的一个单独的键值存储区来存储其配置数据。电视键值存储的默认位置是<工作目录>/。家庭小猫商店,或简单的家庭,应用程序/电视。HomeKit的配置需要直接进入电视密钥值存储。
  2. 工厂重置需要全局应用。
  • 详细的重置步骤如下(请参见电视示例中的App.c -附件服务器处理更新状态):

1。停止HomeKit操作。
2.停止播放播放视频。
3.重置空气播放视频配对。

4.重置AirPlay视频标识(即,从共享密钥存储库中删除kSharedKeyStoreLocalIdentifier,kSharedKeyStoreLocalPublicKey和kSharedKeyStoreLocalPrivateKey)。

5.HomeKit重置(HAPRestoreFactorySettings,平台键价值存储购买域,HAPRestoreFactorySettings,恢复平台组件设置)。
6.开始播放播放视频。
7.触发器kAirPlayProperty_HomeKitAccessControlEnabled是错误的。
8.启动HomeKit。

  • 需要按照提供的示例代码完全停止该服务器。
  • 在AirPlay视频中设置kAirPlayProperty_HomeKitAccessControlEnabled为false将触发HomeKit中的重置。当AirPlay视频中触发动作kAirPlayCommand_UnpairHomeKit时,AirPlay视频的补丁将kAirPlayProperty_HomeKitAccessControlEnabled设置为false。
  • 只有在所有内容都干净停止后,才可以调用
  • 恢复数设置,这将共享键存储的HomeKit特定部分重置为出厂设置。
  • 平台存储域0x40包含需要在工厂重置时保存的供应数据——如果必要,此行为可以在◦平台附件安装程序中进行调整。
  1. libhap.a需要大约2 KB的安全闪存来存储16对的所有密钥(仅IP,没有标记认证)。键值对的存储可以在文件中或直接在芯片闪存或EEPROM存储器上。基于键值存储的闪存实现可能需要比HAP多两倍的闪存。可能需要额外的闪存,例如,因为在删除旧扇区之前必须写入闪存扇区的副本(参见键值存储章节)

8.7.未配对配件的Bonjour名称

用户可以在电视上更改未配对配件的名称,这样的名称更改必须反映在Bonjour上。在ADK中,在第一次启动附件服务器之前,将HAPAccesory结构的名称属性设置为新值。

static const HAPAccessory accessory = {.aid = 1,.category = kHAPAccessoryCategory_Televisions,.name = "Acme Television", // <<- This is the Bonjour name, and also what
is put as Name into Accessory Information Service. Once HAP is running it is
immutable..manufacturer = "Acme",.model = "Television1,1",.serialNumber = "099DB48E9E28",.firmwareVersion = "1",.hardwareVersion = "1",.services = (const HAPService *const[]) {&accessoryInformationService,&hapProtocolInformationService,&pairingService,&televisionService,&inputSourceHomeScreenService,&inputSourceTunerService,&inputSourceHDMI0Service,&inputSourceHDMI1Service,&inputSourceHDMI2Service,&inputSourceCompositeVideoService,&inputSourceSVideoService,&inputSourceComponentVideoService,&speakerService,&microphoneService,&occupancySensorService,&lightSensorService,&accessControlService,NULL},.callbacks = {.identify = IdentifyAccessory}
}

一旦HAPAncseroryServer第一次在一个给定的附件上运行,其名称必须不再更改以满足HAP规范在第9.1节附件信息中要求附件名称即使在解除/重新/固件更新和工厂重置中都是不可变的。就ADK而言,在停止辅助服务器的时候,在技术上可以设置新的名称(例如,您可以停止HomeKit服务器,更改名称,并重新启动HomeKit服务器)

【HomeKit】从HomeKit架构层细化到HomeKit ADK集成相关推荐

  1. 软件架构设计原则和大数据平台架构层

    1.软件架构设计的六大原则: 1)"开-闭"原则(OCP) Software entities should be open forextension, but closed fo ...

  2. 性能测试 架构层(二) 从性能测试层面了解架构设计 分布式项目实施过程中的常见难点,测试架构层面思考性能测试应该如何做?自行思考解决方案是什么?

    目录 前言 架构预览 小节 一.访问层架构设计 1.LVS 2.Nginx 二.API 网关层架构设计 1.分布式会话管理 2.接入层控制   Filter过滤器 三.核心服务层架构设计 1.核心服务 ...

  3. Android架构篇-5 CI/CD(持续集成、持续交付、持续部署)

    Android架构篇-5 CI/CD(持续集成.持续交付.持续部署) CI CI是指持续集成,代码的更新会定期自动构建.测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持 ...

  4. iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)

    iOS架构篇-5 CI/CD(持续集成.持续交付.持续部署) CI CI是指持续集成,代码的更新会定期自动构建.测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持续部署, ...

  5. Envoy实现.NET架构的网关(五)集成Redis实现限流

    .NET网关与Gateway实战-Envoy与kong课程 什么是限流 限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合 ...

  6. 全面解析大数据解决方案的架构层

    大数据解决方案的逻辑层可以帮助定义和分类各个必要的组件,大数据解决方案需要使用这些组件来满足给定业务案例的功能性和非功能性需求.这些逻辑层列出了大数据解决方案的关键组件,包括从各种数据源获取数据的位置 ...

  7. 理解大数据解决方案的架构层

    概述 介绍了一种评估大数据解决方案可行性的基于维度的方法.如果您已经使用上一篇文章中的问题和提示分析了自己的情况,并且已经决定开始构建新的(或更新现有的)大数据解决方案,那么下一步就是识别定义项目的大 ...

  8. 逻辑建模与物理建模_架构层和建模域逻辑

    逻辑建模与物理建模 在讨论用于建模域逻辑(例如事务脚本,表模块,域模型)的PoEAA模式时,我注意到人们对域模型模式是最好的印象(尽管印象不对). 因此,他们开始将其应用于所有内容. 不配领域模型模式 ...

  9. 「业务架构」EA874:业务架构层

    业务架构 业务架构一方面是企业业务模型和企业战略之间的桥梁,另一方面是企业业务功能之间的桥梁. 定义–"与公司业务相关的企业架构的一部分,以及描述该业务架构结构的文档和图表." E ...

最新文章

  1. idea在目录中前添加目录_[LaTeX Beamer] 为目录项添加页码
  2. ftp无法显示服务器web文件夹,Web和Ftp服务器.ppt
  3. 大数据新手之路二:安装Flume
  4. android开发自动提示框,Android 多种简单的弹出框样式设置代码
  5. mysql explain G_MySQL 性能优化神器 Explain 使用分析
  6. php_enchant,Enchant - [ php中文手册 ] - 在线原生手册 - php中文网
  7. 火狐浏览器设置背景图片
  8. 中国智能电饭煲行业运营模式及趋势预测分析报告2022-2028年版
  9. Ubuntu14.04.6系统下安装软件和程序库(含安装PyCharm、Visual Studio Code、Boost和Eigen程序库等)
  10. conda常用命令(换源清华源,创建虚拟环境)
  11. Eyenuk宣布FDA核准EyeArt自主AI系统用于糖尿病视网膜病变筛查
  12. kafka命令(较全)
  13. iptables nat及端口映射 【转】
  14. Python之字典(定义、方法、例题)
  15. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法
  16. House of Force
  17. Linux下安装QQ2012
  18. window无法自动修复计算机,win7系统无法自动修复此计算机的解决方法
  19. Metric评价指标-Perplexity语言模型
  20. 有符号右移,无符号右移

热门文章

  1. 360杀毒软件下载2015官方版最新版
  2. Git 当前项目设置 用户名、邮箱
  3. 使用ffmpeg从视频文件中提取音频文件、视频抽帧和切割视频
  4. 【nowcoder 219034】五连珠
  5. 宗宁:拍拍微店猛于虎,或将洗牌微信电商
  6. html合并单元格自动换行,html的table标签用js做合并单元格操作
  7. 思维导图写测试点的几点说明
  8. 图像处理滤波器(五)——斑点滤波器(Speckle Removal Filter)
  9. 亚太融媒|中国品牌网全球、APEC生活+「设计师宇宙」环保熊猫小保保2022贺岁 | 稳略产业基金观察
  10. js 发送http请求