@@ -34,12 +34,12 @@ def __init__(
3434
3535 self ._connection = serial_for_url (
3636 device , do_not_open = True , baudrate = baudrate )
37- self ._load = load
38- # TODO: Put all of these in one object.
39- self . _version = (0 , 0 , 0 )
40- self . _endianness = '<'
41- self . _size_t = 'H'
42- self . methods = { }
37+ self ._load = load # TODO: Content checking.
38+ self . device = {
39+ 'version' : (0 , 0 , 0 ),
40+ 'endianness' : '<' ,
41+ 'size_t' : 'H' ,
42+ 'methods' : {} }
4343
4444 if autoconnect :
4545 self .open ()
@@ -73,7 +73,9 @@ def _write(self: object, obj_type: any, obj: any) -> None:
7373 :arg obj_type: Type of the parameter.
7474 :arg obj: Value of the parameter.
7575 """
76- write (self ._connection , self ._endianness , self ._size_t , obj_type , obj )
76+ write (
77+ self ._connection , self .device ['endianness' ], self .device ['size_t' ],
78+ obj_type , obj )
7779
7880 def _read_byte_string (self : object ) -> bytes :
7981 return read_byte_string (self ._connection )
@@ -85,7 +87,9 @@ def _read(self: object, obj_type: any) -> any:
8587
8688 :returns: Return value.
8789 """
88- return read (self ._connection , self ._endianness , self ._size_t , obj_type )
90+ return read (
91+ self ._connection , self .device ['endianness' ], self .device ['size_t' ],
92+ obj_type )
8993
9094 def _get_methods (self : object ) -> dict :
9195 """Get remote procedure call methods.
@@ -97,14 +101,15 @@ def _get_methods(self: object) -> dict:
97101 if self ._read_byte_string ().decode () != _protocol :
98102 raise ValueError ('missing protocol header' )
99103
100- self . _version = tuple (self ._read ('B' ) for _ in range (3 ))
101- if self . _version [0 ] != _version [0 ] or self . _version [1 ] > _version [1 ]:
104+ version = tuple (self ._read ('B' ) for _ in range (3 ))
105+ if version [0 ] != _version [0 ] or version [1 ] > _version [1 ]:
102106 raise ValueError (
103107 'version mismatch (device: {}, client: {})' .format (
104- '.' .join (map (str , self . _version )),
108+ '.' .join (map (str , version )),
105109 '.' .join (map (str , _version ))))
110+ self .device ['version' ] = version
106111
107- self ._endianness , self ._size_t = (
112+ self .device [ 'endianness' ] , self .device [ 'size_t' ] = (
108113 chr (c ) for c in self ._read_byte_string ())
109114
110115 methods = {}
@@ -126,16 +131,16 @@ def open(self: object) -> None:
126131 if self ._load :
127132 self .load ()
128133 else :
129- self .methods = self ._get_methods ()
130- for method in self .methods .values ():
134+ self .device [ ' methods' ] = self ._get_methods ()
135+ for method in self .device [ ' methods' ] .values ():
131136 setattr (
132137 self , method ['name' ], MethodType (make_function (method ), self ))
133138
134139 def close (self : object ) -> None :
135140 """Disconnect from device."""
136- for method in self .methods :
141+ for method in self .device [ ' methods' ] :
137142 delattr (self , method )
138- self .methods .clear ()
143+ self .device [ ' methods' ] .clear ()
139144
140145 def call_method (self : object , name : str , * args : list ) -> any :
141146 """Execute a method.
@@ -145,9 +150,9 @@ def call_method(self: object, name: str, *args: list) -> any:
145150
146151 :returns: Return value of the method.
147152 """
148- if name not in self .methods :
153+ if name not in self .device [ ' methods' ] :
149154 raise ValueError ('invalid method name: {}' .format (name ))
150- method = self .methods [name ]
155+ method = self .device [ ' methods' ] [name ]
151156
152157 parameters = method ['parameters' ]
153158 if len (args ) != len (parameters ):
@@ -174,21 +179,22 @@ def save(self: object, handle: TextIO) -> None:
174179 :arg handle: Open file handle.
175180 """
176181 dump (
177- {
178- 'version' : self ._version ,
179- 'endianness' : self ._endianness ,
180- 'size_t' : self ._size_t ,
181- 'methods' : self .methods
182- },
182+ #{
183+ # 'version': self._version,
184+ # 'endianness': self._endianness,
185+ # 'size_t': self._size_t,
186+ # 'methods': self.methods
187+ #},
188+ self .device ,
183189 handle , width = 76 , default_flow_style = False )
184190
185191 def load (self : object ) -> None :
186192 """Load the interface definition from a file."""
187- definition = load (self ._load )
188- self ._version = definition ['version' ]
189- self ._endianness = definition ['endianness' ]
190- self ._size_t = definition ['size_t' ]
191- self .methods = definition ['methods' ]
193+ self . device = load (self ._load )
194+ # self._version = definition['version']
195+ # self._endianness = definition['endianness']
196+ # self._size_t = definition['size_t']
197+ # self.methods = definition['methods']
192198
193199
194200class SerialInterface (_Interface ):
@@ -225,7 +231,7 @@ def _auto_open_wrapper(
225231
226232 @wraps (_Interface .is_open )
227233 def is_open (self : object ) -> bool :
228- return len (self .methods ) > 0
234+ return len (self .device [ ' methods' ] ) > 0
229235
230236 open = _auto_open (_Interface .open )
231237 call_method = _auto_open (_Interface .call_method )
0 commit comments