board-descriptor: port changes from fct

This commit is contained in:
Stefan Eichenberger 2017-07-31 18:22:11 +02:00
parent 348dc29dc8
commit dda6e40605
3 changed files with 25 additions and 21 deletions

View File

@ -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

View File

@ -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}
]
}

View File

@ -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)")