aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHao Chen <chenhaosjtuacm@google.com>2020-06-23 23:21:28 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-23 23:21:28 +0000
commitf8c98716c9765865b72f05de60eae15c06bab6d8 (patch)
tree033920f9bd7770e90adb6a413fb0df49c42c6d77
parente405b74e23b3a25246dbd29adb76b4011fe61cd6 (diff)
parent12c9a65e09a69e0380bc83dcae9d588774ddea4b (diff)
downloadcuttlefish-f8c98716c9765865b72f05de60eae15c06bab6d8.tar.gz
Run VHAL server with launch_cvd am: 129471f5e9 am: 12c9a65e09
Original change: https://googleplex-android-review.googlesource.com/c/device/google/cuttlefish/+/11934089 Change-Id: Ic1767de1e47ed20414e89b4ac243ed6a2cfa24fa
-rw-r--r--host/commands/assemble_cvd/flags.cc8
-rw-r--r--host/commands/run_cvd/kernel_args.cc6
-rw-r--r--host/commands/run_cvd/launch.cc24
-rw-r--r--host/commands/run_cvd/launch.h3
-rw-r--r--host/commands/run_cvd/main.cc2
-rw-r--r--host/libs/config/cuttlefish_config.cpp28
-rw-r--r--host/libs/config/cuttlefish_config.h9
-rw-r--r--host_package.mk1
8 files changed, 81 insertions, 0 deletions
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc
index 5ce8e9981..d57e87173 100644
--- a/host/commands/assemble_cvd/flags.cc
+++ b/host/commands/assemble_cvd/flags.cc
@@ -169,6 +169,8 @@ DEFINE_string(logcat_mode, "", "How to send android's log messages from "
"guest to host. One of [serial, vsock]");
DEFINE_bool(enable_tombstone_receiver, true, "Enables the tombstone logger on "
"both the guest and the host");
+DEFINE_bool(enable_vehicle_hal_grpc_server, true, "Enables the vehicle HAL "
+ "emulation gRPC server on the host");
DEFINE_bool(use_bootloader, false, "Boots the device using a bootloader");
DEFINE_string(bootloader, "", "Bootloader binary path");
DEFINE_string(boot_slot, "", "Force booting into the given slot. If empty, "
@@ -379,6 +381,10 @@ vsoc::CuttlefishConfig InitializeCuttlefishConfiguration(
tmp_config_obj.set_tombstone_receiver_binary(
vsoc::DefaultHostArtifactsPath("bin/tombstone_receiver"));
+ tmp_config_obj.set_enable_vehicle_hal_grpc_server(FLAGS_enable_vehicle_hal_grpc_server);
+ tmp_config_obj.set_vehicle_hal_grpc_server_binary(
+ vsoc::DefaultHostArtifactsPath("bin/android.hardware.automotive.vehicle@2.0-virtualization-grpc-server"));
+
tmp_config_obj.set_use_bootloader(FLAGS_use_bootloader);
tmp_config_obj.set_bootloader(FLAGS_bootloader);
@@ -414,6 +420,8 @@ vsoc::CuttlefishConfig InitializeCuttlefishConfiguration(
instance.set_host_port(6520 + num - 1);
instance.set_adb_ip_and_port("127.0.0.1:" + std::to_string(6520 + num - 1));
+ instance.set_vehicle_hal_server_port(9210 + num - 1);
+
instance.set_device_title(FLAGS_device_title);
instance.set_virtual_disk_paths({
diff --git a/host/commands/run_cvd/kernel_args.cc b/host/commands/run_cvd/kernel_args.cc
index 60a53dd70..af77420f1 100644
--- a/host/commands/run_cvd/kernel_args.cc
+++ b/host/commands/run_cvd/kernel_args.cc
@@ -87,6 +87,12 @@ std::vector<std::string> KernelCommandLineFromConfig(const vsoc::CuttlefishConfi
kernel_cmdline.push_back("androidboot.force_normal_boot=1");
}
+ if (config.enable_vehicle_hal_grpc_server() && instance.vehicle_hal_server_port()) {
+ constexpr int vehicle_hal_server_cid = 2;
+ kernel_cmdline.push_back(concat("androidboot.vendor.vehiclehal.server.cid=", vehicle_hal_server_cid));
+ kernel_cmdline.push_back(concat("androidboot.vendor.vehiclehal.server.port=", instance.vehicle_hal_server_port()));
+ }
+
// TODO(b/158131610): Set this in crosvm instead
kernel_cmdline.push_back(concat("androidboot.wifi_mac_address=",
mac_to_str(instance.wifi_mac_address())));
diff --git a/host/commands/run_cvd/launch.cc b/host/commands/run_cvd/launch.cc
index e34303bbb..93d600fb9 100644
--- a/host/commands/run_cvd/launch.cc
+++ b/host/commands/run_cvd/launch.cc
@@ -340,3 +340,27 @@ void LaunchSocketVsockProxyIfEnabled(cvd::ProcessMonitor* process_monitor,
GetOnSubprocessExitCallback(config));
}
}
+
+void LaunchVerhicleHalServerIfEnabled(const vsoc::CuttlefishConfig& config,
+ cvd::ProcessMonitor* process_monitor) {
+ if (!config.enable_vehicle_hal_grpc_server()) {
+ return;
+ }
+
+ cvd::Command grpc_server(config.vehicle_hal_grpc_server_binary());
+ auto instance = config.ForDefaultInstance();
+
+ const unsigned vhal_server_cid = 2;
+ const unsigned vhal_server_port = instance.vehicle_hal_server_port();
+ const std::string vhal_server_power_state_file =
+ cvd::AbsolutePath(instance.PerInstancePath("power_state"));
+ const std::string vhal_server_power_state_socket =
+ cvd::AbsolutePath(instance.PerInstancePath("power_state_socket"));
+
+ grpc_server.AddParameter("--server_cid=", vhal_server_cid);
+ grpc_server.AddParameter("--server_port=", vhal_server_port);
+ grpc_server.AddParameter("--power_state_file=", vhal_server_power_state_file);
+ grpc_server.AddParameter("--power_state_socket=", vhal_server_power_state_socket);
+ process_monitor->StartSubprocess(std::move(grpc_server),
+ GetOnSubprocessExitCallback(config));
+}
diff --git a/host/commands/run_cvd/launch.h b/host/commands/run_cvd/launch.h
index 7acbf1db5..0a8756f53 100644
--- a/host/commands/run_cvd/launch.h
+++ b/host/commands/run_cvd/launch.h
@@ -50,3 +50,6 @@ LogcatServerPorts LaunchLogcatReceiverIfEnabled(const vsoc::CuttlefishConfig& co
StreamerLaunchResult LaunchWebRTC(cvd::ProcessMonitor* process_monitor,
const vsoc::CuttlefishConfig& config);
+
+void LaunchVerhicleHalServerIfEnabled(const vsoc::CuttlefishConfig& config,
+ cvd::ProcessMonitor* process_monitor);
diff --git a/host/commands/run_cvd/main.cc b/host/commands/run_cvd/main.cc
index 01b7a446b..b45b22c12 100644
--- a/host/commands/run_cvd/main.cc
+++ b/host/commands/run_cvd/main.cc
@@ -427,6 +427,8 @@ int main(int argc, char** argv) {
auto tombstone_server = LaunchTombstoneReceiverIfEnabled(*config, &process_monitor);
auto tombstone_kernel_args = KernelCommandLineFromTombstone(tombstone_server);
+ LaunchVerhicleHalServerIfEnabled(*config, &process_monitor);
+
// The streamer needs to launch before the VMM because it serves on several
// sockets (input devices, vsock frame server) when using crosvm.
StreamerLaunchResult streamer_config;
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 1b1403b9a..cc9a000af 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -125,6 +125,10 @@ const char* kWebRTCAssetsDir = "webrtc_assets_dir";
const char* kWebRTCPublicIP = "webrtc_public_ip";
const char* kWebRTCEnableADBWebSocket = "webrtc_enable_adb_websocket";
+const char* kEnableVehicleHalServer = "enable_vehicle_hal_server";
+const char* kVehicleHalServerBinary = "vehicle_hal_server_binary";
+const char* kVehicleHalServerPort = "vehicle_hal_server_port";
+
const char* kRestartSubprocesses = "restart_subprocesses";
const char* kRunAdbConnector = "run_adb_connector";
const char* kAdbConnectorBinary = "adb_connector_binary";
@@ -575,6 +579,14 @@ void CuttlefishConfig::MutableInstanceSpecific::set_vnc_server_port(int vnc_serv
(*Dictionary())[kVncServerPort] = vnc_server_port;
}
+int CuttlefishConfig::InstanceSpecific::vehicle_hal_server_port() const {
+ return (*Dictionary())[kVehicleHalServerPort].asInt();
+}
+
+void CuttlefishConfig::MutableInstanceSpecific::set_vehicle_hal_server_port(int vehicle_hal_server_port) {
+ (*Dictionary())[kVehicleHalServerPort] = vehicle_hal_server_port;
+}
+
void CuttlefishConfig::set_enable_webrtc(bool enable_webrtc) {
(*dictionary_)[kEnableWebRTC] = enable_webrtc;
}
@@ -591,6 +603,22 @@ std::string CuttlefishConfig::webrtc_binary() const {
return (*dictionary_)[kWebRTCBinary].asString();
}
+void CuttlefishConfig::set_enable_vehicle_hal_grpc_server(bool enable_vehicle_hal_grpc_server) {
+ (*dictionary_)[kEnableVehicleHalServer] = enable_vehicle_hal_grpc_server;
+}
+
+bool CuttlefishConfig::enable_vehicle_hal_grpc_server() const {
+ return (*dictionary_)[kEnableVehicleHalServer].asBool();
+}
+
+void CuttlefishConfig::set_vehicle_hal_grpc_server_binary(const std::string& vehicle_hal_server_binary) {
+ (*dictionary_)[kVehicleHalServerBinary] = vehicle_hal_server_binary;
+}
+
+std::string CuttlefishConfig::vehicle_hal_grpc_server_binary() const {
+ return (*dictionary_)[kVehicleHalServerBinary].asString();
+}
+
void CuttlefishConfig::set_webrtc_assets_dir(const std::string& webrtc_assets_dir) {
(*dictionary_)[kWebRTCAssetsDir] = webrtc_assets_dir;
}
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 45c15e1f3..c99ecf186 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -193,6 +193,12 @@ class CuttlefishConfig {
void set_webrtc_enable_adb_websocket(bool enable);
bool webrtc_enable_adb_websocket() const;
+ void set_enable_vehicle_hal_grpc_server(bool enable_vhal_server);
+ bool enable_vehicle_hal_grpc_server() const;
+
+ void set_vehicle_hal_grpc_server_binary(const std::string& vhal_server_binary);
+ std::string vehicle_hal_grpc_server_binary() const;
+
void set_restart_subprocesses(bool restart_subprocesses);
bool restart_subprocesses() const;
@@ -284,6 +290,8 @@ class CuttlefishConfig {
public:
std::string serial_number() const;
int vnc_server_port() const;
+ // Port number to connect to the vehicle HAL server on the host
+ int vehicle_hal_server_port() const;
int host_port() const;
std::string adb_ip_and_port() const;
std::string adb_device_name() const;
@@ -341,6 +349,7 @@ class CuttlefishConfig {
public:
void set_serial_number(const std::string& serial_number);
void set_vnc_server_port(int vnc_server_port);
+ void set_vehicle_hal_server_port(int vehicle_server_port);
void set_host_port(int host_port);
void set_adb_ip_and_port(const std::string& ip_port);
void set_device_title(const std::string& title);
diff --git a/host_package.mk b/host_package.mk
index 8b9196fec..419e0c544 100644
--- a/host_package.mk
+++ b/host_package.mk
@@ -19,6 +19,7 @@ webrtc_files_path := usr/share/webrtc
cvd_host_executables := \
adb \
adbshell \
+ android.hardware.automotive.vehicle@2.0-virtualization-grpc-server \
launch_cvd \
lpmake \
lpunpack \