Message ID | 20201007185719.3208272-2-kieran.bingham@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Kieran On Wed, Oct 07, 2020 at 07:57:18PM +0100, Kieran Bingham wrote: > Extend the control and property framework to support exposing draft > controls and properties in a scoped namespace. > > The controls/properties themselves will retain the same ordering in the > relevant enum/id maps - but the access to any draft control will require > explicitly referencing through its' draft:: namespace prefix. > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Thanks for handling this. I was too lazy to poke with the control generation script :) I'll base my next draft controls version on this patch Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > --- > include/libcamera/control_ids.h.in | 6 +++++ > include/libcamera/property_ids.h.in | 6 +++++ > src/libcamera/property_ids.cpp.in | 13 +++++++++++ > utils/gen-controls.py | 36 ++++++++++++++++++++++------- > 4 files changed, 53 insertions(+), 8 deletions(-) > > diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in > index 95a7a7f1e260..baadca83b103 100644 > --- a/include/libcamera/control_ids.h.in > +++ b/include/libcamera/control_ids.h.in > @@ -26,6 +26,12 @@ ${controls} > > extern const ControlIdMap controls; > > +namespace draft { > + > +${draft_controls} > + > +} /* namespace draft */ > + > } /* namespace controls */ > > } /* namespace libcamera */ > diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in > index e4dea335cd3b..52646c1f78ae 100644 > --- a/include/libcamera/property_ids.h.in > +++ b/include/libcamera/property_ids.h.in > @@ -24,6 +24,12 @@ ${ids} > > ${controls} > > +namespace draft { > + > +${draft_controls} > + > +} /* namespace draft */ > + > extern const ControlIdMap properties; > > } /* namespace properties */ > diff --git a/src/libcamera/property_ids.cpp.in b/src/libcamera/property_ids.cpp.in > index bfdd823f63b0..275c1caff3ec 100644 > --- a/src/libcamera/property_ids.cpp.in > +++ b/src/libcamera/property_ids.cpp.in > @@ -23,12 +23,25 @@ namespace properties { > > ${controls_doc} > > +namespace draft { > + > +${draft_controls_doc} > + > +} /* namespace draft */ > + > #ifndef __DOXYGEN__ > /* > * Keep the properties definitions hidden from doxygen as it incorrectly parses > * them as functions. > */ > ${controls_def} > + > +namespace draft { > + > +${draft_controls_def} > + > +} /* namespace draft */ > + > #endif > > /** > diff --git a/utils/gen-controls.py b/utils/gen-controls.py > index 87c3d52ada6d..f28db27ba19f 100755 > --- a/utils/gen-controls.py > +++ b/utils/gen-controls.py > @@ -36,6 +36,8 @@ ${description} > > ctrls_doc = [] > ctrls_def = [] > + draft_ctrls_doc = [] > + draft_ctrls_def = [] > ctrls_map = [] > > for ctrl in controls: > @@ -55,6 +57,12 @@ ${description} > 'id_name': id_name, > } > > + target_doc = ctrls_doc > + target_def = ctrls_def > + if ctrl.get('draft'): > + target_doc = draft_ctrls_doc > + target_def = draft_ctrls_def > + > enum = ctrl.get('enum') > if enum: > enum_doc = [] > @@ -70,15 +78,21 @@ ${description} > > enum_doc = '\n *\n'.join(enum_doc) > enum_doc += '\n */' > - ctrls_doc.append(enum_doc) > + target_doc.append(enum_doc) > + > + target_doc.append(doc_template.substitute(info)) > + target_def.append(def_template.substitute(info)) > + > + if ctrl.get('draft'): > + name = 'draft::' + name > > - ctrls_doc.append(doc_template.substitute(info)) > - ctrls_def.append(def_template.substitute(info)) > ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },') > > return { > 'controls_doc': '\n\n'.join(ctrls_doc), > 'controls_def': '\n'.join(ctrls_def), > + 'draft_controls_doc': '\n\n'.join(draft_ctrls_doc), > + 'draft_controls_def': '\n\n'.join(draft_ctrls_def), > 'controls_map': '\n'.join(ctrls_map), > } > > @@ -89,6 +103,7 @@ def generate_h(controls): > template = string.Template('''extern const Control<${type}> ${name};''') > > ctrls = [] > + draft_ctrls = [] > ids = [] > id_value = 1 > > @@ -109,22 +124,27 @@ def generate_h(controls): > 'type': ctrl_type, > } > > + target_ctrls = ctrls > + if ctrl.get('draft'): > + target_ctrls = draft_ctrls > + > enum = ctrl.get('enum') > if enum: > - ctrls.append(enum_template_start.substitute(info)) > + target_ctrls.append(enum_template_start.substitute(info)) > > for entry in enum: > value_info = { > 'name': entry['name'], > 'value': entry['value'], > } > - ctrls.append(enum_value_template.substitute(value_info)) > - ctrls.append("};") > + target_ctrls.append(enum_value_template.substitute(value_info)) > + target_ctrls.append("};") > > - ctrls.append(template.substitute(info)) > + target_ctrls.append(template.substitute(info)) > id_value += 1 > > - return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls)} > + return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls), > + 'draft_controls': '\n'.join(draft_ctrls)} > > > def fill_template(template, data): > -- > 2.25.1 >
Hi Kieran, On Wed, Oct 07, 2020 at 07:57:18PM +0100, Kieran Bingham wrote: > Extend the control and property framework to support exposing draft > controls and properties in a scoped namespace. > > The controls/properties themselves will retain the same ordering in the > relevant enum/id maps - but the access to any draft control will require > explicitly referencing through its' draft:: namespace prefix. > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- > include/libcamera/control_ids.h.in | 6 +++++ > include/libcamera/property_ids.h.in | 6 +++++ > src/libcamera/property_ids.cpp.in | 13 +++++++++++ > utils/gen-controls.py | 36 ++++++++++++++++++++++------- > 4 files changed, 53 insertions(+), 8 deletions(-) > > diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in > index 95a7a7f1e260..baadca83b103 100644 > --- a/include/libcamera/control_ids.h.in > +++ b/include/libcamera/control_ids.h.in > @@ -26,6 +26,12 @@ ${controls} > > extern const ControlIdMap controls; > > +namespace draft { > + > +${draft_controls} > + > +} /* namespace draft */ > + > } /* namespace controls */ > > } /* namespace libcamera */ > diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in > index e4dea335cd3b..52646c1f78ae 100644 > --- a/include/libcamera/property_ids.h.in > +++ b/include/libcamera/property_ids.h.in > @@ -24,6 +24,12 @@ ${ids} > > ${controls} > > +namespace draft { > + > +${draft_controls} > + > +} /* namespace draft */ > + > extern const ControlIdMap properties; > > } /* namespace properties */ > diff --git a/src/libcamera/property_ids.cpp.in b/src/libcamera/property_ids.cpp.in > index bfdd823f63b0..275c1caff3ec 100644 > --- a/src/libcamera/property_ids.cpp.in > +++ b/src/libcamera/property_ids.cpp.in > @@ -23,12 +23,25 @@ namespace properties { > > ${controls_doc} > > +namespace draft { > + > +${draft_controls_doc} > + > +} /* namespace draft */ > + > #ifndef __DOXYGEN__ > /* > * Keep the properties definitions hidden from doxygen as it incorrectly parses > * them as functions. > */ > ${controls_def} > + > +namespace draft { > + > +${draft_controls_def} > + > +} /* namespace draft */ > + > #endif > > /** This same hunk shall be applied to control_ids.cpp.in
Hi Jacopo, On 08/10/2020 13:32, Jacopo Mondi wrote: > Hi Kieran, > > On Wed, Oct 07, 2020 at 07:57:18PM +0100, Kieran Bingham wrote: >> Extend the control and property framework to support exposing draft >> controls and properties in a scoped namespace. >> >> The controls/properties themselves will retain the same ordering in the >> relevant enum/id maps - but the access to any draft control will require >> explicitly referencing through its' draft:: namespace prefix. >> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> >> --- >> include/libcamera/control_ids.h.in | 6 +++++ >> include/libcamera/property_ids.h.in | 6 +++++ >> src/libcamera/property_ids.cpp.in | 13 +++++++++++ >> utils/gen-controls.py | 36 ++++++++++++++++++++++------- >> 4 files changed, 53 insertions(+), 8 deletions(-) >> >> diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in >> index 95a7a7f1e260..baadca83b103 100644 >> --- a/include/libcamera/control_ids.h.in >> +++ b/include/libcamera/control_ids.h.in >> @@ -26,6 +26,12 @@ ${controls} >> >> extern const ControlIdMap controls; >> >> +namespace draft { >> + >> +${draft_controls} >> + >> +} /* namespace draft */ >> + >> } /* namespace controls */ >> >> } /* namespace libcamera */ >> diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in >> index e4dea335cd3b..52646c1f78ae 100644 >> --- a/include/libcamera/property_ids.h.in >> +++ b/include/libcamera/property_ids.h.in >> @@ -24,6 +24,12 @@ ${ids} >> >> ${controls} >> >> +namespace draft { >> + >> +${draft_controls} >> + >> +} /* namespace draft */ >> + >> extern const ControlIdMap properties; >> >> } /* namespace properties */ >> diff --git a/src/libcamera/property_ids.cpp.in b/src/libcamera/property_ids.cpp.in >> index bfdd823f63b0..275c1caff3ec 100644 >> --- a/src/libcamera/property_ids.cpp.in >> +++ b/src/libcamera/property_ids.cpp.in >> @@ -23,12 +23,25 @@ namespace properties { >> >> ${controls_doc} >> >> +namespace draft { >> + >> +${draft_controls_doc} >> + >> +} /* namespace draft */ >> + >> #ifndef __DOXYGEN__ >> /* >> * Keep the properties definitions hidden from doxygen as it incorrectly parses >> * them as functions. >> */ >> ${controls_def} >> + >> +namespace draft { >> + >> +${draft_controls_def} >> + >> +} /* namespace draft */ >> + >> #endif >> >> /** > > This same hunk shall be applied to control_ids.cpp.in > Ooops - sorry - that was the rush job getting a proof of concept out to you and only tested with a property ;-) I hope it all helps anyway. -- Kieran
diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in index 95a7a7f1e260..baadca83b103 100644 --- a/include/libcamera/control_ids.h.in +++ b/include/libcamera/control_ids.h.in @@ -26,6 +26,12 @@ ${controls} extern const ControlIdMap controls; +namespace draft { + +${draft_controls} + +} /* namespace draft */ + } /* namespace controls */ } /* namespace libcamera */ diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in index e4dea335cd3b..52646c1f78ae 100644 --- a/include/libcamera/property_ids.h.in +++ b/include/libcamera/property_ids.h.in @@ -24,6 +24,12 @@ ${ids} ${controls} +namespace draft { + +${draft_controls} + +} /* namespace draft */ + extern const ControlIdMap properties; } /* namespace properties */ diff --git a/src/libcamera/property_ids.cpp.in b/src/libcamera/property_ids.cpp.in index bfdd823f63b0..275c1caff3ec 100644 --- a/src/libcamera/property_ids.cpp.in +++ b/src/libcamera/property_ids.cpp.in @@ -23,12 +23,25 @@ namespace properties { ${controls_doc} +namespace draft { + +${draft_controls_doc} + +} /* namespace draft */ + #ifndef __DOXYGEN__ /* * Keep the properties definitions hidden from doxygen as it incorrectly parses * them as functions. */ ${controls_def} + +namespace draft { + +${draft_controls_def} + +} /* namespace draft */ + #endif /** diff --git a/utils/gen-controls.py b/utils/gen-controls.py index 87c3d52ada6d..f28db27ba19f 100755 --- a/utils/gen-controls.py +++ b/utils/gen-controls.py @@ -36,6 +36,8 @@ ${description} ctrls_doc = [] ctrls_def = [] + draft_ctrls_doc = [] + draft_ctrls_def = [] ctrls_map = [] for ctrl in controls: @@ -55,6 +57,12 @@ ${description} 'id_name': id_name, } + target_doc = ctrls_doc + target_def = ctrls_def + if ctrl.get('draft'): + target_doc = draft_ctrls_doc + target_def = draft_ctrls_def + enum = ctrl.get('enum') if enum: enum_doc = [] @@ -70,15 +78,21 @@ ${description} enum_doc = '\n *\n'.join(enum_doc) enum_doc += '\n */' - ctrls_doc.append(enum_doc) + target_doc.append(enum_doc) + + target_doc.append(doc_template.substitute(info)) + target_def.append(def_template.substitute(info)) + + if ctrl.get('draft'): + name = 'draft::' + name - ctrls_doc.append(doc_template.substitute(info)) - ctrls_def.append(def_template.substitute(info)) ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },') return { 'controls_doc': '\n\n'.join(ctrls_doc), 'controls_def': '\n'.join(ctrls_def), + 'draft_controls_doc': '\n\n'.join(draft_ctrls_doc), + 'draft_controls_def': '\n\n'.join(draft_ctrls_def), 'controls_map': '\n'.join(ctrls_map), } @@ -89,6 +103,7 @@ def generate_h(controls): template = string.Template('''extern const Control<${type}> ${name};''') ctrls = [] + draft_ctrls = [] ids = [] id_value = 1 @@ -109,22 +124,27 @@ def generate_h(controls): 'type': ctrl_type, } + target_ctrls = ctrls + if ctrl.get('draft'): + target_ctrls = draft_ctrls + enum = ctrl.get('enum') if enum: - ctrls.append(enum_template_start.substitute(info)) + target_ctrls.append(enum_template_start.substitute(info)) for entry in enum: value_info = { 'name': entry['name'], 'value': entry['value'], } - ctrls.append(enum_value_template.substitute(value_info)) - ctrls.append("};") + target_ctrls.append(enum_value_template.substitute(value_info)) + target_ctrls.append("};") - ctrls.append(template.substitute(info)) + target_ctrls.append(template.substitute(info)) id_value += 1 - return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls)} + return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls), + 'draft_controls': '\n'.join(draft_ctrls)} def fill_template(template, data):
Extend the control and property framework to support exposing draft controls and properties in a scoped namespace. The controls/properties themselves will retain the same ordering in the relevant enum/id maps - but the access to any draft control will require explicitly referencing through its' draft:: namespace prefix. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> --- include/libcamera/control_ids.h.in | 6 +++++ include/libcamera/property_ids.h.in | 6 +++++ src/libcamera/property_ids.cpp.in | 13 +++++++++++ utils/gen-controls.py | 36 ++++++++++++++++++++++------- 4 files changed, 53 insertions(+), 8 deletions(-)