void tryToJoinNetwork(void) { EmberNetworkParameters networkParams; EmberStatus status; EmberNodeType nodeType; MEMSET(&networkParams, 0, sizeof(EmberNetworkParameters)); networkParams.panId = getNextCandidate(); if (networkParams.panId == EMBER_AF_INVALID_PAN_ID) { debugPrintln("No networks to join on channel %d", emAfPluginNetworkSteeringCurrentChannel); gotoNextChannel(); return; } emberAfCorePrintln("%p joining 0x%2x", PLUGIN_NAME, networkParams.panId); networkParams.radioChannel = emAfPluginNetworkSteeringCurrentChannel; networkParams.radioTxPower = emberAfPluginNetworkSteeringGetPowerForRadioChannelCallback(emAfPluginNetworkSteeringCurrentChannel); nodeType = emberAfPluginNetworkSteeringGetNodeTypeCallback(emAfPluginNetworkSteeringState); status = emberJoinNetwork(nodeType, &networkParams); emAfPluginNetworkSteeringJoinAttempts++; if (EMBER_SUCCESS != status) { emberAfCorePrintln("Error: %p could not attempt join: 0x%X", PLUGIN_NAME, status); cleanupAndStop(status); return; } }
void initAndRunMainLoop(void) { EmberEventControl dataReportControl; EmberStatus status; int counter_reset = 0; emberTaskEnableIdling(true); emAppTask = emberTaskInit(emAppEvents); // Initialize the radio and the stack. If this fails, we have to assert // because something is wrong. status = emberInit(); emberSerialPrintfLine(COM_USART2, "Inititialization: 0x%x", status); //ember success;0x00 so emberinit worked assert(status == EMBER_SUCCESS); emberAfInit(); emberAfMainInitCallback(); //emberNetworkInit() called here emberResetNetworkState(); /////////////////leave network to join coordinator EmberNetworkStatus net_status; EmberNetworkParameters parameters; emberSetSecurityKey(&securityKey); MEMSET(¶meters, 0, sizeof(EmberNetworkParameters)); parameters.radioTxPower = 0; parameters.radioChannel = 1; parameters.panId = 0x01FF; halStackSeedRandom(halCommonGetInt32uMillisecondTick()); while (TRUE) { // Let the stack or EZSP layer run periodic tasks. emberTick(); // Let the application and plugins run periodic tasks. emberAfMainTickCallback(); emberAfTick(); emberEventControlSetActive(dataReportControl); net_status = emberNetworkState(); //emberResetNetworkState(); //emberJoinNetwork(EMBER_STAR_END_DEVICE, ¶meters); /* if(!emberStackIsUp()){ emberAfGuaranteedPrintln("stack wasn't up"); emberJoinNetwork(EMBER_STAR_END_DEVICE, ¶meters); } */ //emberAfGuaranteedPrintln("net_status is: %d", net_status); if(counter_reset == 10000){ emberResetNetworkState(); counter_reset = 0; } else{ counter_reset++; } if (net_status == EMBER_NO_NETWORK){ //emberPermitJoining(0xFF); //emberResetNetworkState(); emberAfGuaranteedPrintln("Network has been reset"); emberJoinNetwork(EMBER_STAR_END_DEVICE, ¶meters); } emberRunTask(emAppTask); } }