Merge "Move utility classes in a separate static target"
diff --git a/audio/2.0/config/audio_policy_configuration.xsd b/audio/2.0/config/audio_policy_configuration.xsd
new file mode 100644
index 0000000..48b9a9b
--- /dev/null
+++ b/audio/2.0/config/audio_policy_configuration.xsd
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2017 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.
+-->
+<!-- TODO: define a targetNamespace. Note that it will break retrocompatibility -->
+<xs:schema version="2.0"
+           elementFormDefault="qualified"
+           attributeFormDefault="unqualified"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema">
+    <!-- List the config versions supported by audio policy. -->
+    <xs:simpleType name="version">
+        <xs:restriction base="xs:decimal">
+            <xs:enumeration value="1.0"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:simpleType name="halVersion">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                Version of the interface the hal implements.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:restriction base="xs:decimal">
+            <!-- List of HAL versions supported by the framework. -->
+            <xs:enumeration value="2.0"/>
+            <xs:enumeration value="3.0"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:element name="audioPolicyConfiguration">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="globalConfiguration" type="globalConfiguration"/>
+                <xs:element name="modules" type="modules" maxOccurs="unbounded"/>
+                <xs:element name="volumes" type="volumes" maxOccurs="unbounded"/>
+            </xs:sequence>
+            <xs:attribute name="version" type="version"/>
+        </xs:complexType>
+        <xs:key name="moduleNameKey">
+            <xs:selector xpath="modules/module"/>
+            <xs:field xpath="@name"/>
+        </xs:key>
+        <xs:key name="devicePortNameGlobalKey">
+            <xs:selector xpath="modules/module/devicePorts/devicePort"/>
+            <xs:field xpath="@tagName"/>
+        </xs:key>
+        <xs:unique name="volumeTargetUniqueness">
+            <xs:selector xpath="volumes/volume"/>
+            <xs:field xpath="@stream"/>
+            <xs:field xpath="@deviceCategory"/>
+        </xs:unique>
+        <xs:key name="volumeCurveNameKey">
+            <xs:selector xpath="volumes/reference"/>
+            <xs:field xpath="@name"/>
+        </xs:key>
+        <xs:keyref name="volumeCurveRef" refer="volumeCurveNameKey">
+            <xs:selector xpath="volumes/volume"/>
+            <xs:field xpath="@ref"/>
+        </xs:keyref>
+    </xs:element>
+    <xs:complexType name="globalConfiguration">
+        <xs:attribute name="speaker_drc_enabled" type="xs:boolean" use="required"/>
+    </xs:complexType>
+    <!-- Enum values of IDevicesFactory::Device
+         TODO: generate from hidl to avoid manual sync. -->
+    <xs:simpleType name="halName">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="primary"/>
+            <xs:enumeration value="a2dp"/>
+            <xs:enumeration value="usb"/>
+            <xs:enumeration value="r_submix"/>
+            <xs:enumeration value="codec_offload"/>
+            <xs:enumeration value="stub"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:complexType name="modules">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                There should be one section per audio HW module present on the platform.
+                Each <module/> contains two mandatory tags: “halVersion” and “name”.
+                The module "name" is the same as in previous .conf file.
+                Each module must contain the following sections:
+                 - <devicePorts/>: a list of device descriptors for all
+                   input and output devices accessible via this module.
+                   This contains both permanently attached devices and removable devices.
+                 - <mixPorts/>: listing all output and input streams exposed by the audio HAL
+                 - <routes/>: list of possible connections between input
+                   and output devices or between stream and devices.
+                   A <route/> is defined by a set of 3 attributes:
+                        -"type": mux|mix means all sources are mutual exclusive (mux) or can be mixed (mix)
+                        -"sink": the sink involved in this route
+                        -"sources": all the sources than can be connected to the sink via this route
+                 - <attachedDevices/>: permanently attached devices.
+                   The attachedDevices section is a list of devices names.
+                   Their names correspond to device names defined in "devicePorts" section.
+                 - <defaultOutputDevice/> is the device to be used when no policy rule applies
+            </xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="module" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="attachedDevices" type="attachedDevices" minOccurs="0">
+                            <xs:unique name="attachedDevicesUniqueness">
+                                <xs:selector xpath="item"/>
+                                <xs:field xpath="."/>
+                            </xs:unique>
+                        </xs:element>
+                        <xs:element name="defaultOutputDevice" type="xs:token" minOccurs="0"/>
+                        <xs:element name="mixPorts" type="mixPorts" minOccurs="0"/>
+                        <xs:element name="devicePorts" type="devicePorts" minOccurs="0"/>
+                        <xs:element name="routes" type="routes" minOccurs="0"/>
+                    </xs:sequence>
+                    <xs:attribute name="name" type="halName" use="required"/>
+                    <xs:attribute name="halVersion" type="halVersion" use="required"/>
+                </xs:complexType>
+                <xs:unique name="mixPortNameUniqueness">
+                    <xs:selector xpath="mixPorts/mixPort"/>
+                    <xs:field xpath="@name"/>
+                </xs:unique>
+                <!-- Although this key constraint is redundant with devicePortNameGlobalKey,
+                     the set is used to constraint defaultOutputDevice and attachedDevice
+                     to reference a devicePort of the same module. -->
+                <xs:key name="devicePortNameKey">
+                    <xs:selector xpath="devicePorts/devicePort"/>
+                    <xs:field xpath="@tagName"/>
+                </xs:key>
+                <xs:keyref name="defaultOutputDeviceRef" refer="devicePortNameKey">
+                    <xs:selector xpath="defaultOutputDevice"/>
+                    <xs:field xpath="."/>
+                </xs:keyref>
+                <xs:keyref name="attachedDeviceRef" refer="devicePortNameKey">
+                    <xs:selector xpath="attachedDevices/item"/>
+                    <xs:field xpath="."/>
+                </xs:keyref>
+                <!-- The following 3 constraints try to make sure each sink port
+                     is reference in one an only one route. -->
+                <xs:key name="routeSinkKey">
+                    <!-- predicate [@type='sink'] does not work in xsd 1.0 -->
+                    <xs:selector xpath="devicePorts/devicePort|mixPorts/mixPort"/>
+                    <xs:field xpath="@tagName|@name"/>
+                </xs:key>
+                <xs:keyref name="routeSinkRef" refer="routeSinkKey">
+                    <xs:selector xpath="routes/route"/>
+                    <xs:field xpath="@sink"/>
+                </xs:keyref>
+                <xs:unique name="routeUniqueness">
+                    <xs:selector xpath="routes/route"/>
+                    <xs:field xpath="@sink"/>
+                </xs:unique>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="attachedDevices">
+        <xs:sequence>
+            <xs:element name="item" type="xs:token" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+    <!-- TODO: separate values by space for better xsd validations. -->
+    <xs:simpleType name="audioInOutFlags">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                "|" separated list of audio_output_flags_t or audio_input_flags_t.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:restriction base="xs:string">
+            <xs:pattern value="|[_A-Z]+(\|[_A-Z]+)*"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:simpleType name="role">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="sink"/>
+            <xs:enumeration value="source"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:complexType name="mixPorts">
+        <xs:sequence>
+            <xs:element name="mixPort" minOccurs="0" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="profile" type="profile" minOccurs="0" maxOccurs="unbounded"/>
+                    </xs:sequence>
+                    <xs:attribute name="name" type="xs:token" use="required"/>
+                    <xs:attribute name="role" type="role" use="required"/>
+                    <xs:attribute name="flags" type="audioInOutFlags"/>
+                </xs:complexType>
+                <xs:unique name="mixPortProfileUniqueness">
+                    <xs:selector xpath="profile"/>
+                    <xs:field xpath="format"/>
+                    <xs:field xpath="samplingRate"/>
+                    <xs:field xpath="channelMasks"/>
+                </xs:unique>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <!-- Enum values of audio_device_t in audio.h
+         TODO: generate from hidl to avoid manual sync.
+         TODO: separate source and sink in the xml for better xsd validations. -->
+    <xs:simpleType name="audioDevice">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="AUDIO_DEVICE_NONE"/>
+
+            <xs:enumeration value="AUDIO_DEVICE_OUT_EARPIECE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_SPEAKER"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_SPEAKER_SAFE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_WIRED_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_WIRED_HEADPHONE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_ALL_SCO"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_ALL_A2DP"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_AUX_DIGITAL"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_HDMI"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_USB_ACCESSORY"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_USB_DEVICE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_ALL_USB"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_REMOTE_SUBMIX"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_TELEPHONY_TX"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_LINE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_HDMI_ARC"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_SPDIF"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_FM"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_AUX_LINE"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_IP"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_BUS"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_PROXY"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_USB_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_DEFAULT"/>
+            <xs:enumeration value="AUDIO_DEVICE_OUT_STUB"/>
+
+            <!-- Due to the xml format, IN types can not be a separated from OUT types -->
+            <xs:enumeration value="AUDIO_DEVICE_IN_COMMUNICATION"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_AMBIENT"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_BUILTIN_MIC"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_ALL_SCO"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_WIRED_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_AUX_DIGITAL"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_HDMI"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_TELEPHONY_RX"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_VOICE_CALL"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_BACK_MIC"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_REMOTE_SUBMIX"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_USB_ACCESSORY"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_USB_DEVICE"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_ALL_USB"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_FM_TUNER"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_TV_TUNER"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_LINE"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_SPDIF"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_BLUETOOTH_A2DP"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_LOOPBACK"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_IP"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_BUS"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_PROXY"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_USB_HEADSET"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_DEFAULT"/>
+            <xs:enumeration value="AUDIO_DEVICE_IN_STUB"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <!-- Enum values of audio_format_t in audio.h
+         TODO: generate from hidl to avoid manual sync. -->
+    <xs:simpleType name="audioFormat">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="AUDIO_FORMAT_PCM_16_BIT" />
+            <xs:enumeration value="AUDIO_FORMAT_PCM_8_BIT"/>
+            <xs:enumeration value="AUDIO_FORMAT_PCM_32_BIT"/>
+            <xs:enumeration value="AUDIO_FORMAT_PCM_8_24_BIT"/>
+            <xs:enumeration value="AUDIO_FORMAT_PCM_FLOAT"/>
+            <xs:enumeration value="AUDIO_FORMAT_PCM_24_BIT_PACKED"/>
+            <xs:enumeration value="AUDIO_FORMAT_MP3"/>
+            <xs:enumeration value="AUDIO_FORMAT_AMR_NB"/>
+            <xs:enumeration value="AUDIO_FORMAT_AMR_WB"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_MAIN"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_LC"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_SSR"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_LTP"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_HE_V1"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_SCALABLE"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ERLC"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_LD"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_HE_V2"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ELD"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_MAIN"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LC"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_SSR"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LTP"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_HE_V1"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_SCALABLE"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_ERLC"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LD"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_HE_V2"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_ELD"/>
+            <xs:enumeration value="AUDIO_FORMAT_VORBIS"/>
+            <xs:enumeration value="AUDIO_FORMAT_HE_AAC_V1"/>
+            <xs:enumeration value="AUDIO_FORMAT_HE_AAC_V2"/>
+            <xs:enumeration value="AUDIO_FORMAT_OPUS"/>
+            <xs:enumeration value="AUDIO_FORMAT_AC3"/>
+            <xs:enumeration value="AUDIO_FORMAT_E_AC3"/>
+            <xs:enumeration value="AUDIO_FORMAT_DTS"/>
+            <xs:enumeration value="AUDIO_FORMAT_DTS_HD"/>
+            <xs:enumeration value="AUDIO_FORMAT_IEC61937"/>
+            <xs:enumeration value="AUDIO_FORMAT_DOLBY_TRUEHD"/>
+            <xs:enumeration value="AUDIO_FORMAT_EVRC"/>
+            <xs:enumeration value="AUDIO_FORMAT_EVRCB"/>
+            <xs:enumeration value="AUDIO_FORMAT_EVRCWB"/>
+            <xs:enumeration value="AUDIO_FORMAT_EVRCNW"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADIF"/>
+            <xs:enumeration value="AUDIO_FORMAT_WMA"/>
+            <xs:enumeration value="AUDIO_FORMAT_WMA_PRO"/>
+            <xs:enumeration value="AUDIO_FORMAT_AMR_WB_PLUS"/>
+            <xs:enumeration value="AUDIO_FORMAT_MP2"/>
+            <xs:enumeration value="AUDIO_FORMAT_QCELP"/>
+            <xs:enumeration value="AUDIO_FORMAT_DSD"/>
+            <xs:enumeration value="AUDIO_FORMAT_FLAC"/>
+            <xs:enumeration value="AUDIO_FORMAT_ALAC"/>
+            <xs:enumeration value="AUDIO_FORMAT_APE"/>
+            <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS"/>
+            <xs:enumeration value="AUDIO_FORMAT_SBC"/>
+            <xs:enumeration value="AUDIO_FORMAT_APTX"/>
+            <xs:enumeration value="AUDIO_FORMAT_APTX_HD"/>
+            <xs:enumeration value="AUDIO_FORMAT_AC4"/>
+            <xs:enumeration value="AUDIO_FORMAT_LDAC"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <!-- TODO: Change to a space separated list to xsd enforce correctness. -->
+    <xs:simpleType name="samplingRates">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="[0-9]+(,[0-9]+)*"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <!-- TODO: Change to a space separated list to xsd enforce correctness. -->
+    <xs:simpleType name="channelMask">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                Comma (",") separated list of channel flags
+                from audio_channel_mask_t.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:restriction base="xs:string">
+            <xs:pattern value="[_A-Z][_A-Z0-9]*(,[_A-Z][_A-Z0-9]*)*"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:complexType name="profile">
+        <xs:attribute name="name" type="xs:token" use="required"/>
+        <xs:attribute name="format" type="audioFormat" use="required"/>
+        <xs:attribute name="samplingRates" type="samplingRates" use="required"/>
+        <xs:attribute name="channelMasks" type="channelMask" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="devicePorts">
+        <xs:sequence>
+            <xs:element name="devicePort" minOccurs="0" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="profile" type="profile" minOccurs="0" maxOccurs="unbounded"/>
+                    </xs:sequence>
+                    <xs:attribute name="tagName" type="xs:token" use="required"/>
+                    <xs:attribute name="type" type="audioDevice" use="required"/>
+                    <xs:attribute name="role" type="role" use="required"/>
+                </xs:complexType>
+                <xs:unique name="devicePortProfileUniqueness">
+                    <xs:selector xpath="profile"/>
+                    <xs:field xpath="format"/>
+                    <xs:field xpath="samplingRate"/>
+                    <xs:field xpath="channelMasks"/>
+                </xs:unique>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:simpleType name="mixType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="mix"/>
+            <xs:enumeration value="mux"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:complexType name="routes">
+        <xs:sequence>
+            <xs:element name="route" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation xml:lang="en">
+                        List all available sources for a given sink.
+                    </xs:documentation>
+                </xs:annotation>
+                <xs:complexType>
+                    <xs:attribute name="type" type="mixType" use="required"/>
+                    <xs:attribute name="sink" type="xs:string" use="required"/>
+                    <xs:attribute name="sources" type="xs:string" use="required"/>
+                </xs:complexType>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="volumes">
+        <xs:sequence>
+            <xs:element name="volume" type="volume" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="reference" type="reference" minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <!-- TODO: Always require a ref for better xsd validations.
+               Currently a volume could have no points nor ref
+               as it can not be forbidden by xsd 1.0.-->
+    <xs:simpleType name="volumePoint">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                Comma separated pair of number.
+                The fist one is the framework level (between 0 and 100).
+                The second one is the volume to send to the HAL.
+                The framework will interpolate volumes not specified.
+                Their MUST be at least 2 points specified.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:restriction base="xs:string">
+            <xs:pattern value="([0-9]{1,2}|100),-?[0-9]+"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <!-- Enum values of audio_stream_type_t in audio-base.h
+         TODO: generate from hidl to avoid manual sync. -->
+    <xs:simpleType name="stream">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="AUDIO_STREAM_VOICE_CALL"/>
+            <xs:enumeration value="AUDIO_STREAM_SYSTEM"/>
+            <xs:enumeration value="AUDIO_STREAM_RING"/>
+            <xs:enumeration value="AUDIO_STREAM_MUSIC"/>
+            <xs:enumeration value="AUDIO_STREAM_ALARM"/>
+            <xs:enumeration value="AUDIO_STREAM_NOTIFICATION"/>
+            <xs:enumeration value="AUDIO_STREAM_BLUETOOTH_SCO"/>
+            <xs:enumeration value="AUDIO_STREAM_ENFORCED_AUDIBLE"/>
+            <xs:enumeration value="AUDIO_STREAM_DTMF"/>
+            <xs:enumeration value="AUDIO_STREAM_TTS"/>
+            <xs:enumeration value="AUDIO_STREAM_ACCESSIBILITY"/>
+            <xs:enumeration value="AUDIO_STREAM_REROUTING"/>
+            <xs:enumeration value="AUDIO_STREAM_PATCH"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <!-- Enum values of device_category from Volume.h.
+         TODO: generate from hidl to avoid manual sync. -->
+    <xs:simpleType name="deviceCategory">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="DEVICE_CATEGORY_HEADSET"/>
+            <xs:enumeration value="DEVICE_CATEGORY_SPEAKER"/>
+            <xs:enumeration value="DEVICE_CATEGORY_EARPIECE"/>
+            <xs:enumeration value="DEVICE_CATEGORY_EXT_MEDIA"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:complexType name="volume">
+        <xs:annotation>
+            <xs:documentation xml:lang="en">
+                Volume section defines a volume curve for a given use case and device category.
+                It contains a list of points of this curve expressing the attenuation in Millibels
+                for a given volume index from 0 to 100.
+                <volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER">
+                    <point>0,-9600</point>
+                    <point>100,0</point>
+                </volume>
+
+                It may also reference a reference/@name to avoid duplicating curves.
+                <volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER"
+                        ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
+                <reference name="DEFAULT_MEDIA_VOLUME_CURVE">
+                    <point>0,-9600</point>
+                    <point>100,0</point>
+                </reference>
+            </xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="point" type="volumePoint" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="stream" type="stream"/>
+        <xs:attribute name="deviceCategory" type="deviceCategory"/>
+        <xs:attribute name="ref" type="xs:token" use="optional"/>
+    </xs:complexType>
+    <xs:complexType name="reference">
+        <xs:sequence>
+            <xs:element name="point" type="volumePoint" minOccurs="2" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:token" use="required"/>
+    </xs:complexType>
+</xs:schema>
diff --git a/audio/2.0/default/Device.cpp b/audio/2.0/default/Device.cpp
index 280d320..3727966 100644
--- a/audio/2.0/default/Device.cpp
+++ b/audio/2.0/default/Device.cpp
@@ -17,11 +17,9 @@
 #define LOG_TAG "DeviceHAL"
 //#define LOG_NDEBUG 0
 
+#include <algorithm>
 #include <memory.h>
 #include <string.h>
-#include <algorithm>
-#include <mutex>
-#include <vector>
 
 #include <android/log.h>
 
@@ -38,57 +36,8 @@
 namespace V2_0 {
 namespace implementation {
 
-namespace {
-
-class Diagnostics {
-   public:
-    static Diagnostics& getInstance() {
-        std::lock_guard<std::mutex> _(mLock);
-        if (mInstance == nullptr) {
-            mInstance = new Diagnostics;
-        }
-        return *mInstance;
-    }
-
-    void registerDevice(Device* dev) {
-        std::lock_guard<std::mutex> _(mLock);
-        mDevices.push_back(wp<Device>(dev));
-    }
-
-    void checkForErasedHalCblk(const Device* dev) {
-        if (dev->version() != 0) return;  // all OK
-
-        std::ostringstream ss;
-        ss << "Zero HAL CB for " << dev->type() << ":" << std::hex
-           << dev->device() << "; Others: ";
-        {
-            std::lock_guard<std::mutex> _(mLock);
-            for (auto wp : mDevices) {
-                sp<Device> other{wp.promote()};
-                if (other.get() == nullptr || other.get() == dev) continue;
-                ss << other->type() << ":" << other->version() << ":"
-                   << std::hex << other->device() << "; ";
-            }
-        }
-        ALOGE("%s", ss.str().c_str());
-    }
-
-   private:
-    Diagnostics() {}
-
-    static std::mutex mLock;
-    static Diagnostics* mInstance;
-    std::vector<wp<Device>> mDevices;
-};
-
-std::mutex Diagnostics::mLock;
-Diagnostics* Diagnostics::mInstance{nullptr};
-
-}  // namespace
-
-Device::Device(audio_hw_device_t* device, const char* type)
-    : mDevice{device}, mType{type} {
-    Diagnostics::getInstance().registerDevice(this);
+Device::Device(audio_hw_device_t* device)
+        : mDevice(device) {
 }
 
 Device::~Device() {
@@ -127,12 +76,10 @@
 }
 
 char* Device::halGetParameters(const char* keys) {
-    Diagnostics::getInstance().checkForErasedHalCblk(this);
     return mDevice->get_parameters(mDevice, keys);
 }
 
 int Device::halSetParameters(const char* keysAndValues) {
-    Diagnostics::getInstance().checkForErasedHalCblk(this);
     return mDevice->set_parameters(mDevice, keysAndValues);
 }
 
diff --git a/audio/2.0/default/Device.h b/audio/2.0/default/Device.h
index 55bd0ab..7738361 100644
--- a/audio/2.0/default/Device.h
+++ b/audio/2.0/default/Device.h
@@ -56,7 +56,7 @@
 using ::android::sp;
 
 struct Device : public IDevice, public ParametersUtil {
-    Device(audio_hw_device_t* device, const char* type);
+    explicit Device(audio_hw_device_t* device);
 
     // Methods from ::android::hardware::audio::V2_0::IDevice follow.
     Return<Result> initCheck()  override;
@@ -101,18 +101,17 @@
     void closeInputStream(audio_stream_in_t* stream);
     void closeOutputStream(audio_stream_out_t* stream);
     audio_hw_device_t* device() const { return mDevice; }
-    const char* type() const { return mType; }
-    uint32_t version() const { return mDevice->common.version; }
 
-   private:
+  private:
     audio_hw_device_t *mDevice;
-    const char* mType;
 
     virtual ~Device();
 
     // Methods from ParametersUtil.
     char* halGetParameters(const char* keys) override;
     int halSetParameters(const char* keysAndValues) override;
+
+    uint32_t version() const { return mDevice->common.version; }
 };
 
 }  // namespace implementation
diff --git a/audio/2.0/default/DevicesFactory.cpp b/audio/2.0/default/DevicesFactory.cpp
index b344968..b913bc7 100644
--- a/audio/2.0/default/DevicesFactory.cpp
+++ b/audio/2.0/default/DevicesFactory.cpp
@@ -86,7 +86,7 @@
                 result = new PrimaryDevice(halDevice);
             } else {
                 result = new ::android::hardware::audio::V2_0::implementation::
-                    Device(halDevice, moduleName);
+                    Device(halDevice);
             }
             retval = Result::OK;
         } else if (halStatus == -EINVAL) {
diff --git a/audio/2.0/default/PrimaryDevice.cpp b/audio/2.0/default/PrimaryDevice.cpp
index 746d873..a4a8206 100644
--- a/audio/2.0/default/PrimaryDevice.cpp
+++ b/audio/2.0/default/PrimaryDevice.cpp
@@ -26,7 +26,8 @@
 namespace implementation {
 
 PrimaryDevice::PrimaryDevice(audio_hw_device_t* device)
-    : mDevice{new Device(device, AUDIO_HARDWARE_MODULE_ID_PRIMARY)} {}
+        : mDevice(new Device(device)) {
+}
 
 PrimaryDevice::~PrimaryDevice() {}
 
diff --git a/audio/2.0/vts/functional/Android.bp b/audio/2.0/vts/functional/Android.bp
index f5ab76f..daae738 100644
--- a/audio/2.0/vts/functional/Android.bp
+++ b/audio/2.0/vts/functional/Android.bp
@@ -17,7 +17,8 @@
 cc_test {
     name: "VtsHalAudioV2_0TargetTest",
     defaults: ["hidl_defaults"],
-    srcs: ["AudioPrimaryHidlHalTest.cpp"],
+    srcs: ["AudioPrimaryHidlHalTest.cpp",
+           "ValidateAudioConfiguration.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -25,8 +26,10 @@
         "libhidltransport",
         "libutils",
         "libcutils",
+        "libxml2",
         "android.hardware.audio@2.0",
         "android.hardware.audio.common@2.0",
+        "android.hardware.audio.common.test.utility",
     ],
     static_libs: ["VtsHalHidlTargetTestBase"],
     cflags: [
diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
index 90fec01..eec2b10 100644
--- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
+++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
@@ -21,9 +21,7 @@
 #include <cstddef>
 #include <cstdio>
 #include <limits>
-#include <list>
 #include <string>
-#include <type_traits>
 #include <vector>
 
 #include <VtsHalHidlTargetTestBase.h>
@@ -37,6 +35,8 @@
 #include <android/hardware/audio/common/2.0/types.h>
 
 #include "utility/AssertOk.h"
+#include "utility/Documentation.h"
+#include "utility/EnvironmentTearDown.h"
 #include "utility/PrettyPrintAudioTypes.h"
 #include "utility/ReturnIn.h"
 
@@ -59,8 +59,7 @@
 using ::android::hardware::audio::V2_0::IStream;
 using ::android::hardware::audio::V2_0::IStreamIn;
 using ::android::hardware::audio::V2_0::TimeSpec;
-using ReadParameters =
-    ::android::hardware::audio::V2_0::IStreamIn::ReadParameters;
+using ReadParameters = ::android::hardware::audio::V2_0::IStreamIn::ReadParameters;
 using ReadStatus = ::android::hardware::audio::V2_0::IStreamIn::ReadStatus;
 using ::android::hardware::audio::V2_0::IStreamOut;
 using ::android::hardware::audio::V2_0::IStreamOutCallback;
@@ -81,61 +80,8 @@
 using ::android::hardware::audio::common::V2_0::AudioSource;
 using ::android::hardware::audio::common::V2_0::ThreadInfo;
 
-using utility::returnIn;
+using namespace ::android::hardware::audio::common::test::utility;
 
-const char* getTestName() {
-    return ::testing::UnitTest::GetInstance()->current_test_info()->name();
-}
-
-namespace doc {
-/** Document the current test case.
- * Eg: calling `doc::test("Dump the state of the hal")` in the "debugDump" test
- * will output:
- *   <testcase name="debugDump" status="run" time="6"
- *             classname="AudioPrimaryHidlTest"
-               description="Dump the state of the hal." />
- * see
- https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#logging-additional-information
- */
-void test(const std::string& testCaseDocumentation) {
-    ::testing::Test::RecordProperty("description", testCaseDocumentation);
-}
-
-/** Document why a test was not fully run. Usually due to an optional feature
- * not implemented. */
-void partialTest(const std::string& reason) {
-    LOG(INFO) << "Test " << getTestName() << " partially run: " << reason;
-    ::testing::Test::RecordProperty("partialyRunTest", reason);
-}
-
-/** Add a note to the test. */
-void note(const std::string& note) {
-    LOG(INFO) << "Test " << getTestName() << " noted: " << note;
-    ::testing::Test::RecordProperty("note", note);
-}
-}
-
-// Register callback for static object destruction
-// Avoid destroying static objects after main return.
-// Post main return destruction leads to incorrect gtest timing measurements as
-// well as harder
-// debuging if anything goes wrong during destruction.
-class Environment : public ::testing::Environment {
-   public:
-    using TearDownFunc = std::function<void()>;
-    void registerTearDown(TearDownFunc&& tearDown) {
-        tearDowns.push_back(std::move(tearDown));
-    }
-
-   private:
-    void TearDown() override {
-        // Call the tear downs in reverse order of insertion
-        for (auto& tearDown : tearDowns) {
-            tearDown();
-        }
-    }
-    std::list<TearDownFunc> tearDowns;
-};
 // Instance to register global tearDown
 static Environment* environment;
 
@@ -743,15 +689,11 @@
     "Check that the stream frame count == the one it was opened with",
     ASSERT_EQ(audioConfig.frameCount, extract(stream->getFrameCount())))
 
-TEST_IO_STREAM(
-    GetSampleRate,
-    "Check that the stream sample rate == the one it was opened with",
-    stream->getSampleRate())
+TEST_IO_STREAM(GetSampleRate, "Check that the stream sample rate == the one it was opened with",
+               ASSERT_EQ(audioConfig.sampleRateHz, extract(stream->getSampleRate())))
 
-TEST_IO_STREAM(
-    GetChannelMask,
-    "Check that the stream channel mask == the one it was opened with",
-    stream->getChannelMask())
+TEST_IO_STREAM(GetChannelMask, "Check that the stream channel mask == the one it was opened with",
+               ASSERT_EQ(audioConfig.channelMask, extract(stream->getChannelMask())))
 
 TEST_IO_STREAM(GetFormat,
                "Check that the stream format == the one it was opened with",
@@ -853,17 +795,23 @@
     areAudioPatchesSupported() ? doc::partialTest("Audio patches are supported")
                                : testSetDevice(stream.get(), address))
 
-static void testGetAudioProperties(IStream* stream) {
+static void testGetAudioProperties(IStream* stream, AudioConfig expectedConfig) {
     uint32_t sampleRateHz;
     AudioChannelMask mask;
     AudioFormat format;
+
     stream->getAudioProperties(returnIn(sampleRateHz, mask, format));
+
+    // FIXME: the qcom hal it does not currently negotiate the sampleRate &
+    // channel mask
+    EXPECT_EQ(expectedConfig.sampleRateHz, sampleRateHz);
+    EXPECT_EQ(expectedConfig.channelMask, mask);
+    EXPECT_EQ(expectedConfig.format, format);
 }
 
-TEST_IO_STREAM(
-    GetAudioProperties,
-    "Check that the stream audio properties == the ones it was opened with",
-    testGetAudioProperties(stream.get()))
+TEST_IO_STREAM(GetAudioProperties,
+               "Check that the stream audio properties == the ones it was opened with",
+               testGetAudioProperties(stream.get(), audioConfig))
 
 static void testConnectedState(IStream* stream) {
     DeviceAddress address = {};
@@ -1400,6 +1348,5 @@
     ::testing::AddGlobalTestEnvironment(environment);
     ::testing::InitGoogleTest(&argc, argv);
     int status = RUN_ALL_TESTS();
-    LOG(INFO) << "Test result = " << status;
     return status;
 }
diff --git a/tests/versioning/2.4/IFoo.hal b/audio/2.0/vts/functional/ValidateAudioConfiguration.cpp
similarity index 72%
copy from tests/versioning/2.4/IFoo.hal
copy to audio/2.0/vts/functional/ValidateAudioConfiguration.cpp
index 358b56f..01324c8 100644
--- a/tests/versioning/2.4/IFoo.hal
+++ b/audio/2.0/vts/functional/ValidateAudioConfiguration.cpp
@@ -14,11 +14,9 @@
  * limitations under the License.
  */
 
-package android.hardware.tests.versioning@2.4;
+#include "utility/ValidateXml.h"
 
-import @2.3::IFoo;
-
-// Must extend @2.3::IFoo.
-interface IFoo extends @2.3::IFoo {
-
-};
+TEST(CheckConfig, audioPolicyConfigurationValidation) {
+    ASSERT_VALID_XML("/vendor/etc/audio_policy_configuration.xml",
+                     "/data/local/tmp/audio_policy_configuration.xsd");
+}
diff --git a/audio/2.0/vts/functional/utility/AssertOk.h b/audio/2.0/vts/functional/utility/AssertOk.h
deleted file mode 100644
index 4c8440e..0000000
--- a/audio/2.0/vts/functional/utility/AssertOk.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2017 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 <algorithm>
-#include <vector>
-
-#include <hidl/Status.h>
-
-namespace detail {
-
-// This is a detail namespace, thus it is OK to import a class as nobody else is
-// allowed to use it
-using ::android::hardware::Return;
-using ::android::hardware::audio::V2_0::Result;
-
-template <class T>
-inline ::testing::AssertionResult assertIsOk(const char* expr,
-                                             const Return<T>& ret) {
-    return ::testing::AssertionResult(ret.isOk())
-           << "Expected: " << expr
-           << "\n to be an OK Return but it is not: " << ret.description();
-}
-
-// Call continuation if the provided result isOk
-template <class T, class Continuation>
-inline ::testing::AssertionResult continueIfIsOk(const char* expr,
-                                                 const Return<T>& ret,
-                                                 Continuation continuation) {
-    auto isOkStatus = assertIsOk(expr, ret);
-    return !isOkStatus ? isOkStatus : continuation();
-}
-
-// Expect two equal Results
-inline ::testing::AssertionResult assertResult(const char* e_expr,
-                                               const char* r_expr,
-                                               Result expected, Result result) {
-    return ::testing::AssertionResult(expected == result)
-           << "Value of: " << r_expr
-           << "\n  Actual: " << ::testing::PrintToString(result)
-           << "\nExpected: " << e_expr
-           << "\nWhich is: " << ::testing::PrintToString(expected);
-}
-
-// Expect two equal Results one being wrapped in an OK Return
-inline ::testing::AssertionResult assertResult(const char* e_expr,
-                                               const char* r_expr,
-                                               Result expected,
-                                               const Return<Result>& ret) {
-    return continueIfIsOk(r_expr, ret, [&] {
-        return assertResult(e_expr, r_expr, expected, Result{ret});
-    });
-}
-
-// Expect a Result to be part of a list of Results
-inline ::testing::AssertionResult assertResult(
-    const char* e_expr, const char* r_expr, const std::vector<Result>& expected,
-    Result result) {
-    if (std::find(expected.begin(), expected.end(), result) != expected.end()) {
-        return ::testing::AssertionSuccess();  // result is in expected
-    }
-    return ::testing::AssertionFailure()
-           << "Value of: " << r_expr
-           << "\n  Actual: " << ::testing::PrintToString(result)
-           << "\nExpected one of: " << e_expr
-           << "\n       Which is: " << ::testing::PrintToString(expected);
-}
-
-// Expect a Result wrapped in an OK Return to be part of a list of Results
-inline ::testing::AssertionResult assertResult(
-    const char* e_expr, const char* r_expr, const std::vector<Result>& expected,
-    const Return<Result>& ret) {
-    return continueIfIsOk(r_expr, ret, [&] {
-        return assertResult(e_expr, r_expr, expected, Result{ret});
-    });
-}
-
-inline ::testing::AssertionResult assertOk(const char* expr,
-                                           const Return<void>& ret) {
-    return assertIsOk(expr, ret);
-}
-
-inline ::testing::AssertionResult assertOk(const char* expr, Result result) {
-    return ::testing::AssertionResult(result == Result::OK)
-           << "Expected success: " << expr
-           << "\nActual: " << ::testing::PrintToString(result);
-}
-
-inline ::testing::AssertionResult assertOk(const char* expr,
-                                           const Return<Result>& ret) {
-    return continueIfIsOk(expr, ret,
-                          [&] { return assertOk(expr, Result{ret}); });
-}
-}
-
-#define ASSERT_IS_OK(ret) ASSERT_PRED_FORMAT1(detail::assertIsOk, ret)
-#define EXPECT_IS_OK(ret) EXPECT_PRED_FORMAT1(detail::assertIsOk, ret)
-
-// Test anything provided is and contains only OK
-#define ASSERT_OK(ret) ASSERT_PRED_FORMAT1(detail::assertOk, ret)
-#define EXPECT_OK(ret) EXPECT_PRED_FORMAT1(detail::assertOk, ret)
-
-#define ASSERT_RESULT(expected, ret) \
-    ASSERT_PRED_FORMAT2(detail::assertResult, expected, ret)
-#define EXPECT_RESULT(expected, ret) \
-    EXPECT_PRED_FORMAT2(detail::assertResult, expected, ret)
diff --git a/audio/Android.bp b/audio/Android.bp
index c3c2be1..8046672 100644
--- a/audio/Android.bp
+++ b/audio/Android.bp
@@ -4,6 +4,7 @@
     "2.0/vts/functional",
     "common/2.0",
     "common/2.0/default",
+    "common/test/utility",
     "effect/2.0",
     "effect/2.0/vts/functional",
 ]
diff --git a/audio/common/test/utility/Android.bp b/audio/common/test/utility/Android.bp
new file mode 100644
index 0000000..cca56f6
--- /dev/null
+++ b/audio/common/test/utility/Android.bp
@@ -0,0 +1,32 @@
+//
+// Copyright (C) 2017 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.
+//
+
+cc_library_shared {
+    name: "android.hardware.audio.common.test.utility",
+    defaults : ["hidl_defaults"],
+    srcs: ["src/ValidateXml.cpp"],
+    cflags: [
+        "-O0",
+        "-g",
+        "-Wextra",
+    ],
+    local_include_dirs: ["include/utility"],
+    export_include_dirs: ["include"],
+    shared_libs: ["libxml2", "liblog"],
+    static_libs: ["libgtest"],
+    export_static_lib_headers: ["libgtest"],
+}
+
diff --git a/audio/common/test/utility/include/utility/AssertOk.h b/audio/common/test/utility/include/utility/AssertOk.h
new file mode 100644
index 0000000..d8aa451
--- /dev/null
+++ b/audio/common/test/utility/include/utility/AssertOk.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ASSERTOK_H
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ASSERTOK_H
+
+#include <algorithm>
+#include <vector>
+
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
+namespace utility {
+
+namespace detail {
+
+// This is a detail namespace, thus it is OK to import a class as nobody else is
+// allowed to use it
+using ::android::hardware::Return;
+using ::android::hardware::audio::V2_0::Result;
+
+template <class T>
+inline ::testing::AssertionResult assertIsOk(const char* expr, const Return<T>& ret) {
+    return ::testing::AssertionResult(ret.isOk())
+           << "Expected: " << expr << "\n to be an OK Return but it is not: " << ret.description();
+}
+
+// Call continuation if the provided result isOk
+template <class T, class Continuation>
+inline ::testing::AssertionResult continueIfIsOk(const char* expr, const Return<T>& ret,
+                                                 Continuation continuation) {
+    auto isOkStatus = assertIsOk(expr, ret);
+    return !isOkStatus ? isOkStatus : continuation();
+}
+
+// Expect two equal Results
+inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
+                                               Result expected, Result result) {
+    return ::testing::AssertionResult(expected == result)
+           << "Value of: " << r_expr << "\n  Actual: " << ::testing::PrintToString(result)
+           << "\nExpected: " << e_expr << "\nWhich is: " << ::testing::PrintToString(expected);
+}
+
+// Expect two equal Results one being wrapped in an OK Return
+inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
+                                               Result expected, const Return<Result>& ret) {
+    return continueIfIsOk(r_expr, ret,
+                          [&] { return assertResult(e_expr, r_expr, expected, Result{ret}); });
+}
+
+// Expect a Result to be part of a list of Results
+inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
+                                               const std::vector<Result>& expected, Result result) {
+    if (std::find(expected.begin(), expected.end(), result) != expected.end()) {
+        return ::testing::AssertionSuccess();  // result is in expected
+    }
+    return ::testing::AssertionFailure()
+           << "Value of: " << r_expr << "\n  Actual: " << ::testing::PrintToString(result)
+           << "\nExpected one of: " << e_expr
+           << "\n       Which is: " << ::testing::PrintToString(expected);
+}
+
+// Expect a Result wrapped in an OK Return to be part of a list of Results
+inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
+                                               const std::vector<Result>& expected,
+                                               const Return<Result>& ret) {
+    return continueIfIsOk(r_expr, ret,
+                          [&] { return assertResult(e_expr, r_expr, expected, Result{ret}); });
+}
+
+inline ::testing::AssertionResult assertOk(const char* expr, const Return<void>& ret) {
+    return assertIsOk(expr, ret);
+}
+
+inline ::testing::AssertionResult assertOk(const char* expr, Result result) {
+    return ::testing::AssertionResult(result == Result::OK)
+           << "Expected success: " << expr << "\nActual: " << ::testing::PrintToString(result);
+}
+
+inline ::testing::AssertionResult assertOk(const char* expr, const Return<Result>& ret) {
+    return continueIfIsOk(expr, ret, [&] { return assertOk(expr, Result{ret}); });
+}
+}
+
+#define ASSERT_IS_OK(ret) ASSERT_PRED_FORMAT1(detail::assertIsOk, ret)
+#define EXPECT_IS_OK(ret) EXPECT_PRED_FORMAT1(detail::assertIsOk, ret)
+
+// Test anything provided is and contains only OK
+#define ASSERT_OK(ret) ASSERT_PRED_FORMAT1(detail::assertOk, ret)
+#define EXPECT_OK(ret) EXPECT_PRED_FORMAT1(detail::assertOk, ret)
+
+#define ASSERT_RESULT(expected, ret) ASSERT_PRED_FORMAT2(detail::assertResult, expected, ret)
+#define EXPECT_RESULT(expected, ret) EXPECT_PRED_FORMAT2(detail::assertResult, expected, ret)
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ASSERTOK_H
diff --git a/audio/common/test/utility/include/utility/Documentation.h b/audio/common/test/utility/include/utility/Documentation.h
new file mode 100644
index 0000000..a45cad6
--- /dev/null
+++ b/audio/common/test/utility/include/utility/Documentation.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN
+
+#include <android-base/logging.h>
+
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
+namespace utility {
+
+namespace doc {
+namespace detail {
+const char* getTestName() {
+    return ::testing::UnitTest::GetInstance()->current_test_info()->name();
+}
+}  // namespace detail
+
+/** Document the current test case.
+ * Eg: calling `doc::test("Dump the state of the hal")` in the "debugDump" test
+ * will output:
+ *   <testcase name="debugDump" status="run" time="6"
+ *             classname="AudioPrimaryHidlTest"
+               description="Dump the state of the hal." />
+ * see
+ https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#logging-additional-information
+ */
+void test(const std::string& testCaseDocumentation) {
+    ::testing::Test::RecordProperty("description", testCaseDocumentation);
+}
+
+/** Document why a test was not fully run. Usually due to an optional feature
+ * not implemented. */
+void partialTest(const std::string& reason) {
+    LOG(INFO) << "Test " << detail::getTestName() << " partially run: " << reason;
+    ::testing::Test::RecordProperty("partialyRunTest", reason);
+}
+
+/** Add a note to the test. */
+void note(const std::string& note) {
+    LOG(INFO) << "Test " << detail::getTestName() << " noted: " << note;
+    ::testing::Test::RecordProperty("note", note);
+}
+}  // namespace doc
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN
diff --git a/audio/common/test/utility/include/utility/EnvironmentTearDown.h b/audio/common/test/utility/include/utility/EnvironmentTearDown.h
new file mode 100644
index 0000000..15b0bd8
--- /dev/null
+++ b/audio/common/test/utility/include/utility/EnvironmentTearDown.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN_H
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN_H
+
+#include <functional>
+#include <list>
+
+#include <gtest/gtest.h>
+
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
+namespace utility {
+
+/** Register callback for static object destruction
+ * Avoid destroying static objects after main return.
+ * Post main return destruction leads to incorrect gtest timing measurements as
+ * well as harder debuging if anything goes wrong during destruction. */
+class Environment : public ::testing::Environment {
+   public:
+    using TearDownFunc = std::function<void()>;
+    void registerTearDown(TearDownFunc&& tearDown) { tearDowns.push_back(std::move(tearDown)); }
+
+   private:
+    void TearDown() override {
+        // Call the tear downs in reverse order of insertion
+        for (auto& tearDown : tearDowns) {
+            tearDown();
+        }
+    }
+    std::list<TearDownFunc> tearDowns;
+};
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN_H
diff --git a/audio/2.0/vts/functional/utility/PrettyPrintAudioTypes.h b/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
similarity index 65%
rename from audio/2.0/vts/functional/utility/PrettyPrintAudioTypes.h
rename to audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
index 025cd1c..37059e7 100644
--- a/audio/2.0/vts/functional/utility/PrettyPrintAudioTypes.h
+++ b/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
@@ -13,11 +13,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_PRETTY_PRINT_AUDIO_TYPES_H
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_PRETTY_PRINT_AUDIO_TYPES_H
+
+#include <iosfwd>
 #include <type_traits>
 
+#include <android/hardware/audio/2.0/types.h>
+#include <android/hardware/audio/common/2.0/types.h>
+
 /** @file Use HIDL generated toString methods to pretty print gtest errors */
 
-namespace detail {
+namespace prettyPrintAudioTypesDetail {
 
 // Print the value of an enum as hex
 template <class Enum>
@@ -25,7 +33,7 @@
     *os << std::hex << " (0x" << static_cast<std::underlying_type_t<Enum>>(value) << ")";
 }
 
-} // namespace detail
+}  // namespace detail
 
 namespace android {
 namespace hardware {
@@ -34,10 +42,10 @@
 
 inline void PrintTo(const Result& result, ::std::ostream* os) {
     *os << toString(result);
-    detail::printUnderlyingValue(result, os);
+    prettyPrintAudioTypesDetail::printUnderlyingValue(result, os);
 }
 
-} // namespace V2_0
+}  // namespace V2_0
 namespace common {
 namespace V2_0 {
 
@@ -47,16 +55,18 @@
 
 inline void PrintTo(const AudioDevice& device, ::std::ostream* os) {
     *os << toString(device);
-    detail::printUnderlyingValue(device, os);
+    prettyPrintAudioTypesDetail::printUnderlyingValue(device, os);
 }
 
 inline void PrintTo(const AudioChannelMask& channelMask, ::std::ostream* os) {
     *os << toString(channelMask);
-    detail::printUnderlyingValue(channelMask, os);
+    prettyPrintAudioTypesDetail::printUnderlyingValue(channelMask, os);
 }
 
-} // namespace V2_0
-} // namespace common
-} // namespace audio
-} // namespace hardware
-} // namespace android
+}  // namespace V2_0
+}  // namespace common
+}  // namespace audio
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_PRETTY_PRINT_AUDIO_TYPES_H
diff --git a/audio/2.0/vts/functional/utility/ReturnIn.h b/audio/common/test/utility/include/utility/ReturnIn.h
similarity index 75%
rename from audio/2.0/vts/functional/utility/ReturnIn.h
rename to audio/common/test/utility/include/utility/ReturnIn.h
index bb2389a..08d502f 100644
--- a/audio/2.0/vts/functional/utility/ReturnIn.h
+++ b/audio/common/test/utility/include/utility/ReturnIn.h
@@ -14,29 +14,37 @@
  * limitations under the License.
  */
 
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_RETURN_IN_H
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_RETURN_IN_H
+
 #include <tuple>
 
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
 namespace utility {
 
 namespace detail {
 // Helper class to generate the HIDL synchronous callback
 template <class... ResultStore>
 class ReturnIn {
- public:
+   public:
     // Provide to the constructor the variables where the output parameters must be copied
     // TODO: take pointers to match google output parameter style ?
     ReturnIn(ResultStore&... ts) : results(ts...) {}
     // Synchronous callback
     template <class... Results>
-    void operator() (Results&&...results) {
+    void operator()(Results&&... results) {
         set(std::forward<Results>(results)...);
     }
- private:
+
+   private:
     // Recursively set all output parameters
     template <class Head, class... Tail>
     void set(Head&& head, Tail&&... tail) {
-        std::get<sizeof...(ResultStore) - sizeof...(Tail) - 1>(results)
-                  = std::forward<Head>(head);
+        std::get<sizeof...(ResultStore) - sizeof...(Tail) - 1>(results) = std::forward<Head>(head);
         set(tail...);
     }
     // Trivial case
@@ -45,7 +53,7 @@
     // All variables to set are stored here
     std::tuple<ResultStore&...> results;
 };
-} // namespace detail
+}  // namespace detail
 
 // Generate the HIDL synchronous callback with a copy policy
 // Input: the variables (lvalue reference) where to save the return values
@@ -53,6 +61,15 @@
 // The output parameters *will be copied* do not use this function if you have
 // a zero copy policy
 template <class... ResultStore>
-detail::ReturnIn<ResultStore...> returnIn(ResultStore&... ts) { return {ts...};}
-
+detail::ReturnIn<ResultStore...> returnIn(ResultStore&... ts) {
+    return {ts...};
 }
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_RETURN_IN_H
diff --git a/audio/common/test/utility/include/utility/ValidateXml.h b/audio/common/test/utility/include/utility/ValidateXml.h
new file mode 100644
index 0000000..fdfa506
--- /dev/null
+++ b/audio/common/test/utility/include/utility/ValidateXml.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_VALIDATE_XML_H
+#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_VALIDATE_XML_H
+
+#include <gtest/gtest.h>
+
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
+namespace utility {
+
+/** Validate the provided XmlFile with the provided xsdFile.
+ * Intended to use with ASSERT_PRED_FORMAT2 as such:
+ *   ASSERT_PRED_FORMAT2(validateXml, pathToXml, pathToXsd);
+ * See ASSERT_VALID_XML for a helper macro.
+ */
+::testing::AssertionResult validateXml(const char* xmlFilePathExpr, const char* xsdFilePathExpr,
+                                       const char* xmlFilePath, const char* xsdPathName);
+
+/** Helper gtest ASSERT to test xml validity against an xsd. */
+#define ASSERT_VALID_XML(xmlFilePath, xsdFilePath)                                      \
+    ASSERT_PRED_FORMAT2(::android::hardware::audio::common::test::utility::validateXml, \
+                        xmlFilePath, xsdFilePath)
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
+
+#endif  // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_VALIDATE_XML_H
diff --git a/audio/common/test/utility/src/ValidateXml.cpp b/audio/common/test/utility/src/ValidateXml.cpp
new file mode 100644
index 0000000..784f940
--- /dev/null
+++ b/audio/common/test/utility/src/ValidateXml.cpp
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#define LOG_TAG "ValidateAudioConfig"
+#include <utils/Log.h>
+
+#define LIBXML_SCHEMAS_ENABLED
+#include <libxml/xmlschemastypes.h>
+#define LIBXML_XINCLUDE_ENABLED
+#include <libxml/xinclude.h>
+
+#include <memory>
+#include <string>
+
+#include "ValidateXml.h"
+
+namespace android {
+namespace hardware {
+namespace audio {
+namespace common {
+namespace test {
+namespace utility {
+
+/** Map libxml2 structures to their corresponding deleters. */
+template <class T>
+constexpr void (*xmlDeleter)(T* t);
+template <>
+constexpr auto xmlDeleter<xmlSchema> = xmlSchemaFree;
+template <>
+constexpr auto xmlDeleter<xmlDoc> = xmlFreeDoc;
+template <>
+constexpr auto xmlDeleter<xmlSchemaParserCtxt> = xmlSchemaFreeParserCtxt;
+template <>
+constexpr auto xmlDeleter<xmlSchemaValidCtxt> = xmlSchemaFreeValidCtxt;
+
+/** @return a unique_ptr with the correct deleter for the libxml2 object. */
+template <class T>
+constexpr auto make_xmlUnique(T* t) {
+    // Wrap deleter in lambda to enable empty base optimization
+    auto deleter = [](T* t) { xmlDeleter<T>(t); };
+    return std::unique_ptr<T, decltype(deleter)>{t, deleter};
+}
+
+/** Class that handles libxml2 initialization and cleanup. NOT THREAD SAFE*/
+struct Libxml2Global {
+    Libxml2Global() {
+        xmlLineNumbersDefault(1);  // Better error message
+        xmlSetGenericErrorFunc(this, errorCb);
+    }
+    ~Libxml2Global() {
+        // TODO: check if all those cleanup are needed
+        xmlSetGenericErrorFunc(nullptr, nullptr);
+        xmlSchemaCleanupTypes();
+        xmlCleanupParser();
+        xmlCleanupThreads();
+    }
+
+    const std::string& getErrors() { return errors; }
+
+   private:
+    static void errorCb(void* ctxt, const char* msg, ...) {
+        auto* self = static_cast<Libxml2Global*>(ctxt);
+        va_list args;
+        va_start(args, msg);
+
+        char* formatedMsg;
+        if (vasprintf(&formatedMsg, msg, args) >= 0) {
+            LOG_PRI(ANDROID_LOG_ERROR, LOG_TAG, "%s", formatedMsg);
+            self->errors += "Error: ";
+            self->errors += formatedMsg;
+        }
+        free(formatedMsg);
+
+        va_end(args);
+    }
+    std::string errors;
+};
+
+::testing::AssertionResult validateXml(const char* xmlFilePathExpr, const char* xsdFilePathExpr,
+                                       const char* xmlFilePath, const char* xsdFilePath) {
+    Libxml2Global libxml2;
+
+    auto context = [&]() {
+        return std::string() + "    While validating: " + xmlFilePathExpr +
+               "\n          Which is: " + xmlFilePath + "\nAgainst the schema: " + xsdFilePathExpr +
+               "\n          Which is: " + xsdFilePath + "Libxml2 errors\n" + libxml2.getErrors();
+    };
+
+    auto schemaParserCtxt = make_xmlUnique(xmlSchemaNewParserCtxt(xsdFilePath));
+    auto schema = make_xmlUnique(xmlSchemaParse(schemaParserCtxt.get()));
+    if (schema == nullptr) {
+        return ::testing::AssertionFailure() << "Failed to parse schema (xsd)\n" << context();
+    }
+
+    auto doc = make_xmlUnique(xmlReadFile(xmlFilePath, nullptr, 0));
+    if (doc == nullptr) {
+        return ::testing::AssertionFailure() << "Failed to parse xml\n" << context();
+    }
+
+    if (xmlXIncludeProcess(doc.get()) == -1) {
+        return ::testing::AssertionFailure() << "Failed to resolve xincludes in xml\n" << context();
+    }
+
+    auto schemaCtxt = make_xmlUnique(xmlSchemaNewValidCtxt(schema.get()));
+    int ret = xmlSchemaValidateDoc(schemaCtxt.get(), doc.get());
+    if (ret > 0) {
+        return ::testing::AssertionFailure() << "xml is not valid according to the xsd.\n"
+                                             << context();
+    }
+    if (ret < 0) {
+        return ::testing::AssertionFailure() << "Internal or API error\n" << context();
+    }
+
+    return ::testing::AssertionSuccess();
+}
+
+}  // utility
+}  // test
+}  // common
+}  // audio
+}  // test
+}  // utility
diff --git a/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
index 940bb4e..f069c46 100644
--- a/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
+++ b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
@@ -450,16 +450,13 @@
 }
 
 TEST_F(AudioEffectHidlTest, Offload) {
-  description("Verify that calling Offload method either works or returns not supported");
+  description("Verify that calling Offload method does not crash");
   EffectOffloadParameter offloadParam;
   offloadParam.isOffload = false;
   offloadParam.ioHandle =
       static_cast<int>(AudioHandleConsts::AUDIO_IO_HANDLE_NONE);
   Return<Result> ret = effect->offload(offloadParam);
   EXPECT_TRUE(ret.isOk());
-  EXPECT_TRUE(Result::OK == ret || Result::NOT_SUPPORTED == ret)
-          << "Expected OK or NOT_SUPPORTED, actual value: "
-          << static_cast<int32_t>(static_cast<Result>(ret));
 }
 
 TEST_F(AudioEffectHidlTest, PrepareForProcessing) {
diff --git a/automotive/evs/1.0/IEvsEnumerator.hal b/automotive/evs/1.0/IEvsEnumerator.hal
index 98d117a..e1193d0 100644
--- a/automotive/evs/1.0/IEvsEnumerator.hal
+++ b/automotive/evs/1.0/IEvsEnumerator.hal
@@ -34,11 +34,12 @@
     /**
      * Get the IEvsCamera associated with a cameraId from a CameraDesc
      *
-     * Given a camera's unique cameraId from ca CameraDesc, returns
-     * the ICamera interface associated with the specified camera.
-     * When done using the camera, the caller may release it by calling closeCamera().
-     * TODO(b/36122635) Reliance on the sp<> going out of scope is not recommended because the
-     * resources may not be released right away due to asynchronos behavior in the hardware binder.
+     * Given a camera's unique cameraId from CameraDesc, returns the
+     * IEvsCamera interface associated with the specified camera. When
+     * done using the camera, the caller may release it by calling closeCamera().
+     * Note: Reliance on the sp<> going out of scope is not recommended
+     * because the resources may not be released right away due to asynchronos
+     * behavior in the hardware binder (ref b/36122635).
      */
     openCamera(string cameraId) generates (IEvsCamera carCamera);
 
diff --git a/automotive/evs/1.0/default/android.hardware.automotive.evs@1.0-service.rc b/automotive/evs/1.0/default/android.hardware.automotive.evs@1.0-service.rc
index 8957ecf..16d521d 100644
--- a/automotive/evs/1.0/default/android.hardware.automotive.evs@1.0-service.rc
+++ b/automotive/evs/1.0/default/android.hardware.automotive.evs@1.0-service.rc
@@ -1,4 +1,4 @@
-service evs-hal-1-0 /vendor/bin/hw/android.hardware.automotive.evs@1.0-service
+service evs-hal-mock /vendor/bin/hw/android.hardware.automotive.evs@1.0-service
     class hal
-    user cameraserver
-    group camera
+    user automotive_evs
+    group automotive_evs
diff --git a/automotive/vehicle/2.0/default/Android.mk b/automotive/vehicle/2.0/default/Android.mk
index c63899d..72e1364 100644
--- a/automotive/vehicle/2.0/default/Android.mk
+++ b/automotive/vehicle/2.0/default/Android.mk
@@ -37,13 +37,37 @@
 LOCAL_SHARED_LIBRARIES := \
     libhidlbase \
     libhidltransport \
-    libhwbinder \
     liblog \
     libutils \
     $(vhal_v2_0) \
 
 include $(BUILD_STATIC_LIBRARY)
 
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := $(vhal_v2_0)-manager-lib-shared
+LOCAL_SRC_FILES := \
+    common/src/SubscriptionManager.cpp \
+    common/src/VehicleHalManager.cpp \
+    common/src/VehicleObjectPool.cpp \
+    common/src/VehiclePropertyStore.cpp \
+    common/src/VehicleUtils.cpp \
+
+LOCAL_C_INCLUDES := \
+    $(LOCAL_PATH)/common/include/vhal_v2_0
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+    $(LOCAL_PATH)/common/include
+
+LOCAL_SHARED_LIBRARIES := \
+    libhidlbase \
+    libhidltransport \
+    liblog \
+    libutils \
+    $(vhal_v2_0) \
+
+include $(BUILD_SHARED_LIBRARY)
+
 ###############################################################################
 # Vehicle HAL Protobuf library
 ###############################################################################
@@ -91,7 +115,6 @@
     libbase \
     libhidlbase \
     libhidltransport \
-    libhwbinder \
     liblog \
     libprotobuf-cpp-lite \
     libutils \
@@ -129,7 +152,6 @@
 LOCAL_SHARED_LIBRARIES := \
     libhidlbase \
     libhidltransport \
-    libhwbinder \
     liblog \
     libutils \
     $(vhal_v2_0) \
@@ -156,7 +178,6 @@
     libbase \
     libhidlbase \
     libhidltransport \
-    libhwbinder \
     liblog \
     libprotobuf-cpp-lite \
     libutils \
diff --git a/bluetooth/1.0/default/Android.bp b/bluetooth/1.0/default/Android.bp
index 46a4987..31a2641 100644
--- a/bluetooth/1.0/default/Android.bp
+++ b/bluetooth/1.0/default/Android.bp
@@ -24,7 +24,6 @@
         "vendor_interface.cc",
     ],
     shared_libs: [
-        "android.frameworks.schedulerservice@1.0",
         "android.hardware.bluetooth@1.0",
         "libbase",
         "libcutils",
@@ -49,7 +48,6 @@
     ],
     export_include_dirs: ["."],
     shared_libs: [
-        "android.frameworks.schedulerservice@1.0",
         "liblog",
     ],
 }
@@ -86,7 +84,6 @@
         "test",
     ],
     shared_libs: [
-        "android.frameworks.schedulerservice@1.0",
         "libbase",
         "libhidlbase",
         "liblog",
diff --git a/bluetooth/1.0/default/Android.mk b/bluetooth/1.0/default/Android.mk
index 2dcb067..38294c7 100644
--- a/bluetooth/1.0/default/Android.mk
+++ b/bluetooth/1.0/default/Android.mk
@@ -35,6 +35,5 @@
   libhidlbase \
   libhidltransport \
   android.hardware.bluetooth@1.0 \
-  android.frameworks.schedulerservice@1.0\
 
 include $(BUILD_EXECUTABLE)
diff --git a/bluetooth/1.0/default/async_fd_watcher.cc b/bluetooth/1.0/default/async_fd_watcher.cc
index ab8d555..bc0bc92 100644
--- a/bluetooth/1.0/default/async_fd_watcher.cc
+++ b/bluetooth/1.0/default/async_fd_watcher.cc
@@ -30,8 +30,6 @@
 #include "sys/select.h"
 #include "unistd.h"
 
-#include <android/frameworks/schedulerservice/1.0/ISchedulingPolicyService.h>
-
 static const int INVALID_FD = -1;
 
 static const int BT_RT_PRIORITY = 1;
@@ -119,19 +117,12 @@
 }
 
 void AsyncFdWatcher::ThreadRoutine() {
-  using ::android::frameworks::schedulerservice::V1_0::ISchedulingPolicyService;
-  using ::android::hardware::Return;
-  sp<ISchedulingPolicyService> manager = ISchedulingPolicyService::getService();
-  if (manager == nullptr) {
-    ALOGE("%s: Couldn't get scheduler manager to set SCHED_FIFO.", __func__);
-  } else {
-    Return<bool> ret = manager->requestPriority(getpid(),
-                                                gettid(),
-                                                BT_RT_PRIORITY);
-    if (!ret.isOk() || !ret) {
-      ALOGE("%s unable to set SCHED_FIFO for pid %d, tid %d", __func__,
-            getpid(), gettid());
-    }
+  // Make watching thread RT.
+  struct sched_param rt_params;
+  rt_params.sched_priority = BT_RT_PRIORITY;
+  if (sched_setscheduler(gettid(), SCHED_FIFO, &rt_params)) {
+    ALOGE("%s unable to set SCHED_FIFO for pid %d, tid %d, error %s", __func__,
+          getpid(), gettid(), strerror(errno));
   }
 
   while (running_) {
diff --git a/bluetooth/1.0/default/service.cpp b/bluetooth/1.0/default/service.cpp
index a588c37..3a7aad0 100644
--- a/bluetooth/1.0/default/service.cpp
+++ b/bluetooth/1.0/default/service.cpp
@@ -20,8 +20,8 @@
 
 #include <hidl/LegacySupport.h>
 
-// Add an extra thread for calls to the scheduler service.
-static const size_t kMaxThreads = 2;
+// Extra threads make priority inheritance faster.
+static const size_t kMaxThreads = 5;
 
 // Generated HIDL files
 using android::hardware::bluetooth::V1_0::IBluetoothHci;
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp
index bad406f..f33adf8 100644
--- a/camera/device/3.2/default/CameraDeviceSession.cpp
+++ b/camera/device/3.2/default/CameraDeviceSession.cpp
@@ -341,7 +341,7 @@
     batch->mLastFrame = batch->mFirstFrame + batch->mBatchSize - 1;
     batch->mNumPartialResults = mNumPartialResults;
     for (int id : mStreamsToBatch) {
-        batch->mBatchBufs[id] = InflightBatch::BufferBatch();
+        batch->mBatchBufs.emplace(id, batch->mBatchSize);
     }
     Mutex::Autolock _l(mLock);
     mInflightBatches.push_back(batch);
@@ -418,6 +418,29 @@
     return;
 }
 
+void CameraDeviceSession::ResultBatcher::moveStreamBuffer(StreamBuffer&& src, StreamBuffer& dst) {
+    // Only dealing with releaseFence here. Assume buffer/acquireFence are null
+    const native_handle_t* handle = src.releaseFence.getNativeHandle();
+    src.releaseFence = nullptr;
+    dst = src;
+    dst.releaseFence = handle;
+    if (handle != dst.releaseFence.getNativeHandle()) {
+        ALOGE("%s: native handle cloned!", __FUNCTION__);
+    }
+}
+
+void CameraDeviceSession::ResultBatcher::pushStreamBuffer(
+        StreamBuffer&& src, std::vector<StreamBuffer>& dst) {
+    // Only dealing with releaseFence here. Assume buffer/acquireFence are null
+    const native_handle_t* handle = src.releaseFence.getNativeHandle();
+    src.releaseFence = nullptr;
+    dst.push_back(src);
+    dst.back().releaseFence = handle;
+    if (handle != dst.back().releaseFence.getNativeHandle()) {
+        ALOGE("%s: native handle cloned!", __FUNCTION__);
+    }
+}
+
 void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked(std::shared_ptr<InflightBatch> batch) {
     sendBatchBuffersLocked(batch, mStreamsToBatch);
 }
@@ -444,7 +467,12 @@
     if (batchSize == 0) {
         ALOGW("%s: there is no buffer to be delivered for this batch.", __FUNCTION__);
         for (int streamId : streams) {
-            InflightBatch::BufferBatch& bb = batch->mBatchBufs[streamId];
+            auto it = batch->mBatchBufs.find(streamId);
+            if (it == batch->mBatchBufs.end()) {
+                ALOGE("%s: cannot find stream %d in batched buffers!", __FUNCTION__, streamId);
+                return;
+            }
+            InflightBatch::BufferBatch& bb = it->second;
             bb.mDelivered = true;
         }
         return;
@@ -460,21 +488,35 @@
         results[i].inputBuffer.bufferId = 0;
         results[i].inputBuffer.buffer = nullptr;
         std::vector<StreamBuffer> outBufs;
+        outBufs.reserve(streams.size());
         for (int streamId : streams) {
-            InflightBatch::BufferBatch& bb = batch->mBatchBufs[streamId];
+            auto it = batch->mBatchBufs.find(streamId);
+            if (it == batch->mBatchBufs.end()) {
+                ALOGE("%s: cannot find stream %d in batched buffers!", __FUNCTION__, streamId);
+                return;
+            }
+            InflightBatch::BufferBatch& bb = it->second;
             if (bb.mDelivered) {
                 continue;
             }
             if (i < bb.mBuffers.size()) {
-                outBufs.push_back(bb.mBuffers[i]);
+                pushStreamBuffer(std::move(bb.mBuffers[i]), outBufs);
             }
         }
-        results[i].outputBuffers = outBufs;
+        results[i].outputBuffers.resize(outBufs.size());
+        for (size_t j = 0; j < outBufs.size(); j++) {
+            moveStreamBuffer(std::move(outBufs[j]), results[i].outputBuffers[j]);
+        }
     }
     invokeProcessCaptureResultCallback(results, /* tryWriteFmq */false);
     freeReleaseFences(results);
     for (int streamId : streams) {
-        InflightBatch::BufferBatch& bb = batch->mBatchBufs[streamId];
+        auto it = batch->mBatchBufs.find(streamId);
+        if (it == batch->mBatchBufs.end()) {
+            ALOGE("%s: cannot find stream %d in batched buffers!", __FUNCTION__, streamId);
+            return;
+        }
+        InflightBatch::BufferBatch& bb = it->second;
         bb.mDelivered = true;
         bb.mBuffers.clear();
     }
@@ -588,8 +630,7 @@
 void CameraDeviceSession::ResultBatcher::invokeProcessCaptureResultCallback(
         hidl_vec<CaptureResult> &results, bool tryWriteFmq) {
     if (mProcessCaptureResultLock.tryLock() != OK) {
-        ALOGW("%s: previous call is not finished! waiting 1s...",
-                __FUNCTION__);
+        ALOGV("%s: previous call is not finished! waiting 1s...", __FUNCTION__);
         if (mProcessCaptureResultLock.timedLock(1000000000 /* 1s */) != OK) {
             ALOGE("%s: cannot acquire lock in 1s, cannot proceed",
                     __FUNCTION__);
@@ -614,7 +655,9 @@
 }
 
 void CameraDeviceSession::ResultBatcher::processOneCaptureResult(CaptureResult& result) {
-    hidl_vec<CaptureResult> results = {result};
+    hidl_vec<CaptureResult> results;
+    results.resize(1);
+    results[0] = std::move(result);
     invokeProcessCaptureResultCallback(results, /* tryWriteFmq */true);
     freeReleaseFences(results);
     return;
@@ -651,10 +694,10 @@
             auto it = batch->mBatchBufs.find(buffer.streamId);
             if (it != batch->mBatchBufs.end()) {
                 InflightBatch::BufferBatch& bb = it->second;
-                bb.mBuffers.push_back(buffer);
+                pushStreamBuffer(std::move(buffer), bb.mBuffers);
                 filledStreams.push_back(buffer.streamId);
             } else {
-                nonBatchedBuffers.push_back(buffer);
+                pushStreamBuffer(std::move(buffer), nonBatchedBuffers);
             }
         }
 
@@ -663,8 +706,12 @@
             CaptureResult nonBatchedResult;
             nonBatchedResult.frameNumber = result.frameNumber;
             nonBatchedResult.fmqResultSize = 0;
-            nonBatchedResult.outputBuffers = nonBatchedBuffers;
-            nonBatchedResult.inputBuffer = result.inputBuffer;
+            nonBatchedResult.outputBuffers.resize(nonBatchedBuffers.size());
+            for (size_t i = 0; i < nonBatchedBuffers.size(); i++) {
+                moveStreamBuffer(
+                        std::move(nonBatchedBuffers[i]), nonBatchedResult.outputBuffers[i]);
+            }
+            moveStreamBuffer(std::move(result.inputBuffer), nonBatchedResult.inputBuffer);
             nonBatchedResult.partialResult = 0; // 0 for buffer only results
             processOneCaptureResult(nonBatchedResult);
         }
diff --git a/camera/device/3.2/default/CameraDeviceSession.h b/camera/device/3.2/default/CameraDeviceSession.h
index d559c48..fb3fc02 100644
--- a/camera/device/3.2/default/CameraDeviceSession.h
+++ b/camera/device/3.2/default/CameraDeviceSession.h
@@ -184,6 +184,9 @@
             std::vector<NotifyMsg> mShutterMsgs;
 
             struct BufferBatch {
+                BufferBatch(uint32_t batchSize) {
+                    mBuffers.reserve(batchSize);
+                }
                 bool mDelivered = false;
                 // This currently assumes every batched request will output to the batched stream
                 // and since HAL must always send buffers in order, no frameNumber tracking is
@@ -241,6 +244,11 @@
         void processOneCaptureResult(CaptureResult& result);
         void invokeProcessCaptureResultCallback(hidl_vec<CaptureResult> &results, bool tryWriteFmq);
 
+        // move/push function avoids "hidl_handle& operator=(hidl_handle&)", which clones native
+        // handle
+        void moveStreamBuffer(StreamBuffer&& src, StreamBuffer& dst);
+        void pushStreamBuffer(StreamBuffer&& src, std::vector<StreamBuffer>& dst);
+
         // Protect access to mInflightBatches, mNumPartialResults and mStreamsToBatch
         // processCaptureRequest, processCaptureResult, notify will compete for this lock
         // Do NOT issue HIDL IPCs while holding this lock (except when HAL reports error)
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index 7a29d42..02c38a4 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -90,7 +90,7 @@
 using ::android::hardware::camera::device::V1_0::FrameCallbackFlag;
 using ::android::hardware::camera::device::V1_0::HandleTimestampMessage;
 
-const char kCameraPassthroughServiceName[] = "legacy/0";
+const char kCameraLegacyServiceName[] = "legacy/0";
 const uint32_t kMaxPreviewWidth = 1920;
 const uint32_t kMaxPreviewHeight = 1080;
 const uint32_t kMaxVideoWidth = 4096;
@@ -185,9 +185,7 @@
 };
 
 void CameraHidlEnvironment::SetUp() {
-    // TODO: test the binderized mode
-    mProvider = ::testing::VtsHalHidlTargetTestBase::getService<ICameraProvider>(kCameraPassthroughServiceName);
-    // TODO: handle the device doesn't have any camera case
+    mProvider = ::testing::VtsHalHidlTargetTestBase::getService<ICameraProvider>(kCameraLegacyServiceName);
     ALOGI_IF(mProvider, "provider is not nullptr, %p", mProvider.get());
     ASSERT_NE(mProvider, nullptr);
 }
diff --git a/configstore/1.1/Android.bp b/configstore/1.1/Android.bp
index 91c5dd3..2d8cb64 100644
--- a/configstore/1.1/Android.bp
+++ b/configstore/1.1/Android.bp
@@ -37,6 +37,7 @@
 
 cc_library_shared {
     name: "android.hardware.configstore@1.1",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.configstore@1.1_genc++"],
     generated_headers: ["android.hardware.configstore@1.1_genc++_headers"],
     export_generated_headers: ["android.hardware.configstore@1.1_genc++_headers"],
diff --git a/contexthub/1.0/default/Contexthub.cpp b/contexthub/1.0/default/Contexthub.cpp
index 4a6b3f2..bf45900 100644
--- a/contexthub/1.0/default/Contexthub.cpp
+++ b/contexthub/1.0/default/Contexthub.cpp
@@ -38,6 +38,7 @@
 Contexthub::Contexthub()
         : mInitCheck(NO_INIT),
           mContextHubModule(nullptr),
+          mDeathRecipient(new DeathRecipient(this)),
           mIsTransactionPending(false) {
     const hw_module_t *module;
 
@@ -96,7 +97,7 @@
             c.stoppedPowerDrawMw = hubArray[i].stopped_power_draw_mw;
             c.sleepPowerDrawMw = hubArray[i].sleep_power_draw_mw;
 
-            info.callBack = nullptr;
+            info.callback = nullptr;
             info.osAppName = hubArray[i].os_app_name;
             mCachedHubInfo[hubArray[i].hub_id] = info;
 
@@ -110,6 +111,16 @@
     return Void();
 }
 
+Contexthub::DeathRecipient::DeathRecipient(sp<Contexthub> contexthub)
+        : mContexthub(contexthub) {}
+
+void Contexthub::DeathRecipient::serviceDied(
+        uint64_t cookie,
+        const wp<::android::hidl::base::V1_0::IBase>& /*who*/) {
+    uint32_t hubId = static_cast<uint32_t>(cookie);
+    mContexthub->handleServiceDeath(hubId);
+}
+
 bool Contexthub::isValidHubId(uint32_t hubId) {
     if (!mCachedHubInfo.count(hubId)) {
         ALOGW("Hub information not found for hubId %" PRIu32, hubId);
@@ -123,7 +134,7 @@
     if (!isValidHubId(hubId)) {
         return nullptr;
     } else {
-        return mCachedHubInfo[hubId].callBack;
+        return mCachedHubInfo[hubId].callback;
     }
 }
 
@@ -193,8 +204,22 @@
                                                      contextHubCb,
                                                      this) == 0) {
         // Initialized && valid hub && subscription successful
+        if (mCachedHubInfo[hubId].callback != nullptr) {
+            ALOGD("Modifying callback for hubId %" PRIu32, hubId);
+            mCachedHubInfo[hubId].callback->unlinkToDeath(mDeathRecipient);
+        }
+
+        mCachedHubInfo[hubId].callback = cb;
+        if (cb != nullptr) {
+            Return<bool> linkResult = cb->linkToDeath(mDeathRecipient, hubId);
+            bool linkSuccess = linkResult.isOk() ?
+                static_cast<bool>(linkResult) : false;
+            if (!linkSuccess) {
+                ALOGW("Couldn't link death recipient for hubId %" PRIu32,
+                      hubId);
+            }
+        }
         retVal = Result::OK;
-        mCachedHubInfo[hubId].callBack = cb;
     } else {
         // Initalized && valid hubId - but subscription unsuccessful
         // This is likely an internal error in the HAL implementation, but we
@@ -309,6 +334,16 @@
       return retVal;
 }
 
+void Contexthub::handleServiceDeath(uint32_t hubId) {
+    ALOGI("Callback/service died for hubId %" PRIu32, hubId);
+    int ret = mContextHubModule->subscribe_messages(hubId, nullptr, nullptr);
+    if (ret != 0) {
+        ALOGW("Failed to unregister callback from hubId %" PRIu32 ": %d",
+              hubId, ret);
+    }
+    mCachedHubInfo[hubId].callback.clear();
+}
+
 int Contexthub::contextHubCb(uint32_t hubId,
                              const struct hub_message_t *rxMsg,
                              void *cookie) {
diff --git a/contexthub/1.0/default/Contexthub.h b/contexthub/1.0/default/Contexthub.h
index e587930..cf2bc45 100644
--- a/contexthub/1.0/default/Contexthub.h
+++ b/contexthub/1.0/default/Contexthub.h
@@ -66,14 +66,26 @@
 
     struct CachedHubInformation{
         struct hub_app_name_t osAppName;
-        sp<IContexthubCallback> callBack;
+        sp<IContexthubCallback> callback;
+    };
+
+    class DeathRecipient : public hidl_death_recipient {
+    public:
+        DeathRecipient(const sp<Contexthub> contexthub);
+
+        void serviceDied(
+                uint64_t cookie,
+                const wp<::android::hidl::base::V1_0::IBase>& who) override;
+
+    private:
+        sp<Contexthub> mContexthub;
     };
 
     status_t mInitCheck;
     const struct context_hub_module_t *mContextHubModule;
     std::unordered_map<uint32_t, CachedHubInformation> mCachedHubInfo;
 
-    sp<IContexthubCallback> mCb;
+    sp<DeathRecipient> mDeathRecipient;
     bool mIsTransactionPending;
     uint32_t mTransactionId;
 
@@ -86,6 +98,9 @@
                         const uint8_t *msg,
                         int msgLen);
 
+    // Handle the case where the callback registered for the given hub ID dies
+    void handleServiceDeath(uint32_t hubId);
+
     static int contextHubCb(uint32_t hubId,
                             const struct hub_message_t *rxMsg,
                             void *cookie);
diff --git a/current.txt b/current.txt
index e254ed9..5c9d372 100644
--- a/current.txt
+++ b/current.txt
@@ -30,7 +30,7 @@
 f2904a4c108ad1b93eb2fa4e43b82bd01ce1ff26156316e49d1d9fc80dfecaad android.hardware.automotive.evs@1.0::IEvsCamera
 94cba6ad04c83aa840de2ed52b74ba2126a26dd960225e61ac36703315279a80 android.hardware.automotive.evs@1.0::IEvsCameraStream
 5ea36fb043d9e3b413219de3dfd7b046b48af4fda39f167f3528652e986cb76d android.hardware.automotive.evs@1.0::IEvsDisplay
-4360e4396dee5a36d8543e12b1bbdeb765724dddf0dca0204ea1e9496ed8441d android.hardware.automotive.evs@1.0::IEvsEnumerator
+14ef8e993a4a7c899b19bb5e39b5b0cafd28312ea2b127e35b3be8f08e23fe8e android.hardware.automotive.evs@1.0::IEvsEnumerator
 3b17c1fdfc389e0abe626c37054954b07201127d890c2bc05d47613ec1f4de4f android.hardware.automotive.evs@1.0::types
 cde0787e4bf4b450a9ceb9011d2698c0061322eb882621e89b70594b0b7c65c5 android.hardware.automotive.vehicle@2.0::IVehicle
 80fb4156fa91ce86e49bd2cabe215078f6b69591d416a09e914532eae6712052 android.hardware.automotive.vehicle@2.0::IVehicleCallback
diff --git a/dumpstate/1.0/vts/functional/Android.bp b/dumpstate/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..a1c735b
--- /dev/null
+++ b/dumpstate/1.0/vts/functional/Android.bp
@@ -0,0 +1,32 @@
+//
+// Copyright (C) 2017 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.
+
+cc_test {
+    name: "VtsHalDumpstateV1_0TargetTest",
+    defaults: ["hidl_defaults"],
+    srcs: ["VtsHalDumpstateV1_0TargetTest.cpp"],
+    shared_libs: [
+        "android.hardware.dumpstate@1.0",
+        "libcutils",
+        "libhidlbase",
+        "liblog",
+        "libutils",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
diff --git a/dumpstate/1.0/vts/functional/VtsHalDumpstateV1_0TargetTest.cpp b/dumpstate/1.0/vts/functional/VtsHalDumpstateV1_0TargetTest.cpp
new file mode 100644
index 0000000..7ab4812
--- /dev/null
+++ b/dumpstate/1.0/vts/functional/VtsHalDumpstateV1_0TargetTest.cpp
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#define LOG_TAG "dumpstate_hidl_hal_test"
+
+#include <android/hardware/dumpstate/1.0/IDumpstateDevice.h>
+#include <cutils/native_handle.h>
+#include <log/log.h>
+
+#include <VtsHalHidlTargetTestBase.h>
+
+using ::android::hardware::dumpstate::V1_0::IDumpstateDevice;
+using ::android::hardware::Return;
+using ::android::sp;
+
+class DumpstateHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+   public:
+    virtual void SetUp() override {
+        dumpstate = ::testing::VtsHalHidlTargetTestBase::getService<IDumpstateDevice>();
+        ASSERT_NE(dumpstate, nullptr) << "Could not get HIDL instance";
+    }
+
+    sp<IDumpstateDevice> dumpstate;
+};
+
+// Negative test: make sure dumpstateBoard() doesn't crash when passed a null pointer.
+TEST_F(DumpstateHidlTest, TestNullHandle) {
+    Return<void> status = dumpstate->dumpstateBoard(nullptr);
+
+    ASSERT_TRUE(status.isOk()) << "Status should be ok: " << status.description();
+}
+
+// Negative test: make sure dumpstateBoard() ignores a handle with no FD.
+TEST_F(DumpstateHidlTest, TestHandleWithNoFd) {
+    native_handle_t* handle = native_handle_create(0, 0);
+    ASSERT_NE(handle, nullptr) << "Could not create native_handle";
+
+    Return<void> status = dumpstate->dumpstateBoard(handle);
+
+    ASSERT_TRUE(status.isOk()) << "Status should be ok: " << status.description();
+
+    native_handle_close(handle);
+    native_handle_delete(handle);
+}
+
+// Positive test: make sure dumpstateBoard() writes something to the FD.
+TEST_F(DumpstateHidlTest, TestOk) {
+    FILE* file = tmpfile();
+    ASSERT_NE(nullptr, file) << "Could not create temp file: " << strerror(errno);
+
+    native_handle_t* handle = native_handle_create(1, 0);
+    ASSERT_NE(handle, nullptr) << "Could not create native_handle";
+    handle->data[0] = fileno(file);
+
+    Return<void> status = dumpstate->dumpstateBoard(handle);
+    ASSERT_TRUE(status.isOk()) << "Status should be ok: " << status.description();
+
+    // Check that at least one byte was written
+    rewind(file);  // can not fail
+    char buff;
+    int read = fread(&buff, sizeof(buff), 1, file);
+    ASSERT_EQ(1, read) << "dumped nothing";
+
+    EXPECT_EQ(0, fclose(file)) << errno;
+
+    native_handle_close(handle);
+    native_handle_delete(handle);
+}
+
+int main(int argc, char** argv) {
+    ::testing::InitGoogleTest(&argc, argv);
+    int status = RUN_ALL_TESTS();
+    ALOGI("Test result = %d", status);
+    return status;
+}
diff --git a/dumpstate/Android.bp b/dumpstate/Android.bp
index bbb3e4b..33f70eb 100644
--- a/dumpstate/Android.bp
+++ b/dumpstate/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
     "1.0",
+    "1.0/vts/functional",
 ]
diff --git a/gnss/1.0/default/android.hardware.gnss@1.0-service.rc b/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
index 1f6d13e..e629955 100644
--- a/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
+++ b/gnss/1.0/default/android.hardware.gnss@1.0-service.rc
@@ -1,4 +1,4 @@
 service gnss_service /vendor/bin/hw/android.hardware.gnss@1.0-service
     class hal
     user gps
-    group system gps
+    group system gps radio
diff --git a/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp b/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
index fcd4dec..d4360d8 100644
--- a/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
+++ b/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
@@ -47,6 +47,7 @@
 string service_name = "default";
 
 static bool arm_deleteAllKeys = false;
+static bool dump_Attestations = false;
 
 namespace android {
 namespace hardware {
@@ -233,6 +234,19 @@
     return b;
 }
 
+char nibble2hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
+                       '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+string bin2hex(const hidl_vec<uint8_t>& data) {
+    string retval;
+    retval.reserve(data.size() * 2 + 1);
+    for (uint8_t byte : data) {
+        retval.push_back(nibble2hex[0x0F & (byte >> 4)]);
+        retval.push_back(nibble2hex[0x0F & byte]);
+    }
+    return retval;
+}
+
 string rsa_key = hex2str("30820275020100300d06092a864886f70d01010105000482025f3082025b"
                          "02010002818100c6095409047d8634812d5a218176e45c41d60a75b13901"
                          "f234226cffe776521c5a77b9e389417b71c0b6a44d13afe4e4a2805d46c9"
@@ -273,11 +287,13 @@
 
 bool verify_chain(const hidl_vec<hidl_vec<uint8_t>>& chain) {
     for (size_t i = 0; i < chain.size() - 1; ++i) {
-        auto& key_cert_blob = chain[i];
-        auto& signing_cert_blob = chain[i + 1];
-
-        X509_Ptr key_cert(parse_cert_blob(key_cert_blob));
-        X509_Ptr signing_cert(parse_cert_blob(signing_cert_blob));
+        X509_Ptr key_cert(parse_cert_blob(chain[i]));
+        X509_Ptr signing_cert;
+        if (i < chain.size() - 1) {
+            signing_cert.reset(parse_cert_blob(chain[i + 1]));
+        } else {
+            signing_cert.reset(parse_cert_blob(chain[i]));
+        }
         EXPECT_TRUE(!!key_cert.get() && !!signing_cert.get());
         if (!key_cert.get() || !signing_cert.get()) return false;
 
@@ -287,6 +303,24 @@
 
         EXPECT_EQ(1, X509_verify(key_cert.get(), signing_pubkey.get()))
             << "Verification of certificate " << i << " failed";
+
+        char* cert_issuer =  //
+            X509_NAME_oneline(X509_get_issuer_name(key_cert.get()), nullptr, 0);
+        char* signer_subj =
+            X509_NAME_oneline(X509_get_subject_name(signing_cert.get()), nullptr, 0);
+        EXPECT_STREQ(cert_issuer, signer_subj) << "Cert " << i
+                                               << " has wrong issuer.  (Possibly b/38394614)";
+        if (i == 0) {
+            char* cert_sub = X509_NAME_oneline(X509_get_subject_name(key_cert.get()), nullptr, 0);
+            EXPECT_STREQ("/CN=Android Keystore Key", cert_sub)
+                << "Cert " << i << " has wrong subject.  (Possibly b/38394614)";
+            free(cert_sub);
+        }
+
+        free(cert_issuer);
+        free(signer_subj);
+
+        if (dump_Attestations) std::cout << bin2hex(chain[i]) << std::endl;
     }
 
     return true;
@@ -491,9 +525,10 @@
     }
 
     ErrorCode DeleteKey(HidlBuf* key_blob, bool keep_key_blob = false) {
-        ErrorCode error = keymaster_->deleteKey(*key_blob);
+        auto rc = keymaster_->deleteKey(*key_blob);
         if (!keep_key_blob) *key_blob = HidlBuf();
-        return error;
+        if (!rc.isOk()) return ErrorCode::UNKNOWN_ERROR;
+        return rc;
     }
 
     ErrorCode DeleteKey(bool keep_key_blob = false) {
@@ -507,12 +542,15 @@
 
     ErrorCode GetCharacteristics(const HidlBuf& key_blob, const HidlBuf& client_id,
                                  const HidlBuf& app_data, KeyCharacteristics* key_characteristics) {
-        ErrorCode error;
-        keymaster_->getKeyCharacteristics(
-            key_blob, client_id, app_data,
-            [&](ErrorCode hidl_error, const KeyCharacteristics& hidl_key_characteristics) {
-                error = hidl_error, *key_characteristics = hidl_key_characteristics;
-            });
+        ErrorCode error = ErrorCode::UNKNOWN_ERROR;
+        EXPECT_TRUE(
+            keymaster_
+                ->getKeyCharacteristics(
+                    key_blob, client_id, app_data,
+                    [&](ErrorCode hidl_error, const KeyCharacteristics& hidl_key_characteristics) {
+                        error = hidl_error, *key_characteristics = hidl_key_characteristics;
+                    })
+                .isOk());
         return error;
     }
 
@@ -650,12 +688,16 @@
                         hidl_vec<hidl_vec<uint8_t>>* cert_chain) {
         SCOPED_TRACE("AttestKey");
         ErrorCode error;
-        keymaster_->attestKey(
+        auto rc = keymaster_->attestKey(
             key_blob, attest_params.hidl_data(),
             [&](ErrorCode hidl_error, const hidl_vec<hidl_vec<uint8_t>>& hidl_cert_chain) {
                 error = hidl_error;
                 *cert_chain = hidl_cert_chain;
             });
+
+        EXPECT_TRUE(rc.isOk()) << rc.description();
+        if (!rc.isOk()) return ErrorCode::UNKNOWN_ERROR;
+
         return error;
     }
 
@@ -959,11 +1001,13 @@
 
     att_sw_enforced.Sort();
     expected_sw_enforced.Sort();
-    EXPECT_EQ(filter_tags(expected_sw_enforced), filter_tags(att_sw_enforced));
+    EXPECT_EQ(filter_tags(expected_sw_enforced), filter_tags(att_sw_enforced))
+        << "(Possibly b/38394619)";
 
     att_tee_enforced.Sort();
     expected_tee_enforced.Sort();
-    EXPECT_EQ(filter_tags(expected_tee_enforced), filter_tags(att_tee_enforced));
+    EXPECT_EQ(filter_tags(expected_tee_enforced), filter_tags(att_tee_enforced))
+        << "(Possibly b/38394619)";
 
     return true;
 }
@@ -3839,13 +3883,11 @@
                                              .Authorization(TAG_INCLUDE_UNIQUE_ID)));
 
     hidl_vec<hidl_vec<uint8_t>> cert_chain;
-    EXPECT_EQ(
-        ErrorCode::OK,
-        AttestKey(
-            AuthorizationSetBuilder()
-                .Authorization(TAG_ATTESTATION_CHALLENGE, HidlBuf("challenge"))
-                .Authorization(TAG_ATTESTATION_APPLICATION_ID, HidlBuf("foo")),
-            &cert_chain));
+    ASSERT_EQ(ErrorCode::OK,
+              AttestKey(AuthorizationSetBuilder()
+                            .Authorization(TAG_ATTESTATION_CHALLENGE, HidlBuf("challenge"))
+                            .Authorization(TAG_ATTESTATION_APPLICATION_ID, HidlBuf("foo")),
+                        &cert_chain));
     EXPECT_GE(cert_chain.size(), 2U);
     EXPECT_TRUE(verify_chain(cert_chain));
     EXPECT_TRUE(
@@ -3889,13 +3931,11 @@
                                              .Authorization(TAG_INCLUDE_UNIQUE_ID)));
 
     hidl_vec<hidl_vec<uint8_t>> cert_chain;
-    EXPECT_EQ(
-        ErrorCode::OK,
-        AttestKey(
-            AuthorizationSetBuilder()
-                .Authorization(TAG_ATTESTATION_CHALLENGE, HidlBuf("challenge"))
-                .Authorization(TAG_ATTESTATION_APPLICATION_ID, HidlBuf("foo")),
-            &cert_chain));
+    ASSERT_EQ(ErrorCode::OK,
+              AttestKey(AuthorizationSetBuilder()
+                            .Authorization(TAG_ATTESTATION_CHALLENGE, HidlBuf("challenge"))
+                            .Authorization(TAG_ATTESTATION_APPLICATION_ID, HidlBuf("foo")),
+                        &cert_chain));
     EXPECT_GE(cert_chain.size(), 2U);
     EXPECT_TRUE(verify_chain(cert_chain));
 
@@ -4008,7 +4048,8 @@
             Begin(KeyPurpose::SIGN, key_blob_, AuthorizationSetBuilder()
                                                    .Digest(Digest::NONE)
                                                    .Padding(PaddingMode::NONE),
-                  &begin_out_params, &op_handle_));
+                  &begin_out_params, &op_handle_))
+            << " (Possibly b/37623742)";
     } else {
         EXPECT_EQ(ErrorCode::OK, Begin(KeyPurpose::SIGN, key_blob_,
                                        AuthorizationSetBuilder()
@@ -4111,6 +4152,9 @@
             if (std::string(argv[i]) == "--arm_deleteAllKeys") {
                 arm_deleteAllKeys = true;
             }
+            if (std::string(argv[i]) == "--dump_attestations") {
+                dump_Attestations = true;
+            }
         } else {
             positional_args.push_back(argv[i]);
         }
diff --git a/media/Android.bp b/media/Android.bp
index f25a609..53e82bd 100644
--- a/media/Android.bp
+++ b/media/Android.bp
@@ -3,6 +3,7 @@
     "1.0",
     "omx/1.0",
     "omx/1.0/vts/functional/audio",
+    "omx/1.0/vts/functional/common",
     "omx/1.0/vts/functional/component",
     "omx/1.0/vts/functional/master",
     "omx/1.0/vts/functional/video",
diff --git a/media/omx/1.0/vts/functional/README.md b/media/omx/1.0/vts/functional/README.md
index fa88811..acffc42 100644
--- a/media/omx/1.0/vts/functional/README.md
+++ b/media/omx/1.0/vts/functional/README.md
@@ -9,7 +9,7 @@
 usage: VtsHalMediaOmxV1\_0TargetMasterTest -I default
 
 #### component :
-This folder includes test fixtures that tests aspects common to all omx compatible components. For instance, port enabling/disabling, enumerating port formats, state transitions, flush, ..., stay common to all components irrespective of the service they offer. Test fixtures are directed towards testing the omx core. Every standard OMX compatible component is expected to pass these tests.
+This folder includes test fixtures that tests aspects common to all omx compatible components. For instance, port enabling/disabling, enumerating port formats, state transitions, flush, ..., stay common to all components irrespective of the service they offer. Test fixtures here are directed towards testing these (omx core). Every standard OMX compatible component is expected to pass these tests.
 
 usage: VtsHalMediaOmxV1\_0TargetComponentTest -I default -C <comp name> -R <comp role>
 
@@ -31,3 +31,4 @@
 
 VtsHalMediaOmxV1\_0TargetVideoEncTest -I default -C <comp name> -R video_encoder.<comp class> -P /sdcard/media/
 
+While tesing audio/video encoder, decoder components, test fixtures require input files. These input are files are present in the folder 'res'. Before running the tests all the files in 'res' have to be placed in '/media/sdcard/' or a path of your choice and this path needs to be provided as an argument to the test application
\ No newline at end of file
diff --git a/media/omx/1.0/vts/functional/audio/Android.bp b/media/omx/1.0/vts/functional/audio/Android.bp
index d6c73ce..66fd20b 100644
--- a/media/omx/1.0/vts/functional/audio/Android.bp
+++ b/media/omx/1.0/vts/functional/audio/Android.bp
@@ -34,7 +34,8 @@
         "android.hidl.memory@1.0",
         "android.hardware.media.omx@1.0",
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: ["VtsHalHidlTargetTestBase",
+                  "VtsHalMediaOmxV1_0CommonUtil"],
     cflags: [
         "-O0",
         "-g",
@@ -65,7 +66,8 @@
         "android.hidl.memory@1.0",
         "android.hardware.media.omx@1.0",
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: ["VtsHalHidlTargetTestBase",
+                  "VtsHalMediaOmxV1_0CommonUtil"],
     cflags: [
         "-O0",
         "-g",
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
index 1cc1817..5ba195e 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
@@ -30,6 +30,7 @@
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -136,7 +137,9 @@
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
         observer =
-            new CodecObserver([this](Message msg) { handleMessage(msg); });
+            new CodecObserver([this](Message msg, const BufferInfo* buffer) {
+                handleMessage(msg, buffer);
+            });
         ASSERT_NE(observer, nullptr);
         if (strncmp(gEnv->getComponent().c_str(), "OMX.", 4) != 0)
             disableTest = true;
@@ -218,7 +221,8 @@
 
     // callback function to process messages received by onMessages() from IL
     // client.
-    void handleMessage(Message msg) {
+    void handleMessage(Message msg, const BufferInfo* buffer) {
+        (void)buffer;
         if (msg.type == Message::Type::FILL_BUFFER_DONE) {
             if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
                 eosFlag = true;
@@ -254,13 +258,26 @@
                         }
                     }
                 }
+#define WRITE_OUTPUT 0
+#if WRITE_OUTPUT
+                static int count = 0;
+                FILE* ofp = nullptr;
+                if (count)
+                    ofp = fopen("out.bin", "ab");
+                else
+                    ofp = fopen("out.bin", "wb");
+                if (ofp != nullptr) {
+                    fwrite(static_cast<void*>(buffer->mMemory->getPointer()),
+                           sizeof(char),
+                           msg.data.extendedBufferData.rangeLength, ofp);
+                    fclose(ofp);
+                    count++;
+                }
+#endif
             }
         }
     }
 
-    void testEOS(android::Vector<BufferInfo>* iBuffer,
-                 android::Vector<BufferInfo>* oBuffer, bool signalEOS = false);
-
     enum standardComp {
         mp3,
         amrnb,
@@ -294,44 +311,6 @@
     }
 };
 
-// end of stream test for audio decoder components
-void AudioDecHidlTest::testEOS(android::Vector<BufferInfo>* iBuffer,
-                               android::Vector<BufferInfo>* oBuffer,
-                               bool signalEOS) {
-    android::hardware::media::omx::V1_0::Status status;
-    size_t i = 0;
-    if (signalEOS) {
-        if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
-            // signal an empty buffer with flag set to EOS
-            dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0);
-        } else {
-            ASSERT_TRUE(false);
-        }
-    }
-    // Dispatch all client owned output buffers to recover remaining frames
-    while (1) {
-        if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
-            dispatchOutputBuffer(omxNode, oBuffer, i);
-        } else {
-            break;
-        }
-    }
-    while (1) {
-        Message msg;
-        status =
-            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-        EXPECT_EQ(status,
-                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-        for (; i < iBuffer->size(); i++) {
-            if ((*iBuffer)[i].owner != client) break;
-        }
-        if (i == iBuffer->size()) break;
-    }
-    // test for flag
-    EXPECT_EQ(eosFlag, true);
-    eosFlag = false;
-}
-
 // Set Default port param.
 void setDefaultPortParam(
     sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding,
@@ -580,8 +559,9 @@
                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
+    int timeOut = TIMEOUT_COUNTER;
 
-    while (1) {
+    while (timeOut--) {
         size_t i = 0;
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -603,6 +583,7 @@
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
         }
+        timeOut--;
     }
 }
 
@@ -642,6 +623,8 @@
         frameID++;
     }
 
+    int timeOut = TIMEOUT_COUNTER;
+    bool stall = false;
     while (1) {
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -672,9 +655,21 @@
                                 (*Info)[frameID].bytesCount, flags,
                                 (*Info)[frameID].timestamp);
             frameID++;
-        }
+            stall = false;
+        } else
+            stall = true;
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
+            stall = false;
+        } else
+            stall = true;
+        if (stall)
+            timeOut--;
+        else
+            timeOut = TIMEOUT_COUNTER;
+        if (timeOut == 0) {
+            EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite";
+            break;
         }
     }
 }
@@ -778,7 +773,7 @@
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                            kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
     EXPECT_EQ(timestampUslist.empty(), true);
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -825,7 +820,7 @@
     changeStateIdletoExecute(omxNode, observer);
 
     // request EOS at the start
-    testEOS(&iBuffer, &oBuffer, true);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 0U);
@@ -908,7 +903,7 @@
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                            kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 1U);
@@ -924,7 +919,7 @@
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                            kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer, true);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 1U);
@@ -1004,7 +999,7 @@
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                            kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     framesReceived = 0;
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
index 7d5f968..ecd9ef9 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
@@ -30,6 +30,7 @@
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -135,7 +136,10 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver([](Message msg) { (void)msg; });
+        observer =
+            new CodecObserver([this](Message msg, const BufferInfo* buffer) {
+                handleMessage(msg, buffer);
+            });
         ASSERT_NE(observer, nullptr);
         if (strncmp(gEnv->getComponent().c_str(), "OMX.", 4) != 0)
             disableTest = true;
@@ -191,6 +195,7 @@
             }
         }
         if (i == kNumCompToCoding) disableTest = true;
+        eosFlag = false;
         if (disableTest) std::cerr << "[          ] Warning !  Test Disabled\n";
     }
 
@@ -201,6 +206,36 @@
         }
     }
 
+    // callback function to process messages received by onMessages() from IL
+    // client.
+    void handleMessage(Message msg, const BufferInfo* buffer) {
+        (void)buffer;
+
+        if (msg.type == Message::Type::FILL_BUFFER_DONE) {
+            if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
+                eosFlag = true;
+            }
+            if (msg.data.extendedBufferData.rangeLength != 0) {
+#define WRITE_OUTPUT 0
+#if WRITE_OUTPUT
+                static int count = 0;
+                FILE* ofp = nullptr;
+                if (count)
+                    ofp = fopen("out.bin", "ab");
+                else
+                    ofp = fopen("out.bin", "wb");
+                if (ofp != nullptr) {
+                    fwrite(static_cast<void*>(buffer->mMemory->getPointer()),
+                           sizeof(char),
+                           msg.data.extendedBufferData.rangeLength, ofp);
+                    fclose(ofp);
+                    count++;
+                }
+#endif
+            }
+        }
+    }
+
     enum standardComp {
         amrnb,
         amrwb,
@@ -215,6 +250,7 @@
     standardComp compName;
     OMX_AUDIO_CODINGTYPE eEncoding;
     bool disableTest;
+    bool eosFlag;
 
    protected:
     static void description(const std::string& description) {
@@ -289,12 +325,44 @@
     }
 }
 
+// blocking call to ensures application to Wait till all the inputs are consumed
+void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                            android::Vector<BufferInfo>* iBuffer,
+                            android::Vector<BufferInfo>* oBuffer) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+    int timeOut = TIMEOUT_COUNTER;
+
+    while (timeOut--) {
+        size_t i = 0;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        EXPECT_EQ(status,
+                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+        // status == TIMED_OUT, it could be due to process time being large
+        // than DEFAULT_TIMEOUT or component needs output buffers to start
+        // processing.
+        for (; i < iBuffer->size(); i++) {
+            if ((*iBuffer)[i].owner != client) break;
+        }
+        if (i == iBuffer->size()) break;
+
+        // Dispatch an output buffer assuming outQueue.empty() is true
+        size_t index;
+        if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, index);
+        }
+        timeOut--;
+    }
+}
+
 // Encode N Frames
 void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                    android::Vector<BufferInfo>* iBuffer,
                    android::Vector<BufferInfo>* oBuffer, uint32_t nFrames,
                    int32_t samplesPerFrame, int32_t nChannels,
-                   int32_t nSampleRate, std::ifstream& eleStream) {
+                   int32_t nSampleRate, std::ifstream& eleStream,
+                   bool signalEOS = true) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
@@ -307,6 +375,7 @@
     int32_t timestampIncr =
         (int)(((float)samplesPerFrame / nSampleRate) * 1000000);
     uint64_t timestamp = 0;
+    uint32_t flags = 0;
     for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
         char* ipBuffer = static_cast<char*>(
             static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
@@ -314,11 +383,14 @@
                   static_cast<int>((*iBuffer)[i].mMemory->getSize()));
         eleStream.read(ipBuffer, bytesCount);
         if (eleStream.gcount() != bytesCount) break;
-        dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, 0, timestamp);
+        if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+        dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, flags, timestamp);
         timestamp += timestampIncr;
         nFrames--;
     }
 
+    int timeOut = TIMEOUT_COUNTER;
+    bool stall = false;
     while (1) {
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -337,14 +409,27 @@
                       static_cast<int>((*iBuffer)[index].mMemory->getSize()));
             eleStream.read(ipBuffer, bytesCount);
             if (eleStream.gcount() != bytesCount) break;
-            dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, 0,
+            if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+            dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags,
                                 timestamp);
             timestamp += timestampIncr;
             nFrames--;
-        }
+            stall = false;
+        } else
+            stall = true;
         // Dispatch output buffer
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
+            stall = false;
+        } else
+            stall = true;
+        if (stall)
+            timeOut--;
+        else
+            timeOut = TIMEOUT_COUNTER;
+        if (timeOut == 0) {
+            EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite";
+            break;
         }
     }
 }
@@ -380,8 +465,8 @@
 }
 
 // test raw stream encode
-TEST_F(AudioEncHidlTest, EncodeTest) {
-    description("Tests Encode");
+TEST_F(AudioEncHidlTest, SimpleEncodeTest) {
+    description("Tests Basic encoding and EOS");
     if (disableTest) return;
     android::hardware::media::omx::V1_0::Status status;
     uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
@@ -399,8 +484,6 @@
     GetURLForComponent(compName, mURL);
 
     std::ifstream eleStream;
-    eleStream.open(mURL, std::ifstream::binary);
-    ASSERT_EQ(eleStream.is_open(), true);
 
     // Configure input port
     int32_t nChannels = 2;
@@ -449,16 +532,19 @@
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
-    encodeNFrames(omxNode, observer, &iBuffer, &oBuffer, 1024, samplesPerFrame,
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    encodeNFrames(omxNode, observer, &iBuffer, &oBuffer, 128, samplesPerFrame,
                   nChannels, nSampleRate, eleStream);
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
 
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
     // set state to executing
     changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                             kPortIndexInput, kPortIndexOutput);
-
-    eleStream.close();
 }
 
 int main(int argc, char** argv) {
diff --git a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
index f09d21d..abd044d 100644
--- a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
@@ -30,6 +30,7 @@
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -45,277 +46,6 @@
 #include <media_hidl_test_common.h>
 #include <memory>
 
-// allocate buffers needed on a component port
-void allocatePortBuffers(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         OMX_U32 portIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    OMX_PARAM_PORTDEFINITIONTYPE portDef;
-
-    buffArray->clear();
-
-    sp<IAllocator> allocator = IAllocator::getService("ashmem");
-    EXPECT_NE(allocator.get(), nullptr);
-
-    status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
-                          &portDef);
-    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-
-    for (size_t i = 0; i < portDef.nBufferCountActual; i++) {
-        BufferInfo buffer;
-        buffer.owner = client;
-        buffer.omxBuffer.type = CodecBuffer::Type::SHARED_MEM;
-        buffer.omxBuffer.attr.preset.rangeOffset = 0;
-        buffer.omxBuffer.attr.preset.rangeLength = 0;
-        bool success = false;
-        allocator->allocate(
-            portDef.nBufferSize,
-            [&success, &buffer](bool _s,
-                                ::android::hardware::hidl_memory const& mem) {
-                success = _s;
-                buffer.omxBuffer.sharedMemory = mem;
-            });
-        ASSERT_EQ(success, true);
-        ASSERT_EQ(buffer.omxBuffer.sharedMemory.size(), portDef.nBufferSize);
-        buffer.mMemory = mapMemory(buffer.omxBuffer.sharedMemory);
-        ASSERT_NE(buffer.mMemory, nullptr);
-        omxNode->useBuffer(
-            portIndex, buffer.omxBuffer,
-            [&status, &buffer](android::hardware::media::omx::V1_0::Status _s,
-                               uint32_t id) {
-                status = _s;
-                buffer.id = id;
-            });
-        buffArray->push(buffer);
-        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-    }
-}
-
-// State Transition : Loaded -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on input port
-    allocatePortBuffers(omxNode, iBuffer, kPortIndexInput);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on output port
-    allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
-
-    // As the ports are populated, check if the state transition is complete
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    return;
-}
-
-// State Transition : Idle -> Loaded
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Loaded
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateLoaded);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexInput, (*iBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);
-
-    return;
-}
-
-// State Transition : Idle -> Execute
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoExecute(sp<IOmxNode> omxNode,
-                              sp<CodecObserver> observer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to execute
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateExecuting);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateExecuting);
-
-    return;
-}
-
-// State Transition : Execute -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                              android::Vector<BufferInfo>* iBuffer,
-                              android::Vector<BufferInfo>* oBuffer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-}
-
-// get empty buffer index
-size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray) {
-    for (size_t i = 0; i < buffArray->size(); i++) {
-        if ((*buffArray)[i].owner == client) return i;
-    }
-    return buffArray->size();
-}
-
-// dispatch buffer to output port
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = 0;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// dispatch buffer to input port
-void dispatchInputBuffer(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         size_t bufferIndex, int bytesCount, uint32_t flags,
-                         uint64_t timestamp) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = bytesCount;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t, flags,
-                                  timestamp, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// Flush input and output ports
-void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                android::Vector<BufferInfo>* iBuffer,
-                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput, int64_t timeoutUs) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // Flush input port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexInput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexInput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-
-    // Flush output port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexOutput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-}
-
 Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding) {
     OMX_U32 index = 0;
diff --git a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
index d420ab5..a762436 100644
--- a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016, The Android Open Source Project
+ * Copyright (C) 2017 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.
@@ -18,6 +18,7 @@
 #define MEDIA_AUDIO_HIDL_TEST_COMMON_H
 
 #include <media_hidl_test_common.h>
+
 /*
  * Random Index used for monkey testing while get/set parameters
  */
@@ -26,42 +27,6 @@
 /*
  * Common audio utils
  */
-void allocatePortBuffers(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         OMX_U32 portIndex);
-
-void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
-
-void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
-
-void changeStateIdletoExecute(sp<IOmxNode> omxNode, sp<CodecObserver> observer);
-
-void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                              android::Vector<BufferInfo>* iBuffer,
-                              android::Vector<BufferInfo>* oBuffer);
-
-size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray);
-
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex);
-
-void dispatchInputBuffer(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         size_t bufferIndex, int bytesCount, uint32_t flags,
-                         uint64_t timestamp);
-
-void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                android::Vector<BufferInfo>* iBuffer,
-                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
-
 Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding);
 
diff --git a/media/omx/1.0/vts/functional/common/Android.bp b/media/omx/1.0/vts/functional/common/Android.bp
new file mode 100755
index 0000000..93251fe
--- /dev/null
+++ b/media/omx/1.0/vts/functional/common/Android.bp
@@ -0,0 +1,33 @@
+//
+// Copyright (C) 2017 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.
+//
+
+cc_library_static {
+    name: "VtsHalMediaOmxV1_0CommonUtil",
+    defaults: ["hidl_defaults"],
+    srcs: ["media_hidl_test_common.cpp"],
+    shared_libs: [
+        "liblog",
+        "libhidlmemory",
+        "android.hidl.allocator@1.0",
+        "android.hidl.memory@1.0",
+        "android.hardware.media.omx@1.0",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [ "-O0", "-g", ],
+    include_dirs: [
+        "frameworks/native/include/media/openmax/",
+    ],
+}
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
new file mode 100755
index 0000000..01d7751
--- /dev/null
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#define LOG_TAG "media_omx_hidl_video_test_common"
+
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
+#include <android-base/logging.h>
+
+#include <android/hardware/media/omx/1.0/IOmx.h>
+#include <android/hardware/media/omx/1.0/IOmxNode.h>
+#include <android/hardware/media/omx/1.0/IOmxObserver.h>
+#include <android/hardware/media/omx/1.0/types.h>
+#include <android/hidl/allocator/1.0/IAllocator.h>
+#include <android/hidl/memory/1.0/IMapper.h>
+#include <android/hidl/memory/1.0/IMemory.h>
+
+using ::android::hardware::media::omx::V1_0::IOmx;
+using ::android::hardware::media::omx::V1_0::IOmxObserver;
+using ::android::hardware::media::omx::V1_0::IOmxNode;
+using ::android::hardware::media::omx::V1_0::Message;
+using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
+using ::android::hidl::allocator::V1_0::IAllocator;
+using ::android::hidl::memory::V1_0::IMemory;
+using ::android::hidl::memory::V1_0::IMapper;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+#include <VtsHalHidlTargetTestBase.h>
+#include <hidlmemory/mapping.h>
+#include <media/hardware/HardwareAPI.h>
+#include <media_hidl_test_common.h>
+#include <memory>
+
+// allocate buffers needed on a component port
+void allocatePortBuffers(sp<IOmxNode> omxNode,
+                         android::Vector<BufferInfo>* buffArray,
+                         OMX_U32 portIndex, PortMode portMode) {
+    android::hardware::media::omx::V1_0::Status status;
+    OMX_PARAM_PORTDEFINITIONTYPE portDef;
+
+    buffArray->clear();
+
+    status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
+                          &portDef);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    if (portMode == PortMode::PRESET_SECURE_BUFFER) {
+        for (size_t i = 0; i < portDef.nBufferCountActual; i++) {
+            BufferInfo buffer;
+            buffer.owner = client;
+            buffer.omxBuffer.type = CodecBuffer::Type::NATIVE_HANDLE;
+            omxNode->allocateSecureBuffer(
+                portIndex, portDef.nBufferSize,
+                [&status, &buffer](
+                    android::hardware::media::omx::V1_0::Status _s, uint32_t id,
+                    ::android::hardware::hidl_handle const& nativeHandle) {
+                    status = _s;
+                    buffer.id = id;
+                    buffer.omxBuffer.nativeHandle = nativeHandle;
+                });
+            buffArray->push(buffer);
+            ASSERT_EQ(status,
+                      ::android::hardware::media::omx::V1_0::Status::OK);
+        }
+    } else if (portMode == PortMode::PRESET_BYTE_BUFFER ||
+               portMode == PortMode::DYNAMIC_ANW_BUFFER) {
+        sp<IAllocator> allocator = IAllocator::getService("ashmem");
+        EXPECT_NE(allocator.get(), nullptr);
+
+        for (size_t i = 0; i < portDef.nBufferCountActual; i++) {
+            BufferInfo buffer;
+            buffer.owner = client;
+            buffer.omxBuffer.type = CodecBuffer::Type::SHARED_MEM;
+            buffer.omxBuffer.attr.preset.rangeOffset = 0;
+            buffer.omxBuffer.attr.preset.rangeLength = 0;
+            bool success = false;
+            if (portMode != PortMode::PRESET_BYTE_BUFFER) {
+                portDef.nBufferSize = sizeof(android::VideoNativeMetadata);
+            }
+            allocator->allocate(
+                portDef.nBufferSize,
+                [&success, &buffer](
+                    bool _s, ::android::hardware::hidl_memory const& mem) {
+                    success = _s;
+                    buffer.omxBuffer.sharedMemory = mem;
+                });
+            ASSERT_EQ(success, true);
+            ASSERT_EQ(buffer.omxBuffer.sharedMemory.size(),
+                      portDef.nBufferSize);
+            buffer.mMemory = mapMemory(buffer.omxBuffer.sharedMemory);
+            ASSERT_NE(buffer.mMemory, nullptr);
+            if (portMode == PortMode::DYNAMIC_ANW_BUFFER) {
+                android::VideoNativeMetadata* metaData =
+                    static_cast<android::VideoNativeMetadata*>(
+                        static_cast<void*>(buffer.mMemory->getPointer()));
+                metaData->nFenceFd = -1;
+                buffer.slot = -1;
+            }
+            omxNode->useBuffer(
+                portIndex, buffer.omxBuffer,
+                [&status, &buffer](
+                    android::hardware::media::omx::V1_0::Status _s,
+                    uint32_t id) {
+                    status = _s;
+                    buffer.id = id;
+                });
+            buffArray->push(buffer);
+            ASSERT_EQ(status,
+                      ::android::hardware::media::omx::V1_0::Status::OK);
+        }
+    }
+}
+
+// State Transition : Loaded -> Idle
+// Note: This function does not make any background checks for this transition.
+// The callee holds the reponsibility to ensure the legality of the transition.
+void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                             android::Vector<BufferInfo>* iBuffer,
+                             android::Vector<BufferInfo>* oBuffer,
+                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
+                             PortMode* portMode) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+    PortMode defaultPortMode[2], *pm;
+
+    defaultPortMode[0] = PortMode::PRESET_BYTE_BUFFER;
+    defaultPortMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    pm = portMode ? portMode : defaultPortMode;
+
+    // set state to idle
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
+                                  OMX_StateIdle);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+
+    // Dont switch states until the ports are populated
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+
+    // allocate buffers on input port
+    allocatePortBuffers(omxNode, iBuffer, kPortIndexInput, pm[0]);
+
+    // Dont switch states until the ports are populated
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+
+    // allocate buffers on output port
+    allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput, pm[1]);
+
+    // As the ports are populated, check if the state transition is complete
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
+    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
+
+    return;
+}
+
+// State Transition : Idle -> Loaded
+// Note: This function does not make any background checks for this transition.
+// The callee holds the reponsibility to ensure the legality of the transition.
+void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                             android::Vector<BufferInfo>* iBuffer,
+                             android::Vector<BufferInfo>* oBuffer,
+                             OMX_U32 kPortIndexInput,
+                             OMX_U32 kPortIndexOutput) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    // set state to Loaded
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
+                                  OMX_StateLoaded);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+
+    // dont change state until all buffers are freed
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+
+    for (size_t i = 0; i < iBuffer->size(); ++i) {
+        status = omxNode->freeBuffer(kPortIndexInput, (*iBuffer)[i].id);
+        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    }
+
+    // dont change state until all buffers are freed
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+
+    for (size_t i = 0; i < oBuffer->size(); ++i) {
+        status = omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id);
+        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    }
+
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
+    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);
+
+    return;
+}
+
+// State Transition : Idle -> Execute
+// Note: This function does not make any background checks for this transition.
+// The callee holds the reponsibility to ensure the legality of the transition.
+void changeStateIdletoExecute(sp<IOmxNode> omxNode,
+                              sp<CodecObserver> observer) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    // set state to execute
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
+                                  OMX_StateExecuting);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
+    ASSERT_EQ(msg.data.eventData.data2, OMX_StateExecuting);
+
+    return;
+}
+
+// State Transition : Execute -> Idle
+// Note: This function does not make any background checks for this transition.
+// The callee holds the reponsibility to ensure the legality of the transition.
+void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                              android::Vector<BufferInfo>* iBuffer,
+                              android::Vector<BufferInfo>* oBuffer) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    // set state to Idle
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
+                                  OMX_StateIdle);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
+    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
+
+    // test if client got all its buffers back
+    for (size_t i = 0; i < oBuffer->size(); ++i) {
+        EXPECT_EQ((*oBuffer)[i].owner, client);
+    }
+    for (size_t i = 0; i < iBuffer->size(); ++i) {
+        EXPECT_EQ((*iBuffer)[i].owner, client);
+    }
+}
+
+// get empty buffer index
+size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray) {
+    android::Vector<BufferInfo>::iterator it = buffArray->begin();
+    while (it != buffArray->end()) {
+        if (it->owner == client) {
+            // This block of code ensures that all buffers allocated at init
+            // time are utilized
+            BufferInfo backup = *it;
+            buffArray->erase(it);
+            buffArray->push_back(backup);
+            return buffArray->size() - 1;
+        }
+        it++;
+    }
+    return buffArray->size();
+}
+
+// dispatch buffer to output port
+void dispatchOutputBuffer(sp<IOmxNode> omxNode,
+                          android::Vector<BufferInfo>* buffArray,
+                          size_t bufferIndex, PortMode portMode) {
+    if (portMode == PortMode::DYNAMIC_ANW_BUFFER) {
+        android::hardware::media::omx::V1_0::Status status;
+        CodecBuffer t = (*buffArray)[bufferIndex].omxBuffer;
+        t.type = CodecBuffer::Type::ANW_BUFFER;
+        native_handle_t* fenceNh = native_handle_create(0, 0);
+        ASSERT_NE(fenceNh, nullptr);
+        status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
+        native_handle_close(fenceNh);
+        native_handle_delete(fenceNh);
+        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+        buffArray->editItemAt(bufferIndex).owner = component;
+    } else {
+        android::hardware::media::omx::V1_0::Status status;
+        CodecBuffer t;
+        t.sharedMemory = android::hardware::hidl_memory();
+        t.nativeHandle = android::hardware::hidl_handle();
+        t.type = CodecBuffer::Type::PRESET;
+        t.attr.preset.rangeOffset = 0;
+        t.attr.preset.rangeLength = 0;
+        native_handle_t* fenceNh = native_handle_create(0, 0);
+        ASSERT_NE(fenceNh, nullptr);
+        status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
+        native_handle_close(fenceNh);
+        native_handle_delete(fenceNh);
+        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+        buffArray->editItemAt(bufferIndex).owner = component;
+    }
+}
+
+// dispatch buffer to input port
+void dispatchInputBuffer(sp<IOmxNode> omxNode,
+                         android::Vector<BufferInfo>* buffArray,
+                         size_t bufferIndex, int bytesCount, uint32_t flags,
+                         uint64_t timestamp) {
+    android::hardware::media::omx::V1_0::Status status;
+    CodecBuffer t;
+    t.sharedMemory = android::hardware::hidl_memory();
+    t.nativeHandle = android::hardware::hidl_handle();
+    t.type = CodecBuffer::Type::PRESET;
+    t.attr.preset.rangeOffset = 0;
+    t.attr.preset.rangeLength = bytesCount;
+    native_handle_t* fenceNh = native_handle_create(0, 0);
+    ASSERT_NE(fenceNh, nullptr);
+    status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t, flags,
+                                  timestamp, fenceNh);
+    native_handle_close(fenceNh);
+    native_handle_delete(fenceNh);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    buffArray->editItemAt(bufferIndex).owner = component;
+}
+
+// Flush input and output ports
+void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                android::Vector<BufferInfo>* iBuffer,
+                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    // Flush input port
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
+                                  kPortIndexInput);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
+    ASSERT_EQ(msg.data.eventData.data2, kPortIndexInput);
+    // test if client got all its buffers back
+    for (size_t i = 0; i < iBuffer->size(); ++i) {
+        EXPECT_EQ((*iBuffer)[i].owner, client);
+    }
+
+    // Flush output port
+    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
+                                  kPortIndexOutput);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(msg.type, Message::Type::EVENT);
+    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
+    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
+    // test if client got all its buffers back
+    for (size_t i = 0; i < oBuffer->size(); ++i) {
+        EXPECT_EQ((*oBuffer)[i].owner, client);
+    }
+}
+
+// dispatch an empty input buffer with eos flag set if requested.
+// This call assumes that all input buffers are processed completely.
+// feed output buffers till we receive a buffer with eos flag set
+void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+             android::Vector<BufferInfo>* iBuffer,
+             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
+             bool& eosFlag, PortMode* portMode) {
+    android::hardware::media::omx::V1_0::Status status;
+    PortMode defaultPortMode[2], *pm;
+
+    defaultPortMode[0] = PortMode::PRESET_BYTE_BUFFER;
+    defaultPortMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    pm = portMode ? portMode : defaultPortMode;
+
+    size_t i = 0;
+    if (signalEOS) {
+        if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
+            // signal an empty buffer with flag set to EOS
+            dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0);
+        } else {
+            ASSERT_TRUE(false);
+        }
+    }
+
+    int timeOut = TIMEOUT_COUNTER;
+    while (timeOut--) {
+        // Dispatch all client owned output buffers to recover remaining frames
+        while (1) {
+            if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+                dispatchOutputBuffer(omxNode, oBuffer, i, pm[1]);
+                // if dispatch is successful, perhaps there is a latency
+                // in the component. Dont be in a haste to leave. reset timeout
+                // counter
+                timeOut = TIMEOUT_COUNTER;
+            } else {
+                break;
+            }
+        }
+
+        Message msg;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        if (status == android::hardware::media::omx::V1_0::Status::OK) {
+            if (msg.data.eventData.event == OMX_EventBufferFlag) {
+                // soft omx components donot send this, we will just ignore it
+                // for now
+            } else {
+                // something unexpected happened
+                EXPECT_TRUE(false);
+            }
+        }
+        if (eosFlag == true) break;
+    }
+    // test for flag
+    EXPECT_EQ(eosFlag, true);
+    eosFlag = false;
+}
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
index 52d8ae2..a402532 100644
--- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
@@ -33,9 +33,19 @@
 #include <media/openmax/OMX_AudioExt.h>
 #include <media/openmax/OMX_VideoExt.h>
 
+#define DEFAULT_TIMEOUT 40000
+#define TIMEOUT_COUNTER (10000000 / DEFAULT_TIMEOUT)
+
+enum bufferOwner {
+    client,
+    component,
+    unknown,
+};
+
 /*
- * TODO: Borrowed from Conversion.h. This is not the ideal way to do it.
- * Loose these definitions once you include Conversion.h
+ * TODO: below definitions are borrowed from Conversion.h.
+ * This is not the ideal way to do it. Loose these definitions once you
+ * include Conversion.h
  */
 inline uint32_t toRawIndexType(OMX_INDEXTYPE l) {
     return static_cast<uint32_t>(l);
@@ -57,22 +67,14 @@
 }
 
 /*
- * Handle Callback functions EmptythisBuffer(), FillthisBuffer(),
- * EventHandler()
+ * struct definitions
  */
-#define DEFAULT_TIMEOUT 40000
-
-enum bufferOwner {
-    client,
-    component,
-    unknown,
-};
-
 struct BufferInfo {
     uint32_t id;
     bufferOwner owner;
     android::hardware::media::omx::V1_0::CodecBuffer omxBuffer;
     ::android::sp<IMemory> mMemory;
+    int32_t slot;
 };
 
 struct FrameData {
@@ -81,9 +83,14 @@
     uint32_t timestamp;
 };
 
+/*
+ * Handle Callback functions EmptythisBuffer(), FillthisBuffer(),
+ * EventHandler()
+ */
 struct CodecObserver : public IOmxObserver {
    public:
-    CodecObserver(std::function<void(Message)> fn) : callBack(fn) {}
+    CodecObserver(std::function<void(Message, const BufferInfo*)> fn)
+        : callBack(fn) {}
     Return<void> onMessages(const hidl_vec<Message>& messages) override {
         android::Mutex::Autolock autoLock(msgLock);
         for (hidl_vec<Message>::const_iterator it = messages.begin();
@@ -114,7 +121,7 @@
                         for (i = 0; i < oBuffers->size(); ++i) {
                             if ((*oBuffers)[i].id ==
                                 it->data.bufferData.buffer) {
-                                if (callBack) callBack(*it);
+                                if (callBack) callBack(*it, &(*oBuffers)[i]);
                                 oBuffers->editItemAt(i).owner = client;
                                 msgQueue.erase(it);
                                 break;
@@ -129,6 +136,7 @@
                         for (i = 0; i < iBuffers->size(); ++i) {
                             if ((*iBuffers)[i].id ==
                                 it->data.bufferData.buffer) {
+                                if (callBack) callBack(*it, &(*iBuffers)[i]);
                                 iBuffers->editItemAt(i).owner = client;
                                 msgQueue.erase(it);
                                 break;
@@ -154,7 +162,7 @@
     android::List<Message> msgQueue;
     android::Mutex msgLock;
     android::Condition msgCondition;
-    std::function<void(Message)> callBack;
+    std::function<void(Message, const BufferInfo*)> callBack;
 };
 
 /*
@@ -245,4 +253,51 @@
                               inHidlBytes(params, sizeof(*params)));
 }
 
+/*
+ * common functions declarations
+ */
+void allocatePortBuffers(sp<IOmxNode> omxNode,
+                         android::Vector<BufferInfo>* buffArray,
+                         OMX_U32 portIndex,
+                         PortMode portMode = PortMode::PRESET_BYTE_BUFFER);
+
+void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                             android::Vector<BufferInfo>* iBuffer,
+                             android::Vector<BufferInfo>* oBuffer,
+                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
+                             PortMode* portMode = nullptr);
+
+void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                             android::Vector<BufferInfo>* iBuffer,
+                             android::Vector<BufferInfo>* oBuffer,
+                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
+
+void changeStateIdletoExecute(sp<IOmxNode> omxNode, sp<CodecObserver> observer);
+
+void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                              android::Vector<BufferInfo>* iBuffer,
+                              android::Vector<BufferInfo>* oBuffer);
+
+size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray);
+
+void dispatchOutputBuffer(sp<IOmxNode> omxNode,
+                          android::Vector<BufferInfo>* buffArray,
+                          size_t bufferIndex,
+                          PortMode portMode = PortMode::PRESET_BYTE_BUFFER);
+
+void dispatchInputBuffer(sp<IOmxNode> omxNode,
+                         android::Vector<BufferInfo>* buffArray,
+                         size_t bufferIndex, int bytesCount, uint32_t flags,
+                         uint64_t timestamp);
+
+void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                android::Vector<BufferInfo>* iBuffer,
+                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
+
+void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+             android::Vector<BufferInfo>* iBuffer,
+             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
+             bool& eosFlag, PortMode* portMode = nullptr);
+
 #endif  // MEDIA_HIDL_TEST_COMMON_H
diff --git a/media/omx/1.0/vts/functional/component/Android.bp b/media/omx/1.0/vts/functional/component/Android.bp
index 02fe182..fd3210f 100644
--- a/media/omx/1.0/vts/functional/component/Android.bp
+++ b/media/omx/1.0/vts/functional/component/Android.bp
@@ -23,6 +23,7 @@
         "liblog",
         "libcutils",
         "libhidlbase",
+        "libhidlmemory",
         "libhidltransport",
         "libhwbinder",
         "libnativehelper",
@@ -32,7 +33,8 @@
         "android.hidl.memory@1.0",
         "android.hardware.media.omx@1.0",
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: ["VtsHalHidlTargetTestBase",
+                  "VtsHalMediaOmxV1_0CommonUtil"],
     cflags: [
         "-O0",
         "-g",
diff --git a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
index 17c49ca..39e8864 100644
--- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
+++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
@@ -30,6 +30,7 @@
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -196,268 +197,6 @@
 // Random Index used for monkey testing while get/set parameters
 #define RANDOM_INDEX 1729
 
-// allocate buffers needed on a component port
-void allocatePortBuffers(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         OMX_U32 portIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    OMX_PARAM_PORTDEFINITIONTYPE portDef;
-
-    buffArray->clear();
-
-    sp<IAllocator> allocator = IAllocator::getService("ashmem");
-    EXPECT_NE(allocator.get(), nullptr);
-
-    status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
-                          &portDef);
-    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-
-    for (size_t i = 0; i < portDef.nBufferCountActual; i++) {
-        BufferInfo buffer;
-        buffer.owner = client;
-        buffer.omxBuffer.type = CodecBuffer::Type::SHARED_MEM;
-        buffer.omxBuffer.attr.preset.rangeOffset = 0;
-        buffer.omxBuffer.attr.preset.rangeLength = 0;
-        bool success = false;
-        allocator->allocate(
-            portDef.nBufferSize,
-            [&success, &buffer](bool _s,
-                                ::android::hardware::hidl_memory const& mem) {
-                success = _s;
-                buffer.omxBuffer.sharedMemory = mem;
-            });
-        ASSERT_EQ(success, true);
-        ASSERT_EQ(buffer.omxBuffer.sharedMemory.size(), portDef.nBufferSize);
-
-        omxNode->useBuffer(
-            portIndex, buffer.omxBuffer,
-            [&status, &buffer](android::hardware::media::omx::V1_0::Status _s,
-                               uint32_t id) {
-                status = _s;
-                buffer.id = id;
-            });
-        buffArray->push(buffer);
-        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-    }
-}
-
-// State Transition : Loaded -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on input port
-    allocatePortBuffers(omxNode, iBuffer, kPortIndexInput);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on output port
-    allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
-
-    // As the ports are populated, check if the state transition is complete
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    return;
-}
-
-// State Transition : Idle -> Loaded
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Loaded
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateLoaded);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexInput, (*iBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);
-
-    return;
-}
-
-// State Transition : Idle -> Execute
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoExecute(sp<IOmxNode> omxNode,
-                              sp<CodecObserver> observer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to execute
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateExecuting);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateExecuting);
-
-    return;
-}
-
-// State Transition : Execute -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                              android::Vector<BufferInfo>* iBuffer,
-                              android::Vector<BufferInfo>* oBuffer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-}
-
-// dispatch buffer to output port
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = 0;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// dispatch buffer to input port
-void dispatchInputBuffer(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         size_t bufferIndex, int bytesCount, uint32_t flags,
-                         uint64_t timestamp) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = bytesCount;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t, flags,
-                                  timestamp, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// Flush input and output ports
-void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                android::Vector<BufferInfo>* iBuffer,
-                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // Flush input port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexInput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexInput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-
-    // Flush output port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexOutput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-}
-
 // get/set video component port format
 Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex,
diff --git a/media/omx/1.0/vts/functional/video/Android.bp b/media/omx/1.0/vts/functional/video/Android.bp
index a8c8d99..4e94f3b 100644
--- a/media/omx/1.0/vts/functional/video/Android.bp
+++ b/media/omx/1.0/vts/functional/video/Android.bp
@@ -33,8 +33,12 @@
         "android.hidl.allocator@1.0",
         "android.hidl.memory@1.0",
         "android.hardware.media.omx@1.0",
+        "android.hardware.graphics.allocator@2.0",
+        "android.hardware.graphics.mapper@2.0",
+        "android.hardware.graphics.common@1.0",
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: ["VtsHalHidlTargetTestBase",
+                  "VtsHalMediaOmxV1_0CommonUtil"],
     cflags: [
         "-O0",
         "-g",
@@ -59,13 +63,17 @@
         "libhidltransport",
         "libhwbinder",
         "libnativehelper",
+        "libnativewindow",
         "libutils",
         "libstagefright_foundation",
         "android.hidl.allocator@1.0",
         "android.hidl.memory@1.0",
         "android.hardware.media.omx@1.0",
+        "android.hardware.graphics.bufferqueue@1.0",
+        "android.hardware.graphics.mapper@2.0",
     ],
-    static_libs: ["VtsHalHidlTargetTestBase"],
+    static_libs: ["VtsHalHidlTargetTestBase",
+                  "VtsHalMediaOmxV1_0CommonUtil"],
     cflags: [
         "-O0",
         "-g",
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
index 35c2b0c..8ab01b5 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
@@ -17,6 +17,9 @@
 #define LOG_TAG "media_omx_hidl_video_dec_test"
 #include <android-base/logging.h>
 
+#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
+#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+#include <android/hardware/graphics/mapper/2.0/types.h>
 #include <android/hardware/media/omx/1.0/IOmx.h>
 #include <android/hardware/media/omx/1.0/IOmxNode.h>
 #include <android/hardware/media/omx/1.0/IOmxObserver.h>
@@ -25,11 +28,14 @@
 #include <android/hidl/memory/1.0/IMapper.h>
 #include <android/hidl/memory/1.0/IMemory.h>
 
+using ::android::hardware::graphics::common::V1_0::BufferUsage;
+using ::android::hardware::graphics::common::V1_0::PixelFormat;
 using ::android::hardware::media::omx::V1_0::IOmx;
 using ::android::hardware::media::omx::V1_0::IOmxObserver;
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -136,7 +142,9 @@
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
         observer =
-            new CodecObserver([this](Message msg) { handleMessage(msg); });
+            new CodecObserver([this](Message msg, const BufferInfo* buffer) {
+                handleMessage(msg, buffer);
+            });
         ASSERT_NE(observer, nullptr);
         if (strncmp(gEnv->getComponent().c_str(), "OMX.", 4) != 0)
             disableTest = true;
@@ -193,11 +201,20 @@
             }
         }
         if (i == kNumCompToCompression) disableTest = true;
+        portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
         eosFlag = false;
         framesReceived = 0;
         timestampUs = 0;
         timestampDevTest = false;
-        if (disableTest) std::cerr << "[          ] Warning !  Test Disabled\n";
+        isSecure = false;
+        size_t suffixLen = strlen(".secure");
+        if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
+        }
+        isSecure = !strcmp(gEnv->getComponent().c_str() +
+                               strlen(gEnv->getComponent().c_str()) - suffixLen,
+                           ".secure");
+        if (isSecure) disableTest = true;
+        if (disableTest) std::cout << "[          ] Warning !  Test Disabled\n";
     }
 
     virtual void TearDown() override {
@@ -209,7 +226,8 @@
 
     // callback function to process messages received by onMessages() from IL
     // client.
-    void handleMessage(Message msg) {
+    void handleMessage(Message msg, const BufferInfo* buffer) {
+        (void)buffer;
         if (msg.type == Message::Type::FILL_BUFFER_DONE) {
             if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
                 eosFlag = true;
@@ -239,19 +257,33 @@
                             EXPECT_EQ(tsHit, true)
                                 << "TimeStamp not recognized";
                         } else {
-                            std::cerr
+                            std::cout
                                 << "[          ] Warning ! Received non-zero "
                                    "output / TimeStamp not recognized \n";
                         }
                     }
                 }
+#define WRITE_OUTPUT 0
+#if WRITE_OUTPUT
+                static int count = 0;
+                FILE* ofp = nullptr;
+                if (count)
+                    ofp = fopen("out.bin", "ab");
+                else
+                    ofp = fopen("out.bin", "wb");
+                if (ofp != nullptr &&
+                    portMode[1] == PortMode::PRESET_BYTE_BUFFER) {
+                    fwrite(static_cast<void*>(buffer->mMemory->getPointer()),
+                           sizeof(char),
+                           msg.data.extendedBufferData.rangeLength, ofp);
+                    fclose(ofp);
+                    count++;
+                }
+#endif
             }
         }
     }
 
-    void testEOS(android::Vector<BufferInfo>* iBuffer,
-                 android::Vector<BufferInfo>* oBuffer, bool signalEOS = false);
-
     enum standardComp {
         h263,
         avc,
@@ -269,11 +301,13 @@
     standardComp compName;
     OMX_VIDEO_CODINGTYPE eCompressionFormat;
     bool disableTest;
+    PortMode portMode[2];
     bool eosFlag;
     uint32_t framesReceived;
     uint64_t timestampUs;
     ::android::List<uint64_t> timestampUslist;
     bool timestampDevTest;
+    bool isSecure;
 
    protected:
     static void description(const std::string& description) {
@@ -281,44 +315,6 @@
     }
 };
 
-// end of stream test for video decoder components
-void VideoDecHidlTest::testEOS(android::Vector<BufferInfo>* iBuffer,
-                               android::Vector<BufferInfo>* oBuffer,
-                               bool signalEOS) {
-    android::hardware::media::omx::V1_0::Status status;
-    size_t i = 0;
-    if (signalEOS) {
-        if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
-            // signal an empty buffer with flag set to EOS
-            dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0);
-        } else {
-            ASSERT_TRUE(false);
-        }
-    }
-    // Dispatch all client owned output buffers to recover remaining frames
-    while (1) {
-        if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
-            dispatchOutputBuffer(omxNode, oBuffer, i);
-        } else {
-            break;
-        }
-    }
-    while (1) {
-        Message msg;
-        status =
-            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-        EXPECT_EQ(status,
-                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-        for (; i < iBuffer->size(); i++) {
-            if ((*iBuffer)[i].owner != client) break;
-        }
-        if (i == iBuffer->size()) break;
-    }
-    // test for flag
-    EXPECT_EQ(eosFlag, true);
-    eosFlag = false;
-}
-
 // Set Default port param.
 void setDefaultPortParam(sp<IOmxNode> omxNode, OMX_U32 portIndex,
                          OMX_VIDEO_CODINGTYPE eCompressionFormat,
@@ -399,17 +395,91 @@
     }
 }
 
+void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex,
+                            android::Vector<BufferInfo>* buffArray,
+                            uint32_t nFrameWidth, uint32_t nFrameHeight,
+                            int32_t* nStride, uint32_t count) {
+    android::hardware::media::omx::V1_0::Status status;
+    sp<android::hardware::graphics::allocator::V2_0::IAllocator> allocator =
+        android::hardware::graphics::allocator::V2_0::IAllocator::getService();
+    ASSERT_NE(nullptr, allocator.get());
+
+    sp<android::hardware::graphics::mapper::V2_0::IMapper> mapper =
+        android::hardware::graphics::mapper::V2_0::IMapper::getService();
+    ASSERT_NE(mapper.get(), nullptr);
+
+    android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo
+        descriptorInfo;
+    uint32_t usage;
+
+    descriptorInfo.width = nFrameWidth;
+    descriptorInfo.height = nFrameHeight;
+    descriptorInfo.layerCount = 1;
+    descriptorInfo.format = PixelFormat::RGBA_8888;
+    descriptorInfo.usage = static_cast<uint64_t>(BufferUsage::CPU_READ_OFTEN);
+    omxNode->getGraphicBufferUsage(
+        portIndex,
+        [&status, &usage](android::hardware::media::omx::V1_0::Status _s,
+                          uint32_t _n1) {
+            status = _s;
+            usage = _n1;
+        });
+    if (status == android::hardware::media::omx::V1_0::Status::OK) {
+        descriptorInfo.usage |= usage;
+    }
+
+    ::android::hardware::hidl_vec<uint32_t> descriptor;
+    android::hardware::graphics::mapper::V2_0::Error error;
+    mapper->createDescriptor(
+        descriptorInfo, [&error, &descriptor](
+                            android::hardware::graphics::mapper::V2_0::Error _s,
+                            ::android::hardware::hidl_vec<uint32_t> _n1) {
+            error = _s;
+            descriptor = _n1;
+        });
+    EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE);
+
+    EXPECT_EQ(buffArray->size(), count);
+    allocator->allocate(
+        descriptor, count,
+        [&](android::hardware::graphics::mapper::V2_0::Error _s, uint32_t _n1,
+            const ::android::hardware::hidl_vec<
+                ::android::hardware::hidl_handle>& _n2) {
+            ASSERT_EQ(android::hardware::graphics::mapper::V2_0::Error::NONE,
+                      _s);
+            *nStride = _n1;
+            ASSERT_EQ(count, _n2.size());
+            for (uint32_t i = 0; i < count; i++) {
+                buffArray->editItemAt(i).omxBuffer.nativeHandle = _n2[i];
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.width =
+                    nFrameWidth;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.height =
+                    nFrameHeight;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.stride = _n1;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.format =
+                    descriptorInfo.format;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.usage =
+                    descriptorInfo.usage;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.layerCount =
+                    descriptorInfo.layerCount;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.id =
+                    (*buffArray)[i].id;
+            }
+        });
+}
+
 // port settings reconfiguration during runtime. reconfigures frame dimensions
 void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                          android::Vector<BufferInfo>* iBuffer,
                          android::Vector<BufferInfo>* oBuffer,
                          OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
-                         Message msg) {
+                         Message msg, PortMode oPortMode) {
     android::hardware::media::omx::V1_0::Status status;
 
     if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
         ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
-        if (msg.data.eventData.data2 == 0) {
+        if (msg.data.eventData.data2 == OMX_IndexParamPortDefinition ||
+            msg.data.eventData.data2 == 0) {
             status = omxNode->sendCommand(
                 toRawCommandType(OMX_CommandPortDisable), kPortIndexOutput);
             ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
@@ -461,7 +531,22 @@
                     status,
                     android::hardware::media::omx::V1_0::Status::TIMED_OUT);
 
-                allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
+                allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput,
+                                    oPortMode);
+                if (oPortMode != PortMode::PRESET_BYTE_BUFFER) {
+                    OMX_PARAM_PORTDEFINITIONTYPE portDef;
+
+                    status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
+                                          kPortIndexOutput, &portDef);
+                    ASSERT_EQ(
+                        status,
+                        ::android::hardware::media::omx::V1_0::Status::OK);
+                    allocateGraphicBuffers(omxNode, kPortIndexOutput, oBuffer,
+                                           portDef.format.video.nFrameWidth,
+                                           portDef.format.video.nFrameHeight,
+                                           &portDef.format.video.nStride,
+                                           portDef.nBufferCountActual);
+                }
                 status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
                                                   iBuffer, oBuffer);
                 ASSERT_EQ(status,
@@ -472,23 +557,26 @@
 
                 // dispatch output buffers
                 for (size_t i = 0; i < oBuffer->size(); i++) {
-                    dispatchOutputBuffer(omxNode, oBuffer, i);
+                    dispatchOutputBuffer(omxNode, oBuffer, i, oPortMode);
                 }
             } else {
                 ASSERT_TRUE(false);
             }
         } else if (msg.data.eventData.data2 ==
                    OMX_IndexConfigCommonOutputCrop) {
-            std::cerr << "[          ] Warning ! OMX_EventPortSettingsChanged/ "
+            std::cout << "[          ] Warning ! OMX_EventPortSettingsChanged/ "
                          "OMX_IndexConfigCommonOutputCrop not handled \n";
         } else if (msg.data.eventData.data2 == OMX_IndexVendorStartUnused + 3) {
-            std::cerr << "[          ] Warning ! OMX_EventPortSettingsChanged/ "
+            std::cout << "[          ] Warning ! OMX_EventPortSettingsChanged/ "
                          "kDescribeColorAspectsIndex not handled \n";
         }
     } else if (msg.data.eventData.event == OMX_EventError) {
-        std::cerr << "[          ] Warning ! OMX_EventError/ "
+        std::cout << "[          ] Warning ! OMX_EventError/ "
                      "Decode Frame Call might be failed \n";
         return;
+    } else if (msg.data.eventData.event == OMX_EventBufferFlag) {
+        // soft omx components donot send this, we will just ignore it
+        // for now
     } else {
         // something unexpected happened
         ASSERT_TRUE(false);
@@ -499,18 +587,21 @@
 void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* oBuffer,
-                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput) {
+                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
+                            PortMode oPortMode) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
+    int timeOut = TIMEOUT_COUNTER;
 
-    while (1) {
+    while (timeOut--) {
         size_t i = 0;
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
         if (status == android::hardware::media::omx::V1_0::Status::OK) {
             EXPECT_EQ(msg.type, Message::Type::EVENT);
             portReconfiguration(omxNode, observer, iBuffer, oBuffer,
-                                kPortIndexInput, kPortIndexOutput, msg);
+                                kPortIndexInput, kPortIndexOutput, msg,
+                                oPortMode);
         }
         // status == TIMED_OUT, it could be due to process time being large
         // than DEFAULT_TIMEOUT or component needs output buffers to start
@@ -523,8 +614,9 @@
         // Dispatch an output buffer assuming outQueue.empty() is true
         size_t index;
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
-            dispatchOutputBuffer(omxNode, oBuffer, index);
+            dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode);
         }
+        timeOut--;
     }
 }
 
@@ -534,13 +626,14 @@
                    android::Vector<BufferInfo>* oBuffer,
                    OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                    std::ifstream& eleStream, android::Vector<FrameData>* Info,
-                   int offset, int range, bool signalEOS = true) {
+                   int offset, int range, PortMode oPortMode,
+                   bool signalEOS = true) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
     // dispatch output buffers
     for (size_t i = 0; i < oBuffer->size(); i++) {
-        dispatchOutputBuffer(omxNode, oBuffer, i);
+        dispatchOutputBuffer(omxNode, oBuffer, i, oPortMode);
     }
     // dispatch input buffers
     uint32_t flags = 0;
@@ -563,6 +656,8 @@
         frameID++;
     }
 
+    int timeOut = TIMEOUT_COUNTER;
+    bool stall = false;
     while (1) {
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -571,7 +666,8 @@
         if (status == android::hardware::media::omx::V1_0::Status::OK &&
             msg.type == Message::Type::EVENT) {
             portReconfiguration(omxNode, observer, iBuffer, oBuffer,
-                                kPortIndexInput, kPortIndexOutput, msg);
+                                kPortIndexInput, kPortIndexOutput, msg,
+                                oPortMode);
         }
 
         if (frameID == (int)Info->size() || frameID == (offset + range)) break;
@@ -593,9 +689,21 @@
                                 (*Info)[frameID].bytesCount, flags,
                                 (*Info)[frameID].timestamp);
             frameID++;
-        }
+            stall = false;
+        } else
+            stall = true;
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
-            dispatchOutputBuffer(omxNode, oBuffer, index);
+            dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode);
+            stall = false;
+        } else
+            stall = true;
+        if (stall)
+            timeOut--;
+        else
+            timeOut = TIMEOUT_COUNTER;
+        if (timeOut == 0) {
+            EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite";
+            break;
         }
     }
 }
@@ -675,6 +783,28 @@
     }
     eleInfo.close();
 
+    // set port mode
+    if (isSecure) {
+        portMode[0] = PortMode::PRESET_SECURE_BUFFER;
+        portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
+        status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+        status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    } else {
+        portMode[0] = PortMode::PRESET_BYTE_BUFFER;
+        portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
+        status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+        status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+        if (status != ::android::hardware::media::omx::V1_0::Status::OK) {
+            portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+            status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+            ASSERT_EQ(status,
+                      ::android::hardware::media::omx::V1_0::Status::OK);
+        }
+    }
+
     // set Port Params
     uint32_t nFrameWidth, nFrameHeight, xFramerate;
     OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
@@ -682,23 +812,38 @@
                         &xFramerate);
     setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
                         eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+    omxNode->prepareForAdaptivePlayback(kPortIndexOutput, false, 1920, 1080);
 
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
+
+    if (portMode[1] != PortMode::PRESET_BYTE_BUFFER) {
+        OMX_PARAM_PORTDEFINITIONTYPE portDef;
+
+        status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
+                              kPortIndexOutput, &portDef);
+        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+        allocateGraphicBuffers(
+            omxNode, kPortIndexOutput, &oBuffer,
+            portDef.format.video.nFrameWidth, portDef.format.video.nFrameHeight,
+            &portDef.format.video.nStride, portDef.nBufferCountActual);
+    }
+
     // Port Reconfiguration
     eleStream.open(mURL, std::ifstream::binary);
     ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size());
+                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(),
+                  portMode[1]);
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
-                           kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+                           kPortIndexInput, kPortIndexOutput, portMode[1]);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode);
     EXPECT_EQ(timestampUslist.empty(), true);
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -730,18 +875,25 @@
                         &xFramerate);
     setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
                         eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
-    omxNode->prepareForAdaptivePlayback(kPortIndexOutput, false, 1920, 1080);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
     // request EOS at the start
-    testEOS(&iBuffer, &oBuffer, true);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 0U);
@@ -798,13 +950,20 @@
                         &xFramerate);
     setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
                         eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
-    omxNode->prepareForAdaptivePlayback(kPortIndexOutput, false, 1920, 1080);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
@@ -814,11 +973,11 @@
     eleStream.open(mURL, std::ifstream::binary);
     ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, eleStream, &Info, 0, i + 1);
+                  kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1]);
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
-                           kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+                           kPortIndexInput, kPortIndexOutput, portMode[1]);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 1U);
@@ -828,11 +987,12 @@
     eleStream.open(mURL, std::ifstream::binary);
     ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, eleStream, &Info, 0, i + 1, false);
+                  kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1],
+                  false);
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
-                           kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer, true);
+                           kPortIndexInput, kPortIndexOutput, portMode[1]);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     EXPECT_GE(framesReceived, 1U);
@@ -889,13 +1049,20 @@
                         &xFramerate);
     setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
                         eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
-    omxNode->prepareForAdaptivePlayback(kPortIndexOutput, false, 1920, 1080);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
@@ -903,11 +1070,12 @@
     eleStream.open(mURL, std::ifstream::binary);
     ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size());
+                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(),
+                  portMode[1]);
     eleStream.close();
     waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
-                           kPortIndexInput, kPortIndexOutput);
-    testEOS(&iBuffer, &oBuffer);
+                           kPortIndexInput, kPortIndexOutput, portMode[1]);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode);
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput);
     framesReceived = 0;
@@ -964,11 +1132,19 @@
     setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
                         eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
 
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
@@ -979,7 +1155,8 @@
     eleStream.open(mURL, std::ifstream::binary);
     ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, eleStream, &Info, 0, nFrames, false);
+                  kPortIndexOutput, eleStream, &Info, 0, nFrames, portMode[1],
+                  false);
     // Note: Assumes 200 ms is enough to end any decode call that started
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                kPortIndexOutput, 200000);
@@ -1001,7 +1178,7 @@
     if (keyFrame) {
         decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
                       kPortIndexOutput, eleStream, &Info, index,
-                      Info.size() - index, false);
+                      Info.size() - index, portMode[1], false);
     }
     // Note: Assumes 200 ms is enough to end any decode call that started
     flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
index 72ab937..7a57430 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
@@ -21,7 +21,13 @@
 
 #include <android-base/logging.h>
 
+#include <android/hardware/graphics/bufferqueue/1.0/IGraphicBufferProducer.h>
+#include <android/hardware/graphics/bufferqueue/1.0/IProducerListener.h>
+#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+#include <android/hardware/graphics/mapper/2.0/types.h>
+#include <android/hardware/media/omx/1.0/IGraphicBufferSource.h>
 #include <android/hardware/media/omx/1.0/IOmx.h>
+#include <android/hardware/media/omx/1.0/IOmxBufferSource.h>
 #include <android/hardware/media/omx/1.0/IOmxNode.h>
 #include <android/hardware/media/omx/1.0/IOmxObserver.h>
 #include <android/hardware/media/omx/1.0/types.h>
@@ -29,11 +35,18 @@
 #include <android/hidl/memory/1.0/IMapper.h>
 #include <android/hidl/memory/1.0/IMemory.h>
 
+using ::android::hardware::graphics::bufferqueue::V1_0::IGraphicBufferProducer;
+using ::android::hardware::graphics::bufferqueue::V1_0::IProducerListener;
+using ::android::hardware::graphics::common::V1_0::BufferUsage;
+using ::android::hardware::graphics::common::V1_0::PixelFormat;
+using ::android::hardware::media::omx::V1_0::IGraphicBufferSource;
+using ::android::hardware::media::omx::V1_0::IOmxBufferSource;
 using ::android::hardware::media::omx::V1_0::IOmx;
 using ::android::hardware::media::omx::V1_0::IOmxObserver;
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -48,6 +61,7 @@
 #include <media/hardware/HardwareAPI.h>
 #include <media_hidl_test_common.h>
 #include <media_video_hidl_test_common.h>
+#include <system/window.h>
 #include <fstream>
 
 // A class for test environment setup
@@ -140,7 +154,10 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver([](Message msg) { (void)msg; });
+        observer =
+            new CodecObserver([this](Message msg, const BufferInfo* buffer) {
+                handleMessage(msg, buffer);
+            });
         ASSERT_NE(observer, nullptr);
         if (strncmp(gEnv->getComponent().c_str(), "OMX.", 4) != 0)
             disableTest = true;
@@ -196,6 +213,19 @@
             }
         }
         if (i == kNumCompToCompression) disableTest = true;
+        eosFlag = false;
+        prependSPSPPS = false;
+        timestampDevTest = false;
+        producer = nullptr;
+        source = nullptr;
+        isSecure = false;
+        size_t suffixLen = strlen(".secure");
+        if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
+        }
+        isSecure = !strcmp(gEnv->getComponent().c_str() +
+                               strlen(gEnv->getComponent().c_str()) - suffixLen,
+                           ".secure");
+        if (isSecure) disableTest = true;
         if (disableTest) std::cerr << "[          ] Warning !  Test Disabled\n";
     }
 
@@ -206,6 +236,63 @@
         }
     }
 
+    // callback function to process messages received by onMessages() from IL
+    // client.
+    void handleMessage(Message msg, const BufferInfo* buffer) {
+        (void)buffer;
+
+        if (msg.type == Message::Type::FILL_BUFFER_DONE) {
+            if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
+                eosFlag = true;
+            }
+            if (msg.data.extendedBufferData.rangeLength != 0) {
+                // Test if current timestamp is among the list of queued
+                // timestamps
+                if (timestampDevTest && (prependSPSPPS ||
+                                         (msg.data.extendedBufferData.flags &
+                                          OMX_BUFFERFLAG_CODECCONFIG) == 0)) {
+                    bool tsHit = false;
+                    android::List<uint64_t>::iterator it =
+                        timestampUslist.begin();
+                    while (it != timestampUslist.end()) {
+                        if (*it == msg.data.extendedBufferData.timestampUs) {
+                            timestampUslist.erase(it);
+                            tsHit = true;
+                            break;
+                        }
+                        it++;
+                    }
+                    if (tsHit == false) {
+                        if (timestampUslist.empty() == false) {
+                            EXPECT_EQ(tsHit, true)
+                                << "TimeStamp not recognized";
+                        } else {
+                            std::cerr
+                                << "[          ] Warning ! Received non-zero "
+                                   "output / TimeStamp not recognized \n";
+                        }
+                    }
+                }
+#define WRITE_OUTPUT 0
+#if WRITE_OUTPUT
+                static int count = 0;
+                FILE* ofp = nullptr;
+                if (count)
+                    ofp = fopen("out.bin", "ab");
+                else
+                    ofp = fopen("out.bin", "wb");
+                if (ofp != nullptr) {
+                    fwrite(static_cast<void*>(buffer->mMemory->getPointer()),
+                           sizeof(char),
+                           msg.data.extendedBufferData.rangeLength, ofp);
+                    fclose(ofp);
+                    count++;
+                }
+#endif
+            }
+        }
+    }
+
     enum standardComp {
         h263,
         avc,
@@ -222,6 +309,13 @@
     standardComp compName;
     OMX_VIDEO_CODINGTYPE eCompressionFormat;
     bool disableTest;
+    bool eosFlag;
+    bool prependSPSPPS;
+    ::android::List<uint64_t> timestampUslist;
+    bool timestampDevTest;
+    bool isSecure;
+    sp<IGraphicBufferProducer> producer;
+    sp<IGraphicBufferSource> source;
 
    protected:
     static void description(const std::string& description) {
@@ -229,6 +323,106 @@
     }
 };
 
+// CodecProducerListener class
+struct CodecProducerListener : public IProducerListener {
+   public:
+    CodecProducerListener(int a, int b)
+        : freeBuffers(a), minUnDequeuedCount(b) {}
+    virtual ::android::hardware::Return<void> onBufferReleased() override {
+        android::Mutex::Autolock autoLock(bufferLock);
+        freeBuffers += 1;
+        return Void();
+    }
+    virtual ::android::hardware::Return<bool> needsReleaseNotify() override {
+        return true;
+    }
+    void reduceCount() {
+        android::Mutex::Autolock autoLock(bufferLock);
+        freeBuffers -= 1;
+        EXPECT_GE(freeBuffers, minUnDequeuedCount);
+    }
+
+    size_t freeBuffers;
+    size_t minUnDequeuedCount;
+    android::Mutex bufferLock;
+};
+
+// Mock IOmxBufferSource class. GraphicBufferSource.cpp in libstagefright/omx/
+// implements this class. Below is dummy class introduced to test if callback
+// functions are actually being called or not
+struct DummyBufferSource : public IOmxBufferSource {
+   public:
+    DummyBufferSource(sp<IOmxNode> node) {
+        callback = 0;
+        executing = false;
+        omxNode = node;
+    }
+    virtual Return<void> onOmxExecuting();
+    virtual Return<void> onOmxIdle();
+    virtual Return<void> onOmxLoaded();
+    virtual Return<void> onInputBufferAdded(uint32_t buffer);
+    virtual Return<void> onInputBufferEmptied(
+        uint32_t buffer, const ::android::hardware::hidl_handle& fence);
+
+    int callback;
+    bool executing;
+    sp<IOmxNode> omxNode;
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+};
+
+Return<void> DummyBufferSource::onOmxExecuting() {
+    executing = true;
+    callback |= 0x1;
+    size_t index;
+    // Fetch a client owned input buffer and send an EOS
+    if ((index = getEmptyBufferID(&iBuffer)) < iBuffer.size()) {
+        android::hardware::media::omx::V1_0::Status status;
+        CodecBuffer t = iBuffer[index].omxBuffer;
+        t.type = CodecBuffer::Type::ANW_BUFFER;
+        native_handle_t* fenceNh = native_handle_create(0, 0);
+        EXPECT_NE(fenceNh, nullptr);
+        status = omxNode->emptyBuffer(iBuffer[index].id, t, OMX_BUFFERFLAG_EOS,
+                                      0, fenceNh);
+        native_handle_close(fenceNh);
+        native_handle_delete(fenceNh);
+        EXPECT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+        iBuffer.editItemAt(index).owner = component;
+    }
+    return Void();
+};
+
+Return<void> DummyBufferSource::onOmxIdle() {
+    callback |= 0x2;
+    executing = false;
+    return Void();
+};
+
+Return<void> DummyBufferSource::onOmxLoaded() {
+    callback |= 0x4;
+    return Void();
+};
+
+Return<void> DummyBufferSource::onInputBufferAdded(uint32_t buffer) {
+    (void)buffer;
+    EXPECT_EQ(executing, false);
+    callback |= 0x8;
+    return Void();
+};
+
+Return<void> DummyBufferSource::onInputBufferEmptied(
+    uint32_t buffer, const ::android::hardware::hidl_handle& fence) {
+    (void)fence;
+    callback |= 0x10;
+    size_t i;
+    for (i = 0; i < iBuffer.size(); i++) {
+        if (iBuffer[i].id == buffer) {
+            iBuffer.editItemAt(i).owner = client;
+            break;
+        }
+    }
+    return Void();
+};
+
 // request VOP refresh
 void requestIDR(sp<IOmxNode> omxNode, OMX_U32 portIndex) {
     android::hardware::media::omx::V1_0::Status status;
@@ -303,6 +497,27 @@
         std::cerr << "[          ] Warning ! unable to set Refresh Period \n";
 }
 
+void setLatency(sp<IOmxNode> omxNode, OMX_U32 portIndex, uint32_t latency) {
+    android::hardware::media::omx::V1_0::Status status;
+    OMX_PARAM_U32TYPE param;
+    param.nU32 = (OMX_U32)latency;
+    status = setPortConfig(omxNode, (OMX_INDEXTYPE)OMX_IndexConfigLatency,
+                           portIndex, &param);
+    if (status != ::android::hardware::media::omx::V1_0::Status::OK)
+        std::cerr << "[          ] Warning ! unable to set latency\n";
+}
+
+void getLatency(sp<IOmxNode> omxNode, OMX_U32 portIndex, uint32_t* latency) {
+    android::hardware::media::omx::V1_0::Status status;
+    OMX_PARAM_U32TYPE param;
+    status = getPortConfig(omxNode, (OMX_INDEXTYPE)OMX_IndexConfigLatency,
+                           portIndex, &param);
+    if (status != ::android::hardware::media::omx::V1_0::Status::OK)
+        std::cerr << "[          ] Warning ! unable to get latency\n";
+    else
+        *latency = param.nU32;
+}
+
 // Set Default port param.
 void setDefaultPortParam(sp<IOmxNode> omxNode, OMX_U32 portIndex,
                          OMX_VIDEO_CODINGTYPE eCompressionFormat,
@@ -375,13 +590,353 @@
     strcat(URL, "bbb_352x288_420p_30fps_32frames.yuv");
 }
 
+// blocking call to ensures application to Wait till all the inputs are consumed
+void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                            android::Vector<BufferInfo>* iBuffer,
+                            android::Vector<BufferInfo>* oBuffer,
+                            bool inputDataIsMeta = false,
+                            sp<CodecProducerListener> listener = nullptr) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+    int timeOut = TIMEOUT_COUNTER;
+
+    while (timeOut--) {
+        size_t i = 0;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        EXPECT_EQ(status,
+                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+        // status == TIMED_OUT, it could be due to process time being large
+        // than DEFAULT_TIMEOUT or component needs output buffers to start
+        // processing.
+        if (inputDataIsMeta) {
+            if (listener->freeBuffers == iBuffer->size()) break;
+        } else {
+            for (; i < iBuffer->size(); i++) {
+                if ((*iBuffer)[i].owner != client) break;
+            }
+            if (i == iBuffer->size()) break;
+        }
+
+        // Dispatch an output buffer assuming outQueue.empty() is true
+        size_t index;
+        if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, index);
+        }
+    }
+}
+
+int colorFormatConversion(BufferInfo* buffer, void* buff, PixelFormat format,
+                          std::ifstream& eleStream) {
+    sp<android::hardware::graphics::mapper::V2_0::IMapper> mapper =
+        android::hardware::graphics::mapper::V2_0::IMapper::getService();
+    EXPECT_NE(mapper.get(), nullptr);
+    if (mapper.get() == nullptr) return 1;
+
+    android::hardware::hidl_handle fence;
+    android::hardware::graphics::mapper::V2_0::IMapper::Rect rect;
+    android::hardware::graphics::mapper::V2_0::YCbCrLayout ycbcrLayout;
+    android::hardware::graphics::mapper::V2_0::Error error;
+    rect.left = 0;
+    rect.top = 0;
+    rect.width = buffer->omxBuffer.attr.anwBuffer.width;
+    rect.height = buffer->omxBuffer.attr.anwBuffer.height;
+
+    if (format == PixelFormat::YV12) {
+        mapper->lockYCbCr(
+            buff, buffer->omxBuffer.attr.anwBuffer.usage, rect, fence,
+            [&](android::hardware::graphics::mapper::V2_0::Error _e,
+                android::hardware::graphics::mapper::V2_0::YCbCrLayout _n1) {
+                error = _e;
+                ycbcrLayout = _n1;
+            });
+        EXPECT_EQ(error,
+                  android::hardware::graphics::mapper::V2_0::Error::NONE);
+        if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+            return 1;
+
+        EXPECT_EQ(ycbcrLayout.chromaStep, 1U);
+        char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
+        for (size_t y = rect.height; y > 0; --y) {
+            eleStream.read(ipBuffer, rect.width);
+            if (eleStream.gcount() != rect.width) return 1;
+            ipBuffer += ycbcrLayout.yStride;
+        }
+        ipBuffer = static_cast<char*>(ycbcrLayout.cb);
+        for (size_t y = rect.height >> 1; y > 0; --y) {
+            eleStream.read(ipBuffer, rect.width >> 1);
+            if (eleStream.gcount() != rect.width >> 1) return 1;
+            ipBuffer += ycbcrLayout.cStride;
+        }
+        ipBuffer = static_cast<char*>(ycbcrLayout.cr);
+        for (size_t y = rect.height >> 1; y > 0; --y) {
+            eleStream.read(ipBuffer, rect.width >> 1);
+            if (eleStream.gcount() != rect.width >> 1) return 1;
+            ipBuffer += ycbcrLayout.cStride;
+        }
+
+        mapper->unlock(buff,
+                       [&](android::hardware::graphics::mapper::V2_0::Error _e,
+                           android::hardware::hidl_handle _n1) {
+                           error = _e;
+                           fence = _n1;
+                       });
+        EXPECT_EQ(error,
+                  android::hardware::graphics::mapper::V2_0::Error::NONE);
+        if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+            return 1;
+    } else {
+        void* data;
+        mapper->lock(buff, buffer->omxBuffer.attr.anwBuffer.usage, rect, fence,
+                     [&](android::hardware::graphics::mapper::V2_0::Error _e,
+                         void* _n1) {
+                         error = _e;
+                         data = _n1;
+                     });
+        EXPECT_EQ(error,
+                  android::hardware::graphics::mapper::V2_0::Error::NONE);
+        if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+            return 1;
+
+        if (format == PixelFormat::YCBCR_420_888) {
+            ycbcrLayout.chromaStep = 1;
+            ycbcrLayout.yStride = buffer->omxBuffer.attr.anwBuffer.stride;
+            ycbcrLayout.cStride = ycbcrLayout.yStride >> 1;
+            ycbcrLayout.y = data;
+            ycbcrLayout.cb = static_cast<char*>(ycbcrLayout.y) +
+                             (ycbcrLayout.yStride * rect.height);
+            ycbcrLayout.cr = static_cast<char*>(ycbcrLayout.cb) +
+                             ((ycbcrLayout.yStride * rect.height) >> 2);
+
+            char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
+            for (size_t y = rect.height; y > 0; --y) {
+                eleStream.read(ipBuffer, rect.width);
+                if (eleStream.gcount() != rect.width) return 1;
+                ipBuffer += ycbcrLayout.yStride;
+            }
+            ipBuffer = static_cast<char*>(ycbcrLayout.cb);
+            for (size_t y = rect.height >> 1; y > 0; --y) {
+                eleStream.read(ipBuffer, rect.width >> 1);
+                if (eleStream.gcount() != rect.width >> 1) return 1;
+                ipBuffer += ycbcrLayout.cStride;
+            }
+            ipBuffer = static_cast<char*>(ycbcrLayout.cr);
+            for (size_t y = rect.height >> 1; y > 0; --y) {
+                eleStream.read(ipBuffer, rect.width >> 1);
+                if (eleStream.gcount() != rect.width >> 1) return 1;
+                ipBuffer += ycbcrLayout.cStride;
+            }
+        } else if (format == PixelFormat::YCRCB_420_SP) {
+            ycbcrLayout.chromaStep = 2;
+            ycbcrLayout.yStride = buffer->omxBuffer.attr.anwBuffer.stride;
+            ycbcrLayout.cStride = ycbcrLayout.yStride;
+            ycbcrLayout.y = data;
+            ycbcrLayout.cr = static_cast<char*>(ycbcrLayout.y) +
+                             (ycbcrLayout.yStride * rect.height);
+            ycbcrLayout.cb = static_cast<char*>(ycbcrLayout.cr) + 1;
+
+            char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
+            for (size_t y = rect.height; y > 0; --y) {
+                eleStream.read(ipBuffer, rect.width);
+                if (eleStream.gcount() != rect.width) return 1;
+                ipBuffer += ycbcrLayout.yStride;
+            }
+            ipBuffer = static_cast<char*>(ycbcrLayout.cb);
+            for (size_t y = rect.height >> 1; y > 0; --y) {
+                for (int32_t x = 0; x<rect.width>> 1; ++x) {
+                    eleStream.read(&ipBuffer[2 * x], 1);
+                    if (eleStream.gcount() != 1) return 1;
+                }
+                ipBuffer += ycbcrLayout.cStride;
+            }
+            ipBuffer = static_cast<char*>(ycbcrLayout.cr);
+            for (size_t y = rect.height >> 1; y > 0; --y) {
+                for (int32_t x = 0; x<rect.width>> 1; ++x) {
+                    eleStream.read(&ipBuffer[2 * x], 1);
+                    if (eleStream.gcount() != 1) return 1;
+                }
+                ipBuffer += ycbcrLayout.cStride;
+            }
+        } else if (format == PixelFormat::BGRA_8888) {
+            char* ipBuffer = static_cast<char*>(data);
+            for (size_t y = rect.height; y > 0; --y) {
+                eleStream.read(ipBuffer, rect.width * 4);
+                if (eleStream.gcount() != rect.width * 4) return 1;
+                ipBuffer += buffer->omxBuffer.attr.anwBuffer.stride * 4;
+            }
+        } else {
+            EXPECT_TRUE(false) << "un expected pixel format";
+            return 1;
+        }
+
+        mapper->unlock(buff,
+                       [&](android::hardware::graphics::mapper::V2_0::Error _e,
+                           android::hardware::hidl_handle _n1) {
+                           error = _e;
+                           fence = _n1;
+                       });
+        EXPECT_EQ(error,
+                  android::hardware::graphics::mapper::V2_0::Error::NONE);
+        if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+            return 1;
+    }
+
+    return 0;
+}
+
+int fillGraphicBuffer(BufferInfo* buffer, PixelFormat format,
+                      std::ifstream& eleStream) {
+    sp<android::hardware::graphics::mapper::V2_0::IMapper> mapper =
+        android::hardware::graphics::mapper::V2_0::IMapper::getService();
+    EXPECT_NE(mapper.get(), nullptr);
+    if (mapper.get() == nullptr) return 1;
+
+    void* buff = nullptr;
+    android::hardware::graphics::mapper::V2_0::Error error;
+    mapper->importBuffer(
+        buffer->omxBuffer.nativeHandle,
+        [&](android::hardware::graphics::mapper::V2_0::Error _e, void* _n1) {
+            error = _e;
+            buff = _n1;
+        });
+    EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE);
+    if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+        return 1;
+
+    if (colorFormatConversion(buffer, buff, format, eleStream)) return 1;
+
+    error = mapper->freeBuffer(buff);
+    EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE);
+    if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
+        return 1;
+
+    return 0;
+}
+
+int dispatchGraphicBuffer(sp<IOmxNode> omxNode,
+                          sp<IGraphicBufferProducer> producer,
+                          sp<CodecProducerListener> listener,
+                          android::Vector<BufferInfo>* buffArray,
+                          OMX_U32 portIndex, std::ifstream& eleStream,
+                          uint64_t timestamp) {
+    android::hardware::media::omx::V1_0::Status status;
+    OMX_PARAM_PORTDEFINITIONTYPE portDef;
+
+    status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
+                          &portDef);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    if (status != ::android::hardware::media::omx::V1_0::Status::OK) return 1;
+
+    enum {
+        // A flag returned by dequeueBuffer when the client needs to call
+        // requestBuffer immediately thereafter.
+        BUFFER_NEEDS_REALLOCATION = 0x1,
+        // A flag returned by dequeueBuffer when all mirrored slots should be
+        // released by the client. This flag should always be processed first.
+        RELEASE_ALL_BUFFERS = 0x2,
+    };
+
+    int32_t slot;
+    int32_t result;
+    ::android::hardware::hidl_handle fence;
+    IGraphicBufferProducer::FrameEventHistoryDelta outTimestamps;
+    ::android::hardware::media::V1_0::AnwBuffer AnwBuffer;
+    PixelFormat format = PixelFormat::YV12;
+    producer->dequeueBuffer(
+        portDef.format.video.nFrameWidth, portDef.format.video.nFrameHeight,
+        format, BufferUsage::CPU_READ_OFTEN | BufferUsage::CPU_WRITE_OFTEN,
+        true, [&](int32_t _s, int32_t const& _n1,
+                  ::android::hardware::hidl_handle const& _n2,
+                  IGraphicBufferProducer::FrameEventHistoryDelta const& _n3) {
+            result = _s;
+            slot = _n1;
+            fence = _n2;
+            outTimestamps = _n3;
+        });
+    if (result & BUFFER_NEEDS_REALLOCATION) {
+        producer->requestBuffer(
+            slot, [&](int32_t _s,
+                      ::android::hardware::media::V1_0::AnwBuffer const& _n1) {
+                result = _s;
+                AnwBuffer = _n1;
+            });
+        EXPECT_EQ(result, 0);
+        if (result != 0) return 1;
+        size_t i;
+        for (i = 0; i < buffArray->size(); i++) {
+            if ((*buffArray)[i].slot == -1) {
+                buffArray->editItemAt(i).slot = slot;
+                buffArray->editItemAt(i).omxBuffer.nativeHandle =
+                    AnwBuffer.nativeHandle;
+                buffArray->editItemAt(i).omxBuffer.attr.anwBuffer =
+                    AnwBuffer.attr;
+                break;
+            }
+        }
+        EXPECT_NE(i, buffArray->size());
+        if (i == buffArray->size()) return 1;
+    }
+    EXPECT_EQ(result, 0);
+    if (result != 0) return 1;
+
+    // fill Buffer
+    BufferInfo buffer;
+    size_t i;
+    for (i = 0; i < buffArray->size(); i++) {
+        if ((*buffArray)[i].slot == slot) {
+            buffer = (*buffArray)[i];
+            break;
+        }
+    }
+    EXPECT_NE(i, buffArray->size());
+    if (i == buffArray->size()) return 1;
+    if (fillGraphicBuffer(&buffer, format, eleStream)) return 1;
+
+    // queue Buffer
+    IGraphicBufferProducer::QueueBufferOutput output;
+    IGraphicBufferProducer::QueueBufferInput input;
+    android::hardware::media::V1_0::Rect rect;
+    rect.left = 0;
+    rect.top = 0;
+    rect.right = buffer.omxBuffer.attr.anwBuffer.width;
+    rect.bottom = buffer.omxBuffer.attr.anwBuffer.height;
+    input.timestamp = timestamp;
+    input.isAutoTimestamp = false;
+    input.dataSpace =
+        android::hardware::graphics::common::V1_0::Dataspace::UNKNOWN;
+    input.crop = rect;
+    input.scalingMode = 0;
+    input.transform = 0;
+    input.stickyTransform = 0;
+    input.fence = android::hardware::hidl_handle();
+    input.surfaceDamage =
+        android::hardware::hidl_vec<android::hardware::media::V1_0::Rect>{rect};
+    input.getFrameTimestamps = false;
+    producer->queueBuffer(
+        buffer.slot, input,
+        [&](int32_t _s, const IGraphicBufferProducer::QueueBufferOutput& _n1) {
+            result = _s;
+            output = _n1;
+        });
+    EXPECT_EQ(result, 0);
+    if (result != 0) return 1;
+
+    listener->reduceCount();
+
+    return 0;
+}
+
 // Encode N Frames
 void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                   OMX_U32 portIndexOutput,
+                   OMX_U32 portIndexInput, OMX_U32 portIndexOutput,
                    android::Vector<BufferInfo>* iBuffer,
                    android::Vector<BufferInfo>* oBuffer, uint32_t nFrames,
                    uint32_t xFramerate, int bytesCount,
-                   std::ifstream& eleStream) {
+                   std::ifstream& eleStream,
+                   ::android::List<uint64_t>* timestampUslist = nullptr,
+                   bool signalEOS = true, bool inputDataIsMeta = false,
+                   sp<IGraphicBufferProducer> producer = nullptr,
+                   sp<CodecProducerListener> listener = nullptr) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
     uint32_t ipCount = 0;
@@ -398,20 +953,39 @@
     }
     // dispatch input buffers
     int32_t timestampIncr = (int)((float)1000000 / (xFramerate >> 16));
+    // timestamp scale = Nano sec
+    if (inputDataIsMeta) timestampIncr *= 1000;
     uint64_t timestamp = 0;
+    uint32_t flags = 0;
     for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
-        char* ipBuffer = static_cast<char*>(
-            static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
-        ASSERT_LE(bytesCount,
-                  static_cast<int>((*iBuffer)[i].mMemory->getSize()));
-        eleStream.read(ipBuffer, bytesCount);
-        if (eleStream.gcount() != bytesCount) break;
-        dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, 0, timestamp);
-        timestamp += timestampIncr;
-        nFrames--;
-        ipCount++;
+        if (inputDataIsMeta) {
+            if (listener->freeBuffers > listener->minUnDequeuedCount) {
+                if (dispatchGraphicBuffer(omxNode, producer, listener, iBuffer,
+                                          portIndexInput, eleStream, timestamp))
+                    break;
+                timestamp += timestampIncr;
+                nFrames--;
+                ipCount++;
+            }
+        } else {
+            char* ipBuffer = static_cast<char*>(
+                static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
+            ASSERT_LE(bytesCount,
+                      static_cast<int>((*iBuffer)[i].mMemory->getSize()));
+            eleStream.read(ipBuffer, bytesCount);
+            if (eleStream.gcount() != bytesCount) break;
+            if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+            dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, flags,
+                                timestamp);
+            if (timestampUslist) timestampUslist->push_back(timestamp);
+            timestamp += timestampIncr;
+            nFrames--;
+            ipCount++;
+        }
     }
 
+    int timeOut = TIMEOUT_COUNTER;
+    bool stall = false;
     while (1) {
         status =
             observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -422,6 +996,9 @@
                 ASSERT_EQ(msg.data.eventData.data1, portIndexOutput);
                 ASSERT_EQ(msg.data.eventData.data2,
                           OMX_IndexConfigAndroidIntraRefresh);
+            } else if (msg.data.eventData.event == OMX_EventError) {
+                EXPECT_TRUE(false) << "Received OMX_EventError, not sure why";
+                break;
             } else {
                 ASSERT_TRUE(false);
             }
@@ -431,21 +1008,51 @@
 
         // Dispatch input buffer
         size_t index = 0;
-        if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
-            char* ipBuffer = static_cast<char*>(
-                static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
-            ASSERT_LE(bytesCount,
-                      static_cast<int>((*iBuffer)[index].mMemory->getSize()));
-            eleStream.read(ipBuffer, bytesCount);
-            if (eleStream.gcount() != bytesCount) break;
-            dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, 0,
-                                timestamp);
-            timestamp += timestampIncr;
-            nFrames--;
-            ipCount++;
+        if (inputDataIsMeta) {
+            if (listener->freeBuffers > listener->minUnDequeuedCount) {
+                if (dispatchGraphicBuffer(omxNode, producer, listener, iBuffer,
+                                          portIndexInput, eleStream, timestamp))
+                    break;
+                timestamp += timestampIncr;
+                nFrames--;
+                ipCount++;
+                stall = false;
+            } else {
+                stall = true;
+            }
+        } else {
+            if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
+                char* ipBuffer = static_cast<char*>(static_cast<void*>(
+                    (*iBuffer)[index].mMemory->getPointer()));
+                ASSERT_LE(
+                    bytesCount,
+                    static_cast<int>((*iBuffer)[index].mMemory->getSize()));
+                eleStream.read(ipBuffer, bytesCount);
+                if (eleStream.gcount() != bytesCount) break;
+                if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+                dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags,
+                                    timestamp);
+                if (timestampUslist) timestampUslist->push_back(timestamp);
+                timestamp += timestampIncr;
+                nFrames--;
+                ipCount++;
+                stall = false;
+            } else {
+                stall = true;
+            }
         }
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
+            stall = false;
+        } else
+            stall = true;
+        if (stall)
+            timeOut--;
+        else
+            timeOut = TIMEOUT_COUNTER;
+        if (timeOut == 0) {
+            EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite";
+            break;
         }
         if (ipCount == 15) {
             changeBitrate(omxNode, portIndexOutput, 768000);
@@ -491,7 +1098,64 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
-// test raw stream encode
+// Test IOmxBufferSource CallBacks
+TEST_F(VideoEncHidlTest, BufferSourceCallBacks) {
+    description("Test IOmxBufferSource CallBacks");
+    if (disableTest) return;
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamVideoInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+
+    // Configure input port
+    uint32_t nFrameWidth = 352;
+    uint32_t nFrameHeight = 288;
+    uint32_t xFramerate = (30U << 16);
+    OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatAndroidOpaque;
+    setupRAWPort(omxNode, kPortIndexInput, nFrameWidth, nFrameHeight, 0,
+                 xFramerate, eColorFormat);
+
+    sp<DummyBufferSource> buffersource = new DummyBufferSource(omxNode);
+    EXPECT_NE(buffersource, nullptr);
+    status = omxNode->setInputSurface(buffersource);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = PortMode::DYNAMIC_ANW_BUFFER;
+    portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &buffersource->iBuffer,
+                            &buffersource->oBuffer, kPortIndexInput,
+                            kPortIndexOutput, portMode);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+    testEOS(omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer,
+            false, eosFlag);
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &buffersource->iBuffer,
+                             &buffersource->oBuffer);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &buffersource->iBuffer,
+                            &buffersource->oBuffer, kPortIndexInput,
+                            kPortIndexOutput);
+    // test for callbacks
+    EXPECT_EQ(buffersource->callback, 31);
+}
+
+// test raw stream encode (input is byte buffers)
 TEST_F(VideoEncHidlTest, EncodeTest) {
     description("Test Encode");
     if (disableTest) return;
@@ -511,8 +1175,8 @@
     GetURLForComponent(mURL);
 
     std::ifstream eleStream;
-    eleStream.open(mURL, std::ifstream::binary);
-    ASSERT_EQ(eleStream.is_open(), true);
+
+    timestampDevTest = true;
 
     // Configure input port
     uint32_t nFrameWidth = 352;
@@ -526,6 +1190,7 @@
     setDefaultPortParam(omxNode, kPortIndexOutput, eCompressionFormat, nBitRate,
                         xFramerate);
     setRefreshPeriod(omxNode, kPortIndexOutput, 0);
+
     unsigned int index;
     omxNode->getExtensionIndex(
         "OMX.google.android.index.prependSPSPPSToIDRFrames",
@@ -542,24 +1207,307 @@
     if (status != ::android::hardware::media::omx::V1_0::Status::OK)
         std::cerr
             << "[          ] Warning ! unable to prependSPSPPSToIDRFrames\n";
+    else
+        prependSPSPPS = true;
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    if (isSecure && prependSPSPPS) portMode[1] = PortMode::PRESET_SECURE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    uint32_t latency = 0;
+    setLatency(omxNode, kPortIndexInput, latency);
+    getLatency(omxNode, kPortIndexInput, &latency);
 
     android::Vector<BufferInfo> iBuffer, oBuffer;
 
     // set state to idle
     changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
-                            kPortIndexInput, kPortIndexOutput);
+                            kPortIndexInput, kPortIndexOutput, portMode);
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
 
-    encodeNFrames(omxNode, observer, kPortIndexOutput, &iBuffer, &oBuffer, 1024,
-                  xFramerate, (nFrameWidth * nFrameHeight * 3) >> 1, eleStream);
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    encodeNFrames(omxNode, observer, kPortIndexInput, kPortIndexOutput,
+                  &iBuffer, &oBuffer, 32, xFramerate,
+                  (nFrameWidth * nFrameHeight * 3) >> 1, eleStream,
+                  &timestampUslist);
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
+    EXPECT_EQ(timestampUslist.empty(), true);
+
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
     // set state to executing
     changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                             kPortIndexInput, kPortIndexOutput);
+}
 
+// test raw stream encode (input is ANW buffers)
+TEST_F(VideoEncHidlTest, EncodeTestBufferMetaModes) {
+    description("Test Encode Input buffer metamodes");
+    if (disableTest) return;
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamVideoInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+
+    // Configure input port
+    uint32_t nFrameWidth = 352;
+    uint32_t nFrameHeight = 288;
+    uint32_t xFramerate = (30U << 16);
+    OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatAndroidOpaque;
+    setupRAWPort(omxNode, kPortIndexInput, nFrameWidth, nFrameHeight, 0,
+                 xFramerate, eColorFormat);
+
+    // CreateInputSurface
+    EXPECT_TRUE(omx->createInputSurface(
+                       [&](android::hardware::media::omx::V1_0::Status _s,
+                           sp<IGraphicBufferProducer> const& _nl,
+                           sp<IGraphicBufferSource> const& _n2) {
+                           status = _s;
+                           producer = _nl;
+                           source = _n2;
+                       })
+                    .isOk());
+    ASSERT_NE(producer, nullptr);
+    ASSERT_NE(source, nullptr);
+
+    // setMaxDequeuedBufferCount
+    int32_t returnval;
+    int32_t value;
+    producer->query(NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
+                    [&returnval, &value](int32_t _s, int32_t _n1) {
+                        returnval = _s;
+                        value = _n1;
+                    });
+    ASSERT_EQ(returnval, 0);
+    OMX_PARAM_PORTDEFINITIONTYPE portDef;
+    status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
+                          kPortIndexInput, &portDef);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(::android::OK,
+              producer->setMaxDequeuedBufferCount(portDef.nBufferCountActual));
+
+    // Connect :: Mock Producer Listener
+    IGraphicBufferProducer::QueueBufferOutput qbo;
+    sp<CodecProducerListener> listener =
+        new CodecProducerListener(portDef.nBufferCountActual + value, value);
+    producer->connect(
+        listener, NATIVE_WINDOW_API_CPU, false,
+        [&](int32_t _s, IGraphicBufferProducer::QueueBufferOutput const& _n1) {
+            returnval = _s;
+            qbo = _n1;
+        });
+    ASSERT_EQ(returnval, 0);
+
+    portDef.nBufferCountActual = portDef.nBufferCountActual + value;
+    status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
+                          kPortIndexInput, &portDef);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // Do setInputSurface()
+    // enable MetaMode on input port
+    status = source->configure(
+        omxNode, android::hardware::graphics::common::V1_0::Dataspace::UNKNOWN);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = PortMode::DYNAMIC_ANW_BUFFER;
+    portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    char mURL[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    GetURLForComponent(mURL);
+
+    uint32_t latency = 0;
+    setLatency(omxNode, kPortIndexInput, latency);
+    getLatency(omxNode, kPortIndexInput, &latency);
+
+    std::ifstream eleStream;
+
+    status = source->setSuspend(false, 0);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setRepeatPreviousFrameDelayUs(100000);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setMaxFps(24.0f);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setTimeLapseConfig(24.0, 24.0);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setTimeOffsetUs(-100);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setStartTimeUs(10);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = source->setStopTimeUs(1000000);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    ::android::hardware::media::omx::V1_0::ColorAspects aspects;
+    aspects.range =
+        ::android::hardware::media::omx::V1_0::ColorAspects::Range::UNSPECIFIED;
+    aspects.primaries = ::android::hardware::media::omx::V1_0::ColorAspects::
+        Primaries::UNSPECIFIED;
+    aspects.transfer = ::android::hardware::media::omx::V1_0::ColorAspects::
+        Transfer::UNSPECIFIED;
+    aspects.matrixCoeffs = ::android::hardware::media::omx::V1_0::ColorAspects::
+        MatrixCoeffs::UNSPECIFIED;
+    status = source->setColorAspects(aspects);
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    int64_t stopTimeOffsetUs;
+    source->getStopTimeOffsetUs(
+        [&](android::hardware::media::omx::V1_0::Status _s, int64_t _n1) {
+            status = _s;
+            stopTimeOffsetUs = _n1;
+        });
+    EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput, portMode);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    encodeNFrames(omxNode, observer, kPortIndexInput, kPortIndexOutput,
+                  &iBuffer, &oBuffer, 1024, xFramerate,
+                  (nFrameWidth * nFrameHeight * 3) >> 1, eleStream, nullptr,
+                  false, true, producer, listener);
     eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, true,
+                           listener);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+
+    returnval = producer->disconnect(
+        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);
+    ASSERT_EQ(returnval, 0);
+}
+
+// Test end of stream
+TEST_F(VideoEncHidlTest, EncodeTestEOS) {
+    description("Test EOS");
+    if (disableTest) return;
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamVideoInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+
+    // CreateInputSurface
+    EXPECT_TRUE(omx->createInputSurface(
+                       [&](android::hardware::media::omx::V1_0::Status _s,
+                           sp<IGraphicBufferProducer> const& _nl,
+                           sp<IGraphicBufferSource> const& _n2) {
+                           status = _s;
+                           producer = _nl;
+                           source = _n2;
+                       })
+                    .isOk());
+    ASSERT_NE(producer, nullptr);
+    ASSERT_NE(source, nullptr);
+
+    // setMaxDequeuedBufferCount
+    int32_t returnval;
+    int32_t value;
+    producer->query(NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
+                    [&returnval, &value](int32_t _s, int32_t _n1) {
+                        returnval = _s;
+                        value = _n1;
+                    });
+    ASSERT_EQ(returnval, 0);
+    OMX_PARAM_PORTDEFINITIONTYPE portDef;
+    status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
+                          kPortIndexInput, &portDef);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    ASSERT_EQ(::android::OK,
+              producer->setMaxDequeuedBufferCount(portDef.nBufferCountActual));
+
+    // Connect :: Mock Producer Listener
+    IGraphicBufferProducer::QueueBufferOutput qbo;
+    sp<CodecProducerListener> listener =
+        new CodecProducerListener(portDef.nBufferCountActual + value, value);
+    producer->connect(
+        listener, NATIVE_WINDOW_API_CPU, false,
+        [&](int32_t _s, IGraphicBufferProducer::QueueBufferOutput const& _n1) {
+            returnval = _s;
+            qbo = _n1;
+        });
+    ASSERT_EQ(returnval, 0);
+
+    portDef.nBufferCountActual = portDef.nBufferCountActual + value;
+    status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
+                          kPortIndexInput, &portDef);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // Do setInputSurface()
+    // enable MetaMode on input port
+    status = source->configure(
+        omxNode, android::hardware::graphics::common::V1_0::Dataspace::UNKNOWN);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    // set port mode
+    PortMode portMode[2];
+    portMode[0] = PortMode::DYNAMIC_ANW_BUFFER;
+    portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+    status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput, portMode);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    // send EOS
+    status = source->signalEndOfInputStream();
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, true,
+                           listener);
+    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+
+    returnval = producer->disconnect(
+        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);
+    ASSERT_EQ(returnval, 0);
 }
 
 int main(int argc, char** argv) {
diff --git a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
index 7035048..271b4d4 100644
--- a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
@@ -15,6 +15,11 @@
  */
 
 #define LOG_TAG "media_omx_hidl_video_test_common"
+
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
 #include <android-base/logging.h>
 
 #include <android/hardware/media/omx/1.0/IOmx.h>
@@ -30,6 +35,7 @@
 using ::android::hardware::media::omx::V1_0::IOmxNode;
 using ::android::hardware::media::omx::V1_0::Message;
 using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
 using ::android::hidl::allocator::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
 using ::android::hidl::memory::V1_0::IMapper;
@@ -41,281 +47,11 @@
 
 #include <VtsHalHidlTargetTestBase.h>
 #include <hidlmemory/mapping.h>
+#include <media/hardware/HardwareAPI.h>
 #include <media_hidl_test_common.h>
 #include <media_video_hidl_test_common.h>
 #include <memory>
 
-// allocate buffers needed on a component port
-void allocatePortBuffers(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         OMX_U32 portIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    OMX_PARAM_PORTDEFINITIONTYPE portDef;
-
-    buffArray->clear();
-
-    sp<IAllocator> allocator = IAllocator::getService("ashmem");
-    EXPECT_NE(allocator.get(), nullptr);
-
-    status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
-                          &portDef);
-    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-
-    for (size_t i = 0; i < portDef.nBufferCountActual; i++) {
-        BufferInfo buffer;
-        buffer.owner = client;
-        buffer.omxBuffer.type = CodecBuffer::Type::SHARED_MEM;
-        buffer.omxBuffer.attr.preset.rangeOffset = 0;
-        buffer.omxBuffer.attr.preset.rangeLength = 0;
-        bool success = false;
-        allocator->allocate(
-            portDef.nBufferSize,
-            [&success, &buffer](bool _s,
-                                ::android::hardware::hidl_memory const& mem) {
-                success = _s;
-                buffer.omxBuffer.sharedMemory = mem;
-            });
-        ASSERT_EQ(success, true);
-        ASSERT_EQ(buffer.omxBuffer.sharedMemory.size(), portDef.nBufferSize);
-        buffer.mMemory = mapMemory(buffer.omxBuffer.sharedMemory);
-        ASSERT_NE(buffer.mMemory, nullptr);
-        omxNode->useBuffer(
-            portIndex, buffer.omxBuffer,
-            [&status, &buffer](android::hardware::media::omx::V1_0::Status _s,
-                               uint32_t id) {
-                status = _s;
-                buffer.id = id;
-            });
-        buffArray->push(buffer);
-        ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-    }
-}
-
-// State Transition : Loaded -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on input port
-    allocatePortBuffers(omxNode, iBuffer, kPortIndexInput);
-
-    // Dont switch states until the ports are populated
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    // allocate buffers on output port
-    allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
-
-    // As the ports are populated, check if the state transition is complete
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    return;
-}
-
-// State Transition : Idle -> Loaded
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput,
-                             OMX_U32 kPortIndexOutput) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Loaded
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateLoaded);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexInput, (*iBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    // dont change state until all buffers are freed
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        status = omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id);
-        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    }
-
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);
-
-    return;
-}
-
-// State Transition : Idle -> Execute
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateIdletoExecute(sp<IOmxNode> omxNode,
-                              sp<CodecObserver> observer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to execute
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateExecuting);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateExecuting);
-
-    return;
-}
-
-// State Transition : Execute -> Idle
-// Note: This function does not make any background checks for this transition.
-// The callee holds the reponsibility to ensure the legality of the transition.
-void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                              android::Vector<BufferInfo>* iBuffer,
-                              android::Vector<BufferInfo>* oBuffer) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // set state to Idle
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
-                                  OMX_StateIdle);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
-    ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle);
-
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-}
-
-// get empty buffer index
-size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray) {
-    for (size_t i = 0; i < buffArray->size(); i++) {
-        if ((*buffArray)[i].owner == client) return i;
-    }
-    return buffArray->size();
-}
-
-// dispatch buffer to output port
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = 0;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// dispatch buffer to input port
-void dispatchInputBuffer(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         size_t bufferIndex, int bytesCount, uint32_t flags,
-                         uint64_t timestamp) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = bytesCount;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t, flags,
-                                  timestamp, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
-// Flush input and output ports
-void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                android::Vector<BufferInfo>* iBuffer,
-                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput, int64_t timeoutUs) {
-    android::hardware::media::omx::V1_0::Status status;
-    Message msg;
-
-    // Flush input port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexInput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexInput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < iBuffer->size(); ++i) {
-        EXPECT_EQ((*iBuffer)[i].owner, client);
-    }
-
-    // Flush output port
-    status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
-                                  kPortIndexOutput);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    ASSERT_EQ(msg.type, Message::Type::EVENT);
-    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
-    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
-    // test if client got all its buffers back
-    for (size_t i = 0; i < oBuffer->size(); ++i) {
-        EXPECT_EQ((*oBuffer)[i].owner, client);
-    }
-}
-
 Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex,
     OMX_VIDEO_CODINGTYPE eCompressionFormat, OMX_COLOR_FORMATTYPE eColorFormat,
diff --git a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
index 00f9afe..ce4272c 100644
--- a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
@@ -25,41 +25,6 @@
 /*
  * Common video utils
  */
-void allocatePortBuffers(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         OMX_U32 portIndex);
-
-void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
-
-void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                             android::Vector<BufferInfo>* iBuffer,
-                             android::Vector<BufferInfo>* oBuffer,
-                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
-
-void changeStateIdletoExecute(sp<IOmxNode> omxNode, sp<CodecObserver> observer);
-
-void changeStateExecutetoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                              android::Vector<BufferInfo>* iBuffer,
-                              android::Vector<BufferInfo>* oBuffer);
-
-size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray);
-
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex);
-
-void dispatchInputBuffer(sp<IOmxNode> omxNode,
-                         android::Vector<BufferInfo>* buffArray,
-                         size_t bufferIndex, int bytesCount, uint32_t flags,
-                         uint64_t timestamp);
-
-void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
-                android::Vector<BufferInfo>* iBuffer,
-                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
 
 Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex,
diff --git a/oemlock/1.0/Android.bp b/oemlock/1.0/Android.bp
index dc6581e..21e7271 100644
--- a/oemlock/1.0/Android.bp
+++ b/oemlock/1.0/Android.bp
@@ -41,6 +41,7 @@
 
 cc_library_shared {
     name: "android.hardware.oemlock@1.0",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.oemlock@1.0_genc++"],
     generated_headers: ["android.hardware.oemlock@1.0_genc++_headers"],
     export_generated_headers: ["android.hardware.oemlock@1.0_genc++_headers"],
diff --git a/power/1.1/Android.bp b/power/1.1/Android.bp
index ee50a18..bfc140f 100644
--- a/power/1.1/Android.bp
+++ b/power/1.1/Android.bp
@@ -41,6 +41,7 @@
 
 cc_library_shared {
     name: "android.hardware.power@1.1",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.power@1.1_genc++"],
     generated_headers: ["android.hardware.power@1.1_genc++_headers"],
     export_generated_headers: ["android.hardware.power@1.1_genc++_headers"],
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index 7808de1..5403971 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -27,7 +27,8 @@
            "radio_hidl_hal_test.cpp",
            "radio_hidl_hal_voice.cpp",
            "radio_response.cpp",
-           "VtsHalRadioV1_0TargetTest.cpp"],
+           "VtsHalRadioV1_0TargetTest.cpp",
+           "vts_test_util.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
@@ -51,7 +52,8 @@
     srcs: ["sap_callback.cpp",
            "sap_hidl_hal_api.cpp",
            "sap_hidl_hal_test.cpp",
-           "VtsHalSapV1_0TargetTest.cpp"],
+           "VtsHalSapV1_0TargetTest.cpp",
+           "vts_test_util.cpp"],
     shared_libs: [
         "libbase",
         "liblog",
diff --git a/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
index e7c89d5..59881ef 100644
--- a/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
+++ b/radio/1.0/vts/functional/VtsHalRadioV1_0TargetTest.cpp
@@ -17,11 +17,16 @@
 #include <radio_hidl_hal_utils.h>
 
 int main(int argc, char** argv) {
-  ::testing::AddGlobalTestEnvironment(new RadioHidlEnvironment);
-  ::testing::InitGoogleTest(&argc, argv);
+    ::testing::AddGlobalTestEnvironment(new RadioHidlEnvironment);
+    ::testing::InitGoogleTest(&argc, argv);
 
-  int status = RUN_ALL_TESTS();
-  LOG(INFO) << "Test result = " << status;
+    // setup seed for rand function
+    int seedSrand = time(NULL);
+    std::cout << "seed setup for random function (radio):" + std::to_string(seedSrand) << std::endl;
+    srand(seedSrand);
 
-  return status;
+    int status = RUN_ALL_TESTS();
+    LOG(INFO) << "Test result = " << status;
+
+    return status;
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp b/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
index 5306076..5e5c50c 100644
--- a/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
+++ b/radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
@@ -17,12 +17,17 @@
 #include <sap_hidl_hal_utils.h>
 
 int main(int argc, char** argv) {
-  // Add Sim-access Profile Hidl Environment
-  ::testing::AddGlobalTestEnvironment(new SapHidlEnvironment);
-  ::testing::InitGoogleTest(&argc, argv);
+    // Add Sim-access Profile Hidl Environment
+    ::testing::AddGlobalTestEnvironment(new SapHidlEnvironment);
+    ::testing::InitGoogleTest(&argc, argv);
 
-  int status = RUN_ALL_TESTS();
-  LOG(INFO) << "Test result = " << status;
+    // setup seed for rand function
+    int seedSrand = time(NULL);
+    std::cout << "seed setup for random function (sap):" + std::to_string(seedSrand) << std::endl;
+    srand(seedSrand);
 
-  return status;
+    int status = RUN_ALL_TESTS();
+    LOG(INFO) << "Test result = " << status;
+
+    return status;
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp b/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
index bbca9e4..3bf7c9d 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_cell_broadcast.cpp
@@ -22,165 +22,163 @@
  * Test IRadio.setGsmBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, setGsmBroadcastConfig) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Create GsmBroadcastSmsConfigInfo #1
-  GsmBroadcastSmsConfigInfo gbSmsConfig1;
-  gbSmsConfig1.fromServiceId = 4352;
-  gbSmsConfig1.toServiceId = 4354;
-  gbSmsConfig1.fromCodeScheme = 0;
-  gbSmsConfig1.toCodeScheme = 255;
-  gbSmsConfig1.selected = true;
+    // Create GsmBroadcastSmsConfigInfo #1
+    GsmBroadcastSmsConfigInfo gbSmsConfig1;
+    gbSmsConfig1.fromServiceId = 4352;
+    gbSmsConfig1.toServiceId = 4354;
+    gbSmsConfig1.fromCodeScheme = 0;
+    gbSmsConfig1.toCodeScheme = 255;
+    gbSmsConfig1.selected = true;
 
-  // Create GsmBroadcastSmsConfigInfo #2
-  GsmBroadcastSmsConfigInfo gbSmsConfig2;
-  gbSmsConfig2.fromServiceId = 4356;
-  gbSmsConfig2.toServiceId = 4356;
-  gbSmsConfig2.fromCodeScheme = 0;
-  gbSmsConfig2.toCodeScheme = 255;
-  gbSmsConfig2.selected = true;
+    // Create GsmBroadcastSmsConfigInfo #2
+    GsmBroadcastSmsConfigInfo gbSmsConfig2;
+    gbSmsConfig2.fromServiceId = 4356;
+    gbSmsConfig2.toServiceId = 4356;
+    gbSmsConfig2.fromCodeScheme = 0;
+    gbSmsConfig2.toCodeScheme = 255;
+    gbSmsConfig2.selected = true;
 
-  // Create GsmBroadcastSmsConfigInfo #3
-  GsmBroadcastSmsConfigInfo gbSmsConfig3;
-  gbSmsConfig3.fromServiceId = 4370;
-  gbSmsConfig3.toServiceId = 4379;
-  gbSmsConfig3.fromCodeScheme = 0;
-  gbSmsConfig3.toCodeScheme = 255;
-  gbSmsConfig3.selected = true;
+    // Create GsmBroadcastSmsConfigInfo #3
+    GsmBroadcastSmsConfigInfo gbSmsConfig3;
+    gbSmsConfig3.fromServiceId = 4370;
+    gbSmsConfig3.toServiceId = 4379;
+    gbSmsConfig3.fromCodeScheme = 0;
+    gbSmsConfig3.toCodeScheme = 255;
+    gbSmsConfig3.selected = true;
 
-  // Create GsmBroadcastSmsConfigInfo #4
-  GsmBroadcastSmsConfigInfo gbSmsConfig4;
-  gbSmsConfig4.fromServiceId = 4383;
-  gbSmsConfig4.toServiceId = 4391;
-  gbSmsConfig4.fromCodeScheme = 0;
-  gbSmsConfig4.toCodeScheme = 255;
-  gbSmsConfig4.selected = true;
+    // Create GsmBroadcastSmsConfigInfo #4
+    GsmBroadcastSmsConfigInfo gbSmsConfig4;
+    gbSmsConfig4.fromServiceId = 4383;
+    gbSmsConfig4.toServiceId = 4391;
+    gbSmsConfig4.fromCodeScheme = 0;
+    gbSmsConfig4.toCodeScheme = 255;
+    gbSmsConfig4.selected = true;
 
-  // Create GsmBroadcastSmsConfigInfo #5
-  GsmBroadcastSmsConfigInfo gbSmsConfig5;
-  gbSmsConfig5.fromServiceId = 4392;
-  gbSmsConfig5.toServiceId = 4392;
-  gbSmsConfig5.fromCodeScheme = 0;
-  gbSmsConfig5.toCodeScheme = 255;
-  gbSmsConfig5.selected = true;
+    // Create GsmBroadcastSmsConfigInfo #5
+    GsmBroadcastSmsConfigInfo gbSmsConfig5;
+    gbSmsConfig5.fromServiceId = 4392;
+    gbSmsConfig5.toServiceId = 4392;
+    gbSmsConfig5.fromCodeScheme = 0;
+    gbSmsConfig5.toCodeScheme = 255;
+    gbSmsConfig5.selected = true;
 
-  android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>
-      gsmBroadcastSmsConfigsInfoList = {
-          gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
+    android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo> gsmBroadcastSmsConfigsInfoList = {
+        gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
 
-  radio->setGsmBroadcastConfig(++serial, gsmBroadcastSmsConfigsInfoList);
+    radio->setGsmBroadcastConfig(serial, gsmBroadcastSmsConfigsInfoList);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getGsmBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getGsmBroadcastConfig) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getGsmBroadcastConfig(++serial);
+    radio->getGsmBroadcastConfig(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setCdmaBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaBroadcastConfig) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  CdmaBroadcastSmsConfigInfo cbSmsConfig;
-  cbSmsConfig.serviceCategory = 4096;
-  cbSmsConfig.language = 1;
-  cbSmsConfig.selected = true;
+    CdmaBroadcastSmsConfigInfo cbSmsConfig;
+    cbSmsConfig.serviceCategory = 4096;
+    cbSmsConfig.language = 1;
+    cbSmsConfig.selected = true;
 
-  android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>
-      cdmaBroadcastSmsConfigInfoList = {cbSmsConfig};
+    android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo> cdmaBroadcastSmsConfigInfoList = {
+        cbSmsConfig};
 
-  radio->setCdmaBroadcastConfig(++serial, cdmaBroadcastSmsConfigInfoList);
+    radio->setCdmaBroadcastConfig(serial, cdmaBroadcastSmsConfigInfoList);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.getCdmaBroadcastConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaBroadcastConfig) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCdmaBroadcastConfig(++serial);
+    radio->getCdmaBroadcastConfig(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError());
+    }
 }
 
 /*
  * Test IRadio.setCdmaBroadcastActivation() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaBroadcastActivation) {
-  int serial = 0;
-  bool activate = false;
+    int serial = GetRandomSerialNumber();
+    bool activate = false;
 
-  radio->setCdmaBroadcastActivation(++serial, activate);
+    radio->setCdmaBroadcastActivation(serial, activate);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.setGsmBroadcastActivation() for the response returned.
  */
 TEST_F(RadioHidlTest, setGsmBroadcastActivation) {
-  int serial = 0;
-  bool activate = false;
+    int serial = GetRandomSerialNumber();
+    bool activate = false;
 
-  radio->setGsmBroadcastActivation(++serial, activate);
+    radio->setGsmBroadcastActivation(serial, activate);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED);
+    }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_data.cpp b/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
index 4eeabe8..108676b 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_data.cpp
@@ -22,209 +22,204 @@
  * Test IRadio.getDataRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getDataRegistrationState) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getDataRegistrationState(++serial);
+    radio->getDataRegistrationState(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 }
 
 /*
  * Test IRadio.setupDataCall() for the response returned.
  */
 TEST_F(RadioHidlTest, setupDataCall) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  RadioTechnology radioTechnology = RadioTechnology::LTE;
+    RadioTechnology radioTechnology = RadioTechnology::LTE;
 
-  DataProfileInfo dataProfileInfo;
-  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-  dataProfileInfo.profileId = DataProfileId::IMS;
-  dataProfileInfo.apn = hidl_string("VZWIMS");
-  dataProfileInfo.protocol = hidl_string("IPV4V6");
-  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-  dataProfileInfo.user = "";
-  dataProfileInfo.password = "";
-  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-  dataProfileInfo.maxConnsTime = 300;
-  dataProfileInfo.maxConns = 20;
-  dataProfileInfo.waitTime = 0;
-  dataProfileInfo.enabled = true;
-  dataProfileInfo.supportedApnTypesBitmap = 320;
-  dataProfileInfo.bearerBitmap = 161543;
-  dataProfileInfo.mtu = 0;
-  dataProfileInfo.mvnoType = MvnoType::NONE;
-  dataProfileInfo.mvnoMatchData = hidl_string();
+    DataProfileInfo dataProfileInfo;
+    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+    dataProfileInfo.profileId = DataProfileId::IMS;
+    dataProfileInfo.apn = hidl_string("VZWIMS");
+    dataProfileInfo.protocol = hidl_string("IPV4V6");
+    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+    dataProfileInfo.user = "";
+    dataProfileInfo.password = "";
+    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+    dataProfileInfo.maxConnsTime = 300;
+    dataProfileInfo.maxConns = 20;
+    dataProfileInfo.waitTime = 0;
+    dataProfileInfo.enabled = true;
+    dataProfileInfo.supportedApnTypesBitmap = 320;
+    dataProfileInfo.bearerBitmap = 161543;
+    dataProfileInfo.mtu = 0;
+    dataProfileInfo.mvnoType = MvnoType::NONE;
+    dataProfileInfo.mvnoMatchData = hidl_string();
 
-  bool modemCognitive = false;
-  bool roamingAllowed = false;
-  bool isRoaming = false;
+    bool modemCognitive = false;
+    bool roamingAllowed = false;
+    bool isRoaming = false;
 
-  radio->setupDataCall(++serial, radioTechnology, dataProfileInfo,
-                       modemCognitive, roamingAllowed, isRoaming);
+    radio->setupDataCall(serial, radioTechnology, dataProfileInfo, modemCognitive, roamingAllowed,
+                         isRoaming);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
-                  radioRsp->rspInfo.error ==
-                      RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW ||
-                  radioRsp->rspInfo.error ==
-                      RadioError::OP_NOT_ALLOWED_DURING_VOICE_CALL ||
-                  CheckOEMError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
+                    radioRsp->rspInfo.error == RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW ||
+                    radioRsp->rspInfo.error == RadioError::OP_NOT_ALLOWED_DURING_VOICE_CALL ||
+                    CheckOEMError());
+    }
 }
 
 /*
  * Test IRadio.deactivateDataCall() for the response returned.
  */
 TEST_F(RadioHidlTest, deactivateDataCall) {
-  int serial = 0;
-  int cid = 1;
-  bool reasonRadioShutDown = false;
+    int serial = GetRandomSerialNumber();
+    int cid = 1;
+    bool reasonRadioShutDown = false;
 
-  radio->deactivateDataCall(++serial, cid, reasonRadioShutDown);
+    radio->deactivateDataCall(serial, cid, reasonRadioShutDown);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      EXPECT_EQ(RadioError::INVALID_CALL_ID, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::INVALID_CALL_ID, radioRsp->rspInfo.error);
+    }
 }
 
 /*
  * Test IRadio.getDataCallList() for the response returned.
  */
 TEST_F(RadioHidlTest, getDataCallList) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getDataCallList(++serial);
+    radio->getDataCallList(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE);
+    }
 }
 
 /*
  * Test IRadio.setInitialAttachApn() for the response returned.
  */
 TEST_F(RadioHidlTest, setInitialAttachApn) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  DataProfileInfo dataProfileInfo;
-  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-  dataProfileInfo.profileId = DataProfileId::IMS;
-  dataProfileInfo.apn = hidl_string("VZWIMS");
-  dataProfileInfo.protocol = hidl_string("IPV4V6");
-  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-  dataProfileInfo.user = "";
-  dataProfileInfo.password = "";
-  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-  dataProfileInfo.maxConnsTime = 300;
-  dataProfileInfo.maxConns = 20;
-  dataProfileInfo.waitTime = 0;
-  dataProfileInfo.enabled = true;
-  dataProfileInfo.supportedApnTypesBitmap = 320;
-  dataProfileInfo.bearerBitmap = 161543;
-  dataProfileInfo.mtu = 0;
-  dataProfileInfo.mvnoType = MvnoType::NONE;
-  dataProfileInfo.mvnoMatchData = hidl_string();
+    DataProfileInfo dataProfileInfo;
+    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+    dataProfileInfo.profileId = DataProfileId::IMS;
+    dataProfileInfo.apn = hidl_string("VZWIMS");
+    dataProfileInfo.protocol = hidl_string("IPV4V6");
+    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+    dataProfileInfo.user = "";
+    dataProfileInfo.password = "";
+    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+    dataProfileInfo.maxConnsTime = 300;
+    dataProfileInfo.maxConns = 20;
+    dataProfileInfo.waitTime = 0;
+    dataProfileInfo.enabled = true;
+    dataProfileInfo.supportedApnTypesBitmap = 320;
+    dataProfileInfo.bearerBitmap = 161543;
+    dataProfileInfo.mtu = 0;
+    dataProfileInfo.mvnoType = MvnoType::NONE;
+    dataProfileInfo.mvnoMatchData = hidl_string();
 
-  bool modemCognitive = true;
-  bool isRoaming = false;
+    bool modemCognitive = true;
+    bool isRoaming = false;
 
-  radio->setInitialAttachApn(++serial, dataProfileInfo, modemCognitive,
-                             isRoaming);
+    radio->setInitialAttachApn(serial, dataProfileInfo, modemCognitive, isRoaming);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
-                  radioRsp->rspInfo.error ==
-                      RadioError::SUBSCRIPTION_NOT_AVAILABLE ||
-                  CheckOEMError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
+                    radioRsp->rspInfo.error == RadioError::SUBSCRIPTION_NOT_AVAILABLE ||
+                    CheckOEMError());
+    }
 }
 
 /*
  * Test IRadio.setDataAllowed() for the response returned.
  */
 TEST_F(RadioHidlTest, setDataAllowed) {
-  int serial = 0;
-  bool allow = true;
+    int serial = GetRandomSerialNumber();
+    bool allow = true;
 
-  radio->setDataAllowed(++serial, allow);
+    radio->setDataAllowed(serial, allow);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 }
 
 /*
  * Test IRadio.setDataProfile() for the response returned.
  */
 TEST_F(RadioHidlTest, setDataProfile) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Create a dataProfileInfo
-  DataProfileInfo dataProfileInfo;
-  memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
-  dataProfileInfo.profileId = DataProfileId::IMS;
-  dataProfileInfo.apn = hidl_string("VZWIMS");
-  dataProfileInfo.protocol = hidl_string("IPV4V6");
-  dataProfileInfo.roamingProtocol = hidl_string("IPV6");
-  dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
-  dataProfileInfo.user = "";
-  dataProfileInfo.password = "";
-  dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
-  dataProfileInfo.maxConnsTime = 300;
-  dataProfileInfo.maxConns = 20;
-  dataProfileInfo.waitTime = 0;
-  dataProfileInfo.enabled = true;
-  dataProfileInfo.supportedApnTypesBitmap = 320;
-  dataProfileInfo.bearerBitmap = 161543;
-  dataProfileInfo.mtu = 0;
-  dataProfileInfo.mvnoType = MvnoType::NONE;
-  dataProfileInfo.mvnoMatchData = hidl_string();
+    // Create a dataProfileInfo
+    DataProfileInfo dataProfileInfo;
+    memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
+    dataProfileInfo.profileId = DataProfileId::IMS;
+    dataProfileInfo.apn = hidl_string("VZWIMS");
+    dataProfileInfo.protocol = hidl_string("IPV4V6");
+    dataProfileInfo.roamingProtocol = hidl_string("IPV6");
+    dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
+    dataProfileInfo.user = "";
+    dataProfileInfo.password = "";
+    dataProfileInfo.type = DataProfileInfoType::THREE_GPP2;
+    dataProfileInfo.maxConnsTime = 300;
+    dataProfileInfo.maxConns = 20;
+    dataProfileInfo.waitTime = 0;
+    dataProfileInfo.enabled = true;
+    dataProfileInfo.supportedApnTypesBitmap = 320;
+    dataProfileInfo.bearerBitmap = 161543;
+    dataProfileInfo.mtu = 0;
+    dataProfileInfo.mvnoType = MvnoType::NONE;
+    dataProfileInfo.mvnoMatchData = hidl_string();
 
-  // Create a dataProfileInfoList
-  android::hardware::hidl_vec<DataProfileInfo> dataProfileInfoList = {
-      dataProfileInfo};
+    // Create a dataProfileInfoList
+    android::hardware::hidl_vec<DataProfileInfo> dataProfileInfoList = {dataProfileInfo};
 
-  bool isRoadming = false;
+    bool isRoadming = false;
 
-  radio->setDataProfile(++serial, dataProfileInfoList, isRoadming);
+    radio->setDataProfile(serial, dataProfileInfoList, isRoadming);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    // TODO(shuoq): Will add error check when we know the expected error from QC
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        // TODO(shuoq): Will add error check when we know the expected error from QC
+    }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
index 6af5fba..4841185 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_icc.cpp
@@ -20,309 +20,303 @@
  * Test IRadio.getIccCardStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, getIccCardStatus) {
-  EXPECT_LE(cardStatus.applications.size(),
-            (unsigned int)RadioConst::CARD_MAX_APPS);
-  EXPECT_LT(cardStatus.gsmUmtsSubscriptionAppIndex,
-            (int)RadioConst::CARD_MAX_APPS);
-  EXPECT_LT(cardStatus.cdmaSubscriptionAppIndex,
-            (int)RadioConst::CARD_MAX_APPS);
-  EXPECT_LT(cardStatus.imsSubscriptionAppIndex, (int)RadioConst::CARD_MAX_APPS);
-}
-
-/*
- * Test IRadio.supplyIccPinForApp() for the response returned
- */
-TEST_F(RadioHidlTest, supplyIccPinForApp) {
-  int serial = 1;
-
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->supplyIccPinForApp(++serial, hidl_string("test1"),
-                                cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+    EXPECT_LE(cardStatus.applications.size(), (unsigned int)RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(cardStatus.gsmUmtsSubscriptionAppIndex, (int)RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(cardStatus.cdmaSubscriptionAppIndex, (int)RadioConst::CARD_MAX_APPS);
+    EXPECT_LT(cardStatus.imsSubscriptionAppIndex, (int)RadioConst::CARD_MAX_APPS);
     }
-  }
-}
 
-/*
- * Test IRadio.supplyIccPukForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, supplyIccPukForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.supplyIccPinForApp() for the response returned
+     */
+    TEST_F(RadioHidlTest, supplyIccPinForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->supplyIccPukForApp(++serial, hidl_string("test1"),
-                                hidl_string("test2"),
-                                cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->supplyIccPinForApp(serial, hidl_string("test1"),
+                                          cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.supplyIccPin2ForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, supplyIccPin2ForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.supplyIccPukForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, supplyIccPukForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->supplyIccPin2ForApp(++serial, hidl_string("test1"),
-                                 cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->supplyIccPukForApp(serial, hidl_string("test1"), hidl_string("test2"),
+                                          cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.supplyIccPuk2ForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, supplyIccPuk2ForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.supplyIccPin2ForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, supplyIccPin2ForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->supplyIccPuk2ForApp(++serial, hidl_string("test1"),
-                                 hidl_string("test2"),
-                                 cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->supplyIccPin2ForApp(serial, hidl_string("test1"),
+                                           cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.changeIccPinForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, changeIccPinForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.supplyIccPuk2ForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, supplyIccPuk2ForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->changeIccPinForApp(++serial, hidl_string("test1"),
-                                hidl_string("test2"),
-                                cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->supplyIccPuk2ForApp(serial, hidl_string("test1"), hidl_string("test2"),
+                                           cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.changeIccPin2ForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, changeIccPin2ForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.changeIccPinForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, changeIccPinForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
-  // 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->changeIccPin2ForApp(++serial, hidl_string("test1"),
-                                 hidl_string("test2"),
-                                 cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->changeIccPinForApp(serial, hidl_string("test1"), hidl_string("test2"),
+                                          cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.getImsiForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, getImsiForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.changeIccPin2ForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, changeIccPin2ForApp) {
+        int serial = GetRandomSerialNumber();
 
-  // Check success returned while getting imsi for 3GPP and 3GPP2 apps only
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    if (cardStatus.applications[i].appType == AppType::SIM ||
-        cardStatus.applications[i].appType == AppType::USIM ||
-        cardStatus.applications[i].appType == AppType::RUIM ||
-        cardStatus.applications[i].appType == AppType::CSIM) {
-      radio->getImsiForApp(++serial, cardStatus.applications[i].aidPtr);
-      EXPECT_EQ(std::cv_status::no_timeout, wait());
-      EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-      EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-      EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-
-      // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more than 15
-      if (radioRsp->rspInfo.error == RadioError::NONE) {
-        EXPECT_NE(radioRsp->imsi, hidl_string());
-        EXPECT_GE((int)(radioRsp->imsi).size(), 6);
-        EXPECT_LE((int)(radioRsp->imsi).size(), 15);
-      }
+        // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and
+        // 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->changeIccPin2ForApp(serial, hidl_string("test1"), hidl_string("test2"),
+                                           cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
+            }
+        }
     }
-  }
-}
 
-/*
- * Test IRadio.iccIOForApp() for the response returned.
- */
-TEST_F(RadioHidlTest, iccIOForApp) {
-  int serial = 1;
+    /*
+     * Test IRadio.getImsiForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, getImsiForApp) {
+        int serial = GetRandomSerialNumber();
 
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    IccIo iccIo;
-    iccIo.command = 0xc0;
-    iccIo.fileId = 0x6f11;
-    iccIo.path = hidl_string("3F007FFF");
-    iccIo.p1 = 0;
-    iccIo.p2 = 0;
-    iccIo.p3 = 0;
-    iccIo.data = hidl_string();
-    iccIo.pin2 = hidl_string();
-    iccIo.aid = cardStatus.applications[i].aidPtr;
+        // Check success returned while getting imsi for 3GPP and 3GPP2 apps only
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            if (cardStatus.applications[i].appType == AppType::SIM ||
+                cardStatus.applications[i].appType == AppType::USIM ||
+                cardStatus.applications[i].appType == AppType::RUIM ||
+                cardStatus.applications[i].appType == AppType::CSIM) {
+                radio->getImsiForApp(serial, cardStatus.applications[i].aidPtr);
+                EXPECT_EQ(std::cv_status::no_timeout, wait());
+                EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+                EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+                EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
 
-    radio->iccIOForApp(++serial, iccIo);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-  }
-}
+                // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more than 15
+                if (radioRsp->rspInfo.error == RadioError::NONE) {
+                    EXPECT_NE(radioRsp->imsi, hidl_string());
+                    EXPECT_GE((int)(radioRsp->imsi).size(), 6);
+                    EXPECT_LE((int)(radioRsp->imsi).size(), 15);
+                }
+            }
+        }
+    }
 
-/*
- * Test IRadio.iccTransmitApduBasicChannel() for the response returned.
- */
-TEST_F(RadioHidlTest, iccTransmitApduBasicChannel) {
-  int serial = 1;
-  SimApdu msg;
-  memset(&msg, 0, sizeof(msg));
-  msg.data = hidl_string();
+    /*
+     * Test IRadio.iccIOForApp() for the response returned.
+     */
+    TEST_F(RadioHidlTest, iccIOForApp) {
+        int serial = GetRandomSerialNumber();
 
-  radio->iccTransmitApduBasicChannel(serial, msg);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            IccIo iccIo;
+            iccIo.command = 0xc0;
+            iccIo.fileId = 0x6f11;
+            iccIo.path = hidl_string("3F007FFF");
+            iccIo.p1 = 0;
+            iccIo.p2 = 0;
+            iccIo.p3 = 0;
+            iccIo.data = hidl_string();
+            iccIo.pin2 = hidl_string();
+            iccIo.aid = cardStatus.applications[i].aidPtr;
 
-  // TODO(sanketpadawe): Add test for error code
-}
+            radio->iccIOForApp(serial, iccIo);
+            EXPECT_EQ(std::cv_status::no_timeout, wait());
+            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+        }
+    }
 
-/*
- * Test IRadio.iccOpenLogicalChannel() for the response returned.
- */
-TEST_F(RadioHidlTest, iccOpenLogicalChannel) {
-  int serial = 1;
-  int p2 = 0x04;
-  // Specified in ISO 7816-4 clause 7.1.1 0x04 means that FCP template is requested.
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    radio->iccOpenLogicalChannel(++serial, cardStatus.applications[i].aidPtr, p2);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  }
-}
+    /*
+     * Test IRadio.iccTransmitApduBasicChannel() for the response returned.
+     */
+    TEST_F(RadioHidlTest, iccTransmitApduBasicChannel) {
+        int serial = GetRandomSerialNumber();
+        SimApdu msg;
+        memset(&msg, 0, sizeof(msg));
+        msg.data = hidl_string();
 
-/*
- * Test IRadio.iccCloseLogicalChannel() for the response returned.
- */
-TEST_F(RadioHidlTest, iccCloseLogicalChannel) {
-  int serial = 1;
-  // Try closing invalid channel and check INVALID_ARGUMENTS returned as error
-  radio->iccCloseLogicalChannel(serial, 0);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+        radio->iccTransmitApduBasicChannel(serial, msg);
+        EXPECT_EQ(std::cv_status::no_timeout, wait());
+        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-}
+        // TODO(sanketpadawe): Add test for error code
+    }
 
-/*
- * Test IRadio.iccTransmitApduLogicalChannel() for the response returned.
- */
-TEST_F(RadioHidlTest, iccTransmitApduLogicalChannel) {
-  SimApdu msg;
-  memset(&msg, 0, sizeof(msg));
-  msg.data = hidl_string();
+    /*
+     * Test IRadio.iccOpenLogicalChannel() for the response returned.
+     */
+    TEST_F(RadioHidlTest, iccOpenLogicalChannel) {
+        int serial = GetRandomSerialNumber();
+        int p2 = 0x04;
+        // Specified in ISO 7816-4 clause 7.1.1 0x04 means that FCP template is requested.
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            radio->iccOpenLogicalChannel(serial, cardStatus.applications[i].aidPtr, p2);
+            EXPECT_EQ(std::cv_status::no_timeout, wait());
+            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        }
+    }
 
-  radio->iccTransmitApduLogicalChannel(1, msg);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(1, radioRsp->rspInfo.serial);
+    /*
+     * Test IRadio.iccCloseLogicalChannel() for the response returned.
+     */
+    TEST_F(RadioHidlTest, iccCloseLogicalChannel) {
+        int serial = GetRandomSerialNumber();
+        // Try closing invalid channel and check INVALID_ARGUMENTS returned as error
+        radio->iccCloseLogicalChannel(serial, 0);
+        EXPECT_EQ(std::cv_status::no_timeout, wait());
+        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  // TODO(sanketpadawe): Add test for error code
-}
+        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+    }
 
-/*
- * Test IRadio.requestIccSimAuthentication() for the response returned.
- */
-TEST_F(RadioHidlTest, requestIccSimAuthentication) {
-  int serial = 1;
+    /*
+     * Test IRadio.iccTransmitApduLogicalChannel() for the response returned.
+     */
+    TEST_F(RadioHidlTest, iccTransmitApduLogicalChannel) {
+        int serial = GetRandomSerialNumber();
+        SimApdu msg;
+        memset(&msg, 0, sizeof(msg));
+        msg.data = hidl_string();
 
-  // Pass wrong challenge string and check RadioError::INVALID_ARGUMENTS
-  // returned as error.
-  for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
-    radio->requestIccSimAuthentication(++serial, 0, hidl_string("test"),
-                                       cardStatus.applications[i].aidPtr);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
-  }
-}
+        radio->iccTransmitApduLogicalChannel(serial, msg);
+        EXPECT_EQ(std::cv_status::no_timeout, wait());
+        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-/*
- * Test IRadio.supplyNetworkDepersonalization() for the response returned.
- */
-TEST_F(RadioHidlTest, supplyNetworkDepersonalization) {
-  int serial = 1;
+        // TODO(sanketpadawe): Add test for error code
+    }
 
-  radio->supplyNetworkDepersonalization(serial, hidl_string("test"));
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    /*
+     * Test IRadio.requestIccSimAuthentication() for the response returned.
+     */
+    TEST_F(RadioHidlTest, requestIccSimAuthentication) {
+        int serial = GetRandomSerialNumber();
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::NO_MEMORY ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_SIM_STATE ||
-                  radioRsp->rspInfo.error == RadioError::PASSWORD_INCORRECT ||
-                  radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-  }
+        // Pass wrong challenge string and check RadioError::INVALID_ARGUMENTS
+        // returned as error.
+        for (int i = 0; i < (int)cardStatus.applications.size(); i++) {
+            radio->requestIccSimAuthentication(serial, 0, hidl_string("test"),
+                                               cardStatus.applications[i].aidPtr);
+            EXPECT_EQ(std::cv_status::no_timeout, wait());
+            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+            EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
+        }
+    }
+
+    /*
+     * Test IRadio.supplyNetworkDepersonalization() for the response returned.
+     */
+    TEST_F(RadioHidlTest, supplyNetworkDepersonalization) {
+        int serial = GetRandomSerialNumber();
+
+        radio->supplyNetworkDepersonalization(serial, hidl_string("test"));
+        EXPECT_EQ(std::cv_status::no_timeout, wait());
+        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+
+        if (cardStatus.cardState == CardState::ABSENT) {
+            ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                        radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
+                        radioRsp->rspInfo.error == RadioError::NO_MEMORY ||
+                        radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                        radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                        radioRsp->rspInfo.error == RadioError::INVALID_SIM_STATE ||
+                        radioRsp->rspInfo.error == RadioError::PASSWORD_INCORRECT ||
+                        radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+        }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp b/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
index ddf6b7e..ec99d42 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_ims.cpp
@@ -22,178 +22,174 @@
  * Test IRadio.getClir() for the response returned.
  */
 TEST_F(RadioHidlTest, getClir) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getClir(++serial);
+    radio->getClir(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setClir() for the response returned.
  */
 TEST_F(RadioHidlTest, setClir) {
-  int serial = 0;
-  int32_t status = 1;
+    int serial = GetRandomSerialNumber();
+    int32_t status = 1;
 
-  radio->setClir(++serial, status);
+    radio->setClir(serial, status);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 }
 
 /*
  * Test IRadio.getFacilityLockForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, getFacilityLockForApp) {
-  int serial = 0;
-  std::string facility = "";
-  std::string password = "";
-  int32_t serviceClass = 1;
-  std::string appId = "";
+    int serial = GetRandomSerialNumber();
+    std::string facility = "";
+    std::string password = "";
+    int32_t serviceClass = 1;
+    std::string appId = "";
 
-  radio->getFacilityLockForApp(++serial, facility, password, serviceClass,
-                               appId);
+    radio->getFacilityLockForApp(serial, facility, password, serviceClass, appId);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setFacilityLockForApp() for the response returned.
  */
 TEST_F(RadioHidlTest, setFacilityLockForApp) {
-  int serial = 0;
-  std::string facility = "";
-  bool lockState = false;
-  std::string password = "";
-  int32_t serviceClass = 1;
-  std::string appId = "";
+    int serial = GetRandomSerialNumber();
+    std::string facility = "";
+    bool lockState = false;
+    std::string password = "";
+    int32_t serviceClass = 1;
+    std::string appId = "";
 
-  radio->setFacilityLockForApp(++serial, facility, lockState, password,
-                               serviceClass, appId);
+    radio->setFacilityLockForApp(serial, facility, lockState, password, serviceClass, appId);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setBarringPassword() for the response returned.
  */
 TEST_F(RadioHidlTest, setBarringPassword) {
-  int serial = 0;
-  std::string facility = "";
-  std::string oldPassword = "";
-  std::string newPassword = "";
+    int serial = GetRandomSerialNumber();
+    std::string facility = "";
+    std::string oldPassword = "";
+    std::string newPassword = "";
 
-  radio->setBarringPassword(++serial, facility, oldPassword, newPassword);
+    radio->setBarringPassword(serial, facility, oldPassword, newPassword);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::FDN_CHECK_FAILURE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::FDN_CHECK_FAILURE);
+    }
 }
 
 /*
  * Test IRadio.getClip() for the response returned.
  */
 TEST_F(RadioHidlTest, getClip) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getClip(++serial);
+    radio->getClip(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setSuppServiceNotifications() for the response returned.
  */
 TEST_F(RadioHidlTest, setSuppServiceNotifications) {
-  int serial = 0;
-  bool enable = false;
+    int serial = GetRandomSerialNumber();
+    bool enable = false;
 
-  radio->setSuppServiceNotifications(++serial, enable);
+    radio->setSuppServiceNotifications(serial, enable);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 }
 
 /*
  * Test IRadio.requestIsimAuthentication() for the response returned.
  */
 TEST_F(RadioHidlTest, requestIsimAuthentication) {
-  int serial = 0;
-  std::string challenge = "";
+    int serial = GetRandomSerialNumber();
+    std::string challenge = "";
 
-  radio->requestIsimAuthentication(++serial, challenge);
+    radio->requestIsimAuthentication(serial, challenge);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError());
+    }
 }
 
 /*
  * Test IRadio.getImsRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getImsRegistrationState) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getImsRegistrationState(++serial);
+    radio->getImsRegistrationState(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
index eac35f7..5f319bc 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
@@ -20,140 +20,139 @@
  * Test IRadio.getSignalStrength() for the response returned.
  */
 TEST_F(RadioHidlTest, getSignalStrength) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getSignalStrength(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getSignalStrength(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getVoiceRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getVoiceRegistrationState) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getVoiceRegistrationState(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getVoiceRegistrationState(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getOperator() for the response returned.
  */
 TEST_F(RadioHidlTest, getOperator) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getOperator(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getOperator(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setRadioPower() for the response returned.
  */
 TEST_F(RadioHidlTest, setRadioPower) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setRadioPower(++serial, 0);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setRadioPower(serial, 0);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getNetworkSelectionMode() for the response returned.
  */
 TEST_F(RadioHidlTest, getNetworkSelectionMode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getNetworkSelectionMode(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getNetworkSelectionMode(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setNetworkSelectionModeAutomatic() for the response returned.
  */
 TEST_F(RadioHidlTest, setNetworkSelectionModeAutomatic) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setNetworkSelectionModeAutomatic(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setNetworkSelectionModeAutomatic(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED);
+    }
 }
 
 /*
  * Test IRadio.setNetworkSelectionModeManual() for the response returned.
  */
 TEST_F(RadioHidlTest, setNetworkSelectionModeManual) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setNetworkSelectionModeManual(++serial, "123456");
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setNetworkSelectionModeManual(serial, "123456");
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::ILLEGAL_SIM_OR_ME ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    }
 }
 
 /*
  * Test IRadio.getAvailableNetworks() for the response returned.
  */
 TEST_F(RadioHidlTest, getAvailableNetworks) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getAvailableNetworks(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-  ASSERT_TRUE(radioRsp->rspInfo.type == RadioResponseType::SOLICITED ||
-              radioRsp->rspInfo.type == RadioResponseType::SOLICITED_ACK_EXP);
+    radio->getAvailableNetworks(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    ASSERT_TRUE(radioRsp->rspInfo.type == RadioResponseType::SOLICITED ||
+                radioRsp->rspInfo.type == RadioResponseType::SOLICITED_ACK_EXP);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(
-          CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
-          radioRsp->rspInfo.error == RadioError::DEVICE_IN_USE ||
-          radioRsp->rspInfo.error == RadioError::CANCELLED ||
-          radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED ||
-          radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::DEVICE_IN_USE ||
+                    radioRsp->rspInfo.error == RadioError::CANCELLED ||
+                    radioRsp->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
   }
 }
 
@@ -161,597 +160,589 @@
  * Test IRadio.getBasebandVersion() for the response returned.
  */
 TEST_F(RadioHidlTest, getBasebandVersion) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getBasebandVersion(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getBasebandVersion(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setBandMode() for the response returned.
  */
 TEST_F(RadioHidlTest, setBandMode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setBandMode(++serial, RadioBandMode::BAND_MODE_USA);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setBandMode(serial, RadioBandMode::BAND_MODE_USA);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getAvailableBandModes() for the response returned.
  */
 TEST_F(RadioHidlTest, getAvailableBandModes) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getAvailableBandModes(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getAvailableBandModes(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setPreferredNetworkType() for the response returned.
  */
 TEST_F(RadioHidlTest, setPreferredNetworkType) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setPreferredNetworkType(++serial, PreferredNetworkType::GSM_ONLY);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setPreferredNetworkType(serial, PreferredNetworkType::GSM_ONLY);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getPreferredNetworkType() for the response returned.
  */
 TEST_F(RadioHidlTest, getPreferredNetworkType) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getPreferredNetworkType(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getPreferredNetworkType(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getNeighboringCids() for the response returned.
  */
 TEST_F(RadioHidlTest, getNeighboringCids) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getNeighboringCids(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getNeighboringCids(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setLocationUpdates() for the response returned.
  */
 TEST_F(RadioHidlTest, setLocationUpdates) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setLocationUpdates(++serial, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setLocationUpdates(serial, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setCdmaRoamingPreference() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaRoamingPreference) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setCdmaRoamingPreference(++serial, CdmaRoamingType::HOME_NETWORK);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setCdmaRoamingPreference(serial, CdmaRoamingType::HOME_NETWORK);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getCdmaRoamingPreference() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaRoamingPreference) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCdmaRoamingPreference(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCdmaRoamingPreference(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.getTTYMode() for the response returned.
  */
 TEST_F(RadioHidlTest, getTTYMode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getTTYMode(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getTTYMode(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setTTYMode() for the response returned.
  */
 TEST_F(RadioHidlTest, setTTYMode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setTTYMode(++serial, TtyMode::OFF);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setTTYMode(serial, TtyMode::OFF);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setPreferredVoicePrivacy() for the response returned.
  */
 TEST_F(RadioHidlTest, setPreferredVoicePrivacy) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setPreferredVoicePrivacy(++serial, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setPreferredVoicePrivacy(serial, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getPreferredVoicePrivacy() for the response returned.
  */
 TEST_F(RadioHidlTest, getPreferredVoicePrivacy) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getPreferredVoicePrivacy(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getPreferredVoicePrivacy(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getCDMASubscription() for the response returned.
  */
 TEST_F(RadioHidlTest, getCDMASubscription) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCDMASubscription(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCDMASubscription(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getDeviceIdentity() for the response returned.
  */
 TEST_F(RadioHidlTest, getDeviceIdentity) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getDeviceIdentity(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getDeviceIdentity(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.exitEmergencyCallbackMode() for the response returned.
  */
 TEST_F(RadioHidlTest, exitEmergencyCallbackMode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->exitEmergencyCallbackMode(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->exitEmergencyCallbackMode(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getCdmaSubscriptionSource() for the response returned.
  */
 TEST_F(RadioHidlTest, getCdmaSubscriptionSource) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCdmaSubscriptionSource(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCdmaSubscriptionSource(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setCdmaSubscriptionSource() for the response returned.
  */
 TEST_F(RadioHidlTest, setCdmaSubscriptionSource) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setCdmaSubscriptionSource(++serial, CdmaSubscriptionSource::RUIM_SIM);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setCdmaSubscriptionSource(serial, CdmaSubscriptionSource::RUIM_SIM);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT ||
-                radioRsp->rspInfo.error ==
-                    RadioError::SUBSCRIPTION_NOT_AVAILABLE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::SIM_ABSENT ||
+                    radioRsp->rspInfo.error == RadioError::SUBSCRIPTION_NOT_AVAILABLE);
+    }
 }
 
 /*
  * Test IRadio.getVoiceRadioTechnology() for the response returned.
  */
 TEST_F(RadioHidlTest, getVoiceRadioTechnology) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getVoiceRadioTechnology(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getVoiceRadioTechnology(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getCellInfoList() for the response returned.
  */
 TEST_F(RadioHidlTest, getCellInfoList) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCellInfoList(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCellInfoList(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::NO_NETWORK_FOUND);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::NO_NETWORK_FOUND);
+    }
 }
 
 /*
  * Test IRadio.setCellInfoListRate() for the response returned.
  */
 TEST_F(RadioHidlTest, setCellInfoListRate) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  // TODO(sanketpadawe): RIL crashes with value of rate = 10
-  radio->setCellInfoListRate(++serial, 10);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    // TODO(sanketpadawe): RIL crashes with value of rate = 10
+    radio->setCellInfoListRate(serial, 10);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.nvReadItem() for the response returned.
  */
 TEST_F(RadioHidlTest, nvReadItem) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->nvReadItem(++serial, NvItem::LTE_BAND_ENABLE_25);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->nvReadItem(serial, NvItem::LTE_BAND_ENABLE_25);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.nvWriteItem() for the response returned.
  */
 TEST_F(RadioHidlTest, nvWriteItem) {
-  int serial = 1;
-  NvWriteItem item;
-  memset(&item, 0, sizeof(item));
-  item.value = hidl_string();
+    int serial = GetRandomSerialNumber();
+    NvWriteItem item;
+    memset(&item, 0, sizeof(item));
+    item.value = hidl_string();
 
-  radio->nvWriteItem(++serial, item);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->nvWriteItem(serial, item);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.nvWriteCdmaPrl() for the response returned.
  */
 TEST_F(RadioHidlTest, nvWriteCdmaPrl) {
-  int serial = 1;
-  std::vector<uint8_t> prl = {1, 2, 3, 4, 5};
+    int serial = GetRandomSerialNumber();
+    std::vector<uint8_t> prl = {1, 2, 3, 4, 5};
 
-  radio->nvWriteCdmaPrl(++serial, hidl_vec<uint8_t>(prl));
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->nvWriteCdmaPrl(serial, hidl_vec<uint8_t>(prl));
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.nvResetConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, nvResetConfig) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->nvResetConfig(++serial, ResetNvType::ERASE);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->nvResetConfig(++serial, ResetNvType::ERASE);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setUiccSubscription() for the response returned.
  */
 TEST_F(RadioHidlTest, setUiccSubscription) {
-  int serial = 1;
-  SelectUiccSub item;
-  memset(&item, 0, sizeof(item));
+    int serial = GetRandomSerialNumber();
+    SelectUiccSub item;
+    memset(&item, 0, sizeof(item));
 
-  radio->setUiccSubscription(++serial, item);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setUiccSubscription(serial, item);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error ==
-                      RadioError::SUBSCRIPTION_NOT_SUPPORTED ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::SUBSCRIPTION_NOT_SUPPORTED ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.getHardwareConfig() for the response returned.
  */
 TEST_F(RadioHidlTest, getHardwareConfig) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getHardwareConfig(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getHardwareConfig(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.requestShutdown() for the response returned.
  */
 TEST_F(RadioHidlTest, requestShutdown) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->requestShutdown(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->requestShutdown(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getRadioCapability() for the response returned.
  */
 TEST_F(RadioHidlTest, getRadioCapability) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getRadioCapability(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getRadioCapability(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setRadioCapability() for the response returned.
  */
 TEST_F(RadioHidlTest, setRadioCapability) {
-  int serial = 1;
-  RadioCapability rc;
-  memset(&rc, 0, sizeof(rc));
-  rc.logicalModemUuid = hidl_string();
+    int serial = GetRandomSerialNumber();
+    RadioCapability rc;
+    memset(&rc, 0, sizeof(rc));
+    rc.logicalModemUuid = hidl_string();
 
-  radio->setRadioCapability(++serial, rc);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setRadioCapability(serial, rc);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    }
 }
 
 /*
  * Test IRadio.startLceService() for the response returned.
  */
 TEST_F(RadioHidlTest, startLceService) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->startLceService(++serial, 5, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->startLceService(serial, 5, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
-                  radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED ||
-                  radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
+                    radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED ||
+                    radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
+    }
 }
 
 /*
  * Test IRadio.stopLceService() for the response returned.
  */
 TEST_F(RadioHidlTest, stopLceService) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->stopLceService(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->stopLceService(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::LCE_NOT_SUPPORTED);
+    }
 }
 
 /*
  * Test IRadio.pullLceData() for the response returned.
  */
 TEST_F(RadioHidlTest, pullLceData) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->pullLceData(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->pullLceData(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE ||
-                  CheckOEMError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::RADIO_NOT_AVAILABLE || CheckOEMError());
+    }
 }
 
 /*
  * Test IRadio.getModemActivityInfo() for the response returned.
  */
 TEST_F(RadioHidlTest, getModemActivityInfo) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getModemActivityInfo(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getModemActivityInfo(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.setAllowedCarriers() for the response returned.
  */
 TEST_F(RadioHidlTest, setAllowedCarriers) {
-  int serial = 1;
-  CarrierRestrictions carriers;
+    int serial = GetRandomSerialNumber();
+    CarrierRestrictions carriers;
+    memset(&carriers, 0, sizeof(carriers));
+    carriers.allowedCarriers.resize(1);
+    carriers.excludedCarriers.resize(0);
+    carriers.allowedCarriers[0].mcc = hidl_string();
+    carriers.allowedCarriers[0].mnc = hidl_string();
+    carriers.allowedCarriers[0].matchType = CarrierMatchType::ALL;
+    carriers.allowedCarriers[0].matchData = hidl_string();
 
-  /* Carrier restriction with one carrier */
-  memset(&carriers, 0, sizeof(carriers));
-  carriers.allowedCarriers.resize(1);
-  carriers.excludedCarriers.resize(0);
-  carriers.allowedCarriers[0].mcc = hidl_string();
-  carriers.allowedCarriers[0].mnc = hidl_string();
-  carriers.allowedCarriers[0].matchType = CarrierMatchType::ALL;
-  carriers.allowedCarriers[0].matchData = hidl_string();
+    radio->setAllowedCarriers(serial, false, carriers);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  radio->setAllowedCarriers(++serial, false, carriers);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
-
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
   }
 
   /* Reset back to no carrier restriction */
@@ -773,65 +764,65 @@
  * Test IRadio.getAllowedCarriers() for the response returned.
  */
 TEST_F(RadioHidlTest, getAllowedCarriers) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getAllowedCarriers(++serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getAllowedCarriers(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.sendDeviceState() for the response returned.
  */
 TEST_F(RadioHidlTest, sendDeviceState) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->sendDeviceState(++serial, DeviceStateType::POWER_SAVE_MODE, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->sendDeviceState(serial, DeviceStateType::POWER_SAVE_MODE, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.setIndicationFilter() for the response returned.
  */
 TEST_F(RadioHidlTest, setIndicationFilter) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setIndicationFilter(++serial, 1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setIndicationFilter(serial, 1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.setSimCardPower() for the response returned.
  */
 TEST_F(RadioHidlTest, setSimCardPower) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setSimCardPower(++serial, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setSimCardPower(serial, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE
-        || radioRsp->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
-  }
-}
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
+    }
+}
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp b/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
index b8a50c0..698cf26 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_sms.cpp
@@ -22,417 +22,412 @@
  * Test IRadio.sendSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendSms) {
-  int serial = 0;
-  GsmSmsMessage msg;
-  msg.smscPdu = "";
-  msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+    int serial = GetRandomSerialNumber();
+    GsmSmsMessage msg;
+    msg.smscPdu = "";
+    msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-  radio->sendSms(++serial, msg);
+    radio->sendSms(serial, msg);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-      EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+        EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode);
+    }
 }
 
 /*
  * Test IRadio.sendSMSExpectMore() for the response returned.
  */
 TEST_F(RadioHidlTest, sendSMSExpectMore) {
-  int serial = 0;
-  GsmSmsMessage msg;
-  msg.smscPdu = "";
-  msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+    int serial = GetRandomSerialNumber();
+    GsmSmsMessage msg;
+    msg.smscPdu = "";
+    msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-  radio->sendSMSExpectMore(++serial, msg);
+    radio->sendSMSExpectMore(serial, msg);
 
-  // TODO(shuoq): add more test for this API when inserted sim card is
-  // considered
+    // TODO(shuoq): add more test for this API when inserted sim card is
+    // considered
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    }
 }
 
 /*
  * Test IRadio.acknowledgeLastIncomingGsmSms() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeLastIncomingGsmSms) {
-  int serial = 0;
-  bool success = true;
+    int serial = GetRandomSerialNumber();
+    bool success = true;
 
-  radio->acknowledgeLastIncomingGsmSms(
-      ++serial, success, SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
+    radio->acknowledgeLastIncomingGsmSms(serial, success,
+                                         SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    }
 }
 
 /*
  * Test IRadio.acknowledgeIncomingGsmSmsWithPdu() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeIncomingGsmSmsWithPdu) {
-  int serial = 0;
-  bool success = true;
-  std::string ackPdu = "";
+    int serial = GetRandomSerialNumber();
+    bool success = true;
+    std::string ackPdu = "";
 
-  radio->acknowledgeIncomingGsmSmsWithPdu(++serial, success, ackPdu);
+    radio->acknowledgeIncomingGsmSmsWithPdu(serial, success, ackPdu);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    // TODO(shuoq): Will add error check when we know the expected error from QC
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        // TODO(shuoq): Will add error check when we know the expected error from QC
+    }
 }
 
 /*
  * Test IRadio.sendCdmaSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendCdmaSms) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Create a CdmaSmsAddress
-  CdmaSmsAddress cdmaSmsAddress;
-  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-  cdmaSmsAddress.digits =
-      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+    // Create a CdmaSmsAddress
+    CdmaSmsAddress cdmaSmsAddress;
+    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+    cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-  // Create a CdmaSmsSubAddress
-  CdmaSmsSubaddress cdmaSmsSubaddress;
-  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-  cdmaSmsSubaddress.odd = false;
-  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
+    // Create a CdmaSmsSubAddress
+    CdmaSmsSubaddress cdmaSmsSubaddress;
+    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+    cdmaSmsSubaddress.odd = false;
+    cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-  // Create a CdmaSmsMessage
-  android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
-  cdmaSmsMessage.teleserviceId = 4098;
-  cdmaSmsMessage.isServicePresent = false;
-  cdmaSmsMessage.serviceCategory = 0;
-  cdmaSmsMessage.address = cdmaSmsAddress;
-  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
-      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+    // Create a CdmaSmsMessage
+    android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
+    cdmaSmsMessage.teleserviceId = 4098;
+    cdmaSmsMessage.isServicePresent = false;
+    cdmaSmsMessage.serviceCategory = 0;
+    cdmaSmsMessage.address = cdmaSmsAddress;
+    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+    cdmaSmsMessage.bearerData =
+        (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-  radio->sendCdmaSms(++serial, cdmaSmsMessage);
+    radio->sendCdmaSms(serial, cdmaSmsMessage);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE);
+    }
 }
 
 /*
  * Test IRadio.acknowledgeLastIncomingCdmaSms() for the response returned.
  */
 TEST_F(RadioHidlTest, acknowledgeLastIncomingCdmaSms) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Create a CdmaSmsAck
-  CdmaSmsAck cdmaSmsAck;
-  cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR;
-  cdmaSmsAck.smsCauseCode = 1;
+    // Create a CdmaSmsAck
+    CdmaSmsAck cdmaSmsAck;
+    cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR;
+    cdmaSmsAck.smsCauseCode = 1;
 
-  radio->acknowledgeLastIncomingCdmaSms(++serial, cdmaSmsAck);
+    radio->acknowledgeLastIncomingCdmaSms(serial, cdmaSmsAck);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NO_SMS_TO_ACK);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NO_SMS_TO_ACK);
+    }
 }
 
 /*
  * Test IRadio.sendImsSms() for the response returned.
  */
 TEST_F(RadioHidlTest, sendImsSms) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  // Create a CdmaSmsAddress
-  CdmaSmsAddress cdmaSmsAddress;
-  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-  cdmaSmsAddress.digits =
-      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+    // Create a CdmaSmsAddress
+    CdmaSmsAddress cdmaSmsAddress;
+    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+    cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-  // Create a CdmaSmsSubAddress
-  CdmaSmsSubaddress cdmaSmsSubaddress;
-  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-  cdmaSmsSubaddress.odd = false;
-  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
+    // Create a CdmaSmsSubAddress
+    CdmaSmsSubaddress cdmaSmsSubaddress;
+    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+    cdmaSmsSubaddress.odd = false;
+    cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-  // Create a CdmaSmsMessage
-  CdmaSmsMessage cdmaSmsMessage;
-  cdmaSmsMessage.teleserviceId = 4098;
-  cdmaSmsMessage.isServicePresent = false;
-  cdmaSmsMessage.serviceCategory = 0;
-  cdmaSmsMessage.address = cdmaSmsAddress;
-  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
-      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+    // Create a CdmaSmsMessage
+    CdmaSmsMessage cdmaSmsMessage;
+    cdmaSmsMessage.teleserviceId = 4098;
+    cdmaSmsMessage.isServicePresent = false;
+    cdmaSmsMessage.serviceCategory = 0;
+    cdmaSmsMessage.address = cdmaSmsAddress;
+    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+    cdmaSmsMessage.bearerData =
+        (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-  // Creata an ImsSmsMessage
-  ImsSmsMessage msg;
-  msg.tech = RadioTechnologyFamily::THREE_GPP2;
-  msg.retry = false;
-  msg.messageRef = 0;
-  msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
-  msg.gsmMessage = (std::vector<GsmSmsMessage>){};
+    // Creata an ImsSmsMessage
+    ImsSmsMessage msg;
+    msg.tech = RadioTechnologyFamily::THREE_GPP2;
+    msg.retry = false;
+    msg.messageRef = 0;
+    msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
+    msg.gsmMessage = (std::vector<GsmSmsMessage>){};
 
-  radio->sendImsSms(serial, msg);
+    radio->sendImsSms(serial, msg);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.getSmscAddress() for the response returned.
  */
 TEST_F(RadioHidlTest, getSmscAddress) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->getSmscAddress(++serial);
+    radio->getSmscAddress(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE);
+    }
 }
 
 /*
  * Test IRadio.setSmscAddress() for the response returned.
  */
 TEST_F(RadioHidlTest, setSmscAddress) {
-  int serial = 0;
-  hidl_string address = hidl_string("smscAddress");
+    int serial = GetRandomSerialNumber();
+    hidl_string address = hidl_string("smscAddress");
 
-  radio->setSmscAddress(++serial, address);
+    radio->setSmscAddress(serial, address);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT);
+    }
 }
 
 /*
  * Test IRadio.writeSmsToSim() for the response returned.
  */
 TEST_F(RadioHidlTest, writeSmsToSim) {
-  int serial = 0;
-  SmsWriteArgs smsWriteArgs;
-  smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD;
-  smsWriteArgs.smsc = "";
-  smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
+    int serial = GetRandomSerialNumber();
+    SmsWriteArgs smsWriteArgs;
+    smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD;
+    smsWriteArgs.smsc = "";
+    smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
 
-  radio->writeSmsToSim(++serial, smsWriteArgs);
+    radio->writeSmsToSim(serial, smsWriteArgs);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::ENCODING_ERR ||
-                  radioRsp->rspInfo.error == RadioError::NO_RESOURCES ||
-                  radioRsp->rspInfo.error == RadioError::NETWORK_NOT_READY ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::ENCODING_ERR ||
+                    radioRsp->rspInfo.error == RadioError::NO_RESOURCES ||
+                    radioRsp->rspInfo.error == RadioError::NETWORK_NOT_READY ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
+    }
 }
 
 /*
  * Test IRadio.deleteSmsOnSim() for the response returned.
  */
 TEST_F(RadioHidlTest, deleteSmsOnSim) {
-  int serial = 0;
-  int index = 1;
+    int serial = GetRandomSerialNumber();
+    int index = 1;
 
-  radio->deleteSmsOnSim(++serial, index);
+    radio->deleteSmsOnSim(serial, index);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY);
+    }
 }
 
 /*
  * Test IRadio.writeSmsToRuim() for the response returned.
  */
 TEST_F(RadioHidlTest, writeSmsToRuim) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Create a CdmaSmsAddress
-  CdmaSmsAddress cdmaSmsAddress;
-  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-  cdmaSmsAddress.digits =
-      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+    // Create a CdmaSmsAddress
+    CdmaSmsAddress cdmaSmsAddress;
+    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+    cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-  // Create a CdmaSmsSubAddress
-  CdmaSmsSubaddress cdmaSmsSubaddress;
-  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-  cdmaSmsSubaddress.odd = false;
-  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
+    // Create a CdmaSmsSubAddress
+    CdmaSmsSubaddress cdmaSmsSubaddress;
+    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+    cdmaSmsSubaddress.odd = false;
+    cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-  // Create a CdmaSmsMessage
-  CdmaSmsMessage cdmaSmsMessage;
-  cdmaSmsMessage.teleserviceId = 4098;
-  cdmaSmsMessage.isServicePresent = false;
-  cdmaSmsMessage.serviceCategory = 0;
-  cdmaSmsMessage.address = cdmaSmsAddress;
-  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
-      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+    // Create a CdmaSmsMessage
+    CdmaSmsMessage cdmaSmsMessage;
+    cdmaSmsMessage.teleserviceId = 4098;
+    cdmaSmsMessage.isServicePresent = false;
+    cdmaSmsMessage.serviceCategory = 0;
+    cdmaSmsMessage.address = cdmaSmsAddress;
+    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+    cdmaSmsMessage.bearerData =
+        (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-  // Create a CdmaSmsWriteArgs
-  CdmaSmsWriteArgs cdmaSmsWriteArgs;
-  cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
-  cdmaSmsWriteArgs.message = cdmaSmsMessage;
+    // Create a CdmaSmsWriteArgs
+    CdmaSmsWriteArgs cdmaSmsWriteArgs;
+    cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
+    cdmaSmsWriteArgs.message = cdmaSmsMessage;
 
-  radio->writeSmsToRuim(++serial, cdmaSmsWriteArgs);
+    radio->writeSmsToRuim(serial, cdmaSmsWriteArgs);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
+    }
 }
 
 /*
  * Test IRadio.deleteSmsOnRuim() for the response returned.
  */
 TEST_F(RadioHidlTest, deleteSmsOnRuim) {
-  int serial = 0;
-  int index = 1;
+    int serial = GetRandomSerialNumber();
+    int index = 1;
 
-  // Create a CdmaSmsAddress
-  CdmaSmsAddress cdmaSmsAddress;
-  cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
-  cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
-  cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
-  cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
-  cdmaSmsAddress.digits =
-      (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
+    // Create a CdmaSmsAddress
+    CdmaSmsAddress cdmaSmsAddress;
+    cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
+    cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
+    cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
+    cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
+    cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
 
-  // Create a CdmaSmsSubAddress
-  CdmaSmsSubaddress cdmaSmsSubaddress;
-  cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
-  cdmaSmsSubaddress.odd = false;
-  cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
+    // Create a CdmaSmsSubAddress
+    CdmaSmsSubaddress cdmaSmsSubaddress;
+    cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
+    cdmaSmsSubaddress.odd = false;
+    cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
 
-  // Create a CdmaSmsMessage
-  CdmaSmsMessage cdmaSmsMessage;
-  cdmaSmsMessage.teleserviceId = 4098;
-  cdmaSmsMessage.isServicePresent = false;
-  cdmaSmsMessage.serviceCategory = 0;
-  cdmaSmsMessage.address = cdmaSmsAddress;
-  cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
-  cdmaSmsMessage.bearerData = (std::vector<uint8_t>){
-      15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
+    // Create a CdmaSmsMessage
+    CdmaSmsMessage cdmaSmsMessage;
+    cdmaSmsMessage.teleserviceId = 4098;
+    cdmaSmsMessage.isServicePresent = false;
+    cdmaSmsMessage.serviceCategory = 0;
+    cdmaSmsMessage.address = cdmaSmsAddress;
+    cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
+    cdmaSmsMessage.bearerData =
+        (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
 
-  // Create a CdmaSmsWriteArgs
-  CdmaSmsWriteArgs cdmaSmsWriteArgs;
-  cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
-  cdmaSmsWriteArgs.message = cdmaSmsMessage;
+    // Create a CdmaSmsWriteArgs
+    CdmaSmsWriteArgs cdmaSmsWriteArgs;
+    cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
+    cdmaSmsWriteArgs.message = cdmaSmsMessage;
 
-  radio->deleteSmsOnRuim(++serial, index);
+    radio->deleteSmsOnRuim(serial, index);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError());
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError());
+    }
 }
 
 /*
  * Test IRadio.reportSmsMemoryStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, reportSmsMemoryStatus) {
-  int serial = 0;
-  bool available = true;
+    int serial = GetRandomSerialNumber();
+    bool available = true;
 
-  radio->reportSmsMemoryStatus(++serial, available);
+    radio->reportSmsMemoryStatus(serial, available);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp b/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
index 3858c90..345747b 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_stk.cpp
@@ -22,106 +22,109 @@
  * Test IRadio.sendEnvelope() for the response returned.
  */
 TEST_F(RadioHidlTest, sendEnvelope) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Test with sending empty string
-  std::string content = "";
+    // Test with sending empty string
+    std::string content = "";
 
-  radio->sendEnvelope(++serial, content);
+    radio->sendEnvelope(serial, content);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 
-  // Test with sending random string
-  content = "0";
+    // Test with sending random string
+    serial = GetRandomSerialNumber();
+    content = "0";
 
-  radio->sendEnvelope(++serial, content);
+    radio->sendEnvelope(serial, content);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.sendTerminalResponseToSim() for the response returned.
  */
 TEST_F(RadioHidlTest, sendTerminalResponseToSim) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Test with sending empty string
-  std::string commandResponse = "";
+    // Test with sending empty string
+    std::string commandResponse = "";
 
-  radio->sendTerminalResponseToSim(++serial, commandResponse);
+    radio->sendTerminalResponseToSim(serial, commandResponse);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    }
 
-  // Test with sending random string
-  commandResponse = "0";
+    serial = GetRandomSerialNumber();
 
-  radio->sendTerminalResponseToSim(++serial, commandResponse);
+    // Test with sending random string
+    commandResponse = "0";
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->sendTerminalResponseToSim(serial, commandResponse);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.handleStkCallSetupRequestFromSim() for the response returned.
  */
 TEST_F(RadioHidlTest, handleStkCallSetupRequestFromSim) {
-  int serial = 0;
-  bool accept = false;
+    int serial = GetRandomSerialNumber();
+    bool accept = false;
 
-  radio->handleStkCallSetupRequestFromSim(++serial, accept);
+    radio->handleStkCallSetupRequestFromSim(serial, accept);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::NO_MEMORY ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INTERNAL_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
 
 /*
  * Test IRadio.reportStkServiceIsRunning() for the response returned.
  */
 TEST_F(RadioHidlTest, reportStkServiceIsRunning) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  radio->reportStkServiceIsRunning(++serial);
+    radio->reportStkServiceIsRunning(serial);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
@@ -129,31 +132,34 @@
  * string.
  */
 TEST_F(RadioHidlTest, sendEnvelopeWithStatus) {
-  int serial = 0;
+    int serial = GetRandomSerialNumber();
 
-  // Test with sending empty string
-  std::string contents = "";
+    // Test with sending empty string
+    std::string contents = "";
 
-  radio->sendEnvelopeWithStatus(++serial, contents);
+    radio->sendEnvelopeWithStatus(serial, contents);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 
-  // Test with sending random string
-  contents = "0";
+    // Test with sending random string
+    serial = GetRandomSerialNumber();
+    contents = "0";
 
-  radio->sendEnvelopeWithStatus(++serial, contents);
+    radio->sendEnvelopeWithStatus(serial, contents);
 
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_FALSE(RadioError::NONE == radioRsp->rspInfo.error);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
+    }
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
index 794c60f..b957c6e 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
@@ -17,46 +17,47 @@
 #include <radio_hidl_hal_utils.h>
 
 void RadioHidlTest::SetUp() {
-  radio = ::testing::VtsHalHidlTargetTestBase::getService<IRadio>(
-      hidl_string(RADIO_SERVICE_NAME));
-  ASSERT_NE(radio, nullptr);
+    radio =
+        ::testing::VtsHalHidlTargetTestBase::getService<IRadio>(hidl_string(RADIO_SERVICE_NAME));
+    ASSERT_NE(radio, nullptr);
 
-  radioRsp = new RadioResponse(*this);
-  ASSERT_NE(radioRsp, nullptr);
+    radioRsp = new RadioResponse(*this);
+    ASSERT_NE(radioRsp, nullptr);
 
-  count = 0;
+    count = 0;
 
-  radioInd = NULL;
-  radio->setResponseFunctions(radioRsp, radioInd);
+    radioInd = NULL;
+    radio->setResponseFunctions(radioRsp, radioInd);
 
-  radio->getIccCardStatus(1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(1, radioRsp->rspInfo.serial);
-  EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+    int serial = GetRandomSerialNumber();
+    radio->getIccCardStatus(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
 }
 
 void RadioHidlTest::TearDown() {}
 
 void RadioHidlTest::notify() {
-  std::unique_lock<std::mutex> lock(mtx);
-  count++;
-  cv.notify_one();
+    std::unique_lock<std::mutex> lock(mtx);
+    count++;
+    cv.notify_one();
 }
 
 std::cv_status RadioHidlTest::wait() {
-  std::unique_lock<std::mutex> lock(mtx);
+    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;
+    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;
+    count--;
+    return status;
 }
 
 bool RadioHidlTest::CheckGeneralError() {
@@ -64,10 +65,11 @@
             radioRsp->rspInfo.error == RadioError::NO_MEMORY ||
             radioRsp->rspInfo.error == RadioError::INTERNAL_ERR ||
             radioRsp->rspInfo.error == RadioError::SYSTEM_ERR ||
-            radioRsp->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
+            radioRsp->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED ||
+            radioRsp->rspInfo.error == RadioError::CANCELLED);
 }
 
 bool RadioHidlTest::CheckOEMError() {
     return (radioRsp->rspInfo.error >= RadioError::OEM_ERROR_1 &&
             radioRsp->rspInfo.error <= RadioError::OEM_ERROR_25);
-}
\ No newline at end of file
+}
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_utils.h b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
index 923e1e3..4db8a44 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_utils.h
+++ b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
@@ -26,6 +26,8 @@
 #include <android/hardware/radio/1.0/IRadioResponse.h>
 #include <android/hardware/radio/1.0/types.h>
 
+#include <vts_test_util.h>
+
 using ::android::hardware::radio::V1_0::ActivityStatsInfo;
 using ::android::hardware::radio::V1_0::AppType;
 using ::android::hardware::radio::V1_0::CardStatus;
@@ -88,432 +90,388 @@
 
 /* Callback class for radio response */
 class RadioResponse : public IRadioResponse {
- private:
-  RadioHidlTest& parent;
+   private:
+    RadioHidlTest& parent;
 
- public:
-  RadioResponseInfo rspInfo;
-  hidl_string imsi;
-  IccIoResult iccIoResult;
-  int channelId;
+   public:
+    RadioResponseInfo rspInfo;
+    hidl_string imsi;
+    IccIoResult iccIoResult;
+    int channelId;
 
-  // Sms
-  SendSmsResult sendSmsResult;
-  hidl_string smscAddress;
-  uint32_t writeSmsToSimIndex;
-  uint32_t writeSmsToRuimIndex;
+    // Sms
+    SendSmsResult sendSmsResult;
+    hidl_string smscAddress;
+    uint32_t writeSmsToSimIndex;
+    uint32_t writeSmsToRuimIndex;
 
-  RadioResponse(RadioHidlTest& parent);
+    RadioResponse(RadioHidlTest& parent);
 
-  virtual ~RadioResponse() = default;
+    virtual ~RadioResponse() = default;
 
-  Return<void> getIccCardStatusResponse(const RadioResponseInfo& info,
-                                        const CardStatus& cardStatus);
+    Return<void> getIccCardStatusResponse(const RadioResponseInfo& info,
+                                          const CardStatus& cardStatus);
 
-  Return<void> supplyIccPinForAppResponse(const RadioResponseInfo& info,
-                                          int32_t remainingRetries);
+    Return<void> supplyIccPinForAppResponse(const RadioResponseInfo& info,
+                                            int32_t remainingRetries);
 
-  Return<void> supplyIccPukForAppResponse(const RadioResponseInfo& info,
-                                          int32_t remainingRetries);
+    Return<void> supplyIccPukForAppResponse(const RadioResponseInfo& info,
+                                            int32_t remainingRetries);
 
-  Return<void> supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
-                                           int32_t remainingRetries);
+    Return<void> supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                             int32_t remainingRetries);
 
-  Return<void> supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
-                                           int32_t remainingRetries);
+    Return<void> supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
+                                             int32_t remainingRetries);
 
-  Return<void> changeIccPinForAppResponse(const RadioResponseInfo& info,
-                                          int32_t remainingRetries);
+    Return<void> changeIccPinForAppResponse(const RadioResponseInfo& info,
+                                            int32_t remainingRetries);
 
-  Return<void> changeIccPin2ForAppResponse(const RadioResponseInfo& info,
-                                           int32_t remainingRetries);
+    Return<void> changeIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                             int32_t remainingRetries);
 
-  Return<void> supplyNetworkDepersonalizationResponse(
-      const RadioResponseInfo& info, int32_t remainingRetries);
+    Return<void> supplyNetworkDepersonalizationResponse(const RadioResponseInfo& info,
+                                                        int32_t remainingRetries);
 
-  Return<void> getCurrentCallsResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<Call>& calls);
+    Return<void> getCurrentCallsResponse(const RadioResponseInfo& info,
+                                         const ::android::hardware::hidl_vec<Call>& calls);
 
-  Return<void> dialResponse(const RadioResponseInfo& info);
+    Return<void> dialResponse(const RadioResponseInfo& info);
 
-  Return<void> getIMSIForAppResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& imsi);
+    Return<void> getIMSIForAppResponse(const RadioResponseInfo& info,
+                                       const ::android::hardware::hidl_string& imsi);
 
-  Return<void> hangupConnectionResponse(const RadioResponseInfo& info);
+    Return<void> hangupConnectionResponse(const RadioResponseInfo& info);
 
-  Return<void> hangupWaitingOrBackgroundResponse(const RadioResponseInfo& info);
+    Return<void> hangupWaitingOrBackgroundResponse(const RadioResponseInfo& info);
 
-  Return<void> hangupForegroundResumeBackgroundResponse(
-      const RadioResponseInfo& info);
+    Return<void> hangupForegroundResumeBackgroundResponse(const RadioResponseInfo& info);
 
-  Return<void> switchWaitingOrHoldingAndActiveResponse(
-      const RadioResponseInfo& info);
+    Return<void> switchWaitingOrHoldingAndActiveResponse(const RadioResponseInfo& info);
 
-  Return<void> conferenceResponse(const RadioResponseInfo& info);
+    Return<void> conferenceResponse(const RadioResponseInfo& info);
 
-  Return<void> rejectCallResponse(const RadioResponseInfo& info);
+    Return<void> rejectCallResponse(const RadioResponseInfo& info);
 
-  Return<void> getLastCallFailCauseResponse(
-      const RadioResponseInfo& info,
-      const LastCallFailCauseInfo& failCauseInfo);
+    Return<void> getLastCallFailCauseResponse(const RadioResponseInfo& info,
+                                              const LastCallFailCauseInfo& failCauseInfo);
 
-  Return<void> getSignalStrengthResponse(const RadioResponseInfo& info,
-                                         const SignalStrength& sigStrength);
+    Return<void> getSignalStrengthResponse(const RadioResponseInfo& info,
+                                           const SignalStrength& sigStrength);
 
-  Return<void> getVoiceRegistrationStateResponse(
-      const RadioResponseInfo& info,
-      const VoiceRegStateResult& voiceRegResponse);
+    Return<void> getVoiceRegistrationStateResponse(const RadioResponseInfo& info,
+                                                   const VoiceRegStateResult& voiceRegResponse);
 
-  Return<void> getDataRegistrationStateResponse(
-      const RadioResponseInfo& info, const DataRegStateResult& dataRegResponse);
+    Return<void> getDataRegistrationStateResponse(const RadioResponseInfo& info,
+                                                  const DataRegStateResult& dataRegResponse);
 
-  Return<void> getOperatorResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& longName,
-      const ::android::hardware::hidl_string& shortName,
-      const ::android::hardware::hidl_string& numeric);
+    Return<void> getOperatorResponse(const RadioResponseInfo& info,
+                                     const ::android::hardware::hidl_string& longName,
+                                     const ::android::hardware::hidl_string& shortName,
+                                     const ::android::hardware::hidl_string& numeric);
 
-  Return<void> setRadioPowerResponse(const RadioResponseInfo& info);
+    Return<void> setRadioPowerResponse(const RadioResponseInfo& info);
 
-  Return<void> sendDtmfResponse(const RadioResponseInfo& info);
+    Return<void> sendDtmfResponse(const RadioResponseInfo& info);
 
-  Return<void> sendSmsResponse(const RadioResponseInfo& info,
-                               const SendSmsResult& sms);
+    Return<void> sendSmsResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
 
-  Return<void> sendSMSExpectMoreResponse(const RadioResponseInfo& info,
-                                         const SendSmsResult& sms);
+    Return<void> sendSMSExpectMoreResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
 
-  Return<void> setupDataCallResponse(const RadioResponseInfo& info,
-                                     const SetupDataCallResult& dcResponse);
+    Return<void> setupDataCallResponse(const RadioResponseInfo& info,
+                                       const SetupDataCallResult& dcResponse);
 
-  Return<void> iccIOForAppResponse(const RadioResponseInfo& info,
-                                   const IccIoResult& iccIo);
+    Return<void> iccIOForAppResponse(const RadioResponseInfo& info, const IccIoResult& iccIo);
 
-  Return<void> sendUssdResponse(const RadioResponseInfo& info);
+    Return<void> sendUssdResponse(const RadioResponseInfo& info);
 
-  Return<void> cancelPendingUssdResponse(const RadioResponseInfo& info);
+    Return<void> cancelPendingUssdResponse(const RadioResponseInfo& info);
 
-  Return<void> getClirResponse(const RadioResponseInfo& info, int32_t n,
-                               int32_t m);
+    Return<void> getClirResponse(const RadioResponseInfo& info, int32_t n, int32_t m);
 
-  Return<void> setClirResponse(const RadioResponseInfo& info);
+    Return<void> setClirResponse(const RadioResponseInfo& info);
 
-  Return<void> getCallForwardStatusResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<CallForwardInfo>& call_forwardInfos);
+    Return<void> getCallForwardStatusResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<CallForwardInfo>& call_forwardInfos);
 
-  Return<void> setCallForwardResponse(const RadioResponseInfo& info);
+    Return<void> setCallForwardResponse(const RadioResponseInfo& info);
 
-  Return<void> getCallWaitingResponse(const RadioResponseInfo& info,
-                                      bool enable, int32_t serviceClass);
+    Return<void> getCallWaitingResponse(const RadioResponseInfo& info, bool enable,
+                                        int32_t serviceClass);
 
-  Return<void> setCallWaitingResponse(const RadioResponseInfo& info);
+    Return<void> setCallWaitingResponse(const RadioResponseInfo& info);
 
-  Return<void> acknowledgeLastIncomingGsmSmsResponse(
-      const RadioResponseInfo& info);
+    Return<void> acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info);
 
-  Return<void> acceptCallResponse(const RadioResponseInfo& info);
+    Return<void> acceptCallResponse(const RadioResponseInfo& info);
 
-  Return<void> deactivateDataCallResponse(const RadioResponseInfo& info);
+    Return<void> deactivateDataCallResponse(const RadioResponseInfo& info);
 
-  Return<void> getFacilityLockForAppResponse(const RadioResponseInfo& info,
-                                             int32_t response);
+    Return<void> getFacilityLockForAppResponse(const RadioResponseInfo& info, int32_t response);
 
-  Return<void> setFacilityLockForAppResponse(const RadioResponseInfo& info,
-                                             int32_t retry);
+    Return<void> setFacilityLockForAppResponse(const RadioResponseInfo& info, int32_t retry);
 
-  Return<void> setBarringPasswordResponse(const RadioResponseInfo& info);
+    Return<void> setBarringPasswordResponse(const RadioResponseInfo& info);
 
-  Return<void> getNetworkSelectionModeResponse(const RadioResponseInfo& info,
-                                               bool manual);
+    Return<void> getNetworkSelectionModeResponse(const RadioResponseInfo& info, bool manual);
 
-  Return<void> setNetworkSelectionModeAutomaticResponse(
-      const RadioResponseInfo& info);
+    Return<void> setNetworkSelectionModeAutomaticResponse(const RadioResponseInfo& info);
 
-  Return<void> setNetworkSelectionModeManualResponse(
-      const RadioResponseInfo& info);
+    Return<void> setNetworkSelectionModeManualResponse(const RadioResponseInfo& info);
 
-  Return<void> getAvailableNetworksResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos);
+    Return<void> getAvailableNetworksResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<OperatorInfo>& networkInfos);
 
-  Return<void> startDtmfResponse(const RadioResponseInfo& info);
+    Return<void> startDtmfResponse(const RadioResponseInfo& info);
 
-  Return<void> stopDtmfResponse(const RadioResponseInfo& info);
+    Return<void> stopDtmfResponse(const RadioResponseInfo& info);
 
-  Return<void> getBasebandVersionResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& version);
+    Return<void> getBasebandVersionResponse(const RadioResponseInfo& info,
+                                            const ::android::hardware::hidl_string& version);
 
-  Return<void> separateConnectionResponse(const RadioResponseInfo& info);
+    Return<void> separateConnectionResponse(const RadioResponseInfo& info);
 
-  Return<void> setMuteResponse(const RadioResponseInfo& info);
+    Return<void> setMuteResponse(const RadioResponseInfo& info);
 
-  Return<void> getMuteResponse(const RadioResponseInfo& info, bool enable);
+    Return<void> getMuteResponse(const RadioResponseInfo& info, bool enable);
 
-  Return<void> getClipResponse(const RadioResponseInfo& info,
-                               ClipStatus status);
+    Return<void> getClipResponse(const RadioResponseInfo& info, ClipStatus status);
 
-  Return<void> getDataCallListResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse);
+    Return<void> getDataCallListResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<SetupDataCallResult>& dcResponse);
 
-  Return<void> sendOemRilRequestRawResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<uint8_t>& data);
+    Return<void> sendOemRilRequestRawResponse(const RadioResponseInfo& info,
+                                              const ::android::hardware::hidl_vec<uint8_t>& data);
 
-  Return<void> sendOemRilRequestStringsResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<::android::hardware::hidl_string>&
-          data);
+    Return<void> sendOemRilRequestStringsResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data);
 
-  Return<void> setSuppServiceNotificationsResponse(
-      const RadioResponseInfo& info);
+    Return<void> setSuppServiceNotificationsResponse(const RadioResponseInfo& info);
 
-  Return<void> writeSmsToSimResponse(const RadioResponseInfo& info,
-                                     int32_t index);
+    Return<void> writeSmsToSimResponse(const RadioResponseInfo& info, int32_t index);
 
-  Return<void> deleteSmsOnSimResponse(const RadioResponseInfo& info);
+    Return<void> deleteSmsOnSimResponse(const RadioResponseInfo& info);
 
-  Return<void> setBandModeResponse(const RadioResponseInfo& info);
+    Return<void> setBandModeResponse(const RadioResponseInfo& info);
 
-  Return<void> getAvailableBandModesResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<RadioBandMode>& bandModes);
+    Return<void> getAvailableBandModesResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<RadioBandMode>& bandModes);
 
-  Return<void> sendEnvelopeResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& commandResponse);
+    Return<void> sendEnvelopeResponse(const RadioResponseInfo& info,
+                                      const ::android::hardware::hidl_string& commandResponse);
 
-  Return<void> sendTerminalResponseToSimResponse(const RadioResponseInfo& info);
+    Return<void> sendTerminalResponseToSimResponse(const RadioResponseInfo& info);
 
-  Return<void> handleStkCallSetupRequestFromSimResponse(
-      const RadioResponseInfo& info);
+    Return<void> handleStkCallSetupRequestFromSimResponse(const RadioResponseInfo& info);
 
-  Return<void> explicitCallTransferResponse(const RadioResponseInfo& info);
+    Return<void> explicitCallTransferResponse(const RadioResponseInfo& info);
 
-  Return<void> setPreferredNetworkTypeResponse(const RadioResponseInfo& info);
+    Return<void> setPreferredNetworkTypeResponse(const RadioResponseInfo& info);
 
-  Return<void> getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
-                                               PreferredNetworkType nwType);
+    Return<void> getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
+                                                 PreferredNetworkType nwType);
 
-  Return<void> getNeighboringCidsResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<NeighboringCell>& cells);
+    Return<void> getNeighboringCidsResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<NeighboringCell>& cells);
 
-  Return<void> setLocationUpdatesResponse(const RadioResponseInfo& info);
+    Return<void> setLocationUpdatesResponse(const RadioResponseInfo& info);
 
-  Return<void> setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info);
+    Return<void> setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info);
 
-  Return<void> setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info);
+    Return<void> setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info);
 
-  Return<void> getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
-                                                CdmaRoamingType type);
+    Return<void> getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
+                                                  CdmaRoamingType type);
 
-  Return<void> setTTYModeResponse(const RadioResponseInfo& info);
+    Return<void> setTTYModeResponse(const RadioResponseInfo& info);
 
-  Return<void> getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode);
+    Return<void> getTTYModeResponse(const RadioResponseInfo& info, TtyMode mode);
 
-  Return<void> setPreferredVoicePrivacyResponse(const RadioResponseInfo& info);
+    Return<void> setPreferredVoicePrivacyResponse(const RadioResponseInfo& info);
 
-  Return<void> getPreferredVoicePrivacyResponse(const RadioResponseInfo& info,
-                                                bool enable);
+    Return<void> getPreferredVoicePrivacyResponse(const RadioResponseInfo& info, bool enable);
 
-  Return<void> sendCDMAFeatureCodeResponse(const RadioResponseInfo& info);
+    Return<void> sendCDMAFeatureCodeResponse(const RadioResponseInfo& info);
 
-  Return<void> sendBurstDtmfResponse(const RadioResponseInfo& info);
+    Return<void> sendBurstDtmfResponse(const RadioResponseInfo& info);
 
-  Return<void> sendCdmaSmsResponse(const RadioResponseInfo& info,
-                                   const SendSmsResult& sms);
+    Return<void> sendCdmaSmsResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
 
-  Return<void> acknowledgeLastIncomingCdmaSmsResponse(
-      const RadioResponseInfo& info);
+    Return<void> acknowledgeLastIncomingCdmaSmsResponse(const RadioResponseInfo& info);
 
-  Return<void> getGsmBroadcastConfigResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs);
+    Return<void> getGsmBroadcastConfigResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& configs);
 
-  Return<void> setGsmBroadcastConfigResponse(const RadioResponseInfo& info);
+    Return<void> setGsmBroadcastConfigResponse(const RadioResponseInfo& info);
 
-  Return<void> setGsmBroadcastActivationResponse(const RadioResponseInfo& info);
+    Return<void> setGsmBroadcastActivationResponse(const RadioResponseInfo& info);
 
-  Return<void> getCdmaBroadcastConfigResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs);
+    Return<void> getCdmaBroadcastConfigResponse(
+        const RadioResponseInfo& info,
+        const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& configs);
 
-  Return<void> setCdmaBroadcastConfigResponse(const RadioResponseInfo& info);
+    Return<void> setCdmaBroadcastConfigResponse(const RadioResponseInfo& info);
 
-  Return<void> setCdmaBroadcastActivationResponse(
-      const RadioResponseInfo& info);
+    Return<void> setCdmaBroadcastActivationResponse(const RadioResponseInfo& info);
 
-  Return<void> getCDMASubscriptionResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& mdn,
-      const ::android::hardware::hidl_string& hSid,
-      const ::android::hardware::hidl_string& hNid,
-      const ::android::hardware::hidl_string& min,
-      const ::android::hardware::hidl_string& prl);
+    Return<void> getCDMASubscriptionResponse(const RadioResponseInfo& info,
+                                             const ::android::hardware::hidl_string& mdn,
+                                             const ::android::hardware::hidl_string& hSid,
+                                             const ::android::hardware::hidl_string& hNid,
+                                             const ::android::hardware::hidl_string& min,
+                                             const ::android::hardware::hidl_string& prl);
 
-  Return<void> writeSmsToRuimResponse(const RadioResponseInfo& info,
-                                      uint32_t index);
+    Return<void> writeSmsToRuimResponse(const RadioResponseInfo& info, uint32_t index);
 
-  Return<void> deleteSmsOnRuimResponse(const RadioResponseInfo& info);
+    Return<void> deleteSmsOnRuimResponse(const RadioResponseInfo& info);
 
-  Return<void> getDeviceIdentityResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& imei,
-      const ::android::hardware::hidl_string& imeisv,
-      const ::android::hardware::hidl_string& esn,
-      const ::android::hardware::hidl_string& meid);
+    Return<void> getDeviceIdentityResponse(const RadioResponseInfo& info,
+                                           const ::android::hardware::hidl_string& imei,
+                                           const ::android::hardware::hidl_string& imeisv,
+                                           const ::android::hardware::hidl_string& esn,
+                                           const ::android::hardware::hidl_string& meid);
 
-  Return<void> exitEmergencyCallbackModeResponse(const RadioResponseInfo& info);
+    Return<void> exitEmergencyCallbackModeResponse(const RadioResponseInfo& info);
 
-  Return<void> getSmscAddressResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& smsc);
+    Return<void> getSmscAddressResponse(const RadioResponseInfo& info,
+                                        const ::android::hardware::hidl_string& smsc);
 
-  Return<void> setSmscAddressResponse(const RadioResponseInfo& info);
+    Return<void> setSmscAddressResponse(const RadioResponseInfo& info);
 
-  Return<void> reportSmsMemoryStatusResponse(const RadioResponseInfo& info);
+    Return<void> reportSmsMemoryStatusResponse(const RadioResponseInfo& info);
 
-  Return<void> reportStkServiceIsRunningResponse(const RadioResponseInfo& info);
+    Return<void> reportStkServiceIsRunningResponse(const RadioResponseInfo& info);
 
-  Return<void> getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
-                                                 CdmaSubscriptionSource source);
+    Return<void> getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
+                                                   CdmaSubscriptionSource source);
 
-  Return<void> requestIsimAuthenticationResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& response);
+    Return<void> requestIsimAuthenticationResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_string& response);
 
-  Return<void> acknowledgeIncomingGsmSmsWithPduResponse(
-      const RadioResponseInfo& info);
+    Return<void> acknowledgeIncomingGsmSmsWithPduResponse(const RadioResponseInfo& info);
 
-  Return<void> sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
-                                              const IccIoResult& iccIo);
+    Return<void> sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
+                                                const IccIoResult& iccIo);
 
-  Return<void> getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
-                                               RadioTechnology rat);
+    Return<void> getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
+                                                 RadioTechnology rat);
 
-  Return<void> getCellInfoListResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<CellInfo>& cellInfo);
+    Return<void> getCellInfoListResponse(const RadioResponseInfo& info,
+                                         const ::android::hardware::hidl_vec<CellInfo>& cellInfo);
 
-  Return<void> setCellInfoListRateResponse(const RadioResponseInfo& info);
+    Return<void> setCellInfoListRateResponse(const RadioResponseInfo& info);
 
-  Return<void> setInitialAttachApnResponse(const RadioResponseInfo& info);
+    Return<void> setInitialAttachApnResponse(const RadioResponseInfo& info);
 
-  Return<void> getImsRegistrationStateResponse(const RadioResponseInfo& info,
-                                               bool isRegistered,
-                                               RadioTechnologyFamily ratFamily);
+    Return<void> getImsRegistrationStateResponse(const RadioResponseInfo& info, bool isRegistered,
+                                                 RadioTechnologyFamily ratFamily);
 
-  Return<void> sendImsSmsResponse(const RadioResponseInfo& info,
-                                  const SendSmsResult& sms);
+    Return<void> sendImsSmsResponse(const RadioResponseInfo& info, const SendSmsResult& sms);
 
-  Return<void> iccTransmitApduBasicChannelResponse(
-      const RadioResponseInfo& info, const IccIoResult& result);
+    Return<void> iccTransmitApduBasicChannelResponse(const RadioResponseInfo& info,
+                                                     const IccIoResult& result);
 
-  Return<void> iccOpenLogicalChannelResponse(
-      const RadioResponseInfo& info, int32_t channelId,
-      const ::android::hardware::hidl_vec<int8_t>& selectResponse);
+    Return<void> iccOpenLogicalChannelResponse(
+        const RadioResponseInfo& info, int32_t channelId,
+        const ::android::hardware::hidl_vec<int8_t>& selectResponse);
 
-  Return<void> iccCloseLogicalChannelResponse(const RadioResponseInfo& info);
+    Return<void> iccCloseLogicalChannelResponse(const RadioResponseInfo& info);
 
-  Return<void> iccTransmitApduLogicalChannelResponse(
-      const RadioResponseInfo& info, const IccIoResult& result);
+    Return<void> iccTransmitApduLogicalChannelResponse(const RadioResponseInfo& info,
+                                                       const IccIoResult& result);
 
-  Return<void> nvReadItemResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_string& result);
+    Return<void> nvReadItemResponse(const RadioResponseInfo& info,
+                                    const ::android::hardware::hidl_string& result);
 
-  Return<void> nvWriteItemResponse(const RadioResponseInfo& info);
+    Return<void> nvWriteItemResponse(const RadioResponseInfo& info);
 
-  Return<void> nvWriteCdmaPrlResponse(const RadioResponseInfo& info);
+    Return<void> nvWriteCdmaPrlResponse(const RadioResponseInfo& info);
 
-  Return<void> nvResetConfigResponse(const RadioResponseInfo& info);
+    Return<void> nvResetConfigResponse(const RadioResponseInfo& info);
 
-  Return<void> setUiccSubscriptionResponse(const RadioResponseInfo& info);
+    Return<void> setUiccSubscriptionResponse(const RadioResponseInfo& info);
 
-  Return<void> setDataAllowedResponse(const RadioResponseInfo& info);
+    Return<void> setDataAllowedResponse(const RadioResponseInfo& info);
 
-  Return<void> getHardwareConfigResponse(
-      const RadioResponseInfo& info,
-      const ::android::hardware::hidl_vec<HardwareConfig>& config);
+    Return<void> getHardwareConfigResponse(
+        const RadioResponseInfo& info, const ::android::hardware::hidl_vec<HardwareConfig>& config);
 
-  Return<void> requestIccSimAuthenticationResponse(
-      const RadioResponseInfo& info, const IccIoResult& result);
+    Return<void> requestIccSimAuthenticationResponse(const RadioResponseInfo& info,
+                                                     const IccIoResult& result);
 
-  Return<void> setDataProfileResponse(const RadioResponseInfo& info);
+    Return<void> setDataProfileResponse(const RadioResponseInfo& info);
 
-  Return<void> requestShutdownResponse(const RadioResponseInfo& info);
+    Return<void> requestShutdownResponse(const RadioResponseInfo& info);
 
-  Return<void> getRadioCapabilityResponse(const RadioResponseInfo& info,
-                                          const RadioCapability& rc);
+    Return<void> getRadioCapabilityResponse(const RadioResponseInfo& info,
+                                            const RadioCapability& rc);
 
-  Return<void> setRadioCapabilityResponse(const RadioResponseInfo& info,
-                                          const RadioCapability& rc);
+    Return<void> setRadioCapabilityResponse(const RadioResponseInfo& info,
+                                            const RadioCapability& rc);
 
-  Return<void> startLceServiceResponse(const RadioResponseInfo& info,
-                                       const LceStatusInfo& statusInfo);
+    Return<void> startLceServiceResponse(const RadioResponseInfo& info,
+                                         const LceStatusInfo& statusInfo);
 
-  Return<void> stopLceServiceResponse(const RadioResponseInfo& info,
-                                      const LceStatusInfo& statusInfo);
+    Return<void> stopLceServiceResponse(const RadioResponseInfo& info,
+                                        const LceStatusInfo& statusInfo);
 
-  Return<void> pullLceDataResponse(const RadioResponseInfo& info,
-                                   const LceDataInfo& lceInfo);
+    Return<void> pullLceDataResponse(const RadioResponseInfo& info, const LceDataInfo& lceInfo);
 
-  Return<void> getModemActivityInfoResponse(
-      const RadioResponseInfo& info, const ActivityStatsInfo& activityInfo);
+    Return<void> getModemActivityInfoResponse(const RadioResponseInfo& info,
+                                              const ActivityStatsInfo& activityInfo);
 
-  Return<void> setAllowedCarriersResponse(const RadioResponseInfo& info,
-                                          int32_t numAllowed);
+    Return<void> setAllowedCarriersResponse(const RadioResponseInfo& info, int32_t numAllowed);
 
-  Return<void> getAllowedCarriersResponse(const RadioResponseInfo& info,
-                                          bool allAllowed,
-                                          const CarrierRestrictions& carriers);
+    Return<void> getAllowedCarriersResponse(const RadioResponseInfo& info, bool allAllowed,
+                                            const CarrierRestrictions& carriers);
 
-  Return<void> sendDeviceStateResponse(const RadioResponseInfo& info);
+    Return<void> sendDeviceStateResponse(const RadioResponseInfo& info);
 
-  Return<void> setIndicationFilterResponse(const RadioResponseInfo& info);
+    Return<void> setIndicationFilterResponse(const RadioResponseInfo& info);
 
-  Return<void> setSimCardPowerResponse(const RadioResponseInfo& info);
+    Return<void> setSimCardPowerResponse(const RadioResponseInfo& info);
 
-  Return<void> acknowledgeRequest(int32_t serial);
+    Return<void> acknowledgeRequest(int32_t serial);
 };
 
 // The main test class for Radio HIDL.
 class RadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
- private:
-  std::mutex mtx;
-  std::condition_variable cv;
-  int count;
+   private:
+    std::mutex mtx;
+    std::condition_variable cv;
+    int count;
 
- public:
-  virtual void SetUp() override;
+   public:
+    virtual void SetUp() override;
 
-  virtual void TearDown() override;
+    virtual void TearDown() override;
 
-  /* Used as a mechanism to inform the test about data/event callback */
-  void notify();
+    /* Used as a mechanism to inform the test about data/event callback */
+    void notify();
 
-  /* Test code calls this function to wait for response */
-  std::cv_status wait();
+    /* Test code calls this function to wait for response */
+    std::cv_status wait();
 
-  /* Used for checking General Errors */
-  bool CheckGeneralError();
+    /* Used for checking General Errors */
+    bool CheckGeneralError();
 
-  /* Used for checking OEM Errors */
-  bool CheckOEMError();
+    /* Used for checking OEM Errors */
+    bool CheckOEMError();
 
-  sp<IRadio> radio;
-  sp<RadioResponse> radioRsp;
-  sp<IRadioIndication> radioInd;
+    sp<IRadio> radio;
+    sp<RadioResponse> radioRsp;
+    sp<IRadioIndication> radioInd;
 };
 
 // A class for test environment setup
 class RadioHidlEnvironment : public ::testing::Environment {
- public:
-  virtual void SetUp() {}
-  virtual void TearDown() {}
+   public:
+    virtual void SetUp() {}
+    virtual void TearDown() {}
 };
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp b/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
index b96269a..95d00e3 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_voice.cpp
@@ -20,477 +20,467 @@
  * Test IRadio.getCurrentCalls() for the response returned.
  */
 TEST_F(RadioHidlTest, getCurrentCalls) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCurrentCalls(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCurrentCalls(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.dial() for the response returned.
  */
 TEST_F(RadioHidlTest, dial) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  Dial dialInfo;
-  memset(&dialInfo, 0, sizeof(dialInfo));
-  dialInfo.address = hidl_string("123456789");
+    Dial dialInfo;
+    memset(&dialInfo, 0, sizeof(dialInfo));
+    dialInfo.address = hidl_string("123456789");
 
-  radio->dial(serial, dialInfo);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->dial(serial, dialInfo);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
-                  radioRsp->rspInfo.error == RadioError::FDN_CHECK_FAILURE ||
-                  radioRsp->rspInfo.error == RadioError::NO_SUBSCRIPTION ||
-                  radioRsp->rspInfo.error == RadioError::NO_NETWORK_FOUND ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
-                  radioRsp->rspInfo.error == RadioError::DEVICE_IN_USE ||
-                  radioRsp->rspInfo.error == RadioError::MODE_NOT_SUPPORTED ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
-                  radioRsp->rspInfo.error == RadioError::CANCELLED);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
+                    radioRsp->rspInfo.error == RadioError::FDN_CHECK_FAILURE ||
+                    radioRsp->rspInfo.error == RadioError::NO_SUBSCRIPTION ||
+                    radioRsp->rspInfo.error == RadioError::NO_NETWORK_FOUND ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
+                    radioRsp->rspInfo.error == RadioError::DEVICE_IN_USE ||
+                    radioRsp->rspInfo.error == RadioError::MODE_NOT_SUPPORTED ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
+                    radioRsp->rspInfo.error == RadioError::CANCELLED);
+    }
 }
 
 /*
  * Test IRadio.hangup() for the response returned.
  */
 TEST_F(RadioHidlTest, hangup) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->hangup(serial, 1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->hangup(serial, 1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.hangupWaitingOrBackground() for the response returned.
  */
 TEST_F(RadioHidlTest, hangupWaitingOrBackground) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->hangupWaitingOrBackground(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->hangupWaitingOrBackground(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.hangupForegroundResumeBackground() for the response returned.
  */
 TEST_F(RadioHidlTest, hangupForegroundResumeBackground) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->hangupForegroundResumeBackground(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->hangupForegroundResumeBackground(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.switchWaitingOrHoldingAndActive() for the response returned.
  */
 TEST_F(RadioHidlTest, switchWaitingOrHoldingAndActive) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->switchWaitingOrHoldingAndActive(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->switchWaitingOrHoldingAndActive(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.conference() for the response returned.
  */
 TEST_F(RadioHidlTest, conference) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->conference(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->conference(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.rejectCall() for the response returned.
  */
 TEST_F(RadioHidlTest, rejectCall) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->rejectCall(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->rejectCall(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.getLastCallFailCause() for the response returned.
  */
 TEST_F(RadioHidlTest, getLastCallFailCause) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getLastCallFailCause(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getLastCallFailCause(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.sendUssd() for the response returned.
  */
 TEST_F(RadioHidlTest, sendUssd) {
-  int serial = 1;
-  radio->sendUssd(serial, hidl_string("test"));
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    int serial = GetRandomSerialNumber();
+    radio->sendUssd(serial, hidl_string("test"));
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.cancelPendingUssd() for the response returned.
  */
 TEST_F(RadioHidlTest, cancelPendingUssd) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->cancelPendingUssd(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->cancelPendingUssd(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.getCallForwardStatus() for the response returned.
  */
 TEST_F(RadioHidlTest, getCallForwardStatus) {
-  int serial = 1;
-  CallForwardInfo callInfo;
-  memset(&callInfo, 0, sizeof(callInfo));
-  callInfo.number = hidl_string();
+    int serial = GetRandomSerialNumber();
+    CallForwardInfo callInfo;
+    memset(&callInfo, 0, sizeof(callInfo));
+    callInfo.number = hidl_string();
 
-  radio->getCallForwardStatus(serial, callInfo);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCallForwardStatus(serial, callInfo);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setCallForward() for the response returned.
  */
 TEST_F(RadioHidlTest, setCallForward) {
-  int serial = 1;
-  CallForwardInfo callInfo;
-  memset(&callInfo, 0, sizeof(callInfo));
-  callInfo.number = hidl_string();
+    int serial = GetRandomSerialNumber();
+    CallForwardInfo callInfo;
+    memset(&callInfo, 0, sizeof(callInfo));
+    callInfo.number = hidl_string();
 
-  radio->setCallForward(serial, callInfo);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setCallForward(serial, callInfo);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.getCallWaiting() for the response returned.
  */
 TEST_F(RadioHidlTest, getCallWaiting) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getCallWaiting(serial, 1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getCallWaiting(serial, 1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setCallWaiting() for the response returned.
  */
 TEST_F(RadioHidlTest, setCallWaiting) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setCallWaiting(serial, true, 1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setCallWaiting(serial, true, 1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.acceptCall() for the response returned.
  */
 TEST_F(RadioHidlTest, acceptCall) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->acceptCall(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->acceptCall(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.separateConnection() for the response returned.
  */
 TEST_F(RadioHidlTest, separateConnection) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->separateConnection(serial, 1);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->separateConnection(serial, 1);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.explicitCallTransfer() for the response returned.
  */
 TEST_F(RadioHidlTest, explicitCallTransfer) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->explicitCallTransfer(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->explicitCallTransfer(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.sendCDMAFeatureCode() for the response returned.
  */
 TEST_F(RadioHidlTest, sendCDMAFeatureCode) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->sendCDMAFeatureCode(serial, hidl_string());
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->sendCDMAFeatureCode(serial, hidl_string());
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.sendDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, sendDtmf) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->sendDtmf(serial, "1");
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->sendDtmf(serial, "1");
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.startDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, startDtmf) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->startDtmf(serial, "1");
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->startDtmf(serial, "1");
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.stopDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, stopDtmf) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->stopDtmf(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->stopDtmf(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::NONE ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::NONE ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_CALL_ID ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
 
 /*
  * Test IRadio.setMute() for the response returned.
  */
 TEST_F(RadioHidlTest, setMute) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->setMute(serial, true);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->setMute(serial, true);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.getMute() for the response returned.
  */
 TEST_F(RadioHidlTest, getMute) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->getMute(serial);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->getMute(serial);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-    ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(radioRsp->rspInfo.error == RadioError::NONE);
+    }
 }
 
 /*
  * Test IRadio.sendBurstDtmf() for the response returned.
  */
 TEST_F(RadioHidlTest, sendBurstDtmf) {
-  int serial = 1;
+    int serial = GetRandomSerialNumber();
 
-  radio->sendBurstDtmf(serial, "1", 0, 0);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-  EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+    radio->sendBurstDtmf(serial, "1", 0, 0);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-  if (cardStatus.cardState == CardState::ABSENT) {
-      ASSERT_TRUE(CheckGeneralError() ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
-                  radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
-                  radioRsp->rspInfo.error == RadioError::MODEM_ERR);
-  }
+    if (cardStatus.cardState == CardState::ABSENT) {
+        ASSERT_TRUE(CheckGeneralError() ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
+                    radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
+                    radioRsp->rspInfo.error == RadioError::MODEM_ERR);
+    }
 }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/radio_response.cpp b/radio/1.0/vts/functional/radio_response.cpp
index 22c20a5..ef887eb 100644
--- a/radio/1.0/vts/functional/radio_response.cpp
+++ b/radio/1.0/vts/functional/radio_response.cpp
@@ -20,953 +20,884 @@
 
 RadioResponse::RadioResponse(RadioHidlTest& parent) : parent(parent) {}
 
-Return<void> RadioResponse::getIccCardStatusResponse(
-    const RadioResponseInfo& info, const CardStatus& card_status) {
-  rspInfo = info;
-  cardStatus = card_status;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getIccCardStatusResponse(const RadioResponseInfo& info,
+                                                     const CardStatus& card_status) {
+    rspInfo = info;
+    cardStatus = card_status;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::supplyIccPinForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::supplyIccPinForAppResponse(const RadioResponseInfo& info,
+                                                       int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::supplyIccPukForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::supplyIccPukForAppResponse(const RadioResponseInfo& info,
+                                                       int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::supplyIccPin2ForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::supplyIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                                        int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::supplyIccPuk2ForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::supplyIccPuk2ForAppResponse(const RadioResponseInfo& info,
+                                                        int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::changeIccPinForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::changeIccPinForAppResponse(const RadioResponseInfo& info,
+                                                       int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::changeIccPin2ForAppResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::changeIccPin2ForAppResponse(const RadioResponseInfo& info,
+                                                        int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::supplyNetworkDepersonalizationResponse(
-    const RadioResponseInfo& info, int32_t /*remainingRetries*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::supplyNetworkDepersonalizationResponse(const RadioResponseInfo& info,
+                                                                   int32_t /*remainingRetries*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getCurrentCallsResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_vec<Call>& /*calls*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const ::android::hardware::hidl_vec<Call>& /*calls*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::dialResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getIMSIForAppResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& imsi) {
-  rspInfo = info;
-  this->imsi = imsi;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getIMSIForAppResponse(const RadioResponseInfo& info,
+                                                  const ::android::hardware::hidl_string& imsi) {
+    rspInfo = info;
+    this->imsi = imsi;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::hangupConnectionResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::hangupConnectionResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::hangupWaitingOrBackgroundResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::hangupWaitingOrBackgroundResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::hangupForegroundResumeBackgroundResponse(
     const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::switchWaitingOrHoldingAndActiveResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::switchWaitingOrHoldingAndActiveResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::conferenceResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::rejectCallResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getLastCallFailCauseResponse(
-    const RadioResponseInfo& info,
-    const LastCallFailCauseInfo& /*failCauseInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const LastCallFailCauseInfo& /*failCauseInfo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getSignalStrengthResponse(
-    const RadioResponseInfo& info, const SignalStrength& /*sig_strength*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getSignalStrengthResponse(const RadioResponseInfo& info,
+                                                      const SignalStrength& /*sig_strength*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getVoiceRegistrationStateResponse(
-    const RadioResponseInfo& info,
-    const VoiceRegStateResult& /*voiceRegResponse*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const VoiceRegStateResult& /*voiceRegResponse*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getDataRegistrationStateResponse(
-    const RadioResponseInfo& info,
-    const DataRegStateResult& /*dataRegResponse*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const DataRegStateResult& /*dataRegResponse*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getOperatorResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*longName*/,
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*longName*/,
     const ::android::hardware::hidl_string& /*shortName*/,
     const ::android::hardware::hidl_string& /*numeric*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setRadioPowerResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setRadioPowerResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendDtmfResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendSmsResponse(const RadioResponseInfo& info,
                                             const SendSmsResult& sms) {
-  rspInfo = info;
-  sendSmsResult = sms;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    sendSmsResult = sms;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendSMSExpectMoreResponse(
-    const RadioResponseInfo& info, const SendSmsResult& sms) {
-  rspInfo = info;
-  sendSmsResult = sms;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendSMSExpectMoreResponse(const RadioResponseInfo& info,
+                                                      const SendSmsResult& sms) {
+    rspInfo = info;
+    sendSmsResult = sms;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setupDataCallResponse(
-    const RadioResponseInfo& info, const SetupDataCallResult& /*dcResponse*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setupDataCallResponse(const RadioResponseInfo& info,
+                                                  const SetupDataCallResult& /*dcResponse*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::iccIOForAppResponse(const RadioResponseInfo& info,
                                                 const IccIoResult& iccIo) {
-  rspInfo = info;
-  this->iccIoResult = iccIo;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    this->iccIoResult = iccIo;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendUssdResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::cancelPendingUssdResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::cancelPendingUssdResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getClirResponse(const RadioResponseInfo& info,
-                                            int32_t /*n*/, int32_t /*m*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getClirResponse(const RadioResponseInfo& info, int32_t /*n*/,
+                                            int32_t /*m*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::setClirResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getCallForwardStatusResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_vec<CallForwardInfo>&
+    const RadioResponseInfo& info, const ::android::hardware::hidl_vec<CallForwardInfo>&
     /*callForwardInfos*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCallForwardResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCallForwardResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getCallWaitingResponse(
-    const RadioResponseInfo& info, bool /*enable*/, int32_t /*serviceClass*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getCallWaitingResponse(const RadioResponseInfo& info, bool /*enable*/,
+                                                   int32_t /*serviceClass*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCallWaitingResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCallWaitingResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::acknowledgeLastIncomingGsmSmsResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::acknowledgeLastIncomingGsmSmsResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::acceptCallResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::deactivateDataCallResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::deactivateDataCallResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getFacilityLockForAppResponse(
-    const RadioResponseInfo& info, int32_t /*response*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getFacilityLockForAppResponse(const RadioResponseInfo& info,
+                                                          int32_t /*response*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setFacilityLockForAppResponse(
-    const RadioResponseInfo& info, int32_t /*retry*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setFacilityLockForAppResponse(const RadioResponseInfo& info,
+                                                          int32_t /*retry*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setBarringPasswordResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setBarringPasswordResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getNetworkSelectionModeResponse(
-    const RadioResponseInfo& info, bool /*manual*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getNetworkSelectionModeResponse(const RadioResponseInfo& info,
+                                                            bool /*manual*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::setNetworkSelectionModeAutomaticResponse(
     const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setNetworkSelectionModeManualResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setNetworkSelectionModeManualResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getAvailableNetworksResponse(
     const RadioResponseInfo& info,
     const ::android::hardware::hidl_vec<OperatorInfo>& /*networkInfos*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::startDtmfResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::stopDtmfResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getBasebandVersionResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*version*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*version*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::separateConnectionResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::separateConnectionResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::setMuteResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getMuteResponse(const RadioResponseInfo& info,
-                                            bool /*enable*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getMuteResponse(const RadioResponseInfo& info, bool /*enable*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getClipResponse(const RadioResponseInfo& info,
-                                            ClipStatus /*status*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getClipResponse(const RadioResponseInfo& info, ClipStatus /*status*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getDataCallListResponse(
     const RadioResponseInfo& info,
     const ::android::hardware::hidl_vec<SetupDataCallResult>& /*dcResponse*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendOemRilRequestRawResponse(
-    const RadioResponseInfo& /*info*/,
-    const ::android::hardware::hidl_vec<uint8_t>& /*data*/) {
-  return Void();
+    const RadioResponseInfo& /*info*/, const ::android::hardware::hidl_vec<uint8_t>& /*data*/) {
+    return Void();
 }
 
 Return<void> RadioResponse::sendOemRilRequestStringsResponse(
     const RadioResponseInfo& /*info*/,
-    const ::android::hardware::hidl_vec<
-        ::android::hardware::hidl_string>& /*data*/) {
-  return Void();
+    const ::android::hardware::hidl_vec< ::android::hardware::hidl_string>& /*data*/) {
+    return Void();
 }
 
-Return<void> RadioResponse::setSuppServiceNotificationsResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setSuppServiceNotificationsResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::writeSmsToSimResponse(const RadioResponseInfo& info,
-                                                  int32_t index) {
-  rspInfo = info;
-  writeSmsToSimIndex = index;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::writeSmsToSimResponse(const RadioResponseInfo& info, int32_t index) {
+    rspInfo = info;
+    writeSmsToSimIndex = index;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::deleteSmsOnSimResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::deleteSmsOnSimResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::setBandModeResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getAvailableBandModesResponse(
     const RadioResponseInfo& info,
     const ::android::hardware::hidl_vec<RadioBandMode>& /*bandModes*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendEnvelopeResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*commandResponse*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*commandResponse*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendTerminalResponseToSimResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendTerminalResponseToSimResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::handleStkCallSetupRequestFromSimResponse(
     const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::explicitCallTransferResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::explicitCallTransferResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setPreferredNetworkTypeResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setPreferredNetworkTypeResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getPreferredNetworkTypeResponse(
-    const RadioResponseInfo& info, PreferredNetworkType /*nw_type*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getPreferredNetworkTypeResponse(const RadioResponseInfo& info,
+                                                            PreferredNetworkType /*nw_type*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getNeighboringCidsResponse(
     const RadioResponseInfo& info,
     const ::android::hardware::hidl_vec<NeighboringCell>& /*cells*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setLocationUpdatesResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setLocationUpdatesResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCdmaSubscriptionSourceResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCdmaSubscriptionSourceResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCdmaRoamingPreferenceResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCdmaRoamingPreferenceResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getCdmaRoamingPreferenceResponse(
-    const RadioResponseInfo& info, CdmaRoamingType /*type*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getCdmaRoamingPreferenceResponse(const RadioResponseInfo& info,
+                                                             CdmaRoamingType /*type*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::setTTYModeResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getTTYModeResponse(const RadioResponseInfo& info,
-                                               TtyMode /*mode*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getTTYModeResponse(const RadioResponseInfo& info, TtyMode /*mode*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setPreferredVoicePrivacyResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setPreferredVoicePrivacyResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getPreferredVoicePrivacyResponse(
-    const RadioResponseInfo& info, bool /*enable*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getPreferredVoicePrivacyResponse(const RadioResponseInfo& info,
+                                                             bool /*enable*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendCDMAFeatureCodeResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendCDMAFeatureCodeResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendBurstDtmfResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendBurstDtmfResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendCdmaSmsResponse(const RadioResponseInfo& info,
                                                 const SendSmsResult& sms) {
-  rspInfo = info;
-  sendSmsResult = sms;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    sendSmsResult = sms;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::acknowledgeLastIncomingCdmaSmsResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::acknowledgeLastIncomingCdmaSmsResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getGsmBroadcastConfigResponse(
     const RadioResponseInfo& info,
-    const ::android::hardware::hidl_vec<
-        GsmBroadcastSmsConfigInfo>& /*configs*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const ::android::hardware::hidl_vec<GsmBroadcastSmsConfigInfo>& /*configs*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setGsmBroadcastConfigResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setGsmBroadcastConfigResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setGsmBroadcastActivationResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setGsmBroadcastActivationResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getCdmaBroadcastConfigResponse(
     const RadioResponseInfo& info,
-    const ::android::hardware::hidl_vec<
-        CdmaBroadcastSmsConfigInfo>& /*configs*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const ::android::hardware::hidl_vec<CdmaBroadcastSmsConfigInfo>& /*configs*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCdmaBroadcastConfigResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCdmaBroadcastConfigResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCdmaBroadcastActivationResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCdmaBroadcastActivationResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getCDMASubscriptionResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*mdn*/,
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*mdn*/,
     const ::android::hardware::hidl_string& /*hSid*/,
     const ::android::hardware::hidl_string& /*hNid*/,
     const ::android::hardware::hidl_string& /*min*/,
     const ::android::hardware::hidl_string& /*prl*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::writeSmsToRuimResponse(
-    const RadioResponseInfo& info, uint32_t index) {
-  rspInfo = info;
-  writeSmsToRuimIndex = index;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::writeSmsToRuimResponse(const RadioResponseInfo& info, uint32_t index) {
+    rspInfo = info;
+    writeSmsToRuimIndex = index;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::deleteSmsOnRuimResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::deleteSmsOnRuimResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getDeviceIdentityResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*imei*/,
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*imei*/,
     const ::android::hardware::hidl_string& /*imeisv*/,
     const ::android::hardware::hidl_string& /*esn*/,
     const ::android::hardware::hidl_string& /*meid*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::exitEmergencyCallbackModeResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::exitEmergencyCallbackModeResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getSmscAddressResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& smsc) {
-  rspInfo = info;
-  smscAddress = smsc;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getSmscAddressResponse(const RadioResponseInfo& info,
+                                                   const ::android::hardware::hidl_string& smsc) {
+    rspInfo = info;
+    smscAddress = smsc;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setSmscAddressResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setSmscAddressResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::reportSmsMemoryStatusResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::reportSmsMemoryStatusResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::reportStkServiceIsRunningResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::reportStkServiceIsRunningResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getCdmaSubscriptionSourceResponse(
-    const RadioResponseInfo& info, CdmaSubscriptionSource /*source*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getCdmaSubscriptionSourceResponse(const RadioResponseInfo& info,
+                                                              CdmaSubscriptionSource /*source*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::requestIsimAuthenticationResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*response*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const ::android::hardware::hidl_string& /*response*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::acknowledgeIncomingGsmSmsWithPduResponse(
     const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendEnvelopeWithStatusResponse(
-    const RadioResponseInfo& info, const IccIoResult& /*iccIo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendEnvelopeWithStatusResponse(const RadioResponseInfo& info,
+                                                           const IccIoResult& /*iccIo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getVoiceRadioTechnologyResponse(
-    const RadioResponseInfo& info, RadioTechnology /*rat*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getVoiceRadioTechnologyResponse(const RadioResponseInfo& info,
+                                                            RadioTechnology /*rat*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getCellInfoListResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_vec<CellInfo>& /*cellInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    const RadioResponseInfo& info, const ::android::hardware::hidl_vec<CellInfo>& /*cellInfo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setCellInfoListRateResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setCellInfoListRateResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setInitialAttachApnResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setInitialAttachApnResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getImsRegistrationStateResponse(
-    const RadioResponseInfo& info, bool /*isRegistered*/,
-    RadioTechnologyFamily /*ratFamily*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getImsRegistrationStateResponse(const RadioResponseInfo& info,
+                                                            bool /*isRegistered*/,
+                                                            RadioTechnologyFamily /*ratFamily*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::sendImsSmsResponse(const RadioResponseInfo& info,
                                                const SendSmsResult& sms) {
-  rspInfo = info;
-  sendSmsResult = sms;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    sendSmsResult = sms;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::iccTransmitApduBasicChannelResponse(
-    const RadioResponseInfo& info, const IccIoResult& result) {
-  rspInfo = info;
-  this->iccIoResult = result;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::iccTransmitApduBasicChannelResponse(const RadioResponseInfo& info,
+                                                                const IccIoResult& result) {
+    rspInfo = info;
+    this->iccIoResult = result;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::iccOpenLogicalChannelResponse(
     const RadioResponseInfo& info, int32_t channelId,
     const ::android::hardware::hidl_vec<int8_t>& /*selectResponse*/) {
-  rspInfo = info;
-  this->channelId = channelId;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    this->channelId = channelId;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::iccCloseLogicalChannelResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::iccCloseLogicalChannelResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::iccTransmitApduLogicalChannelResponse(
-    const RadioResponseInfo& info, const IccIoResult& result) {
-  rspInfo = info;
-  this->iccIoResult = result;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::iccTransmitApduLogicalChannelResponse(const RadioResponseInfo& info,
+                                                                  const IccIoResult& result) {
+    rspInfo = info;
+    this->iccIoResult = result;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::nvReadItemResponse(
-    const RadioResponseInfo& info,
-    const ::android::hardware::hidl_string& /*result*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::nvReadItemResponse(const RadioResponseInfo& info,
+                                               const ::android::hardware::hidl_string& /*result*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::nvWriteItemResponse(const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::nvWriteCdmaPrlResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::nvWriteCdmaPrlResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::nvResetConfigResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::nvResetConfigResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setUiccSubscriptionResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setUiccSubscriptionResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setDataAllowedResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setDataAllowedResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getHardwareConfigResponse(
     const RadioResponseInfo& info,
     const ::android::hardware::hidl_vec<HardwareConfig>& /*config*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::requestIccSimAuthenticationResponse(
-    const RadioResponseInfo& info, const IccIoResult& result) {
-  rspInfo = info;
-  this->iccIoResult = result;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::requestIccSimAuthenticationResponse(const RadioResponseInfo& info,
+                                                                const IccIoResult& result) {
+    rspInfo = info;
+    this->iccIoResult = result;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setDataProfileResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setDataProfileResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::requestShutdownResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::requestShutdownResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getRadioCapabilityResponse(
-    const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getRadioCapabilityResponse(const RadioResponseInfo& info,
+                                                       const RadioCapability& /*rc*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setRadioCapabilityResponse(
-    const RadioResponseInfo& info, const RadioCapability& /*rc*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setRadioCapabilityResponse(const RadioResponseInfo& info,
+                                                       const RadioCapability& /*rc*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::startLceServiceResponse(
-    const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::startLceServiceResponse(const RadioResponseInfo& info,
+                                                    const LceStatusInfo& /*statusInfo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::stopLceServiceResponse(
-    const RadioResponseInfo& info, const LceStatusInfo& /*statusInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::stopLceServiceResponse(const RadioResponseInfo& info,
+                                                   const LceStatusInfo& /*statusInfo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::pullLceDataResponse(
-    const RadioResponseInfo& info, const LceDataInfo& /*lceInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::pullLceDataResponse(const RadioResponseInfo& info,
+                                                const LceDataInfo& /*lceInfo*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::getModemActivityInfoResponse(
     const RadioResponseInfo& info, const ActivityStatsInfo& /*activityInfo*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setAllowedCarriersResponse(
-    const RadioResponseInfo& info, int32_t /*numAllowed*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setAllowedCarriersResponse(const RadioResponseInfo& info,
+                                                       int32_t /*numAllowed*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::getAllowedCarriersResponse(
-    const RadioResponseInfo& info, bool /*allAllowed*/,
-    const CarrierRestrictions& /*carriers*/) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::getAllowedCarriersResponse(const RadioResponseInfo& info,
+                                                       bool /*allAllowed*/,
+                                                       const CarrierRestrictions& /*carriers*/) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::sendDeviceStateResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::sendDeviceStateResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setIndicationFilterResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setIndicationFilterResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
-Return<void> RadioResponse::setSimCardPowerResponse(
-    const RadioResponseInfo& info) {
-  rspInfo = info;
-  parent.notify();
-  return Void();
+Return<void> RadioResponse::setSimCardPowerResponse(const RadioResponseInfo& info) {
+    rspInfo = info;
+    parent.notify();
+    return Void();
 }
 
 Return<void> RadioResponse::acknowledgeRequest(int32_t /*serial*/) {
-  return Void();
+    return Void();
 }
diff --git a/radio/1.0/vts/functional/sap_callback.cpp b/radio/1.0/vts/functional/sap_callback.cpp
index 3a06ecd..fdcc15c 100644
--- a/radio/1.0/vts/functional/sap_callback.cpp
+++ b/radio/1.0/vts/functional/sap_callback.cpp
@@ -18,78 +18,74 @@
 
 SapCallback::SapCallback(SapHidlTest& parent) : parent(parent) {}
 
-Return<void> SapCallback::connectResponse(int32_t token,
-                                          SapConnectRsp /*sapConnectRsp*/,
+Return<void> SapCallback::connectResponse(int32_t token, SapConnectRsp /*sapConnectRsp*/,
                                           int32_t /*maxMsgSize*/) {
-  sapResponseToken = token;
-  parent.notify();
-  return Void();
+    sapResponseToken = token;
+    parent.notify();
+    return Void();
 }
 
 Return<void> SapCallback::disconnectResponse(int32_t token) {
-  sapResponseToken = token;
-  parent.notify();
-  return Void();
+    sapResponseToken = token;
+    parent.notify();
+    return Void();
 }
 
-Return<void> SapCallback::disconnectIndication(
-    int32_t /*token*/, SapDisconnectType /*disconnectType*/) {
-  return Void();
+Return<void> SapCallback::disconnectIndication(int32_t /*token*/,
+                                               SapDisconnectType /*disconnectType*/) {
+    return Void();
 }
 
-Return<void> SapCallback::apduResponse(
-    int32_t token, SapResultCode resultCode,
-    const ::android::hardware::hidl_vec<uint8_t>& /*apduRsp*/) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+Return<void> SapCallback::apduResponse(int32_t token, SapResultCode resultCode,
+                                       const ::android::hardware::hidl_vec<uint8_t>& /*apduRsp*/) {
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
 
 Return<void> SapCallback::transferAtrResponse(
     int32_t token, SapResultCode resultCode,
     const ::android::hardware::hidl_vec<uint8_t>& /*atr*/) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
 
-Return<void> SapCallback::powerResponse(int32_t token,
-                                        SapResultCode resultCode) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+Return<void> SapCallback::powerResponse(int32_t token, SapResultCode resultCode) {
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
 
-Return<void> SapCallback::resetSimResponse(int32_t token,
-                                           SapResultCode resultCode) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+Return<void> SapCallback::resetSimResponse(int32_t token, SapResultCode resultCode) {
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
 
-Return<void> SapCallback::statusIndication(int32_t /*token*/,
-                                           SapStatus /*status*/) {
-  return Void();
+Return<void> SapCallback::statusIndication(int32_t /*token*/, SapStatus /*status*/) {
+    return Void();
 }
 
-Return<void> SapCallback::transferCardReaderStatusResponse(
-    int32_t token, SapResultCode resultCode, int32_t /*cardReaderStatus*/) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+Return<void> SapCallback::transferCardReaderStatusResponse(int32_t token, SapResultCode resultCode,
+                                                           int32_t /*cardReaderStatus*/) {
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
 
-Return<void> SapCallback::errorResponse(int32_t /*token*/) { return Void(); }
+Return<void> SapCallback::errorResponse(int32_t /*token*/) {
+    return Void();
+}
 
-Return<void> SapCallback::transferProtocolResponse(int32_t token,
-                                                   SapResultCode resultCode) {
-  sapResponseToken = token;
-  sapResultCode = resultCode;
-  parent.notify();
-  return Void();
+Return<void> SapCallback::transferProtocolResponse(int32_t token, SapResultCode resultCode) {
+    sapResponseToken = token;
+    sapResultCode = resultCode;
+    parent.notify();
+    return Void();
 }
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_api.cpp b/radio/1.0/vts/functional/sap_hidl_hal_api.cpp
index 3ac891d..bb61487 100644
--- a/radio/1.0/vts/functional/sap_hidl_hal_api.cpp
+++ b/radio/1.0/vts/functional/sap_hidl_hal_api.cpp
@@ -20,117 +20,117 @@
  * Test ISap.connectReq() for the response returned.
  */
 TEST_F(SapHidlTest, connectReq) {
-  int32_t token = 0;
-  int32_t maxMsgSize = 100;
+    int32_t token = GetRandomSerialNumber();
+    int32_t maxMsgSize = 100;
 
-  sap->connectReq(++token, maxMsgSize);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->connectReq(token, maxMsgSize);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 }
 
 /*
  * Test IRadio.disconnectReq() for the response returned
  */
 TEST_F(SapHidlTest, disconnectReq) {
-  int32_t token = 0;
+    int32_t token = GetRandomSerialNumber();
 
-  sap->disconnectReq(++token);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->disconnectReq(token);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 }
 
 /*
  * Test IRadio.apduReq() for the response returned.
  */
 TEST_F(SapHidlTest, apduReq) {
-  int32_t token = 0;
-  SapApduType sapApduType = SapApduType::APDU;
-  android::hardware::hidl_vec<uint8_t> command = {};
+    int32_t token = GetRandomSerialNumber();
+    SapApduType sapApduType = SapApduType::APDU;
+    android::hardware::hidl_vec<uint8_t> command = {};
 
-  sap->apduReq(++token, sapApduType, command);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->apduReq(token, sapApduType, command);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
-              SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
-              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
-              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+    ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
+                SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+                SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+                SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
 }
 
 /*
  * Test IRadio.transferAtrReq() for the response returned.
  */
 TEST_F(SapHidlTest, transferAtrReq) {
-  int32_t token = 0;
+    int32_t token = GetRandomSerialNumber();
 
-  sap->transferAtrReq(++token);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->transferAtrReq(token);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
-              SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode ||
-              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
-              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+    ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
+                SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode ||
+                SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+                SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
 }
 
 /*
  * Test IRadio.powerReq() for the response returned.
  */
 TEST_F(SapHidlTest, powerReq) {
-  int32_t token = 0;
-  bool state = true;
+    int32_t token = GetRandomSerialNumber();
+    bool state = true;
 
-  sap->powerReq(++token, state);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->powerReq(token, state);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
-              SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
-              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
-              SapResultCode::CARD_REMOVED == sapCb->sapResultCode ||
-              SapResultCode::CARD_ALREADY_POWERED_ON == sapCb->sapResultCode);
+    ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
+                SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+                SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+                SapResultCode::CARD_REMOVED == sapCb->sapResultCode ||
+                SapResultCode::CARD_ALREADY_POWERED_ON == sapCb->sapResultCode);
 }
 
 /*
  * Test IRadio.resetSimReq() for the response returned.
  */
 TEST_F(SapHidlTest, resetSimReq) {
-  int32_t token = 0;
+    int32_t token = GetRandomSerialNumber();
 
-  sap->resetSimReq(++token);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->resetSimReq(token);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
-              SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
-              SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
-              SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
+    ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
+                SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
+                SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
+                SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
 }
 
 /*
  * Test IRadio.transferCardReaderStatusReq() for the response returned.
  */
 TEST_F(SapHidlTest, transferCardReaderStatusReq) {
-  int32_t token = 0;
+    int32_t token = GetRandomSerialNumber();
 
-  sap->transferCardReaderStatusReq(++token);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->transferCardReaderStatusReq(token);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
-              SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode);
+    ASSERT_TRUE(SapResultCode::GENERIC_FAILURE == sapCb->sapResultCode ||
+                SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode);
 }
 
 /*
  * Test IRadio.setTransferProtocolReq() for the response returned.
  */
 TEST_F(SapHidlTest, setTransferProtocolReq) {
-  int32_t token = 0;
-  SapTransferProtocol sapTransferProtocol = SapTransferProtocol::T0;
+    int32_t token = GetRandomSerialNumber();
+    SapTransferProtocol sapTransferProtocol = SapTransferProtocol::T0;
 
-  sap->setTransferProtocolReq(++token, sapTransferProtocol);
-  EXPECT_EQ(std::cv_status::no_timeout, wait());
-  EXPECT_EQ(sapCb->sapResponseToken, token);
+    sap->setTransferProtocolReq(token, sapTransferProtocol);
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(sapCb->sapResponseToken, token);
 
-  EXPECT_EQ(SapResultCode::NOT_SUPPORTED, sapCb->sapResultCode);
+    EXPECT_EQ(SapResultCode::NOT_SUPPORTED, sapCb->sapResultCode);
 }
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_test.cpp b/radio/1.0/vts/functional/sap_hidl_hal_test.cpp
index 02accef..7720505 100644
--- a/radio/1.0/vts/functional/sap_hidl_hal_test.cpp
+++ b/radio/1.0/vts/functional/sap_hidl_hal_test.cpp
@@ -17,37 +17,36 @@
 #include <sap_hidl_hal_utils.h>
 
 void SapHidlTest::SetUp() {
-  sap = ::testing::VtsHalHidlTargetTestBase::getService<ISap>(
-      hidl_string(SAP_SERVICE_NAME));
-  ASSERT_NE(sap, nullptr);
+    sap = ::testing::VtsHalHidlTargetTestBase::getService<ISap>(hidl_string(SAP_SERVICE_NAME));
+    ASSERT_NE(sap, nullptr);
 
-  sapCb = new SapCallback(*this);
-  ASSERT_NE(sapCb, nullptr);
+    sapCb = new SapCallback(*this);
+    ASSERT_NE(sapCb, nullptr);
 
-  count = 0;
+    count = 0;
 
-  sap->setCallback(sapCb);
+    sap->setCallback(sapCb);
 }
 
 void SapHidlTest::TearDown() {}
 
 void SapHidlTest::notify() {
-  std::unique_lock<std::mutex> lock(mtx);
-  count++;
-  cv.notify_one();
-}
-
-std::cv_status SapHidlTest::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;
+    std::unique_lock<std::mutex> lock(mtx);
+    count++;
+    cv.notify_one();
     }
-  }
-  count--;
-  return status;
-}
+
+    std::cv_status SapHidlTest::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;
+    }
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/sap_hidl_hal_utils.h b/radio/1.0/vts/functional/sap_hidl_hal_utils.h
index 38fb003..fe93a4d 100644
--- a/radio/1.0/vts/functional/sap_hidl_hal_utils.h
+++ b/radio/1.0/vts/functional/sap_hidl_hal_utils.h
@@ -25,6 +25,8 @@
 #include <android/hardware/radio/1.0/ISapCallback.h>
 #include <android/hardware/radio/1.0/types.h>
 
+#include <vts_test_util.h>
+
 using namespace ::android::hardware::radio::V1_0;
 
 using ::android::hardware::hidl_string;
@@ -40,77 +42,71 @@
 
 /* Callback class for sap response */
 class SapCallback : public ISapCallback {
- private:
-  SapHidlTest& parent;
+   private:
+    SapHidlTest& parent;
 
- public:
-  SapResultCode sapResultCode;
-  int32_t sapResponseToken;
+   public:
+    SapResultCode sapResultCode;
+    int32_t sapResponseToken;
 
-  SapCallback(SapHidlTest& parent);
+    SapCallback(SapHidlTest& parent);
 
-  virtual ~SapCallback() = default;
+    virtual ~SapCallback() = default;
 
-  Return<void> connectResponse(int32_t token, SapConnectRsp sapConnectRsp,
-                               int32_t maxMsgSize);
+    Return<void> connectResponse(int32_t token, SapConnectRsp sapConnectRsp, int32_t maxMsgSize);
 
-  Return<void> disconnectResponse(int32_t token);
+    Return<void> disconnectResponse(int32_t token);
 
-  Return<void> disconnectIndication(int32_t token,
-                                    SapDisconnectType disconnectType);
+    Return<void> disconnectIndication(int32_t token, SapDisconnectType disconnectType);
 
-  Return<void> apduResponse(
-      int32_t token, SapResultCode resultCode,
-      const ::android::hardware::hidl_vec<uint8_t>& apduRsp);
+    Return<void> apduResponse(int32_t token, SapResultCode resultCode,
+                              const ::android::hardware::hidl_vec<uint8_t>& apduRsp);
 
-  Return<void> transferAtrResponse(
-      int32_t token, SapResultCode resultCode,
-      const ::android::hardware::hidl_vec<uint8_t>& atr);
+    Return<void> transferAtrResponse(int32_t token, SapResultCode resultCode,
+                                     const ::android::hardware::hidl_vec<uint8_t>& atr);
 
-  Return<void> powerResponse(int32_t token, SapResultCode resultCode);
+    Return<void> powerResponse(int32_t token, SapResultCode resultCode);
 
-  Return<void> resetSimResponse(int32_t token, SapResultCode resultCode);
+    Return<void> resetSimResponse(int32_t token, SapResultCode resultCode);
 
-  Return<void> statusIndication(int32_t token, SapStatus status);
+    Return<void> statusIndication(int32_t token, SapStatus status);
 
-  Return<void> transferCardReaderStatusResponse(int32_t token,
-                                                SapResultCode resultCode,
-                                                int32_t cardReaderStatus);
+    Return<void> transferCardReaderStatusResponse(int32_t token, SapResultCode resultCode,
+                                                  int32_t cardReaderStatus);
 
-  Return<void> errorResponse(int32_t token);
+    Return<void> errorResponse(int32_t token);
 
-  Return<void> transferProtocolResponse(int32_t token,
-                                        SapResultCode resultCode);
+    Return<void> transferProtocolResponse(int32_t token, SapResultCode resultCode);
 };
 
 // The main test class for Sap HIDL.
 class SapHidlTest : public ::testing::VtsHalHidlTargetTestBase {
- private:
-  std::mutex mtx;
-  std::condition_variable cv;
-  int count;
+   private:
+    std::mutex mtx;
+    std::condition_variable cv;
+    int count;
 
- public:
-  virtual void SetUp() override;
+   public:
+    virtual void SetUp() override;
 
-  virtual void TearDown() override;
+    virtual void TearDown() override;
 
-  /* Used as a mechanism to inform the test about data/event callback */
-  void notify();
+    /* Used as a mechanism to inform the test about data/event callback */
+    void notify();
 
-  /* Test code calls this function to wait for response */
-  std::cv_status wait();
+    /* Test code calls this function to wait for response */
+    std::cv_status wait();
 
-  /* Sap service */
-  sp<ISap> sap;
+    /* Sap service */
+    sp<ISap> sap;
 
-  /* Sap Callback object */
-  sp<SapCallback> sapCb;
+    /* Sap Callback object */
+    sp<SapCallback> sapCb;
 };
 
 // A class for test environment setup
 class SapHidlEnvironment : public ::testing::Environment {
- public:
-  virtual void SetUp() {}
-  virtual void TearDown() {}
+   public:
+    virtual void SetUp() {}
+    virtual void TearDown() {}
 };
diff --git a/tests/versioning/2.4/IFoo.hal b/radio/1.0/vts/functional/vts_test_util.cpp
similarity index 81%
rename from tests/versioning/2.4/IFoo.hal
rename to radio/1.0/vts/functional/vts_test_util.cpp
index 358b56f..c6d1f9f 100644
--- a/tests/versioning/2.4/IFoo.hal
+++ b/radio/1.0/vts/functional/vts_test_util.cpp
@@ -13,12 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <vts_test_util.h>
+#include <iostream>
+using namespace std;
 
-package android.hardware.tests.versioning@2.4;
-
-import @2.3::IFoo;
-
-// Must extend @2.3::IFoo.
-interface IFoo extends @2.3::IFoo {
-
-};
+int GetRandomSerialNumber() {
+    return rand();
+}
\ No newline at end of file
diff --git a/tests/versioning/1.0/IFoo.hal b/radio/1.0/vts/functional/vts_test_util.h
similarity index 81%
rename from tests/versioning/1.0/IFoo.hal
rename to radio/1.0/vts/functional/vts_test_util.h
index 0571eff..939013f 100644
--- a/tests/versioning/1.0/IFoo.hal
+++ b/radio/1.0/vts/functional/vts_test_util.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 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.
@@ -14,7 +14,4 @@
  * limitations under the License.
  */
 
-package android.hardware.tests.versioning@1.0;
-
-interface IFoo {
-};
+int GetRandomSerialNumber();
\ No newline at end of file
diff --git a/renderscript/1.0/default/Android.bp b/renderscript/1.0/default/Android.bp
index c4bd1b3..b996969 100644
--- a/renderscript/1.0/default/Android.bp
+++ b/renderscript/1.0/default/Android.bp
@@ -18,4 +18,11 @@
         "libutils",
         "android.hardware.renderscript@1.0",
     ],
+
+    product_variables: {
+        override_rs_driver: {
+            cflags: ["-DOVERRIDE_RS_DRIVER=%s"],
+        },
+    },
+
 }
diff --git a/renderscript/1.0/default/Context.cpp b/renderscript/1.0/default/Context.cpp
index 389b6e7..fbfc652 100644
--- a/renderscript/1.0/default/Context.cpp
+++ b/renderscript/1.0/default/Context.cpp
@@ -16,7 +16,19 @@
     uint32_t _sdkVersion = sdkVersion;
     RsContextType _ct = static_cast<RsContextType>(ct);
     int32_t _flags = flags;
-    mContext = Device::getHal().ContextCreate(_dev, _version, _sdkVersion, _ct, _flags);
+    const char* driverName = nullptr;
+
+#ifdef OVERRIDE_RS_DRIVER
+#define XSTR(S) #S
+#define STR(S) XSTR(S)
+#define OVERRIDE_RS_DRIVER_STRING STR(OVERRIDE_RS_DRIVER)
+    static std::string driverString(OVERRIDE_RS_DRIVER_STRING);
+    driverName = driverString.c_str();
+#undef XSTR
+#undef STR
+#endif  // OVERRIDE_RS_DRIVER
+    mContext = Device::getHal().ContextCreateVendor(_dev, _version, _sdkVersion,
+                                                    _ct, _flags, driverName);
 }
 
 
diff --git a/renderscript/1.0/default/Device.cpp b/renderscript/1.0/default/Device.cpp
index 86cf8eb..3aae060 100644
--- a/renderscript/1.0/default/Device.cpp
+++ b/renderscript/1.0/default/Device.cpp
@@ -42,91 +42,150 @@
     void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
 
     dispatchTable dispatchHal = {
-        .SetNativeLibDir = (SetNativeLibDirFnPtr)nullptr,
+        .SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr,
 
-        .Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"),
-        .Allocation1DElementData = (Allocation1DElementDataFnPtr)nullptr,
-        .Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"),
-        .Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"),
-        .Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"),
-        .Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"),
-        .Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"),
-        .AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(handle, "rsAllocationAdapterCreate"),
-        .AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(handle, "rsAllocationAdapterOffset"),
-        .AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange"),
-        .AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange"),
-        .AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap"),
-        .AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap"),
-        .AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"),
-        .AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped"),
-        .AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap"),
-        .AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData"),
-        .AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead"),
-        .AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps"),
-        .AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"),
-        .AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"),
-        .AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"),
-        .AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive"),
-        .AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend"),
-        .AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"),
-        .AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"),
-        .AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"),
-        .AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(handle, "rsAllocationSetupBufferQueue"),
-        .AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(handle, "rsAllocationShareBufferQueue"),
-        .AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"),
+        .Allocation1DData =
+            (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"),
+        .Allocation1DElementData = (Allocation1DElementDataFnPtr) nullptr,
+        .Allocation1DRead =
+            (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"),
+        .Allocation2DData =
+            (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"),
+        .Allocation2DRead =
+            (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"),
+        .Allocation3DData =
+            (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"),
+        .Allocation3DRead =
+            (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"),
+        .AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(
+            handle, "rsAllocationAdapterCreate"),
+        .AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(
+            handle, "rsAllocationAdapterOffset"),
+        .AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(
+            handle, "rsAllocationCopy2DRange"),
+        .AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(
+            handle, "rsAllocationCopy3DRange"),
+        .AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(
+            handle, "rsAllocationCopyToBitmap"),
+        .AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(
+            handle, "rsAllocationCreateFromBitmap"),
+        .AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(
+            handle, "rsAllocationCreateStrided"),
+        .AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(
+            handle, "rsAllocationCreateTyped"),
+        .AllocationCubeCreateFromBitmap =
+            (AllocationCubeCreateFromBitmapFnPtr)dlsym(
+                handle, "rsAllocationCubeCreateFromBitmap"),
+        .AllocationElementData = (AllocationElementDataFnPtr)dlsym(
+            handle, "rsAllocationElementData"),
+        .AllocationElementRead = (AllocationElementReadFnPtr)dlsym(
+            handle, "rsAllocationElementRead"),
+        .AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(
+            handle, "rsAllocationGenerateMipmaps"),
+        .AllocationGetPointer =
+            (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"),
+        .AllocationGetSurface =
+            (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"),
+        .AllocationGetType =
+            (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"),
+        .AllocationIoReceive =
+            (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive"),
+        .AllocationIoSend =
+            (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend"),
+        .AllocationRead =
+            (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"),
+        .AllocationResize1D =
+            (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"),
+        .AllocationSetSurface =
+            (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"),
+        .AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(
+            handle, "rsAllocationSetupBufferQueue"),
+        .AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(
+            handle, "rsAllocationShareBufferQueue"),
+        .AllocationSyncAll =
+            (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"),
         .AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName"),
         .ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate"),
         .ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg"),
-        .ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"),
-        .ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate"),
-        .ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient"),
-        .ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"),
+        .ClosureSetGlobal =
+            (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"),
+        .ContextCreateVendor =
+            (ContextCreateVendorFnPtr)dlsym(handle, "rsContextCreateVendor"),
+        .ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(
+            handle, "rsContextDeinitToClient"),
+        .ContextDestroy =
+            (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"),
         .ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump"),
         .ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish"),
-        .ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage"),
-        .ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient"),
-        .ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage"),
-        .ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"),
-        .ContextSetCacheDir = (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir"),
-        .ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"),
-        .DeviceCreate = (DeviceCreateFnPtr)nullptr,
-        .DeviceDestroy = (DeviceDestroyFnPtr)nullptr,
-        .DeviceSetConfig = (DeviceSetConfigFnPtr)nullptr,
-        .ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"),
+        .ContextGetMessage =
+            (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage"),
+        .ContextInitToClient =
+            (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient"),
+        .ContextPeekMessage =
+            (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage"),
+        .ContextSendMessage =
+            (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"),
+        .ContextSetCacheDir =
+            (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir"),
+        .ContextSetPriority =
+            (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"),
+        .DeviceCreate = (DeviceCreateFnPtr) nullptr,
+        .DeviceDestroy = (DeviceDestroyFnPtr) nullptr,
+        .DeviceSetConfig = (DeviceSetConfigFnPtr) nullptr,
+        .ElementCreate2 =
+            (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"),
         .ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate"),
-        .ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"),
-        .ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements"),
+        .ElementGetNativeData =
+            (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"),
+        .ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(
+            handle, "rsaElementGetSubElements"),
         .GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName"),
-        .InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"),
+        .InvokeClosureCreate =
+            (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"),
         .ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy"),
         .SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate"),
-        .ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"),
+        .ScriptBindAllocation =
+            (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"),
         .ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate"),
-        .ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"),
-        .ScriptForEach = (ScriptForEachFnPtr)nullptr,
-        .ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"),
+        .ScriptFieldIDCreate =
+            (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"),
+        .ScriptForEach = (ScriptForEachFnPtr) nullptr,
+        .ScriptForEachMulti =
+            (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"),
         .ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV"),
-        .ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"),
-        .ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate"),
-        .ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"),
-        .ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"),
-        .ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"),
-        .ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate"),
+        .ScriptGroup2Create =
+            (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"),
+        .ScriptGroupCreate =
+            (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate"),
+        .ScriptGroupExecute =
+            (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"),
+        .ScriptGroupSetInput =
+            (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"),
+        .ScriptGroupSetOutput =
+            (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"),
+        .ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(
+            handle, "rsScriptIntrinsicCreate"),
         .ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke"),
-        .ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"),
+        .ScriptInvokeIDCreate =
+            (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"),
         .ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV"),
-        .ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate"),
+        .ScriptKernelIDCreate =
+            (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate"),
         .ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce"),
-        .ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone"),
+        .ScriptSetTimeZone =
+            (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone"),
         .ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD"),
         .ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF"),
         .ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI"),
         .ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ"),
-        .ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj"),
-        .ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE"),
+        .ScriptSetVarObj =
+            (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj"),
+        .ScriptSetVarVE =
+            (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE"),
         .ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV"),
         .TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate"),
-        .TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData"),
+        .TypeGetNativeData =
+            (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData"),
     };
 
     return dispatchHal;
diff --git a/tests/Android.bp b/tests/Android.bp
index 6f99a36..ddf300b 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -15,6 +15,7 @@
     "inheritance/1.0/default",
     "libhwbinder/1.0",
     "libhwbinder/1.0/default",
+    "libhwbinder/aidl",
     "memory/1.0",
     "memory/1.0/default",
     "msgq/1.0",
@@ -22,8 +23,4 @@
     "pointer/1.0",
     "pointer/1.0/default",
     "pointer/1.0/default/lib",
-    "versioning/1.0",
-    "versioning/2.2",
-    "versioning/2.3",
-    "versioning/2.4",
 ]
diff --git a/tests/libhwbinder/aidl/Android.bp b/tests/libhwbinder/aidl/Android.bp
new file mode 100644
index 0000000..a662085
--- /dev/null
+++ b/tests/libhwbinder/aidl/Android.bp
@@ -0,0 +1,15 @@
+cc_library_shared {
+    name: "android.hardware.tests.libbinder",
+
+    srcs: ["android/tests/binder/IBenchmark.aidl"],
+
+    aidl: {
+        export_aidl_headers: true,
+    },
+
+    shared_libs: [
+        "libbinder",
+        "libutils",
+    ],
+
+}
diff --git a/tests/libhwbinder/aidl/Android.mk b/tests/libhwbinder/aidl/Android.mk
deleted file mode 100644
index 1c175d8..0000000
--- a/tests/libhwbinder/aidl/Android.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.libbinder
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-
-LOCAL_SRC_FILES := android/tests/binder/IBenchmark.aidl
-
-LOCAL_SHARED_LIBRARIES := \
-  libbinder \
-  libutils \
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/versioning/1.0/Android.bp b/tests/versioning/1.0/Android.bp
deleted file mode 100644
index 647e043..0000000
--- a/tests/versioning/1.0/Android.bp
+++ /dev/null
@@ -1,59 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-filegroup {
-    name: "android.hardware.tests.versioning@1.0_hal",
-    srcs: [
-        "IFoo.hal",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@1.0_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@1.0",
-    srcs: [
-        ":android.hardware.tests.versioning@1.0_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/1.0/FooAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@1.0_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@1.0",
-    srcs: [
-        ":android.hardware.tests.versioning@1.0_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/1.0/IFoo.h",
-        "android/hardware/tests/versioning/1.0/IHwFoo.h",
-        "android/hardware/tests/versioning/1.0/BnHwFoo.h",
-        "android/hardware/tests/versioning/1.0/BpHwFoo.h",
-        "android/hardware/tests/versioning/1.0/BsFoo.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tests.versioning@1.0",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hardware.tests.versioning@1.0_genc++"],
-    generated_headers: ["android.hardware.tests.versioning@1.0_genc++_headers"],
-    export_generated_headers: ["android.hardware.tests.versioning@1.0_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-    ],
-}
diff --git a/tests/versioning/1.0/Android.mk b/tests/versioning/1.0/Android.mk
deleted file mode 100644
index 81ffd08..0000000
--- a/tests/versioning/1.0/Android.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-# This file is autogenerated by hidl-gen. Do not edit manually.
-
-LOCAL_PATH := $(call my-dir)
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V1.0-java
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_JAVA_LIBRARIES := \
-    android.hidl.base-V1.0-java \
-
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V1_0/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@1.0::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_JAVA_LIBRARY)
-
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V1.0-java-static
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android.hidl.base-V1.0-java-static \
-
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V1_0/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@1.0::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/2.2/Android.bp b/tests/versioning/2.2/Android.bp
deleted file mode 100644
index 3a4a003..0000000
--- a/tests/versioning/2.2/Android.bp
+++ /dev/null
@@ -1,66 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-filegroup {
-    name: "android.hardware.tests.versioning@2.2_hal",
-    srcs: [
-        "IBar.hal",
-        "IFoo.hal",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.2_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.2",
-    srcs: [
-        ":android.hardware.tests.versioning@2.2_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.2/BarAll.cpp",
-        "android/hardware/tests/versioning/2.2/FooAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.2_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.2",
-    srcs: [
-        ":android.hardware.tests.versioning@2.2_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.2/IBar.h",
-        "android/hardware/tests/versioning/2.2/IHwBar.h",
-        "android/hardware/tests/versioning/2.2/BnHwBar.h",
-        "android/hardware/tests/versioning/2.2/BpHwBar.h",
-        "android/hardware/tests/versioning/2.2/BsBar.h",
-        "android/hardware/tests/versioning/2.2/IFoo.h",
-        "android/hardware/tests/versioning/2.2/IHwFoo.h",
-        "android/hardware/tests/versioning/2.2/BnHwFoo.h",
-        "android/hardware/tests/versioning/2.2/BpHwFoo.h",
-        "android/hardware/tests/versioning/2.2/BsFoo.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tests.versioning@2.2",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hardware.tests.versioning@2.2_genc++"],
-    generated_headers: ["android.hardware.tests.versioning@2.2_genc++_headers"],
-    export_generated_headers: ["android.hardware.tests.versioning@2.2_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-    ],
-}
diff --git a/tests/versioning/2.2/Android.mk b/tests/versioning/2.2/Android.mk
deleted file mode 100644
index 4fccce6..0000000
--- a/tests/versioning/2.2/Android.mk
+++ /dev/null
@@ -1,114 +0,0 @@
-# This file is autogenerated by hidl-gen. Do not edit manually.
-
-LOCAL_PATH := $(call my-dir)
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.2-java
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_JAVA_LIBRARIES := \
-    android.hidl.base-V1.0-java \
-
-
-#
-# Build IBar.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IBar.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.2::IBar
-
-$(GEN): $(LOCAL_PATH)/IBar.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.2::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_JAVA_LIBRARY)
-
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.2-java-static
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android.hidl.base-V1.0-java-static \
-
-
-#
-# Build IBar.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IBar.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.2::IBar
-
-$(GEN): $(LOCAL_PATH)/IBar.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_2/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.2::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/2.2/IBar.hal b/tests/versioning/2.2/IBar.hal
deleted file mode 100644
index e28ce19..0000000
--- a/tests/versioning/2.2/IBar.hal
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2016 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.tests.versioning@2.2;
-
-interface IBar {
-
-};
diff --git a/tests/versioning/2.2/IFoo.hal b/tests/versioning/2.2/IFoo.hal
deleted file mode 100644
index d6b8782..0000000
--- a/tests/versioning/2.2/IFoo.hal
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2016 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.tests.versioning@2.2;
-
-interface IFoo {
-
-};
diff --git a/tests/versioning/2.3/Android.bp b/tests/versioning/2.3/Android.bp
deleted file mode 100644
index 65e1193..0000000
--- a/tests/versioning/2.3/Android.bp
+++ /dev/null
@@ -1,77 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-filegroup {
-    name: "android.hardware.tests.versioning@2.3_hal",
-    srcs: [
-        "IBar.hal",
-        "IBaz.hal",
-        "IFoo.hal",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.3_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.3",
-    srcs: [
-        ":android.hardware.tests.versioning@2.3_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.3/BarAll.cpp",
-        "android/hardware/tests/versioning/2.3/BazAll.cpp",
-        "android/hardware/tests/versioning/2.3/FooAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.3_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.3",
-    srcs: [
-        ":android.hardware.tests.versioning@2.3_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.3/IBar.h",
-        "android/hardware/tests/versioning/2.3/IHwBar.h",
-        "android/hardware/tests/versioning/2.3/BnHwBar.h",
-        "android/hardware/tests/versioning/2.3/BpHwBar.h",
-        "android/hardware/tests/versioning/2.3/BsBar.h",
-        "android/hardware/tests/versioning/2.3/IBaz.h",
-        "android/hardware/tests/versioning/2.3/IHwBaz.h",
-        "android/hardware/tests/versioning/2.3/BnHwBaz.h",
-        "android/hardware/tests/versioning/2.3/BpHwBaz.h",
-        "android/hardware/tests/versioning/2.3/BsBaz.h",
-        "android/hardware/tests/versioning/2.3/IFoo.h",
-        "android/hardware/tests/versioning/2.3/IHwFoo.h",
-        "android/hardware/tests/versioning/2.3/BnHwFoo.h",
-        "android/hardware/tests/versioning/2.3/BpHwFoo.h",
-        "android/hardware/tests/versioning/2.3/BsFoo.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tests.versioning@2.3",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hardware.tests.versioning@2.3_genc++"],
-    generated_headers: ["android.hardware.tests.versioning@2.3_genc++_headers"],
-    export_generated_headers: ["android.hardware.tests.versioning@2.3_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "android.hardware.tests.versioning@1.0",
-        "android.hardware.tests.versioning@2.2",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.tests.versioning@1.0",
-        "android.hardware.tests.versioning@2.2",
-    ],
-}
diff --git a/tests/versioning/2.3/Android.mk b/tests/versioning/2.3/Android.mk
deleted file mode 100644
index 36326d6..0000000
--- a/tests/versioning/2.3/Android.mk
+++ /dev/null
@@ -1,156 +0,0 @@
-# This file is autogenerated by hidl-gen. Do not edit manually.
-
-LOCAL_PATH := $(call my-dir)
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.3-java
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_JAVA_LIBRARIES := \
-    android.hardware.tests.versioning-V1.0-java \
-    android.hardware.tests.versioning-V2.2-java \
-    android.hidl.base-V1.0-java \
-
-
-#
-# Build IBar.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBar.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IBar
-
-$(GEN): $(LOCAL_PATH)/IBar.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IBaz.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBaz.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBaz.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IBaz
-
-$(GEN): $(LOCAL_PATH)/IBaz.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_JAVA_LIBRARY)
-
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.3-java-static
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android.hardware.tests.versioning-V1.0-java-static \
-    android.hardware.tests.versioning-V2.2-java-static \
-    android.hidl.base-V1.0-java-static \
-
-
-#
-# Build IBar.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBar.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBar.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IBar
-
-$(GEN): $(LOCAL_PATH)/IBar.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IBaz.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IBaz.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBaz.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IBaz
-
-$(GEN): $(LOCAL_PATH)/IBaz.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_3/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.3::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/versioning/2.3/IBar.hal b/tests/versioning/2.3/IBar.hal
deleted file mode 100644
index fe38e76..0000000
--- a/tests/versioning/2.3/IBar.hal
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2016 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.tests.versioning@2.3;
-
-import @2.2::IBar;
-
-// Must extend @2.2::IBar.
-interface IBar extends @2.2::IBar {
-
-};
diff --git a/tests/versioning/2.3/IBaz.hal b/tests/versioning/2.3/IBaz.hal
deleted file mode 100644
index e28792c..0000000
--- a/tests/versioning/2.3/IBaz.hal
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2016 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.tests.versioning@2.3;
-
-import @1.0::IFoo;
-
-interface IBaz extends @1.0::IFoo {
-
-};
diff --git a/tests/versioning/2.3/IFoo.hal b/tests/versioning/2.3/IFoo.hal
deleted file mode 100644
index 2c76500..0000000
--- a/tests/versioning/2.3/IFoo.hal
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2016 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.tests.versioning@2.3;
-
-import @2.2::IFoo;
-
-// Must extend @2.2::IFoo.
-interface IFoo extends @2.2::IFoo {
-
-};
diff --git a/tests/versioning/2.4/Android.bp b/tests/versioning/2.4/Android.bp
deleted file mode 100644
index d236a18..0000000
--- a/tests/versioning/2.4/Android.bp
+++ /dev/null
@@ -1,63 +0,0 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-filegroup {
-    name: "android.hardware.tests.versioning@2.4_hal",
-    srcs: [
-        "IFoo.hal",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.4_genc++",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.4",
-    srcs: [
-        ":android.hardware.tests.versioning@2.4_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.4/FooAll.cpp",
-    ],
-}
-
-genrule {
-    name: "android.hardware.tests.versioning@2.4_genc++_headers",
-    tools: ["hidl-gen"],
-    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.versioning@2.4",
-    srcs: [
-        ":android.hardware.tests.versioning@2.4_hal",
-    ],
-    out: [
-        "android/hardware/tests/versioning/2.4/IFoo.h",
-        "android/hardware/tests/versioning/2.4/IHwFoo.h",
-        "android/hardware/tests/versioning/2.4/BnHwFoo.h",
-        "android/hardware/tests/versioning/2.4/BpHwFoo.h",
-        "android/hardware/tests/versioning/2.4/BsFoo.h",
-    ],
-}
-
-cc_library_shared {
-    name: "android.hardware.tests.versioning@2.4",
-    defaults: ["hidl-module-defaults"],
-    generated_sources: ["android.hardware.tests.versioning@2.4_genc++"],
-    generated_headers: ["android.hardware.tests.versioning@2.4_genc++_headers"],
-    export_generated_headers: ["android.hardware.tests.versioning@2.4_genc++_headers"],
-    vendor_available: true,
-    shared_libs: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "liblog",
-        "libutils",
-        "libcutils",
-        "android.hardware.tests.versioning@2.2",
-        "android.hardware.tests.versioning@2.3",
-    ],
-    export_shared_lib_headers: [
-        "libhidlbase",
-        "libhidltransport",
-        "libhwbinder",
-        "libutils",
-        "android.hardware.tests.versioning@2.2",
-        "android.hardware.tests.versioning@2.3",
-    ],
-}
diff --git a/tests/versioning/2.4/Android.mk b/tests/versioning/2.4/Android.mk
deleted file mode 100644
index c716172..0000000
--- a/tests/versioning/2.4/Android.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-# This file is autogenerated by hidl-gen. Do not edit manually.
-
-LOCAL_PATH := $(call my-dir)
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.4-java
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_JAVA_LIBRARIES := \
-    android.hardware.tests.versioning-V2.2-java \
-    android.hardware.tests.versioning-V2.3-java \
-    android.hidl.base-V1.0-java \
-
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_4/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.4::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_JAVA_LIBRARY)
-
-
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.tests.versioning-V2.4-java-static
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-intermediates := $(call local-generated-sources-dir, COMMON)
-
-HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android.hardware.tests.versioning-V2.2-java-static \
-    android.hardware.tests.versioning-V2.3-java-static \
-    android.hidl.base-V1.0-java-static \
-
-
-#
-# Build IFoo.hal
-#
-GEN := $(intermediates)/android/hardware/tests/versioning/V2_4/IFoo.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IFoo.hal
-$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
-$(GEN): PRIVATE_CUSTOM_TOOL = \
-        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-        -Ljava \
-        -randroid.hardware:hardware/interfaces \
-        -randroid.hidl:system/libhidl/transport \
-        android.hardware.tests.versioning@2.4::IFoo
-
-$(GEN): $(LOCAL_PATH)/IFoo.hal
-	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/usb/1.1/Android.bp b/usb/1.1/Android.bp
index d5cdf04..f067606 100644
--- a/usb/1.1/Android.bp
+++ b/usb/1.1/Android.bp
@@ -48,6 +48,7 @@
 
 cc_library_shared {
     name: "android.hardware.usb@1.1",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.usb@1.1_genc++"],
     generated_headers: ["android.hardware.usb@1.1_genc++_headers"],
     export_generated_headers: ["android.hardware.usb@1.1_genc++_headers"],
diff --git a/usb/1.1/vts/functional/Android.bp b/usb/1.1/vts/functional/Android.bp
new file mode 100644
index 0000000..820f794
--- /dev/null
+++ b/usb/1.1/vts/functional/Android.bp
@@ -0,0 +1,38 @@
+//
+// Copyright (C) 2017 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.
+//
+
+cc_test {
+    name: "VtsHalUsbV1_1TargetTest",
+    defaults: ["hidl_defaults"],
+    srcs: ["VtsHalUsbV1_1TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+        "libhidlbase",
+        "libhidltransport",
+        "libnativehelper",
+        "libutils",
+        "android.hardware.usb@1.0",
+        "android.hardware.usb@1.1",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
+
diff --git a/usb/1.1/vts/functional/VtsHalUsbV1_1TargetTest.cpp b/usb/1.1/vts/functional/VtsHalUsbV1_1TargetTest.cpp
new file mode 100644
index 0000000..8a30993
--- /dev/null
+++ b/usb/1.1/vts/functional/VtsHalUsbV1_1TargetTest.cpp
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#define LOG_TAG "VtsHalUsbV1_0TargetTest"
+#include <android-base/logging.h>
+
+#include <android/hardware/usb/1.0/types.h>
+#include <android/hardware/usb/1.1/IUsb.h>
+#include <android/hardware/usb/1.1/IUsbCallback.h>
+#include <android/hardware/usb/1.1/types.h>
+
+#include <VtsHalHidlTargetCallbackBase.h>
+#include <VtsHalHidlTargetTestBase.h>
+#include <log/log.h>
+#include <stdlib.h>
+#include <chrono>
+#include <condition_variable>
+#include <mutex>
+
+using ::android::hardware::usb::V1_1::IUsbCallback;
+using ::android::hardware::usb::V1_0::IUsb;
+using ::android::hardware::usb::V1_0::PortDataRole;
+using ::android::hardware::usb::V1_0::PortMode;
+using ::android::hardware::usb::V1_1::PortMode_1_1;
+using ::android::hardware::usb::V1_0::PortPowerRole;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hardware::usb::V1_0::PortRoleType;
+using ::android::hardware::usb::V1_0::PortStatus;
+using ::android::hardware::usb::V1_1::PortStatus_1_1;
+using ::android::hardware::usb::V1_0::Status;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+constexpr char kCallbackNameNotifyPortStatusChange_1_1[] = "notifyPortStatusChange_1_1";
+
+// Worst case wait time 20secs
+#define WAIT_FOR_TIMEOUT std::chrono::milliseconds(20000)
+
+class UsbClientCallbackArgs {
+   public:
+    // The last conveyed status of the USB ports.
+    // Stores information of currentt_data_role, power_role for all the USB ports
+    PortStatus_1_1 usb_last_port_status;
+
+    // Status of the last role switch operation.
+    Status usb_last_status;
+
+    // Identifier for the usb callback object.
+    // Stores the cookie of the last invoked usb callback object.
+    int last_usb_cookie;
+};
+
+// Callback class for the USB HIDL hal.
+// Usb Hal will call this object upon role switch or port query.
+class UsbCallback : public ::testing::VtsHalHidlTargetCallbackBase<UsbClientCallbackArgs>,
+                    public IUsbCallback {
+    int cookie;
+
+   public:
+    UsbCallback(int cookie) : cookie(cookie){};
+
+    virtual ~UsbCallback() = default;
+
+    // V1_0 Callback method for the port status.
+    // This should not be called so not signalling the Test here assuming that
+    // the test thread will timeout
+    Return<void> notifyPortStatusChange(const hidl_vec<PortStatus>& /* currentPortStatus */,
+                                        Status /*retval*/) override {
+        return Void();
+    };
+
+    // This callback methode should be used.
+    Return<void> notifyPortStatusChange_1_1(const hidl_vec<PortStatus_1_1>& currentPortStatus,
+                                            Status retval) override {
+        UsbClientCallbackArgs arg;
+        if (retval == Status::SUCCESS) {
+            arg.usb_last_port_status.status.supportedModes =
+                currentPortStatus[0].status.supportedModes;
+            arg.usb_last_port_status.status.currentMode = currentPortStatus[0].status.currentMode;
+        }
+        arg.usb_last_status = retval;
+        arg.last_usb_cookie = cookie;
+
+        NotifyFromCallback(kCallbackNameNotifyPortStatusChange_1_1, arg);
+        return Void();
+    }
+
+    // Callback method for the status of role switch operation.
+    // RoleSwitch operation has not changed since V1_0 so leaving
+    // the callback blank here.
+    Return<void> notifyRoleSwitchStatus(const hidl_string& /*portName*/,
+                                        const PortRole& /*newRole*/, Status /*retval*/) override {
+        return Void();
+    };
+};
+
+// The main test class for the USB hidl HAL
+class UsbHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+   public:
+    virtual void SetUp() override {
+        ALOGI(__FUNCTION__);
+        usb = ::testing::VtsHalHidlTargetTestBase::getService<IUsb>();
+        ASSERT_NE(usb, nullptr);
+
+        usb_cb_2 = new UsbCallback(2);
+        ASSERT_NE(usb_cb_2, nullptr);
+        usb_cb_2->SetWaitTimeout(kCallbackNameNotifyPortStatusChange_1_1, WAIT_FOR_TIMEOUT);
+        Return<void> ret = usb->setCallback(usb_cb_2);
+        ASSERT_TRUE(ret.isOk());
+    }
+
+    virtual void TearDown() override { ALOGI("Teardown"); }
+
+    // USB hidl hal Proxy
+    sp<IUsb> usb;
+
+    // Callback objects for usb hidl
+    // Methods of these objects are called to notify port status updates.
+    sp<UsbCallback> usb_cb_1;
+    sp<UsbCallback> usb_cb_2;
+};
+
+/*
+ * Test to see if setCallback on V1_1 callback object succeeds.
+ * Callback oject is created and registered.
+ * Check to see if the hidl transaction succeeded.
+ */
+TEST_F(UsbHidlTest, setCallback) {
+    usb_cb_1 = new UsbCallback(1);
+    ASSERT_NE(usb_cb_1, nullptr);
+    Return<void> ret = usb->setCallback(usb_cb_1);
+    ASSERT_TRUE(ret.isOk());
+}
+
+/*
+ * Check to see if querying type-c
+ * port status succeeds.
+ * HAL service should call notifyPortStatusChange_1_1
+ * instead of notifyPortStatusChange of V1_0 interface
+ */
+TEST_F(UsbHidlTest, queryPortStatus) {
+    Return<void> ret = usb->queryPortStatus();
+    ASSERT_TRUE(ret.isOk());
+    auto res = usb_cb_2->WaitForCallback(kCallbackNameNotifyPortStatusChange_1_1);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(2, res.args->last_usb_cookie);
+    EXPECT_EQ(PortMode::NONE, res.args->usb_last_port_status.status.currentMode);
+    EXPECT_EQ(PortMode::NONE, res.args->usb_last_port_status.status.supportedModes);
+    EXPECT_EQ(Status::SUCCESS, res.args->usb_last_status);
+}
+
+int main(int argc, char** argv) {
+    ::testing::InitGoogleTest(&argc, argv);
+    int status = RUN_ALL_TESTS();
+    ALOGI("Test result = %d", status);
+    return status;
+}
diff --git a/usb/Android.bp b/usb/Android.bp
index 3aa1151..5cacbf3 100644
--- a/usb/Android.bp
+++ b/usb/Android.bp
@@ -3,4 +3,5 @@
     "1.0",
     "1.0/vts/functional",
     "1.1",
+    "1.1/vts/functional",
 ]
diff --git a/vibrator/1.1/Android.bp b/vibrator/1.1/Android.bp
new file mode 100644
index 0000000..86562a0
--- /dev/null
+++ b/vibrator/1.1/Android.bp
@@ -0,0 +1,64 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.vibrator@1.1_hal",
+    srcs: [
+        "types.hal",
+        "IVibrator.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.vibrator@1.1_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.1",
+    srcs: [
+        ":android.hardware.vibrator@1.1_hal",
+    ],
+    out: [
+        "android/hardware/vibrator/1.1/types.cpp",
+        "android/hardware/vibrator/1.1/VibratorAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.vibrator@1.1_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.1",
+    srcs: [
+        ":android.hardware.vibrator@1.1_hal",
+    ],
+    out: [
+        "android/hardware/vibrator/1.1/types.h",
+        "android/hardware/vibrator/1.1/hwtypes.h",
+        "android/hardware/vibrator/1.1/IVibrator.h",
+        "android/hardware/vibrator/1.1/IHwVibrator.h",
+        "android/hardware/vibrator/1.1/BnHwVibrator.h",
+        "android/hardware/vibrator/1.1/BpHwVibrator.h",
+        "android/hardware/vibrator/1.1/BsVibrator.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.vibrator@1.1",
+    generated_sources: ["android.hardware.vibrator@1.1_genc++"],
+    generated_headers: ["android.hardware.vibrator@1.1_genc++_headers"],
+    export_generated_headers: ["android.hardware.vibrator@1.1_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hardware.vibrator@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.vibrator@1.0",
+    ],
+}
diff --git a/vibrator/1.1/Android.mk b/vibrator/1.1/Android.mk
new file mode 100644
index 0000000..2344e91
--- /dev/null
+++ b/vibrator/1.1/Android.mk
@@ -0,0 +1,154 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.vibrator-V1.1-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+    android.hardware.vibrator-V1.0-java \
+    android.hidl.base-V1.0-java \
+
+
+#
+# Build types.hal (Effect_1_1)
+#
+GEN := $(intermediates)/android/hardware/vibrator/V1_1/Effect_1_1.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.vibrator@1.1::types.Effect_1_1
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IVibrator.hal
+#
+GEN := $(intermediates)/android/hardware/vibrator/V1_1/IVibrator.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVibrator.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.vibrator@1.1::IVibrator
+
+$(GEN): $(LOCAL_PATH)/IVibrator.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.vibrator-V1.1-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hardware.vibrator-V1.0-java-static \
+    android.hidl.base-V1.0-java-static \
+
+
+#
+# Build types.hal (Effect_1_1)
+#
+GEN := $(intermediates)/android/hardware/vibrator/V1_1/Effect_1_1.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.vibrator@1.1::types.Effect_1_1
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IVibrator.hal
+#
+GEN := $(intermediates)/android/hardware/vibrator/V1_1/IVibrator.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVibrator.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.vibrator@1.1::IVibrator
+
+$(GEN): $(LOCAL_PATH)/IVibrator.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.vibrator-V1.1-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/vibrator/V1_1/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IVibrator.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+        -Ljava-constants \
+        -randroid.hardware:hardware/interfaces \
+        -randroid.hidl:system/libhidl/transport \
+        android.hardware.vibrator@1.1
+
+$(GEN):
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/vibrator/1.1/IVibrator.hal b/vibrator/1.1/IVibrator.hal
new file mode 100644
index 0000000..9a2f465
--- /dev/null
+++ b/vibrator/1.1/IVibrator.hal
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 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.vibrator@1.1;
+
+import @1.0::EffectStrength;
+import @1.0::IVibrator;
+import @1.0::Status;
+
+interface IVibrator extends @1.0::IVibrator {
+  /**
+   * Fire off a predefined haptic event.
+   *
+   * @param event The type of haptic event to trigger.
+   * @return status Whether the effect was successfully performed or not. Must
+   *                return Status::UNSUPPORTED_OPERATION is the effect is not
+   *                supported.
+   * @return lengthMs The length of time the event is expected to take in
+   *                  milliseconds. This doesn't need to be perfectly accurate,
+   *                  but should be a reasonable approximation. Should be a
+   *                  positive, non-zero value if the returned status is
+   *                  Status::OK, and set to 0 otherwise.
+   */
+  perform_1_1(Effect_1_1 effect, EffectStrength strength)
+          generates (Status status, uint32_t lengthMs);
+};
diff --git a/tests/versioning/2.4/IFoo.hal b/vibrator/1.1/types.hal
similarity index 71%
copy from tests/versioning/2.4/IFoo.hal
copy to vibrator/1.1/types.hal
index 358b56f..f7a619a 100644
--- a/tests/versioning/2.4/IFoo.hal
+++ b/vibrator/1.1/types.hal
@@ -14,11 +14,16 @@
  * limitations under the License.
  */
 
-package android.hardware.tests.versioning@2.4;
+package android.hardware.vibrator@1.1;
 
-import @2.3::IFoo;
+import @1.0::Effect;
 
-// Must extend @2.3::IFoo.
-interface IFoo extends @2.3::IFoo {
-
+@export
+enum Effect_1_1 : @1.0::Effect {
+    /**
+     * A tick effect.
+     *
+     * This effect should produce a soft, short sensation, like the tick of a clock.
+     */
+    TICK
 };
diff --git a/vibrator/1.1/vts/functional/Android.bp b/vibrator/1.1/vts/functional/Android.bp
new file mode 100644
index 0000000..5baa8ed
--- /dev/null
+++ b/vibrator/1.1/vts/functional/Android.bp
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2017 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.
+//
+
+cc_test {
+    name: "VtsHalVibratorV1_1TargetTest",
+    defaults: ["hidl_defaults"],
+    srcs: ["VtsHalVibratorV1_1TargetTest.cpp"],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "liblog",
+        "libutils",
+        "android.hardware.vibrator@1.1",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [
+        "-O0",
+        "-g",
+    ],
+}
+
diff --git a/vibrator/1.1/vts/functional/VtsHalVibratorV1_1TargetTest.cpp b/vibrator/1.1/vts/functional/VtsHalVibratorV1_1TargetTest.cpp
new file mode 100644
index 0000000..35000f8
--- /dev/null
+++ b/vibrator/1.1/vts/functional/VtsHalVibratorV1_1TargetTest.cpp
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#define LOG_TAG "vibrator_hidl_hal_test"
+
+#include <VtsHalHidlTargetTestBase.h>
+#include <android-base/logging.h>
+#include <android/hardware/vibrator/1.1/IVibrator.h>
+#include <android/hardware/vibrator/1.1/types.h>
+#include <unistd.h>
+
+using ::android::hardware::vibrator::V1_0::Effect;
+using ::android::hardware::vibrator::V1_0::EffectStrength;
+using ::android::hardware::vibrator::V1_0::Status;
+using ::android::hardware::vibrator::V1_1::Effect_1_1;
+using ::android::hardware::vibrator::V1_1::IVibrator;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+// The main test class for VIBRATOR HIDL HAL 1.1.
+class VibratorHidlTest_1_1 : public ::testing::VtsHalHidlTargetTestBase {
+   public:
+    virtual void SetUp() override {
+        vibrator = ::testing::VtsHalHidlTargetTestBase::getService<IVibrator>();
+        ASSERT_NE(vibrator, nullptr);
+    }
+
+    virtual void TearDown() override {}
+
+    sp<IVibrator> vibrator;
+};
+
+static void validatePerformEffect(Status status, uint32_t lengthMs) {
+    ASSERT_TRUE(status == Status::OK || status == Status::UNSUPPORTED_OPERATION);
+    if (status == Status::OK) {
+        ASSERT_GT(lengthMs, static_cast<uint32_t>(0))
+            << "Effects that return OK must return a non-zero duration";
+    } else {
+        ASSERT_EQ(lengthMs, static_cast<uint32_t>(0))
+            << "Effects that return UNSUPPORTED_OPERATION must have a duration of zero";
+    }
+}
+
+TEST_F(VibratorHidlTest_1_1, PerformEffect_1_1) {
+    vibrator->perform_1_1(Effect_1_1::CLICK, EffectStrength::MEDIUM, validatePerformEffect);
+    vibrator->perform_1_1(Effect_1_1::TICK, EffectStrength::STRONG, validatePerformEffect);
+}
+
+int main(int argc, char** argv) {
+    ::testing::InitGoogleTest(&argc, argv);
+    int status = RUN_ALL_TESTS();
+    LOG(INFO) << "Test result = " << status;
+    return status;
+}
diff --git a/vibrator/Android.bp b/vibrator/Android.bp
index ed19a37..a5415df 100644
--- a/vibrator/Android.bp
+++ b/vibrator/Android.bp
@@ -3,4 +3,6 @@
     "1.0",
     "1.0/default",
     "1.0/vts/functional",
+    "1.1",
+    "1.1/vts/functional",
 ]
diff --git a/weaver/1.0/Android.bp b/weaver/1.0/Android.bp
index 8d6c1d1..b64391c 100644
--- a/weaver/1.0/Android.bp
+++ b/weaver/1.0/Android.bp
@@ -41,6 +41,7 @@
 
 cc_library_shared {
     name: "android.hardware.weaver@1.0",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.weaver@1.0_genc++"],
     generated_headers: ["android.hardware.weaver@1.0_genc++_headers"],
     export_generated_headers: ["android.hardware.weaver@1.0_genc++_headers"],
diff --git a/wifi/offload/1.0/Android.bp b/wifi/offload/1.0/Android.bp
index 63f85a6..28e8e6a 100644
--- a/wifi/offload/1.0/Android.bp
+++ b/wifi/offload/1.0/Android.bp
@@ -48,6 +48,7 @@
 
 cc_library_shared {
     name: "android.hardware.wifi.offload@1.0",
+    defaults: ["hidl-module-defaults"],
     generated_sources: ["android.hardware.wifi.offload@1.0_genc++"],
     generated_headers: ["android.hardware.wifi.offload@1.0_genc++_headers"],
     export_generated_headers: ["android.hardware.wifi.offload@1.0_genc++_headers"],