Z-Stack Application Programming Interface
Document Number: SWRA195
Скачать оригинал (eng)
Документ API для приложений, использующих базовый стек ZigBee в качестве модели интерфейса приложения для данных и плоскости управления. Сырой перевод.
Содержание
1. ВВЕДЕНИЕ.........................1
1.1 ЦЕЛЬ .................................. 1
1.2 ОБЛАСТЬ ПРИМЕНЕНИЯ ............................................... 1
1.3 АКРОНИМЫ ........................................... 1
2. ОБЗОР СЛОЯ .......................................... 2
2.1 BDB ............................................. 2
2.2 ZDO ......................................... 2
2.3 AF .......................................... 2
2,4 APS ........................................... 2
2,5 NWK ................................................ . 2
2.6 GREEN POWER ........................ 2
2.7 ZMAC ............................................. 2
3. ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ПРИЛОЖЕНИЙ ............................... 3
3.1 ПОВЕДЕНИЕ БАЗОВЫХ УСТРОЙСТВ (BDB) .................................... 3
3.1.1 Обзор ............................................. 3
3.1.2 Общая конфигурация BDB и использование в сети ....................................... 3
3.1.2.1 bdb_SetIdentifyActiveEndpoint () ................................. 3
3.1.2.2 bdb_setChannelAttribute () ................................... 4
3.1.2.3 bdb_RegisterIdentifyTimeChangeCB () .............................. 4
3.1.2.4 bdb_RegisterBindNotificationCB () ................................ 4
3.1.2.5 bdb_RegisterCommissioningStatusCB () ............................ 5
3.1.2.6 bdb_setCommissioningGroupID () .................................... 5
3.1.2.7 bdb_RepAddAttrCfgRecordDefaultToList () .............. 6
3.1.2.8 bdb_RegisterForFilterNwkDesc () ............................ 6
3.1.2.9 bdb_TouchlinkSetAllowStealing () .............................. 7
3.1.2.10 bdb_RegisterTouchlinkTargetEnableCB () ..................... 7
3.1.3 Конфигурация безопасности BDB .........................7
3.1.3.1 bdb_GenerateInstallCodeCRC () ........................... 7
3.1.3.2 bdb_setJoinUsesInstallCodeKey () .............................. 8
3.1.3.3 bdb_setTCRequireKeyExchange () .......................... 8
3.1.3.4 bdb_addInstallCode () ....................................... 8
3.1.3.5 bdb_RegisterTCLinkKeyExchangeProcessCB ()..............................9
3.1.3.6 bdb_setActiveCentralizedLinkKey ().................................. 9
3.1.3.7 bdb_RegisterCBKETCLinkKeyExchangeCB ()................... 10
3.1.4 BDB Application Runtime API.................................... 10
3.1.4.1 bdb_StartCommissioning ()................................................. 10
3.1.4.2 bdb_initialize ()...............................................11
3.1.4.3 bdb_getZCLFrameCounter () ................................... 11
3.1.4.4 bdb_RepChangedAttrValue () ................................. 12
3.1.4.5 bdb_ZedAttemptRecoverNwk () ..................................... 12
3.1.4.6 bdb_GetFBInitiatorStatus () ..................................... 12
3.1.4.7 bdb_isDeviceNonFactoryNew () ................................ 13
3.1.4.8 bdb_nwkDescFree () ........................................... 13
3.1.4.9 bdb_CBKETCLinkKeyExchangeAttempt () ........................... 13
3.1.4.10 touchLinkTarget_EnableCommissioning () .............................. 14
3.1.4.11 touchLinkTarget_DisableCommissioning () ............................. 14
3.1.4.12 touchLinkTarget_GetTimer () ................................ 15
3.1.4.13 bdb_TouchlinkGetAllowStealing () .................................. 15
3.1.4.14 bdb_resetLocalAction () ................................................ 15
3.1.4.15 bdb_StopInitiatorFindingBinding () .................................... 16
3.1.5 API обратных вызовов времени выполнения приложения BDB .................................... 16
3.1.5.1 обратный вызов bdbGCB_IdentifyTimeChange_t ................................. 16
3.1.5.2 обратный вызов bdbGCB_BindNotification_t ......................................... 16
3.1.5.3 обратный вызов bdbGCB_CommissioningStatus_t ........................ 17
3.1.5.4 обратный вызов bdbGCB_CBKETCLinkKeyExchange_t ..................... 18
3.1.5.5 обратный вызов bdbGCB_TCLinkKeyExchangeProcess_t ............................ 19
3.1.5.6 обратный вызов bdbGCB_FilterNwkDesc_t ............................................ 19
3.2 ОБЪЕКТЫ УСТРОЙСТВА ZIGBEE (ZDO) ............................................... 20
3.2.1 Обзор .............................................. ............................................ 20
3.2.2 Запуск сети устройства ZDO ............................................ 20
3.2.2.1 ZDOInitDeviceEx () ....................................................... 20
3.2.2.2 ZDOInitDevice () ................................................. 21
3.2.3 Обратные вызовы сообщений ZDO ....................................... 21
3.2.3.1 ZDO_RegisterForZDOMsg () .................................. 21
3.2.3.2 ZDO_RemoveRegisteredCB () ............................... 22
3.2.4 ZDO Discovery API ............................................................ ..... 22
3.2.4.1 ZDP_NwkAddrReq () ......................................... 23
3.2.4.2 ZDP_NWKAddrRsp () ..................................... 24
3.2.4.3 ZDP_IEEEAddrReq () .................................. 25
3.2.4.4 ZDP_IEEEAddrRsp () ...................................... 26
3.2.4.5 ZDP_NodeDescReq () .............................. 27
3.2.4.6 ZDP_NodeDes............................... 27
3.2.4.7 ZDP_PowerDescReq().................................28
3.2.4.8 ZDP_PowerDescMsg().............................................. 28
3.2.4.9 ZDP_SimpleDescReq()..........................................29
3.2.4.10 ZDP_SimpleDescRsp()............................29
3.2.4.11 ZDP_ComplexDescReq()............................... 30
3.2.4.12 ZDP_ActiveEPIFReq ()...........................30
3.2.4.13 ZDP_ActiveEPIFRsp()............................. 31
3.2.4.14 ZDP_MatchDescReq()............................31
3.2.4.15 ZDP_MatchDescRsp()...............................32
3.2.4.16 ZDP_UserDescSet().............................33
3.2.4.17 ZDP_UserDescConf()................................33
3.2.4.18 ZDP_UserDescReq()........................................... 34
3.2.4.19 ZDP_UserDescRsp().................................34
3.2.4.20 ZDP_DeviceAnnce()...................................35
3.2.4.21 ZDP_ServerDiscReq()............................... 35
3.2.4.22 ZDP_ServerDiscRsp()...................................... 36
3.2.5 ZDO Binding API........................................................................ 37
3.2.5.1 ZDP_EndDeviceBindReq()...................................... 37
3.2.5.2 ZDP_EndDeviceBindRsp().......................38
3.2.5.3 ZDP_BindReq()................................. 38
3.2.5.4 ZDP_BindRsp()................................... 39
3.2.5.5 ZDP_UnbindReq ()........................................39
3.2.5.6 ZDP_UnbindRsp()............................... 40
3.2.6 ZDO Management API............................. 41
3.2.6.1 ZDP_MgmtNwkDiscReq().................................... 41
3.2.6.2 ZDP_MgmtNwkDiscRsp()................................ 42
3.2.6.3 ZDP_MgmtLqiReq().....................................43
3.2.6.4 ZDP_MgmtLqiRsp().......................................43
3.2.6.5 ZDP_MgmtRtgReq ()....................................... 44
3.2.6.6 ZDP_MgmtRtgRsp().................................44
3.2.6.7 ZDP_MgmtBindReq ()................................... 45
3.2.6.8 ZDP_MgmtBindRsp()................................45
3.2.6.9 ZDP_MgmtLeaveReq ()...................................... 46
3.2.6.10 ZDP_MgmtLeaveRsp()...................................47
3.2.6.11 ZDP_MgmtDirectJoinReq ()............................ 47
3.2.6.12 ZDP_MgmtDirectJoinRsp()................................48
3.2.6.13 ZDP_MgmtPermitJoinReq().................................48
3.2.6.14 ZDP_MgmtPermitJoinRsp().................................... 49
3.2.6.15 ZDP_MgmtNwkUpdateReq().........................49
3.2.6.16 ZDP_MgmtNwkUpdateNotify()..........................50
3.2.7 ZDO Parsing Functions............................................... 50
3.2.7.1 ZDO_ParseAddrRsp.................................... 51
3.2.7.2 ZDO_ParseNodeDescRsp..............................51
3.2.7.3 ZDO_ParsePowerDescRsp..................................... 51
3.2.7.4 ZDO_ParseSimpleDescRsp...................................... 52
3.2.7.5 ZDO_ParseEPListRsp.........................................52
3.2.7.6 ZDO_ParseBindRsp...........................................52
3.2.7.7 ZDO_ParseMgmNwkDiscRsp................................53
3.2.7.8 ZDO_ParseMgmtLqiRsp.......................................... 53
3.2.7.9 ZDO_ParseMgmtRtgRsp............................................53
3.2.7.10 ZDO_ParseMgmtBindRsp...................................54
3.2.7.11 ZDO_ParseMgmtDirectJoinRsp............................... 54
3.2.7.12 ZDO_ParseMgmtLeaveRsp.........................................54
3.2.7.13 ZDO_ParseMgmtPermitJoinRsp.......................... 55
3.2.7.14 ZDO_ParseUserDescRsp...............................55
3.2.7.15 ZDO_ParseServerDiscRsp....................................55
3.2.7.16 ZDO_ParseEndDeviceBindReq..................................56
3.2.7.17 ZDO_ParseBindUnbindReq............................... 56
3.2.7.18 ZDO_ParseUserDescConf............................... 57
3.2.7.19 ZDO_ParseDeviceAnnce...........................................57
3.2.7.20 ZDO_ParseMgmtNwkUpdateNotify............................... 57
3.2.8 ZDO Network Manager...............................................................58
3.2.8.1 NwkMgr_SetNwkManager..................................................58
3.3 APPLICATION FRAMEWORK (AF)....................................................58
3.3.1 Overview...........................................................58
3.3.1.1 Endpoint Management.........................................58
3.3.1.2 Sending Data....................................................63
3.3.1.3 Receiving Data.............................................................65
3.4 APPLICATION SUPPORT SUB-LAYER (APS)............... 65
3.4.1 Overview.....................................................................................65
3.4.2 Binding Table Management....................................... 66
3.4.2.1 Binding Record Structure – BindingEntry_t.........................66
3.4.2.2 Binding Table Maintenance..................................66
3.4.2.3 Binding Table Searching...........................................69
3.4.2.4 Binding Table Statistics.................................... 70
3.4.2.5 Binding Table Non-Volatile Storage.............................. 71
3.4.3 Group Table Management...................................................71
3.4.3.1 Group Table Structures............................................... 72
3.4.3.2 Group Table Maintenance..................................72
3.4.3.3 Group Table Searching................................. 73
3.4.3.4 Group Table Non-Volatile Storage...................75
3.4.4 Quick Address Lookup..................................76
3.4.4.1 APSME_LookupExtAddr()................................ 76
3.4.4.2 APSME_ LookupNwkAddr ().............................. 76
3.5 NETWORK LAYER (NWK).........................................77
3.5.1 Network Management...........................................77
3.5.1.1 NLME_NetworkDiscoveryRequest()........................ 77
3.5.1.2 NLME_NwkDiscReq2()..........................................78
3.5.1.3 NLME_NwkDiscTerm()............................................79
3.5.1.4 NLME_NetworkFormationRequest().....................79
3.5.1.5 NLME_StartRouterRequest()....................................... 80
3.5.1.6 NLME_JoinRequest()......................................80
3.5.1.7 NLME_ReJoinRequest()........................................81
3.5.1.8 NLME_OrphanJoinRequest()................................81
3.5.1.9 NLME_PermitJoiningRequest()............................ 82
3.5.1.10 NLME_DirectJoinRequest()......................... 82
3.5.1.11 NLME_LeaveReq()................................ 83
3.5.1.12 NLME_RemoveChild()........................ 83
3.5.1.13 NwkPollReq()....................................... 84
3.5.1.14 NLME_SetPollRate().....................................84
3.5.1.15 NLME_SetQueuedPollRate()................................. 84
3.5.1.16 NLME_SetResponseRate().......................................85
3.5.1.17 NLME_RouteDiscoveryRequest()........................85
3.5.2 Address Management....................................................... 86
3.5.2.1 Network Variables and Utility Functions.................... 86
3.5.3 Network Non-Volitile Storage...................................................... 90
3.5.3.1 NLME_UpdateNV()...................................................... 90
3.5.4 PAN ID Conflict..................................................................... 90
3.5.4.1 NLME_SendNetworkReport ()...............................91
3.5.4.2 NLME_SendNetworkUpdate().......................... 91
3.5.5 Inter-PAN Transmission........................................92
3.5.5.1 StubAPS_SetInterPanChannel()................. 92
3.5.5.2 StubAPS_SetIntraPanChannel().............................. 92
3.5.5.3 StubAPS_InterPan()......................................92
3.5.5.4 StubAPS_RegisterApp().................................93
3.6 GREEN POWER LAYER............................................ 93
3.6.1 GP_DataInd()...................................93
3.6.2 GP_DataReq()...................................................93
3.6.3 GP_DataCnf().................................................. 94
3.6.4 GP_SecReq()....................................................... 94
3.6.5 GP_SecRsp()...............................................................94
3.7 ZMAC LAYER (ZMAC).....................................................95
3.7.1 ZMacSetTransmitPower()......................................... 95
3.7.2 ZMacLqiAdjustMode()......................................... 95
1. Введение
1.1 Цель
Этот документ предоставляет интерфейс прикладных программистов (API) для компонентов Z-Stack ™, предоставляемых как часть Z-Stack-версии, совместимой с ZigBee-2015.
1.2 Область применения
Этот документ перечисляет реализованный API всех компонентов, предоставляемых в рамках Z-Stack-релиза, совместимого с ZigBee-2015. Детали, относящиеся к каждому интерфейсу, включая структуры данных и вызовы функций, указаны достаточно подробно, чтобы программист мог понять и использовать их во время разработки. API представлены сверху (на уровне приложения) вниз.
1.3 Сокращения
AF Application Framework
AIB APS Information Base Информационная база
API Application Programming Interface Интерфейс прикладного программирования
APS Application Support Sub-Layer Подуровень поддержки приложений
APSDE APS Date Entity
APSME APS Management Entity
ASDU APS Service Datagram Unit Сервисная датаграмма
BDB Base Device Behavior Поведение базового устройства
GP Green Power
LQI Link Quality Indicator
MAC Media Access Control
MSG Message Сообщение
NHLE Next Higher Layer Entity Следующий объект более высокого уровня
NIB Network Information Base Сетевая информационная база
NWK Network Сеть
NV Non-Volatile memory Энергонезависимая память
PAN Personal Area Network Персональная сеть
STAR Топология сети, состоящая из одного главного устройства и нескольких подчиненных устройств
ZDO ZigBee Device Object
2. Обзор слоев
В этом разделе представлен обзор слоев, описанных в этом документе.
2.1 BDB
Уровень поведения базового устройства определяет среду, инициализацию, ввод в эксплуатацию и рабочие процедуры базового устройства, работающего в стеке ZigBee-PRO, для обеспечения взаимодействия профилей. Z-Stack BDB предоставляет структуры данных и интерфейс, которые требуются разработчику приложения для соответствия этой спецификации. Он также предоставляет общую реализацию атрибутов отчетности для приложений, которые поддерживают кластеры с отчетными атрибутами.
2.2 ZDO
Слой ZigBee Device Objects (ZDO) предоставляет функциональные возможности для управления устройством ZigBee. API ZDO предоставляет интерфейс для конечных точек приложений для управления функциями для координаторов, маршрутизаторов или конечных устройств ZigBee, который включает создание, обнаружение и присоединение к сети ZigBee; привязка конечных точек приложения; и управление безопасностью.
2.3 AF
Интерфейс Application Framework (AF) поддерживает интерфейс конечных точек (включая ZDO) с базовым стеком. Z-Stack AF предоставляет структуры данных и вспомогательные функции, которые требуются разработчику для построения описания устройства, и является мультиплексором конечной точки для входящих сообщений.
2.4 APS
API подуровня поддержки приложений (APS) предоставляет общий набор служб поддержки, которые используются как ZDO, так и объектами приложения, определенными производителем.
2.5 NWK
Сетевой уровень ZigBee (NWK) предоставляет услуги управления и передачи данных для компонентов более высокого уровня (приложения).
2.6 Green Power
Службы данных уровня Green Power, которые позволяют более высокому уровню отправлять или получать данные от заглушек Green Power.
Эти заглушки используются для взаимодействия с устройствами зеленого питания либо для ввода в эксплуатацию, либо для нормальной работы в сети.
2.7 ZMAC
Уровень ZMAC обеспечивает интерфейс между 802.15.4 MAC и уровнями ZigBee NWK.
3. Интерфейс прикладного программирования
В этом разделе представлена сводная информация о наиболее часто используемых структурах данных, реализованных в Z-Stack, а также API для доступа к ключевым функциям, предоставляемым указанным уровнем.
3.1 Поведение базового устройства (BDB)
В этом разделе перечислены все вызовы функций, предоставляемые уровнем BDB, которые необходимы для реализации всех команд и ответов, определенных в поведении базового устройства (BDB), а также другие функции для обеспечения взаимодействия между различными устройствами ZigBee. Все функции API BDB классифицируются по общим функциям и функциям настройки безопасности, а также по функциям, которые могут вызываться приложением во время выполнения. Каждая категория обсуждается в следующих разделах.
3.1.1 Обзор
BDB описывает, как обычное устройство ZigBee будет входить и вести себя в сети ZigBee, обеспечивая совместимость профилей между устройствами. Более конкретно, спецификация BDB определяет следующие функциональные возможности:
-
Процедуры инициализации
-
Процедуры ввода в эксплуатацию
-
Процедуры сброса
-
Процедуры безопасности
-
Атрибуты отчетности
Все эти процедуры выполняются с использованием существующего API из других уровней, таких как ZDO, ZCL, NWK и APS.
3.1.2 Общая конфигурация и использование BDB в сети
Весь API BDB содержится в одном заголовочном файле bdb_interface.h. На основе функциональных возможностей BDB и методов, определенных в заголовочном файле, эти функции API представлены в следующих подразделах:
-
Функции, которые приложение должно использовать для настройки параметров BDB.
-
Функции, используемые приложением для настройки параметров безопасности BDB.
-
Функции, вызываемые приложениями после запуска комиссии BDB и во время выполнения приложения.
-
Функции обратного вызова, предоставляемые BDB для уведомления о событиях или выполнения пользовательского кода приложения в определенных частях процедуры ввода в эксплуатацию BDB.
3.1.2.1 bdb_SetIdentifyActiveEndpoint ()
Установите конечную точку, которая будет выполнять поиск и привязку (либо цель, либо инициатор).
Прототип
ZStatus_t bdb_SetIdentifyActiveEndpoint (uint8 activeEndpoint);
Детали параметров
activeEndpoint - активная конечная точка, с которой выполняют поиск и привязку. Если установлено 0xFF, все приложения будут предприняты попытки с конечными точками с идентификатором.
Возврат
ZStatus_t – значения состояния, определенные в ZStatus_t in ZComDef.h.
3.2.5 ZDO Binding API
ZDO Binding API создает и отправляет запросы и ответы на привязку ZDO. Вся информация о привязках (таблицы) хранится в Zigbee Coordinator. Таким образом, только координатор Zigbee может получать запросы на привязку. В таблице ниже перечислены Binding API, поддерживаемые стеком, и соответствующие имена команд в спецификации ZigBee. Пользователь может использовать имя команды в качестве ключевого слова для поиска в последней спецификации ZigBee для дальнейшего использования. Каждый из этих примитивов будет обсуждаться в следующих подразделах.
ZDO Binding API |
ZDP Binding Service Command |
ZDP_EndDeviceBindReq() |
End_Device_Bind_req |
ZDP_EndDeviceBindRsp() |
End_Device_Bind_rsp |
ZDP_BindReq() |
Bind_req |
ZDP_BindRsp() |
Bind_rsp |
ZDP_UnbindReq() |
Unbind_req |
ZDP_UnbindRsp() |
Unbind_rsp |
3.2.5.1 ZDP_EndDeviceBindReq()
Этот вызов создаст и отправит запрос на привязку конечного устройства («Ручная привязка»). Отправьте это сообщение, чтобы попытаться сгенерировать вручную привязку для этого устройства. После ручной привязки вы можете отправить косвенное (без адреса) сообщение координатору, и координатор отправит сообщение на устройство, к которому привязано это сообщение, или вы будете получать сообщения от вашего нового привязанного устройства.
Прототип
afStatus_t ZDP_EndDeviceBindReq( zAddrType_t *dstAddr,
uint16 LocalCoordinator,
byte ep,
uint16 ProfileID,
byte NumInClusters, byte *InClusterList,
byte NumOutClusters, byte *OutClusterList,
byte SecuritySuite );
Детали параметров
DstAddr - Адрес назначения.
LocalCoordinator – Известный 16-битный сетевой адрес родительского координатора устройства.
ep – endpoint/interface в приложении.
ProfileID – идентификатор профиля приложения в качестве ссылки для идентификаторов кластера.
NumInClusters – количество идентификаторов кластеров во входном списке кластеров.
InClusterList – массив идентификаторов входных кластеров (каждый 1 байт).
NumOutClusters – количество идентификаторов кластеров в выходном списке кластеров.
OutClusterList – массив идентификаторов выходных кластеров (каждый 1 байт).
SecuritySuite - тип безопасности, требуемый для сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.5.2 ZDP_EndDeviceBindRsp()
Это макрос, который напрямую вызывает ZDP_SendData(). Вызовите эту функцию, чтобы ответить на запрос привязки конечного устройства.
Прототип
afStatus_t ZDP_EndDeviceBindRsp( byte TranSeq, zAddrType_t *dstAddr, byte Status, byte SecurityEnable );
Детали параметров
TranSeq — порядковый номер транзакции.
DstAddr — адрес назначения.
Status – следующие результаты:
Meaning |
Value |
SUCCESS |
0 |
NOT_SUPPORTED |
1 |
TIMEOUT |
2 |
NO_MATCH |
3 |
SecurityEnable — требуемый тип защиты сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.5.3 ZDP_BindReq()
На самом деле это макрос, который вызывает ZDP_BindUnbindReq(). Этот вызов создаст и отправит запрос на привязку. Используйте эту функцию, чтобы запросить у координатора Zigbee привязку приложения на основе идентификатора кластера.
Прототип
afStatus_t ZDP_BindReq( zAddrType_t *dstAddr, byte *SourceAddr,
byte SrcEP, byte ClusterID, byte *DestinationAddr, byte DstEP, byte SecuritySuite );
Детали параметров
DstAddr — адрес назначения.
SourceAddr – 64-битный IEEE-адрес устройства, генерирующего сообщения.
SrcEP — конечная точка приложения, генерирующего сообщения.
ClusterID – идентификатор кластера сообщений для привязки.
DestinationAddr — 64-битный IEEE-адрес устройства, получающего сообщения.
DstEP — конечная точка приложения, получающего сообщения.
SecuritySuite — требуемый тип защиты сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.5.4 ZDP_BindRsp()
Это макрос, который напрямую вызывает ZDP_SendData(). Вызовите эту функцию, чтобы ответить на запрос привязки.
Прототип
afStatus_t ZDP_BindRsp( byte TranSeq, zAddrType_t *dstAddr, byte Status, byte SecurityEnable );
Детали параметров
TranSeq — порядковый номер транзакции.
DstAddr — адрес назначения.
Status – следующие результаты:
Meaning |
Value |
SUCCESS |
0 |
NOT_SUPPORTED |
1 |
TABLE_FULL |
2 |
SecurityEnable — требуемый тип защиты сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.5.5 ZDP_UnbindReq ()
На самом деле это макрос, который вызывает ZDP_BindUnbindReq(). Этот вызов создаст и отправит запрос на развязку. Используйте эту функцию, чтобы запросить у координатора Zigbee удаление привязки.
Прототип
afStatus_t ZDP_UnbindReq( zAddrType_t *dstAddr, byte *SourceAddr, byte SrcEP, byte ClusterID,
byte *DestinationAddr, byte DstEP, byte SecuritySuite );
Детали параметров
DstAddr — адрес назначения.
SourceAddr – 64-битный IEEE-адрес устройства, генерирующего сообщения.
SrcEP — конечная точка приложения, генерирующего сообщения. ClusterID – идентификатор кластера сообщений для привязки.
DestinationAddr — 64-битный IEEE-адрес устройства, получающего сообщения.
DstEP — конечная точка приложения, получающего сообщения. SecuritySuite — требуемый тип защиты сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.5.6 ZDP_UnbindRsp()
Это макрос, который напрямую вызывает ZDP_SendData(). Вызовите эту функцию, чтобы ответить на запрос отмены привязки
Прототип
afStatus_t ZDP_UnbindRsp( byte TranSeq, zAddrType_t *dstAddr, byte Status, byte SecurityEnable );
Детали параметров
TranSeq — порядковый номер транзакции.
DstAddr — адрес назначения.
Status – следующие результаты:
Meaning |
Value |
SUCCESS |
0 |
NOT_SUPPORTED |
1 |
NO_ENTRY |
2 |
SecurityEnable — требуемый тип защиты сообщения.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.6 ZDO Management API
API управления ZDO формирует и отправляет запросы и ответы управления ZDO. Эти сообщения используются для получения статуса устройства и обновления таблиц. В таблице ниже перечислены API управления, поддерживаемые стеком, и соответствующие названия команд в спецификации ZigBee. Пользователь может использовать имя команды в качестве ключевого слова для поиска в последней спецификации ZigBee для дальнейшего использования. Каждый из этих примитивов будет обсуждаться в следующих подразделах.
ZDP Management API |
ZDP Network Management Service Command |
ZDP_MgmtNwkDiscReq() |
Mgmt_NWK_Disc_req |
ZDP_MgmtNwkDiscRsp() |
Mgmt_NWK_Disc_rsp |
ZDP_MgmtLqiReq() |
Mgmt_Lqi_req |
ZDP_MgmtLqiRsp() |
Mgmt_Lqi_rsp |
ZDP_MgmtRtgReq() |
Mgmt_Rtg_req |
ZDP_MgmtRtgRsp() |
Mgmt_Rtg_rsp |
ZDP_MgmtBindReq() |
Mgmt_Bind_req |
ZDP_MgmtBindRsp() |
Mgmt_Bind_rsp |
ZDP_MgmtLeaveReq() |
Mgmt_Leave_req |
ZDP_MgmtLeaveRsp() |
Mgmt_Leave_rsp |
ZDP_MgmtDirectJoinReq() |
Mgmt_Direct_Join_req |
ZDP_MgmtDirectJoinRsp() |
Mgmt_Direct_Join_rsp |
ZDP_MgmtPermitJoinReq() |
Mgmt_Permit_Join_req |
ZDP_MgmtPermitJoinRsp() |
Mgmt_Permit_Join_rsp |
3.2.6.7 ZDP_MgmtBindReq ()
Если устройство поддерживает эту команду (необязательно), вызов этой функции сгенерирует запрос для целевого устройства на возврат его таблицы привязок. Вызывающее приложение может вызвать эту функцию только в том случае, если флаг компиляции ZDO_MGMT_BIND_REQUEST установлен либо в ZDConfig.h, либо как обычный флаг компиляции.
Прототип
afStatus_t ZDP_MgmtBindReq( zAddrType_t *dstAddr, byte StartIndex, byte SecurityEnable );
Детали параметров
DstAddr — адрес назначения.
StartIndex — отвечающее устройство может иметь больше элементов ответа, чем может поместиться в ответном сообщении, запрашивающая сторона может указать начальный индекс для возможных элементов ответа.
SecurityEnable — true, если безопасность включена.
Возврат
afStatus_t — эта функция использует AF для отправки сообщения, поэтому значения состояния — это значения состояния AF, определенные в ZStatus_t в ZComDef.h.
3.2.6.8 ZDP_MgmtBindRsp()
Если устройство поддерживает эту команду (необязательно), вызов этой функции сгенерирует ответ. ZDO будет генерировать это сообщение автоматически при получении сообщения «Management Binding Request», если флаг компиляции ZDO_MGMT_BIND_RESPONSE установлен либо в ZDConfig.h, либо как обычный флаг компиляции.
Прототип
ZStatus_t ZDP_MgmtBindRsp( byte TranSeq, zAddrType_t *dstAddr,
byte Status, byte BindingTableEntries,
byte StartIndex, byte BindingTableListCount,
apsBindingItem_t *BindingTableList,
byte SecurityEnable );
Детали параметров
TranSeq — порядковый номер транзакции.
DstAddr — адрес назначения.
Status — определяется в ZComDef.h как ZStatus_t.
BindingTableEntries — количество возможных элементов в этом сообщении.
StartIndex — отвечающее устройство может иметь больше элементов ответа, чем может поместиться в ответном сообщении, запрашивающая сторона может указать начальный индекс для возможных элементов ответа. Это поле является начальным индексом для данного ответного сообщения.
BindingTableListCount — количество элементов ответа в этом сообщении.
BindingTableList — список записей таблицы Binding. Информацию об этой структуре можно найти в файле apsBindingItem_t в файле APSMEDE.h. SecurityEnable — true, если безопасность включена.
Возврат
ZStatus_t – значения статуса, определенные в ZStatus_t в ZComDef.h..
3.4.2 Binding Table Management
Таблица привязки APS — это таблица, определенная в статической оперативной памяти (не выделенной). Размер таблицы можно контролировать с помощью 2 элементов конфигурации в f8wConfig.cfg [NWK_MAX_BINDING_ENTRIES и MAX_BINDING_CLUSTER_IDS]. NWK_MAX_BINDING_ENTRIES определяет количество записей в таблице, а MAX_BINDING_CLUSTER_IDS определяет количество кластеров (по 16 бит каждый) в каждой записи.
Таблица определена в nwk_globals.c. Таблица включается только (вместе со следующими функциями), если определены REFLECTOR или COORDINATOR_BINDING. Использование директивы компилятора REFLECTOR включает функции привязки источника.
3.4.2.1 Binding Record Structure – BindingEntry_t
typedef struct
{
// Нет адреса src, поскольку src всегда является локальным устройством.
uint8 srcEP;
uint8 dstGroupMode; // Тип адреса назначения; 0 - Обычный адрес,
// 1 - Групповой адрес
uint16 dstIdx; // Это поле используется в обоих режимах (групповом и негрупповом)
// для записи NV и RAM области
// dstGroupMode = 0 - Обычный адрес
// dstGroupMode = 1 - Групповой адрес
uint8 dstEP;
uint8 numClusterIds;
uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS];
// Не используйте MAX_BINDING_CLUSTERS_ID, когда
// с помощью поля clusterIdList. Использовать
// gMAX_BINDING_CLUSTER_IDS
} BindingEntry_t;
srcEP — исходная конечная точка.
dstGroupMode – тип адреса назначения. Если это поле содержит 0, адрес назначения является обычным адресом. Если это поле содержит 1, dstIdx является адресом группы назначения.
dstIdx — если dstGroupMode содержит 0, это поле содержит индекс диспетчера адресов для адреса назначения. Если dstGroupMode содержит 1, это поле содержит адрес группы назначения.
dstEP – конечная точка назначения.
numClusterIds — количество записей в clusterIdList.
clusterIdList — список идентификаторов кластеров. Максимальное количество идентификаторов кластеров, хранящихся в этом массиве, определяется параметром MAX_BINDING_CLUSTER_IDS [определено в f8wConfig.cfg].
3.4.2.2 Binding Table Maintenance
3.4.2.2.1 bindAddEntry()
Используйте эту функцию, чтобы добавить запись в таблицу привязок. Поскольку каждая запись в таблице может иметь несколько идентификаторов кластера, эта функция может просто добавить идентификатор(а) кластера в существующую запись таблицы привязки.
Прототип
BindingEntry_t *bindAddEntry( byte srcEp,
zAddrType_t *dstAddr,
byte dstEp,
byte numClusterIds,
uint16 *clusterIds );
Детали параметров
srcEp — конечная точка источника записи привязки.
dstAddr – адрес назначения записи привязки. Этот тип адреса должен содержать Addr16Bit, Addr64Bit или AddrGroup addrMode с соответствующим заполненным полем addr. Если addrMode — AddrGroup, IDis группы помещается в поле addr.shortAddr.
dstEp — конечная точка назначения записи привязки. Это поле недоступно, если dstAddr является групповым адресом.
numClusterIds — количество идентификаторов кластера в clusterIds.
clusterIds — указатель на список идентификаторов кластера для добавления. Это указывает на список (numClusterIds) 16-битных
Возврат
BindingEntry_t * — указатель на вновь добавленную запись привязки. NULL, если не добавлено.
3.4.2.2.2 bindRemoveEntry()
Удалить запись привязки из таблицы привязок.
Прототип
byte bindRemoveEntry( BindingEntry_t *pBind );
Детали параметров
pBind — указатель на запись привязки, которую необходимо удалить из таблицы привязок.
Возврат
true — эта функция не проверяет правильность записи.
3.4.2.2.3 bindRemoveClusterIdFromList()
Эта функция удаляет идентификатор кластера из списка идентификаторов кластеров существующей записи таблицы привязок. Эта функция предполагает
что переданная запись действительна.
Прототип
byte bindRemoveClusterIdFromList( BindingEntry_t *entry, uint16 clusterId );
Детали параметров
entry — указатель на допустимую запись в таблице привязок.
clusterId — 16-битный идентификатор кластера, который необходимо удалить из списка кластеров.
Возврат
Значение true, если после удаления в списке остался хотя бы 1 идентификатор кластера, значение false, если список кластеров пуст. Если список кластеров пуст, он должен быть удален вызывающей функцией.
3.4.2.2.4 bindAddClusterIdToList()
Эта функция добавит идентификатор кластера в список идентификаторов кластеров существующей записи таблицы привязок. Эта функция предполагает
что переданная запись действительна.
Прототип
byte bindAddClusterIdToList( BindingEntry_t *entry, uint16 clusterId );
Детали параметров
entry — указатель на допустимую запись в таблице привязок. clusterId — 16-битный идентификатор кластера для добавления в список кластеров.
Возврат
true, если добавлено в список, false, если не добавлено. false означает, что либо запись имеет значение NULL, либо количество идентификаторов кластера уже достигло своего максимума (MAX_BINDING_CLUSTER_IDS).
3.4.2.2.5 bindRemoveDev()
Используйте эту функцию, чтобы удалить все записи таблицы привязки с переданным адресом. Если адрес совпадает с адресом источника или получателя в записи привязки, запись будет удалена.
Прототип
void bindRemoveDev( zAddrType_t *Addr );
Детали параметров
Addr – адрес для удаления из таблицы привязки. Работает для addrMode, равного Addr16Bit, Addr64Bit или АдресГруппа.
Возврат
Нет.
3.4.2.2.6 bindRemoveSrcDev()
Используйте эту функцию, чтобы удалить все записи таблицы привязок с переданным исходным адресом и конечной точкой.
Прототип
void bindRemoveSrcDev(zAddrType_t *srcAddr, uint8 ep);
Детали параметров
srcAddr — адрес для удаления из таблицы привязки. Работает для addrMode, равного Addr16Bit или Addr64Bit.
ep — исходная конечная точка.
Возврат
Нет.
3.4.2.2.7 bindUpdateAddr ()
Используйте эту функцию для подсчета коротких адресов обмена в таблице привязок. Все записи с oldAddr будут заменены на newAddr.
Прототип
void bindUpdateAddr(uint16 oldAddr, uint16 newAddr);
Детали параметров
oldAddr — старый короткий (сетевой) адрес для поиска.
newAddr – короткий (сетевой) адрес для замены oldAddr.
Возврат
Нет.
3.4.2.3 Поиск таблицы привязки
3.4.2.3.1 bindFindExisting()
Найдите существующую запись в таблице привязок. Использование адреса источника и конечной точки, а также адреса назначения и конечной точки для поиска в таблице привязок.
Прототип
BindingEntry_t *bindFindExisting( byte srcEp, zAddrType_t *dstAddr, byte dstEp );
Детали параметров
srcEp — конечная точка источника записи привязки. dstAddr – адрес назначения записи привязки. Этот тип адреса должен содержать Addr16Bit, Addr64Bit или AddrGroup addrMode с соответствующим заполненным полем addr в поле addr.shortAddr.
dstEp — конечная точка назначения записи привязки. Это поле недоступно, если dstAddr является групповым адресом.
Возврат
BindingEntry_t * — Указатель на найденную запись привязки. NULL, если не найдено.
3.4.2.3.2 bindIsClusterIDinList()
Проверяет наличие идентификатора кластера в списке идентификаторов кластера записи таблицы привязок. Эта функция предполагает, что переданная запись действительна.
Прототип
byte bindIsClusterIDinList( BindingEntry_t *entry, uint16 clusterId );
Детали параметров
entry — указатель на допустимую запись в таблице привязок. Функция будет искать эту запись. clusterId — 16-битный идентификатор кластера для поиска.
Возврат
true, если идентификатор кластера есть в списке, false, если он не найден.
3.4.2.4 Binding Table Statistics
3.4.2.4.1 bindNumBoundTo()
Используйте эту функцию для подсчета всех записей таблицы привязки с переданным адресом и конечной точкой.
Прототип
byte bindNumBoundTo (zAddrType_t *devAddr, byte devEpInt, byte srcMode);
Детали параметров
devAddr — адрес для поиска в таблице привязок. Работает для addrMode, равного Addr16Bit, Addr64Bit или AddrGroup.
devEpInt — конечная точка. srcMode — true для поиска исходных адресов, false для поиска целевых адресов.
Возврат
Количество найденных записей привязки с переданным адресом и конечной точкой.
3.4.2.4.2 bindNumOfEntries()
Эта функция возвращает количество записей привязки в таблице привязок. Каждая группа чисел считается записью. Итак, если есть 2 записи записи, но каждая запись имеет 3 идентификатора кластера, то число, возвращаемое этой функцией, будет равно 6.
Прототип
uint16 bindNumOfEntries (недействительным);
Детали параметров
Никто.
Возврат
Количество найденных записей.
3.4.2.4.3 bindCapacity()
Эта функция возвращает максимально возможное количество записей привязки и число, используемое в таблице привязок. В этом случае подсчитываются записи (а не идентификаторы кластеров). Итак, если есть 2 записи записи, но каждая запись имеет 3 идентификатора кластера, то число, возвращаемое в usedEntries, будет равно 2.
Прототип
void bindCapacity(uint16 *maxEntries, uint16 *usedEntries);
Детали параметров
maxEntries – указатель на переменную максимального количества записей (вывод для этой функции). Количество возможных записей таблицы привязки. Это число можно изменить, изменив NWK_MAX_BINDING_ENTRIES в файле f8wConfig.cfg.
usedEntries – указатель на переменную используемых записей (вывод для этой функции). Из возможных это количество уже использованных записей.
Возврат
Нет.
3.4.2.5 Binding Table Non-Volatile Storage - Энергонезависимое хранение таблицы привязки
Чтобы использовать любую функцию в этом разделе, NV_RESTORE должен быть определен в разделе препроцессора компилятора или в f8wConfig.cfg. BindWriteNV — единственная функция Binding NV, рекомендуемая для использования пользовательскими приложениями. Существуют и другие функции связывания NV, но инициализация и чтение связывания NV вызываются автоматически при запуске устройства.
3.4.2.5.1 BindWriteNV()
Эта функция запишет таблицу привязок в энергонезависимую память, которая будет вызываться, если пользовательское приложение изменит что-либо в таблице привязок (добавит, удалит или изменит). Если таблица привязки обновляется обычным образом через ZDOmessages, функция будет вызываться ZDO, и пользовательскому приложению ее не нужно вызывать.
Прототип
void BindWriteNV( void );
Детали параметров
Нет.
Возврат
Нет.
3.4.3 Group Table Management - Управление групповыми таблицами
Таблица групп APS представляет собой список ссылок, определенный с помощью выделенной оперативной памяти [osal_mem_alloc()], поэтому по мере добавления групп в таблицу увеличивается объем используемой кучи OSAL. Максимальный размер таблицы можно изменить, настроив APS_MAX_GROUPS в f8wConfig.cfg. Таблица определена в nwk_globals.c. Чтобы использовать функции групповой таблицы, включите в свое приложение «aps_groups.h».