ekfsm 1.2.0a7__tar.gz → 1.3.0a26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ekfsm might be problematic. Click here for more details.

Files changed (378) hide show
  1. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.readthedocs.yaml +1 -1
  2. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/PKG-INFO +8 -5
  3. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/README.md +3 -3
  4. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/devenv.lock +4 -4
  5. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/devenv.nix +43 -3
  6. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/hitron/hdrc-300s.rst +11 -11
  7. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/intro.rst +6 -6
  8. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/hitron/hdrc-300s.yaml +1 -1
  9. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/cli.py +6 -8
  10. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/config.py +14 -6
  11. ekfsm-1.3.0a26/ekfsm/core/__init__.py +14 -0
  12. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/core/components.py +4 -4
  13. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/core/slots.py +6 -13
  14. ekfsm-1.3.0a26/ekfsm/core/sysfs.py +251 -0
  15. ekfsm-1.3.0a26/ekfsm/core/utils.py +132 -0
  16. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/__init__.py +8 -7
  17. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/coretemp.py +11 -10
  18. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/eeprom.py +52 -39
  19. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/ekf_ccu_uc.py +37 -46
  20. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/ekf_sur_led.py +6 -2
  21. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/generic.py +141 -88
  22. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/gpio.py +33 -25
  23. ekfsm-1.3.0a26/ekfsm/devices/iio.py +42 -0
  24. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/iio_thermal_humidity.py +12 -13
  25. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/mux.py +11 -6
  26. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/pmbus.py +60 -67
  27. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/smbios.py +10 -8
  28. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/smbus.py +1 -1
  29. ekfsm-1.3.0a26/ekfsm/devices/utils.py +7 -0
  30. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/exceptions.py +28 -7
  31. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/simctrl.py +37 -83
  32. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/system.py +44 -70
  33. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/utils.py +9 -6
  34. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/pyproject.toml +15 -5
  35. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/scripts/modify-acpi-table.sh +11 -17
  36. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/basic_sim.py +4 -9
  37. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/ccu-test.py +5 -6
  38. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/ccu_wokwi_sim.py +2 -6
  39. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/locking/test_lock.py +3 -2
  40. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/props.py +5 -9
  41. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/run.py +2 -4
  42. ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-17/new_device +0 -0
  43. ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/new_device +0 -0
  44. ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/new_device +0 -0
  45. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/srf-fan-test.py +2 -2
  46. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/test_config.py +2 -1
  47. ekfsm-1.3.0a26/tests/test_module_schema.py +28 -0
  48. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/test_sim-ccu-eeprom.py +5 -7
  49. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/test_sim1.py +11 -11
  50. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/test_sim2.py +9 -11
  51. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2-comp1_smoke.py +5 -6
  52. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2-comp2_smoke.py +5 -6
  53. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2_ccu_exp.py +3 -3
  54. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2_ccu_imu.py +3 -6
  55. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2_psu.py +3 -4
  56. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/uv.lock +198 -0
  57. ekfsm-1.2.0a7/ekfsm/core/__init__.py +0 -14
  58. ekfsm-1.2.0a7/ekfsm/core/sysfs.py +0 -81
  59. ekfsm-1.2.0a7/ekfsm/core/utils.py +0 -92
  60. ekfsm-1.2.0a7/ekfsm/devices/iio.py +0 -58
  61. ekfsm-1.2.0a7/ekfsm/devices/utils.py +0 -16
  62. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.env +0 -0
  63. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.envrc +0 -0
  64. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.flake8 +0 -0
  65. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.gitignore +0 -0
  66. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.gitlab-ci.yml +0 -0
  67. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.vscode/launch.json +0 -0
  68. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/.vscode/settings.json +0 -0
  69. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/GitVersion.yml +0 -0
  70. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/LICENSE.md +0 -0
  71. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/devenv.yaml +0 -0
  72. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/.gitignore +0 -0
  73. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/Makefile +0 -0
  74. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/ccu.doctree +0 -0
  75. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sc5-festival.doctree +0 -0
  76. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sc9-toccata.doctree +0 -0
  77. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/se5-club.doctree +0 -0
  78. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sn4-djembe.doctree +0 -0
  79. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/snippets/cpci_inventory.doctree +0 -0
  80. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/spv-mystic.doctree +0 -0
  81. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sq1-track.doctree +0 -0
  82. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sq3-quartet.doctree +0 -0
  83. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/ekf/sur-uart.doctree +0 -0
  84. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards/hitron/hdrc-300s.doctree +0 -0
  85. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/boards.doctree +0 -0
  86. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/environment.pickle +0 -0
  87. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/index.doctree +0 -0
  88. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/intro.doctree +0 -0
  89. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/reference/ekfsm.doctree +0 -0
  90. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/reference/index.doctree +0 -0
  91. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/doctrees/reference/systemconfig.doctree +0 -0
  92. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/.buildinfo +0 -0
  93. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_images/devices.drawio.png +0 -0
  94. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_images/ekfsm_system.drawio.png +0 -0
  95. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/cli.html +0 -0
  96. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/config.html +0 -0
  97. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/core/components.html +0 -0
  98. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/core/probe.html +0 -0
  99. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/core/slots.html +0 -0
  100. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/core/sysfs.html +0 -0
  101. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/core/utils.html +0 -0
  102. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/coretemp.html +0 -0
  103. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/eeprom.html +0 -0
  104. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/ekf_ccu_uc.html +0 -0
  105. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/ekf_sur_led.html +0 -0
  106. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/generic.html +0 -0
  107. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/gpio.html +0 -0
  108. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/iio.html +0 -0
  109. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/iio_thermal_humidity.html +0 -0
  110. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/imu.html +0 -0
  111. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/mux.html +0 -0
  112. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/pmbus.html +0 -0
  113. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/smbios.html +0 -0
  114. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/devices/utils.html +0 -0
  115. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/exceptions.html +0 -0
  116. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/lock.html +0 -0
  117. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/log.html +0 -0
  118. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/system.html +0 -0
  119. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/ekfsm/utils.html +0 -0
  120. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/enum.html +0 -0
  121. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_modules/index.html +0 -0
  122. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/ccu.rst.txt +0 -0
  123. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sc5-festival.rst.txt +0 -0
  124. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sc9-toccata.rst.txt +0 -0
  125. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/se5-club.rst.txt +0 -0
  126. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sn4-djembe.rst.txt +0 -0
  127. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/snippets/cpci_inventory.rst.txt +0 -0
  128. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/spv-mystic.rst.txt +0 -0
  129. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sq1-track.rst.txt +0 -0
  130. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sq3-quartet.rst.txt +0 -0
  131. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/ekf/sur-uart.rst.txt +0 -0
  132. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards/hitron/hdrc-300s.rst.txt +0 -0
  133. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/boards.rst.txt +0 -0
  134. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/index.rst.txt +0 -0
  135. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/intro.rst.txt +0 -0
  136. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/reference/ekfsm.rst.txt +0 -0
  137. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/reference/index.rst.txt +0 -0
  138. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_sources/reference/systemconfig.rst.txt +0 -0
  139. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  140. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/basic.css +0 -0
  141. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/badge_only.css +0 -0
  142. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  143. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  144. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  145. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  146. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  147. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  148. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  149. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  150. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  151. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  152. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  153. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  154. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  155. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  156. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  157. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  158. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  159. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/css/theme.css +0 -0
  160. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/devices.drawio.png +0 -0
  161. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/devices.drawio.svg +0 -0
  162. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/doctools.js +0 -0
  163. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/documentation_options.js +0 -0
  164. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/ekfsm_system.drawio.png +0 -0
  165. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/ekfsm_system.drawio.svg +0 -0
  166. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/file.png +0 -0
  167. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  168. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  169. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  170. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  171. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  172. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  173. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  174. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  175. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  176. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  177. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  178. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  179. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  180. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  181. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  182. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  183. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  184. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  185. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  186. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  187. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  188. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  189. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  190. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  191. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/jquery.js +0 -0
  192. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/js/badge_only.js +0 -0
  193. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/js/theme.js +0 -0
  194. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/js/versions.js +0 -0
  195. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/language_data.js +0 -0
  196. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/minus.png +0 -0
  197. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/plus.png +0 -0
  198. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/pygments.css +0 -0
  199. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/searchtools.js +0 -0
  200. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/_static/sphinx_highlight.js +0 -0
  201. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/ccu.html +0 -0
  202. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sc5-festival.html +0 -0
  203. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sc9-toccata.html +0 -0
  204. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/se5-club.html +0 -0
  205. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sn4-djembe.html +0 -0
  206. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/snippets/cpci_inventory.html +0 -0
  207. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/spv-mystic.html +0 -0
  208. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sq1-track.html +0 -0
  209. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sq3-quartet.html +0 -0
  210. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/ekf/sur-uart.html +0 -0
  211. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards/hitron/hdrc-300s.html +0 -0
  212. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/boards.html +0 -0
  213. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/genindex.html +0 -0
  214. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/index.html +0 -0
  215. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/intro.html +0 -0
  216. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/objects.inv +0 -0
  217. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/py-modindex.html +0 -0
  218. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/reference/ekfsm.html +0 -0
  219. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/reference/index.html +0 -0
  220. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/reference/systemconfig.html +0 -0
  221. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/search.html +0 -0
  222. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/html/searchindex.js +0 -0
  223. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/LICRcyr2utf8.xdy +0 -0
  224. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/LICRlatin2utf8.xdy +0 -0
  225. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/LatinRules.xdy +0 -0
  226. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/Makefile +0 -0
  227. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  228. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/_static/jquery.js +0 -0
  229. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/devices.drawio.png +0 -0
  230. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.aux +0 -0
  231. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.fdb_latexmk +0 -0
  232. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.fls +0 -0
  233. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.idx +0 -0
  234. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.ilg +0 -0
  235. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.ind +0 -0
  236. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.log +0 -0
  237. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.out +0 -0
  238. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.pdf +0 -0
  239. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.tex +0 -0
  240. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm.toc +0 -0
  241. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/ekfsm_system.drawio.png +0 -0
  242. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/latexmkjarc +0 -0
  243. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/latexmkrc +0 -0
  244. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/make.bat +0 -0
  245. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/python.ist +0 -0
  246. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinx.sty +0 -0
  247. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinx.xdy +0 -0
  248. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxhighlight.sty +0 -0
  249. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxhowto.cls +0 -0
  250. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexadmonitions.sty +0 -0
  251. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexcontainers.sty +0 -0
  252. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexgraphics.sty +0 -0
  253. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexindbibtoc.sty +0 -0
  254. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexlists.sty +0 -0
  255. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexliterals.sty +0 -0
  256. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexnumfig.sty +0 -0
  257. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexobjects.sty +0 -0
  258. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexshadowbox.sty +0 -0
  259. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexstyleheadings.sty +0 -0
  260. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexstylepage.sty +0 -0
  261. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatexstyletext.sty +0 -0
  262. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxlatextables.sty +0 -0
  263. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxmanual.cls +0 -0
  264. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxmessages.sty +0 -0
  265. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxoptionsgeometry.sty +0 -0
  266. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxoptionshyperref.sty +0 -0
  267. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxpackageboxes.sty +0 -0
  268. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxpackagecyrillic.sty +0 -0
  269. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxpackagefootnote.sty +0 -0
  270. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/build/latex/sphinxpackagesubstitutefont.sty +0 -0
  271. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/requirements.txt +0 -0
  272. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/_static/devices.drawio.png +0 -0
  273. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/_static/devices.drawio.svg +0 -0
  274. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/_static/ekfsm_system.drawio.png +0 -0
  275. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/_static/ekfsm_system.drawio.svg +0 -0
  276. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/ccu.rst +0 -0
  277. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sc5-festival.rst +0 -0
  278. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sc9-toccata.rst +0 -0
  279. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/se5-club.rst +0 -0
  280. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sn4-djembe.rst +0 -0
  281. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/snippets/cpci_inventory.rst +0 -0
  282. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/spv-mystic.rst +0 -0
  283. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sq1-track.rst +0 -0
  284. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sq3-quartet.rst +0 -0
  285. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards/ekf/sur-uart.rst +0 -0
  286. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/boards.rst +0 -0
  287. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/conf.py +0 -0
  288. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/index.rst +0 -0
  289. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/reference/ekfsm.rst +0 -0
  290. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/reference/index.rst +0 -0
  291. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/docs/source/reference/systemconfig.rst +0 -0
  292. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/__init__.py +0 -0
  293. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/ccu.yaml +0 -0
  294. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sc5-festival.yaml +0 -0
  295. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sc9-toccata.yaml +0 -0
  296. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/se5-club.yaml +0 -0
  297. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sn4-djembe.yaml +0 -0
  298. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/spv-mystic.yaml +0 -0
  299. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sq1-track.yaml +0 -0
  300. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sq3-quartet.yaml +0 -0
  301. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/srf-fan.yaml +0 -0
  302. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/boards/oem/ekf/sur-uart.yaml +0 -0
  303. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/core/probe.py +0 -0
  304. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/devices/imu.py +0 -0
  305. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/lock.py +1 -1
  306. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/log.py +0 -0
  307. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/ekfsm/py.typed +0 -0
  308. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/hack/bringup_zip_i2c_devs.sh +0 -0
  309. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/__init__.py +0 -0
  310. {ekfsm-1.2.0a7/tests/testdata → ekfsm-1.3.0a26/tests/data}/cfg_simple.yaml +0 -0
  311. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/locking/lock_tester.py +1 -1
  312. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sc5-hitron-only.yaml +0 -0
  313. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/__init__.py +0 -0
  314. /ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-10/new_device → /ekfsm-1.3.0a26/tests/sim/sys/bus/i2c/drivers/at24/.keep +0 -0
  315. /ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-11/new_device → /ekfsm-1.3.0a26/tests/sim/sys/bus/i2c/drivers/pca953x/.keep +0 -0
  316. /ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-12/new_device → /ekfsm-1.3.0a26/tests/sim/sys/bus/i2c/drivers/pca954x/.keep +0 -0
  317. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/class/hwmon/hwmon2/name +0 -0
  318. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/class/hwmon/hwmon2/temp1_input +0 -0
  319. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-10/firmware_node/adr +0 -0
  320. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-10/name +0 -0
  321. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-10}/new_device +0 -0
  322. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-11/firmware_node/adr +0 -0
  323. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-11/name +0 -0
  324. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-15 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-11}/new_device +0 -0
  325. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-12/firmware_node/adr +0 -0
  326. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-12/name +0 -0
  327. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-16 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-12}/new_device +0 -0
  328. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/firmware_node/adr +0 -0
  329. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:01/firmware_node/description +0 -0
  330. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:01/gpiochip1/dev +0 -0
  331. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:01/name +0 -0
  332. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:02/eeprom +0 -0
  333. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:02/firmware_node/description +0 -0
  334. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/i2c-PRP0002:02/name +0 -0
  335. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14/name +0 -0
  336. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-17 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-14}/new_device +0 -0
  337. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-15/firmware_node/adr +0 -0
  338. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-15/name +0 -0
  339. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-15}/new_device +0 -0
  340. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-16/firmware_node/adr +0 -0
  341. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-16/name +0 -0
  342. {ekfsm-1.2.0a7/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1 → ekfsm-1.3.0a26/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-16}/new_device +0 -0
  343. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-17/firmware_node/adr +0 -0
  344. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-17/name +0 -0
  345. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/firmware_node/adr +0 -0
  346. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:01/firmware_node/description +0 -0
  347. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:01/gpiochip1/dev +0 -0
  348. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:01/name +0 -0
  349. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:02/eeprom +0 -0
  350. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:02/firmware_node/description +0 -0
  351. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/i2c-PRP0001:02/name +0 -0
  352. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-9/name +0 -0
  353. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:00/firmware_node/description +0 -0
  354. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:00/name +0 -0
  355. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/firmware_node/description +0 -0
  356. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/curr1_input +0 -0
  357. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/curr2_input +0 -0
  358. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/in1_input +0 -0
  359. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/in2_input +0 -0
  360. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/model +0 -0
  361. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/revision +0 -0
  362. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/serial +0 -0
  363. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/temp1_input +0 -0
  364. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/hwmon/hwmon99/vendor +0 -0
  365. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0001:03/name +0 -0
  366. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0002:00/firmware_node/description +0 -0
  367. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.2/i2c-1/i2c-PRP0002:00/name +0 -0
  368. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:1f.4/i2c-7/7-0057/eeprom +0 -0
  369. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/pci0000:00/0000:00:1f.4/i2c-7/7-0057/name +0 -0
  370. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/devices/virtual/dmi/id/board_version +0 -0
  371. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/kernel/debug/pmbus/hwmon99/status0_input +0 -0
  372. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/sys/kernel/debug/pmbus/hwmon99/status1_input +0 -0
  373. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/test_system.yaml +0 -0
  374. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/sim/test_system_inconsistent.yaml +0 -0
  375. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/srf-fan-test.yaml +0 -0
  376. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2-ccu-only.yaml +0 -0
  377. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2-comp1.yaml +0 -0
  378. {ekfsm-1.2.0a7 → ekfsm-1.3.0a26}/tests/zip2-comp2.yaml +0 -0
