binman: Allow text directly in the node

At present text entries use an indirect method to specify the text to use,
with a label pointing to the text itself.

Allow the text to be directly written into the node. This is more
convenient in cases where the text is constant.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2019-07-08 13:18:40 -06:00
parent cf54904a99
commit aa88b50d82
4 changed files with 34 additions and 5 deletions

View File

@ -312,6 +312,8 @@ Properties / Entry arguments:
that contains the string to place in the entry
<xxx> (actual name is the value of text-label): contains the string to
place in the entry.
<text>: The text to place in the entry (overrides the above mechanism).
This is useful when the text is constant.
Example node:
@ -334,6 +336,13 @@ It is also possible to put the string directly in the node:
message = "a message directly in the node"
};
or just:
text {
size = <8>;
text = "some text directly in the node"
};
The text is not itself nul-terminated. This can be achieved, if required,
by setting the size of the entry to something larger than the text.

View File

@ -22,6 +22,8 @@ class Entry_text(Entry):
that contains the string to place in the entry
<xxx> (actual name is the value of text-label): contains the string to
place in the entry.
<text>: The text to place in the entry (overrides the above mechanism).
This is useful when the text is constant.
Example node:
@ -44,15 +46,28 @@ class Entry_text(Entry):
message = "a message directly in the node"
};
or just:
text {
size = <8>;
text = "some text directly in the node"
};
The text is not itself nul-terminated. This can be achieved, if required,
by setting the size of the entry to something larger than the text.
"""
def __init__(self, section, etype, node):
Entry.__init__(self, section, etype, node)
label, = self.GetEntryArgsOrProps([EntryArg('text-label', str)])
self.text_label = tools.ToStr(label) if type(label) != str else label
value, = self.GetEntryArgsOrProps([EntryArg(self.text_label, str)])
value = tools.ToBytes(value) if value is not None else value
value = fdt_util.GetString(self._node, 'text')
if value:
value = tools.ToBytes(value)
else:
label, = self.GetEntryArgsOrProps([EntryArg('text-label', str)])
self.text_label = label
if self.text_label:
value, = self.GetEntryArgsOrProps([EntryArg(self.text_label,
str)])
value = tools.ToBytes(value) if value is not None else value
self.value = value
def ObtainContents(self):

View File

@ -1286,7 +1286,7 @@ class TestFunctional(unittest.TestCase):
expected = (tools.ToBytes(TEXT_DATA) +
tools.GetBytes(0, 8 - len(TEXT_DATA)) +
tools.ToBytes(TEXT_DATA2) + tools.ToBytes(TEXT_DATA3) +
b'some text')
b'some text' + b'more text')
self.assertEqual(expected, data)
def testEntryDocs(self):

View File

@ -24,5 +24,10 @@
text-label = "test-id4";
test-id4 = "some text";
};
/* Put text directly in the node */
text5 {
type = "text";
text = "more text";
};
};
};