From 2fcc8c977913ff766919ea9a0694279072121e38 Mon Sep 17 00:00:00 2001 From: Igor Murashkin Date: Mon, 26 Nov 2012 12:01:11 -0800 Subject: Camera: Add a script to generate files from XML: DO NOT MERGE Change-Id: I638017934ddfcfe8ab8f9f56bebb587dae35f17f --- camera/docs/camera_metadata_tag_info.mako | 37 ++++++++++++++++++++++++++ camera/docs/camera_metadata_tags.mako | 32 +---------------------- camera/docs/metadata-generate | 43 +++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 31 deletions(-) create mode 100755 camera/docs/metadata-generate diff --git a/camera/docs/camera_metadata_tag_info.mako b/camera/docs/camera_metadata_tag_info.mako index ab6c4048..13c24db2 100644 --- a/camera/docs/camera_metadata_tag_info.mako +++ b/camera/docs/camera_metadata_tag_info.mako @@ -60,3 +60,40 @@ tag_info_t *tag_info[ANDROID_SECTION_COUNT] = { ${path_name(i) | csyml}, % endfor }; + +int camera_metadata_enum_snprint(uint32_t tag, + uint32_t value, + char *dst, + size_t size) { + const char *msg = "error: not an enum"; + int ret = -1; + + switch(tag) { + % for sec in find_all_sections(metadata): + % for idx,entry in enumerate(find_unique_entries(sec)): + case ${entry.name | csym}: { + % if entry.type == 'enum': + switch (value) { + % for val in entry.enum.values: + case ${entry.name | csym}_${val.name}: + msg = "${val.name}"; + ret = 0; + break; + % endfor + default: + msg = "error: enum value out of range"; + } + % endif + break; + } + % endfor + + %endfor + } + + strncpy(dst, msg, size - 1); + dst[size - 1] = '\0'; + + return ret; +} + diff --git a/camera/docs/camera_metadata_tags.mako b/camera/docs/camera_metadata_tags.mako index d4a5e595..4d7ccfe8 100644 --- a/camera/docs/camera_metadata_tags.mako +++ b/camera/docs/camera_metadata_tags.mako @@ -101,34 +101,4 @@ typedef enum camera_metadata_enum_${csym(entry.name).lower()} { int camera_metadata_enum_snprint(uint32_t tag, uint32_t value, char *dst, - size_t size) { - const char *msg = "error: not an enum"; - int ret = -1; - - switch(tag) { - % for sec in find_all_sections(metadata): - % for idx,entry in enumerate(find_unique_entries(sec)): - case ${entry.name | csym}: { - % if entry.type == 'enum': - switch (value) { - % for val in entry.enum.values: - case ${entry.name | csym}_${val.name}: - msg = "${val.name}"; - ret = 0; - break; - % endfor - default: - msg = "error: enum value out of range"; - } - % endif - break; - } - % endfor - - %endfor - } - - snprintf(dst, size, msg); - return ret; -} - + size_t size); diff --git a/camera/docs/metadata-generate b/camera/docs/metadata-generate new file mode 100755 index 00000000..bf3e3eea --- /dev/null +++ b/camera/docs/metadata-generate @@ -0,0 +1,43 @@ +#!/bin/bash + +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# +# Generate all files we have templates for: +# docs.html +# ../src/camera_metadata_tag_info.c +# ../src/camera_metadata_tags.h +# + +thisdir=$(dirname $(readlink -f $0)) + +function gen_file() { + local in=$thisdir/$1 + local out=$thisdir/$2 + + $thisdir/metadata_parser_xml.py $thisdir/metadata_properties.xml $in > $out + return $? +} + +$thisdir/metadata-parser-sanity-check || exit 1 +gen_file html.mako docs.html || exit 1 +gen_file camera_metadata_tag_info.mako ../src/camera_metadata_tag_info.c || exit 1 +gen_file camera_metadata_tags.mako ../include/system/camera_metadata_tags.h || exit 1 + +echo "Successfully generated all metadata source files" + +exit 0 -- cgit v1.2.3