Merge "Initial version of radio hal"
diff --git a/nfc/1.0/Android.mk b/nfc/1.0/Android.mk
index 07775e9..b6840bc 100644
--- a/nfc/1.0/Android.mk
+++ b/nfc/1.0/Android.mk
@@ -13,9 +13,9 @@
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
 #
-# Build types.hal (NfcEvent)
+# Build types.hal (nfc_data_t)
 #
-GEN := $(intermediates)/android/hardware/nfc/1.0/NfcEvent.java
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_data_t.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -23,16 +23,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.nfc@1.0::types.NfcEvent
+        android.hardware.nfc@1.0::types.nfc_data_t
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NfcStatus)
+# Build types.hal (nfc_event_t)
 #
-GEN := $(intermediates)/android/hardware/nfc/1.0/NfcStatus.java
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_event_t.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -40,7 +40,24 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.nfc@1.0::types.NfcStatus
+        android.hardware.nfc@1.0::types.nfc_event_t
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (nfc_status_t)
+#
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_status_t.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 \
+        android.hardware.nfc@1.0::types.nfc_status_t
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
@@ -99,9 +116,9 @@
 HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
 
 #
-# Build types.hal (NfcEvent)
+# Build types.hal (nfc_data_t)
 #
-GEN := $(intermediates)/android/hardware/nfc/1.0/NfcEvent.java
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_data_t.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -109,16 +126,16 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.nfc@1.0::types.NfcEvent
+        android.hardware.nfc@1.0::types.nfc_data_t
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
 LOCAL_GENERATED_SOURCES += $(GEN)
 
 #
-# Build types.hal (NfcStatus)
+# Build types.hal (nfc_event_t)
 #
-GEN := $(intermediates)/android/hardware/nfc/1.0/NfcStatus.java
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_event_t.java
 $(GEN): $(HIDL)
 $(GEN): PRIVATE_HIDL := $(HIDL)
 $(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -126,7 +143,24 @@
 $(GEN): PRIVATE_CUSTOM_TOOL = \
         $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
         -Ljava -randroid.hardware:hardware/interfaces \
-        android.hardware.nfc@1.0::types.NfcStatus
+        android.hardware.nfc@1.0::types.nfc_event_t
+
+$(GEN): $(LOCAL_PATH)/types.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (nfc_status_t)
+#
+GEN := $(intermediates)/android/hardware/nfc/1.0/nfc_status_t.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 \
+        android.hardware.nfc@1.0::types.nfc_status_t
 
 $(GEN): $(LOCAL_PATH)/types.hal
 	$(transform-generated-source)
diff --git a/nfc/1.0/INfc.hal b/nfc/1.0/INfc.hal
index f003b2c..88fd39a 100644
--- a/nfc/1.0/INfc.hal
+++ b/nfc/1.0/INfc.hal
@@ -27,7 +27,7 @@
      * NCI initialization - ie accept CORE_RESET and subsequent commands through
      * the write() call.
      *
-     * If open() returns 0, the NCI stack will wait for a NfcEvent.OPEN_CPLT
+     * If open() returns 0, the NCI stack will wait for a HAL_NFC_OPEN_CPLT_EVT
      * before continuing.
      *
      * If open() returns any other value, the NCI stack will stop.
@@ -41,32 +41,32 @@
      * This method may queue writes and return immediately. The only
      * requirement is that the writes are executed in order.
      */
-    write(NfcData data) generates (int32_t retval);
+    write(nfc_data_t data) generates (int32_t retval);
 
     /*
-     * coreInitialized() is called after the CORE_INIT_RSP is received from the NFCC.
+     * core_initialized() is called after the CORE_INIT_RSP is received from the NFCC.
      * At this time, the HAL can do any chip-specific configuration.
      *
-     * If coreInitialized() returns 0, the NCI stack will wait for a NfcEvent.POST_INIT_CPLT
+     * If core_initialized() returns 0, the NCI stack will wait for a HAL_NFC_POST_INIT_CPLT_EVT
      * before continuing.
      *
-     * If coreInitialized() returns any other value, the NCI stack will continue
+     * If core_initialized() returns any other value, the NCI stack will continue
      * immediately.
      */
-    coreInitialized(NfcData data) generates (int32_t retval);
+    core_initialized(vec<uint8_t> data) generates (int32_t retval);
 
     /*
-     * prediscover is called every time before starting RF discovery.
+     * pre_discover is called every time before starting RF discovery.
      * It is a good place to do vendor-specific configuration that must be
      * performed every time RF discovery is about to be started.
      *
-     * If prediscover() returns 0, the NCI stack will wait for a NfcEvent.PREDISCOVER_CPLT
+     * If pre_discover() returns 0, the NCI stack will wait for a HAL_NFC_PRE_DISCOVER_CPLT_EVT
      * before continuing.
      *
-     * If prediscover() returns any other value, the NCI stack will start
+     * If pre_discover() returns any other value, the NCI stack will start
      * RF discovery immediately.
      */
-    prediscover() generates (int32_t retval);
+    pre_discover() generates (int32_t retval);
 
     /*
      * Close the NFC controller. Should free all resources.
@@ -75,15 +75,15 @@
 
     /*
      * Grant HAL the exclusive control to send NCI commands.
-     * Called in response to NfcEvent.REQUEST_CONTROL.
+     * Called in response to HAL_REQUEST_CONTROL_EVT.
      * Must only be called when there are no NCI commands pending.
-     * NfcEvent.RELEASE_CONTROL will notify when HAL no longer needs exclusive control.
+     * HAL_RELEASE_CONTROL_EVT will notify when HAL no longer needs exclusive control.
      */
-    controlGranted() generates (int32_t retval);
+    control_granted() generates (int32_t retval);
 
      /*
      * Restart controller by power cyle;
-     * NfcEvent.OPEN_CPLT will notify when operation is complete.
+     * HAL_OPEN_CPLT_EVT will notify when operation is complete.
      */
-    powerCycle() generates (int32_t retval);
+    power_cycle() generates (int32_t retval);
 };
