Clean up options utilities
Use abc to declare an abstract base class and add some documentation.
This commit is contained in:
parent
ff9530833d
commit
f195258eb5
@ -21,15 +21,24 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
from abc import ABC
|
||||||
from stcgal.utils import Utils
|
from stcgal.utils import Utils
|
||||||
|
|
||||||
class BaseOption:
|
class BaseOption(ABC):
|
||||||
|
"""Base class for options"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.options = ()
|
||||||
|
self.msr = None
|
||||||
|
|
||||||
def print(self):
|
def print(self):
|
||||||
|
"""Print current configuration to standard output"""
|
||||||
print("Target options:")
|
print("Target options:")
|
||||||
for name, get_func, _ in self.options:
|
for name, get_func, _ in self.options:
|
||||||
print(" %s=%s" % (name, get_func()))
|
print(" %s=%s" % (name, get_func()))
|
||||||
|
|
||||||
def set_option(self, name, value):
|
def set_option(self, name, value):
|
||||||
|
"""Set value of a specific option"""
|
||||||
for opt, _, set_func in self.options:
|
for opt, _, set_func in self.options:
|
||||||
if opt == name:
|
if opt == name:
|
||||||
print("Option %s=%s" % (name, value))
|
print("Option %s=%s" % (name, value))
|
||||||
@ -38,12 +47,14 @@ class BaseOption:
|
|||||||
raise ValueError("unknown")
|
raise ValueError("unknown")
|
||||||
|
|
||||||
def get_option(self, name):
|
def get_option(self, name):
|
||||||
|
"""Get option value for a specific option"""
|
||||||
for opt, get_func, _ in self.options:
|
for opt, get_func, _ in self.options:
|
||||||
if opt == name:
|
if opt == name:
|
||||||
return get_func(name)
|
return get_func(name)
|
||||||
raise ValueError("unknown")
|
raise ValueError("unknown")
|
||||||
|
|
||||||
def get_msr(self):
|
def get_msr(self):
|
||||||
|
"""Get array of model-specific configuration registers"""
|
||||||
return bytes(self.msr)
|
return bytes(self.msr)
|
||||||
|
|
||||||
|
|
||||||
@ -51,6 +62,7 @@ class Stc89Option(BaseOption):
|
|||||||
"""Manipulation STC89 series option byte"""
|
"""Manipulation STC89 series option byte"""
|
||||||
|
|
||||||
def __init__(self, msr):
|
def __init__(self, msr):
|
||||||
|
super().__init__()
|
||||||
self.msr = msr
|
self.msr = msr
|
||||||
self.options = (
|
self.options = (
|
||||||
("cpu_6t_enabled", self.get_t6, self.set_t6),
|
("cpu_6t_enabled", self.get_t6, self.set_t6),
|
||||||
@ -129,6 +141,7 @@ class Stc12AOption(BaseOption):
|
|||||||
"""Manipulate STC12A series option bytes"""
|
"""Manipulate STC12A series option bytes"""
|
||||||
|
|
||||||
def __init__(self, msr):
|
def __init__(self, msr):
|
||||||
|
super().__init__()
|
||||||
assert len(msr) == 4
|
assert len(msr) == 4
|
||||||
self.msr = bytearray(msr)
|
self.msr = bytearray(msr)
|
||||||
|
|
||||||
@ -213,6 +226,7 @@ class Stc12Option(BaseOption):
|
|||||||
"""Manipulate STC10/11/12 series option bytes"""
|
"""Manipulate STC10/11/12 series option bytes"""
|
||||||
|
|
||||||
def __init__(self, msr):
|
def __init__(self, msr):
|
||||||
|
super().__init__()
|
||||||
assert len(msr) == 4
|
assert len(msr) == 4
|
||||||
self.msr = bytearray(msr)
|
self.msr = bytearray(msr)
|
||||||
|
|
||||||
@ -337,6 +351,7 @@ class Stc12Option(BaseOption):
|
|||||||
|
|
||||||
class Stc15AOption(BaseOption):
|
class Stc15AOption(BaseOption):
|
||||||
def __init__(self, msr):
|
def __init__(self, msr):
|
||||||
|
super().__init__()
|
||||||
assert len(msr) == 13
|
assert len(msr) == 13
|
||||||
self.msr = bytearray(msr)
|
self.msr = bytearray(msr)
|
||||||
|
|
||||||
@ -435,6 +450,7 @@ class Stc15AOption(BaseOption):
|
|||||||
|
|
||||||
class Stc15Option(BaseOption):
|
class Stc15Option(BaseOption):
|
||||||
def __init__(self, msr):
|
def __init__(self, msr):
|
||||||
|
super().__init__()
|
||||||
assert len(msr) >= 4
|
assert len(msr) >= 4
|
||||||
self.msr = bytearray(msr)
|
self.msr = bytearray(msr)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user