@@ -29,4 +29,4 @@ sphinx:
29
29
  # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
30
30
  python:
31
31
  install:
32
- - requirements: docs/requirements.txt
32
+ - requirements: docs/requirements.txt
@@ -1,17 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ekfsm
3
- Version: 1.2.0a7
3
+ Version: 1.3.0a26
4
4
  Summary: The EKF System Management Library (ekfsm) is a sensor monitoring suite for Compact PCI Serial devices.
5
- Author-email: Klaus Popp <klaus.popp@ci4rail.com>, Jan Jansen <jan@ekf.de>, Felix Päßler <fp@ekf.de>
5
+ Author-email: Jan Jansen <jan@ekf.de>, Klaus Popp <klaus.popp@ci4rail.com>, Felix Päßler <fp@ekf.de>
6
6
  Requires-Python: >=3.10
7
7
  Requires-Dist: anytree
8
8
  Requires-Dist: click>=8.0.1
9
9
  Requires-Dist: crcmod
10
10
  Requires-Dist: gpiod>=2.1.0
11
11
  Requires-Dist: hexdump
12
+ Requires-Dist: ipdb>=0.13.13
12
13
  Requires-Dist: more-itertools
13
14
  Requires-Dist: munch
15
+ Requires-Dist: schema>=0.7.7
14
16
  Requires-Dist: smbus2
