00001
00009 #ifndef _ZDO_H
00010 #define _ZDO_H
00011
00012 #include <macAddr.h>
00013 #include <appFramework.h>
00014 #include <aps.h>
00015 #include <configServer.h>
00016
00017 #define ZDP_REQUEST_MASK 0x7FFF
00018 #define ZDP_RESPONSE_MASK 0x8000
00019
00020 #ifdef _SECURITY_
00021 #define PRECONFIGURED_NETWORK_KEY 0
00022 #define PRECONFIGURED_TRUST_CENTER_LINK_KEY 1
00023 #define PRECONFIGURED_TRUST_CENTER_MASTER_KEY 2
00024 #define NOT_PRECONFIGURED 3
00025
00026 #ifndef ZDO_SECURITY_STATUS
00027 #define ZDO_SECURITY_STATUS NOT_PRECONFIGURED
00028 #endif //ZDO_SECURITY_STATUS
00029
00030
00031 #define ZDO_NONE_SECURITY_MODE 0
00032 #define ZDO_STANDARD_SECURITY_MODE 1
00033 #define ZDO_HIGH_SECURITY_MODE 2
00034 #endif//_SECURITY_
00035
00036 #define MAX_REQUESTED_CLUSTER_NUMBER 9
00037 #define MAX_ACTIVE_EP_NUMBER 3
00038
00039 typedef enum
00040 {
00041 LEAVED_BY_PARENT,
00042 LINK_FAIL,
00043 LEAVE_REQ
00044 } NetLostReason_t;
00045
00049 typedef enum
00050 {
00052 ZDO_SUCCESS_STATUS = 0x00,
00054 ZDO_INVALID_PARAMETERS_STATUS = 0x01,
00056 ZDO_NOT_PERMITTED_STATUS = 0x03,
00058 ZDO_BUSY_STATUS = 0x04,
00060 ZDO_NO_NETWORKS_STATUS = 0x05,
00062 ZDO_EXTPANID_ALREADY_EXIST_STATUS = 0x06,
00064 ZDO_FAIL_STATUS = 0x07,
00065 ZDO_AUTHENTICATION_SUCCESS_STATUS = 0x08,
00066 ZDO_AUTHENTICATION_FAIL_STATUS = 0x09,
00067 ZDO_SECURITY_SUCCESS_STATUS = 0x0A,
00068 ZDO_SECURITY_FAIL_STATUS = 0x0B,
00069 ZDO_SECURITY_NOT_SUPPORTED_STATUS = 0x0C,
00070 ZDO_CMD_COMPLETED_STATUS = 0x0D,
00072 ZDO_INVALID_REQUEST_STATUS = 0x80,
00074 ZDO_DEVICE_NOT_FOUND_STATUS = 0x81,
00076 ZDO_INVALID_EP_STATUS = 0x82,
00078 ZDO_NOT_ACTIVE_STATUS = 0x83,
00080 ZDO_NOT_SUPPORTED_STATUS = 0x84,
00082 ZDO_TIMEOUT_STATUS = 0x85,
00084 ZDO_NO_MATCH_STATUS = 0x86,
00086 ZDO_NO_ENTRY_STATUS = 0x88,
00088 ZDO_NO_DESCRIPTOR_STATUS = 0x89,
00090 ZDO_INSUFFICIENT_SPACE_STATUS = 0x8A,
00091 ZDO_RESPONSE_WAIT_TIMEOUT_STATUS = 0x8B,
00093 ZDO_TABLE_FULL_STATUS = 0x8C,
00095 ZDO_NOT_AUTHORIZED_STATUS = 0x8D,
00097 ZDO_NWK_UPDATE_STATUS = 0x8E,
00098 ZDO_NETWORK_STARTED_STATUS = 0x8F,
00099 ZDO_NETWORK_LOST_STATUS = 0x90,
00100 ZDO_REJOIN_STARTED_STATUS = 0x91,
00101 ZDO_NETWORK_LEFT_STATUS = 0x92,
00102 } ZDO_Status_t;
00103
00104 enum
00105 {
00106 SINGLE_RESPONSE_REQUESTTYPE = 0x00,
00107 EXTENDED_RESPONSE_REQUESTTYPE = 0x01
00108 };
00109
00115 typedef enum
00116 {
00117
00118 NWK_ADDR_CLID = 0x0000,
00119 IEEE_ADDR_CLID = 0x0001,
00120 NODE_DESCRIPTOR_CLID = 0x0002,
00121 POWER_DESCRIPTOR_CLID = 0x0003,
00122 SIMPLE_DESCRIPTOR_CLID = 0x0004,
00123 ACTIVE_ENDPOINTS_CLID = 0x0005,
00124 MATCH_DESCRIPTOR_CLID = 0x0006,
00125 COMPLEX_DESCRIPTOR_CLID = 0x0010,
00126 USER_DESCRIPTOR_CLID = 0x0011,
00127 DISCOVERY_CASH_CLID = 0x0012,
00128 DEVICE_ANNCE_CLID = 0x0013,
00129 USER_DESC_CONF_CLID = 0x0014,
00130 SYSTEM_SERVER_DISCOVERY_CLID = 0x0015,
00131 DISCOVERY_STORE_CLID = 0x0016,
00132 NODE_DESC_STORE_CLID = 0x0017,
00133 POWER_DESC_STORE_CLID = 0x0018,
00134 ACTIVE_EP_STORE_CLID = 0x0019,
00135 SIMPLE_DESC_STORE_CLID = 0x001A,
00136 REMOVE_NODE_CACHE_CLID = 0x001B,
00137 FIND_NODE_CACHE_CLID = 0x001C,
00138 EXTENDED_SIMPLE_DESC_CLID = 0x001D,
00139 EXTENDED_ACTIVE_EP_CLID = 0x001E,
00140
00141 END_DEVICE_BIND_CLID = 0x0020,
00142 BIND_CLID = 0x0021,
00143 UNBIND_CLID = 0x0022,
00144 BIND_REGISTER_CLID = 0x0023,
00145 REPLACE_DEVICE_CLID = 0x0024,
00146 STORE_BCKUP_BIND_ENTRY_CLID = 0x0025,
00147 REMOVE_BCKUP_BIND_ENTRY_CLID = 0x0026,
00148 BACKUP_BIND_TABLE_CLID = 0x0027,
00149 RECOVER_BIND_TABLE_CLID = 0x0028,
00150 BACKUP_SOURCE_BIND_CLID = 0x0029,
00151 RECOVER_SOURCE_BIND_CLID = 0x002A,
00152
00153 MGMT_NWK_DISC_CLID = 0x0030,
00154 MGMT_LQI_CLID = 0x0031,
00155 MGMT_RTG_CLID = 0x0032,
00156 MGMT_BIND_CLID = 0x0033,
00157 MGMT_LEAVE_CLID = 0x0034,
00158 MGMT_DIRECT_JOIN_CLID = 0x0035,
00159 MGMT_PERMIT_JOINING_CLID = 0x0036,
00160 MGMT_CACHE_CLID = 0x0037,
00161 MGMT_NWK_UPDATE_CLID = 0x0038
00162 } ZDO_ZdpClusterId_t;
00163
00164 typedef enum
00165 {
00166 SHORT_ADDR_MODE,
00167 EXT_ADDR_MODE
00168 } AddrMode_t;
00169
00170
00173 typedef struct
00174 {
00175 uint8_t activeChannel;
00176 ShortAddr_t shortAddr;
00177 PanId_t PANId;
00178 uint64_t extPANId;
00179 ShortAddr_t parentAddr;
00180 ZDO_Status_t status;
00181 } PACK ZDO_StartNetworkConf_t;
00182
00183
00186 typedef struct PACK
00187 {
00188 ZDO_StartNetworkConf_t confParams;
00189 void (*ZDO_StartNetworkConf)(ZDO_StartNetworkConf_t *conf);
00190 } ZDO_StartNetworkReq_t;
00191
00192
00195 typedef struct PACK
00196 {
00197 ZDO_Status_t status;
00198 } ZDO_ResetNetworkConf_t;
00199
00200
00203 typedef struct PACK
00204 {
00205 ZDO_ResetNetworkConf_t confParams;
00206 void (*ZDO_ResetNetworkConf)(ZDO_ResetNetworkConf_t *conf);
00207 } ZDO_ResetNetworkReq_t;
00208
00209 typedef struct PACK
00210 {
00211 uint32_t scannedChannels;
00212 uint16_t totalTransmissions;
00213 uint16_t transmissionsFailures;
00214 uint8_t scannedChannelsListCount;
00215 uint8_t energyValues[32];
00216 } EDScan_t;
00217
00218 typedef struct PACK
00219 {
00220 ShortAddr_t parentShortAddr;
00221 PanId_t panId;
00222 uint8_t currentChannel;
00223 ShortAddr_t shortAddr;
00224 } NetworkInf_t;
00225
00226 typedef struct PACK
00227 {
00228
00229 uint8_t status;
00230 union
00231 {
00232 EDScan_t scanResult;
00233 NetworkInf_t nwkUpdateInf;
00234 };
00235 } ZDO_MgmtNwkUpdateNotf_t;
00236
00237 typedef struct PACK
00238 {
00239 ZDO_Status_t status;
00240 } ZDO_SleepConf_t;
00241
00242 typedef struct PACK
00243 {
00244 ZDO_SleepConf_t confirm;
00245 void (*ZDO_SleepConf)(ZDO_SleepConf_t *conf);
00246 } PACK ZDO_SleepReq_t;
00247
00248 typedef struct PACK
00249 {
00250 ZDO_Status_t status;
00251 } PACK ZDO_WakeUpConf_t;
00252
00253 typedef struct PACK
00254 {
00255 ZDO_WakeUpConf_t confirm;
00256 void (*ZDO_WakeUpConf)(ZDO_WakeUpConf_t *conf);
00257 } PACK ZDO_WakeUpReq_t;
00258
00259 typedef struct PACK
00260 {
00261 ExtAddr_t ieeeAddrOfInterest;
00262 uint8_t reqType;
00263 uint8_t startIndex;
00264 } ZDO_NwkAddrReq_t;
00265
00266 typedef struct PACK
00267 {
00268 ShortAddr_t nwkAddrOfInterest;
00269 uint8_t reqType;
00270 uint8_t startIndex;
00271 } ZDO_IeeeAddrReq_t;
00272
00273 typedef struct PACK
00274 {
00275 ShortAddr_t nwkAddrOfInterest;
00276 } ZDO_NodeDescReq_t;
00277
00278 typedef struct PACK
00279 {
00280 ShortAddr_t nwkAddrOfInterest;
00281 } ZDO_PowerDescReq_t;
00282
00283 typedef struct PACK
00284 {
00285 ShortAddr_t nwkAddrOfInterest;
00286 } ZDO_ActiveEPReq_t;
00287
00288 typedef struct PACK
00289 {
00290 ShortAddr_t nwkAddrOfInterest;
00291 } ZDO_ComplexDescReq_t;
00292
00293 typedef struct PACK
00294 {
00295 ShortAddr_t nwkAddrOfInterest;
00296 } ZDO_UserDescReq_t;
00297
00298 typedef struct PACK
00299 {
00300 ShortAddr_t nwkAddrOfInterest;
00301 } ZDO_UserDescSetReq_t;
00302
00303 typedef struct PACK
00304 {
00305 ShortAddr_t nwkAddrOfInterest;
00306 Endpoint_t endpoint;
00307 } ZDO_SimpleDescReq_t;
00308
00309 typedef struct PACK
00310 {
00311 ShortAddr_t nwkAddrLocal;
00312 ExtAddr_t ieeeAddrLocal;
00313 uint8_t macCapability;
00314 } ZDO_DeviceAnnceReq_t;
00315
00316 typedef struct PACK
00317 {
00318 uint16_t serverMask;
00319 } ZDO_SystemServerDiscoveryReq_t;
00320
00321 #ifdef _BINDING_
00322 typedef struct PACK
00323 {
00324 ShortAddr_t nwkAddrOfInterest;
00325 ProfileId_t profileId;
00326 uint8_t numInClusters;
00327 ClusterId_t inClusterList[MAX_REQUESTED_CLUSTER_NUMBER];
00328 uint8_t numOutClusters;
00329 ClusterId_t outClusterList[MAX_REQUESTED_CLUSTER_NUMBER];
00330 } ZDO_MatchDescReq_t;
00331 #endif // _BINDING_
00332
00333 typedef struct PACK
00334 {
00335 ExtAddr_t deviceAddr;
00336 uint8_t reserved : 6;
00337 uint8_t removeChildren : 1;
00338 uint8_t rejoin : 1;
00339 } ZDO_MgmtLeaveReq_t;
00340
00341 typedef struct PACK
00342 {
00343 uint8_t permitDuration;
00344 uint8_t tcSignificance;
00345 } ZDO_MgmtPermitJoiningReq_t;
00346
00347 typedef struct PACK
00348 {
00349 uint32_t scanChannels;
00350 uint8_t scanDuration;
00351 union
00352 {
00353 uint8_t scanCount;
00354 uint8_t nwkUpdateId;
00355 };
00356 ShortAddr_t nwkManagerAddr;
00357 } ZDO_MgmtNwkUpdateReq_t;
00358
00359 typedef struct PACK
00360 {
00361 ExtAddr_t ieeeAddrRemote;
00362 ShortAddr_t nwkAddrRemote;
00363 uint8_t numAssocDev;
00364 uint8_t startIndex;
00365 ShortAddr_t nwkAddrAssocDevList[CS_MAX_CHILDREN_AMOUNT];
00366 } ZDO_NwkAddrResp_t;
00367
00368 typedef struct PACK
00369 {
00370 ExtAddr_t ieeeAddrRemote;
00371 ShortAddr_t nwkAddrRemote;
00372 uint8_t numAssocDev;
00373 uint8_t startIndex;
00374 ShortAddr_t nwkAddrAssocDevList[CS_MAX_CHILDREN_AMOUNT];
00375 } ZDO_IeeeAddrResp_t;
00376
00377 typedef struct PACK
00378 {
00379 ShortAddr_t nwkAddrOfInterest;
00380 NodeDescriptor_t nodeDescriptor;
00381 } ZDO_NodeDescResp_t;
00382
00383 typedef struct PACK
00384 {
00385 ShortAddr_t nwkAddrOfInterest;
00386 PowerDescriptor_t powerDescriptor;
00387 } ZDO_PowerDescResp_t;
00388
00389 typedef struct PACK
00390 {
00391 ShortAddr_t nwkAddrOfInterest;
00392 } ZDO_ComplexDescResp_t;
00393
00394 typedef struct PACK
00395 {
00396 ShortAddr_t nwkAddrOfInterest;
00397 } ZDO_UserDescResp_t;
00398
00399 typedef struct PACK
00400 {
00401 ShortAddr_t nwkAddrOfInterest;
00402 } ZDO_UserDescConfResp_t;
00403
00404 typedef struct PACK
00405 {
00406 ShortAddr_t nwkAddrOfInterest;
00407 uint8_t activeEPCount;
00408 uint8_t activeEPList[MAX_ACTIVE_EP_NUMBER];
00409 } ZDO_ActiveEPResp_t;
00410
00411 typedef struct PACK
00412 {
00413 Endpoint_t endpoint;
00414 ProfileId_t AppProfileId;
00415 uint16_t AppDeviceId;
00416 uint8_t AppDeviceVersion : 4;
00417 uint8_t Reserved : 4;
00418 uint8_t AppInClustersCount;
00419 ClusterId_t AppInClustersList[MAX_REQUESTED_CLUSTER_NUMBER];
00420 uint8_t AppOutClustersCount;
00421 ClusterId_t AppOutClustersList[MAX_REQUESTED_CLUSTER_NUMBER];
00422
00423 } ZdpSimpleDescriptor_t;
00424
00425 typedef struct PACK
00426 {
00427 ShortAddr_t nwkAddrOfInterest;
00428 uint8_t length;
00429 ZdpSimpleDescriptor_t simpleDescriptor;
00430 } ZDO_SimpleDescResp_t;
00431
00432 typedef struct PACK
00433 {
00434 uint16_t serverMask;
00435 } ZDO_SystemServerDiscoveryResp_t;
00436
00437 #ifdef _BINDING_
00438 typedef struct PACK
00439 {
00440 ShortAddr_t nwkAddrOfInterest;
00441 uint8_t matchLength;
00442 uint8_t matchList[MAX_REQUESTED_CLUSTER_NUMBER];
00443 } ZDO_MatchDescResp_t;
00444 #endif // _BINDING_
00445
00446 typedef struct PACK
00447 {
00448 uint8_t seqNum;
00449
00450 uint8_t status;
00451 union
00452 {
00453 ZDO_NwkAddrResp_t nwkAddrResp;
00454 ZDO_IeeeAddrResp_t ieeeAddrResp;
00455 ZDO_NodeDescResp_t nodeDescResp;
00456 ZDO_PowerDescResp_t powerDescResp;
00457 ZDO_SimpleDescResp_t simpleDescResp;
00458 ZDO_ComplexDescResp_t complexDescResp;
00459 ZDO_UserDescResp_t userDescResp;
00460 ZDO_ActiveEPResp_t activeEPResp;
00461 ZDO_UserDescConfResp_t userDescConfResp;
00462 ZDO_SystemServerDiscoveryResp_t systemServerDiscoveryResp;
00463 #ifdef _BINDING_
00464 ZDO_MatchDescResp_t matchDescResp;
00465 #endif // _BINDING_
00466 ZDO_MgmtNwkUpdateNotf_t mgmtNwkUpdateNotf;
00467 };
00468 } ZDO_ZdpRespFrame_t;
00469
00470 typedef struct PACK
00471 {
00472 uint8_t seqNum;
00473
00474 union
00475 {
00476 ZDO_NwkAddrReq_t nwkAddrReq;
00477 ZDO_IeeeAddrReq_t ieeeAddrReq;
00478 ZDO_NodeDescReq_t nodeDescReq;
00479 ZDO_PowerDescReq_t powerDescReq;
00480 ZDO_SimpleDescReq_t simpleDescReq;
00481 ZDO_DeviceAnnceReq_t deviceAnnce;
00482 ZDO_ActiveEPReq_t activeEPReq;
00483 ZDO_ComplexDescReq_t complexDescReq;
00484 ZDO_UserDescReq_t userDescReq;
00485 ZDO_UserDescSetReq_t userDescSetReq;
00486 ZDO_SystemServerDiscoveryReq_t systemServerDiscoveryReq;
00487 #ifdef _BINDING_
00488 ZDO_MatchDescReq_t matchDescReq;
00489 #endif // _BINDING_
00490 ZDO_MgmtLeaveReq_t mgmtLeaveReq;
00491 ZDO_MgmtPermitJoiningReq_t mgmtPermitJoiningReq;
00492 ZDO_MgmtNwkUpdateReq_t mgmtNwkUpdateReq;
00493 ZDO_MgmtNwkUpdateNotf_t mgmtNwkUpdateNotf;
00494 };
00495 } ZDO_ZdpReqFrame_t;
00496
00497 typedef struct PACK
00498 {
00499
00500 uint8_t header[APS_ASDU_OFFSET];
00501 union
00502 {
00503 ZDO_ZdpRespFrame_t respPayload;
00504 ZDO_ZdpReqFrame_t reqPayload;
00505 };
00506 } ZDO_ZdpFrame_t;
00507
00508 typedef struct
00509 {
00510 AddrMode_t srcAddrMode;
00511 union
00512 {
00513 ShortAddr_t srcNwkAddr;
00514 ExtAddr_t srcExtAddr;
00515 };
00516 ZDO_ZdpRespFrame_t respPayload;
00517 } ZDO_ZdpResp_t;
00518
00519 typedef struct PACK
00520 {
00521
00522 struct
00523 {
00524 void *next;
00525 } service;
00526
00527
00528 ZDO_ZdpClusterId_t reqCluster;
00529 AddrMode_t dstAddrMode;
00530
00531 union
00532 {
00533 ShortAddr_t dstNwkAddr;
00534 ExtAddr_t dstExtAddr;
00535 };
00536
00537
00538 ZDO_ZdpFrame_t req;
00539
00540
00541 void (*ZDO_ZdpResp)(ZDO_ZdpResp_t *zdpResp);
00542 ZDO_ZdpResp_t resp;
00543
00544 } ZDO_ZdpReq_t;
00545
00546 typedef struct PACK
00547 {
00548 ShortAddr_t shortAddr;
00549 ExtAddr_t extAddr;
00550 } NodeAddr_t;
00551
00552
00555 typedef struct PACK
00556 {
00557 ShortAddr_t nodeAddr;
00558 ZDO_Status_t status;
00559 uint8_t lqi;
00560 uint8_t rssi;
00561 } ZDO_GetLqiRssi_t;
00562
00563
00566 typedef struct
00567 {
00568 uint8_t childrenCount;
00569 NodeAddr_t *childrenTable;
00570 } ZDO_GetChildrenAddr_t;
00571
00572
00575 typedef struct
00576 {
00577 ZDO_Status_t status;
00578 } ZDO_SetTxPowerConf_t;
00579
00580
00583 typedef struct
00584 {
00585 uint8_t txPower;
00586 void (* ZDO_SetTxPowerConf)(ZDO_SetTxPowerConf_t *conf);
00587 ZDO_SetTxPowerConf_t confirm;
00588 } ZDO_SetTxPowerReq_t;
00589
00590
00593 typedef enum
00594 {
00595 ZDO_IN_NETWORK_STATUS,
00596 ZDO_OUT_NETWORK_STATUS
00597 } ZDO_NwkStatus_t;
00598
00599 typedef struct PACK
00600 {
00601 ZDO_Status_t status;
00602 } ZDO_EndToEndAppKeyConf_t;
00603
00604 typedef struct PACK
00605 {
00606 ExtAddr_t deviceAddr;
00607 void (*ZDO_EndToEndAppKeyConf)(ZDO_EndToEndAppKeyConf_t *conf);
00608 ZDO_EndToEndAppKeyConf_t confirm;
00609 } ZDO_EndToEndAppKeyReq_t;
00610
00611
00612
00613
00614
00615
00622 void ZDO_StartNetworkReq(ZDO_StartNetworkReq_t *startingParams);
00623
00624
00631 void ZDO_ResetNetworkReq(ZDO_ResetNetworkReq_t *resetParams);
00632
00633
00641 void ZDO_MgmtNwkUpdateNotf(ZDO_MgmtNwkUpdateNotf_t * nwkParams);
00642
00643
00651 void ZDO_SleepReq(ZDO_SleepReq_t *req);
00652
00653
00661 void ZDO_SleepInd(void);
00662
00663
00670 void ZDO_SleepResp(void);
00671
00672
00678 void ZDO_WakeUpInd(void);
00679
00680
00688 void ZDO_WakeUpReq(ZDO_WakeUpReq_t *req);
00689
00690 void ZDO_ZdpReq(ZDO_ZdpReq_t *zdpReq);
00691
00692
00699 void ZDO_GetLqiRssi(ZDO_GetLqiRssi_t *lqiRssi);
00700
00701
00708 void ZDO_GetParentAddr(NodeAddr_t *parentAddr);
00709
00710
00717 void ZDO_GetChildrenAddr(ZDO_GetChildrenAddr_t *childrenAddr);
00718
00719
00726 void ZDO_SetTxPowerReq(ZDO_SetTxPowerReq_t *req);
00727
00728
00735 ZDO_NwkStatus_t ZDO_GetNwkStatus();
00736
00737 #endif