9
9
from canopen import objectdictionary
10
10
from canopen .objectdictionary import ObjectDictionary , datatypes
11
11
from canopen .sdo import SdoClient
12
+ from canopen .utils import signed_int_from_hex , calc_bit_length
12
13
13
14
if TYPE_CHECKING :
14
15
import canopen .network
@@ -201,30 +202,6 @@ def import_from_node(node_id: int, network: canopen.network.Network):
201
202
network .unsubscribe (0x580 + node_id )
202
203
return od
203
204
204
-
205
- def _calc_bit_length (data_type ):
206
- if data_type == datatypes .INTEGER8 :
207
- return 8
208
- elif data_type == datatypes .INTEGER16 :
209
- return 16
210
- elif data_type == datatypes .INTEGER32 :
211
- return 32
212
- elif data_type == datatypes .INTEGER64 :
213
- return 64
214
- else :
215
- raise ValueError (f"Invalid data_type '{ data_type } ', expecting a signed integer data_type." )
216
-
217
-
218
- def _signed_int_from_hex (hex_str , bit_length ):
219
- number = int (hex_str , 0 )
220
- max_value = (1 << (bit_length - 1 )) - 1
221
-
222
- if number > max_value :
223
- return number - (1 << bit_length )
224
- else :
225
- return number
226
-
227
-
228
205
def _convert_variable (node_id , var_type , value ):
229
206
if var_type in (datatypes .OCTET_STRING , datatypes .DOMAIN ):
230
207
return bytes .fromhex (value )
@@ -288,7 +265,7 @@ def build_variable(eds, section, node_id, index, subindex=0):
288
265
try :
289
266
min_string = eds .get (section , "LowLimit" )
290
267
if var .data_type in datatypes .SIGNED_TYPES :
291
- var .min = _signed_int_from_hex (min_string , _calc_bit_length (var .data_type ))
268
+ var .min = signed_int_from_hex (min_string , calc_bit_length (var .data_type ))
292
269
else :
293
270
var .min = int (min_string , 0 )
294
271
except ValueError :
@@ -297,7 +274,7 @@ def build_variable(eds, section, node_id, index, subindex=0):
297
274
try :
298
275
max_string = eds .get (section , "HighLimit" )
299
276
if var .data_type in datatypes .SIGNED_TYPES :
300
- var .max = _signed_int_from_hex (max_string , _calc_bit_length (var .data_type ))
277
+ var .max = signed_int_from_hex (max_string , calc_bit_length (var .data_type ))
301
278
else :
302
279
var .max = int (max_string , 0 )
303
280
except ValueError :
0 commit comments