17
+ Requires-Dist: termcolor>=3.0.1
15
18
  Requires-Dist: types-pyyaml>=6.0.12.20241230
16
19
  Requires-Dist: yamale
17
20
  Description-Content-Type: text/markdown
@@ -146,9 +149,9 @@ import ekfsm
146
149
 
147
150
  system = ekfsm.System("system.yaml")
148
151
 
149
- # alternative ways to get the SUR HwModule
150
- sur = system["SER"] # by using the hwmodule name as key
151
- sur = system.ser # by using the hwmodule name as attribute
152
+ # alternative ways to get the SUR HWModule
153
+ sur = system["SER"] # by using the HWModule name as key
154
+ sur = system.ser # by using the HWmodule name as attribute
152
155
  sur = system.slots["SLOT1"].hwmodule # by using the slot name as key
153
156
  sur = system.slots.slot1.hwmodule # by using the slot name as attribute
154
157
 
@@ -128,9 +128,9 @@ import ekfsm
128
128
 
129
129
  system = ekfsm.System("system.yaml")
130
130
 
131
- # alternative ways to get the SUR HwModule
132
- sur = system["SER"] # by using the hwmodule name as key
133
- sur = system.ser # by using the hwmodule name as attribute
131
+ # alternative ways to get the SUR HWModule
132
+ sur = system["SER"] # by using the HWModule name as key
133
+ sur = system.ser # by using the HWmodule name as attribute
134
134
  sur = system.slots["SLOT1"].hwmodule # by using the slot name as key
135
135
  sur = system.slots.slot1.hwmodule # by using the slot name as attribute
136
136
 
@@ -3,10 +3,10 @@
3
3
  "devenv": {
4
4
  "locked": {
5
5
  "dir": "src/modules",
6
- "lastModified": 1740649578,
6
+ "lastModified": 1743582803,
7
7
  "owner": "cachix",
8
8
  "repo": "devenv",
9
- "rev": "6344ff303b0098afae94b28df8dc1b9b7ac1e227",
9
+ "rev": "3dd684b5df083ca48a8db263d9406bf83fc12b3e",
10
10
  "type": "github"
11
11
  },
12
12
  "original": {
@@ -40,10 +40,10 @@
40
40
  ]
41
41
  },
42
42
  "locked": {
43
- "lastModified": 1737465171,
43
+ "lastModified": 1742649964,
44
44
  "owner": "cachix",
45
45
  "repo": "git-hooks.nix",
46
- "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
46
+ "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
47
47
  "type": "github"
48
48
  },
49
49
  "original": {
@@ -30,11 +30,26 @@
30
30
  };
31
31
 
32
32
  git-hooks.hooks = {
33
+ default-version = {
34
+ enable = true;
35
+ name = "Ensure default version";
36
+ entry = "git-reset-version";
37
+ pass_filenames = false;
38
+ };
39
+
40
+ update-docs-requirements = {
41
+ enable = true;
42
+ name = "Update requirements of documentation";
43
+ entry = "update-docs";
44
+ pass_filenames = false;
45
+ };
46
+
33
47
  # Remove trailing whitespace
34
48
  trailing-whitespace = {
35
49
  enable = true;
36
50
  package = pkgs.python3Packages.pre-commit-hooks;
37
51
  entry = "trailing-whitespace-fixer";
52
+ excludes = [ "tests/sim/sys/.*$" ];
38
53
  };
39
54
 
40
55
  # Ensure files end with a newline
@@ -47,6 +62,26 @@
47
62
  flake8.enable = true;
48
63
  };
49
64
 
65
+ scripts.update-docs.exec = ''
66
+ temp_file=$(mktemp)
67
+ trap "rm -f $temp_file" 0 2 3 15
68
+ uv export > $temp_file 2>/dev/null
69
+
70
+ if diff -q $temp_file docs/requirements.txt &>/dev/null; then
71
+ update-doc-reqs
72
+
73
+ if git diff --cached --name-only | grep -q -- 'uv.lock'; then
74
+ git add docs/requirements.txt
75
+ fi
76
+ fi
77
+ '';
78
+
79
+ scripts.git-reset-version.exec = ''
80
+ if git diff --cached --name-only | grep -q -- "^pyproject.toml"; then
81
+ uvx --from=toml-cli toml set --toml-path=pyproject.toml project.version 0.0.0 && git add pyproject.toml
82
+ fi
83
+ '';
84
+
50
85
  scripts.bump-version.exec = ''
51
86
  uvx --from=toml-cli toml set --toml-path=pyproject.toml project.version $(uvx dunamai from any --no-metadata --style semver)
52
87
  '';
@@ -57,12 +92,17 @@
57
92
  '';
58
93
 
59
94
  scripts.generate-doc-reqs.exec = ''
60
- uv export >docs/requirements.txt
95
+ uv export > docs/requirements.txt
61
96
  '';
