move load_solibs out of class ErtmTest

We need the solibs ready before the ErtmTest class declaration
(actually, before most struct declarations) to make available
the magic constants from the libs without duplicated assignments
parent bcb7ccde
......@@ -8,6 +8,40 @@ import os.path
from ctypes import *
from ctypes.util import find_library
def load_solibs():
cli = os.path.realpath(__file__)
clidir = os.path.dirname(cli)
cliparent = os.path.dirname(clidir)
solib = 'libertm.so'
solib_display = 'libertm_display.so'
solib_default1 = os.path.join(clidir, solib)
solib_display_default1 = os.path.join(clidir, solib_display)
solib_default2 = os.path.join(cliparent, 'lib', solib)
solib_display_default2 = os.path.join(cliparent, 'lib', solib_display)
try:
libudev = find_library('udev')
CDLL(libudev, mode=RTLD_GLOBAL)
except OSError as e:
raise
try:
lib = CDLL(solib_default1, mode=RTLD_GLOBAL)
display = CDLL(solib_display_default1)
except OSError as e:
pass
else:
return lib, display
try:
lib = CDLL(solib_default2, mode=RTLD_GLOBAL)
display = CDLL(solib_display_default2)
except OSError as e:
print('could not open library {} nor {}, exiting'.format(
solib_default1, solib_default2))
exit()
else:
return lib, display
lib, display = load_solibs()
class uart_packet(Structure):
ERTM14_MAX_UART_LINK_PAYLOAD = 512
_fields_ =[
......@@ -123,42 +157,12 @@ class ErtmTest(cmd.Cmd):
msg = self.lib.ertm_perror(errcode)
return str(msg, encoding='utf8')
def load_solibs(self):
cli = os.path.realpath(__file__)
clidir = os.path.dirname(cli)
cliparent = os.path.dirname(clidir)
solib = 'libertm.so'
solib_display = 'libertm_display.so'
solib_default1 = os.path.join(clidir, solib)
solib_display_default1 = os.path.join(clidir, solib_display)
solib_default2 = os.path.join(cliparent, 'lib', solib)
solib_display_default2 = os.path.join(cliparent, 'lib', solib_display)
try:
libudev = find_library('udev')
CDLL(libudev, mode=RTLD_GLOBAL)
except OSError as e:
raise
try:
self.lib = CDLL(solib_default1, mode=RTLD_GLOBAL)
self.display = CDLL(solib_display_default1)
except OSError as e:
pass
else:
return
try:
self.lib = CDLL(solib_default2, mode=RTLD_GLOBAL)
self.display = CDLL(solib_display_default2)
except OSError as e:
print('could not open library {} nor {}, exiting'.format(
solib_default1, solib_default2))
exit()
def my_preloop(self):
try:
readline.read_history_file(self.history)
except FileNotFoundError:
readline.write_history_file(self.history)
self.load_solibs()
self.lib, self.display = lib, display
self.lib.ertm_init.restype = POINTER(ertm_status)
self.handle = self.lib.ertm_init(c_char_p(None))
self.do_h = self.do_help
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment