@@ -411,26 +411,47 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
411411 tmp_config_obj.set_ap_rootfs_image (ap_rootfs_image);
412412 tmp_config_obj.set_ap_kernel_image (FLAGS_ap_kernel_image);
413413
414+ tmp_config_obj.set_enable_host_nfc (FLAGS_enable_host_nfc);
415+ tmp_config_obj.set_enable_host_nfc_connector (FLAGS_enable_host_nfc);
416+
414417 // get flag default values and store into map
415418 auto name_to_default_value = CurrentFlagsToDefaultValue ();
416419 // old flags but vectorized for multi-device instances
417420 int32_t instances_size = instance_nums.size ();
418421
419422 // netsim flags allow all radios or selecting a specific radio
420- bool is_any_netsim = FLAGS_netsim || FLAGS_netsim_bt || FLAGS_netsim_uwb;
421- bool is_bt_netsim = FLAGS_netsim || FLAGS_netsim_bt;
422- bool is_uwb_netsim = FLAGS_netsim || FLAGS_netsim_uwb;
423-
424- std::vector<bool > enable_host_bluetooth_vec =
425- CF_EXPECT (GET_FLAG_BOOL_VALUE (enable_host_bluetooth));
426-
427- tmp_config_obj.set_enable_host_nfc (FLAGS_enable_host_nfc);
428- tmp_config_obj.set_enable_host_nfc_connector (FLAGS_enable_host_nfc);
423+ std::vector<bool > netsim_all_radios_vec =
424+ CF_EXPECT (GET_FLAG_BOOL_VALUE (netsim));
425+ bool any_netsim_all_radios =
426+ std::any_of (netsim_all_radios_vec.begin (), netsim_all_radios_vec.end (),
427+ [](bool e) { return e; });
428+ std::vector<bool > netsim_bt_vec = CF_EXPECT (GET_FLAG_BOOL_VALUE (netsim_bt));
429+ bool any_netsim_bt = std::any_of (netsim_bt_vec.begin (), netsim_bt_vec.end (),
430+ [](bool e) { return e; });
431+ std::vector<bool > netsim_uwb_vec = CF_EXPECT (GET_FLAG_BOOL_VALUE (netsim_uwb));
432+ bool any_netsim_uwb = std::any_of (
433+ netsim_uwb_vec.begin (), netsim_uwb_vec.end (), [](bool e) { return e; });
434+ bool netsim_has_bt = any_netsim_all_radios || any_netsim_bt;
435+ bool netsim_has_uwb = any_netsim_all_radios || any_netsim_uwb;
429436
430437 // These flags inform NetsimServer::ResultSetup which radios it owns.
431- if (is_bt_netsim ) {
438+ if (netsim_has_bt ) {
432439 tmp_config_obj.netsim_radio_enable (CuttlefishConfig::NetsimRadio::Bluetooth);
433440 }
441+ if (netsim_has_uwb) {
442+ tmp_config_obj.netsim_radio_enable (CuttlefishConfig::NetsimRadio::Uwb);
443+ }
444+
445+ bool any_not_netsim_bt = false ;
446+ bool any_not_netsim_uwb = false ;
447+ for (int32_t i = 0 ; i < instances_size; ++i) {
448+ any_not_netsim_bt |= !netsim_all_radios_vec[i] && !netsim_bt_vec[i];
449+ any_not_netsim_uwb |= !netsim_all_radios_vec[i] && !netsim_uwb_vec[i];
450+ }
451+
452+ std::vector<bool > enable_host_bluetooth_vec =
453+ CF_EXPECT (GET_FLAG_BOOL_VALUE (enable_host_bluetooth));
454+
434455 // end of vectorize ap_rootfs_image, ap_kernel_image, wmediumd_config
435456
436457 tmp_config_obj.set_enable_automotive_proxy (FLAGS_enable_automotive_proxy);
@@ -639,15 +660,7 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
639660 if (FLAGS_pica_instance_num > 0 ) {
640661 pica_instance_num = FLAGS_pica_instance_num - 1 ;
641662 }
642- tmp_config_obj.set_enable_host_uwb (FLAGS_enable_host_uwb || is_uwb_netsim);
643-
644- // netsim has its own connector for uwb
645- tmp_config_obj.set_enable_host_uwb_connector (FLAGS_enable_host_uwb &&
646- !is_uwb_netsim);
647-
648- if (is_uwb_netsim) {
649- tmp_config_obj.netsim_radio_enable (CuttlefishConfig::NetsimRadio::Uwb);
650- }
663+ tmp_config_obj.set_enable_host_uwb (FLAGS_enable_host_uwb || any_netsim_uwb);
651664
652665 tmp_config_obj.set_pica_uci_port (7000 + pica_instance_num);
653666 LOG (DEBUG) << " launch pica: " << (FLAGS_pica_instance_num <= 0 );
@@ -981,12 +994,21 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
981994
982995 // crosvm should create fifos for Bluetooth
983996 bool enable_host_bluetooth = enable_host_bluetooth_vec[instance_index];
997+ bool is_netsim_all = netsim_all_radios_vec[instance_index];
998+ bool is_bt_netsim = is_netsim_all || netsim_bt_vec[instance_index];
984999 // or is_bt_netsim is here for backwards compatibility only
9851000 instance.set_has_bluetooth (enable_host_bluetooth || is_bt_netsim);
9861001 // rootcanal and bt_connector should handle Bluetooth (instead of netsim)
9871002 instance.set_enable_host_bluetooth_connector (enable_host_bluetooth &&
9881003 !is_bt_netsim);
9891004
1005+ bool is_uwb_netsim = is_netsim_all || netsim_uwb_vec[instance_index];
1006+ // netsim has its own connector for uwb
1007+ instance.set_enable_host_uwb_connector (FLAGS_enable_host_uwb &&
1008+ !is_uwb_netsim);
1009+
1010+ bool is_any_netsim = is_netsim_all || is_bt_netsim || is_uwb_netsim;
1011+
9901012 instance.set_uuid (FLAGS_uuid);
9911013
9921014 instance.set_environment_name (environment_name);
@@ -1171,12 +1193,13 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
11711193 tmp_config_obj.set_sig_server_proxy_port (port);
11721194 instance.set_start_netsim (is_first_instance && is_any_netsim);
11731195
1174- instance.set_start_rootcanal (is_first_instance && !is_bt_netsim &&
1196+ instance.set_start_rootcanal (is_first_instance && any_not_netsim_bt &&
11751197 (FLAGS_rootcanal_instance_num <= 0 ));
11761198
1177- instance.set_start_casimir (is_first_instance && FLAGS_casimir_instance_num <= 0 );
1199+ instance.set_start_casimir (is_first_instance &&
1200+ FLAGS_casimir_instance_num <= 0 );
11781201
1179- instance.set_start_pica (is_first_instance && !is_uwb_netsim &&
1202+ instance.set_start_pica (is_first_instance && any_not_netsim_uwb &&
11801203 FLAGS_pica_instance_num <= 0 );
11811204 instance.set_start_vhal_proxy_server (
11821205 is_first_instance && enable_vhal_proxy_server &&
0 commit comments