⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdsecmgr.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    924          {
    925            //---------------------------------------------------------------------------
    926            #if defined ( ZDO_COORDINATOR )
    927            //---------------------------------------------------------------------------
    928            ZStatus_t status;
    929            uint16    index;
    930          
    931          
    932            // initialize results
    933            status = ZNwkUnknownDevice;
    934          
    935            // verify data is available
    936            if ( ZDSecMgrCtrlData != NULL )
    937            {
    938              // look for an empty slot
    939              for ( index = 0; index < ZDSECMGR_CTRL_MAX; index++ )
    940              {
    941                if ( ZDSecMgrCtrlData[index].state == ZDSECMGR_CTRL_NONE )
    942                {
    943                  // return successful results
    944                  ZDSecMgrCtrlSet( device, entry, &ZDSecMgrCtrlData[index] );
    945          
    946                  status = ZSuccess;
    947          
    948                  // break from loop
    949                  index = ZDSECMGR_CTRL_MAX;
    950                }
    951              }
    952            }
    953          
    954            return status;
    955            //---------------------------------------------------------------------------
    956            #else // !defined ( ZDO_COORDINATOR )
    957            //---------------------------------------------------------------------------
    958            return ZSuccess;
    959            //---------------------------------------------------------------------------
    960            #endif // !defined ( ZDO_COORDINATOR )
    961            //---------------------------------------------------------------------------
    962          }
    963          #endif // defined ( ZDSECMGR_COMMERCIAL )
    964          
    965          #if defined ( ZDSECMGR_COMMERCIAL )
    966          /******************************************************************************
    967           * @fn          ZDSecMgrCtrlTerm
    968           *
    969           * @brief       Terminate device control.
    970           *
    971           * @param       entry - [in] valid entry data
    972           *
    973           * @return      none
    974           */
    975          void ZDSecMgrCtrlTerm( ZDSecMgrEntry_t* entry )
    976          {
    977            //---------------------------------------------------------------------------
    978            #if defined ( ZDO_COORDINATOR )
    979            //---------------------------------------------------------------------------
    980            ZDSecMgrCtrl_t* ctrl;
    981          
    982          
    983            // remove device from control data
    984            ZDSecMgrCtrlLookup ( entry, &ctrl );
    985          
    986            if ( ctrl != NULL )
    987            {
    988              ZDSecMgrCtrlRelease ( ctrl );
    989            }
    990            //---------------------------------------------------------------------------
    991            #endif // defined ( ZDO_COORDINATOR )
    992            //---------------------------------------------------------------------------
    993          }
    994          #endif // defined ( ZDSECMGR_COMMERCIAL )
    995          
    996          #if defined ( ZDSECMGR_COMMERCIAL )
    997          /******************************************************************************
    998           * @fn          ZDSecMgrCtrlReset
    999           *
   1000           * @brief       Reset control data.
   1001           *
   1002           * @param       device - [in] valid device data
   1003           * @param       entry  - [in] valid entry data
   1004           *
   1005           * @return      none
   1006           */
   1007          ZStatus_t ZDSecMgrCtrlReset( ZDSecMgrDevice_t* device, ZDSecMgrEntry_t* entry )
   1008          {
   1009            //---------------------------------------------------------------------------
   1010            #if defined ( ZDO_COORDINATOR )
   1011            //---------------------------------------------------------------------------
   1012            ZStatus_t       status;
   1013            ZDSecMgrCtrl_t* ctrl;
   1014          
   1015          
   1016            // initialize results
   1017            status = ZNwkUnknownDevice;
   1018          
   1019            // look for a match for the entry
   1020            ZDSecMgrCtrlLookup( entry, &ctrl );
   1021          
   1022            if ( ctrl != NULL )
   1023            {
   1024              ZDSecMgrCtrlSet( device, entry, ctrl );
   1025          
   1026              status = ZSuccess;
   1027            }
   1028            else
   1029            {
   1030              status = ZDSecMgrCtrlAdd( device, entry );
   1031            }
   1032          
   1033            return status;
   1034            //---------------------------------------------------------------------------
   1035            #else // !defined ( ZDO_COORDINATOR )
   1036            //---------------------------------------------------------------------------
   1037            return ZSuccess;
   1038            //---------------------------------------------------------------------------
   1039            #endif // !defined ( ZDO_COORDINATOR )
   1040            //---------------------------------------------------------------------------
   1041          }
   1042          #endif // defined ( ZDSECMGR_COMMERCIAL )
   1043          
   1044          #if defined ( ZDSECMGR_COMMERCIAL )
   1045          /******************************************************************************
   1046           * @fn          ZDSecMgrMasterKeyLoad
   1047           *
   1048           * @brief       Load the MASTER key for device with specified EXT
   1049           *              address.
   1050           *
   1051           * @param       nwkAddr - [in] NWK address of Trust Center
   1052           * @param       extAddr - [in] EXT address of Trust Center
   1053           * @param       key     - [in] MASTER key shared with Trust Center
   1054           *
   1055           * @return      none
   1056           */
   1057          void ZDSecMgrMasterKeyLoad( uint16 nwkAddr, uint8* extAddr, uint8* key )
   1058          {
   1059            AddrMgrEntry_t addr;
   1060            uint8*         loaded;
   1061          
   1062          
   1063            // check if Trust Center address is configured and correct
   1064            // check if MASTER key has already been sent
   1065          
   1066            // add address data
   1067            addr.user    = ADDRMGR_USER_SECURITY;
   1068            addr.nwkAddr = nwkAddr;
   1069            AddrMgrExtAddrSet( addr.extAddr, extAddr );
   1070          
   1071            if ( AddrMgrEntryUpdate( &addr ) == TRUE )
   1072            {
   1073              if ( ZDSecMgrMasterKeyLookup( addr.index, &loaded ) != ZSuccess )
   1074              {
   1075                ZDSecMgrMasterKeyStore( addr.index, key );
   1076              }
   1077            }
   1078          }
   1079          #endif // defined ( ZDSECMGR_COMMERCIAL )
   1080          
   1081          #if defined ( ZDSECMGR_COMMERCIAL )
   1082          /******************************************************************************
   1083           * @fn          ZDSecMgrAppKeyGet
   1084           *
   1085           * @brief       get an APP key - option APP(MASTER or LINK) key
   1086           *
   1087           * @param       initNwkAddr - [in] NWK address of initiator device
   1088           * @param       initExtAddr - [in] EXT address of initiator device
   1089           * @param       partNwkAddr - [in] NWK address of partner device
   1090           * @param       partExtAddr - [in] EXT address of partner device
   1091           * @param       key         - [out] APP(MASTER or LINK) key
   1092           * @param       keyType     - [out] APP(MASTER or LINK) key type
   1093           *
   1094           * @return      pointer to MASTER key
   1095           */
   1096          ZStatus_t ZDSecMgrAppKeyGet( uint16  initNwkAddr,
   1097                                       uint8*  initExtAddr,
   1098                                       uint16  partNwkAddr,
   1099                                       uint8*  partExtAddr,
   1100                                       uint8** key,
   1101                                       uint8*  keyType )
   1102          {
   1103            //---------------------------------------------------------------------------
   1104            // note:
   1105            // should use a robust mechanism to generate keys, for example
   1106            // combine EXT addresses and call a hash function
   1107            //---------------------------------------------------------------------------
   1108            osal_memset( *key, 0, SEC_KEY_LEN );
   1109          
   1110            *keyType = KEY_TYPE_APP_LINK;
   1111            //or       KEY_TYPE_APP_MASTER;
   1112          
   1113            return ZSuccess;
   1114          }
   1115          #endif // defined ( ZDSECMGR_COMMERCIAL )
   1116          
   1117          #if defined ( ZDSECMGR_COMMERCIAL )
   1118          /******************************************************************************
   1119           * @fn          ZDSecMgrAppKeyReq
   1120           *
   1121           * @brief       Process request for APP key between two devices.
   1122           *
   1123           * @param       device - [in] ZDO_RequestKeyInd_t, request info
   1124           *
   1125           * @return      none
   1126           */
   1127          void ZDSecMgrAppKeyReq( ZDO_RequestKeyInd_t* ind )
   1128          {
   1129            APSME_TransportKeyReq_t req;
   1130            uint8                   initExtAddr[Z_EXTADDR_LEN];
   1131            uint16                  partNwkAddr;
   1132            uint8                   key[SEC_KEY_LEN];
   1133          
   1134          
   1135            // validate initiator and partner
   1136            if ( ( APSME_LookupNwkAddr( ind->partExtAddr, &partNwkAddr ) == TRUE ) &&
   1137                 ( APSME_LookupExtAddr( ind->srcAddr, initExtAddr ) == TRUE      )   )
   1138            {
   1139              // point the key to some memory
   1140              req.key = key;
   1141          
   1142              // get an APP key - option APP (MASTER or LINK) key
   1143              if ( ZDSecMgrAppKeyGet( ind->srcAddr,
   1144                                      initExtAddr,
   1145                                      partNwkAddr,
   1146                                      ind->partExtAddr,
   1147                                      &req.key,
   1148                                      &req.keyType ) == ZSuccess )
   1149              {
   1150                // always secure
   1151                req.secure = TRUE;
   1152          
   1153                // send key to initiator device
   1154                req.dstAddr   = ind->srcAddr;
   1155                req.extAddr   = ind->partExtAddr;
   1156                req.initiator = TRUE;
   1157                APSME_TransportKeyReq( &req );
   1158          
   1159                // send key to partner device
   1160                req.dstAddr   = partNwkAddr;
   1161                req.extAddr   = initExtAddr;
   1162                req.initiator = FALSE;
   1163                APSME_TransportKeyReq( &req );
   1164              }
   1165            }
   1166          }
   1167          #endif // defined ( ZDSECMGR_COMMERCIAL )
   1168          
   1169          #if defined ( ZDSECMGR_COMMERCIAL )
   1170          /******************************************************************************
   1171           * @fn          ZDSecMgrEstablishKey
   1172           *
   1173           * @brief       Start SKKE with device joining network.
   1174           *
   1175           * @param       device - [in] ZDSecMgrDevice_t, device info
   1176           *
   1177           * @return      ZStatus_t
   1178           */
   1179          ZStatus_t ZDSecMgrEstablishKey( ZDSecMgrDevice_t* device )
   1180          {
   1181            ZStatus_t               status;
   11

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -