src/eric7/MicroPython/Devices/DeviceBase.py

branch
eric7
changeset 9844
2f3d623f7617
parent 9829
cafb132fe3bb
child 9847
d8c7ded575cb
diff -r 72e8270a5940 -r 2f3d623f7617 src/eric7/MicroPython/Devices/DeviceBase.py
--- a/src/eric7/MicroPython/Devices/DeviceBase.py	Fri Mar 03 17:49:36 2023 +0100
+++ b/src/eric7/MicroPython/Devices/DeviceBase.py	Fri Mar 03 19:03:33 2023 +0100
@@ -664,7 +664,9 @@
 """.format(
                 name, recursive, force
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self._interface.execute(
+                command, mode=self._submitMode, timeout=20000
+            )
             if err:
                 raise OSError(self._shortError(err))
             return ast.literal_eval(out.decode("utf-8"))
@@ -913,49 +915,62 @@
         @exception OSError raised to indicate an issue with the device
         """
         command = """
-res = {}
+def get_device_data():
+    res = {}
 
-import os as __os_
-uname = __os_.uname()
-res['sysname'] = uname.sysname
-res['nodename'] = uname.nodename
-res['release'] = uname.release
-res['version'] = uname.version
-res['machine'] = uname.machine
+    import os
+    uname = os.uname()
+    res['sysname'] = uname.sysname
+    res['nodename'] = uname.nodename
+    res['release'] = uname.release
+    res['version'] = uname.version
+    res['machine'] = uname.machine
 
-import sys as __sys_
-res['py_platform'] = __sys_.platform
-res['py_version'] = __sys_.version
+    import sys
+    res['py_platform'] = sys.platform
+    res['py_version'] = sys.version
 
-try:
-    res['mpy_name'] = __sys_.implementation.name
-except AttributeError:
-    res['mpy_name'] = 'unknown'
+    try:
+        res['mpy_name'] = sys.implementation.name
+    except AttributeError:
+        res['mpy_name'] = 'unknown'
 
-try:
-    res['mpy_version'] = '.'.join((str(i) for i in __sys_.implementation.version))
-except AttributeError:
-    res['mpy_version'] = 'unknown'
+    try:
+        res['mpy_version'] = '.'.join((str(i) for i in sys.implementation.version))
+    except AttributeError:
+        res['mpy_version'] = 'unknown'
 
-try:
-    import pimoroni as __pimoroni_
-    res['mpy_variant'] = 'Pimoroni Pico'
     try:
-        import version as __version_
-        res['mpy_variant_info'] = __version_.BUILD
-        res['mpy_variant_version'] = __version_.BUILD.split('-')[2][1:]
-        del __version_
+        import pimoroni
+        res['mpy_variant'] = 'Pimoroni Pico'
+        try:
+            import version
+            res['mpy_variant_info'] = version.BUILD
+            res['mpy_variant_version'] = version.BUILD.split('-')[2][1:]
+        except ImportError:
+            res['mpy_variant_info'] = ''
+            res['mpy_variant_version'] = ''
     except ImportError:
+        res['mpy_variant'] = ''
         res['mpy_variant_info'] = ''
         res['mpy_variant_version'] = ''
-    del __pimoroni_
-except ImportError:
-    res['mpy_variant'] = ''
-    res['mpy_variant_info'] = ''
-    res['mpy_variant_version'] = ''
 
-print(res)
-del res, uname, __os_, __sys_
+    res['mip'] = False
+    res['upip'] = False
+    try:
+        import mip
+        res['mip'] = True
+    except ImportError:
+        try:
+            import upip
+            res['upip'] = True
+        except ImportError:
+            pass
+
+    return res
+
+print(get_device_data())
+del get_device_data
 """
         out, err = self._interface.execute(command, mode=self._submitMode)
         if err:
@@ -971,100 +986,97 @@
         @exception OSError raised to indicate an issue with the device
         """
         command = """
-res = {}
+def get_board_info():
+    res = {}
 
