From dda6e40605b632cd832b7ef4a0dcc9b84d72358a Mon Sep 17 00:00:00 2001 From: Stefan Eichenberger Date: Mon, 31 Jul 2017 18:22:11 +0200 Subject: [PATCH] board-descriptor: port changes from fct --- .../board-descriptor/board-descriptor/bd.py | 2 +- .../board-descriptor/config.json | 3 +- .../board-descriptor/descriptor.py | 41 ++++++++++--------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/recipes-core/board-descriptor/board-descriptor/bd.py b/recipes-core/board-descriptor/board-descriptor/bd.py index b3d94c5..b36cf51 100755 --- a/recipes-core/board-descriptor/board-descriptor/bd.py +++ b/recipes-core/board-descriptor/board-descriptor/bd.py @@ -63,7 +63,7 @@ def read_descriptors(config): desc = descriptor.Descriptor(eeprom["path"], valid_bd["start"], valid_bd["size"], - config_table) + json.loads(config_table)) desc.read() descs.append(desc) return descs diff --git a/recipes-core/board-descriptor/board-descriptor/config.json b/recipes-core/board-descriptor/board-descriptor/config.json index a3ab00c..1ca6a6d 100644 --- a/recipes-core/board-descriptor/board-descriptor/config.json +++ b/recipes-core/board-descriptor/board-descriptor/config.json @@ -2,7 +2,8 @@ "tag_list": "/etc/bd/bd.json", "eeprom": [ { "path": "/sys/bus/i2c/devices/0-0050/eeprom", "valid_bds": [ - {"name": "info", "start": 0, "size": 1024}, + {"name": "board", "start": 0, "size": 1024}, + {"name": "platform", "start": 512, "size": 512}, {"name": "settings", "start": 1536, "size": 512} ] } diff --git a/recipes-core/board-descriptor/board-descriptor/descriptor.py b/recipes-core/board-descriptor/board-descriptor/descriptor.py index d4c78d1..922e9ba 100644 --- a/recipes-core/board-descriptor/board-descriptor/descriptor.py +++ b/recipes-core/board-descriptor/board-descriptor/descriptor.py @@ -1,5 +1,3 @@ -import json - def _array_to_int(data): # This one works for python2.7 and python3 @@ -31,8 +29,6 @@ def _array_to_partition(data): return part - return _array_to_parition_gen(data, 4) - def _array_to_partition64(data): import codecs @@ -112,6 +108,7 @@ def _dict_to_partition64(data): def _not_supported_yet(data): + del data raise NotImplementedError("Setting this type is not supported yet") _type_to_value = { @@ -185,12 +182,12 @@ class _BdRaw: class _BdParsed: - def __init__(self, strtype, value): - self.value = self._value_type(strtype, value) + def __init__(self, str_type, value): + self.value = self._value_type(str_type, value) - def _value_type(self, strtype, value): + def _value_type(self, str_type, value): for key, fun in _string_to_type.items(): - if key == strtype: + if key == str_type: return fun(value) @@ -199,7 +196,10 @@ class Descriptor: self.file = file self.offset = offset self.max_size = max_size - self.config_table = json.loads(config_table) + self.config_table = config_table + self.bd_raw = None + self.bd_parsed = None + self.tlv_by_name = None def _read_raw_bd(self): fd = open(self.file, "rb") @@ -218,6 +218,7 @@ class Descriptor: if tlv.tag == value["id"]: parsed = _BdParsed(value["type"], tlv.value) return key, parsed.value + return "unknown_" + str(tlv.tag), tlv.value def _parse_data(self, bdraw): bdparsed = {} @@ -228,26 +229,26 @@ class Descriptor: i = 1 while key in bdparsed: key = name + "_" + str(i) - i = i + 1 + i += 1 bdparsed[key] = value tlv_by_name[key] = tlv return bdparsed, tlv_by_name def read(self): - self.bdraw = self._read_raw_bd() - self.bdparsed, self.tlv_by_name = self._parse_data(self.bdraw) + self.bd_raw = self._read_raw_bd() + self.bd_parsed, self.tlv_by_name = self._parse_data(self.bd_raw) def get_list(self): - return self.bdparsed + return self.bd_parsed def get(self, name): name = name.split(".") - element = self.bdparsed + element = self.bd_parsed # Search the final element to print - # This allows names in the form parition64.flags + # This allows names in the form partition64.flags for key in name: - if not key in element: + if key not in element: return None element = element[key] return element @@ -269,6 +270,8 @@ class Descriptor: return dictionary def _do_set(self, name, value, tlv): + tlv_type = None + for key, config_item in self.config_table.items(): if tlv.tag == config_item["id"]: tlv_type = config_item["type"] @@ -282,11 +285,11 @@ class Descriptor: if not type(name) is list: self._write_bd(tlv.pos, fun(value), tlv.length) else: - element = self.bdparsed[name[0]] + element = self.bd_parsed[name[0]] # if we have changed the element it will be our value again value = self._update_dict(element, name[1:], value) self._write_bd(tlv.pos, fun(value), tlv.length) - self.bdparsed[name[0]] = value + self.bd_parsed[name[0]] = value def set(self, name, value): if self.tlv_by_name is None: @@ -298,7 +301,7 @@ class Descriptor: if tlv is None: return False - if not self.bdraw.is_writable: + if not self.bd_raw.is_writable: raise IOError("This operation is not permitted on " "this descriptor (ro)")