• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef VTS_COMPILATION_TOOLS_VTSC_CODE_GEN_DRIVER_HALHIDLCODEGEN_H_
18 #define VTS_COMPILATION_TOOLS_VTSC_CODE_GEN_DRIVER_HALHIDLCODEGEN_H_
19 
20 #include <fstream>
21 #include <iostream>
22 #include <sstream>
23 #include <string>
24 
25 #include "test/vts/proto/ComponentSpecificationMessage.pb.h"
26 
27 #include "code_gen/driver/DriverCodeGenBase.h"
28 
29 using namespace std;
30 
31 namespace android {
32 namespace vts {
33 
34 class HalHidlCodeGen : public DriverCodeGenBase {
35  public:
HalHidlCodeGen(const char * input_vts_file_path,const string & vts_name)36   HalHidlCodeGen(const char* input_vts_file_path, const string& vts_name)
37       : DriverCodeGenBase(input_vts_file_path, vts_name) {}
38 
39  protected:
40   void GenerateClassHeader(Formatter& out,
41       const ComponentSpecificationMessage& message,
42       const string& fuzzer_extended_class_name) override;
43 
44   void GenerateClassImpl(Formatter& out,
45       const ComponentSpecificationMessage& message,
46       const string& fuzzer_extended_class_name) override;
47 
48   void GenerateCppBodyFuzzFunction(Formatter& out,
49       const ComponentSpecificationMessage& message,
50       const string& fuzzer_extended_class_name) override;
51 
52   virtual void GenerateDriverFunctionImpl(Formatter& out,
53       const ComponentSpecificationMessage& message,
54       const string& fuzzer_extended_class_name) override;
55 
56   void GenerateVerificationFunctionImpl(Formatter& out,
57       const ComponentSpecificationMessage& message,
58       const string& fuzzer_extended_class_name) override;
59 
60   void GenerateCppBodyGetAttributeFunction(Formatter& out,
61       const ComponentSpecificationMessage& message,
62       const string& fuzzer_extended_class_name) override;
63 
64   void GenerateCppBodyCallbackFunction(Formatter& out,
65       const ComponentSpecificationMessage& message,
66       const string& fuzzer_extended_class_name) override;
67 
68   void GenerateClassConstructionFunction(Formatter& out,
69       const ComponentSpecificationMessage& message,
70       const string& fuzzer_extended_class_name) override;
71 
72   void GenerateHeaderGlobalFunctionDeclarations(Formatter& out,
73       const ComponentSpecificationMessage& message) override;
74 
75   void GenerateCppBodyGlobalFunctions(Formatter& out,
76       const ComponentSpecificationMessage& message,
77       const string& fuzzer_extended_class_name) override;
78 
79   void GenerateHeaderIncludeFiles(Formatter& out,
80       const ComponentSpecificationMessage& message,
81       const string& fuzzer_extended_class_name) override;
82 
83   void GenerateSourceIncludeFiles(Formatter& out,
84       const ComponentSpecificationMessage& message,
85       const string& fuzzer_extended_class_name) override;
86 
87   void GenerateAdditionalFuctionDeclarations(Formatter& out,
88       const ComponentSpecificationMessage& message,
89       const string& fuzzer_extended_class_name) override;
90 
91   void GeneratePrivateMemberDeclarations(Formatter& out,
92       const ComponentSpecificationMessage& message) override;
93 
94   void GenerateCppBodyFuzzFunction(Formatter& out,
95       const StructSpecificationMessage& message,
96       const string& fuzzer_extended_class_name,
97       const string& original_data_structure_name, const string& parent_path);
98 
99   // Generates a scalar type in C/C++.
100   void GenerateScalarTypeInC(Formatter& out, const string& type);
101 
102   // Generates the driver function implementation for hidl reserved methods.
103   void GenerateDriverImplForReservedMethods(Formatter& out);
104 
105   // Generates the driver function implementation for a method.
106   void GenerateDriverImplForMethod(Formatter& out,
107       const ComponentSpecificationMessage& message,
108       const FunctionSpecificationMessage& func_msg);
109 
110   // Generates the code to perform a Hal function call.
111   void GenerateHalFunctionCall(Formatter& out,
112       const ComponentSpecificationMessage& message,
113       const FunctionSpecificationMessage& func_msg);
114 
115   // Generates the implementation of a callback passed to the Hal function call.
116   void GenerateSyncCallbackFunctionImpl(Formatter& out,
117       const ComponentSpecificationMessage& message,
118       const FunctionSpecificationMessage& func_msg);
119 
120   // Generates the driver function declaration for attributes defined within
121   // an interface or in a types.hal.
122   void GenerateDriverDeclForAttribute(Formatter& out,
123       const VariableSpecificationMessage& attribute);
124 
125   // Generates the driver function implementation for attributes defined within
126   // an interface or in a types.hal.
127   void GenerateDriverImplForAttribute(Formatter& out,
128       const VariableSpecificationMessage& attribute);
129 
130   // Generates the driver code for a typed variable.
131   void GenerateDriverImplForTypedVariable(Formatter& out,
132       const VariableSpecificationMessage& val, const string& arg_name,
133       const string& arg_value_name);
134 
135   // Generates the verification function declarations for attributes defined
136   // within an interface or in a types.hal.
137   void GenerateVerificationDeclForAttribute(Formatter& out,
138       const VariableSpecificationMessage& attribute);
139 
140   // Generates the verification function implementation for attributes defined
141   // within an interface or in a types.hal.
142   void GenerateVerificationImplForAttribute(Formatter& out,
143       const VariableSpecificationMessage& attribute);
144 
145   // Generates the verification code for a typed variable.
146   void GenerateVerificationCodeForTypedVariable(Formatter& out,
147       const VariableSpecificationMessage& val, const string& result_value,
148       const string& expected_result);
149 
150   // Generates the SetResult function declarations for attributes defined
151   // within an interface or in a types.hal.
152   void GenerateSetResultDeclForAttribute(Formatter& out,
153       const VariableSpecificationMessage& attribute);
154 
155   // Generates the SetResult function implementation for attributes defined
156   // within an interface or in a types.hal.
157   void GenerateSetResultImplForAttribute(Formatter& out,
158       const VariableSpecificationMessage& attribute);
159 
160   // Generates the SetResult code for a typed variable.
161   void GenerateSetResultCodeForTypedVariable(Formatter& out,
162       const VariableSpecificationMessage& val, const string& result_msg,
163       const string& result_val);
164 
165   // Generates the random function declaration for attributes defined within
166   // an interface or in a types.hal.
167   void GenerateRandomFunctionDeclForAttribute(Formatter& out,
168       const VariableSpecificationMessage& attribute);
169 
170   // Generates the random function implementation for attributes defined within
171   // an interface or in a types.hal.
172   void GenerateRandomFunctionImplForAttribute(Formatter& out,
173       const VariableSpecificationMessage& attribute);
174 
175   // Generates the getService function implementation for an interface.
176   void GenerateGetServiceImpl(Formatter& out,
177       const ComponentSpecificationMessage& message,
178       const string& fuzzer_extended_class_name);
179 
180   // Generates all function declaration for an attributed.
181   void GenerateAllFunctionDeclForAttribute(Formatter& out,
182       const VariableSpecificationMessage& attribute);
183 
184   // Generates all function implementation for an attributed.
185   void GenerateAllFunctionImplForAttribute(Formatter& out,
186       const VariableSpecificationMessage& attribute);
187 
188   // Returns true if we could omit the callback function and return result
189   // directly.
190   bool CanElideCallback(const FunctionSpecificationMessage& func_msg);
191   bool isElidableType(const VariableType& type);
192 
193   // Returns true if a HIDL type uses 'const' in its native C/C++ form.
194   bool isConstType(const VariableType& type);
195 
196   // instance variable name (e.g., device_);
197   static const char* const kInstanceVariableName;
198 };
199 
200 }  // namespace vts
201 }  // namespace android
202 
203 #endif  // VTS_COMPILATION_TOOLS_VTSC_CODE_GEN_DRIVER_HALHIDLCODEGEN_H_
204