summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/example/test.yaml408
-rw-r--r--src/format.hpp4
-rw-r--r--src/journal.hpp30
-rwxr-xr-xsrc/pdmgen.py16
-rw-r--r--src/templates/count.mako.cpp2
5 files changed, 452 insertions, 8 deletions
diff --git a/src/example/test.yaml b/src/example/test.yaml
new file mode 100644
index 0000000..1ba22a4
--- /dev/null
+++ b/src/example/test.yaml
@@ -0,0 +1,408 @@
+# Test PDM configuration file. This file validates that all
+# possible configuration file directives result in an application
+# that builds. For an example with documentation please see
+# example.yaml
+
+- name: test path group
+ class: group
+ group: path
+ members:
+ - meta: PATH
+ path: /xyz/openbmc_project/testing/inst1
+ - meta: PATH
+ path: /xyz/openbmc_project/testing/inst2
+ - meta: PATH
+ path: /xyz/openbmc_project/testing/inst3
+ - meta: PATH
+ path: /xyz/openbmc_project/testing/inst4
+
+- name: test byte property group
+ class: group
+ group: property
+ type: byte
+ members:
+ - interface: xyz.openbmc_project.byteIface
+ meta: PROPERTY
+ property: byteValue
+
+- name: test u16 property group
+ class: group
+ group: property
+ type: uint16
+ members:
+ - interface: xyz.openbmc_project.U16Iface
+ meta: PROPERTY
+ property: u16Value
+
+- name: test u32 property group
+ class: group
+ group: property
+ type: uint32
+ members:
+ - interface: xyz.openbmc_project.U32Iface
+ meta: PROPERTY
+ property: u32Value
+
+- name: test u64 property group
+ class: group
+ group: property
+ type: uint64
+ members:
+ - interface: xyz.openbmc_project.U64Iface
+ meta: PROPERTY
+ property: u64Value
+
+- name: test s16 property group
+ class: group
+ group: property
+ type: int16
+ members:
+ - interface: xyz.openbmc_project.S16Iface
+ meta: PROPERTY
+ property: s16Value
+
+- name: test s32 property group
+ class: group
+ group: property
+ type: int32
+ members:
+ - interface: xyz.openbmc_project.S32Iface
+ meta: PROPERTY
+ property: s32Value
+
+- name: test s64 property group
+ class: group
+ group: property
+ type: int64
+ members:
+ - interface: xyz.openbmc_project.S64Iface
+ meta: PROPERTY
+ property: s64Value
+
+- name: test string property group
+ class: group
+ group: property
+ type: string
+ members:
+ - interface: xyz.openbmc_project.StringIface
+ meta: PROPERTY
+ property: StringValue
+
+- name: test bool property group
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.BoolIface
+ meta: PROPERTY
+ property: BoolValue
+
+- name: test byte watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test byte property group
+
+- name: test u16 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test u16 property group
+
+- name: test u32 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test u32 property group
+
+- name: test u64 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test u64 property group
+
+- name: test s16 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test s16 property group
+
+- name: test s32 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test s32 property group
+
+- name: test s64 watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test s64 property group
+
+- name: test bool watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test bool property group
+
+- name: test string watch
+ class: watch
+ watch: property
+ paths: test path group
+ properties: test string property group
+
+- name: test byte journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test byte property group
+ severity: DEBUG
+ message: Testing...
+
+- name: test u16 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test u16 property group
+ severity: INFO
+ message: Testing...
+
+- name: test u32 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test u32 property group
+ severity: NOTICE
+ message: Testing...
+
+- name: test u64 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test u64 property group
+ severity: WARNING
+ message: Testing...
+
+- name: test s16 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test s16 property group
+ severity: ERR
+ message: Testing...
+
+- name: test s32 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test s32 property group
+ severity: CRIT
+ message: Testing...
+
+- name: test s64 journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test s64 property group
+ severity: ALERT
+ message: Testing...
+
+- name: test bool journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test bool property group
+ severity: EMERG
+ message: Testing...
+
+- name: test string journal
+ class: callback
+ callback: journal
+ paths: test path group
+ properties: test string property group
+ severity: INFO
+ message: Testing...
+
+- name: test method
+ class: callback
+ callback: method
+ service: org.test
+ path: /test
+ interface: org.test
+ method: Test
+ args:
+ - value: 123
+ type: string
+ - value: false
+ type: boolean
+ - value: true
+ type: boolean
+ - value: 123
+ type: byte
+ - value: 123
+ type: uint16
+ - value: 123
+ type: uint32
+ - value: 123
+ type: uint64
+ - value: 123
+ type: int16
+ - value: 123
+ type: int32
+ - value: 123
+ type: int64
+
+- name: test count lt
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ callback: test method
+ countop: '<'
+ countbound: 3
+ op: '<'
+ bound: 115
+
+- name: test count lte
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ callback: test method
+ defer: 1000us
+ countop: '<='
+ countbound: 3
+ op: '<='
+ bound: 115
+
+- name: test count gt
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ defer: 1000us
+ callback: test method
+ countop: '>'
+ countbound: 3
+ op: '>'
+ bound: 115
+
+- name: test count gte
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ defer: 1000us
+ callback: test method
+ countop: '>='
+ countbound: 3
+ op: '>='
+ bound: 115
+
+- name: test count eq
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count neq
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test byte property group
+ defer: 1000us
+ callback: test method
+ countop: '!='
+ countbound: 3
+ op: '!='
+ bound: 115
+
+- name: test count u16
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test u16 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count u32
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test u32 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count u64
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test u64 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count s16
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test s16 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count s32
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test s32 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count s64
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test s64 property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: 115
+
+- name: test count bool
+ class: condition
+ condition: count
+ paths: test path group
+ properties: test bool property group
+ defer: 1000us
+ callback: test method
+ countop: '=='
+ countbound: 3
+ op: '=='
+ bound: false
diff --git a/src/format.hpp b/src/format.hpp
index 9c8341c..f0b0c8e 100644
--- a/src/format.hpp
+++ b/src/format.hpp
@@ -16,6 +16,10 @@ template <typename T> struct GetFormatType
{
};
+template <> struct GetFormatType<bool>
+{
+ static constexpr auto format = "%d";
+};
template <> struct GetFormatType<char>
{
static constexpr auto format = "=%hhd";
diff --git a/src/journal.hpp b/src/journal.hpp
index 4e47670..cc74451 100644
--- a/src/journal.hpp
+++ b/src/journal.hpp
@@ -46,6 +46,28 @@ class JournalBase : public IndexedCallback
const char* message;
};
+/** @struct Display
+ * @brief Convert strings to const char*.
+ */
+namespace detail
+{
+template <typename T> struct Display
+{
+ static auto op(T&& value)
+ {
+ return std::forward<T>(value);
+ }
+};
+
+template <> struct Display<std::string>
+{
+ static auto op(const std::string& value)
+ {
+ return value.c_str();
+ }
+};
+} // namespace detail
+
/** @class Journal
* @brief C++ type specific logic for the journal callback.
*
@@ -77,11 +99,11 @@ class Journal : public JournalBase
phosphor::logging::log<Severity>(
message,
phosphor::logging::entry(
- pathMeta + GetFormat<decltype(pathMeta)>::format,
- path),
+ (pathMeta + GetFormat<decltype(pathMeta)>::format).c_str(),
+ path.c_str()),
phosphor::logging::entry(
- propertyMeta + GetFormat<T>::format,
- any_ns::any_cast<T>(value)));
+ (propertyMeta + GetFormat<T>::format).c_str(),
+ detail::Display<T>::op(any_ns::any_cast<T>(value))));
}
};
diff --git a/src/pdmgen.py b/src/pdmgen.py
index d878500..ac2b8e0 100755
--- a/src/pdmgen.py
+++ b/src/pdmgen.py
@@ -101,11 +101,9 @@ class Literal(object):
'''Decorate an argument with a literal operator.'''
integer_types = [
- 'int8',
'int16',
'int32',
'int64',
- 'uint8',
'uint16',
'uint32',
'uint64'
@@ -122,6 +120,8 @@ class Literal(object):
if self.type in self.integer_types:
return Cast('static', '{0}_t'.format(self.type))(arg)
+ elif self.type == 'byte':
+ return Cast('static', 'uint8_t'.format(self.type))(arg)
if self.type == 'string':
return '{0}s'.format(arg)
@@ -396,9 +396,10 @@ class GroupOfProperties(ImplicitGroup):
'''Property group config file directive.'''
def __init__(self, *a, **kw):
+ self.type = kw.pop('type')
self.datatype = sdbusplus.property.Property(
name=kw.get('name'),
- type=kw.pop('type')).cppTypeName
+ type=self.type).cppTypeName
super(GroupOfProperties, self).__init__(**kw)
@@ -507,6 +508,7 @@ class HasPropertyIndex(ConfigEntry):
self.properties,
config=self.configfile)
self.datatype = objs['propertygroup'][self.properties].datatype
+ self.type = objs['propertygroup'][self.properties].type
super(HasPropertyIndex, self).setup(objs)
@@ -626,6 +628,14 @@ class CountCondition(Condition, Renderer):
self.bound = kw.pop('bound')
super(CountCondition, self).__init__(**kw)
+ def setup(self, objs):
+ '''Resolve type.'''
+
+ super(CountCondition, self).setup(objs)
+ self.bound = TrivialArgument(
+ type=self.type,
+ value=self.bound)
+
def construct(self, loader, indent):
return self.render(
loader,
diff --git a/src/templates/count.mako.cpp b/src/templates/count.mako.cpp
index d348518..9ac9c3c 100644
--- a/src/templates/count.mako.cpp
+++ b/src/templates/count.mako.cpp
@@ -1,4 +1,4 @@
std::make_unique<CountCondition<${c.datatype}>>(
${indent(1)}ConfigPropertyIndicies::get()[${c.instances}],
${indent(1)}[](const auto& item){return item ${c.countop} ${c.countbound};},
-${indent(1)}[](const auto& item){return item ${c.op} ${c.bound};})\
+${indent(1)}[](const auto& item){return item ${c.op} ${c.bound.argument(loader, indent=indent +1)};})\
OpenPOWER on IntegriCloud