-import gc as __gc_
-__gc_.enable()
-__gc_.collect()
-mem_alloc = __gc_.mem_alloc()
-mem_free = __gc_.mem_free()
-mem_total = mem_alloc + mem_free
-res['mem_total_kb'] = mem_total / 1024.0
-res['mem_used_kb'] = mem_alloc / 1024.0
-res['mem_used_pc'] = mem_alloc / mem_total * 100.0
-res['mem_free_kb'] = mem_free / 1024.0
-res['mem_free_pc'] = mem_free / mem_total * 100.0
-del __gc_, mem_alloc, mem_free, mem_total
+    import gc
+    gc.enable()
+    gc.collect()
+    mem_alloc = gc.mem_alloc()
+    mem_free = gc.mem_free()
+    mem_total = mem_alloc + mem_free
+    res['mem_total_kb'] = mem_total / 1024.0
+    res['mem_used_kb'] = mem_alloc / 1024.0
+    res['mem_used_pc'] = mem_alloc / mem_total * 100.0
+    res['mem_free_kb'] = mem_free / 1024.0
+    res['mem_free_pc'] = mem_free / mem_total * 100.0
+    del gc, mem_alloc, mem_free, mem_total
+
+    import os
+    uname = os.uname()
+    res['sysname'] = uname.sysname
+    res['nodename'] = uname.nodename
+    res['release'] = uname.release
+    res['version'] = uname.version
+    res['machine'] = uname.machine
 
-import os as __os_
-uname = __os_.uname()
-res['sysname'] = uname.sysname
-res['nodename'] = uname.nodename
-res['release'] = uname.release
-res['version'] = uname.version
-res['machine'] = uname.machine
-
-import sys as __sys_
-res['py_platform'] = __sys_.platform
-res['py_version'] = __sys_.version
+    import sys
+    res['py_platform'] = sys.platform
+    res['py_version'] = sys.version
 
-try:
-    res['mpy_name'] = __sys_.implementation.name
-except AttributeError:
-    res['mpy_name'] = 'unknown'
-try:
-    res['mpy_version'] = '.'.join((str(i) for i in __sys_.implementation.version))
-except AttributeError:
-    res['mpy_version'] = 'unknown'
-try:
-    import pimoroni as __pimoroni_
-    res['mpy_variant'] = 'Pimoroni Pico'
+    try:
+        res['mpy_name'] = sys.implementation.name
+    except AttributeError:
+        res['mpy_name'] = 'unknown'
+    try:
+        res['mpy_version'] = '.'.join((str(i) for i in sys.implementation.version))
+    except AttributeError:
+        res['mpy_version'] = 'unknown'
     try:
-        import version as __version_
-        res['mpy_variant_info'] = __version_.BUILD
-        res['mpy_variant_version'] = __version_.BUILD.split('-')[2][1:]
-        del __version_
+        import pimoroni
+        res['mpy_variant'] = 'Pimoroni Pico'
+        try:
+            import version
+            res['mpy_variant_info'] = version.BUILD
+            res['mpy_variant_version'] = version.BUILD.split('-')[2][1:]
+        except ImportError:
+            res['mpy_variant_info'] = ''
+            res['mpy_variant_version'] = ''
     except ImportError:
+        res['mpy_variant'] = ''
         res['mpy_variant_info'] = ''
         res['mpy_variant_version'] = ''
-    del __pimoroni_
-except ImportError:
-    res['mpy_variant'] = ''
-    res['mpy_variant_info'] = ''
-    res['mpy_variant_version'] = ''
 
-try:
-    stat_ = __os_.statvfs('/flash')
-    res['flash_info_available'] = True
-    res['flash_total_kb'] = stat_[2] * stat_[0] / 1024.0
-    res['flash_free_kb'] = stat_[3] * stat_[0] / 1024.0
-    res['flash_used_kb'] = res['flash_total_kb'] - res['flash_free_kb']
-    res['flash_free_pc'] = res['flash_free_kb'] / res['flash_total_kb'] * 100.0
-    res['flash_used_pc'] = res['flash_used_kb'] / res['flash_total_kb'] * 100.0
-    del stat_
-except AttributeError:
-    res['flash_info_available'] = False
+    try:
+        stat_ = os.statvfs('/flash')
+        res['flash_info_available'] = True
+        res['flash_total_kb'] = stat_[2] * stat_[0] / 1024.0
+        res['flash_free_kb'] = stat_[3] * stat_[0] / 1024.0
+        res['flash_used_kb'] = res['flash_total_kb'] - res['flash_free_kb']
+        res['flash_free_pc'] = res['flash_free_kb'] / res['flash_total_kb'] * 100.0
+        res['flash_used_pc'] = res['flash_used_kb'] / res['flash_total_kb'] * 100.0
+    except AttributeError:
+        res['flash_info_available'] = False
 