diff --git a/nfc/1.0/INfcClientCallback.hal b/nfc/1.0/INfcClientCallback.hal
index a56cc09..f10062e 100644
--- a/nfc/1.0/INfcClientCallback.hal
+++ b/nfc/1.0/INfcClientCallback.hal
@@ -21,11 +21,11 @@
      * The callback passed in from the NFC stack that the HAL
      * can use to pass events back to the stack.
      */
-    sendEvent(NfcEvent event, NfcStatus status);
+    sendEvent(nfc_event_t event, nfc_status_t event_status);
 
     /*
      * The callback passed in from the NFC stack that the HAL
      * can use to pass incomming data to the stack.
      */
-    sendData(NfcData data);
+    sendData(nfc_data_t data);
 };
diff --git a/nfc/1.0/default/Nfc.cpp b/nfc/1.0/default/Nfc.cpp
index d3868c1..b836ada 100644
--- a/nfc/1.0/default/Nfc.cpp
+++ b/nfc/1.0/default/Nfc.cpp
@@ -19,19 +19,19 @@
 // Methods from ::android::hardware::nfc::V1_0::INfc follow.
 ::android::hardware::Return<int32_t> Nfc::open(const sp<INfcClientCallback>& clientCallback)  {
     mCallback = clientCallback;
-    return mDevice->open(mDevice, eventCallback, dataCallback);
+    return mDevice->open(mDevice, event_callback, data_callback);
 }
 
