[libcamera-devel] [RFC 2/6] libcamera: controls: Add 'values' to Control

Jacopo Mondi jacopo at jmondi.org
Tue Nov 19 17:44:17 CET 2019


In preparation to add libcamera Camera properties definition, re-using
the control generation framework, augment the gen_controls.py script to
support parsing possible Control and Properties values defined in the
input yaml file.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/libcamera/gen-controls.py | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/libcamera/gen-controls.py b/src/libcamera/gen-controls.py
index 940386cc68c8..920bb9f350d6 100755
--- a/src/libcamera/gen-controls.py
+++ b/src/libcamera/gen-controls.py
@@ -11,6 +11,24 @@ import string
 import sys
 import yaml
 
+class define:
+    doc_template = string.Template('''/**
+ * \\def ${name}
+ * \\brief ${description} */''')
+    def_template = string.Template('''#define ${name} ${value}''')
+
+    def __init__(self, value):
+        self.info = {
+            'name': value['name'],
+            'value': value['value'],
+            'description': value['description']
+        }
+
+    def dumpDoc(self):
+        return self.doc_template.substitute(self.info)
+
+    def dumpDef(self):
+        return self.def_template.substitute(self.info)
 
 def snake_case(s):
     return ''.join([c.isupper() and ('_' + c) or c for c in s]).strip('_')
@@ -35,14 +53,23 @@ ${description}
         description[0] = '\\brief ' + description[0]
         description = '\n'.join([(line and ' * ' or ' *') + line for line in description])
 
+        try:
+            values = ctrl['values']
+        except KeyError:
+            values = ""
+
         info = {
             'name': name,
             'type': ctrl['type'],
             'description': description,
             'id_name': id_name,
+            'values' : values,
         }
 
+        for v in values:
+            ctrls_doc.append(define(v).dumpDoc())
         ctrls_doc.append(doc_template.substitute(info))
+
         ctrls_def.append(def_template.substitute(info))
         ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },')
 
@@ -66,11 +93,19 @@ def generate_h(controls):
 
         ids.append('\t' + id_name + ' = ' + str(id_value) + ',')
 
+        try:
+            values = ctrl['values']
+        except KeyError:
+            values = ""
+
         info = {
             'name': name,
             'type': ctrl['type'],
+            'values' : values,
         }
 
+        for v in values:
+            ctrls.append(define(v).dumpDef())
         ctrls.append(template.substitute(info))
         id_value += 1
 
-- 
2.23.0



More information about the libcamera-devel mailing list