-try:
-    import machine as __mc_
-    if isinstance(__mc_.freq(), tuple):
-        res['mc_frequency_mhz'] = __mc_.freq()[0] / 1000000.0
-    else:
-       res['mc_frequency_mhz'] = __mc_.freq() / 1000000.0
-    res['mc_id'] = __mc_.unique_id()
-    del __mc_
-except ImportError:
     try:
-        import microcontroller as __mc_
-        res['mc_frequency_mhz'] = __mc_.cpu.frequency / 1000000.0
-        res['mc_temp_c'] = __mc_.cpu.temperature
-        res['mc_id'] = __mc_.cpu.uid
-        del __mc_
+        import machine as mc
+        if isinstance(mc.freq(), tuple):
+            res['mc_frequency_mhz'] = mc.freq()[0] / 1000000.0
+        else:
+           res['mc_frequency_mhz'] = mc.freq() / 1000000.0
+        res['mc_id'] = mc.unique_id()
     except ImportError:
-        res['mc_frequency'] = None
-        res['mc_temp'] = None
-if 'mc_id' in res:
-    res['mc_id'] = ':'.join('{0:02X}'.format(x) for x in res['mc_id'])
+        try:
+            import microcontroller as mc
+            res['mc_frequency_mhz'] = mc.cpu.frequency / 1000000.0
+            res['mc_temp_c'] = mc.cpu.temperature
+            res['mc_id'] = mc.cpu.uid
+        except ImportError:
+            res['mc_frequency'] = None
+            res['mc_temp'] = None
+    if 'mc_id' in res:
+        res['mc_id'] = ':'.join('{0:02X}'.format(x) for x in res['mc_id'])
 
-try:
-    import ulab as __ulab_
-    res['ulab'] = __ulab_.__version__
-    del __ulab_
-except ImportError:
-    res['ulab'] = None
+    try:
+        import ulab
+        res['ulab'] = ulab.__version__
+    except ImportError:
+        res['ulab'] = None
 
-print(res)
-del res, __os_, __sys_, uname
+    return res
+
+print(get_board_info())
+del get_board_info
 """
         out, err = self._interface.execute(command, mode=self._submitMode)
         if err:
@@ -1102,25 +1114,26 @@
         @exception OSError raised to indicate an issue with the device
         """
         command = """
-try:
-    import rtc as __rtc_
-    print(
-        '{0:04d}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}'
-        .format(*__rtc_.RTC().datetime[:6])
-    )
-    del __rtc_
-except:
-    import time as __time_
+def get_time():
     try:
-        print(__time_.strftime('%Y-%m-%d %H:%M:%S', __time_.localtime()))
-    except AttributeError:
-        tm = __time_.localtime()
+        import rtc
         print(
             '{0:04d}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}'
-            .format(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])
+            .format(*rtc.RTC().datetime[:6])
         )
-        del tm
-    del __time_
+    except:
+        import time
+        try:
+            print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
+        except AttributeError:
+            tm = time.localtime()
+            print(
+                '{0:04d}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}'
+                .format(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])
+            )
+
+get_time()
+del get_time
 """
         out, err = self._interface.execute(command, mode=self._submitMode)
         if err:
@@ -1199,6 +1212,56 @@
                 raise OSError(self._shortError(err))
 
     ##################################################################
+    ## Methods below implement package management related methods
+    ##################################################################
+
+    def upipInstall(self, packages):
+        """
+        Public method to install packages using 'upip'.
+
+        @return tuple containing the command output and errors
+        @return tuple of (str, str)
+        """
+        command = """
+def upip_install():
+    import upip
+    upip.install({0})
+
+upip_install()
+del upip_install
+""".format(repr(packages))
+        return self._interface.execute(command, mode=self._submitMode, timeout=60000)
+
+    def mipInstall(self, package, version, mpy):
+        """
+        Public method 
+
+        @param package package name
+        @type str
+        @param version package version
+        @type str
+        @param mpy flag indicating to install as '.mpy' file
+        @type bool
+        @return tuple containing the command output and errors
+        @return tuple of (str, str)
+        """
+        parameterStr = repr(package)
+        if version:
+            parameterStr += ", version={0}".format(repr(version))
+        if not mpy:
+            parameterStr += ", mpy=False"
+
+        command = """
+def mip_install():
+    import mip
+    mip.install({0})
+
+mip_install()
+del mip_install
+""".format(parameterStr)
+        return self._interface.execute(command, mode=self._submitMode, timeout=60000)
+
+    ##################################################################
     ## Methods below implement WiFi related methods
     ##################################################################
 

eric ide

mercurial