Merge changes I3568de9e,Iab67b329

* changes:
  Add compile time test to c2hal
  Remove hw_device_t struct from c2hal output
diff --git a/c2hal/Android.bp b/c2hal/Android.bp
index f901d24..a634ed6 100644
--- a/c2hal/Android.bp
+++ b/c2hal/Android.bp
@@ -12,6 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+subdirs = [
+    "test",
+]
+
+
 cc_binary_host {
     name: "c2hal",
     srcs: [
diff --git a/c2hal/CompositeDeclaration.cpp b/c2hal/CompositeDeclaration.cpp
index a9eba59..70cf775 100644
--- a/c2hal/CompositeDeclaration.cpp
+++ b/c2hal/CompositeDeclaration.cpp
@@ -16,6 +16,7 @@
 
 #include "CompositeDeclaration.h"
 #include "FunctionDeclaration.h"
+#include "VarDeclaration.h"
 #include "Declaration.h"
 
 #include <algorithm>
@@ -116,7 +117,20 @@
         auto it = mFieldDeclarations->begin();
         while (it != mFieldDeclarations->end()) {
             if((*it)->decType() != FunctionDeclaration::type()) {
-                nonFpDecs->push_back(*it);
+                bool keep = true;
+                if((*it)->decType() == VarDeclaration::type()) {
+                  VarDeclaration* var = (VarDeclaration *)(*it);
+                  // Conventional HALs were all required to have
+                  // a member of this type.
+                  // This member is no longer needed for HIDL
+                  if(var->getType()->isHwDevice()) {
+                    keep = false;
+                  }
+                }
+
+                if (keep) {
+                  nonFpDecs->push_back(*it);
+                }
                 it = mFieldDeclarations->erase(it);
             } else {
                 it++;
@@ -156,4 +170,4 @@
     mEnumTypeName = name;
 }
 
-} //namespace android
\ No newline at end of file
+} //namespace android
diff --git a/c2hal/Type.cpp b/c2hal/Type.cpp
index 6b6c721..7d4d9ad 100644
--- a/c2hal/Type.cpp
+++ b/c2hal/Type.cpp
@@ -233,6 +233,15 @@
            (*mQualifiers)[0]->qualification == Type::Qualifier::VOID;
 }
 
+bool Type::isHwDevice() const {
+    if (mQualifiers->size() < 2) {
+        return false;
+    }
+
+    return (*mQualifiers)[0]->qualification == Type::Qualifier::STRUCT &&
+        (*mQualifiers)[1]->qualification == Type::Qualifier::ID &&
+        (*mQualifiers)[1]->id == "hw_device_t";
+}
 
 std::string Type::removeLastId() {
     if(mQualifiers == NULL || mQualifiers->size() == 0) {
diff --git a/c2hal/Type.h b/c2hal/Type.h
index 0147d4a..8cd0477 100644
--- a/c2hal/Type.h
+++ b/c2hal/Type.h
@@ -88,6 +88,7 @@
     const std::string decorateName(const std::string &name) const;
 
     bool isVoid() const;
+    bool isHwDevice() const;
     std::string removeLastId();
 
 private:
@@ -113,4 +114,4 @@
 
 }  // namespace android
 
-#endif  // TYPE_H_
\ No newline at end of file
+#endif  // TYPE_H_
diff --git a/c2hal/test/Android.bp b/c2hal/test/Android.bp
new file mode 100644
index 0000000..0df857a
--- /dev/null
+++ b/c2hal/test/Android.bp
@@ -0,0 +1,58 @@
+// 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.
+//
+
+genrule {
+    name: "c2hal_test_genc++_headers",
+    tool: "c2hal",
+    cmd: "$tool -o $genDir/c2hal_test/1.0 -p android.hardware.c2hal_test@1.0 $in && out/soong/host/linux-x86/bin/hidl-gen -o $genDir -Lc++ -r android.hardware:$genDir android.hardware.c2hal_test@1.0::ISimple",
+    srcs: [
+        "simple.h",
+    ],
+    out: [
+        "android/hardware/c2hal_test/1.0/BnSimple.h",
+        "android/hardware/c2hal_test/1.0/BpSimple.h",
+        "android/hardware/c2hal_test/1.0/BsSimple.h",
+        "android/hardware/c2hal_test/1.0/IHwSimple.h",
+        "android/hardware/c2hal_test/1.0/ISimple.h",
+    ],
+}
+
+genrule {
+    name: "c2hal_test_genc++",
+    tool: "c2hal",
+    cmd: "$tool -o $genDir/c2hal_test/1.0 -p android.hardware.c2hal_test@1.0 $in && out/soong/host/linux-x86/bin/hidl-gen -o $genDir -Lc++ -r android.hardware:$genDir android.hardware.c2hal_test@1.0::ISimple",
+    srcs: [
+        "simple.h",
+    ],
+    out: [
+        "android/hardware/c2hal_test/1.0/SimpleAll.cpp",
+    ],
+}
+
+cc_library_shared {
+    name: "c2hal_test",
+    generated_headers: ["c2hal_test_genc++_headers"],
+    generated_sources: ["c2hal_test_genc++"],
+    export_generated_headers: ["c2hal_test_genc++_headers"],
+    shared_libs: [
+        "libhidl",
+        "libhwbinder",
+        "libutils",
+        "libcutils",
+    ],
+    required: [
+        "hidl-gen",
+    ]
+}