mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-08-27 02:42:28 -04:00
@@ -7,7 +7,7 @@
|
||||
# the GPL, or the BSD license, at your option.
|
||||
# See the LICENSE file in the root of this repository for complete details.
|
||||
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
@@ -63,10 +63,10 @@ def c_interface_file_translate(idl_file, out_dir, part, outputs):
|
||||
server_impl_header_file = os.path.join(out_dir, file_name + "_service.h")
|
||||
server_impl_source_file = os.path.join(out_dir, file_name + "_service.c")
|
||||
|
||||
if part == "client_lib_source":
|
||||
if part == "-c":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(client_proxy_source_file)
|
||||
elif part == "server_lib_source":
|
||||
elif part == "-s":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(server_stub_header_file)
|
||||
outputs.append(server_stub_source_file)
|
||||
@@ -91,11 +91,11 @@ def c_callback_file_translate(idl_file, out_dir, part, outputs):
|
||||
server_impl_header_file = os.path.join(out_dir, file_name + "_service.h")
|
||||
server_impl_source_file = os.path.join(out_dir, file_name + "_service.c")
|
||||
|
||||
if part == "client_lib_source":
|
||||
if part == "-c":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(server_stub_header_file)
|
||||
outputs.append(server_stub_source_file)
|
||||
elif part == "server_lib_source":
|
||||
elif part == "-s":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(client_proxy_source_file)
|
||||
else:
|
||||
@@ -118,19 +118,6 @@ def c_types_file_translate(idl_file, out_dir, outputs):
|
||||
outputs.append(types_source_file)
|
||||
|
||||
|
||||
def c_idl_translate(idl_files, out_dir):
|
||||
outputs = []
|
||||
for idl_file in idl_files:
|
||||
idl_file_type = get_idl_file_type(idl_file)
|
||||
if idl_file_type == IdlType.INTERFACE:
|
||||
c_interface_file_translate(idl_file, out_dir, "all", outputs)
|
||||
elif idl_file_type == IdlType.CALLBACK:
|
||||
c_callback_file_translate(idl_file, out_dir, "all", outputs)
|
||||
elif idl_file_type == IdlType.TYPES:
|
||||
c_types_file_translate(idl_file, out_dir, outputs)
|
||||
return outputs
|
||||
|
||||
|
||||
def cpp_interface_file_translate(idl_file, out_dir, part, outputs):
|
||||
get_file_name = idl_file.split("/")[-1]
|
||||
file_name = translate_file_name(get_file_name.split(".")[0])
|
||||
@@ -144,11 +131,11 @@ def cpp_interface_file_translate(idl_file, out_dir, part, outputs):
|
||||
server_impl_header_file = os.path.join(out_dir, file_name + "_service.h")
|
||||
server_impl_source_file = os.path.join(out_dir, file_name + "_service.cpp")
|
||||
|
||||
if part == "client_lib_source":
|
||||
if part == "-c":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(client_proxy_header_file)
|
||||
outputs.append(client_proxy_source_file)
|
||||
elif part == "server_lib_source":
|
||||
elif part == "-s":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(server_stub_header_file)
|
||||
outputs.append(server_stub_source_file)
|
||||
@@ -175,11 +162,11 @@ def cpp_callback_file_translate(idl_file, out_dir, part, outputs):
|
||||
server_impl_header_file = os.path.join(out_dir, file_name + "_service.h")
|
||||
server_impl_source_file = os.path.join(out_dir, file_name + "_service.cpp")
|
||||
|
||||
if part == "client_lib_source":
|
||||
if part == "-c":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(server_stub_header_file)
|
||||
outputs.append(server_stub_source_file)
|
||||
elif part == "server_lib_source":
|
||||
elif part == "-s":
|
||||
outputs.append(iface_header_file)
|
||||
outputs.append(client_proxy_header_file)
|
||||
outputs.append(client_proxy_source_file)
|
||||
@@ -204,28 +191,6 @@ def cpp_types_file_translate(idl_file, out_dir, outputs):
|
||||
outputs.append(types_source_file)
|
||||
|
||||
|
||||
def cpp_idl_translate(idl_files, out_dir):
|
||||
outputs = []
|
||||
for idl_file in idl_files:
|
||||
idl_file_type = get_idl_file_type(idl_file)
|
||||
if idl_file_type == IdlType.INTERFACE:
|
||||
cpp_interface_file_translate(idl_file, out_dir, "all", outputs)
|
||||
elif idl_file_type == IdlType.CALLBACK:
|
||||
cpp_callback_file_translate(idl_file, out_dir, "all", outputs)
|
||||
elif idl_file_type == IdlType.TYPES:
|
||||
cpp_types_file_translate(idl_file, out_dir, outputs)
|
||||
return outputs
|
||||
|
||||
|
||||
def idl_translate(idl_files, language, out_dir):
|
||||
outputs = []
|
||||
if language == "c":
|
||||
outputs = c_idl_translate(idl_files, out_dir)
|
||||
elif language == "cpp":
|
||||
outputs = cpp_idl_translate(idl_files, out_dir)
|
||||
return outputs
|
||||
|
||||
|
||||
def c_get_compile_source_file(idl_files, out_dir, part):
|
||||
outputs = []
|
||||
for idl_file in idl_files:
|
||||
@@ -261,57 +226,121 @@ def get_compile_source_file(idl_files, language, out_dir, part):
|
||||
return outputs
|
||||
|
||||
|
||||
def get_files(argv):
|
||||
outputs = []
|
||||
if len(argv) < 4:
|
||||
return outputs
|
||||
# ./build_hdi_files.py -o <language> <gen_dir> <part> <idl_files>
|
||||
def get_output_files(argv):
|
||||
result = []
|
||||
if len(argv) >= 5:
|
||||
language = argv[2]
|
||||
gen_dir = argv[3]
|
||||
part = argv[4]
|
||||
idl_files = argv[5:]
|
||||
|
||||
option_mode = argv[1]
|
||||
language = argv[2]
|
||||
out_dir = argv[3]
|
||||
files = argv[4:]
|
||||
|
||||
if option_mode == "-o":
|
||||
outputs = idl_translate(files, language, out_dir)
|
||||
elif option_mode == "-c":
|
||||
outputs = get_compile_source_file(argv[4:], language, out_dir, "client_lib_source")
|
||||
elif option_mode == "-s":
|
||||
outputs = get_compile_source_file(argv[4:], language, out_dir, "server_lib_source")
|
||||
|
||||
sys.stdout.write('\n'.join(outputs))
|
||||
result = get_compile_source_file(idl_files, language, gen_dir, part)
|
||||
sys.stdout.write('\n'.join(result))
|
||||
|
||||
|
||||
def get_file_version(file_path):
|
||||
major_version = 0
|
||||
minor_version = 0
|
||||
file_option = open(file_path, "r")
|
||||
file_str = file_option.read()
|
||||
result = re.findall(r'package\s\w+(?:\.\w+)*\.[V|v](\d+)_(\d+);', file_str)
|
||||
|
||||
if len(result) > 0:
|
||||
major_version = result[0][0]
|
||||
minor_version = result[0][1]
|
||||
file_option.close()
|
||||
version = str(major_version) + "." + str(minor_version)
|
||||
return version
|
||||
# parse package name of this idl file
|
||||
def parse_file_package(file_path):
|
||||
package_str = ""
|
||||
idl_file = open(file_path, "r")
|
||||
file_str = idl_file.read()
|
||||
result = re.findall(r'package\s(\w+(?:\.\w+)*);', file_str)
|
||||
if (len(result) > 0):
|
||||
package_str = result[0]
|
||||
idl_file.close()
|
||||
return package_str
|
||||
|
||||
|
||||
def get_version(argv):
|
||||
version = "0.0"
|
||||
idl_files = argv[2:]
|
||||
# search all idl files and parse package name
|
||||
def parse_package(idl_files):
|
||||
package_str = ""
|
||||
for idl_file in idl_files:
|
||||
idl_file_type = get_idl_file_type(idl_file)
|
||||
if idl_file_type == IdlType.INTERFACE:
|
||||
version = get_file_version(idl_file)
|
||||
package_str = parse_file_package(idl_file)
|
||||
break
|
||||
sys.stdout.write(version)
|
||||
return package_str
|
||||
|
||||
|
||||
# parse version from package name
|
||||
def parse_version(package_str):
|
||||
# the version is empty by default
|
||||
version_str = ""
|
||||
result = re.findall(r'\w+(?:\.\w+)*\.[V|v](\d+)_(\d+)', package_str)
|
||||
if len(result) > 0:
|
||||
major_version = result[0][0]
|
||||
minor_version = result[0][1]
|
||||
version_str = str(major_version) + "." + str(minor_version)
|
||||
return version_str
|
||||
|
||||
|
||||
def parse_out_dir(gen_dir, package_str, path_map):
|
||||
package_path_vec = path_map.split(":")
|
||||
if (len(package_path_vec) != 2):
|
||||
return gen_dir
|
||||
|
||||
root_package = package_path_vec[0]
|
||||
root_package_path = package_path_vec[1]
|
||||
|
||||
temp_dir = package_str.replace(root_package, root_package_path)
|
||||
temp_dir = temp_dir.replace(".", "/")
|
||||
return gen_dir.replace(temp_dir, "")
|
||||
|
||||
|
||||
def parse_root_package_dir(gen_dir, package_str, path_map):
|
||||
package_path_vec = path_map.split(":")
|
||||
if (len(package_path_vec) != 2):
|
||||
return gen_dir
|
||||
|
||||
root_package = package_path_vec[0]
|
||||
root_package_path = package_path_vec[1]
|
||||
|
||||
temp_dir = package_str.replace(root_package, "")
|
||||
temp_dir = temp_dir.replace(".", "/")
|
||||
return gen_dir.replace(temp_dir, "")
|
||||
|
||||
|
||||
def parse_version_dir(gen_dir, version_str):
|
||||
version_dir_name = "v" + version_str.replace(".", "_")
|
||||
return gen_dir.replace(version_dir_name, "")
|
||||
|
||||
|
||||
# get information of package, version and generation files from idl files
|
||||
# ./build_hdi_files.py -i <language> <gen_dir> <path_mapping> <idl_files>
|
||||
def get_information(argv):
|
||||
result = {}
|
||||
if len(argv) >= 5:
|
||||
language = argv[2]
|
||||
gen_dir = argv[3]
|
||||
path_map = argv[4]
|
||||
idl_files = argv[5:]
|
||||
|
||||
package_str = parse_package(idl_files)
|
||||
version_str = parse_version(package_str)
|
||||
|
||||
out_dir = parse_out_dir(gen_dir, package_str, path_map)
|
||||
|
||||
root_package_dir = parse_root_package_dir(gen_dir, package_str, path_map)
|
||||
|
||||
version_dir = parse_version_dir(gen_dir, version_str)
|
||||
|
||||
result = {
|
||||
"package" : package_str,
|
||||
"version" : version_str,
|
||||
"out_dir" : out_dir,
|
||||
"root_package_dir" : root_package_dir,
|
||||
"version_dir" : version_dir,
|
||||
}
|
||||
sys.stdout.write(json.dumps(result))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 1:
|
||||
sys.stdout.write('\n')
|
||||
option = sys.argv[1]
|
||||
if option == "-v":
|
||||
get_version(sys.argv)
|
||||
if option == "-i":
|
||||
get_information(sys.argv)
|
||||
elif option == "-o":
|
||||
get_output_files(sys.argv)
|
||||
else:
|
||||
get_files(sys.argv)
|
||||
sys.stdout.write('\n')
|
||||
@@ -85,7 +85,7 @@ void CClientProxyCodeEmitter::EmitProxyInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(interfaceName_)));
|
||||
GetHeaderOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -119,7 +119,7 @@ void CClientProxyCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFile
|
||||
|
||||
void CClientProxyCodeEmitter::EmitProxyDefinition(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct %sProxy {\n", infName_.string());
|
||||
sb.AppendFormat("struct %sProxy {\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct %s impl;\n", interfaceName_.string());
|
||||
if (isKernelCode_) {
|
||||
sb.Append(g_tab).Append("struct HdfIoService *serv;\n");
|
||||
@@ -133,7 +133,7 @@ void CClientProxyCodeEmitter::EmitProxyDefinition(StringBuilder& sb)
|
||||
void CClientProxyCodeEmitter::EmitProxyCallMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("static int32_t %sProxyCall(struct %s *self, int32_t id, struct HdfSBuf *data,\n",
|
||||
infName_.string(), interfaceName_.string());
|
||||
baseName_.string(), interfaceName_.string());
|
||||
sb.Append(g_tab).Append("struct HdfSBuf *reply, bool isOneWay)\n");
|
||||
sb.Append("{\n");
|
||||
|
||||
@@ -161,13 +161,13 @@ void CClientProxyCodeEmitter::EmitProxyCallMethodImpl(StringBuilder& sb)
|
||||
void CClientProxyCodeEmitter::EmitProxyKernelCallMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("static int32_t %sProxyCall(struct %s *self, int32_t id, struct HdfSBuf *data,\n",
|
||||
infName_.string(), interfaceName_.string());
|
||||
baseName_.string(), interfaceName_.string());
|
||||
sb.Append(g_tab).Append("struct HdfSBuf *reply)\n");
|
||||
sb.Append("{\n");
|
||||
|
||||
String remoteName = "serv";
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = CONTAINER_OF(self, struct %sProxy, impl);\n",
|
||||
infName_.string(), infName_.string(), remoteName.string());
|
||||
baseName_.string(), baseName_.string(), remoteName.string());
|
||||
sb.Append(g_tab).AppendFormat("struct HdfIoService *%s = proxy->%s;\n", remoteName.string(), remoteName.string());
|
||||
|
||||
sb.Append(g_tab).AppendFormat("if (%s == NULL\n", remoteName.string());
|
||||
@@ -202,10 +202,10 @@ void CClientProxyCodeEmitter::EmitProxyMethodImpl(const AutoPtr<ASTMethod>& meth
|
||||
{
|
||||
if (method->GetParameterNumber() == 0) {
|
||||
sb.AppendFormat("static int32_t %sProxy%s(struct %s *self)\n",
|
||||
infName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
baseName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
} else {
|
||||
StringBuilder paramStr;
|
||||
paramStr.AppendFormat("static int32_t %sProxy%s(", infName_.string(), method->GetName().string());
|
||||
paramStr.AppendFormat("static int32_t %sProxy%s(", baseName_.string(), method->GetName().string());
|
||||
paramStr.AppendFormat("struct %s *self, ", interfaceName_.string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
@@ -344,13 +344,13 @@ void CClientProxyCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& metho
|
||||
void CClientProxyCodeEmitter::EmitProxyAsObjectMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("static struct HdfRemoteService *%sProxyAsObject(struct %s *self)\n",
|
||||
infName_.string(), interfaceName_.string());
|
||||
baseName_.string(), interfaceName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("if (self == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = CONTAINER_OF(self, struct %sProxy, impl);\n",
|
||||
infName_.string(), infName_.string());
|
||||
baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append("return proxy->remote;\n");
|
||||
sb.Append("}\n");
|
||||
}
|
||||
@@ -359,21 +359,21 @@ void CClientProxyCodeEmitter::EmitProxyConstruction(StringBuilder& sb)
|
||||
{
|
||||
String objName = "impl";
|
||||
sb.AppendFormat("static void %sProxyConstruct(struct %s *%s)\n",
|
||||
infName_.string(), interfaceName_.string(), objName.string());
|
||||
baseName_.string(), interfaceName_.string(), objName.string());
|
||||
sb.Append("{\n");
|
||||
|
||||
for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(g_tab).AppendFormat("%s->%s = %sProxy%s;\n",
|
||||
objName.string(), method->GetName().string(), infName_.string(), method->GetName().string());
|
||||
objName.string(), method->GetName().string(), baseName_.string(), method->GetName().string());
|
||||
}
|
||||
|
||||
AutoPtr<ASTMethod> getVerMethod = interface_->GetVersionMethod();
|
||||
sb.Append(g_tab).AppendFormat("%s->%s = %sProxy%s;\n", objName.string(), getVerMethod->GetName().string(),
|
||||
infName_.string(), getVerMethod->GetName().string());
|
||||
baseName_.string(), getVerMethod->GetName().string());
|
||||
|
||||
if (!isKernelCode_) {
|
||||
sb.Append(g_tab).AppendFormat("%s->AsObject = %sProxyAsObject;\n", objName.string(), infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->AsObject = %sProxyAsObject;\n", objName.string(), baseName_.string());
|
||||
}
|
||||
|
||||
sb.Append("}\n");
|
||||
@@ -381,9 +381,9 @@ void CClientProxyCodeEmitter::EmitProxyConstruction(StringBuilder& sb)
|
||||
|
||||
void CClientProxyCodeEmitter::EmitProxyGetMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct %s *%sGet()\n", interfaceName_.string(), infName_.string());
|
||||
sb.AppendFormat("struct %s *%sGet()\n", interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("return %sGetInstance(\"%s\");\n", infName_.string(), FileName(implName_).string());
|
||||
sb.Append(g_tab).AppendFormat("return %sGetInstance(\"%s\");\n", baseName_.string(), FileName(implName_).string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
@@ -393,7 +393,7 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
String SerMajorName = "serMajorVer";
|
||||
String SerMinorName = "serMinorVer";
|
||||
sb.AppendFormat("struct %s *%sGetInstance(const char *instanceName)\n",
|
||||
interfaceName_.string(), infName_.string());
|
||||
interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("struct HDIServiceManager *serviceMgr = HDIServiceManagerGet();\n");
|
||||
sb.Append(g_tab).Append("if (serviceMgr == NULL) {\n");
|
||||
@@ -405,12 +405,12 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).Append("HDIServiceManagerRelease(serviceMgr);\n");
|
||||
sb.Append(g_tab).Append("if (remote == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: %sService not found!\", __func__);\n",
|
||||
infName_.string());
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = ", infName_.string());
|
||||
sb.AppendFormat("(struct %sProxy *)OsalMemAlloc(sizeof(struct %sProxy));\n", infName_.string(),
|
||||
infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = ", baseName_.string());
|
||||
sb.AppendFormat("(struct %sProxy *)OsalMemAlloc(sizeof(struct %sProxy));\n", baseName_.string(),
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).Append("if (proxy == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: malloc %s proxy failed!\", __func__);\n", interfaceName_.string());
|
||||
@@ -419,14 +419,14 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).Append("proxy->remote = remote;\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %s *%s = &proxy->impl;\n", interfaceName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMajorName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("int32_t %s = %s->GetVersion(%s, &%s, &%s);\n",
|
||||
errorCodeName_.string(), objName.string(), objName.string(), SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("HDF_LOGE(\"%{public}s: get version failed!\", __func__);\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("if (%s != %s) {\n", SerMajorName.string(), majorVerName_.string());
|
||||
@@ -434,7 +434,7 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
sb.Append("version of service:%u.%u, version of client:%u.%u\", __func__,\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append(g_tab).AppendFormat("%s, %s, %s, %s);\n", SerMajorName.string(),
|
||||
SerMinorName.string(), majorVerName_.string(), minorVerName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("return %s;\n", objName.string());
|
||||
@@ -443,19 +443,19 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
|
||||
void CClientProxyCodeEmitter::EmitKernelProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct %s *%sGetInstance(const char* serviceName)\n", interfaceName_.string(), infName_.string());
|
||||
sb.AppendFormat("struct %s *%sGetInstance(const char* serviceName)\n", interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("struct HdfIoService *serv = ");
|
||||
sb.Append("HdfIoServiceBind(serviceName);\n");
|
||||
sb.Append(g_tab).Append("if (serv == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: %sService not found!\", __func__);\n", infName_.string());
|
||||
"HDF_LOGE(\"%%{public}s: %sService not found!\", __func__);\n", baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append("\n");
|
||||
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = (struct %sProxy *)OsalMemAlloc(sizeof(struct %sProxy));\n",
|
||||
infName_.string(), infName_.string(), infName_.string());
|
||||
baseName_.string(), baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append("if (proxy == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: malloc %s proxy failed!\", __func__);\n", interfaceName_.string());
|
||||
@@ -465,7 +465,7 @@ void CClientProxyCodeEmitter::EmitKernelProxyGetInstanceMethodImpl(StringBuilder
|
||||
sb.Append("\n");
|
||||
|
||||
sb.Append(g_tab).Append("proxy->serv = serv;\n");
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(&proxy->impl);\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(&proxy->impl);\n", baseName_.string());
|
||||
sb.Append(g_tab).Append("return &proxy->impl;\n");
|
||||
sb.Append("}\n");
|
||||
}
|
||||
@@ -476,16 +476,16 @@ void CClientProxyCodeEmitter::EmitCbProxyGetMethodImpl(StringBuilder& sb)
|
||||
String SerMajorName = "serMajorVer";
|
||||
String SerMinorName = "serMinorVer";
|
||||
sb.AppendFormat("struct %s *%sGet(struct HdfRemoteService *remote)\n",
|
||||
interfaceName_.string(), infName_.string());
|
||||
interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("if (remote == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: %sService not found!\", __func__);\n",
|
||||
infName_.string());
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = ", infName_.string());
|
||||
sb.AppendFormat("(struct %sProxy *)OsalMemAlloc(sizeof(struct %sProxy));\n", infName_.string(),
|
||||
infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = ", baseName_.string());
|
||||
sb.AppendFormat("(struct %sProxy *)OsalMemAlloc(sizeof(struct %sProxy));\n", baseName_.string(),
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).Append("if (proxy == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: malloc %s proxy failed!\", __func__);\n", interfaceName_.string());
|
||||
@@ -494,14 +494,14 @@ void CClientProxyCodeEmitter::EmitCbProxyGetMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).Append("proxy->remote = remote;\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %s *%s = &proxy->impl;\n", interfaceName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMajorName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("int32_t %s = %s->GetVersion(%s, &%s, &%s);\n",
|
||||
errorCodeName_.string(), objName.string(), objName.string(), SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("HDF_LOGE(\"%{public}s: get version failed!\", __func__);\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("if (%s != %s) {\n", SerMajorName.string(), majorVerName_.string());
|
||||
@@ -509,7 +509,7 @@ void CClientProxyCodeEmitter::EmitCbProxyGetMethodImpl(StringBuilder& sb)
|
||||
sb.Append("version of service:%u.%u, version of client:%u.%u\", __func__,\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append(g_tab).AppendFormat("%s, %s, %s, %s);\n", SerMajorName.string(),
|
||||
SerMinorName.string(), majorVerName_.string(), minorVerName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", baseName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
sb.Append(g_tab).AppendFormat("return %s;\n", objName.string());
|
||||
@@ -518,13 +518,13 @@ void CClientProxyCodeEmitter::EmitCbProxyGetMethodImpl(StringBuilder& sb)
|
||||
|
||||
void CClientProxyCodeEmitter::EmitProxyReleaseMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance)\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance)\n", baseName_.string(), interfaceName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("if (instance == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append("return;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = CONTAINER_OF(instance, struct %sProxy, impl);\n",
|
||||
infName_.string(), infName_.string());
|
||||
baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append("HdfRemoteServiceRecycle(proxy->remote);\n");
|
||||
sb.Append(g_tab).Append("OsalMemFree(proxy);\n");
|
||||
sb.Append("}\n");
|
||||
@@ -532,13 +532,13 @@ void CClientProxyCodeEmitter::EmitProxyReleaseMethodImpl(StringBuilder& sb)
|
||||
|
||||
void CClientProxyCodeEmitter::EmitKernelProxyReleaseMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance)\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance)\n", baseName_.string(), interfaceName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("if (instance == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append("return;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %sProxy *proxy = CONTAINER_OF(instance, struct %sProxy, impl);\n",
|
||||
infName_.string(), infName_.string());
|
||||
baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append("HdfIoServiceRecycle(proxy->serv);\n");
|
||||
sb.Append(g_tab).Append("OsalMemFree(proxy);\n");
|
||||
sb.Append("}\n");
|
||||
|
||||
@@ -14,54 +14,12 @@
|
||||
|
||||
namespace OHOS {
|
||||
namespace HDI {
|
||||
String CCodeEmitter::FileName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
String subName = Options::GetInstance().GetSubPackage(name);
|
||||
StringBuilder sb;
|
||||
for (int i = 0; i < subName.GetLength(); i++) {
|
||||
char c = subName[i];
|
||||
if (isupper(c) != 0) {
|
||||
// 2->Index of the last char array.
|
||||
if (i > 1 && subName[i - 1] != '.' && subName[i - 2] != '.') {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(tolower(c));
|
||||
} else {
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString().Replace('.', '/');
|
||||
}
|
||||
|
||||
String CCodeEmitter::EmitMethodCmdID(const AutoPtr<ASTMethod>& method)
|
||||
{
|
||||
return String::Format("CMD_%s_%s", infName_.ToUnderLineUpper().string(),
|
||||
method->GetName().ToUnderLineUpper().string());
|
||||
}
|
||||
|
||||
void CCodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb)
|
||||
{
|
||||
sb.Append("enum {\n");
|
||||
for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(g_tab).Append(EmitMethodCmdID(method)).Append(",\n");
|
||||
}
|
||||
|
||||
sb.Append(g_tab).Append(EmitMethodCmdID(interface_->GetVersionMethod())).Append(",\n");
|
||||
sb.Append("};\n");
|
||||
}
|
||||
|
||||
void CCodeEmitter::GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles)
|
||||
{
|
||||
for (const auto& importPair : ast_->GetImports()) {
|
||||
AutoPtr<AST> importAst = importPair.second;
|
||||
String fileName = FileName(importAst->GetFullName());
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName())));
|
||||
String fileName = PackageToFilePath(importAst->GetFullName());
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, fileName));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,29 +104,6 @@ String CCodeEmitter::MacroName(const String& name)
|
||||
return macro;
|
||||
}
|
||||
|
||||
String CCodeEmitter::ConstantName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (isupper(c) != 0) {
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
sb.Append(toupper(c));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String CCodeEmitter::SpecificationParam(StringBuilder& paramSb, const String& prefix)
|
||||
{
|
||||
int maxLineLen = 120;
|
||||
|
||||
@@ -20,13 +20,7 @@ namespace HDI {
|
||||
class CCodeEmitter : public CodeEmitter {
|
||||
public:
|
||||
virtual ~CCodeEmitter() = default;
|
||||
|
||||
static String FileName(const String& name);
|
||||
protected:
|
||||
String EmitMethodCmdID(const AutoPtr<ASTMethod>& method);
|
||||
|
||||
void EmitInterfaceMethodCommands(StringBuilder& sb);
|
||||
|
||||
void GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles);
|
||||
|
||||
void EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& parameter, StringBuilder& sb, const String& prefix);
|
||||
|
||||
@@ -36,12 +36,12 @@ void CCustomTypesCodeEmitter::EmitCode()
|
||||
|
||||
void CCustomTypesCodeEmitter::EmitCustomTypesHeaderFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(infName_).string());
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(baseName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
EmitLicense(sb);
|
||||
EmitHeadMacro(sb, infName_);
|
||||
EmitHeadMacro(sb, baseName_);
|
||||
sb.Append("\n");
|
||||
EmitHeaderInclusions(sb);
|
||||
sb.Append("\n");
|
||||
@@ -53,7 +53,7 @@ void CCustomTypesCodeEmitter::EmitCustomTypesHeaderFile()
|
||||
sb.Append("\n");
|
||||
EmitTailExternC(sb);
|
||||
sb.Append("\n");
|
||||
EmitTailMacro(sb, infName_);
|
||||
EmitTailMacro(sb, baseName_);
|
||||
|
||||
String data = sb.ToString();
|
||||
file.WriteData(data.string(), data.GetLength());
|
||||
@@ -160,7 +160,7 @@ void CCustomTypesCodeEmitter::EmitCustomTypeFreeDecl(StringBuilder& sb,
|
||||
|
||||
void CCustomTypesCodeEmitter::EmitCustomTypesSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(infName_).string());
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(baseName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -178,7 +178,7 @@ void CCustomTypesCodeEmitter::EmitCustomTypesSourceFile()
|
||||
void CCustomTypesCodeEmitter::EmitSoucreIncludsions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(infName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(baseName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
|
||||
@@ -51,7 +51,7 @@ void CInterfaceCodeEmitter::EmitInterfaceHeaderFile()
|
||||
sb.Append("\n");
|
||||
EmitInterfaceVersionMacro(sb);
|
||||
sb.Append("\n");
|
||||
EmitInterfaceMethodCommands(sb);
|
||||
EmitInterfaceMethodCommands(sb, "");
|
||||
sb.Append("\n");
|
||||
EmitInterfaceDefinition(sb);
|
||||
sb.Append("\n");
|
||||
@@ -153,17 +153,17 @@ void CInterfaceCodeEmitter::EmitAsObjectMethod(StringBuilder& sb, const String&
|
||||
void CInterfaceCodeEmitter::EmitInterfaceGetMethodDecl(StringBuilder& sb)
|
||||
{
|
||||
String methodParamStr = isCallbackInterface() ? "struct HdfRemoteService *remote" : "void";
|
||||
sb.AppendFormat("struct %s *%sGet(%s);\n", interfaceName_.string(), infName_.string(), methodParamStr.string());
|
||||
sb.AppendFormat("struct %s *%sGet(%s);\n", interfaceName_.string(), baseName_.string(), methodParamStr.string());
|
||||
if (!isCallbackInterface()) {
|
||||
sb.Append("\n");
|
||||
sb.AppendFormat("struct %s *%sGetInstance(const char *instanceName);\n",
|
||||
interfaceName_.string(), infName_.string());
|
||||
interfaceName_.string(), baseName_.string());
|
||||
}
|
||||
}
|
||||
|
||||
void CInterfaceCodeEmitter::EmitInterfaceReleaseMethodDecl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance);\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sRelease(struct %s *instance);\n", baseName_.string(), interfaceName_.string());
|
||||
}
|
||||
} // namespace HDI
|
||||
} // namespace OHOS
|
||||
@@ -38,7 +38,7 @@ void CServiceDriverCodeEmitter::EmitCode()
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(infName_ + "Driver").string());
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(baseName_ + "Driver").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -67,8 +67,8 @@ void CServiceDriverCodeEmitter::EmitDriverIncluions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(stubName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(implName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(stubName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(implName_)));
|
||||
GetDriverSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -86,7 +86,7 @@ void CServiceDriverCodeEmitter::GetDriverSourceOtherLibInclusions(HeaderFile::He
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct Hdf%sHost {\n", infName_.string());
|
||||
sb.AppendFormat("struct Hdf%sHost {\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct IDeviceIoService ioservice;\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %s *service;\n", interfaceName_.string());
|
||||
sb.Append("};\n");
|
||||
@@ -94,56 +94,56 @@ void CServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb)
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverDispatch(StringBuilder& sb)
|
||||
{
|
||||
String hostName = infName_.ToLowerCase() + "Host";
|
||||
String hostName = baseName_.ToLowerCase() + "Host";
|
||||
sb.AppendFormat("static int32_t %sDriverDispatch(struct HdfDeviceIoClient *client, int cmdId,\n",
|
||||
infName_.string());
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).Append("struct HdfSBuf *data, struct HdfSBuf *reply)\n");
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(\n",
|
||||
infName_.string(), hostName.string());
|
||||
baseName_.string(), hostName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("client->device->service, struct Hdf%sHost, ioservice);\n",
|
||||
infName_.string());
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("return %sServiceOnRemoteRequest(%s->service, cmdId, data, reply);\n",
|
||||
infName_.string(), hostName.string());
|
||||
baseName_.string(), hostName.string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverInit(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("int Hdf%sDriverInit(struct HdfDeviceObject *deviceObject)\n", infName_.string());
|
||||
sb.AppendFormat("int Hdf%sDriverInit(struct HdfDeviceObject *deviceObject)\n", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverInit enter.\");\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverInit enter.\");\n", baseName_.string());
|
||||
sb.Append(g_tab).Append("return HDF_SUCCESS;\n");
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverBind(StringBuilder& sb)
|
||||
{
|
||||
String hostName = infName_.ToLowerCase() + "Host";
|
||||
sb.AppendFormat("int Hdf%sDriverBind(struct HdfDeviceObject *deviceObject)\n", infName_.string());
|
||||
String hostName = baseName_.ToLowerCase() + "Host";
|
||||
sb.AppendFormat("int Hdf%sDriverBind(struct HdfDeviceObject *deviceObject)\n", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverBind enter.\");\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverBind enter.\");\n", baseName_.string());
|
||||
sb.Append("\n");
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = (struct Hdf%sHost *)OsalMemAlloc(\n",
|
||||
infName_.string(), hostName.string(), infName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("sizeof(struct Hdf%sHost));\n", infName_.string());
|
||||
baseName_.string(), hostName.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("sizeof(struct Hdf%sHost));\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s == NULL) {\n", hostName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"Hdf%sDriverBind OsalMemAlloc Hdf%sHost failed!\");\n", infName_.string(), infName_.string());
|
||||
"HDF_LOGE(\"Hdf%sDriverBind OsalMemAlloc Hdf%sHost failed!\");\n", baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return HDF_FAILURE;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append("\n");
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Dispatch = %sDriverDispatch;\n",
|
||||
hostName.string(), infName_.string());
|
||||
hostName.string(), baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Open = NULL;\n", hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Release = NULL;\n", hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->service = %sStubGetInstance();\n", hostName.string(), infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->service = %sStubGetInstance();\n", hostName.string(), baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s->service == NULL) {\n", hostName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("OsalMemFree(%s);\n", hostName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return HDF_FAILURE;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append("\n");
|
||||
sb.Append(g_tab).AppendFormat("%sServiceConstruct(%s->service);\n", infName_.string(), hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("%sServiceConstruct(%s->service);\n", baseName_.string(), hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("deviceObject->service = &%s->ioservice;\n", hostName.string());
|
||||
sb.Append(g_tab).Append("return HDF_SUCCESS;\n");
|
||||
sb.Append("}\n");
|
||||
@@ -151,29 +151,29 @@ void CServiceDriverCodeEmitter::EmitDriverBind(StringBuilder& sb)
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverRelease(StringBuilder& sb)
|
||||
{
|
||||
String hostName = infName_.ToLowerCase() + "Host";
|
||||
sb.AppendFormat("void Hdf%sDriverRelease(struct HdfDeviceObject *deviceObject)\n", infName_.string());
|
||||
String hostName = baseName_.ToLowerCase() + "Host";
|
||||
sb.AppendFormat("void Hdf%sDriverRelease(struct HdfDeviceObject *deviceObject)\n", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverRelease enter.\");\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", infName_.string(), hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverRelease enter.\");\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", baseName_.string(), hostName.string());
|
||||
sb.AppendFormat("deviceObject->service, struct Hdf%sHost, ioservice);\n",
|
||||
infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%sStubRelease(%s->service);\n", infName_.string(), hostName.string());
|
||||
baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%sStubRelease(%s->service);\n", baseName_.string(), hostName.string());
|
||||
sb.Append(g_tab).AppendFormat("OsalMemFree(%s);\n", hostName.string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
void CServiceDriverCodeEmitter::EmitDriverEntryDefinition(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", infName_.ToLowerCase().string());
|
||||
sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", baseName_.ToLowerCase().string());
|
||||
sb.Append(g_tab).Append(".moduleVersion = 1,\n");
|
||||
sb.Append(g_tab).AppendFormat(".moduleName = \"%s\",\n",
|
||||
Options::GetInstance().GetModuleName().string());
|
||||
sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", baseName_.string());
|
||||
sb.Append("};\n\n");
|
||||
sb.AppendFormat("HDF_INIT(g_%sDriverEntry);", infName_.ToLowerCase().string());
|
||||
sb.AppendFormat("HDF_INIT(g_%sDriverEntry);", baseName_.ToLowerCase().string());
|
||||
}
|
||||
} // namespace HDI
|
||||
} // namespace OHOS
|
||||
@@ -37,7 +37,7 @@ void CServiceImplCodeEmitter::EmitCode()
|
||||
|
||||
void CServiceImplCodeEmitter::EmitServiceImplHeaderFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(infName_ + "Service").string());
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(baseName_ + "Service").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -64,7 +64,7 @@ void CServiceImplCodeEmitter::EmitServiceImplHeaderInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(interfaceName_)));
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
sb.AppendFormat("%s\n", file.ToString().string());
|
||||
@@ -73,12 +73,12 @@ void CServiceImplCodeEmitter::EmitServiceImplHeaderInclusions(StringBuilder& sb)
|
||||
|
||||
void CServiceImplCodeEmitter::EmitServiceImplConstructDecl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("void %sServiceConstruct(struct %s* service);\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sServiceConstruct(struct %s* service);\n", baseName_.string(), interfaceName_.string());
|
||||
}
|
||||
|
||||
void CServiceImplCodeEmitter::EmitServiceImplSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(infName_ + "Service").string());
|
||||
String filePath = String::Format("%s/%s.c", directory_.string(), FileName(baseName_ + "Service").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -99,7 +99,7 @@ void CServiceImplCodeEmitter::EmitServiceImplSourceInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(implName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(implName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -131,11 +131,11 @@ void CServiceImplCodeEmitter::EmitServiceImplMethodImpl(const AutoPtr<ASTMethod>
|
||||
{
|
||||
if (method->GetParameterNumber() == 0) {
|
||||
sb.Append(prefix).AppendFormat("int32_t %s%s(struct %s *self)\n",
|
||||
infName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
baseName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
} else {
|
||||
StringBuilder paramStr;
|
||||
paramStr.Append(prefix).AppendFormat("int32_t %s%s(struct %s *self, ",
|
||||
infName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
baseName_.string(), method->GetName().string(), interfaceName_.string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
EmitInterfaceMethodParameter(param, paramStr, "");
|
||||
@@ -158,12 +158,12 @@ void CServiceImplCodeEmitter::EmitServiceImplConstruct(StringBuilder& sb)
|
||||
{
|
||||
String objName("instance");
|
||||
sb.AppendFormat("void %sServiceConstruct(struct %s *%s)\n",
|
||||
infName_.string(), interfaceName_.string(), objName.string());
|
||||
baseName_.string(), interfaceName_.string(), objName.string());
|
||||
sb.Append("{\n");
|
||||
for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(g_tab).AppendFormat("%s->%s = %s%s;\n",
|
||||
objName.string(), method->GetName().string(), infName_.string(), method->GetName().string());
|
||||
objName.string(), method->GetName().string(), baseName_.string(), method->GetName().string());
|
||||
}
|
||||
sb.Append("}");
|
||||
}
|
||||
|
||||
@@ -65,7 +65,8 @@ void CServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf"));
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
sb.AppendFormat("%s\n", file.ToString().string());
|
||||
@@ -75,14 +76,14 @@ void CServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb)
|
||||
void CServiceStubCodeEmitter::EmitCbServiceStubMethodsDcl(StringBuilder& sb)
|
||||
{
|
||||
if (!isCallbackInterface()) {
|
||||
sb.AppendFormat("int32_t %sServiceOnRemoteRequest(struct %s *serviceImpl, ", infName_.string(),
|
||||
sb.AppendFormat("int32_t %sServiceOnRemoteRequest(struct %s *serviceImpl, ", baseName_.string(),
|
||||
interfaceName_.string());
|
||||
sb.Append("int cmdId, struct HdfSBuf *data, struct HdfSBuf *reply);\n");
|
||||
sb.Append("\n");
|
||||
}
|
||||
sb.AppendFormat("struct %s* %sStubGetInstance(void);\n", interfaceName_.string(), infName_.string());
|
||||
sb.AppendFormat("struct %s* %sStubGetInstance(void);\n", interfaceName_.string(), baseName_.string());
|
||||
sb.Append("\n");
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *instance);\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *instance);\n", baseName_.string(), interfaceName_.string());
|
||||
}
|
||||
|
||||
void CServiceStubCodeEmitter::EmitServiceStubSourceFile()
|
||||
@@ -133,18 +134,7 @@ void CServiceStubCodeEmitter::EmitStubSourceInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_)));
|
||||
|
||||
if (!isKernelCode_ && !isCallbackInterface()) {
|
||||
for (const auto& importPair : ast_->GetImports()) {
|
||||
AutoPtr<AST> importAst = importPair.second;
|
||||
if (importAst->GetASTFileType() == ASTFileType::AST_ICALLBACK) {
|
||||
String fileName = FileName(importAst->GetInterfaceDef()->GetFullName());
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(stubName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -171,13 +161,12 @@ void CServiceStubCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFile
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_device_desc"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem"));
|
||||
}
|
||||
|
||||
void CServiceStubCodeEmitter::EmitStubDefinitions(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct %sStub {\n", infName_.string());
|
||||
sb.AppendFormat("struct %sStub {\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct %s impl;\n", interfaceName_.string());
|
||||
sb.Append(g_tab).Append("struct HdfRemoteService *remote;\n");
|
||||
sb.Append(g_tab).Append("struct HdfRemoteDispatcher dispatcher;\n");
|
||||
@@ -405,7 +394,7 @@ void CServiceStubCodeEmitter::EmitStubAsObjectMethodImpl(StringBuilder& sb, cons
|
||||
{
|
||||
String objName = "self";
|
||||
sb.Append(prefix).AppendFormat("static struct HdfRemoteService *%sStubAsObject(struct %s *%s)\n",
|
||||
infName_.string(), interfaceName_.string(), objName.string());
|
||||
baseName_.string(), interfaceName_.string(), objName.string());
|
||||
sb.Append(prefix).Append("{\n");
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s == NULL) {\n", objName.string());
|
||||
@@ -413,7 +402,7 @@ void CServiceStubCodeEmitter::EmitStubAsObjectMethodImpl(StringBuilder& sb, cons
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat("struct %sStub *stub = CONTAINER_OF(%s, struct %sStub, impl);\n",
|
||||
infName_.string(), objName.string(), infName_.string());
|
||||
baseName_.string(), objName.string(), baseName_.string());
|
||||
sb.Append(prefix + g_tab).Append("return stub->remote;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
@@ -456,7 +445,7 @@ void CServiceStubCodeEmitter::EmitServiceStubOnRequestMethodImpl(StringBuilder&
|
||||
String implName = "serviceImpl";
|
||||
String codeName = "cmdId";
|
||||
sb.Append(prefix).AppendFormat("int32_t %sServiceOnRemoteRequest(struct %s *%s, int %s, ",
|
||||
infName_.string(), interfaceName_.string(), implName.string(), codeName.string());
|
||||
baseName_.string(), interfaceName_.string(), implName.string(), codeName.string());
|
||||
sb.Append("struct HdfSBuf *data, struct HdfSBuf *reply)\n");
|
||||
sb.Append(prefix).Append("{\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("switch (%s) {\n", codeName.string());
|
||||
@@ -484,10 +473,10 @@ void CServiceStubCodeEmitter::EmitServiceStubOnRequestMethodImpl(StringBuilder&
|
||||
|
||||
void CServiceStubCodeEmitter::EmitStubGetMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
String stubTypeName = String::Format("%sStub", infName_.string());
|
||||
String stubTypeName = String::Format("%sStub", baseName_.string());
|
||||
String objName = "stub";
|
||||
|
||||
sb.AppendFormat("struct %s *%sStubGetInstance(void)\n", interfaceName_.string(), infName_.string());
|
||||
sb.AppendFormat("struct %s *%sStubGetInstance(void)\n", interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %s *%s = (struct %s *)OsalMemAlloc(sizeof(struct %s));\n",
|
||||
stubTypeName.string(), objName.string(), stubTypeName.string(), stubTypeName.string());
|
||||
@@ -507,7 +496,7 @@ void CServiceStubCodeEmitter::EmitStubGetMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
|
||||
sb.Append(g_tab).AppendFormat("%s->impl.AsObject = %sStubAsObject;\n", objName.string(), infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->impl.AsObject = %sStubAsObject;\n", objName.string(), baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("return &%s->impl;\n", objName.string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
@@ -515,7 +504,7 @@ void CServiceStubCodeEmitter::EmitStubGetMethodImpl(StringBuilder& sb)
|
||||
void CServiceStubCodeEmitter::EmitKernelStubGetMethodImpl(StringBuilder& sb)
|
||||
{
|
||||
String objName("instance");
|
||||
sb.AppendFormat("struct %s *%sStubGetInstance(void)\n", interfaceName_.string(), infName_.string());
|
||||
sb.AppendFormat("struct %s *%sStubGetInstance(void)\n", interfaceName_.string(), baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("struct %s *%s = (struct %s*)OsalMemAlloc(sizeof(struct %s));\n",
|
||||
interfaceName_.string(), objName.string(), interfaceName_.string(), interfaceName_.string());
|
||||
@@ -532,7 +521,7 @@ void CServiceStubCodeEmitter::EmitKernelStubGetMethodImpl(StringBuilder& sb)
|
||||
void CServiceStubCodeEmitter::EmitStubReleaseImpl(StringBuilder& sb)
|
||||
{
|
||||
String objName = "instance";
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *%s)\n", infName_.string(), interfaceName_.string(),
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *%s)\n", baseName_.string(), interfaceName_.string(),
|
||||
objName.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("if (%s == NULL) {\n", objName.string());
|
||||
@@ -546,7 +535,7 @@ void CServiceStubCodeEmitter::EmitStubReleaseImpl(StringBuilder& sb)
|
||||
|
||||
void CServiceStubCodeEmitter::EmitKernelStubReleaseImpl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *instance)\n", infName_.string(), interfaceName_.string());
|
||||
sb.AppendFormat("void %sStubRelease(struct %s *instance)\n", baseName_.string(), interfaceName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).Append("if (instance == NULL) {\n");
|
||||
sb.Append(g_tab).Append(g_tab).Append("return;\n");
|
||||
|
||||
@@ -36,23 +36,23 @@ bool CodeEmitter::Reset(const AutoPtr<AST>& ast, const String& targetDirectory,
|
||||
interface_ = ast_->GetInterfaceDef();
|
||||
interfaceName_ = interface_->GetName();
|
||||
interfaceFullName_ = interface_->GetNamespace()->ToString() + interfaceName_;
|
||||
infName_ = interfaceName_.StartsWith("I") ? interfaceName_.Substring(1) : interfaceName_;
|
||||
proxyName_ = infName_ + "Proxy";
|
||||
baseName_ = interfaceName_.StartsWith("I") ? interfaceName_.Substring(1) : interfaceName_;
|
||||
proxyName_ = baseName_ + "Proxy";
|
||||
proxyFullName_ = interface_->GetNamespace()->ToString() + proxyName_;
|
||||
|
||||
stubName_ = infName_ + "Stub";
|
||||
stubName_ = baseName_ + "Stub";
|
||||
stubFullName_ = interface_->GetNamespace()->ToString() + stubName_;
|
||||
|
||||
implName_ = infName_ + "Service";
|
||||
implName_ = baseName_ + "Service";
|
||||
implFullName_ = interface_->GetNamespace()->ToString() + implName_;
|
||||
} else if (ast_->GetASTFileType() == ASTFileType::AST_TYPES) {
|
||||
infName_ = ast_->GetName();
|
||||
baseName_ = ast_->GetName();
|
||||
}
|
||||
|
||||
majorVerName_ = String::Format("%s_MAJOR_VERSION", interfaceName_.ToUnderLineUpper().string());
|
||||
minorVerName_ = String::Format("%s_MINOR_VERSION", interfaceName_.ToUnderLineUpper().string());
|
||||
majorVerName_ = String::Format("%s_MAJOR_VERSION", ConstantName(interfaceName_).string());
|
||||
minorVerName_ = String::Format("%s_MINOR_VERSION", ConstantName(interfaceName_).string());
|
||||
|
||||
String prefix = String::Format("%c%s", tolower(infName_[0]), infName_.Substring(1).string());
|
||||
String prefix = String::Format("%c%s", tolower(baseName_[0]), baseName_.Substring(1).string());
|
||||
dataParcelName_ = prefix + "Data";
|
||||
replyParcelName_ = prefix + "Reply";
|
||||
optionName_ = prefix + "Option";
|
||||
@@ -73,7 +73,7 @@ void CodeEmitter::CleanData()
|
||||
directory_ = "";
|
||||
interfaceName_ = "";
|
||||
interfaceFullName_ = "";
|
||||
infName_ = "";
|
||||
baseName_ = "";
|
||||
proxyName_ = "";
|
||||
proxyFullName_ = "";
|
||||
stubName_ = "";
|
||||
@@ -97,5 +97,117 @@ String CodeEmitter::GetFilePath(const String& outDir)
|
||||
return String::Format("%s/%s/", outPath.string(), packagePath.string());
|
||||
}
|
||||
}
|
||||
|
||||
String CodeEmitter::PackageToFilePath(const String& packageName)
|
||||
{
|
||||
std::vector<String> packageVec = Options::GetInstance().GetSubPackage(packageName).Split(".");
|
||||
StringBuilder filePath;
|
||||
for (auto iter = packageVec.begin(); iter != packageVec.end(); iter++) {
|
||||
filePath.Append(FileName(*iter));
|
||||
if (iter != packageVec.end() - 1) {
|
||||
filePath.Append("/");
|
||||
}
|
||||
}
|
||||
|
||||
return filePath.ToString();
|
||||
}
|
||||
|
||||
String CodeEmitter::EmitMethodCmdID(const AutoPtr<ASTMethod>& method)
|
||||
{
|
||||
return String::Format("CMD_%s_%s", ConstantName(baseName_).string(),
|
||||
ConstantName(method->GetName()).string());
|
||||
}
|
||||
|
||||
void CodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("enum {\n");
|
||||
for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(prefix + g_tab).Append(EmitMethodCmdID(method)).Append(",\n");
|
||||
}
|
||||
|
||||
sb.Append(prefix + g_tab).Append(EmitMethodCmdID(interface_->GetVersionMethod())).Append(",\n");
|
||||
sb.Append(prefix).Append("};\n");
|
||||
}
|
||||
|
||||
String CodeEmitter::EmitVersionHeaderName(const String& name)
|
||||
{
|
||||
return String::Format("v%u_%u/%s", ast_->GetMajorVer(), ast_->GetMinorVer(), FileName(name).string());
|
||||
}
|
||||
|
||||
String CodeEmitter::ConstantName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (isupper(c) != 0) {
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
sb.Append(toupper(c));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String CodeEmitter::PascalName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (i == 0) {
|
||||
if (islower(c)) {
|
||||
c = toupper(c);
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
if (c == '_') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (islower(c) && name[i - 1] == '_') {
|
||||
c = toupper(c);
|
||||
}
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String CodeEmitter::FileName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (isupper(c) != 0) {
|
||||
// 2->Index of the last char array.
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(tolower(c));
|
||||
} else {
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
} // namespace HDI
|
||||
} // namespace OHOS
|
||||
@@ -81,6 +81,29 @@ protected:
|
||||
|
||||
String GetFilePath(const String& outDir);
|
||||
|
||||
String PackageToFilePath(const String& packageName);
|
||||
|
||||
String EmitMethodCmdID(const AutoPtr<ASTMethod>& method);
|
||||
|
||||
void EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix);
|
||||
|
||||
/* ForExample:
|
||||
* MajorVersion: 1
|
||||
* MinorVersion: 0
|
||||
* name: IFoo
|
||||
* result: v1_0/ifoo.h
|
||||
*/
|
||||
String EmitVersionHeaderName(const String& name);
|
||||
|
||||
// file_name -> FILE_NAME
|
||||
String ConstantName(const String& name);
|
||||
|
||||
// file_name -> FileName
|
||||
String PascalName(const String& name);
|
||||
|
||||
// FileName -> file_name
|
||||
String FileName(const String& name);
|
||||
|
||||
bool isKernelCode_ = false;
|
||||
AutoPtr<AST> ast_ = nullptr;
|
||||
AutoPtr<ASTInterfaceType> interface_ = nullptr;
|
||||
@@ -88,7 +111,7 @@ protected:
|
||||
|
||||
String interfaceName_;
|
||||
String interfaceFullName_;
|
||||
String infName_;
|
||||
String baseName_;
|
||||
String proxyName_;
|
||||
String proxyFullName_;
|
||||
String stubName_;
|
||||
|
||||
@@ -37,7 +37,7 @@ void CppClientProxyCodeEmitter::EmitCode()
|
||||
|
||||
void CppClientProxyCodeEmitter::EmitProxyHeaderFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(infName_ + "Proxy").string());
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(baseName_ + "Proxy").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -64,7 +64,7 @@ void CppClientProxyCodeEmitter::EmitProxyHeaderInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(interfaceName_)));
|
||||
GetHeaderOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -146,7 +146,7 @@ void CppClientProxyCodeEmitter::EmitProxyMethodParameter(const AutoPtr<ASTParame
|
||||
|
||||
void CppClientProxyCodeEmitter::EmitProxySourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(infName_ + "Proxy").string());
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(baseName_ + "Proxy").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -174,7 +174,7 @@ void CppClientProxyCodeEmitter::EmitProxySourceFile()
|
||||
void CppClientProxyCodeEmitter::EmitProxySourceInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(proxyName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(proxyName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
|
||||
@@ -16,77 +16,6 @@
|
||||
|
||||
namespace OHOS {
|
||||
namespace HDI {
|
||||
String CppCodeEmitter::FileName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
String subName = Options::GetInstance().GetSubPackage(name);
|
||||
StringBuilder sb;
|
||||
for (int i = 0; i < subName.GetLength(); i++) {
|
||||
char c = subName[i];
|
||||
if (isupper(c) != 0) {
|
||||
// 2->Index of the last char array.
|
||||
if (i > 1 && subName[i - 1] != '.' && subName[i - 2] != '.') {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(tolower(c));
|
||||
} else {
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString().Replace('.', '/');
|
||||
}
|
||||
|
||||
String CppCodeEmitter::PascalName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (i == 0) {
|
||||
if (islower(c)) {
|
||||
c = toupper(c);
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
if (c == '_') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (islower(c) && name[i - 1] == '_') {
|
||||
c = toupper(c);
|
||||
}
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String CppCodeEmitter::EmitMethodCmdID(const AutoPtr<ASTMethod>& method)
|
||||
{
|
||||
return String::Format("CMD_%s_%s", infName_.ToUnderLineUpper().string(),
|
||||
method->GetName().ToUnderLineUpper().string());
|
||||
}
|
||||
|
||||
void CppCodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("enum {\n");
|
||||
for (size_t i = 0; i < interface_->GetMethodNumber(); i++) {
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(prefix + g_tab).Append(EmitMethodCmdID(method)).Append(",\n");
|
||||
}
|
||||
|
||||
sb.Append(g_tab).Append(EmitMethodCmdID(interface_->GetVersionMethod())).Append(",\n");
|
||||
sb.Append(prefix).Append("};\n");
|
||||
}
|
||||
|
||||
void CppCodeEmitter::GetStdlibInclusions(HeaderFile::HeaderFileSet& headerFiles)
|
||||
{
|
||||
bool includeString = false;
|
||||
@@ -136,8 +65,8 @@ void CppCodeEmitter::GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles)
|
||||
{
|
||||
for (const auto& importPair : ast_->GetImports()) {
|
||||
AutoPtr<AST> importAst = importPair.second;
|
||||
String fileName = FileName(importAst->GetFullName());
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName())));
|
||||
String fileName = PackageToFilePath(importAst->GetFullName());
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, fileName));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,16 +123,21 @@ std::vector<String> CppCodeEmitter::EmitCppNameSpaceVec(const String& namespaceS
|
||||
std::vector<String> namespaceVec = namespaceStr.Split(".");
|
||||
bool findVersion = false;
|
||||
|
||||
for (const auto& nspace : namespaceVec) {
|
||||
String rootPackage = Options::GetInstance().GetRootPackage(namespaceStr);
|
||||
size_t rootPackageNum = rootPackage.Split(".").size();
|
||||
|
||||
for (size_t i = 0; i < namespaceVec.size(); i++) {
|
||||
String name;
|
||||
if (!findVersion && isVersion(nspace)) {
|
||||
name = nspace.Replace('v', 'V');
|
||||
if (i < rootPackageNum) {
|
||||
name = namespaceVec[i].ToUpperCase();
|
||||
} else if (!findVersion && isVersion(namespaceVec[i])) {
|
||||
name = namespaceVec[i].Replace('v', 'V');
|
||||
findVersion = true;
|
||||
} else {
|
||||
if (findVersion) {
|
||||
name = nspace;
|
||||
name = namespaceVec[i];
|
||||
} else {
|
||||
name = PascalName(nspace);
|
||||
name = PascalName(namespaceVec[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,29 +255,6 @@ String CppCodeEmitter::MacroName(const String& name)
|
||||
return macro;
|
||||
}
|
||||
|
||||
String CppCodeEmitter::ConstantName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (isupper(c) != 0) {
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
sb.Append(toupper(c));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String CppCodeEmitter::SpecificationParam(StringBuilder& paramSb, const String& prefix)
|
||||
{
|
||||
int maxLineLen = 120;
|
||||
|
||||
@@ -22,15 +22,7 @@ public:
|
||||
virtual ~CppCodeEmitter() = default;
|
||||
|
||||
bool OutPut(const AutoPtr<AST>& ast, const String& targetDirectory);
|
||||
|
||||
static String FileName(const String& name);
|
||||
|
||||
static String PascalName(const String& name);
|
||||
protected:
|
||||
String EmitMethodCmdID(const AutoPtr<ASTMethod>& method);
|
||||
|
||||
void EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix);
|
||||
|
||||
void GetStdlibInclusions(HeaderFile::HeaderFileSet& headerFiles);
|
||||
|
||||
void GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles);
|
||||
|
||||
@@ -35,9 +35,9 @@ void CppCustomTypesCodeEmitter::EmitCode()
|
||||
|
||||
void CppCustomTypesCodeEmitter::EmitCustomTypesHeaderFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(infName_).string());
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(baseName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
String marcoName = String::Format("%s.%s", ast_->GetPackageName().string(), infName_.string());
|
||||
String marcoName = String::Format("%s.%s", ast_->GetPackageName().string(), baseName_.string());
|
||||
StringBuilder sb;
|
||||
|
||||
EmitLicense(sb);
|
||||
@@ -147,7 +147,7 @@ void CppCustomTypesCodeEmitter::EmitCustomTypeUnmarshallingDecl(StringBuilder& s
|
||||
|
||||
void CppCustomTypesCodeEmitter::EmitCustomTypesSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(infName_).string());
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(baseName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -170,7 +170,7 @@ void CppCustomTypesCodeEmitter::EmitSourceFileInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(infName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(baseName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
|
||||
@@ -38,7 +38,7 @@ void CppServiceDriverCodeEmitter::EmitCode()
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(infName_ + "Driver").string());
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(baseName_ + "Driver").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -74,7 +74,7 @@ void CppServiceDriverCodeEmitter::EmitDriverIncluions(StringBuilder& sb)
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_device_desc"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf_ipc"));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(implName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(implName_)));
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
sb.AppendFormat("%s\n", file.ToString().string());
|
||||
@@ -89,7 +89,7 @@ void CppServiceDriverCodeEmitter::EmitDriverUsings(StringBuilder& sb)
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct Hdf%sHost {\n", infName_.string());
|
||||
sb.AppendFormat("struct Hdf%sHost {\n", baseName_.string());
|
||||
sb.Append(g_tab).Append("struct IDeviceIoService ioservice;\n");
|
||||
sb.Append(g_tab).AppendFormat("%s *service;\n", implName_.string());
|
||||
sb.Append("};\n");
|
||||
@@ -97,13 +97,13 @@ void CppServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb)
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverDispatch(StringBuilder& sb)
|
||||
{
|
||||
String objName = String::Format("hdf%sHost", infName_.string());
|
||||
sb.AppendFormat("static int32_t %sDriverDispatch(", infName_.string());
|
||||
String objName = String::Format("hdf%sHost", baseName_.string());
|
||||
sb.AppendFormat("static int32_t %sDriverDispatch(", baseName_.string());
|
||||
sb.Append("struct HdfDeviceIoClient *client, int cmdId, struct HdfSBuf *data,\n");
|
||||
sb.Append(g_tab).Append("struct HdfSBuf *reply)\n");
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", infName_.string(), objName.string());
|
||||
sb.AppendFormat("client->device->service, struct Hdf%sHost, ioservice);\n\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", baseName_.string(), objName.string());
|
||||
sb.AppendFormat("client->device->service, struct Hdf%sHost, ioservice);\n\n", baseName_.string());
|
||||
|
||||
sb.Append(g_tab).Append("OHOS::MessageParcel *dataParcel = nullptr;\n");
|
||||
sb.Append(g_tab).Append("OHOS::MessageParcel *replyParcel = nullptr;\n");
|
||||
@@ -123,31 +123,31 @@ void CppServiceDriverCodeEmitter::EmitDriverDispatch(StringBuilder& sb)
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverInit(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("int Hdf%sDriverInit(struct HdfDeviceObject *deviceObject)\n", infName_.string());
|
||||
sb.AppendFormat("int Hdf%sDriverInit(struct HdfDeviceObject *deviceObject)\n", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverInit enter\");\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverInit enter\");\n", baseName_.string());
|
||||
sb.Append(g_tab).Append("return HDF_SUCCESS;\n");
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverBind(StringBuilder& sb)
|
||||
{
|
||||
String objName = String::Format("hdf%sHost", infName_.string());
|
||||
sb.AppendFormat("int Hdf%sDriverBind(struct HdfDeviceObject *deviceObject)\n", infName_.string());
|
||||
String objName = String::Format("hdf%sHost", baseName_.string());
|
||||
sb.AppendFormat("int Hdf%sDriverBind(struct HdfDeviceObject *deviceObject)\n", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverBind enter\");\n\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverBind enter\");\n\n", baseName_.string());
|
||||
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = (struct Hdf%sHost *)OsalMemAlloc(\n",
|
||||
infName_.string(), objName.string(), infName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("sizeof(struct Hdf%sHost));\n", infName_.string());
|
||||
baseName_.string(), objName.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("sizeof(struct Hdf%sHost));\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s == nullptr) {\n", objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("HDF_LOGE(\"Hdf%sDriverBind OsalMemAlloc Hdf%sHost failed!\");\n",
|
||||
infName_.string(), infName_.string());
|
||||
baseName_.string(), baseName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return HDF_FAILURE;\n");
|
||||
sb.Append(g_tab).Append("}\n\n");
|
||||
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Dispatch = %sDriverDispatch;\n",
|
||||
objName.string(), infName_.string());
|
||||
objName.string(), baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Open = NULL;\n", objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->ioservice.Release = NULL;\n", objName.string());
|
||||
sb.Append(g_tab).AppendFormat("%s->service = new %s();\n\n", objName.string(), implName_.string());
|
||||
@@ -159,12 +159,12 @@ void CppServiceDriverCodeEmitter::EmitDriverBind(StringBuilder& sb)
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverRelease(StringBuilder& sb)
|
||||
{
|
||||
String objName = String::Format("hdf%sHost", infName_.string());
|
||||
sb.AppendFormat("void Hdf%sDriverRelease(struct HdfDeviceObject *deviceObject)", infName_.string());
|
||||
String objName = String::Format("hdf%sHost", baseName_.string());
|
||||
sb.AppendFormat("void Hdf%sDriverRelease(struct HdfDeviceObject *deviceObject)", baseName_.string());
|
||||
sb.Append("{\n");
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverRelease enter\");\n\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", infName_.string(), objName.string());
|
||||
sb.AppendFormat("deviceObject->service, struct Hdf%sHost, ioservice);\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat("HDF_LOGI(\"Hdf%sDriverRelease enter\");\n\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("struct Hdf%sHost *%s = CONTAINER_OF(", baseName_.string(), objName.string());
|
||||
sb.AppendFormat("deviceObject->service, struct Hdf%sHost, ioservice);\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat("delete %s->service;\n", objName.string());
|
||||
sb.Append(g_tab).AppendFormat("OsalMemFree(%s);\n", objName.string());
|
||||
sb.Append("}\n");
|
||||
@@ -172,19 +172,19 @@ void CppServiceDriverCodeEmitter::EmitDriverRelease(StringBuilder& sb)
|
||||
|
||||
void CppServiceDriverCodeEmitter::EmitDriverEntryDefinition(StringBuilder& sb)
|
||||
{
|
||||
sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", infName_.ToLowerCase().string());
|
||||
sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", baseName_.ToLowerCase().string());
|
||||
sb.Append(g_tab).Append(".moduleVersion = 1,\n");
|
||||
sb.Append(g_tab).AppendFormat(".moduleName = \"%s\",\n",
|
||||
Options::GetInstance().GetModuleName().string());
|
||||
sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", infName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", baseName_.string());
|
||||
sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", baseName_.string());
|
||||
sb.Append("};\n");
|
||||
sb.Append("\n");
|
||||
sb.Append("#ifndef __cplusplus\n");
|
||||
sb.Append("extern \"C\" {\n");
|
||||
sb.Append("#endif\n");
|
||||
sb.AppendFormat("HDF_INIT(g_%sDriverEntry);\n", infName_.ToLowerCase().string());
|
||||
sb.AppendFormat("HDF_INIT(g_%sDriverEntry);\n", baseName_.ToLowerCase().string());
|
||||
sb.Append("#ifndef __cplusplus\n");
|
||||
sb.Append("}\n");
|
||||
sb.Append("#endif\n");
|
||||
|
||||
@@ -37,7 +37,7 @@ void CppServiceImplCodeEmitter::EmitCode()
|
||||
|
||||
void CppServiceImplCodeEmitter::EmitImplHeaderFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(infName_ + "Service").string());
|
||||
String filePath = String::Format("%s/%s.h", directory_.string(), FileName(baseName_ + "Service").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -59,7 +59,7 @@ void CppServiceImplCodeEmitter::EmitImplHeaderFile()
|
||||
void CppServiceImplCodeEmitter::EmitServiceImplInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(stubName_)));
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
sb.AppendFormat("%s\n", file.ToString().string());
|
||||
@@ -70,7 +70,7 @@ void CppServiceImplCodeEmitter::EmitServiceImplDecl(StringBuilder& sb)
|
||||
{
|
||||
EmitBeginNamespace(sb);
|
||||
sb.Append("\n");
|
||||
sb.AppendFormat("class %sService : public %s {\n", infName_.string(), stubName_.string());
|
||||
sb.AppendFormat("class %sService : public %s {\n", baseName_.string(), stubName_.string());
|
||||
sb.Append("public:\n");
|
||||
EmitServiceImplBody(sb, g_tab);
|
||||
sb.Append("};\n");
|
||||
@@ -88,7 +88,7 @@ void CppServiceImplCodeEmitter::EmitServiceImplBody(StringBuilder& sb, const Str
|
||||
|
||||
void CppServiceImplCodeEmitter::EmitServiceImplDestruction(StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("virtual ~%sService() {}\n", infName_.string());
|
||||
sb.Append(prefix).AppendFormat("virtual ~%sService() {}\n", baseName_.string());
|
||||
}
|
||||
|
||||
void CppServiceImplCodeEmitter::EmitServiceImplMethodDecls(StringBuilder& sb, const String& prefix)
|
||||
@@ -127,7 +127,7 @@ void CppServiceImplCodeEmitter::EmitServiceImplMethodDecl(const AutoPtr<ASTMetho
|
||||
|
||||
void CppServiceImplCodeEmitter::EmitImplSourceFile()
|
||||
{
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(infName_ + "Service").string());
|
||||
String filePath = String::Format("%s/%s.cpp", directory_.string(), FileName(baseName_ + "Service").string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
@@ -149,7 +149,7 @@ void CppServiceImplCodeEmitter::EmitImplSourceFile()
|
||||
void CppServiceImplCodeEmitter::EmitImplSourceInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(implName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(implName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base"));
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -177,10 +177,10 @@ void CppServiceImplCodeEmitter::EmitServiceImplMethodImpl(const AutoPtr<ASTMetho
|
||||
const String& prefix)
|
||||
{
|
||||
if (method->GetParameterNumber() == 0) {
|
||||
sb.Append(prefix).AppendFormat("int32_t %sService::%s()\n", infName_.string(), method->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("int32_t %sService::%s()\n", baseName_.string(), method->GetName().string());
|
||||
} else {
|
||||
StringBuilder paramStr;
|
||||
paramStr.Append(prefix).AppendFormat("int32_t %sService::%s(", infName_.string(), method->GetName().string());
|
||||
paramStr.Append(prefix).AppendFormat("int32_t %sService::%s(", baseName_.string(), method->GetName().string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
EmitInterfaceMethodParameter(param, paramStr, "");
|
||||
|
||||
@@ -60,7 +60,7 @@ void CppServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, EmitVersionHeaderName(interfaceName_)));
|
||||
GetHeaderOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -183,7 +183,7 @@ void CppServiceStubCodeEmitter::EmitStubSourceFile()
|
||||
void CppServiceStubCodeEmitter::EmitStubSourceInclusions(StringBuilder& sb)
|
||||
{
|
||||
HeaderFile::HeaderFileSet headerFiles;
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_)));
|
||||
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, EmitVersionHeaderName(stubName_)));
|
||||
GetSourceOtherLibInclusions(headerFiles);
|
||||
|
||||
for (const auto& file : headerFiles) {
|
||||
@@ -222,13 +222,13 @@ void CppServiceStubCodeEmitter::EmitStubOnRequestMethodImpl(StringBuilder& sb, c
|
||||
AutoPtr<ASTMethod> method = interface_->GetMethod(i);
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("case %s:\n", EmitMethodCmdID(method).string());
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat("return %sStub%s(data, reply, option);\n",
|
||||
infName_.string(), method->GetName().string());
|
||||
baseName_.string(), method->GetName().string());
|
||||
}
|
||||
|
||||
AutoPtr<ASTMethod> getVerMethod = interface_->GetVersionMethod();
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("case %s:\n", EmitMethodCmdID(getVerMethod).string());
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat("return %sStub%s(data, reply, option);\n",
|
||||
infName_.string(), getVerMethod->GetName().string());
|
||||
baseName_.string(), getVerMethod->GetName().string());
|
||||
|
||||
sb.Append(prefix + g_tab + g_tab).Append("default: {\n");
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).Append(
|
||||
@@ -243,7 +243,7 @@ void CppServiceStubCodeEmitter::EmitStubOnRequestMethodImpl(StringBuilder& sb, c
|
||||
void CppServiceStubCodeEmitter::EmitGetVersionMethodImpl(StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
AutoPtr<ASTMethod> method = interface_->GetVersionMethod();
|
||||
sb.Append(prefix).AppendFormat("int32_t %sStub::%s(", infName_.string(), method->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("int32_t %sStub::%s(", baseName_.string(), method->GetName().string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
EmitInterfaceMethodParameter(param, sb, "");
|
||||
|
||||
@@ -15,12 +15,9 @@ namespace OHOS {
|
||||
namespace HDI {
|
||||
bool JavaClientInterfaceCodeEmitter::ResolveDirectory(const String& targetDirectory)
|
||||
{
|
||||
if (ast_->GetASTFileType() == ASTFileType::AST_IFACE) {
|
||||
directory_ = File::AdapterPath(String::Format("%s/%s/", targetDirectory.string(),
|
||||
FileName(ast_->GetPackageName()).string()));
|
||||
} else if (ast_->GetASTFileType() == ASTFileType::AST_ICALLBACK) {
|
||||
directory_ = File::AdapterPath(String::Format("%s/%s/", targetDirectory.string(),
|
||||
FileName(ast_->GetPackageName()).string()));
|
||||
if (ast_->GetASTFileType() == ASTFileType::AST_IFACE ||
|
||||
ast_->GetASTFileType() == ASTFileType::AST_ICALLBACK) {
|
||||
directory_ = GetFilePath(targetDirectory);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -40,7 +37,7 @@ void JavaClientInterfaceCodeEmitter::EmitCode()
|
||||
|
||||
void JavaClientInterfaceCodeEmitter::EmitInterfaceFile()
|
||||
{
|
||||
String filePath = String::Format("%s%s.java", directory_.string(), FileName(interfaceName_).string());
|
||||
String filePath = String::Format("%s/%s.java", directory_.string(), FileName(interfaceName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
|
||||
@@ -13,12 +13,9 @@ namespace OHOS {
|
||||
namespace HDI {
|
||||
bool JavaClientProxyCodeEmitter::ResolveDirectory(const String& targetDirectory)
|
||||
{
|
||||
if (ast_->GetASTFileType() == ASTFileType::AST_IFACE) {
|
||||
directory_ = File::AdapterPath(String::Format("%s/%s/", targetDirectory.string(),
|
||||
FileName(ast_->GetPackageName()).string()));
|
||||
} else if (ast_->GetASTFileType() == ASTFileType::AST_ICALLBACK) {
|
||||
directory_ = File::AdapterPath(String::Format("%s/%s/", targetDirectory.string(),
|
||||
FileName(ast_->GetPackageName()).string()));
|
||||
if (ast_->GetASTFileType() == ASTFileType::AST_IFACE ||
|
||||
ast_->GetASTFileType() == ASTFileType::AST_ICALLBACK) {
|
||||
directory_ = GetFilePath(targetDirectory);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -38,7 +35,7 @@ void JavaClientProxyCodeEmitter::EmitCode()
|
||||
|
||||
void JavaClientProxyCodeEmitter::EmitProxyFile()
|
||||
{
|
||||
String filePath = String::Format("%s%s.java", directory_.string(), FileName(proxyName_).string());
|
||||
String filePath = String::Format("%s/%s.java", directory_.string(), FileName(proxyName_).string());
|
||||
File file(filePath, File::WRITE);
|
||||
StringBuilder sb;
|
||||
|
||||
|
||||
@@ -13,15 +13,6 @@
|
||||
|
||||
namespace OHOS {
|
||||
namespace HDI {
|
||||
String JavaCodeEmitter::FileName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
return name.Replace('.', '/');
|
||||
}
|
||||
|
||||
void JavaCodeEmitter::EmitLicense(StringBuilder& sb)
|
||||
{
|
||||
if (ast_->GetLicense().IsEmpty()) {
|
||||
@@ -53,29 +44,6 @@ String JavaCodeEmitter::MethodName(const String& name)
|
||||
return String::Format("%c%s", tolower(name[0]), name.Substring(1).string());
|
||||
}
|
||||
|
||||
String JavaCodeEmitter::ConstantName(const String& name)
|
||||
{
|
||||
if (name.IsEmpty()) {
|
||||
return name;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
|
||||
for (int i = 0; i < name.GetLength(); i++) {
|
||||
char c = name[i];
|
||||
if (isupper(c) != 0) {
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
sb.Append(toupper(c));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String JavaCodeEmitter::SpecificationParam(StringBuilder& paramSb, const String& prefix)
|
||||
{
|
||||
int maxLineLen = 120;
|
||||
|
||||
@@ -21,8 +21,6 @@ namespace HDI {
|
||||
class JavaCodeEmitter : public CodeEmitter {
|
||||
public:
|
||||
virtual ~JavaCodeEmitter() = default;
|
||||
|
||||
static String FileName(const String& name);
|
||||
protected:
|
||||
bool CreateDirectory();
|
||||
|
||||
@@ -34,8 +32,6 @@ protected:
|
||||
|
||||
String MethodName(const String& name);
|
||||
|
||||
String ConstantName(const String& name);
|
||||
|
||||
String SpecificationParam(StringBuilder& paramSb, const String& prefix);
|
||||
};
|
||||
} // namespace HDI
|
||||
|
||||
@@ -93,7 +93,6 @@ void SharedData::Release(const void* handle)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
const char* String::TAG = "String";
|
||||
|
||||
String::String(const char* string)
|
||||
@@ -499,29 +498,6 @@ String String::ToUpperCase() const
|
||||
return *this;
|
||||
}
|
||||
|
||||
String String::ToUnderLineUpper() const
|
||||
{
|
||||
if (IsEmpty()) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
StringBuilder sb;
|
||||
|
||||
for (int i = 0; i < GetLength(); i++) {
|
||||
char c = string_[i];
|
||||
if (isupper(c) != 0) {
|
||||
if (i > 1) {
|
||||
sb.Append('_');
|
||||
}
|
||||
sb.Append(c);
|
||||
} else {
|
||||
sb.Append(toupper(c));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
String String::Substring(int begin) const
|
||||
{
|
||||
if (begin < 0 || begin >= GetLength()) {
|
||||
|
||||
@@ -87,8 +87,6 @@ public:
|
||||
|
||||
String ToUpperCase() const;
|
||||
|
||||
String ToUnderLineUpper() const;
|
||||
|
||||
String Substring(int begin) const;
|
||||
|
||||
String Substring(int begin, int end) const;
|
||||
|
||||
Reference in New Issue
Block a user