board-descriptor: port changes from fct
This commit is contained in:
parent
348dc29dc8
commit
dda6e40605
|
|
@ -63,7 +63,7 @@ def read_descriptors(config):
|
||||||
desc = descriptor.Descriptor(eeprom["path"],
|
desc = descriptor.Descriptor(eeprom["path"],
|
||||||
valid_bd["start"],
|
valid_bd["start"],
|
||||||
valid_bd["size"],
|
valid_bd["size"],
|
||||||
config_table)
|
json.loads(config_table))
|
||||||
desc.read()
|
desc.read()
|
||||||
descs.append(desc)
|
descs.append(desc)
|
||||||
return descs
|
return descs
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
"tag_list": "/etc/bd/bd.json",
|
"tag_list": "/etc/bd/bd.json",
|
||||||
"eeprom": [
|
"eeprom": [
|
||||||
{ "path": "/sys/bus/i2c/devices/0-0050/eeprom", "valid_bds": [
|
{ "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}
|
{"name": "settings", "start": 1536, "size": 512}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
def _array_to_int(data):
|
def _array_to_int(data):
|
||||||
# This one works for python2.7 and python3
|
# This one works for python2.7 and python3
|
||||||
|
|
@ -31,8 +29,6 @@ def _array_to_partition(data):
|
||||||
|
|
||||||
return part
|
return part
|
||||||
|
|
||||||
return _array_to_parition_gen(data, 4)
|
|
||||||
|
|
||||||
|
|
||||||
def _array_to_partition64(data):
|
def _array_to_partition64(data):
|
||||||
import codecs
|
import codecs
|
||||||
|
|
@ -112,6 +108,7 @@ def _dict_to_partition64(data):
|
||||||
|
|
||||||
|
|
||||||
def _not_supported_yet(data):
|
def _not_supported_yet(data):
|
||||||
|
del data
|
||||||
raise NotImplementedError("Setting this type is not supported yet")
|
raise NotImplementedError("Setting this type is not supported yet")
|
||||||
|
|
||||||
_type_to_value = {
|
_type_to_value = {
|
||||||
|
|
@ -185,12 +182,12 @@ class _BdRaw:
|
||||||
|
|
||||||
|
|
||||||
class _BdParsed:
|
class _BdParsed:
|
||||||
def __init__(self, strtype, value):
|
def __init__(self, str_type, value):
|
||||||
self.value = self._value_type(strtype, 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():
|
for key, fun in _string_to_type.items():
|
||||||
if key == strtype:
|
if key == str_type:
|
||||||
return fun(value)
|
return fun(value)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -199,7 +196,10 @@ class Descriptor:
|
||||||
self.file = file
|
self.file = file
|
||||||
self.offset = offset
|
self.offset = offset
|
||||||
self.max_size = max_size
|
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):
|
def _read_raw_bd(self):
|
||||||
fd = open(self.file, "rb")
|
fd = open(self.file, "rb")
|
||||||
|
|
@ -218,6 +218,7 @@ class Descriptor:
|
||||||
if tlv.tag == value["id"]:
|
if tlv.tag == value["id"]:
|
||||||
parsed = _BdParsed(value["type"], tlv.value)
|
parsed = _BdParsed(value["type"], tlv.value)
|
||||||
return key, parsed.value
|
return key, parsed.value
|
||||||
|
return "unknown_" + str(tlv.tag), tlv.value
|
||||||
|
|
||||||
def _parse_data(self, bdraw):
|
def _parse_data(self, bdraw):
|
||||||
bdparsed = {}
|
bdparsed = {}
|
||||||
|
|
@ -228,26 +229,26 @@ class Descriptor:
|
||||||
i = 1
|
i = 1
|
||||||
while key in bdparsed:
|
while key in bdparsed:
|
||||||
key = name + "_" + str(i)
|
key = name + "_" + str(i)
|
||||||
i = i + 1
|
i += 1
|
||||||
bdparsed[key] = value
|
bdparsed[key] = value
|
||||||
tlv_by_name[key] = tlv
|
tlv_by_name[key] = tlv
|
||||||
|
|
||||||
return bdparsed, tlv_by_name
|
return bdparsed, tlv_by_name
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
self.bdraw = self._read_raw_bd()
|
self.bd_raw = self._read_raw_bd()
|
||||||
self.bdparsed, self.tlv_by_name = self._parse_data(self.bdraw)
|
self.bd_parsed, self.tlv_by_name = self._parse_data(self.bd_raw)
|
||||||
|
|
||||||
def get_list(self):
|
def get_list(self):
|
||||||
return self.bdparsed
|
return self.bd_parsed
|
||||||
|
|
||||||
def get(self, name):
|
def get(self, name):
|
||||||
name = name.split(".")
|
name = name.split(".")
|
||||||
element = self.bdparsed
|
element = self.bd_parsed
|
||||||
# Search the final element to print
|
# 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:
|
for key in name:
|
||||||
if not key in element:
|
if key not in element:
|
||||||
return None
|
return None
|
||||||
element = element[key]
|
element = element[key]
|
||||||
return element
|
return element
|
||||||
|
|
@ -269,6 +270,8 @@ class Descriptor:
|
||||||
return dictionary
|
return dictionary
|
||||||
|
|
||||||
def _do_set(self, name, value, tlv):
|
def _do_set(self, name, value, tlv):
|
||||||
|
tlv_type = None
|
||||||
|
|
||||||
for key, config_item in self.config_table.items():
|
for key, config_item in self.config_table.items():
|
||||||
if tlv.tag == config_item["id"]:
|
if tlv.tag == config_item["id"]:
|
||||||
tlv_type = config_item["type"]
|
tlv_type = config_item["type"]
|
||||||
|
|
@ -282,11 +285,11 @@ class Descriptor:
|
||||||
if not type(name) is list:
|
if not type(name) is list:
|
||||||
self._write_bd(tlv.pos, fun(value), tlv.length)
|
self._write_bd(tlv.pos, fun(value), tlv.length)
|
||||||
else:
|
else:
|
||||||
element = self.bdparsed[name[0]]
|
element = self.bd_parsed[name[0]]
|
||||||
# if we have changed the element it will be our value again
|
# if we have changed the element it will be our value again
|
||||||
value = self._update_dict(element, name[1:], value)
|
value = self._update_dict(element, name[1:], value)
|
||||||
self._write_bd(tlv.pos, fun(value), tlv.length)
|
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):
|
def set(self, name, value):
|
||||||
if self.tlv_by_name is None:
|
if self.tlv_by_name is None:
|
||||||
|
|
@ -298,7 +301,7 @@ class Descriptor:
|
||||||
if tlv is None:
|
if tlv is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not self.bdraw.is_writable:
|
if not self.bd_raw.is_writable:
|
||||||
raise IOError("This operation is not permitted on "
|
raise IOError("This operation is not permitted on "
|
||||||
"this descriptor (ro)")
|
"this descriptor (ro)")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue