static void deviceInformationRequestHandler(const EmberEUI64 source, uint32_t transaction, uint8_t startIndex) { EmberEUI64 eui64; EmberStatus status; uint8_t total = emberAfEndpointCount(); uint8_t i, *count; emberAfZllCommissioningClusterPrintln("RX: DeviceInformationRequest 0x%4x, 0x%x", transaction, startIndex); emberAfFillExternalBuffer((ZCL_CLUSTER_SPECIFIC_COMMAND | ZCL_FRAME_CONTROL_SERVER_TO_CLIENT | ZCL_DISABLE_DEFAULT_RESPONSE_MASK), ZCL_ZLL_COMMISSIONING_CLUSTER_ID, ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID, "wuu", transaction, total, startIndex); emberAfGetEui64(eui64); count = &appResponseData[appResponseLength]; emberAfPutInt8uInResp(0); // temporary count for (i = startIndex; i < total; i++) { // If the profile interop bit in the ZllInformation bitmask is cleared, // then we know this is a legacy ZLL app, so we set the profile ID in our // response to the ZLL profile ID. If the bit is set, then the profile ID // should be set to the ZigBee 3.0 common profile ID. uint8_t deviceVersion = emberAfDeviceVersionFromIndex(i); uint8_t endpoint = emberAfEndpointFromIndex(i); EmberAfProfileId profileId = (network.state & EMBER_ZLL_STATE_PROFILE_INTEROP ? emberAfProfileIdFromIndex(i) : EMBER_ZLL_PROFILE_ID); emberAfPutBlockInResp(eui64, EUI64_SIZE); emberAfPutInt8uInResp(endpoint); emberAfPutInt16uInResp(profileId); emberAfPutInt16uInResp(emberAfDeviceIdFromIndex(i)); emberAfPutInt8uInResp(deviceVersion); emberAfPutInt8uInResp(emberAfPluginZllCommissioningGroupIdentifierCountCallback(endpoint)); emberAfPutInt8uInResp(i); // sort order (*count)++; } status = emberAfSendCommandInterPan(0xFFFF, // destination pan id source, EMBER_NULL_NODE_ID, // node id - ignored 0x0000, // group id - ignored EMBER_ZLL_PROFILE_ID); if (status != EMBER_SUCCESS) { emberAfZllCommissioningClusterPrintln("%p%p failed 0x%x", "Error: ", "Device information response", status); } }
void buttonEventHandler(void) { emberEventControlSetInactive(buttonEventControl); EmberNetworkStatus state = emberNetworkState(); if (state == EMBER_JOINED_NETWORK) { emberAfFillExternalBuffer((ZCL_CLUSTER_SPECIFIC_COMMAND | ZCL_FRAME_CONTROL_CLIENT_TO_SERVER), ZCL_ON_OFF_CLUSTER_ID, (on ? ZCL_OFF_COMMAND_ID : ZCL_ON_COMMAND_ID), ""); emberAfGetCommandApsFrame()->profileId = emberAfProfileIdFromIndex(0); emberAfGetCommandApsFrame()->sourceEndpoint = emberAfEndpointFromIndex(0); emberAfGetCommandApsFrame()->destinationEndpoint = EMBER_BROADCAST_ENDPOINT; if (emberAfSendCommandBroadcast(EMBER_SLEEPY_BROADCAST_ADDRESS) == EMBER_SUCCESS) { on = !on; } else { halPlayTune_P(sadTune, TRUE); } } else if (state == EMBER_NO_NETWORK) { halPlayTune_P((emberAfZllInitiateTouchLink() == EMBER_SUCCESS ? waitTune : sadTune), TRUE); } else { int16u elapsed = elapsedTimeInt16u(buttonPressTime, halCommonGetInt16uMillisecondTick()); if (REPAIR_LIMIT_MS < elapsedTimeInt16u(buttonPressTime, halCommonGetInt16uMillisecondTick())) { halPlayTune_P(sadTune, TRUE); } else { if (state == EMBER_JOINED_NETWORK_NO_PARENT && !emberStackIsPerformingRejoin()) { halPlayTune_P((emberFindAndRejoinNetwork(TRUE, 0) == EMBER_SUCCESS ? waitTune : sadTune), TRUE); } emberEventControlSetDelayMS(buttonEventControl, REPAIR_DELAY_MS); } } }
void emAfCliInfoCommand(void) { EmberNodeType nodeTypeResult = 0xFF; uint8_t commandLength; EmberEUI64 myEui64; EmberNetworkParameters networkParams; emberStringCommandArgument(-1, &commandLength); printMfgString(); emberAfAppPrintln("AppBuilder MFG Code: 0x%2X", EMBER_AF_MANUFACTURER_CODE); emberAfGetEui64(myEui64); emberAfGetNetworkParameters(&nodeTypeResult, &networkParams); emberAfAppPrint("node ["); emberAfAppDebugExec(emberAfPrintBigEndianEui64(myEui64)); emberAfAppFlush(); emberAfAppPrintln("] chan [%d] pwr [%d]", networkParams.radioChannel, networkParams.radioTxPower); emberAfAppPrint("panID [0x%2x] nodeID [0x%2x] ", networkParams.panId, emberAfGetNodeId()); emberAfAppFlush(); emberAfAppPrint("xpan [0x"); emberAfAppDebugExec(emberAfPrintBigEndianEui64(networkParams.extendedPanId)); emberAfAppPrintln("]"); emberAfAppFlush(); emAfCliVersionCommand(); emberAfAppFlush(); emberAfAppPrint("nodeType ["); if (nodeTypeResult != 0xFF) { emberAfAppPrint("0x%x", nodeTypeResult); } else { emberAfAppPrint("unknown"); } emberAfAppPrintln("]"); emberAfAppFlush(); emberAfAppPrintln("%p level [%x]", "Security", emberAfGetSecurityLevel()); printSmartEnergySecurityInfo(); printSmartEnergySecurityInfo283k1(); emberAfAppPrint("network state [%x] ", emberNetworkState()); printPacketBuffers(); emberAfAppFlush(); // print the endpoint information { uint8_t i, j; emberAfAppPrintln("Ep cnt: %d", emberAfEndpointCount()); // loop for each endpoint for (i = 0; i < emberAfEndpointCount(); i++) { EmberAfEndpointType *et = emAfEndpoints[i].endpointType; emberAfAppPrint("ep %d [endpoint %p, device %p] ", emberAfEndpointFromIndex(i), (emberAfEndpointIndexIsEnabled(i) ? "enabled" : "disabled"), emberAfIsDeviceEnabled(emberAfEndpointFromIndex(i)) ? "enabled" : "disabled"); emberAfAppPrintln("nwk [%d] profile [0x%2x] devId [0x%2x] ver [0x%x]", emberAfNetworkIndexFromEndpointIndex(i), emberAfProfileIdFromIndex(i), emberAfDeviceIdFromIndex(i), emberAfDeviceVersionFromIndex(i)); // loop for the clusters within the endpoint for (j = 0; j < et->clusterCount; j++) { EmberAfCluster *zc = &(et->cluster[j]); emberAfAppPrint(" %p cluster: 0x%2x ", (emberAfClusterIsClient(zc) ? "out(client)" : "in (server)" ), zc->clusterId); emberAfAppDebugExec(emberAfDecodeAndPrintCluster(zc->clusterId)); emberAfAppPrintln(""); emberAfAppFlush(); } emberAfAppFlush(); } } { PGM_P names[] = { EM_AF_GENERATED_NETWORK_STRINGS }; uint8_t i; emberAfAppPrintln("Nwk cnt: %d", EMBER_SUPPORTED_NETWORKS); for (i = 0; i < EMBER_SUPPORTED_NETWORKS; i++) { emberAfPushNetworkIndex(i); emberAfAppPrintln("nwk %d [%p]", i, names[i]); if (emAfProIsCurrentNetwork()) { emberAfAppPrintln(" nodeType [0x%x]", emAfCurrentZigbeeProNetwork->nodeType); emberAfAppPrintln(" securityProfile [0x%x]", emAfCurrentZigbeeProNetwork->securityProfile); } emberAfPopNetworkIndex(); } } }