62
97
 
63
98
  scripts.generate-coverage.exec = ''
64
- uv run --with pytest-cov pytest --cov=ekfsm --cov --cov-report term --cov-report xml:coverage.xml | perl -pe 's/\e\[?.*?[\@-~]//g' | tee pytest.log
65
- uv run --with pytest-cov pytest --cov=ekfsm --junitxml=report.xml
99
+ if [ "$EUID" -ne 0 ]; then
100
+ uv run --with pytest-cov pytest -k 'not locking' --cov=ekfsm --cov --cov-report term --cov-report xml:coverage.xml | perl -pe 's/\e\[?.*?[\@-~]//g' | tee pytest.log
101
+ uv run --with pytest-cov pytest -k 'not locking' --cov=ekfsm --junitxml=report.xml
102
+ else
103
+ uv run --with pytest-cov pytest --cov=ekfsm --cov --cov-report term --cov-report xml:coverage.xml | perl -pe 's/\e\[?.*?[\@-~]//g' | tee pytest.log
104
+ uv run --with pytest-cov pytest --cov=ekfsm --junitxml=report.xml
105
+ fi
66
106
  '';
67
107
 
68
108
  scripts.doc-coverage.exec = ''
@@ -10,13 +10,13 @@ The inventory provides access to the PSU inventory, such as the vendor, model, s
10
10
  +---------------------------------------------+-------------------+----------------------------+
11
11
  | Method | Description | Example Value |
12
12
  +---------------------------------------------+-------------------+----------------------------+
13
- | :meth:`~ekfsm.devices.pmbus.PmBus.vendor` | Get vendor | ``Hitron`` |
13
+ | :meth:`~ekfsm.devices.pmbus.PMBus.vendor` | get vendor | ``hitron`` |
14
14
  +---------------------------------------------+-------------------+----------------------------+
15
- | :meth:`~ekfsm.devices.pmbus.PmBus.model` | Get model | ``HDRC300S-110J-D120E(N)`` |
15
+ | :meth:`~ekfsm.devices.pmbus.PMBus.model` | Get model | ``HDRC300S-110J-D120E(N)`` |
16
16
  +---------------------------------------------+-------------------+----------------------------+
17
- | :meth:`~ekfsm.devices.pmbus.PmBus.serial` | Get serial number | ``23450506`` |
17
+ | :meth:`~ekfsm.devices.pmbus.PaBus.serial` | Get serial number | ``23450506`` |
18
18
  +---------------------------------------------+-------------------+----------------------------+
19
- | :meth:`~ekfsm.devices.pmbus.PmBus.revision` | Get Prevision | ``0A`` |
19
+ | :meth:`~ekfsm.devices.pmbus.PMBus.revision` | Get Prevision | ``0A`` |
20
20
  +---------------------------------------------+-------------------+----------------------------+
21
21
 
22
22
  Device Temperature (Object: `th`)
@@ -25,7 +25,7 @@ Device Temperature (Object: `th`)
25
25
  +---------------------------------------------------------------+---------------------+---------------+
26
26
  | Method | Description | Example Value |
27
27
  +---------------------------------------------------------------+---------------------+---------------+
28
- | :meth:`temperature() <ekfsm.devices.pmbus.PmBus.temp1_input>` | Get the temperature | ``-10`` |
28
+ | :meth:`temperature() <ekfsm.devices.pmbus.PMBus.temp1_input>` | Get the temperature | ``-10`` |
29
29
  +---------------------------------------------------------------+---------------------+---------------+
30
30
 
31
31
  Main Output (Object: `main`)
@@ -36,11 +36,11 @@ The `main` object respresent the main output module (+12V) of the PSU.
36
36
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
37
37
  | Method | Description | Example Value |
38
38
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
39
- | :meth:`voltage() <ekfsm.devices.pmbus.PmBus.in1_input>` | Get actual output voltage | ``12.1`` |
39
+ | :meth:`voltage() <ekfsm.devices.pmbus.PMBus.in1_input>` | Get actual output voltage | ``12.1`` |
40
40
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
41
- | :meth:`current() <ekfsm.devices.pmbus.PmBus.curr1_input>` | Get actual output current | ``2.5`` |
41
+ | :meth:`current() <ekfsm.devices.pmbus.PMBus.curr1_input>` | Get actual output current | ``2.5`` |
42
42
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
43
- | :meth:`status() <ekfsm.devices.pmbus.PmBus.status0_input>` | Get diagnostics | ``<PsuStatus.OUTPUT_OVERVOLTAGE``|``OUTPUT_OVERCURRENT: 48>`` |
43
+ | :meth:`status() <ekfsm.devices.pmbus.PMBus.status0_input>` | Get diagnostics | ``<PSUStatus.OUTPUT_OVERVOLTAGE``|``OUTPUT_OVERCURRENT: 48>`` |
44
44
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
45
45
 
46
46
 
@@ -52,11 +52,11 @@ The `sby` object respresent the secondary output module (+5V) of the PSU.
52
52
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
53
53
  | Method | Description | Example Value |
54
54
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
55
- | :meth:`voltage() <ekfsm.devices.pmbus.PmBus.in2_input>` | Get actual output voltage | ``5.1`` |
55
+ | :meth:`voltage() <ekfsm.devices.pmbus.PMBus.in2_input>` | Get actual output voltage | ``5.1`` |
56
56
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
57
- | :meth:`current() <ekfsm.devices.pmbus.PmBus.curr2_input>` | Get actual output current | ``0.2`` |
57
+ | :meth:`current() <ekfsm.devices.pmbus.PMBus.curr2_input>` | Get actual output current | ``0.2`` |
58
58
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
59
- | :meth:`status() <ekfsm.devices.pmbus.PmBus.status1_input>` | Get diagnostics | ``<PsuStatus.OUTPUT_OVERVOLTAGE``|``OUTPUT_OVERCURRENT: 48>`` |
59
+ | :meth:`status() <ekfsm.devices.pmbus.PMBus.status1_input>` | Get diagnostics | ``<PSUStatus.OUTPUT_OVERVOLTAGE``|``OUTPUT_OVERCURRENT: 48>`` |
60
60
  +------------------------------------------------------------+---------------------------+---------------------------------------------------------------+
61
61
 
62
62
  .. warning::
@@ -34,10 +34,10 @@ System Configuration
34
34
  --------------------
35
35
 
36
36
  The system configuration is defined in a :ref:`systemconfig`. The configuration file defines the
37
- modular components of the system, i.e. you define which board types (called :class:`~HwModule`s in ekfsm) are expected in which slots of the chassis.
37
+ modular components of the system, i.e. you define which board types (called :class:`~HWModule`s in ekfsm) are expected in which slots of the chassis.
38
38
 
39
39
  The system configuration file is then passed to the :class:`~.System` constructor to create a system object.
40
- During instantiation, the system object will create the necessary :class:`~ekfsm.core.components.HwModule` objects and all the
40
+ During instantiation, the system object will create the necessary :class:`~ekfsm.core.components.HWModule` objects and all the
41
41
  supported functions for the devices.
42
42
 
43
43
  It will also check if the actual hardware configuration matches the expected configuration. The result
@@ -50,7 +50,7 @@ The objects and subobjects model the hardware topology of the system.
50
50
 
51
51
  An :class:`~.System` object is the root object of the ekfsm package.
52
52
  The system object contains :class:`~.Slot` objects, which represent the slots of the chassis.
53
- Each slot object contains zero or one :class:`~ekfsm.core.components.HwModule` objects, which represents the hardware module in the slot.
53
+ Each slot object contains zero or one :class:`~ekfsm.core.components.HWModule` objects, which represents the hardware module in the slot.
54
54
 
55
55
  .. image:: _static/ekfsm_system.drawio.png
56
56
  :align: center
@@ -93,9 +93,9 @@ If you want to access the LEDs on the :ref:`sur-uart`, you can do the following:
93
93
 
94
94
  system = ekfsm.System("system.yaml")
95
95
 
96
- # alternative ways to get the SUR HwModule
97
- sur = system["SER"] # by using the hwmodule name as key
98
- sur = system.ser # by using the hwmodule name as attribute
96
+ # alternative ways to get the SUR HWModule
97
+ sur = system["SER"] # by using the HWModule name as key
98
+ sur = system.ser # by using the HWModule name as attribute
99
99
  sur = system.slots["SLOT1"].hwmodule # by using the slot name as key
100
100
  sur = system.slots.slot1.hwmodule # by using the slot name as attribute
101
101
 
@@ -2,7 +2,7 @@ id: HDRC300S.*
2
2
  name: "Hitron HDRC-300S"
3
3
  slot_type: CPCI_S0_PSU
4
4
  children:
5
- - device_type: PmBus
5
+ - device_type: PMBus
6
6
  name: "PMBUS"
7
7
  addr: 0x18
8
8
  slot_coding_mask: 0x07
@@ -1,15 +1,15 @@
1
1
  #! /usr/bin/env python3
2
2
  # import os
3
3
  # import sys
4
- import click
4
+ # pyright: reportOptionalMemberAccess = false
5
5
  import logging
6
6
  from pathlib import Path
7
7
 
8
- from ekfsm.system import System
9
- from ekfsm.log import ekfsm_logger
10
- from ekfsm.simctrl import enable_simulation
11
- from ekfsm.simctrl import register_gpio_simulations
8
+ import click
12
9
 
10
+ from ekfsm.log import ekfsm_logger
11
+ from ekfsm.simctrl import enable_simulation, register_gpio_simulations
12
+ from ekfsm.system import System
13
13
 
14
14
  logging.basicConfig(level=logging.WARNING, format="%(levelname)s: %(message)s")
15
15
  logger = ekfsm_logger(__name__)
@@ -87,9 +87,7 @@ def cli(verbose, debug, sysfs, config):
87
87
  type=int,
88
88
  help="Write chassis serial number",
89
89
  )
90
- @click.option(
91
- "--unit", "-u", is_flag=False, prompt=True, type=int, help="Write chassis unit"
92
- )
90
+ @click.option("--unit", "-u", is_flag=False, prompt=True, type=int, help="Write chassis unit")
93
91
  @click.option(
94
92
  "--vendor",
95
93
  "-n",
@@ -1,8 +1,10 @@
1
+ from typing import Any, List, Tuple
2
+
3
+ import munch
1
4
  import yamale # type: ignore
2
5
  import yaml
3
- import munch
4
6
 
5
- from typing import Any, List, Tuple
7
+ from ekfsm.exceptions import ConfigError
6
8
 
7
9
  schema_str = """
8
10
  system_config:
@@ -22,13 +24,19 @@ slot:
22
24
  def _validate_config(config_file: str) -> None:
23
25
  schema = yamale.make_schema(content=schema_str)
24
26
  data = yamale.make_data(config_file)
25
- yamale.validate(schema, data)
27
+ try:
28
+ yamale.validate(schema, data)
29
+ except yamale.YamaleError:
30
+ raise ConfigError("Error in configuration file")
26
31
 
27
32
 
28
33
  def _parse_config(config_file: str) -> Any | munch.Munch | List | Tuple:
29
- with open(config_file) as file:
30
- config = yaml.safe_load(file)
31
- munchified_config = munch.munchify(config)
34
+ try:
35
+ with open(config_file) as file:
36
+ config = yaml.safe_load(file)
37
+ munchified_config = munch.munchify(config)
38
+ except OSError:
39
+ raise ConfigError("Failed to open configuration file: {config_file}")
32
40
  return munchified_config
33
41
 
34
42
 
@@ -0,0 +1,14 @@
1
+ from .components import HWModule # noqa: F401
2
+ from .probe import ProbeableDevice # noqa: F401
3
+ from .slots import Slot, Slots, SlotType # noqa: F401
4
+ from .sysfs import SysFSAttribute, SysfsDevice # noqa: F401
5
+
6
+ __all__ = [
7
+ "Slot",
8
+ "SlotType",
9
+ "Slots",
10
+ "SysfsDevice",
11
+ "SysFSAttribute",
12
+ "HWModule",
13
+ "ProbeableDevice",
14
+ ]
@@ -36,9 +36,9 @@ class SysTree(NodeMixin):
36
36
  print(self)
37
37
 
38
38
 
39
- class HwModule(SysTree):
39
+ class HWModule(SysTree):
40
40
  """
41
- A HwModule represents an instantiation of a specifc hw board type,
41
+ A HWModule represents an instantiation of a specifc hw board type,
42
42
  for example an instance of an EKF SC9 board.
43
43
  """
44
44
 
@@ -119,13 +119,13 @@ class HwModule(SysTree):
119
119
  @property
120
120
  def instance_name(self) -> str:
121
121
  if self.name is None:
122
- raise RuntimeError("instance name not set")
122
+ raise RuntimeError("Instance name not set")
123
123
  return self.name
124
124
 
125
125
  @property
126
126
  def slot(self) -> Slot:
127
127
  if self._slot is None:
128
- raise RuntimeError("slot not set")
128
+ raise RuntimeError("Slot not set")
129
129
  return self._slot
130
130
 
131
131
  def __repr__(self) -> str:
@@ -1,11 +1,9 @@
1
1
  from enum import Enum
2
- from ekfsm.core.components import HwModule
3
-
2
+ from typing import Any
4
3
 
5
4
  from munch import Munch
6
5
 
7
-
8
- from typing import Any
6
+ from ekfsm.core.components import HWModule
9
7
 
10
8
 
11
9
  class SlotType(Enum):
@@ -66,8 +64,8 @@ class Slot:
66
64
  desired_hwmodule_type: str,
67
65
  desired_hwmodule_name: str,
68
66
  number: int,
69
- hwmodule: HwModule | None = None,
70
- master: HwModule | None = None,
67
+ hwmodule: HWModule | None = None,
68
+ master: HWModule | None = None,
71
69
  attributes: Munch | None = None,
72
70
  ) -> None:
73
71
  self._name = name
@@ -104,9 +102,7 @@ class Slot:
104
102
  }
105
103
 
106
104
  def __repr__(self) -> str:
107
- return (
108
- f"{self.__class__.__name__}(name={self._name}, slot_type={self.slot_type})"
109
- )
105
+ return f"{self.__class__.__name__}(name={self._name}, slot_type={self.slot_type})"
110
106
 
111
107
  @property
112
108
  def name(self) -> str:
@@ -127,10 +123,7 @@ class Slot:
127
123
  """
128
124
  Return True if the slot is populated with the desired hardware module type, False otherwise.
129
125
  """
130
- return (
131
- self.hwmodule is not None
132
- and self.hwmodule.board_type.lower() == self._desired_hwmodule_type.lower()
133
- )
126
+ return self.hwmodule is not None and self.hwmodule.board_type.lower() == self._desired_hwmodule_type.lower()
134
127
 
135
128
 
136
129
  class Slots(Munch):
@@ -0,0 +1,251 @@
1
+ from collections.abc import MutableMapping
2
+ from pathlib import Path
3
+ from typing import Callable
4
+
5
+ from more_itertools import first_true
6
+
7
+ from ekfsm.exceptions import ConversionError, DriverError, SysFSError
8
+
9
+ SYSFS_ROOT = Path("/sys")
10
+
11
+
12
+ def sysfs_root() -> Path:
13
+ return SYSFS_ROOT
14
+
15
+
16
+ def set_sysfs_root(path: Path) -> None:
17
+ global SYSFS_ROOT
18
+ SYSFS_ROOT = path
19
+
20
+
21
+ def file_is_sysfs_attr(path: Path) -> bool:
22
+ return path.is_file() and not path.stat().st_mode & 0o111
23
+
24
+
25
+ class SysFSAttribute:
26
+ """
27
+ A SysFSAttribute is a singular sysfs attribute located somewhere in */sys*.
28
+
29
+ Parameters
30
+ ----------
31
+ path: Path
32
+ Path to the underlying file for the SysFSAttribute instance.
33
+ """
34
+
35
+ def __init__(self, path: Path):
36
+ if not path.exists() or not path.is_file():
37
+ raise FileNotFoundError("Invalid sysfs attribute path")
38
+
39
+ self.path = path
40
+ self.name: str = path.name
41
+
42
+ def read_utf8(self) -> str:
43
+ try:
44
+ return self.path.read_text()
45
+ except OSError as e:
46
+ raise SysFSError("Error accessing SysFS attribute") from e
47
+
48
+ def read_bytes(self) -> bytes:
49
+ try:
50
+ return self.path.read_bytes()
51
+ except OSError as e:
52
+ raise SysFSError("Error accessing SysFS attribute") from e
53
+
54
+ # FIXME: This cannot work due to sysfs attributes not supporting seek().
55
+ def write(self, data: str | bytes | None, offset: int = 0) -> None:
56
+ if self.is_sysfs_attr() and data is not None:
57
+ mode = "r+" if isinstance(data, str) else "rb+"
58
+ try:
59
+ with open(self.path, mode) as f:
60
+ f.seek(offset)
61
+ f.write(data)
62
+ except OSError as e:
63
+ raise SysFSError("Error accessing SysFS attribute") from e
64
+
65
+ def is_sysfs_attr(self) -> bool:
66
+ return file_is_sysfs_attr(self.path)
67
+
68
+ def __repr__(self):
69
+ return f"SysFSAttribute: {self.name}"
70
+
71
+
72
+ def list_sysfs_attributes(path: Path) -> list[SysFSAttribute]:
73
+ if not path.exists() or not path.is_dir():
74
+ raise FileNotFoundError(f"Invalid sysfs directory: {path}")
75
+
76
+ return [SysFSAttribute(item) for item in path.iterdir() if file_is_sysfs_attr(item)]
77
+
78
+
79
+ class SysfsDevice(MutableMapping):
80
+ def __init__(
81
+ self, base_dir: Path, driver_required=True, find_driver: Callable | None = None
82
+ ):
83
+ self.path: Path = base_dir
84
+ self.driver_required = driver_required
85
+
86
+ try:
87
+ self.driver = self.get_driver()
88
+ except Exception:
89
+ self.driver = None
90
+
91
+ if driver_required:
92
+ raise DriverError(f"No driver found for device at {base_dir}")
93
+
94
+ try:
95
+ self.attributes: list[SysFSAttribute] = list_sysfs_attributes(self.path)
96
+ except FileNotFoundError as e:
97
+ raise SysFSError(f"SysFS entry for {base_dir} does not exist") from e
98
+
99
+ def __getitem__(self, key):
100
+ if (
101
+ attr := first_true(self.attributes, pred=lambda a: a.name == key)
102
+ ) is not None:
103
+ return attr
104
+
105
+ raise KeyError(f"'{key}' is not a valid sysfs attribute in {self.path}")
106
+
107
+ def __setitem__(self, key, value):
108
+ self[key].write(value)
109
+
110
+ def __delitem__(self, key):
111
+ del self.attributes[key]
112
+
113
+ def __iter__(self):
114
+ return iter(self.attributes)
115
+
116
+ def __len__(self):
117
+ return len(self.attributes)
118
+
119
+ def pre(self) -> None:
120
+ pass
121
+
122
+ def post(self) -> None:
123
+ pass
124
+
125
+ def write_attr(self, attr: str, data: str | bytes) -> None:
126
+ next(x for x in self.attributes if x.name == attr).write(data)
127
+
128
+ def write_attr_bytes(self, attr: str, data: str) -> None:
129
+ # TODO: This
130
+ pass
131
+
132
+ def read_attr_utf8(self, attr: str) -> str:
133
+ return next(x for x in self.attributes if x.name == attr).read_utf8()
134
+
135
+ def read_float(self, attr: str) -> float:
136
+ """
137
+ Read a sysfs attribute as a floating-point number
138
+
139
+ Parameters
140
+ ----------
141
+ attr: str
142
+ The sysfs attribute to read
143
+
144
+ Returns
145
+ -------
146
+ The sysfs attribute as a floating-point number
147
+
148
+ Raises
149
+ ------
150
+ SysFSError
151
+ If the sysfs attribute does not exist
152
+ ConversionError
153
+ If the sysfs attribute could not be converted to a floating-point number
154
+ """
155
+ try:
156
+ value = self.read_attr_utf8(attr)
157
+ return float(value)
158
+ except StopIteration as e:
159
+ raise SysFSError(f"'{attr}' sysfs attribute does not exist") from e
160
+ except SysFSError:
161
+ raise
162
+ except ValueError as e:
163
+ raise ConversionError(
164
+ "Failed to convert sysfs value to floating-point value"
165
+ ) from e
166
+
167
+ def read_int(self, attr) -> int:
168
+ """
169
+ Read a sysfs attribute as an integer
170
+
171
+ Parameters
172
+ ----------
173
+ attr: str
174
+ The sysfs attribute to read
175
+
176
+ Returns
177
+ -------
178
+ The sysfs attribute as an integer
179
+
180
+ Raises
181
+ ------
182
+ SysFSError
183
+ If the sysfs attribute does not exist
184
+ ConversionError
185
+ If the sysfs attribute could not be converted to an integer
186
+ """
187
+ try:
188
+ value = self.read_attr_utf8(attr).strip()
189
+ return int(value, 16)
190
+ except StopIteration as e:
191
+ raise SysFSError(f"'{attr}' sysfs attribute does not exist") from e
192
+ except SysFSError:
193
+ raise
194
+ except ValueError as e:
195
+ raise ConversionError("Failed to convert sysfs value to int") from e
196
+
197
+ def read_utf8(self, attr, strip=True) -> str:
198
+ """
199
+ Read a sysfs attribute as a UTF-8 encoded string
200
+
201
+ Parameters
202
+ ----------
203
+ attr: str
204
+ The sysfs attribute to read
205
+ strip: bool
206
+ Strip whitespace, defaults to true
207
+
208
+ Returns
209
+ -------
210
+ The sysfs attribute as a UTF-8 encoded string
211
+
212
+ Raises
213
+ ------
214
+ SysFSError
215
+ If the sysfs attribute does not exist
216
+ """
217
+ try:
218
+ value = self.read_attr_utf8(attr)
219
+ if strip:
220
+ value = value.strip()
221
+
222
+ return value
223
+ except StopIteration as e:
224
+ raise SysFSError(f"'{attr}' sysfs attribute does not exist") from e
225
+ except SysFSError:
226
+ raise
227
+
228
+ def read_attr_bytes(self, attr: str) -> bytes:
229
+ return next(x for x in self.attributes if x.name == attr).read_bytes()
230
+
231
+ def read_bytes(self, attr) -> bytes:
232
+ try:
233
+ value = self.read_attr_bytes(attr)
234
+ return value
235
+ except StopIteration as e:
236
+ raise SysFSError(f"'{attr}' sysfs attribute does not exist") from e
237
+ except SysFSError:
238
+ raise
239
+
240
+ def extend_attributes(self, attributes: list[SysFSAttribute]):
241
+ self.attributes.extend(attributes)
242
+
243
+ def get_driver(self) -> str | None:
244
+ path = self.path
245
+
246
+ if self.path.joinpath("device").exists():
247
+ path = self.path.joinpath("device")
248
+ elif not path.joinpath("driver").exists():
249
+ raise DriverError("Failed to retrieve driver info")
250
+
251
+ return path.joinpath("driver").readlink().name