mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge changes from topic "isap_hidl2aidl"
* changes: Make Sap Interface Apex Available [ISap hidl2aidl] VTS Tests [ISap hidl2aidl] Compat Support Radio: hidl2aidl for ISap interface
This commit is contained in:
@@ -589,6 +589,16 @@
|
||||
<instance>slot3</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="aidl" optional="true">
|
||||
<name>android.hardware.radio.sap</name>
|
||||
<version>1</version>
|
||||
<interface>
|
||||
<name>ISap</name>
|
||||
<instance>slot1</instance>
|
||||
<instance>slot2</instance>
|
||||
<instance>slot3</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="aidl" optional="true">
|
||||
<name>android.hardware.radio.voice</name>
|
||||
<version>1</version>
|
||||
|
||||
@@ -152,6 +152,28 @@ aidl_interface {
|
||||
|
||||
}
|
||||
|
||||
aidl_interface {
|
||||
name: "android.hardware.radio.sap",
|
||||
vendor_available: true,
|
||||
host_supported: true,
|
||||
srcs: ["android/hardware/radio/sap/*.aidl"],
|
||||
stability: "vintf",
|
||||
backend: {
|
||||
cpp: {
|
||||
enabled: true,
|
||||
},
|
||||
java: {
|
||||
apex_available: [
|
||||
"//apex_available:platform",
|
||||
"com.android.btservices",
|
||||
],
|
||||
sdk_version: "module_current",
|
||||
min_sdk_version: "Tiramisu",
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
aidl_interface {
|
||||
name: "android.hardware.radio.sim",
|
||||
vendor_available: true,
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@VintfStability
|
||||
interface ISap {
|
||||
oneway void apduReq(in int serial, in android.hardware.radio.sap.SapApduType type, in byte[] command);
|
||||
oneway void connectReq(in int serial, in int maxMsgSizeBytes);
|
||||
oneway void disconnectReq(in int serial);
|
||||
oneway void powerReq(in int serial, in boolean powerOn);
|
||||
oneway void resetSimReq(in int serial);
|
||||
oneway void setCallback(in android.hardware.radio.sap.ISapCallback sapCallback);
|
||||
oneway void setTransferProtocolReq(in int serial, in android.hardware.radio.sap.SapTransferProtocol transferProtocol);
|
||||
oneway void transferAtrReq(in int serial);
|
||||
oneway void transferCardReaderStatusReq(in int serial);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@VintfStability
|
||||
interface ISapCallback {
|
||||
oneway void apduResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode, in byte[] apduRsp);
|
||||
oneway void connectResponse(in int serial, in android.hardware.radio.sap.SapConnectRsp sapConnectRsp, in int maxMsgSizeBytes);
|
||||
oneway void disconnectIndication(in int serial, in android.hardware.radio.sap.SapDisconnectType disconnectType);
|
||||
oneway void disconnectResponse(in int serial);
|
||||
oneway void errorResponse(in int serial);
|
||||
oneway void powerResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode);
|
||||
oneway void resetSimResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode);
|
||||
oneway void statusIndication(in int serial, in android.hardware.radio.sap.SapStatus status);
|
||||
oneway void transferAtrResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode, in byte[] atr);
|
||||
oneway void transferCardReaderStatusResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode, in int cardReaderStatus);
|
||||
oneway void transferProtocolResponse(in int serial, in android.hardware.radio.sap.SapResultCode resultCode);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapApduType {
|
||||
APDU = 0,
|
||||
APDU7816 = 1,
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapConnectRsp {
|
||||
SUCCESS = 0,
|
||||
CONNECT_FAILURE = 1,
|
||||
MSG_SIZE_TOO_LARGE = 2,
|
||||
MSG_SIZE_TOO_SMALL = 3,
|
||||
CONNECT_OK_CALL_ONGOING = 4,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapDisconnectType {
|
||||
GRACEFUL = 0,
|
||||
IMMEDIATE = 1,
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapResultCode {
|
||||
SUCCESS = 0,
|
||||
GENERIC_FAILURE = 1,
|
||||
CARD_NOT_ACCESSSIBLE = 2,
|
||||
CARD_ALREADY_POWERED_OFF = 3,
|
||||
CARD_REMOVED = 4,
|
||||
CARD_ALREADY_POWERED_ON = 5,
|
||||
DATA_NOT_AVAILABLE = 6,
|
||||
NOT_SUPPORTED = 7,
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapStatus {
|
||||
UNKNOWN_ERROR = 0,
|
||||
CARD_RESET = 1,
|
||||
CARD_NOT_ACCESSIBLE = 2,
|
||||
CARD_REMOVED = 3,
|
||||
CARD_INSERTED = 4,
|
||||
RECOVERED = 5,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum SapTransferProtocol {
|
||||
T0 = 0,
|
||||
T1 = 1,
|
||||
}
|
||||
92
radio/aidl/android/hardware/radio/sap/ISap.aidl
Normal file
92
radio/aidl/android/hardware/radio/sap/ISap.aidl
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
import android.hardware.radio.sap.ISapCallback;
|
||||
import android.hardware.radio.sap.SapApduType;
|
||||
import android.hardware.radio.sap.SapTransferProtocol;
|
||||
|
||||
@VintfStability
|
||||
oneway interface ISap {
|
||||
/**
|
||||
* TRANSFER_APDU_REQ from SAP 1.1 spec 5.1.6
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
* @param type APDU command type
|
||||
* @param command CommandAPDU/CommandAPDU7816 parameter depending on type
|
||||
*/
|
||||
void apduReq(in int serial, in SapApduType type, in byte[] command);
|
||||
|
||||
/**
|
||||
* CONNECT_REQ from SAP 1.1 spec 5.1.1
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
* @param maxMsgSizeBytes MaxMsgSize to be used for SIM Access Profile connection
|
||||
*/
|
||||
void connectReq(in int serial, in int maxMsgSizeBytes);
|
||||
|
||||
/**
|
||||
* DISCONNECT_REQ from SAP 1.1 spec 5.1.3
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
*/
|
||||
void disconnectReq(in int serial);
|
||||
|
||||
/**
|
||||
* POWER_SIM_OFF_REQ and POWER_SIM_ON_REQ from SAP 1.1 spec 5.1.10 + 5.1.12
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
* @param powerOn true for on, false for off
|
||||
*/
|
||||
void powerReq(in int serial, in boolean powerOn);
|
||||
|
||||
/**
|
||||
* RESET_SIM_REQ from SAP 1.1 spec 5.1.14
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
*/
|
||||
void resetSimReq(in int serial);
|
||||
|
||||
/**
|
||||
* Set callback that has response and unsolicited indication functions
|
||||
*
|
||||
* @param sapCallback Object containing response and unosolicited indication callbacks
|
||||
*/
|
||||
void setCallback(in ISapCallback sapCallback);
|
||||
|
||||
/**
|
||||
* SET_TRANSPORT_PROTOCOL_REQ from SAP 1.1 spec 5.1.20
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
* @param transferProtocol Transport Protocol
|
||||
*/
|
||||
void setTransferProtocolReq(in int serial, in SapTransferProtocol transferProtocol);
|
||||
|
||||
/**
|
||||
* TRANSFER_ATR_REQ from SAP 1.1 spec 5.1.8
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
*/
|
||||
void transferAtrReq(in int serial);
|
||||
|
||||
/**
|
||||
* TRANSFER_CARD_READER_STATUS_REQ from SAP 1.1 spec 5.1.17
|
||||
*
|
||||
* @param serial Id to match req-resp. Resp must include same serial.
|
||||
*/
|
||||
void transferCardReaderStatusReq(in int serial);
|
||||
}
|
||||
152
radio/aidl/android/hardware/radio/sap/ISapCallback.aidl
Normal file
152
radio/aidl/android/hardware/radio/sap/ISapCallback.aidl
Normal file
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
import android.hardware.radio.sap.SapConnectRsp;
|
||||
import android.hardware.radio.sap.SapDisconnectType;
|
||||
import android.hardware.radio.sap.SapResultCode;
|
||||
import android.hardware.radio.sap.SapStatus;
|
||||
|
||||
@VintfStability
|
||||
oneway interface ISapCallback {
|
||||
/**
|
||||
* TRANSFER_APDU_RESP from SAP 1.1 spec 5.1.7
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS,
|
||||
* SapResultCode:GENERIC_FAILURE,
|
||||
* SapResultCode:CARD_NOT_ACCESSSIBLE,
|
||||
* SapResultCode:CARD_ALREADY_POWERED_OFF,
|
||||
* SapResultCode:CARD_REMOVED
|
||||
* @param apduRsp APDU Response. Valid only if command was processed correctly and no error
|
||||
* occurred.
|
||||
*/
|
||||
void apduResponse(in int serial, in SapResultCode resultCode, in byte[] apduRsp);
|
||||
|
||||
/**
|
||||
* CONNECT_RESP from SAP 1.1 spec 5.1.2
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param sapConnectRsp Connection Status
|
||||
* @param maxMsgSizeBytes MaxMsgSize supported by server if request cannot be fulfilled.
|
||||
* Valid only if connectResponse is SapConnectResponse:MSG_SIZE_TOO_LARGE.
|
||||
*/
|
||||
void connectResponse(in int serial, in SapConnectRsp sapConnectRsp, in int maxMsgSizeBytes);
|
||||
|
||||
/**
|
||||
* DISCONNECT_IND from SAP 1.1 spec 5.1.5
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param disconnectType Disconnect Type to indicate if shutdown is graceful or immediate
|
||||
*/
|
||||
void disconnectIndication(in int serial, in SapDisconnectType disconnectType);
|
||||
|
||||
/**
|
||||
* DISCONNECT_RESP from SAP 1.1 spec 5.1.4
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
*/
|
||||
void disconnectResponse(in int serial);
|
||||
|
||||
/**
|
||||
* ERROR_RESP from SAP 1.1 spec 5.1.19
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
*/
|
||||
void errorResponse(in int serial);
|
||||
|
||||
/**
|
||||
* POWER_SIM_OFF_RESP and POWER_SIM_ON_RESP from SAP 1.1 spec 5.1.11 + 5.1.13
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS,
|
||||
* SapResultCode:GENERIC_FAILURE,
|
||||
* SapResultCode:CARD_NOT_ACCESSSIBLE, (possible only for power on req)
|
||||
* SapResultCode:CARD_ALREADY_POWERED_OFF, (possible only for power off req)
|
||||
* SapResultCode:CARD_REMOVED,
|
||||
* SapResultCode:CARD_ALREADY_POWERED_ON (possible only for power on req)
|
||||
*/
|
||||
void powerResponse(in int serial, in SapResultCode resultCode);
|
||||
|
||||
/**
|
||||
* RESET_SIM_RESP from SAP 1.1 spec 5.1.15
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS,
|
||||
* SapResultCode:GENERIC_FAILURE,
|
||||
* SapResultCode:CARD_NOT_ACCESSSIBLE,
|
||||
* SapResultCode:CARD_ALREADY_POWERED_OFF,
|
||||
* SapResultCode:CARD_REMOVED
|
||||
*/
|
||||
void resetSimResponse(in int serial, in SapResultCode resultCode);
|
||||
|
||||
/**
|
||||
* STATUS_IND from SAP 1.1 spec 5.1.16
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param status Parameter to indicate reason for the status change.
|
||||
*/
|
||||
void statusIndication(in int serial, in SapStatus status);
|
||||
|
||||
/**
|
||||
* TRANSFER_ATR_RESP from SAP 1.1 spec 5.1.9
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS,
|
||||
* SapResultCode:GENERIC_FAILURE,
|
||||
* SapResultCode:CARD_ALREADY_POWERED_OFF,
|
||||
* SapResultCode:CARD_REMOVED,
|
||||
* SapResultCode:DATA_NOT_AVAILABLE
|
||||
* @param atr Answer to Reset from the subscription module. Included only if no error occurred,
|
||||
* otherwise empty.
|
||||
*/
|
||||
void transferAtrResponse(in int serial, in SapResultCode resultCode, in byte[] atr);
|
||||
|
||||
/**
|
||||
* TRANSFER_CARD_READER_STATUS_REQ from SAP 1.1 spec 5.1.18
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS,
|
||||
* SapResultCode:GENERIC_FAILURE
|
||||
* SapResultCode:DATA_NOT_AVAILABLE
|
||||
* @param cardReaderStatus Card Reader Status coded as described in 3GPP TS 11.14 Section 12.33
|
||||
* and TS 31.111 Section 8.33
|
||||
*/
|
||||
void transferCardReaderStatusResponse(
|
||||
in int serial, in SapResultCode resultCode, in int cardReaderStatus);
|
||||
|
||||
/**
|
||||
* SET_TRANSPORT_PROTOCOL_RESP from SAP 1.1 spec 5.1.21
|
||||
*
|
||||
* @param serial Id to match req-resp. Value must match the one in req.
|
||||
* @param resultCode ResultCode to indicate if command was processed correctly
|
||||
* Possible values:
|
||||
* SapResultCode:SUCCESS
|
||||
* SapResultCode:NOT_SUPPORTED
|
||||
*/
|
||||
void transferProtocolResponse(in int serial, in SapResultCode resultCode);
|
||||
}
|
||||
24
radio/aidl/android/hardware/radio/sap/SapApduType.aidl
Normal file
24
radio/aidl/android/hardware/radio/sap/SapApduType.aidl
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapApduType {
|
||||
APDU,
|
||||
APDU7816,
|
||||
}
|
||||
27
radio/aidl/android/hardware/radio/sap/SapConnectRsp.aidl
Normal file
27
radio/aidl/android/hardware/radio/sap/SapConnectRsp.aidl
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapConnectRsp {
|
||||
SUCCESS,
|
||||
CONNECT_FAILURE,
|
||||
MSG_SIZE_TOO_LARGE,
|
||||
MSG_SIZE_TOO_SMALL,
|
||||
CONNECT_OK_CALL_ONGOING,
|
||||
}
|
||||
24
radio/aidl/android/hardware/radio/sap/SapDisconnectType.aidl
Normal file
24
radio/aidl/android/hardware/radio/sap/SapDisconnectType.aidl
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapDisconnectType {
|
||||
GRACEFUL,
|
||||
IMMEDIATE,
|
||||
}
|
||||
30
radio/aidl/android/hardware/radio/sap/SapResultCode.aidl
Normal file
30
radio/aidl/android/hardware/radio/sap/SapResultCode.aidl
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapResultCode {
|
||||
SUCCESS,
|
||||
GENERIC_FAILURE,
|
||||
CARD_NOT_ACCESSSIBLE,
|
||||
CARD_ALREADY_POWERED_OFF,
|
||||
CARD_REMOVED,
|
||||
CARD_ALREADY_POWERED_ON,
|
||||
DATA_NOT_AVAILABLE,
|
||||
NOT_SUPPORTED,
|
||||
}
|
||||
28
radio/aidl/android/hardware/radio/sap/SapStatus.aidl
Normal file
28
radio/aidl/android/hardware/radio/sap/SapStatus.aidl
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapStatus {
|
||||
UNKNOWN_ERROR,
|
||||
CARD_RESET,
|
||||
CARD_NOT_ACCESSIBLE,
|
||||
CARD_REMOVED,
|
||||
CARD_INSERTED,
|
||||
RECOVERED,
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.radio.sap;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum SapTransferProtocol {
|
||||
T0,
|
||||
T1,
|
||||
}
|
||||
@@ -40,6 +40,7 @@ cc_library {
|
||||
"android.hardware.radio.messaging-V1-ndk",
|
||||
"android.hardware.radio.modem-V1-ndk",
|
||||
"android.hardware.radio.network-V1-ndk",
|
||||
"android.hardware.radio.sap-V1-ndk",
|
||||
"android.hardware.radio.sim-V1-ndk",
|
||||
"android.hardware.radio.voice-V1-ndk",
|
||||
"android.hardware.radio@1.0",
|
||||
@@ -82,6 +83,9 @@ cc_library {
|
||||
"network/RadioResponse-network.cpp",
|
||||
"network/structs.cpp",
|
||||
"network/utils.cpp",
|
||||
"sap/Sap.cpp",
|
||||
"sap/SapCallback.cpp",
|
||||
"sap/structs.cpp",
|
||||
"sim/RadioIndication-sim.cpp",
|
||||
"sim/RadioResponse-sim.cpp",
|
||||
"sim/RadioSim.cpp",
|
||||
|
||||
@@ -48,6 +48,10 @@ int32_t toAidl(uint32_t v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
uint8_t toHidl(int8_t v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
aidl::RadioIndicationType toAidl(V1_0::RadioIndicationType type) {
|
||||
return aidl::RadioIndicationType(type);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ hidl_string toHidl(const std::string& str);
|
||||
uint8_t toAidl(int8_t v);
|
||||
int8_t toAidl(uint8_t v);
|
||||
int32_t toAidl(uint32_t v);
|
||||
uint8_t toHidl(int8_t v);
|
||||
|
||||
aidl::android::hardware::radio::RadioIndicationType toAidl(V1_0::RadioIndicationType type);
|
||||
aidl::android::hardware::radio::RadioResponseType toAidl(V1_0::RadioResponseType type);
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "RadioCompatBase.h"
|
||||
#include "SapCallback.h"
|
||||
|
||||
#include <aidl/android/hardware/radio/sap/BnSap.h>
|
||||
#include <android/hardware/radio/1.0/ISap.h>
|
||||
#include <android/hardware/radio/1.0/ISapCallback.h>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
/**
|
||||
* HAL translator from HIDL ISap to AIDL ISap
|
||||
*
|
||||
* This class wraps existing HIDL implementation (either a binder stub or real
|
||||
* class implementing the HAL) and implements AIDL HAL. It's up to the caller to
|
||||
* fetch source implementation and publish resulting HAL instance.
|
||||
*/
|
||||
class Sap : public aidl::android::hardware::radio::sap::BnSap {
|
||||
const sp<radio::V1_0::ISap> mHal;
|
||||
|
||||
const sp<SapCallback> mSapCallback;
|
||||
|
||||
::ndk::ScopedAStatus apduReq(int32_t serial,
|
||||
aidl::android::hardware::radio::sap::SapApduType type,
|
||||
const std::vector<uint8_t>& command) override;
|
||||
::ndk::ScopedAStatus connectReq(int32_t serial, int32_t maxMsgSize) override;
|
||||
::ndk::ScopedAStatus disconnectReq(int32_t serial) override;
|
||||
::ndk::ScopedAStatus powerReq(int32_t serial, bool state) override;
|
||||
::ndk::ScopedAStatus resetSimReq(int32_t serial) override;
|
||||
::ndk::ScopedAStatus setCallback(
|
||||
const std::shared_ptr<::aidl::android::hardware::radio::sap::ISapCallback>& sapCallback)
|
||||
override;
|
||||
::ndk::ScopedAStatus setTransferProtocolReq(
|
||||
int32_t serial,
|
||||
aidl::android::hardware::radio::sap::SapTransferProtocol transferProtocol) override;
|
||||
::ndk::ScopedAStatus transferAtrReq(int32_t serial) override;
|
||||
::ndk::ScopedAStatus transferCardReaderStatusReq(int32_t serial) override;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructs AIDL ISap instance wrapping existing HIDL ISap instance.
|
||||
*
|
||||
* \param hidlHal existing HIDL ISap HAL instance
|
||||
*/
|
||||
Sap(sp<V1_0::ISap> hidlHal);
|
||||
};
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "GuaranteedCallback.h"
|
||||
|
||||
#include <aidl/android/hardware/radio/sap/ISapCallback.h>
|
||||
#include <android/hardware/radio/1.0/ISapCallback.h>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
class SapCallback : public V1_0::ISapCallback {
|
||||
GuaranteedCallback<aidl::android::hardware::radio::sap::ISapCallback,
|
||||
aidl::android::hardware::radio::sap::ISapCallbackDefault>
|
||||
mCallback;
|
||||
|
||||
Return<void> apduResponse(int32_t serial, V1_0::SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& apduRsp) override;
|
||||
Return<void> connectResponse(int32_t serial, V1_0::SapConnectRsp sapConnectRsp,
|
||||
int32_t maxMsgSize) override;
|
||||
Return<void> disconnectIndication(int32_t serial,
|
||||
V1_0::SapDisconnectType disconnectType) override;
|
||||
Return<void> disconnectResponse(int32_t serial) override;
|
||||
Return<void> errorResponse(int32_t serial) override;
|
||||
Return<void> powerResponse(int32_t serial, V1_0::SapResultCode resultCode) override;
|
||||
Return<void> resetSimResponse(int32_t serial, V1_0::SapResultCode resultCode) override;
|
||||
Return<void> statusIndication(int32_t serial, V1_0::SapStatus status) override;
|
||||
Return<void> transferAtrResponse(int32_t serial, V1_0::SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& atr) override;
|
||||
Return<void> transferCardReaderStatusResponse(int32_t serial, V1_0::SapResultCode resultCode,
|
||||
int32_t cardReaderStatus) override;
|
||||
Return<void> transferProtocolResponse(int32_t serial, V1_0::SapResultCode resultCode) override;
|
||||
|
||||
public:
|
||||
void setResponseFunction(
|
||||
const std::shared_ptr<aidl::android::hardware::radio::sap::ISapCallback>& callback);
|
||||
|
||||
std::shared_ptr<aidl::android::hardware::radio::sap::ISapCallback> respond();
|
||||
};
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
94
radio/aidl/compat/libradiocompat/sap/Sap.cpp
Normal file
94
radio/aidl/compat/libradiocompat/sap/Sap.cpp
Normal file
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
|
||||
#include <libradiocompat/Sap.h>
|
||||
|
||||
#include "commonStructs.h"
|
||||
#include "debug.h"
|
||||
#include "structs.h"
|
||||
|
||||
#include "collections.h"
|
||||
|
||||
#define RADIO_MODULE "Sap"
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
using ::ndk::ScopedAStatus;
|
||||
namespace aidl = ::aidl::android::hardware::radio::sap;
|
||||
constexpr auto ok = &ScopedAStatus::ok;
|
||||
|
||||
Sap::Sap(sp<V1_0::ISap> hidlHal) : mHal(hidlHal), mSapCallback(sp<SapCallback>::make()) {}
|
||||
|
||||
ScopedAStatus Sap::apduReq(int32_t serial, aidl::SapApduType type,
|
||||
const std::vector<uint8_t>& command) {
|
||||
LOG_CALL << serial;
|
||||
mHal->apduReq(serial, toHidl(type), toHidl(command));
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::connectReq(int32_t serial, int32_t maxMsgSize) {
|
||||
LOG_CALL << serial;
|
||||
mHal->connectReq(serial, maxMsgSize);
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::disconnectReq(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
mHal->disconnectReq(serial);
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::powerReq(int32_t serial, bool state) {
|
||||
LOG_CALL << serial;
|
||||
mHal->powerReq(serial, state);
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::resetSimReq(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
mHal->resetSimReq(serial);
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::setCallback(
|
||||
const std::shared_ptr<::aidl::android::hardware::radio::sap::ISapCallback>& sapCallback) {
|
||||
LOG_CALL << sapCallback;
|
||||
|
||||
CHECK(sapCallback);
|
||||
|
||||
mSapCallback->setResponseFunction(sapCallback);
|
||||
mHal->setCallback(mSapCallback).assertOk();
|
||||
return ok();
|
||||
}
|
||||
ScopedAStatus Sap::setTransferProtocolReq(int32_t serial,
|
||||
aidl::SapTransferProtocol transferProtocol) {
|
||||
LOG_CALL << serial;
|
||||
mHal->setTransferProtocolReq(serial, toHidl(transferProtocol));
|
||||
return ok();
|
||||
}
|
||||
|
||||
ScopedAStatus Sap::transferAtrReq(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
mHal->transferAtrReq(serial);
|
||||
return ok();
|
||||
}
|
||||
ScopedAStatus Sap::transferCardReaderStatusReq(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
mHal->transferCardReaderStatusReq(serial);
|
||||
return ok();
|
||||
}
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
111
radio/aidl/compat/libradiocompat/sap/SapCallback.cpp
Normal file
111
radio/aidl/compat/libradiocompat/sap/SapCallback.cpp
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
|
||||
#include <libradiocompat/SapCallback.h>
|
||||
|
||||
#include "commonStructs.h"
|
||||
#include "debug.h"
|
||||
#include "structs.h"
|
||||
|
||||
#include "collections.h"
|
||||
|
||||
#define RADIO_MODULE "SapCallback"
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
namespace aidl = ::aidl::android::hardware::radio::sap;
|
||||
|
||||
void SapCallback::setResponseFunction(const std::shared_ptr<aidl::ISapCallback>& callback) {
|
||||
mCallback = callback;
|
||||
}
|
||||
|
||||
std::shared_ptr<aidl::ISapCallback> SapCallback::respond() {
|
||||
return mCallback.get();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::apduResponse(int32_t serial, V1_0::SapResultCode resultCode,
|
||||
const hidl_vec<uint8_t>& apduRsp) {
|
||||
LOG_CALL << serial;
|
||||
respond()->apduResponse(serial, toAidl(resultCode), apduRsp);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::connectResponse(int32_t serial, V1_0::SapConnectRsp sapConnectRsp,
|
||||
int32_t maxMsgSize) {
|
||||
LOG_CALL << serial;
|
||||
respond()->connectResponse(serial, toAidl(sapConnectRsp), maxMsgSize);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::disconnectIndication(int32_t serial,
|
||||
V1_0::SapDisconnectType disconnectType) {
|
||||
LOG_CALL << serial;
|
||||
respond()->disconnectIndication(serial, toAidl(disconnectType));
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::disconnectResponse(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
respond()->disconnectResponse(serial);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::errorResponse(int32_t serial) {
|
||||
LOG_CALL << serial;
|
||||
respond()->errorResponse(serial);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::powerResponse(int32_t serial, V1_0::SapResultCode resultCode) {
|
||||
LOG_CALL << serial;
|
||||
respond()->powerResponse(serial, toAidl(resultCode));
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::resetSimResponse(int32_t serial, V1_0::SapResultCode resultCode) {
|
||||
LOG_CALL << serial;
|
||||
respond()->resetSimResponse(serial, toAidl(resultCode));
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::statusIndication(int32_t serial, V1_0::SapStatus status) {
|
||||
LOG_CALL << serial;
|
||||
respond()->statusIndication(serial, toAidl(status));
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferAtrResponse(int32_t serial, V1_0::SapResultCode resultCode,
|
||||
const hidl_vec<uint8_t>& atr) {
|
||||
LOG_CALL << serial;
|
||||
respond()->transferAtrResponse(serial, toAidl(resultCode), atr);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferCardReaderStatusResponse(int32_t serial,
|
||||
V1_0::SapResultCode resultCode,
|
||||
int32_t cardReaderStatus) {
|
||||
LOG_CALL << serial;
|
||||
respond()->transferCardReaderStatusResponse(serial, toAidl(resultCode), cardReaderStatus);
|
||||
return {};
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferProtocolResponse(int32_t serial, V1_0::SapResultCode resultCode) {
|
||||
LOG_CALL << serial;
|
||||
respond()->transferProtocolResponse(serial, toAidl(resultCode));
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
47
radio/aidl/compat/libradiocompat/sap/structs.cpp
Normal file
47
radio/aidl/compat/libradiocompat/sap/structs.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
|
||||
#include "structs.h"
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
namespace aidl = ::aidl::android::hardware::radio::sap;
|
||||
|
||||
V1_0::SapApduType toHidl(const aidl::SapApduType sapApduType) {
|
||||
return V1_0::SapApduType(sapApduType);
|
||||
}
|
||||
|
||||
V1_0::SapTransferProtocol toHidl(const aidl::SapTransferProtocol sapTransferProtocol) {
|
||||
return V1_0::SapTransferProtocol(sapTransferProtocol);
|
||||
}
|
||||
|
||||
aidl::SapResultCode toAidl(const V1_0::SapResultCode sapResultCode) {
|
||||
return aidl::SapResultCode(sapResultCode);
|
||||
}
|
||||
|
||||
aidl::SapConnectRsp toAidl(const V1_0::SapConnectRsp sapConnectRsp) {
|
||||
return aidl::SapConnectRsp(sapConnectRsp);
|
||||
}
|
||||
|
||||
aidl::SapDisconnectType toAidl(const V1_0::SapDisconnectType sapDisconnectType) {
|
||||
return aidl::SapDisconnectType(sapDisconnectType);
|
||||
}
|
||||
|
||||
aidl::SapStatus toAidl(const V1_0::SapStatus sapStatus) {
|
||||
return aidl::SapStatus(sapStatus);
|
||||
}
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
33
radio/aidl/compat/libradiocompat/sap/structs.h
Normal file
33
radio/aidl/compat/libradiocompat/sap/structs.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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, eithe r express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <aidl/android/hardware/radio/sap/ISap.h>
|
||||
#include <android/hardware/radio/1.0/types.h>
|
||||
|
||||
namespace android::hardware::radio::compat {
|
||||
|
||||
V1_0::SapApduType toHidl(aidl::android::hardware::radio::sap::SapApduType sapAdpuType);
|
||||
V1_0::SapTransferProtocol toHidl(
|
||||
aidl::android::hardware::radio::sap::SapTransferProtocol sapTransferProtocol);
|
||||
|
||||
aidl::android::hardware::radio::sap::SapResultCode toAidl(V1_0::SapResultCode sapResultCode);
|
||||
aidl::android::hardware::radio::sap::SapConnectRsp toAidl(V1_0::SapConnectRsp sapConnectRsp);
|
||||
aidl::android::hardware::radio::sap::SapDisconnectType toAidl(
|
||||
V1_0::SapDisconnectType sapDisconnectType);
|
||||
aidl::android::hardware::radio::sap::SapStatus toAidl(V1_0::SapStatus sapStatus);
|
||||
|
||||
} // namespace android::hardware::radio::compat
|
||||
@@ -43,6 +43,7 @@ cc_binary {
|
||||
"android.hardware.radio.messaging-V1-ndk",
|
||||
"android.hardware.radio.modem-V1-ndk",
|
||||
"android.hardware.radio.network-V1-ndk",
|
||||
"android.hardware.radio.sap-V1-ndk",
|
||||
"android.hardware.radio.sim-V1-ndk",
|
||||
"android.hardware.radio.voice-V1-ndk",
|
||||
"android.hardware.radio@1.0",
|
||||
|
||||
@@ -50,6 +50,8 @@ cc_test {
|
||||
"radio_network_indication.cpp",
|
||||
"radio_network_response.cpp",
|
||||
"radio_network_test.cpp",
|
||||
"radio_sap_callback.cpp",
|
||||
"radio_sap_test.cpp",
|
||||
"radio_sim_indication.cpp",
|
||||
"radio_sim_response.cpp",
|
||||
"radio_sim_test.cpp",
|
||||
@@ -69,6 +71,7 @@ cc_test {
|
||||
"android.hardware.radio.messaging-V1-ndk",
|
||||
"android.hardware.radio.modem-V1-ndk",
|
||||
"android.hardware.radio.network-V1-ndk",
|
||||
"android.hardware.radio.sap-V1-ndk",
|
||||
"android.hardware.radio.sim-V1-ndk",
|
||||
"android.hardware.radio.voice-V1-ndk",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "radio_messaging_utils.h"
|
||||
#include "radio_modem_utils.h"
|
||||
#include "radio_network_utils.h"
|
||||
#include "radio_sap_utils.h"
|
||||
#include "radio_sim_utils.h"
|
||||
#include "radio_voice_utils.h"
|
||||
|
||||
@@ -54,6 +55,11 @@ INSTANTIATE_TEST_SUITE_P(
|
||||
testing::ValuesIn(android::getAidlHalInstanceNames(IRadioNetwork::descriptor)),
|
||||
android::PrintInstanceNameToString);
|
||||
|
||||
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(RadioSapTest);
|
||||
INSTANTIATE_TEST_SUITE_P(PerInstance, SapTest,
|
||||
testing::ValuesIn(android::getAidlHalInstanceNames(ISap::descriptor)),
|
||||
android::PrintInstanceNameToString);
|
||||
|
||||
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(RadioSimTest);
|
||||
INSTANTIATE_TEST_SUITE_P(PerInstance, RadioSimTest,
|
||||
testing::ValuesIn(android::getAidlHalInstanceNames(IRadioSim::descriptor)),
|
||||
|
||||
95
radio/aidl/vts/radio_sap_callback.cpp
Normal file
95
radio/aidl/vts/radio_sap_callback.cpp
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
#include "radio_sap_utils.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
|
||||
SapCallback::SapCallback(SapTest& parent) : parent_sap(parent) {}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::apduResponse(int32_t serialNumber, SapResultCode resultCode,
|
||||
const std::vector<uint8_t>& /*apduRsp*/) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
::ndk::ScopedAStatus SapCallback::connectResponse(int32_t serialNumber,
|
||||
SapConnectRsp /*sapConnectRsp*/,
|
||||
int32_t /*maxMsgSize*/) {
|
||||
sapResponseSerial = serialNumber;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::disconnectIndication(int32_t /*serialNumber*/,
|
||||
SapDisconnectType /*sapDisconnectType*/) {
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::disconnectResponse(int32_t serialNumber) {
|
||||
sapResponseSerial = serialNumber;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::errorResponse(int32_t /*serialNumber*/) {
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::powerResponse(int32_t serialNumber, SapResultCode resultCode) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::resetSimResponse(int32_t serialNumber, SapResultCode resultCode) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::statusIndication(int32_t /*serialNumber*/,
|
||||
SapStatus /*sapStatus*/) {
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::transferAtrResponse(int32_t serialNumber,
|
||||
SapResultCode resultCode,
|
||||
const std::vector<uint8_t>& /*atr*/) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::transferCardReaderStatusResponse(int32_t serialNumber,
|
||||
SapResultCode resultCode,
|
||||
int32_t /*cardReaderStatus*/) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus SapCallback::transferProtocolResponse(int32_t serialNumber,
|
||||
SapResultCode resultCode) {
|
||||
sapResponseSerial = serialNumber;
|
||||
sapResultCode = resultCode;
|
||||
parent_sap.notify(serialNumber);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
233
radio/aidl/vts/radio_sap_test.cpp
Normal file
233
radio/aidl/vts/radio_sap_test.cpp
Normal file
@@ -0,0 +1,233 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
#include <android-base/logging.h>
|
||||
#include <android/binder_manager.h>
|
||||
|
||||
#include "radio_sap_utils.h"
|
||||
|
||||
#define ASSERT_OK(ret) ASSERT_TRUE((ret).isOk())
|
||||
#define TIMEOUT_PERIOD 40
|
||||
|
||||
void SapTest::SetUp() {
|
||||
std::string serviceName = GetParam();
|
||||
if (!isServiceValidForDeviceConfiguration(serviceName)) {
|
||||
LOG(DEBUG) << "Skipped the test due to device configuration.";
|
||||
GTEST_SKIP();
|
||||
}
|
||||
sap = ISap::fromBinder(ndk::SpAIBinder(AServiceManager_waitForService(serviceName.c_str())));
|
||||
ASSERT_NE(sap.get(), nullptr);
|
||||
|
||||
sapCb = ndk::SharedRefBase::make<SapCallback>(*this);
|
||||
ASSERT_NE(sapCb.get(), nullptr);
|
||||
|
||||
count = 0;
|
||||
|
||||
ndk::ScopedAStatus res = sap->setCallback(sapCb);
|
||||
ASSERT_OK(res) << res;
|
||||
}
|
||||
|
||||
void SapTest::TearDown() {}
|
||||
|
||||
::testing::AssertionResult SapTest::CheckAnyOfErrors(SapResultCode err,
|
||||
std::vector<SapResultCode> errors) {
|
||||
for (size_t i = 0; i < errors.size(); i++) {
|
||||
if (err == errors[i]) {
|
||||
return testing::AssertionSuccess();
|
||||
}
|
||||
}
|
||||
return testing::AssertionFailure() << "SapError:" + toString(err) + " is returned";
|
||||
}
|
||||
|
||||
void SapTest::notify(int receivedSerial) {
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
count++;
|
||||
if (serial == receivedSerial) {
|
||||
cv.notify_one();
|
||||
}
|
||||
}
|
||||
|
||||
std::cv_status SapTest::wait() {
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
|
||||
std::cv_status status = std::cv_status::no_timeout;
|
||||
auto now = std::chrono::system_clock::now();
|
||||
while (count == 0) {
|
||||
status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
|
||||
if (status == std::cv_status::timeout) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
count--;
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.connectReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, connectReq) {
|
||||
LOG(DEBUG) << "connectReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
int32_t maxMsgSize = 100;
|
||||
|
||||
ndk::ScopedAStatus res = sap->connectReq(serial, maxMsgSize);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
// Modem side need time for connect to finish. Adding a waiting time to prevent
|
||||
// disconnect being requested right after connect request.
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.disconnectReq() for the response returned
|
||||
*/
|
||||
TEST_P(SapTest, disconnectReq) {
|
||||
LOG(DEBUG) << "disconnectReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
|
||||
ndk::ScopedAStatus res = sap->disconnectReq(serial);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
LOG(DEBUG) << "disconnectReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.apduReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, apduReq) {
|
||||
LOG(DEBUG) << "apduReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
SapApduType sapApduType = SapApduType::APDU;
|
||||
std::vector<uint8_t> command = {};
|
||||
|
||||
ndk::ScopedAStatus res = sap->apduReq(serial, sapApduType, command);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(CheckAnyOfErrors(
|
||||
sapCb->sapResultCode,
|
||||
{SapResultCode::GENERIC_FAILURE, SapResultCode::CARD_ALREADY_POWERED_OFF,
|
||||
SapResultCode::CARD_NOT_ACCESSSIBLE, SapResultCode::CARD_REMOVED,
|
||||
SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "apduReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.transferAtrReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, transferAtrReq) {
|
||||
LOG(DEBUG) << "transferAtrReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
|
||||
ndk::ScopedAStatus res = sap->transferAtrReq(serial);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(CheckAnyOfErrors(sapCb->sapResultCode,
|
||||
{SapResultCode::GENERIC_FAILURE, SapResultCode::DATA_NOT_AVAILABLE,
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF,
|
||||
SapResultCode::CARD_REMOVED, SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "transferAtrReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.powerReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, powerReq) {
|
||||
LOG(DEBUG) << "powerReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
bool state = true;
|
||||
|
||||
ndk::ScopedAStatus res = sap->powerReq(serial, state);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(
|
||||
CheckAnyOfErrors(sapCb->sapResultCode,
|
||||
{SapResultCode::GENERIC_FAILURE, SapResultCode::CARD_NOT_ACCESSSIBLE,
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF, SapResultCode::CARD_REMOVED,
|
||||
SapResultCode::CARD_ALREADY_POWERED_ON, SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "powerReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.resetSimReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, resetSimReq) {
|
||||
LOG(DEBUG) << "resetSimReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
|
||||
ndk::ScopedAStatus res = sap->resetSimReq(serial);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(
|
||||
CheckAnyOfErrors(sapCb->sapResultCode,
|
||||
{SapResultCode::GENERIC_FAILURE, SapResultCode::CARD_NOT_ACCESSSIBLE,
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF, SapResultCode::CARD_REMOVED,
|
||||
SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "resetSimReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.transferCardReaderStatusReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, transferCardReaderStatusReq) {
|
||||
LOG(DEBUG) << "transferCardReaderStatusReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
|
||||
ndk::ScopedAStatus res = sap->transferCardReaderStatusReq(serial);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(CheckAnyOfErrors(sapCb->sapResultCode,
|
||||
{SapResultCode::GENERIC_FAILURE, SapResultCode::DATA_NOT_AVAILABLE,
|
||||
SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "transferCardReaderStatusReq finished";
|
||||
}
|
||||
|
||||
/*
|
||||
* Test ISap.setTransferProtocolReq() for the response returned.
|
||||
*/
|
||||
TEST_P(SapTest, setTransferProtocolReq) {
|
||||
LOG(DEBUG) << "setTransferProtocolReq";
|
||||
serial = GetRandomSerialNumber();
|
||||
SapTransferProtocol sapTransferProtocol = SapTransferProtocol::T0;
|
||||
|
||||
ndk::ScopedAStatus res = sap->setTransferProtocolReq(serial, sapTransferProtocol);
|
||||
ASSERT_OK(res) << res;
|
||||
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseSerial, serial);
|
||||
|
||||
ASSERT_TRUE(CheckAnyOfErrors(sapCb->sapResultCode,
|
||||
{SapResultCode::NOT_SUPPORTED, SapResultCode::SUCCESS}));
|
||||
LOG(DEBUG) << "setTransferProtocolReq finished";
|
||||
}
|
||||
99
radio/aidl/vts/radio_sap_utils.h
Normal file
99
radio/aidl/vts/radio_sap_utils.h
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <aidl/Gtest.h>
|
||||
#include <aidl/android/hardware/radio/sap/BnSapCallback.h>
|
||||
#include <aidl/android/hardware/radio/sap/ISap.h>
|
||||
|
||||
#include "radio_aidl_hal_utils.h"
|
||||
|
||||
using namespace aidl::android::hardware::radio::sap;
|
||||
|
||||
class SapTest;
|
||||
|
||||
/* Callback class for radio sap response */
|
||||
class SapCallback : public BnSapCallback {
|
||||
protected:
|
||||
SapTest& parent_sap;
|
||||
|
||||
public:
|
||||
SapCallback(SapTest& parent_config);
|
||||
virtual ~SapCallback() = default;
|
||||
|
||||
int32_t sapResponseSerial;
|
||||
SapResultCode sapResultCode;
|
||||
|
||||
virtual ::ndk::ScopedAStatus apduResponse(int32_t serial, SapResultCode resultCode,
|
||||
const std::vector<uint8_t>& adpuRsp) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus connectResponse(int32_t serial, SapConnectRsp sapConnectRsp,
|
||||
int32_t maxMsgSize) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus disconnectIndication(int32_t serial,
|
||||
SapDisconnectType sapDisconnectType) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus disconnectResponse(int32_t serial) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus errorResponse(int32_t serial) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus powerResponse(int32_t serial, SapResultCode resultCode) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus resetSimResponse(int32_t serial,
|
||||
SapResultCode resultCode) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus statusIndication(int32_t serial, SapStatus sapStatus) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus transferAtrResponse(int32_t serial, SapResultCode resultCode,
|
||||
const std::vector<uint8_t>& atr) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus transferCardReaderStatusResponse(
|
||||
int32_t serial, SapResultCode resultCode, int32_t cardReaderStatus) override;
|
||||
|
||||
virtual ::ndk::ScopedAStatus transferProtocolResponse(int32_t serial,
|
||||
SapResultCode resultCode) override;
|
||||
};
|
||||
|
||||
// The main test class for AIDL SAP.
|
||||
class SapTest : public ::testing::TestWithParam<std::string> {
|
||||
private:
|
||||
std::mutex mtx;
|
||||
std::condition_variable cv;
|
||||
int count;
|
||||
|
||||
public:
|
||||
virtual void SetUp() override;
|
||||
|
||||
virtual void TearDown() override;
|
||||
|
||||
::testing::AssertionResult CheckAnyOfErrors(SapResultCode err,
|
||||
std::vector<SapResultCode> errors);
|
||||
|
||||
/* Used as a mechanism to inform the test about data/event callback */
|
||||
void notify(int receivedSerial);
|
||||
|
||||
/* Test code calls this function to wait for response */
|
||||
std::cv_status wait();
|
||||
|
||||
/* Sap service */
|
||||
std::shared_ptr<ISap> sap;
|
||||
|
||||
/* Sap Callback object */
|
||||
std::shared_ptr<SapCallback> sapCb;
|
||||
|
||||
/* Serial for sap request */
|
||||
int32_t serial;
|
||||
};
|
||||
Reference in New Issue
Block a user