pylibfdt: add Property.as_*int*_array()
Add new methods to handle decoding of int32, uint32, int64 and uint64 arrays. Also add tests for the new methods. Signed-off-by: Luca Weiss <luca@z3ntu.xyz> Message-Id: <20211225132558.167123-3-luca@z3ntu.xyz> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
83102717d7
commit
a04f690250
3 changed files with 30 additions and 0 deletions
|
@ -716,6 +716,21 @@ class Property(bytearray):
|
|||
def as_int64(self):
|
||||
return self.as_cell('q')
|
||||
|
||||
def as_list(self, fmt):
|
||||
return list(map(lambda x: x[0], struct.iter_unpack('>' + fmt, self)))
|
||||
|
||||
def as_uint32_list(self):
|
||||
return self.as_list('L')
|
||||
|
||||
def as_int32_list(self):
|
||||
return self.as_list('l')
|
||||
|
||||
def as_uint64_list(self):
|
||||
return self.as_list('Q')
|
||||
|
||||
def as_int64_list(self):
|
||||
return self.as_list('q')
|
||||
|
||||
def as_str(self):
|
||||
"""Unicode is supported by decoding from UTF-8"""
|
||||
if self[-1] != 0:
|
||||
|
|
|
@ -382,6 +382,17 @@ class PyLibfdtBasicTests(unittest.TestCase):
|
|||
self.get_prop("prop-uint64").as_uint64())
|
||||
self.assertEqual(-2, self.get_prop("prop-int64").as_int64())
|
||||
|
||||
def testGetIntListProperties(self):
|
||||
"""Test that we can access properties as integer lists"""
|
||||
self.assertEqual([128, -16, -2],
|
||||
self.get_prop("prop-int32-array").as_int32_list())
|
||||
self.assertEqual([0x1, 0x98765432, 0xdeadbeef],
|
||||
self.get_prop("prop-uint32-array").as_uint32_list())
|
||||
self.assertEqual([0x100000000, -2],
|
||||
self.get_prop("prop-int64-array").as_int64_list())
|
||||
self.assertEqual([0x100000000, 0x1],
|
||||
self.get_prop("prop-uint64-array").as_uint64_list())
|
||||
|
||||
def testGetStringlistProperties(self):
|
||||
"""Test that we can access properties as string list"""
|
||||
node = self.fdt.path_offset('/subnode@1/subsubnode')
|
||||
|
|
|
@ -8,4 +8,8 @@
|
|||
prop-hex64 = /bits/ 64 <0xdeadbeef01abcdef>;
|
||||
prop-uint64 = /bits/ 64 <9223372036854775807>;
|
||||
prop-int64 = /bits/ 64 <0xfffffffffffffffe>;
|
||||
prop-int32-array = <128>, <(-16)>, <0xfffffffe>;
|
||||
prop-uint32-array = <0x1>, <0x98765432>, <0xdeadbeef>;
|
||||
prop-int64-array = /bits/ 64 <0x100000000 0xfffffffffffffffe>;
|
||||
prop-uint64-array = /bits/ 64 <0x100000000 0x1>;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue