Define ivnandroiddevice HAL.

Define in-vehicle network android device HAL.

This HAL is used for providing run-time information about other
connected Android devices in the same vehicle for multi-soc use
cases.

Test: m android.hardware.automotive.ivn-update-api
Bug: 258494092
Change-Id: I0b16e17b04e3470ad8f05d36daac3052f004a53f
This commit is contained in:
Yu Shan
2023-01-17 15:12:52 -08:00
parent 324cdeff9a
commit a891e00adb
14 changed files with 608 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "hardware_interfaces_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["hardware_interfaces_license"],
}
aidl_interface {
name: "android.hardware.automotive.ivn",
vendor_available: true,
srcs: [
"android/hardware/automotive/ivn/*.aidl",
],
frozen: false,
stability: "vintf",
backend: {
cpp: {
enabled: false,
},
java: {
sdk_version: "module_current",
apex_available: [
"//apex_available:platform",
"com.android.car.framework",
],
},
},
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@Backing(type="int") @VintfStability
enum ConnectProtocol {
TCP_IP = 0,
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@JavaDerive(equals=true, toString=true) @VintfStability
parcelable EndpointInfo {
android.hardware.automotive.ivn.ConnectProtocol connectProtocol;
String ipAddress;
int portNumber;
android.hardware.automotive.ivn.HardwareIdentifiers hardwareId;
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@JavaDerive(equals=true, toString=true) @VintfStability
parcelable HardwareIdentifiers {
@nullable String brandName;
@nullable String deviceName;
@nullable String productName;
@nullable String manufacturerName;
@nullable String modelName;
@nullable String serialNumber;
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@VintfStability
interface IIvnAndroidDevice {
int getMyDeviceId();
int[] getOtherDeviceIds();
int getDeviceIdForOccupantZone(int zoneId);
android.hardware.automotive.ivn.OccupantZoneInfo[] getOccupantZonesForDevice(int androidDeviceId);
android.hardware.automotive.ivn.EndpointInfo getMyEndpointInfo();
android.hardware.automotive.ivn.EndpointInfo getEndpointInfoForDevice(int androidDeviceId);
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@Backing(type="int") @VintfStability
enum OccupantType {
DRIVER = 1,
FRONT_PASSENGER = 2,
REAR_PASSENGER = 3,
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.automotive.ivn;
@JavaDerive(equals=true, toString=true) @VintfStability
parcelable OccupantZoneInfo {
int zoneId;
android.hardware.automotive.ivn.OccupantType occupantType;
int seat;
}

View File

@@ -0,0 +1,26 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
/**
* Connect protocol for In-vehicle network Android device.
*/
@VintfStability
@Backing(type="int")
enum ConnectProtocol {
TCP_IP = 0,
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
import android.hardware.automotive.ivn.ConnectProtocol;
import android.hardware.automotive.ivn.HardwareIdentifiers;
/**
* Network endpoint information for an Android instance running on a difference device.
*
* The device is in the same vehicle as this device.
*/
@JavaDerive(equals=true, toString=true)
@VintfStability
parcelable EndpointInfo {
/**
* The connection protocol. Only supports TCP/IP for now.
*/
ConnectProtocol connectProtocol;
/**
* The IP address.
*/
String ipAddress;
/**
* The port number exposed for connecting.
*/
int portNumber;
/**
* Hardware identifiers.
*
* The hardware identifiers for the endpoint as defined in [Attestation Hardware Identifiers]
* {@link
* https://source.android.com/docs/security/features/keystore/attestation#hardware-identifiers}
*/
HardwareIdentifiers hardwareId;
}

View File

@@ -0,0 +1,65 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
/**
* Hardware Identifiers for an Android device.
*
* <p>These identifiers are embedded in the ID attestation certificate and are
* used to restrict what devices this device can connect to. All fields are
* optional but at least one of the fields must be specified.
*/
@JavaDerive(equals=true, toString=true)
@VintfStability
parcelable HardwareIdentifiers {
/**
* Optional brand name, as returned by {@code Build.BRAND} in Android.
*
* If unspecified, we assume the other device has the same brand name as this device.
*/
@nullable String brandName;
/**
* Optional brand name, as returned by {@code Build.DEVICE} in Android.
*
* If unspecified, we assume the other device has the same device name as this device.
*/
@nullable String deviceName;
/**
* Optional model name, as returned by {@code Build.PRODUCT} in Android.
*
* If unspecified, we assume the other device has the same product name as this device.
*/
@nullable String productName;
/**
* Optional manufacturer name, as returned by {@code Build.MANUFACTURER} in Android.
*
* If unspecified, we assume the other device has the same manufacturer name as this device.
*/
@nullable String manufacturerName;
/**
* Optional model name, as returned by {@code Build.MODEL} in Android.
*
* If unspecified, we assume the other device has the same model name as this device.
*/
@nullable String modelName;
/**
* Optional serial number.
*
* If unspecified, we allow the endpoint to have any serial number.
*/
@nullable String serialNumber;
}

View File

@@ -0,0 +1,81 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
import android.hardware.automotive.ivn.EndpointInfo;
import android.hardware.automotive.ivn.OccupantZoneInfo;
/**
* Interface for In-Vehicle Network(IVN) Android devices.
*
* This is used in a multi-zone multi-SoC environment where there are multiple
* SoCs running Android in a vehicle. Each support one or multiple occupant
* zones. E.g., one SoC for front passenger, one SoC for backseat left-zone
* and middle/right zone passengers.
*/
@VintfStability
interface IIvnAndroidDevice {
/**
* Returns the unique ID for this Android device.
*
* <p>This ID has to be unique among all the android devices in the whole vehicle. It is usually
* a hard-coded value, e.g. serial number.
*
* @return an ID representing this device.
*/
int getMyDeviceId();
/**
* Returns a list of unique IDs for other IVN Android devices.
*
* The returned list does not contain the current Android device ID. This list is usually
* pre-configured for this HAL, either hard-coded or read from configuration file.
*
* @return A list of IDs representing connected Android devices.
*/
int[] getOtherDeviceIds();
/**
* Returns the Android device ID for a specified occupant zone.
*
* @pararm zoneID the occupant zone ID returned from {@link android.car.CarOccupantZoneManager}.
* @return an ID representing an Android device.
*/
int getDeviceIdForOccupantZone(int zoneId);
/**
* Returns all the occupant zones supported for a specified IVN Android device.
*
* @param androidDeviceId the android device ID.
* @return A list of supported occupant zone info.
*/
OccupantZoneInfo[] getOccupantZonesForDevice(int androidDeviceId);
/**
* Returns the connection endpoint info for this android device.
*
* @return The endpoint info.
*/
EndpointInfo getMyEndpointInfo();
/**
* Returns the connection endpoint info for the specified IVN Android device.
*
* @return The endpoint info.
*/
EndpointInfo getEndpointInfoForDevice(int androidDeviceId);
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
/**
* Occupant type.
*
* This enum might be extended in the future.
*/
@VintfStability
@Backing(type="int")
enum OccupantType {
/**
* Represents the driver. There can be one or zero driver for the system. Zero driver situation
* can happen if the system is configured to support only passengers.
*/
DRIVER = 1,
/**
* Represents front passengers who sit in front side of car. Most cars will have only
* one passenger of this type but this can be multiple.
*/
FRONT_PASSENGER = 2,
/** Represents passengers in rear seats. There can be multiple passengers of this type. */
REAR_PASSENGER = 3,
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.automotive.ivn;
import android.hardware.automotive.ivn.OccupantType;
/**
* Represents an occupant zone in a car.
*
* <p>Each occupant does not necessarily represent single person but it is for mapping to one
* set of displays. For example, for display located in center rear seat, both left and right
* side passengers may use it but it is abstracted as a single occupant zone.</p>
*/
@JavaDerive(equals=true, toString=true)
@VintfStability
parcelable OccupantZoneInfo {
/**
* This is an unique id to distinguish each occupant zone.
*
* <p>This can be helpful to distinguish different zones when {@link #occupantType} and
* {@link #seat} are the same for multiple occupant / passenger zones.</p>
*
* <p>This id will remain the same for the same zone across configuration changes like
* user switching or display changes</p>
*/
int zoneId;
/** Represents type of passenger */
OccupantType occupantType;
/**
* Represents seat assigned for the occupant. In some system, this can have value of
* {@code VehicleAreaSeat#SEAT_UNKNOWN}.
*
* <p>This might be one of {@code VehicleAreaSeat} or a combination of {@code VehicleAreaSeat}.
*/
int seat;
}

View File

@@ -108,13 +108,20 @@
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<hal format="aidl" optional="true">
<name>android.hardware.automotive.remoteaccess</name>
<interface>
<name>IRemoteAccess</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>android.hardware.automotive.ivn</name>
<interface>
<name>IIvnAndroidDevice</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>android.hardware.biometrics.face</name>
<version>3</version>