@@ -132,101 +132,101 @@ static void user_find_cb(esp_zb_zdp_status_t zdo_status,
132132 }
133133}
134134
135- // void esp_zb_app_signal_handler(esp_zb_app_signal_t* signal_struct) {
136- // uint32_t* p_sg_p = signal_struct->p_app_signal;
137- // esp_err_t err_status = signal_struct->esp_err_status;
138- // esp_zb_app_signal_type_t sig_type = *p_sg_p;
139- // esp_zb_zdo_signal_device_annce_params_t* dev_annce_params = NULL;
140- // switch (sig_type) {
141- // case ESP_ZB_ZDO_SIGNAL_SKIP_STARTUP:
142- // ESP_LOGI(TAG, "Zigbee stack initialized");
143- // switch_state = SWITCH_CREATE_NETWORK;
144- // esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_INITIALIZATION);
145- // break;
146- // case ESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START:
147- // case ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT:
148- // if (err_status == ESP_OK) {
149- // ESP_LOGI(TAG, "Device started up in %s factory-reset mode",
150- // esp_zb_bdb_is_factory_new() ? "" : "non");
151- // if (esp_zb_bdb_is_factory_new()) {
152- // ESP_LOGI(TAG, "Start network formation");
153- // esp_zb_bdb_start_top_level_commissioning(
154- // ESP_ZB_BDB_MODE_NETWORK_FORMATION);
155- // } else {
156- // ESP_LOGI(TAG, "Device rebooted");
157- // }
158- // } else {
159- // ESP_LOGE(TAG, "Failed to initialize Zigbee stack (status: %s)",
160- // esp_err_to_name(err_status));
161- // }
162- // break;
163- // case ESP_ZB_BDB_SIGNAL_FORMATION:
164- // if (err_status == ESP_OK) {
165- // esp_zb_ieee_addr_t extended_pan_id;
166- // esp_zb_get_extended_pan_id(extended_pan_id);
167- // ESP_LOGI(TAG,
168- // "Formed network successfully (Extended PAN ID: "
169- // "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, PAN ID: 0x%04hx, "
170- // "Channel:%d, Short Address: 0x%04hx)",
171- // extended_pan_id[7], extended_pan_id[6], extended_pan_id[5],
172- // extended_pan_id[4], extended_pan_id[3], extended_pan_id[2],
173- // extended_pan_id[1], extended_pan_id[0], esp_zb_get_pan_id(),
174- // esp_zb_get_current_channel(), esp_zb_get_short_address());
175- // esp_zb_bdb_start_top_level_commissioning(
176- // ESP_ZB_BDB_MODE_NETWORK_STEERING);
177- // } else {
178- // ESP_LOGI(TAG, "Restart network formation (status: %s)",
179- // esp_err_to_name(err_status));
180- // esp_zb_scheduler_alarm(
181- // (esp_zb_callback_t) bdb_start_top_level_commissioning_cb,
182- // ESP_ZB_BDB_MODE_NETWORK_FORMATION, 1000);
183- // }
184- // break;
185- // case ESP_ZB_BDB_SIGNAL_STEERING:
186- // if (err_status == ESP_OK) {
187- // ESP_LOGI(TAG, "Network steering started");
188- // switch_state = SWITCH_WAIT_FOR_DEVICES;
189- // }
190- // break;
191- // case ESP_ZB_ZDO_SIGNAL_DEVICE_ANNCE:
192- // dev_annce_params = (esp_zb_zdo_signal_device_annce_params_t*)
193- // esp_zb_app_signal_get_params(p_sg_p);
194- // ESP_LOGI(TAG, "New device commissioned or rejoined (short: 0x%04hx)",
195- // dev_annce_params->device_short_addr);
196- // esp_zb_zdo_match_desc_req_param_t cmd_req;
197- // cmd_req.dst_nwk_addr = dev_annce_params->device_short_addr;
198- // cmd_req.addr_of_interest = dev_annce_params->device_short_addr;
199- // esp_zb_zdo_find_on_off_light(&cmd_req, user_find_cb, NULL);
200- // break;
201- // case ESP_ZB_NWK_SIGNAL_PERMIT_JOIN_STATUS:
202- // if (err_status == ESP_OK) {
203- // if (*(uint8_t*) esp_zb_app_signal_get_params(p_sg_p)) {
204- // ESP_LOGI(TAG, "Network(0x%04hx) is open for %d seconds",
205- // esp_zb_get_pan_id(),
206- // *(uint8_t*) esp_zb_app_signal_get_params(p_sg_p));
207- // open_network_duration =
208- // *(uint8_t*) esp_zb_app_signal_get_params(p_sg_p);
209- // vTaskResume(network_open_task_handle);
210- // } else {
211- // if (switch_state != SWITCH_LIGHT_FOUND &&
212- // switch_state != SWITCH_WAIT_FOR_DEVICES) {
213- // switch_state = SWITCH_NETWORK_FAILED;
214- // }
215- // if (switch_state == SWITCH_WAIT_FOR_DEVICES) {
216- // switch_state = SWITCH_NO_DEVICES;
217- // }
218- // ESP_LOGW(TAG, "Network(0x%04hx) closed, devices joining not allowed.",
219- // esp_zb_get_pan_id());
220- // }
221- // }
222- // break;
223- // default:
224- // ESP_LOGI(TAG, "ZDO signal: %s (0x%x), status: %s",
225- // esp_zb_zdo_signal_to_string(sig_type), sig_type,
226- // esp_err_to_name(err_status));
227- // break;
228- // }
229- // }
135+ void esp_zb_app_signal_handler (esp_zb_app_signal_t * signal_struct ) {
136+ uint32_t * p_sg_p = signal_struct -> p_app_signal ;
137+ esp_err_t err_status = signal_struct -> esp_err_status ;
138+ esp_zb_app_signal_type_t sig_type = * p_sg_p ;
139+ esp_zb_zdo_signal_device_annce_params_t * dev_annce_params = NULL ;
140+ switch (sig_type ) {
141+ case ESP_ZB_ZDO_SIGNAL_SKIP_STARTUP :
142+ ESP_LOGI (TAG , "Zigbee stack initialized" );
143+ switch_state = SWITCH_CREATE_NETWORK ;
144+ esp_zb_bdb_start_top_level_commissioning (ESP_ZB_BDB_MODE_INITIALIZATION );
145+ break ;
146+ case ESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START :
147+ case ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT :
148+ if (err_status == ESP_OK ) {
149+ ESP_LOGI (TAG , "Device started up in %s factory-reset mode" ,
150+ esp_zb_bdb_is_factory_new () ? "" : "non" );
151+ if (esp_zb_bdb_is_factory_new ()) {
152+ ESP_LOGI (TAG , "Start network formation" );
153+ esp_zb_bdb_start_top_level_commissioning (
154+ ESP_ZB_BDB_MODE_NETWORK_FORMATION );
155+ } else {
156+ ESP_LOGI (TAG , "Device rebooted" );
157+ }
158+ } else {
159+ ESP_LOGE (TAG , "Failed to initialize Zigbee stack (status: %s)" ,
160+ esp_err_to_name (err_status ));
161+ }
162+ break ;
163+ case ESP_ZB_BDB_SIGNAL_FORMATION :
164+ if (err_status == ESP_OK ) {
165+ esp_zb_ieee_addr_t extended_pan_id ;
166+ esp_zb_get_extended_pan_id (extended_pan_id );
167+ ESP_LOGI (TAG ,
168+ "Formed network successfully (Extended PAN ID: "
169+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, PAN ID: 0x%04hx, "
170+ "Channel:%d, Short Address: 0x%04hx)" ,
171+ extended_pan_id [7 ], extended_pan_id [6 ], extended_pan_id [5 ],
172+ extended_pan_id [4 ], extended_pan_id [3 ], extended_pan_id [2 ],
173+ extended_pan_id [1 ], extended_pan_id [0 ], esp_zb_get_pan_id (),
174+ esp_zb_get_current_channel (), esp_zb_get_short_address ());
175+ esp_zb_bdb_start_top_level_commissioning (
176+ ESP_ZB_BDB_MODE_NETWORK_STEERING );
177+ } else {
178+ ESP_LOGI (TAG , "Restart network formation (status: %s)" ,
179+ esp_err_to_name (err_status ));
180+ esp_zb_scheduler_alarm (
181+ (esp_zb_callback_t ) bdb_start_top_level_commissioning_cb ,
182+ ESP_ZB_BDB_MODE_NETWORK_FORMATION , 1000 );
183+ }
184+ break ;
185+ case ESP_ZB_BDB_SIGNAL_STEERING :
186+ if (err_status == ESP_OK ) {
187+ ESP_LOGI (TAG , "Network steering started" );
188+ switch_state = SWITCH_WAIT_FOR_DEVICES ;
189+ }
190+ break ;
191+ case ESP_ZB_ZDO_SIGNAL_DEVICE_ANNCE :
192+ dev_annce_params = (esp_zb_zdo_signal_device_annce_params_t * )
193+ esp_zb_app_signal_get_params (p_sg_p );
194+ ESP_LOGI (TAG , "New device commissioned or rejoined (short: 0x%04hx)" ,
195+ dev_annce_params -> device_short_addr );
196+ esp_zb_zdo_match_desc_req_param_t cmd_req ;
197+ cmd_req .dst_nwk_addr = dev_annce_params -> device_short_addr ;
198+ cmd_req .addr_of_interest = dev_annce_params -> device_short_addr ;
199+ esp_zb_zdo_find_on_off_light (& cmd_req , user_find_cb , NULL );
200+ break ;
201+ case ESP_ZB_NWK_SIGNAL_PERMIT_JOIN_STATUS :
202+ if (err_status == ESP_OK ) {
203+ if (* (uint8_t * ) esp_zb_app_signal_get_params (p_sg_p )) {
204+ ESP_LOGI (TAG , "Network(0x%04hx) is open for %d seconds" ,
205+ esp_zb_get_pan_id (),
206+ * (uint8_t * ) esp_zb_app_signal_get_params (p_sg_p ));
207+ open_network_duration =
208+ * (uint8_t * ) esp_zb_app_signal_get_params (p_sg_p );
209+ vTaskResume (network_open_task_handle );
210+ } else {
211+ if (switch_state != SWITCH_LIGHT_FOUND &&
212+ switch_state != SWITCH_WAIT_FOR_DEVICES ) {
213+ switch_state = SWITCH_NETWORK_FAILED ;
214+ }
215+ if (switch_state == SWITCH_WAIT_FOR_DEVICES ) {
216+ switch_state = SWITCH_NO_DEVICES ;
217+ }
218+ ESP_LOGW (TAG , "Network(0x%04hx) closed, devices joining not allowed." ,
219+ esp_zb_get_pan_id ());
220+ }
221+ }
222+ break ;
223+ default :
224+ ESP_LOGI (TAG , "ZDO signal: %s (0x%x), status: %s" ,
225+ esp_zb_zdo_signal_to_string (sig_type ), sig_type ,
226+ esp_err_to_name (err_status ));
227+ break ;
228+ }
229+ }
230230
231231/**
232232 * @brief Task to keep track of the network open duration
0 commit comments