-::android::hardware::Return<int32_t> Nfc::write(const hidl_vec<uint8_t>& data)  {
-    return mDevice->write(mDevice, data.size(), &data[0]);
+::android::hardware::Return<int32_t> Nfc::write(const nfc_data_t& data)  {
+    return mDevice->write(mDevice, data.data.size(), &data.data[0]);
 }
 
-::android::hardware::Return<int32_t> Nfc::coreInitialized(const hidl_vec<uint8_t>& data)  {
+::android::hardware::Return<int32_t> Nfc::core_initialized(const hidl_vec<uint8_t>& data)  {
     hidl_vec<uint8_t> copy = data;
     return mDevice->core_initialized(mDevice, &copy[0]);
 }
 
-::android::hardware::Return<int32_t> Nfc::prediscover()  {
+::android::hardware::Return<int32_t> Nfc::pre_discover()  {
     return mDevice->pre_discover(mDevice);
 }
 
@@ -39,11 +39,11 @@
     return mDevice->close(mDevice);
 }
 
-::android::hardware::Return<int32_t> Nfc::controlGranted()  {
+::android::hardware::Return<int32_t> Nfc::control_granted()  {
     return mDevice->control_granted(mDevice);
 }
 
-::android::hardware::Return<int32_t> Nfc::powerCycle()  {
+::android::hardware::Return<int32_t> Nfc::power_cycle()  {
     return mDevice->power_cycle(mDevice);
 }
 
diff --git a/nfc/1.0/default/Nfc.h b/nfc/1.0/default/Nfc.h
index e596495..98cd57e 100644
--- a/nfc/1.0/default/Nfc.h
+++ b/nfc/1.0/default/Nfc.h
@@ -13,6 +13,7 @@
 
 using ::android::hardware::nfc::V1_0::INfc;
 using ::android::hardware::nfc::V1_0::INfcClientCallback;
+using ::android::hardware::nfc::V1_0::nfc_data_t;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
 using ::android::hardware::hidl_vec;
@@ -22,23 +23,23 @@
 struct Nfc : public INfc {
   Nfc(nfc_nci_device_t* device);
   ::android::hardware::Return<int32_t> open(const sp<INfcClientCallback>& clientCallback)  override;
-  ::android::hardware::Return<int32_t> write(const hidl_vec<uint8_t>& data)  override;
-  ::android::hardware::Return<int32_t> coreInitialized(const hidl_vec<uint8_t>& data)  override;
-  ::android::hardware::Return<int32_t> prediscover()  override;
+  ::android::hardware::Return<int32_t> write(const nfc_data_t& data)  override;
+  ::android::hardware::Return<int32_t> core_initialized(const hidl_vec<uint8_t>& data)  override;
+  ::android::hardware::Return<int32_t> pre_discover()  override;
   ::android::hardware::Return<int32_t> close()  override;
-  ::android::hardware::Return<int32_t> controlGranted()  override;
-  ::android::hardware::Return<int32_t> powerCycle()  override;
+  ::android::hardware::Return<int32_t> control_granted()  override;
+  ::android::hardware::Return<int32_t> power_cycle()  override;
 
-  static void eventCallback(uint8_t event, uint8_t status) {
+  static void event_callback(uint8_t event, uint8_t status) {
       if (mCallback != nullptr) {
           mCallback->sendEvent(
-                  (::android::hardware::nfc::V1_0::NfcEvent) event,
-                  (::android::hardware::nfc::V1_0::NfcStatus) status);
+                  (::android::hardware::nfc::V1_0::nfc_event_t) event,
+                  (::android::hardware::nfc::V1_0::nfc_status_t) status);
       }
   }
-  static void dataCallback(uint16_t data_len, uint8_t* p_data) {
-      hidl_vec<uint8_t> data;
-      data.setToExternal(p_data, data_len);
+  static void data_callback(uint16_t data_len, uint8_t* p_data) {
+      nfc_data_t data;
+      data.data.setToExternal(p_data, data_len);
       if (mCallback != nullptr) {
           mCallback->sendData(data);
       }
diff --git a/nfc/1.0/types.hal b/nfc/1.0/types.hal
index a266178..738dfd9 100644
--- a/nfc/1.0/types.hal
+++ b/nfc/1.0/types.hal
@@ -16,22 +16,24 @@
 
 package android.hardware.nfc@1.0;
 
-enum NfcEvent : uint32_t {
-    OPEN_CPLT           = 0,
-    CLOSE_CPLT          = 1,
-    POST_INIT_CPLT      = 2,
-    PRE_DISCOVER_CPLT   = 3,
-    REQUEST_CONTROL     = 4,
-    RELEASE_CONTROL     = 5,
-    ERROR               = 6
+enum nfc_event_t : uint32_t {
+    HAL_NFC_OPEN_CPLT_EVT           = 0,
+    HAL_NFC_CLOSE_CPLT_EVT          = 1,
+    HAL_NFC_POST_INIT_CPLT_EVT      = 2,
+    HAL_NFC_PRE_DISCOVER_CPLT_EVT   = 3,
+    HAL_NFC_REQUEST_CONTROL_EVT     = 4,
+    HAL_NFC_RELEASE_CONTROL_EVT     = 5,
+    HAL_NFC_ERROR_EVT               = 6
 };
 
-enum NfcStatus : uint32_t {
-    OK               = 0,
-    FAILED           = 1,
-    ERR_TRANSPORT    = 2,
-    ERR_CMD_TIMEOUT  = 3,
-    REFUSED          = 4
+enum nfc_status_t : uint32_t {
+    HAL_NFC_STATUS_OK               = 0,
+    HAL_NFC_STATUS_FAILED           = 1,
+    HAL_NFC_STATUS_ERR_TRANSPORT    = 2,
+    HAL_NFC_STATUS_ERR_CMD_TIMEOUT  = 3,
+    HAL_NFC_STATUS_REFUSED          = 4
 };
 
-typedef vec<uint8_t> NfcData;
+struct nfc_data_t {
+    vec<uint8_t> data;
+};
diff --git a/tests/bar/1.0/Android.bp b/tests/bar/1.0/Android.bp
index b879741..617b08f 100644
--- a/tests/bar/1.0/Android.bp
+++ b/tests/bar/1.0/Android.bp
@@ -6,9 +6,11 @@
     cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tests.bar@1.0",
     srcs: [
         "IBar.hal",
+        "IImportTypes.hal",
     ],
     out: [
         "android/hardware/tests/bar/1.0/BarAll.cpp",
+        "android/hardware/tests/bar/1.0/ImportTypesAll.cpp",
     ],
 }
 
@@ -18,6 +20,7 @@
     cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.tests.bar@1.0",
     srcs: [
         "IBar.hal",
+        "IImportTypes.hal",
     ],
     out: [
         "android/hardware/tests/bar/1.0/IBar.h",
@@ -25,6 +28,11 @@
         "android/hardware/tests/bar/1.0/BnBar.h",
         "android/hardware/tests/bar/1.0/BpBar.h",
         "android/hardware/tests/bar/1.0/BsBar.h",
+        "android/hardware/tests/bar/1.0/IImportTypes.h",
+        "android/hardware/tests/bar/1.0/IHwImportTypes.h",
+        "android/hardware/tests/bar/1.0/BnImportTypes.h",
+        "android/hardware/tests/bar/1.0/BpImportTypes.h",
+        "android/hardware/tests/bar/1.0/BsImportTypes.h",
     ],
 }
 
diff --git a/tests/bar/1.0/IBar.hal b/tests/bar/1.0/IBar.hal
index f41c1a5..b57d9a0 100644
--- a/tests/bar/1.0/IBar.hal
+++ b/tests/bar/1.0/IBar.hal
@@ -17,10 +17,16 @@
 package android.hardware.tests.bar@1.0;
 
 import android.hardware.tests.foo@1.0::IFoo;
+import android.hardware.tests.foo@1.0::Unrelated;
 
 interface IBar extends android.hardware.tests.foo@1.0::IFoo {
 
     typedef android.hardware.tests.foo@1.0::IFoo FunkyAlias;
+    typedef Unrelated Related;
+
+    struct SomethingRelated {
+        Related myRelated;
+    };
 
     thisIsNew();
 };
diff --git a/tests/bar/1.0/IImportTypes.hal b/tests/bar/1.0/IImportTypes.hal
new file mode 100644
index 0000000..a74e55c
--- /dev/null
+++ b/tests/bar/1.0/IImportTypes.hal
@@ -0,0 +1,28 @@
+/*
+ * 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.bar@1.0;
+
+import android.hardware.tests.foo@1.0::types;
+
+interface IImportTypes {
+    typedef Unrelated Related;
+    struct GoodStruct {
+        Outer outer;
+        android.hardware.tests.foo@1.0::Outer.Inner inner;
+        @1.0::Outer.Inner.Deep deep;
+    };
+};
diff --git a/tests/expression/1.0/IExpression.hal b/tests/expression/1.0/IExpression.hal
index 4c38e5a..a44e03c 100644
--- a/tests/expression/1.0/IExpression.hal
+++ b/tests/expression/1.0/IExpression.hal
@@ -31,7 +31,7 @@
     noSuffixHex2 = 0x80000000,
     noSuffixHex3 = 0xffffffff,
     longHex1 = 0xffffffffl,
-    longHex2 = 0xfffffffff,
+    longHex2 = 0Xfffffffff,
     longHex3 = 0x7fffffffffffffff,
     longHex4 = 0x8000000000000000,
     longHex5 = 0xFFFFFFFFFFFFFFFF,
diff --git a/tests/foo/1.0/Android.bp b/tests/foo/1.0/Android.bp
index 4896fc3..1fbb7bd 100644
--- a/tests/foo/1.0/Android.bp
+++ b/tests/foo/1.0/Android.bp
@@ -8,11 +8,15 @@
         "types.hal",
         "IFoo.hal",
         "IFooCallback.hal",
+        "IMyTypes.hal",
+        "ITheirTypes.hal",
     ],
     out: [
         "android/hardware/tests/foo/1.0/types.cpp",
         "android/hardware/tests/foo/1.0/FooAll.cpp",
         "android/hardware/tests/foo/1.0/FooCallbackAll.cpp",
+        "android/hardware/tests/foo/1.0/MyTypesAll.cpp",
+        "android/hardware/tests/foo/1.0/TheirTypesAll.cpp",
     ],
 }
 
@@ -24,6 +28,8 @@
         "types.hal",
         "IFoo.hal",
         "IFooCallback.hal",
+        "IMyTypes.hal",
+        "ITheirTypes.hal",
     ],
     out: [
         "android/hardware/tests/foo/1.0/types.h",
@@ -37,6 +43,16 @@
         "android/hardware/tests/foo/1.0/BnFooCallback.h",
         "android/hardware/tests/foo/1.0/BpFooCallback.h",
         "android/hardware/tests/foo/1.0/BsFooCallback.h",
+        "android/hardware/tests/foo/1.0/IMyTypes.h",
+        "android/hardware/tests/foo/1.0/IHwMyTypes.h",
+        "android/hardware/tests/foo/1.0/BnMyTypes.h",
+        "android/hardware/tests/foo/1.0/BpMyTypes.h",
+        "android/hardware/tests/foo/1.0/BsMyTypes.h",
+        "android/hardware/tests/foo/1.0/ITheirTypes.h",
+        "android/hardware/tests/foo/1.0/IHwTheirTypes.h",
+        "android/hardware/tests/foo/1.0/BnTheirTypes.h",
+        "android/hardware/tests/foo/1.0/BpTheirTypes.h",
+        "android/hardware/tests/foo/1.0/BsTheirTypes.h",
     ],
 }
 
diff --git a/tests/foo/1.0/IFoo.hal b/tests/foo/1.0/IFoo.hal
index c1c2c6b..3d82353 100644
--- a/tests/foo/1.0/IFoo.hal
+++ b/tests/foo/1.0/IFoo.hal
@@ -17,6 +17,8 @@
 package android.hardware.tests.foo@1.0;
 
 import IFooCallback;
+import IMyTypes.SomeStruct;
+import ITheirTypes.FloatArray;
 
 interface IFoo {
 
@@ -72,6 +74,11 @@
         ThreeStrings[5] s;
     };
 
+    struct MyStruct {
+        SomeStruct innerStruct;
+        FloatArray myFloatArray;
+    };
+
     doThis(float param);
     doThatAndReturnSomething(int64_t param) generates (int32_t result);
     doQuiteABit(int32_t a, int64_t b, float c, double d) generates (double something);
diff --git a/tests/foo/1.0/IMyTypes.hal b/tests/foo/1.0/IMyTypes.hal
new file mode 100644
index 0000000..c8469a8
--- /dev/null
+++ b/tests/foo/1.0/IMyTypes.hal
@@ -0,0 +1,24 @@
+/*
+ * 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.foo@1.0;
+
+
+interface IMyTypes {
+    struct SomeStruct {
+    };
+    typedef float[30] FloatArray;
+};
diff --git a/tests/foo/1.0/ITheirTypes.hal b/tests/foo/1.0/ITheirTypes.hal
new file mode 100644
index 0000000..7b955e0
--- /dev/null
+++ b/tests/foo/1.0/ITheirTypes.hal
@@ -0,0 +1,24 @@
+/*
+ * 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.foo@1.0;
+
+
+interface ITheirTypes {
+    struct SomeStruct {
+    };
+    typedef float[10] FloatArray;
+};
diff --git a/tests/foo/1.0/types.hal b/tests/foo/1.0/types.hal
index 9666b53..a01fc2d 100644
--- a/tests/foo/1.0/types.hal
+++ b/tests/foo/1.0/types.hal
@@ -24,6 +24,9 @@
 
 struct Outer {
     struct Inner {
+        struct Deep {
+            int32_t data;
+        };
         int32_t data;
     };
 };