"Новое" , т.е. незарегистрированное (?) ищет сеть для регистрации.
Уже регистрированное - так же.
И это наверняка инится в tl_zbTaskProcedure(), которая в блоб либе. И работает из tl_zbTaskProcedure()
А вызывает оно всякие call-back.
zbdemo_bdbInitCb() и всякие rejoin в zbdemo_bdbCommissioningCb()
Я не копался с вашей задачей, но копался с rejoin чтобы ограничить вызов сканирования - сделать интервал на 1 минуту, иначе садит батарейку влет.
Оно-же и дает сканирование сети при первом включении.
При старте сканируются все каналы, потом идет вставленная пауза и цикл повторяется.
При потере связи (если пару раз нет ответа-подтверждения) то запускается аналогичная фигня - тот-же rejoin.
В SDK он сделан пачкой сканов, с короткими паузами. Отработав такой блок пачек сканирований идет другая, немного большая пауза и так пока не кончится счетчик повторов этого безобразия или сдохнет батарейка.
Циклы описаны в этих переменных:
C:
//Contents of the rejoin interval in seconds
#define ZDO_REJOIN_TIMES 5 // =5
#define ZDO_REJOIN_DURATION 0 // =6
#define ZDO_REJOIN_BACKOFF_TIME 45 // =30
#define ZDO_MAX_REJOIN_BACKOFF_TIME 180 // =90
#define ZDO_REJOIN_BACKOFF_ITERATION 0 // =8