-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsp_objects.py
More file actions
91 lines (74 loc) · 2.48 KB
/
sp_objects.py
File metadata and controls
91 lines (74 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#
# Read contents of the files generated by the siteplayer that have been used to build webbrick firmware
#
# And generate a table of definitions for our use.
#
# File 1 is a C header file
# gives us address.
# File 2 is the siteplayer defintion files - gives us types.
import logging
_log = logging.getLogger(__name__)
class Sp_object(object):
T_unknown = 0
T_byte = 1
T_integer = 2
T_string = 3
T_dd = 4
type_default_size = {
T_unknown : 1,
T_byte : 1,
T_integer : 2,
T_string : 1,
T_dd : 4,
}
def __init__(self, name, o_type, o_size=None):
self._o_type = o_type
self._size = o_size if o_size is not None else Sp_object.type_default_size[o_type]
self.name = name
self._address = None
self._value = None
@property
def o_type(self):
return self._o_type
# def set_size(self, sz):
# if self._o_type == Sp_object.T_integer and sz <> 2:
# raise ValueError("Invalid size %s for type %s" % ( sz, type) )
# if type == 'db':
# raise ValueError("Cannot set size %s for type %s" % ( sz, type) )
# self._size = sz
def get_size(self):
return self._size
# size = property(get_size,set_size)
size = property(get_size)
def test_address(self, address):
# is this address part of this object
return address >= self.address and address < self.address+self.size
def set_address(self, address):
#if address < 0 or address > 0x2FF:
# raise ValueError("Invalid address %s" % ( address, ) )
self._address = address
def get_address(self):
return self._address
address = property(get_address,set_address)
def get_value(self):
return self._value
def set_value(self,value):
self._value = value
value = property(get_value,set_value)
def __str__(self):
return str(self._value)
def __unicode__(self):
return unicode(self._value)
def to_string(self):
return "%s\t%s\t%s\t%s\t%s" % ( self.name.ljust(10), hex(self.address), self.o_type, self.size, self.value)
class Sp_objects(dict):
@property
def by_address(self):
return sorted(self.values(), key=lambda k: k.address )
# def at_address(self, address):
# for spo in self.by_address:
# if spo.address >= address:
# return spo
@property
def by_name(self):
return sorted(self.values(), key=lambda k: k.name )