@@ -779,13 +779,15 @@ void ctrlm_obj_network_ble_t::req_process_program_ir_codes(void *data, int size)
779779 g_assert (dqm);
780780 g_assert (size == sizeof (ctrlm_main_queue_msg_program_ir_codes_t ));
781781
782- if (dqm-> success ) {*(dqm-> success ) = false ;}
782+ bool success = false ;
783783
784784 if (!ready_) {
785785 XLOGD_FATAL (" Network is not ready!" );
786786 } else {
787787 ctrlm_controller_id_t controller_id = dqm->controller_id ;
788- if (!controller_exists (controller_id)) {
788+ if (!is_managed_by_network (controller_id)) {
789+ XLOGD_ERROR (" Controller %d is not managed by the %s network" , controller_id, name_get ());
790+ } else if (!controller_exists (controller_id)) {
789791 XLOGD_ERROR (" Controller doesn't exist!" );
790792 } else if (!controllers_[controller_id]->isSupportedIrdb (dqm->vendor_info )) {
791793 XLOGD_ERROR (" Unsupported IRDB - not continuing with ir code download!" );
@@ -815,19 +817,18 @@ void ctrlm_obj_network_ble_t::req_process_program_ir_codes(void *data, int size)
815817
816818 XLOGD_ERROR (" failed to program IR signal waveforms on remote" );
817819 } else {
818-
819- if (dqm->success ) { *(dqm->success ) = true ; }
820-
821- controllers_[controller_id]->irdb_entry_id_name_set (CTRLM_IRDB_DEV_TYPE_TV, ir_rf_database_.get_tv_ir_code_id ());
822- controllers_[controller_id]->irdb_entry_id_name_set (CTRLM_IRDB_DEV_TYPE_AVR, ir_rf_database_.get_avr_ir_code_id ());
823- XLOGD_INFO (" irdb_entry_id_name = <%s>" , dqm->ir_codes ->id .c_str ());
820+ success = true ;
821+ controllers_[controller_id]->irdb_entry_id_name_set (CTRLM_IRDB_DEV_TYPE_TV, ir_rf_database_.get_tv_ir_code_id ());
822+ controllers_[controller_id]->irdb_entry_id_name_set (CTRLM_IRDB_DEV_TYPE_AVR, ir_rf_database_.get_avr_ir_code_id ());
823+ XLOGD_INFO (" irdb_entry_id_name = <%s>" , dqm->ir_codes ->id .c_str ());
824824 }
825825 }
826826 // Store the IR codes in the database
827827 ir_rf_database_.store_db ();
828828 }
829829 }
830830 }
831+ if (dqm->success ) {dqm->success ->push_back (success);}
831832 if (dqm->semaphore ) {
832833 sem_post (dqm->semaphore );
833834 }
@@ -842,23 +843,23 @@ void ctrlm_obj_network_ble_t::req_process_ir_clear_codes(void *data, int size) {
842843 g_assert (dqm);
843844 g_assert (size == sizeof (ctrlm_main_queue_msg_ir_clear_t ));
844845
845- if (dqm-> success ) {*(dqm-> success ) = false ;}
846+ bool success = false ;
846847
847848 if (!ready_) {
848849 XLOGD_FATAL (" Network is not ready!" );
849850 } else {
850851 ctrlm_controller_id_t controller_id = dqm->controller_id ;
851- if (!controller_exists (controller_id)) {
852+ if (!is_managed_by_network (controller_id)) {
853+ XLOGD_ERROR (" Controller %d is not managed by the %s network" , controller_id, name_get ());
854+ } else if (!controller_exists (controller_id)) {
852855 XLOGD_ERROR (" Controller doesn't exist!" );
853856 } else {
854857
855858 if (ble_rcu_interface_) {
856859 if (!ble_rcu_interface_->eraseIrSignals (controllers_[controller_id]->ieee_address_get ().get_value ())) {
857860 XLOGD_ERROR (" failed to erase IR signal waveforms on remote" );
858861 } else {
859-
860- if (dqm->success ) { *(dqm->success ) = true ; }
861-
862+ success = true ;
862863 ir_rf_database_.clear_ir_codes ();
863864 XLOGD_INFO (" \n %s" , ir_rf_database_.to_string (true ).c_str ());
864865 controllers_[controller_id]->irdb_entry_id_name_set (CTRLM_IRDB_DEV_TYPE_TV, " 0" );
@@ -868,6 +869,7 @@ void ctrlm_obj_network_ble_t::req_process_ir_clear_codes(void *data, int size) {
868869 ir_rf_database_.store_db ();
869870 }
870871 }
872+ if (dqm->success ) {dqm->success ->push_back (success);}
871873 if (dqm->semaphore ) {
872874 sem_post (dqm->semaphore );
873875 }
@@ -973,7 +975,7 @@ void ctrlm_obj_network_ble_t::req_process_find_my_remote(void *data, int size) {
973975 ctrlm_controller_id_t controller_id = get_last_used_controller ();
974976
975977 if (CTRLM_HAL_CONTROLLER_ID_INVALID == controller_id) {
976- XLOGD_ERROR (" no connected controllers to find!!" );
978+ XLOGD_ERROR (" no connected %s controllers to find!!" , name_get () );
977979 dqm->params ->set_result (CTRLM_IARM_CALL_RESULT_ERROR, network_id_get ());
978980 } else {
979981 if (ble_rcu_interface_) {
@@ -2440,7 +2442,7 @@ void ctrlm_obj_network_ble_t::controller_remove(ctrlm_controller_id_t controller
24402442
24412443ctrlm_controller_id_t ctrlm_obj_network_ble_t::controller_id_assign () {
24422444 // Get the next available controller id
2443- for (ctrlm_controller_id_t index = 1 ; index < CTRLM_MAIN_CONTROLLER_ID_ALL ; index++) {
2445+ for (ctrlm_controller_id_t index = BLE_RCU_ID_RANGE_MIN ; index < BLE_RCU_ID_RANGE_MAX ; index++) {
24442446 if (!controller_exists (index)) {
24452447 XLOGD_INFO (" controller id %u" , index);
24462448 return (index);
@@ -2463,10 +2465,26 @@ void ctrlm_obj_network_ble_t::controllers_load() {
24632465 XLOGD_WARN (" deleting legacy IR controller object" );
24642466 add_controller->db_destroy ();
24652467 delete add_controller;
2466- } else {
2467- XLOGD_INFO (" adding BLE controller with ID = 0x%X" , id);
2468- controllers_[id] = add_controller;
2468+ continue ;
24692469 }
2470+ if (!is_managed_by_network (id)) {
2471+ ctrlm_controller_id_t new_id = controller_id_assign ();
2472+
2473+ add_controller->db_destroy (); // safely can destroy the old entry since it was loaded earlier
2474+
2475+ if (new_id == 0 ) {
2476+ XLOGD_ERROR (" Unable to assign a new ID - deleting controller <%d>" , id);
2477+ delete add_controller;
2478+ continue ;
2479+ }
2480+
2481+ add_controller->update_controller_id_and_db_entry (db_name_get (), network_id_get (), new_id);
2482+ add_controller->db_create (); // create the new entry with its new ID
2483+ XLOGD_WARN (" Legacy BLE RCU controller id <%d> found - updating controller id to <%d>" , id, new_id);
2484+ id = new_id;
2485+ }
2486+ XLOGD_INFO (" adding BLE controller with ID = 0x%X" , id);
2487+ controllers_[id] = add_controller;
24702488 }
24712489}
24722490
@@ -2655,3 +2673,7 @@ void ctrlm_obj_network_ble_t::start_controller_audio_streaming(ctrlm_voice_start
26552673 params->m_fd = fd;
26562674 params->m_started = true ;
26572675}
2676+
2677+ bool ctrlm_obj_network_ble_t::is_managed_by_network (ctrlm_controller_id_t id) {
2678+ return (id >= BLE_RCU_ID_RANGE_MIN && id < BLE_RCU_ID_RANGE_MAX);
2679+ }
0 commit comments