From 3daa2a9441124db574e309bb8a1e0fa3f377824f Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Thu, 28 Sep 2023 00:48:37 +0300 Subject: [PATCH 01/10] add docs on custom device definitions --- docs/develop/guide.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/develop/guide.rst b/docs/develop/guide.rst index 8d5b49ed..2d686802 100644 --- a/docs/develop/guide.rst +++ b/docs/develop/guide.rst @@ -238,3 +238,22 @@ This will install the Tinymovr Studio in develop mode. Now, `tinymovr`, `tinymov Happy coding! + +Custom Device Definitions +######################### + +Tinymovr uses YAML files for device specification (the spec). Device spec files reside in `{tinymovr_package_dir}/studio/Python/tinymovr/specs/`. This is where files covering Tinymovr firmware 1.3.x to 1.6.x are situated by default. + +You can add custom device spec files in this directory to tell Tinymovr Studio GUI, CLI and library how to communicate with custom devices. For instance, assuming that you have installed Tinymovr Studio using `pip3`, you will need to find the directory of the tinymovr package first using the command below: + +Windows +.. code-block:: console + + python -c "import os, tinymovr; print(os.path.dirname(tinymovr.__file__))" + +Macos and Linux +.. code-block:: console + + python3 -c "import os, tinymovr; print(os.path.dirname(tinymovr.__file__))" + +Then, paste your custom spec file to `{tinymovr_package_dir}/studio/Python/tinymovr/specs/`. Tinymovr should correctly discover your custom device. \ No newline at end of file From ecd2116ce6aa7f3be013811ad3c3f9900b3c8c70 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Thu, 28 Sep 2023 01:25:50 +0300 Subject: [PATCH 02/10] fix formatting --- docs/develop/guide.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/develop/guide.rst b/docs/develop/guide.rst index 2d686802..878363d0 100644 --- a/docs/develop/guide.rst +++ b/docs/develop/guide.rst @@ -242,18 +242,20 @@ Happy coding! Custom Device Definitions ######################### -Tinymovr uses YAML files for device specification (the spec). Device spec files reside in `{tinymovr_package_dir}/studio/Python/tinymovr/specs/`. This is where files covering Tinymovr firmware 1.3.x to 1.6.x are situated by default. +Tinymovr uses YAML files for device specification (the spec). Device spec files reside in ``{tinymovr_package_dir}/studio/Python/tinymovr/specs/``. This is where files covering Tinymovr firmware 1.3.x to 1.6.x are situated by default. -You can add custom device spec files in this directory to tell Tinymovr Studio GUI, CLI and library how to communicate with custom devices. For instance, assuming that you have installed Tinymovr Studio using `pip3`, you will need to find the directory of the tinymovr package first using the command below: +You can add custom device spec files in this directory to tell Tinymovr Studio GUI, CLI and library how to communicate with custom devices. For instance, assuming that you have installed Tinymovr Studio using ``pip3``, you will need to find the directory of the tinymovr package first using the command below: Windows + .. code-block:: console python -c "import os, tinymovr; print(os.path.dirname(tinymovr.__file__))" Macos and Linux + .. code-block:: console python3 -c "import os, tinymovr; print(os.path.dirname(tinymovr.__file__))" -Then, paste your custom spec file to `{tinymovr_package_dir}/studio/Python/tinymovr/specs/`. Tinymovr should correctly discover your custom device. \ No newline at end of file +Then, paste your custom spec file to ``{tinymovr_package_dir}/studio/Python/tinymovr/specs/``. Tinymovr should correctly discover your custom device. \ No newline at end of file From d3c9289812a23061add0d17bf33b1b3082455221 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Mon, 30 Oct 2023 01:30:58 +0200 Subject: [PATCH 03/10] add step to enter dfu mode --- docs/upgrade/upgrade.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/upgrade/upgrade.rst b/docs/upgrade/upgrade.rst index e62a0661..fa1b6f73 100644 --- a/docs/upgrade/upgrade.rst +++ b/docs/upgrade/upgrade.rst @@ -72,6 +72,24 @@ Flashing the Firmware Ensure your CAN interface is connected and configured correctly with Tinymovr. +2. **Enter DFU Mode**: + + Launch the Tinymovr CLI: + + .. code-block:: bash + + tinymovr_cli + + Once inside teh CLI, type the following to enter DFU Mode: + + .. code-block:: python + + tmx.enter_dfu() + + Then exit the CLI by typing ``exit``. + + If you are getting an exception after this command, it means that either your Tinymovr does not come with the DFU bootloader, so you will have to :ref:`upgrade-using-activeflashlight`, or your board is already in DFU mode. + 2. **Run the Script**: With the firmware .bin file you downloaded, execute the DFU script: From 5cc2c1f736a7f9d968e25f547f7c571725a58f50 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Mon, 30 Oct 2023 01:33:32 +0200 Subject: [PATCH 04/10] fix quotations --- docs/develop/guide.rst | 16 ++++++++-------- docs/features/features.rst | 22 +++++++++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/develop/guide.rst b/docs/develop/guide.rst index 878363d0..79367217 100644 --- a/docs/develop/guide.rst +++ b/docs/develop/guide.rst @@ -12,7 +12,7 @@ This document provides a guide for setting up a development environment for deve Hardware Connections #################### -For proper debugging capabilities you will need a Segger J-Link adapter. Unfortunately original J-Link adapters are quite expensive. A more affordable option is the J-Link EDU adapter at around $60 or the J-Link EDU mini adapter at around $20. In addition, there are J-Link clones that can be purchased for very low prices on ebay or Aliexpress. However, reliability of these clones is not guaranteed. +For proper debugging capabilities you will need a Segger J-Link adapter. Unfortunately original J-Link adapters are quite expensive. A more affordable option is the J-Link EDU adapter at around $60 or the J-Link EDU mini adapter at around $20. In addition, there are J-Link clones that can be purchased for very low prices on ebay or Aliexpress. However, reliability of these clones is not guaranteed, and we do not provide support when using these clones. With the board and J-Link adapter powered off, connect the J-Link to Tinymovr as shown below: @@ -42,7 +42,7 @@ Connection with SWD adapter (e.g. isolator) for R5: (diagrams made with `Wireviz `_) -As of Tinymovr 1.0.1, it is no longer necessary to patch the `JLinkDevices.xml` file with the PAC additions, in order for JLinkGDBServer to work properly. Relevant files are included in the repo. +As of Tinymovr 1.0.1, it is no longer necessary to patch the ``JLinkDevices.xml`` file with the PAC additions, in order for JLinkGDBServer to work properly. Relevant files are included in the repo. .. _develop-preparation: @@ -64,7 +64,7 @@ The file comes in a zipped installer exe (!), which all it does is extract the c cp -r /firmware/pac55xx_sdk/ -In any case, the target directory should be named `pac55xx_sdk`. The above copy command ensures this. +In any case, the target directory should be named ``pac55xx_sdk``. The above copy command ensures this. Now you have the required PAC SDK almost ready. There is a small patch that you will need to apply in the pac55xx_sdk directory. It is suggested to use the `Python patch package `_, which is cross-platform. If you do not have the package, install using pip: @@ -100,7 +100,7 @@ We take great pride in creating this in-house, cross-platform development soluti Configuring *********** -You'll need to configure the path to the JLink debug server in `.vscode/launch.json`. The configuration blocks look like this: +You'll need to configure the path to the JLink debug server in ``.vscode/launch.json``. The configuration blocks look like this: .. code-block:: javascript @@ -135,7 +135,7 @@ Select the board revision against which you are compiling from the list. The bui More about Hardware Revisions ----------------------------- -Tinymovr passes the `BOARD_REV_XX` argument regarding the board revision to the compiler. This is used in the firmware to configure the hardware accordingly. Invoking a make command with the REV argument is as follows: +Tinymovr passes the ``BOARD_REV_XX`` argument regarding the board revision to the compiler. This is used in the firmware to configure the hardware accordingly. Invoking a make command with the REV argument is as follows: .. code-block:: console @@ -157,7 +157,7 @@ Flashing and Debugging Before debugging, make sure the J-Link drivers and software is installed. The drivers and software, together with instructions, can be found in the `Qorvo website `_, under the download 'Segger J-Link Support'. This download includes a nacessary patch to enable J-Link to work with Qorvo devices. Instructions on how to apply the patch are included in the download. -The Tinymovr repo includes all VSCode settings configured, except for the JLink `serverpath` variable in `launch.json`, which you'll need to update to reflect your system. Note that there are multiple instances in the file, you'll need to update all of them. +The Tinymovr repo includes all VSCode settings configured, except for the JLink ``serverpath`` variable in ``launch.json``, which you'll need to update to reflect your system. Note that there are multiple instances in the file, you'll need to update all of them. We offer various VSCode launch configurations to suit different development and debugging tasks, including remote Tinymovr flashing debugging using a remote JLink server. These are are briefly outlined below. @@ -216,7 +216,7 @@ Eclipse is no longer supported. Consider :ref:`develop-setting-up-vscode` instea Setup Studio for Development ############################ -Tinymovr Studio is a Python application and as such can be easily set up to facilitate development. The approach is to use `pip` to install Tinymovr in develop mode, from a local copy of the (`git repo `_). This allows any changes you make to the local code to be immediately available when you run the executable (`tinymovr`, `tinymovr_cli`, or `tinymovr_dfu`). +Tinymovr Studio is a Python application and as such can be easily set up to facilitate development. The approach is to use ``pip`` to install Tinymovr in develop mode, from a local copy of the (``git repo ``_). This allows any changes you make to the local code to be immediately available when you run the executable (``tinymovr``, ``tinymovr_cli``, or ``tinymovr_dfu``). .. note:: We recommend installing Tinymovr in a virtual environment. `Here is a quick tutorial on how to setup a virtual environment using Conda `_. @@ -234,7 +234,7 @@ or to enable GUI support: pip3 install -e .[GUI] -This will install the Tinymovr Studio in develop mode. Now, `tinymovr`, `tinymovr_cli` and `tinymovr_dfu` will use the local Tinymovr Studio code. +This will install the Tinymovr Studio in develop mode. Now, ``tinymovr``, ``tinymovr_cl`i`` and ``tinymovr_dfu`` will use the local Tinymovr Studio code. Happy coding! diff --git a/docs/features/features.rst b/docs/features/features.rst index 161132c4..63c641d9 100644 --- a/docs/features/features.rst +++ b/docs/features/features.rst @@ -30,7 +30,7 @@ Before using the planner, the desired acceleration, deceleration and max velocit tm1.traj_planner.max_decel = {max_deceleration} # ticks/sec^2 tm1.traj_planner.max_vel = {mac_velocity} # ticks/sec -Once you set the desired acceleration and deceleration parameters, they do not need to be re-set. The parameters can be saved in NVRAM using `tmx.save_config()`. +Once you set the desired acceleration and deceleration parameters, they do not need to be re-set. The parameters can be saved in NVRAM using ``tmx.save_config()``. Once the parameters are set, you can execute a plan to a target position: @@ -70,7 +70,7 @@ Now the time-limited trajectory is executed as follows: Multi-axis Synchronization ******************************************** -Time-limited trajectories are useful for synchronizing the acceleration, cruise and deceleration phases for multiple axes. For instance, to synchronize three axes with different setpoints, you would configure the same `t_acc`, `t_cruise`, `t_dec` values. This guarantees that the trajectory phases are synchronized. Then you would issue the `move_to_tlimit` commands to each of the three different controllers in sequence: +Time-limited trajectories are useful for synchronizing the acceleration, cruise and deceleration phases for multiple axes. For instance, to synchronize three axes with different setpoints, you would configure the same ``t_acc``, ``t_cruise``, ``t_dec`` values. This guarantees that the trajectory phases are synchronized. Then you would issue the ``move_to_tlimit`` commands to each of the three different controllers in sequence: .. code-block:: python @@ -95,14 +95,14 @@ Because the homing planner relies on mechanical resistance of the structure, it There are six parameters in total that control the homing behavior: -* `tmx.homing.velocity`: The velocity at which the motor performs homing -* `tmx.homing.max_homing_t`: The maximum time the motor is allowed to travel before aborting homing -* `tmx.homing.retract_dist`: The retraction distance the motor travels after the endstop has been found -* `tmx.homing.stall_detect.velocity`: The velocity below which (and together with `stall_detect.delta_pos`) stall detection mode is triggered -* `tmx.homing.stall_detect.delta_pos`: The position error above which (and together with `stall_detect.velocity`) stall detection mode is triggered -* `tmx.homing.stall_detect.t`: The time to remain in stall detection mode before the motor is considered stalled +* ``tmx.homing.velocity``: The velocity at which the motor performs homing +* ``tmx.homing.max_homing_t``: The maximum time the motor is allowed to travel before aborting homing +* ``tmx.homing.retract_dist``: The retraction distance the motor travels after the endstop has been found +* ``tmx.homing.stall_detect.velocity``: The velocity below which (and together with ``stall_detect.delta_pos``) stall detection mode is triggered +* ``tmx.homing.stall_detect.delta_pos``: The position error above which (and together with ``stall_detect.velocity``) stall detection mode is triggered +* ``tmx.homing.stall_detect.t``: The time to remain in stall detection mode before the motor is considered stalled -In addition to the above, the phase current while the motor is stopped, until `stall_detect.t` time passes is the maximum allowed phase current, as defined in `tmx.controller.current.Iq_limit`. It is advisable to set this value so that mechanical damage or fatigue is avoided. +In addition to the above, the phase current while the motor is stopped, until ``stall_detect.t`` time passes is the maximum allowed phase current, as defined in ``tmx.controller.current.Iq_limit``. It is advisable to set this value so that mechanical damage or fatigue is avoided. Operation ********* @@ -125,7 +125,7 @@ FOC decouples the torque-producing and magnetizing currents by aligning the stat Two parameters control flux braking: -1. `tmx.controller.current.max_Ibus_regen`: The maximum current (in amperes) allowed to be fed back to the power source before flux braking activates. By adjusting this value, you can control the regenerative braking threshold and determine when flux braking should take effect. +1. ``tmx.controller.current.max_Ibus_regen``: The maximum current (in amperes) allowed to be fed back to the power source before flux braking activates. By adjusting this value, you can control the regenerative braking threshold and determine when flux braking should take effect. -2. `tmx.controller.current.max_Ibrake`: The maximum current (in amperes) allowed to be dumped to the motor windings during flux braking. By setting this value to zero, you can deactivate flux braking. Adjusting this parameter allows you to manage the braking torque and the heat generated during the braking process. +2. ``tmx.controller.current.max_Ibrake``: The maximum current (in amperes) allowed to be dumped to the motor windings during flux braking. By setting this value to zero, you can deactivate flux braking. Adjusting this parameter allows you to manage the braking torque and the heat generated during the braking process. From 8f96e75c648318686ef6bf172fcc361c04049177 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Sun, 5 Nov 2023 09:57:00 +0200 Subject: [PATCH 05/10] fix hall setup commands --- docs/sensors/sensors.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sensors/sensors.rst b/docs/sensors/sensors.rst index 4911997c..b00a4d9c 100644 --- a/docs/sensors/sensors.rst +++ b/docs/sensors/sensors.rst @@ -100,7 +100,7 @@ At this point, you are ready to perform motor/sensor calibration. This will meas .. code-block:: python - tmx.calibrate() + tmx.controller.calibrate() After calibration finishes, you should be able to control the motor: @@ -115,6 +115,6 @@ Once you have determined that the motor behaves as expected, set to idle and per .. code-block:: python - tmx.idle() + tmx.controller.idle() tmx.save_config() From 69b7916ac46ef337ea3bdf7c628fbb9cdb338f94 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Fri, 10 Nov 2023 15:25:34 +0200 Subject: [PATCH 06/10] add daisy chaining guide --- docs/hardware/daisy_chain.png | Bin 0 -> 126891 bytes docs/hardware/guide.rst | 13 ++++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 docs/hardware/daisy_chain.png diff --git a/docs/hardware/daisy_chain.png b/docs/hardware/daisy_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..f101bb82f337b3c3e41ea0b7a11ee73693fd1a5e GIT binary patch literal 126891 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�S%4$sC>F%2fr|_A|Ms8fcn0D z{=Ls=!0~CtkXy(g)`bxZ1kSxZvmK;rcN#v!b(;rJa_ddRUle(yY>V4WRY2UzZb^g8 zGnOh5GFhq_R9Yh0J7jp$t-%Sm(l<1Fa)y6lZ_zAfDjk#!Q5Xu8@&br+FYd_+pw>;Aot`X3O^N&^r^C0pqm>txIqtrLP6zX8VepMpgo^t)OtH>rGRcP0tn;@ zJ5J3v3l}Y_7-mnqwnU{oPFQl;4n@y zS!n$xkD(gGL52v1&hx2L+*pHc0&0qsRrWG+ZP>Yb%b5y-JFVT=f`SkSqttdMCN4(4$+)CVO;)Ti_3V6$l4FpW28)bT8m(70|JeCt-xk~3=tP2u#rt) z+u>;Df&IG-0f*`9r@wEX>>@0wpNJakx&VDpTRy!pHMQMMg%dwrHWEUD={V+3neRGE1pNN}flZC7os8=T7-Pkw6|Z zIaMd0#p#^ZFVsZ?zfU<{u_3W|qksS##wGXzfv)QHiw)f4zjHTG!G@afNU7in=3DD+ z2dlnqfmmb43QAS`vR_{uV2V4hL=fVGq(2Xtz!Fq35___!XoxNsBSfMc9AwNZb*E0B z?FMSUeNRN#l`B{J zi!VREq=_UapcV2KpS*s%nu^4l%q4XLA}TaQ=!;&>MF5LTDf(fTHb7)&AG=hupw{~$ z90ZLagvf>6GeU8o3s1E}P<41z$`%ZhmE8@#@E0#ZMs)1-^TKAxe#WVWHK6v;ze4(_FIJepke@T;Iwn1;|9I_|A-DKH tyBz%QkNjkd{V$c)|Gk#~scSjtvglsk-u)`c>}r9sf~x$j?|=B|e*iAo)UW^m literal 0 HcmV?d00001 diff --git a/docs/hardware/guide.rst b/docs/hardware/guide.rst index 9fba5d5f..59aaff11 100644 --- a/docs/hardware/guide.rst +++ b/docs/hardware/guide.rst @@ -137,4 +137,15 @@ Connecting Power With the power source off/disconnected, connect the power leads observing correct polarity. Turn on/connect the power source. Upon successful power-up, the onboard LED should light up. .. note:: - Each Tinymovr board has a capacitance of around 500μF (R3.x) / 200μF (R5) / 50μF (M5). Such capacitance can introduce significant inrush current upon power-on, especially if several boards are connected to the same power supply. To prevent damage to components from overcurrent, the use of an inrush current limiter or a current-limited power supply is advised. We offer a `Power Distribution and protection device `_ which is suitable for this task. + Each Tinymovr board has a capacitance of around 500μF (R3.x) / 240μF (R5) / 50μF (M5). Such capacitance can introduce significant inrush current upon power-on, especially if several boards are connected to the same power supply. To prevent damage to components from overcurrent, the use of an inrush current limiter or a current-limited power supply is advised. We offer a `Power Distribution and protection device `_ which is suitable for this task. + +.. _daisy-chain: + +Connecting Multiple Nodes (Daisy-Chaining) +########################################## + +Multiple nodes can be connected in a single CAN Bus network by means of daisy-chaining. Tinymovr R5 and Tinymovr M5 offer two CAN Bus ports for this purpose, which makes it easy to daisy-chain units. Note that for networks with long cable lengths, you may need termination on both ends. On one end this can be achieved with the onboard termination resistor of CANine, but on the other end you will have to provide your own. + +.. image:: daisy_chain.png + :width: 800 + :alt: Connecting multiple nodes by daisy-chaining \ No newline at end of file From 49bbd86a6c879ddee2e40de7b8308246c85caa6c Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Fri, 10 Nov 2023 15:33:58 +0200 Subject: [PATCH 07/10] add file required by readthedocs --- .readthedocs.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..d9ee7902 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,22 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/conf.py + +# We recommend specifying your dependencies to enable reproducible builds: +# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt \ No newline at end of file From 52ded00aa1c46211e949d9360665df041e4aaf5e Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Fri, 10 Nov 2023 15:34:58 +0200 Subject: [PATCH 08/10] remove deprecated file --- .readthedocs.yml | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 .readthedocs.yml diff --git a/.readthedocs.yml b/.readthedocs.yml deleted file mode 100644 index f374e3ee..00000000 --- a/.readthedocs.yml +++ /dev/null @@ -1,20 +0,0 @@ -# .readthedocs.yml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Build documentation in the docs/ directory with Sphinx -sphinx: - configuration: docs/conf.py - -# Optionally build your docs in additional formats such as PDF -formats: - - pdf - -# Optionally set the version of Python and requirements required to build your docs -python: - version: 3.7 - install: - - requirements: docs/requirements.txt \ No newline at end of file From 2504b0b801b7716606f1aaa87f68c16ab9151ca8 Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Sat, 6 Jan 2024 20:12:00 +0200 Subject: [PATCH 09/10] change test limits --- studio/Python/tests/test_base_function.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/studio/Python/tests/test_base_function.py b/studio/Python/tests/test_base_function.py index c204587d..a56c6837 100644 --- a/studio/Python/tests/test_base_function.py +++ b/studio/Python/tests/test_base_function.py @@ -22,15 +22,17 @@ def test_position_control(self): Test position control """ self.check_state(0) + self.tm.motor.I_cal = 5 + self.tm.controller.current.Iq_limit = 5 self.try_calibrate() self.tm.controller.position_mode() self.check_state(2) for i in range(5): - self.tm.controller.position.setpoint = i * 10000 * ticks + self.tm.controller.position.setpoint = i * 3000 * ticks time.sleep(0.25) self.assertAlmostEqual( - i * 10000 * ticks, self.tm.encoder.position_estimate, delta=1000 * ticks + i * 3000 * ticks, self.tm.encoder.position_estimate, delta=1000 * ticks ) From e95bacb0313625b0f07f1832ae9b453d9207c57d Mon Sep 17 00:00:00 2001 From: Yannis Chatzikonstantinou Date: Sat, 6 Jan 2024 20:13:00 +0200 Subject: [PATCH 10/10] allow adding custom spec files as cli parameters --- studio/Python/tests/test_dfu.py | 3 +- studio/Python/tinymovr/cli.py | 12 +++- studio/Python/tinymovr/config/__init__.py | 3 +- studio/Python/tinymovr/config/config.py | 82 +++++++++++------------ studio/Python/tinymovr/discovery.py | 4 +- studio/Python/tinymovr/gui/gui.py | 16 ++++- studio/Python/tinymovr/gui/window.py | 10 ++- 7 files changed, 73 insertions(+), 57 deletions(-) diff --git a/studio/Python/tests/test_dfu.py b/studio/Python/tests/test_dfu.py index 344e6a54..c560b576 100644 --- a/studio/Python/tests/test_dfu.py +++ b/studio/Python/tests/test_dfu.py @@ -22,8 +22,7 @@ from tinymovr import init_tee, destroy_tee from tinymovr.config import ( get_bus_config, - create_device, - definitions + create_device ) import unittest diff --git a/studio/Python/tinymovr/cli.py b/studio/Python/tinymovr/cli.py index 3c70a9d7..03a7ea16 100644 --- a/studio/Python/tinymovr/cli.py +++ b/studio/Python/tinymovr/cli.py @@ -1,16 +1,18 @@ """Tinymovr Studio CLI Usage: - tinymovr_cli [--bus=] [--chan=] [--bitrate=] + tinymovr_cli [--bus=] [--chan=] [--spec=] [--bitrate=] tinymovr_cli -h | --help tinymovr_cli --version Options: --bus= One or more interfaces to use, first available is used [default: canine,slcan_disco]. --chan= The bus device "channel". + --spec= A custom device spec to be added to the list of discoverable spec. --bitrate= CAN bitrate [default: 1000000]. """ +import yaml import can import pkg_resources import IPython @@ -20,7 +22,7 @@ from tinymovr import init_tee, destroy_tee from tinymovr.discovery import Discovery from tinymovr.constants import app_name -from tinymovr.config import get_bus_config, configure_logging +from tinymovr.config import get_bus_config, configure_logging, add_spec """ Tinymovr CLI Module @@ -49,6 +51,12 @@ def spawn(): logger = configure_logging() + spec_file = arguments["--spec"] + if spec_file: + with open(spec_file, 'r') as file: + spec_data = yaml.safe_load(file) + add_spec(spec_data, logger) + buses = arguments["--bus"].rsplit(sep=",") channel = arguments["--chan"] bitrate = int(arguments["--bitrate"]) diff --git a/studio/Python/tinymovr/config/__init__.py b/studio/Python/tinymovr/config/__init__.py index f48375b6..87c5bf66 100644 --- a/studio/Python/tinymovr/config/__init__.py +++ b/studio/Python/tinymovr/config/__init__.py @@ -1,8 +1,7 @@ from tinymovr.config.config import ( get_bus_config, configure_logging, - definitions, create_device, create_device_with_hash_msg, - ProtocolVersionError, + add_spec, ) diff --git a/studio/Python/tinymovr/config/config.py b/studio/Python/tinymovr/config/config.py index 91dc61d0..28ab4698 100644 --- a/studio/Python/tinymovr/config/config.py +++ b/studio/Python/tinymovr/config/config.py @@ -25,29 +25,30 @@ from tinymovr.codec import DataType from tinymovr.channel import CANChannel -definitions = {"hash_uint32": {}, "name": {}} - -for yaml_file in Path(files("tinymovr").joinpath("specs/")).glob("*.yaml"): - with open(str(yaml_file)) as def_raw: - definition = yaml.safe_load(def_raw) - tmp_node = deserialize(definition) - definitions["hash_uint32"][tmp_node.hash_uint32] = definition - definitions["name"][definition["name"]] = definition - - -class ProtocolVersionError(Exception): - def __init__(self, dev_id, version_str, *args, **kwargs): - self.dev_id = dev_id - self.version_str = cleanup_incomplete_version(version_str) - msg = ( - "Incompatible protocol versions (hash mismatch) for device {}. " - "Firmware is compatible with Studio version {}.\n\n" - "Either upgrade studio and firmware, or install a compatible Studio version like so:\n\n" - "pip3 uninstall tinymovr\npip3 install tinymovr=={}".format( - self.dev_id, self.version_str, self.version_str - ) - ) - super().__init__(msg, *args, **kwargs) +specs = {"hash_uint32": {}} + + +def init_specs_dict(): + global specs + for yaml_file in Path(files("tinymovr").joinpath("specs/")).glob("*.yaml"): + with open(str(yaml_file)) as def_raw: + spec = yaml.safe_load(def_raw) + add_spec(spec) + + +def add_spec(spec, logger=None): + if logger is None: + logger = logging.getLogger("tinymovr") + + tmp_node = deserialize(spec) + hash_value = tmp_node.hash_uint32 + if hash_value in specs["hash_uint32"]: + logger.warning("Provided spec with hash {} already exists in hash/name dictionary".format(hash_value)) + else: + specs["hash_uint32"][hash_value] = spec + + +init_specs_dict() def get_bus_config(suggested_types=None): @@ -70,24 +71,22 @@ def create_device(node_id): """ chan = CANChannel(node_id) - # Temporarily using a default definition to get the protocol_hash - # This assumes that `protocol_hash` is standard across different definitions - # Get the first definition as a temp - tmp_definition = list(definitions["hash_uint32"].values())[0] - node = deserialize(tmp_definition) + # Temporarily using a default spec to get the protocol_hash + # This assumes that `protocol_hash` is standard across different specs + # Get the first spec as a temp + tmp_spec = list(specs["hash_uint32"].values())[0] + node = deserialize(tmp_spec) node._channel = chan - # Check for the correct definition using the remote hash + # Check for the correct spec using the remote hash protocol_hash = node.protocol_hash - device_definition = definitions["hash_uint32"].get(protocol_hash) + device_spec = specs["hash_uint32"].get(protocol_hash) - if not device_definition: - raise ValueError(f"No device definition found for hash {protocol_hash}.") + if not device_spec: + raise ValueError(f"No device spec found for hash {protocol_hash}.") - node = deserialize(device_definition) + node = deserialize(device_spec) node._channel = chan - if node.hash_uint32 != protocol_hash: - raise ProtocolVersionError(node_id, "") return node @@ -101,17 +100,12 @@ def create_device_with_hash_msg(heartbeat_msg): chan = CANChannel(node_id) hash, *_ = chan.serializer.deserialize(heartbeat_msg.data[:4], DataType.UINT32) - device_definition = definitions["hash_uint32"].get(hash) + device_spec = specs["hash_uint32"].get(hash) - if not device_definition: - raise ValueError(f"No device definition found for hash {hash}.") + if not device_spec: + raise ValueError(f"No device spec found for hash {hash}.") - node = deserialize(device_definition) - if node.hash_uint32 != hash: - version_str = "".join([chr(n) for n in heartbeat_msg.data[4:]]) - if not version_str.strip(): - version_str = "1.3.1" - raise ProtocolVersionError(node_id, version_str) + node = deserialize(device_spec) node._channel = chan return node diff --git a/studio/Python/tinymovr/discovery.py b/studio/Python/tinymovr/discovery.py index 4a643354..f4f946f0 100644 --- a/studio/Python/tinymovr/discovery.py +++ b/studio/Python/tinymovr/discovery.py @@ -21,7 +21,7 @@ from tinymovr.channel import ResponseError from tinymovr.tee import get_tee from tinymovr.constants import HEARTBEAT_BASE -from tinymovr.config import create_device_with_hash_msg, ProtocolVersionError +from tinymovr.config import create_device_with_hash_msg class Discovery: @@ -72,7 +72,7 @@ def _recv_cb(self, frame): self._append_to_queue((node, node_id)) except ResponseError as e: self.logger.error(e) - except ProtocolVersionError as e: + except ValueError as e: self.logger.error(e) self.incompatible_nodes.add(node_id) self.pending_nodes.remove(node_id) diff --git a/studio/Python/tinymovr/gui/gui.py b/studio/Python/tinymovr/gui/gui.py index 0d1902ca..99539b00 100644 --- a/studio/Python/tinymovr/gui/gui.py +++ b/studio/Python/tinymovr/gui/gui.py @@ -1,23 +1,26 @@ """Tinymovr Studio GUI Usage: - tinymovr [--bus=] [--chan=] [--bitrate=] [--max-timeouts=] + tinymovr [--bus=] [--chan=] [--spec=] [--bitrate=] [--max-timeouts=] tinymovr -h | --help tinymovr --version Options: --bus= One or more interfaces to use, first available is used [default: canine,slcan_disco]. --chan= The bus device "channel". + --spec= A custom device spec to be added to the list of discoverable specs. --bitrate= CAN bitrate [default: 1000000]. --max-timeouts= Max timeouts before nodes are rescanned [default: 5]. """ import sys +import yaml import pkg_resources from docopt import docopt from PySide6.QtWidgets import QApplication from tinymovr.gui import MainWindow, app_stylesheet, app_stylesheet_dark, is_dark_mode from tinymovr.constants import app_name +from tinymovr.config import configure_logging, add_spec """ @@ -41,11 +44,20 @@ def spawn(): version = pkg_resources.require("tinymovr")[0].version arguments = docopt(__doc__, version=app_name + " " + str(version)) + + logger = configure_logging() + + spec_file = arguments["--spec"] + if spec_file: + with open(spec_file, 'r') as file: + spec_data = yaml.safe_load(file) + add_spec(spec_data, logger) + app = QApplication(sys.argv) if is_dark_mode(): app.setStyleSheet(app_stylesheet_dark) else: app.setStyleSheet(app_stylesheet) - w = MainWindow(app, arguments) + w = MainWindow(app, arguments, logger) w.show() sys.exit(app.exec_()) diff --git a/studio/Python/tinymovr/gui/window.py b/studio/Python/tinymovr/gui/window.py index 1e411c79..00d50752 100644 --- a/studio/Python/tinymovr/gui/window.py +++ b/studio/Python/tinymovr/gui/window.py @@ -16,6 +16,7 @@ """ import time +import logging import pkg_resources from functools import partial from contextlib import suppress @@ -42,7 +43,7 @@ import pyqtgraph as pg from tinymovr.constants import app_name from tinymovr.channel import ResponseError as ChannelResponseError -from tinymovr.config import get_bus_config, configure_logging +from tinymovr.config import get_bus_config from avlos import get_registry from avlos.json_codec import AvlosEncoder from tinymovr.gui import ( @@ -62,14 +63,17 @@ class MainWindow(QMainWindow): TreeItemCheckedSignal = Signal(dict) - def __init__(self, app, arguments): + def __init__(self, app, arguments, logger): super(MainWindow, self).__init__() # set units default format get_registry().default_format = ".6f~" self.start_time = time.time() - self.logger = configure_logging() + if logger is None: + self.logger = logging.getLogger("tinymovr") + else: + self.logger = logger self.attr_widgets_by_id = {} self.graphs_by_id = {}