Zigbee アプリケーションの開発では、アプリケーションをビルドする前に特定の静的構成が必要です。ネットワークサイズの計算、新しいクラスタの追加、デバイスの検出可能化、および新しいエンドポイントの追加は、次のファイルのパラメータを変更することで実行できます。
これらのファイルは、主にZigBee PROスタックのAPSおよびNWKレイヤーに関連する、デバイスタイプや関連パラメータなどのネットワークパラメータの設定を担当します。
ネットワーク構成
ZigBee デバイスは、コーディネーター、ルーター、およびエンド デバイスとして構成できます。次のセクションでは、ユーザーが各デバイスの種類を構成する方法について詳しく説明します。
app_zps_cfgヘッダーファイルを使用すると、ユーザーはノードのZPS ZDOパラメーターを構成できます。次のマクロは、対応するデバイスタイプに必要です。
#define ZPS_COORDINATOR
#define ZPS_ZDO_DEVICE_TYPE ZPS_ZDO_DEVICE_COORD
#define ZPS_ROUTER
#define ZPS_ZDO_DEVICE_TYPE ZPS_ZDO_DEVICE_ROUTER
#define ZPS_ENDDEVICE
#define ZPS_ZDO_DEVICE_TYPE ZPS_ZDO_DEVICE_ENDDEVICE
マクロを使用して定義されるその他の ZPS ZDO 構成については、ヘッダー ファイル (app_zps_cfg.h) 内のコメントで説明されています。これらのマクロにより、ユーザーはネットワークのニーズに応じてデバイスを構成できます。
ZigBee ネットワークのセキュリティの種類は、マクロ ZPS_ZDO_NWK_KEY_STATEによって構成することもできます。ユーザーは、セキュリティの種類をネットワークセキュリティなし(ZPS_ZDO_NO_NETWORK_KEY)、事前構成リンクキーセキュリティ(ZPS_ZDO_PRECONFIGURED_LINK_KEY)、分散リンクキーセキュリティ(ZPS_ZDO_DISTRIBUTED_LINK_KEY)、または事前構成インストールコードセキュリティ(ZPS_ZDO_PRCONFIGURED_INSTALLATION_CODE)に変更できます。
/* ネットワークセキュリティを指定しない */ #define ZPS_ZDO_NWK_KEY_STATE ZPS_ZDO_NO_NETWORK_KEY
このアプリケーションでは、このヘッダー ファイルを使用して、拡張 PANID (ZPS_APS_AIB_INIT_USE_EXTENDED_PANID) やチャネル マスク (ZPS_APS_AIB_INIT_CHANNEL_MASK) などの ZPS APS AIB パラメーターを構成できます。
/* デバイスが使用する NWK EXTENDED PANID (EPID)*/#define ZPS_APS_AIB_INIT_USE_EXTENDED_PANID 0x0000000000000000ULL
/*!チャンネルマスク:11から26までのすべてのチャンネルを定義*/ #define ZPS_APS_AIB_INIT_CHANNEL_MASK 0x07fff800UL
ユーザーは、ZPS AFレイヤー構成パラメーターの一部として、単純な記述子テーブルサイズ(AF_SIMPLE_DESCRIPTOR_TABLE_SIZE)を構成することもできます。この値は、アプリケーションで定義されているエンドポイントの数によって異なり、1 つのエンドポイントが常に ZDO 用に予約されています。したがって、エンドポイントが 1 つのデバイスの場合、値は 2 (1 ZDO + 1 アプリケーション エンドポイント) になります
#define AF_SIMPLE_DESCRIPTOR_TABLE_SIZE 2
ユーザーが変更できる他のZPSネットワーク設定パラメータには、スキャン時間(ZPS_SCAN_DURATION)、デフォルトの許可参加時間(ZPS_DEFAULT_PERMIT_JOINING_TIME)、および同時キーリクエストの最大数(ZPS_MAX_NUM_SIMULTANEOUS_REQUEST_KEY_REQS)があります。
また、ネットワーク内のルーターの最大数 (ZPS_NWK_NIB_INIT_MAX_ROUTERS)、ノードの子の最大数 (ZPS_NWK_NIB_INIT_MAX_CHILDREN)、ネットワークの最大深度 (ZPS_NWK_NIB_INIT_MAX_DEPTH)、ネットワーク セキュリティ レベル (ZPS_NWK_NIB_INIT_SECURITY_LEVEL) など、NIB 値も変更できます。
このヘッダーファイルから、ユーザーがさまざまなZigBeeネットワークテーブルサイズを調整できます。重要な表を以下に示します。
ZCLの設定
app_zcl_cfgヘッダーファイルは、ZigBee クラスター ライブラリを構成するためにアプリケーションによって使用されます。このファイルには、アプリケーション・プロファイルとクラスター ID の定義が含まれています。デフォルトのアプリケーションプロファイルは、ZDP、HA、ZLO、GP です。
ZDP(ZigBeeデバイスプロファイル)IDは、次の行で識別されます。
#define ZDP_PROFILE_ID (0x0000)
ZDP は、クラスタ ID として次のカテゴリのサービスを提供します。
HA (Home Automation) プロファイル ID は、次の行で識別されます。
#define HA_PROFILE_ID (0x0104)
HA は、クラスタ ID として次のカテゴリのサービスを提供します。
ZLO (ZigBee Lighting and Occupancy) プロファイルはアプリケーション プロファイルではありませんが、このコレクションのデバイスは、ホーム オートメーション アプリケーション プロファイルと同じアプリケーション プロファイル ID を使用します。これにより、Home Automation 1.2 プロファイルに基づくデバイスのアプリケーションとの下位互換性が確保されます。
ZigBee Green Power(GP)は、以下をサポートするためにネットワークノードへの電力需要を最小限に抑えることを目的としたオプションのクラスタです。
GP プロファイル ID は、次の行で識別されます。
#define GP_PROFILE_ID (0xa1e0)
Zigbee GP クラスター ID は次のように定義されます。
#define GP_GREENPOWER_CLUSTER_ID (0x0021)
アプリケーションによっては、app_zcl_cfg ヘッダー・ファイルにはノード・エンドポイントの定義も含まれています。たとえば、occupancy_sensor アプリケーションには次のエンドポイントが含まれています。
/* ノード 'コーディネーター' */
/*エンドポイント*/
#define COORDINATOR_ZDO_ENDPOINT (0)
#define COORDINATOR_COORD_ENDPOINT (1)
/* Node 'OccupancySensor' */
/*エンドポイント*/
#define OCCUPANCYSENSOR_ZDO_ENDPOINT (0)
#define OCCUPANCYSENSOR_SENSOR_ENDPOINT (1)
/* Node 'LightSensor' */
/*エンドポイント*/
#define LIGHTSENSOR_ZDO_ENDPOINT (0)
#define LIGHTSENSOR_SENSOR_ENDPOINT (1)
/* ノード 'LightTemperatureOccupancySensor' */
/*エンドポイント*/
#define LIGHTTEMPERATUREOCCUPANCYSENSOR_ZDO_ENDPOINT (0)
#define LIGHTTEMPERATUREOCCUPANCYSENSOR_SENSOR_ENDPOINT (1)
ソース ファイル app_zcl_globals.c は、各エンドポイントのクラスター リストを宣言するために使用されます。これらは、ノードの単純な記述子として機能します。
各エンドポイントには、uint16_tデータを含む 2 つのクラスター リストがあります。1 つは入力用で、もう 1 つは出力用です。これら 2 つのリストのサイズは等しくなければなりません。たとえば、エンドポイント 0 の場合、宣言されたリストは次のようになります。
PRIVATE const uint16 s_au16Endpoint0InputClusterList[16] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006 , 0x0007, \
0x0008, 0x0010, 0x0011, 0x0012, 0x0012, 0x0013, 0x0014 , 0x0015};
PRIVATE const uint16 s_au16Endpoint0OutputClusterList[16] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, \
0x0008, 0x0010, 0x0011, 0x0012, 0x0012, 0x0013, 0x0014 , 0x0015};
入力リストには、サイズが一致する対応するクラスター APDU リストも必要です。エンドポイント 0 の例では、次のようになります。
PRIVATE const PDUM_thAPdu s_ahEndpoint0InputClusterAPdus[16] = { apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP,\
apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP, apduZDP};
各出力クラスター リストと入力クラスター リストには、対応するクラスター検出有効フラグ リストがあります。クラスター ディスク フラグ内の各ビットはクラスターに対応しているため、入力クラスター リストと出力クラスター リストで宣言された 16 個のクラスターの場合、検出可能フラグには 2 バイトが必要です。この例では、宣言は次のとおりです。
PRIVATE uint8 s_au8Endpoint0InputClusterDiscFlags[2] = {0x1F, 0x08};
PRIVATE uint8 s_au8Endpoint0OutputClusterDiscFlags[2] = {0x08, 0x1B};
これらのパラメータは、ノードのエンドポイントの単純な記述子構造に登録されます。構造体の宣言された変数は s_asSimpleDescConts で、そのサイズはノードで使用可能なエンドポイントの数によって異なります。たとえば、エンドポイントが 2 つある場合、宣言は次のようになります。
PUBLIC zps_tsAplAfSimpleDescCont s_asSimpleDescConts[2] = {
{
{
0x0000、
0,
0,
0,
84,
84,
s_au16Endpoint0InputClusterList、
s_au16Endpoint0OutputClusterList、
s_au8Endpoint0InputClusterDiscFlags,
s_au8Endpoint0OutputClusterDiscFlags、
},
s_ahEndpoint0InputClusterAPdus、
1
},
{
{
0x0104、
0,
0,
1,
6,
4,
s_au16Endpoint1InputClusterList、
s_au16Endpoint1OutputClusterList、
s_au8Endpoint1InputClusterDiscFlags,
s_au8Endpoint1OutputClusterDiscFlags、
},
s_ahEndpoint1InputClusterAPdus、
1
},
};
AFコンテキストの定義は次のとおりです。
typedef 構造体 _zps_tsAplAfSimpleDescCont
{
ZPS_tsAplAfSimpleDescriptor sSimpleDesc;
const PDUM_thAPdu *phAPduInClusters;
bool_t bEnabled です。
} zps_tsAplAfSimpleDescCont;
また、エンドポイントの単純な記述子には、次の構造定義があります。
typedef構造体{
uint16 u16ApplicationProfileId;
uint16 u16DeviceId;
uint8 u8デバイスバージョン;
uint8 u8エンドポイント;
uint8 u8InClusterCount;
uint8 u8OutClusterCount;
const uint16 *pu16InClusterList;
const uint16 *pu16OutClusterList;
uint8 *au8InDiscoveryEnabledFlags;
uint8 *au8OutDiscoveryEnabledFlags;
} ZPS_tsAplAfSimpleDescriptor;