shepherd-core 2025.2.1__tar.gz → 2025.2.2__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.
Files changed (145) hide show
  1. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/PKG-INFO +1 -1
  2. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/firmware.py +2 -1
  3. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/programming.py +1 -1
  4. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/fw_tools/validation.py +8 -10
  5. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/version.py +1 -1
  6. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/PKG-INFO +1 -1
  7. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/README.md +0 -0
  8. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/eenv_generator.py +0 -0
  9. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/experiment_from_yaml.yaml +0 -0
  10. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/experiment_generic_var1.py +0 -0
  11. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/experiment_generic_var2.py +0 -0
  12. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/experiment_models.py +0 -0
  13. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/firmware_model.py +0 -0
  14. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/firmware_modification.py +0 -0
  15. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/inventory.py +0 -0
  16. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/simulate_vharvester.py +0 -0
  17. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/simulate_vsource.py +0 -0
  18. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/uart_decode_waveform.py +0 -0
  19. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/uart_raw2.csv +0 -0
  20. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/examples/vsource_debug_sim.py +0 -0
  21. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/pyproject.toml +0 -0
  22. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/setup.cfg +0 -0
  23. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/__init__.py +0 -0
  24. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/calibration_hw_def.py +0 -0
  25. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/commons.py +0 -0
  26. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/__init__.py +0 -0
  27. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/__init__.py +0 -0
  28. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/cal_measurement.py +0 -0
  29. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/calibration.py +0 -0
  30. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/content.py +0 -0
  31. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/shepherd.py +0 -0
  32. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/timezone.py +0 -0
  33. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/base/wrapper.py +0 -0
  34. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/__init__.py +0 -0
  35. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/_external_fixtures.yaml +0 -0
  36. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/energy_environment.py +0 -0
  37. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -0
  38. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/firmware_datatype.py +0 -0
  39. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/virtual_harvester.py +0 -0
  40. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -0
  41. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/virtual_source.py +0 -0
  42. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -0
  43. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/experiment/__init__.py +0 -0
  44. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/experiment/experiment.py +0 -0
  45. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/experiment/observer_features.py +0 -0
  46. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/experiment/target_config.py +0 -0
  47. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/readme.md +0 -0
  48. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/__init__.py +0 -0
  49. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/emulation.py +0 -0
  50. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/firmware_mod.py +0 -0
  51. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/harvest.py +0 -0
  52. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/observer_tasks.py +0 -0
  53. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/task/testbed_tasks.py +0 -0
  54. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/__init__.py +0 -0
  55. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/cape.py +0 -0
  56. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/cape_fixture.yaml +0 -0
  57. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/gpio.py +0 -0
  58. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -0
  59. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/mcu.py +0 -0
  60. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -0
  61. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/observer.py +0 -0
  62. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/observer_fixture.yaml +0 -0
  63. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/target.py +0 -0
  64. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/target_fixture.old1 +0 -0
  65. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/target_fixture.yaml +0 -0
  66. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/testbed.py +0 -0
  67. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/testbed/testbed_fixture.yaml +0 -0
  68. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/data_models/virtual_source_doc.txt +0 -0
  69. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/decoder_waveform/__init__.py +0 -0
  70. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/decoder_waveform/uart.py +0 -0
  71. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/fw_tools/__init__.py +0 -0
  72. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/fw_tools/converter.py +0 -0
  73. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/fw_tools/converter_elf.py +0 -0
  74. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/fw_tools/patcher.py +0 -0
  75. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/inventory/__init__.py +0 -0
  76. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/inventory/python.py +0 -0
  77. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/inventory/system.py +0 -0
  78. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/inventory/target.py +0 -0
  79. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/logger.py +0 -0
  80. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/reader.py +0 -0
  81. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/__init__.py +0 -0
  82. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/cache_path.py +0 -0
  83. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/client_abc_fix.py +0 -0
  84. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/client_web.py +0 -0
  85. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/fixtures.py +0 -0
  86. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/testbed_client/user_model.py +0 -0
  87. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/__init__.py +0 -0
  88. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/target_model.py +0 -0
  89. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/virtual_converter_model.py +0 -0
  90. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/virtual_harvester_model.py +0 -0
  91. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/virtual_harvester_simulation.py +0 -0
  92. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/virtual_source_model.py +0 -0
  93. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/vsource/virtual_source_simulation.py +0 -0
  94. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core/writer.py +0 -0
  95. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/SOURCES.txt +0 -0
  96. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/dependency_links.txt +0 -0
  97. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/requires.txt +0 -0
  98. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/top_level.txt +0 -0
  99. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/shepherd_core.egg-info/zip-safe +0 -0
  100. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/__init__.py +0 -0
  101. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/conftest.py +0 -0
  102. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/__init__.py +0 -0
  103. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/conftest.py +0 -0
  104. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_cal_data.yaml +0 -0
  105. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_cal_data_faulty.yaml +0 -0
  106. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_cal_meas.yaml +0 -0
  107. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_cal_meas_faulty1.yaml +0 -0
  108. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_cal_meas_faulty2.yaml +0 -0
  109. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_emulator.yaml +0 -0
  110. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_experiment.yaml +0 -0
  111. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_experiment_alternative.yaml +0 -0
  112. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_harvester.yaml +0 -0
  113. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_testbed.yaml +0 -0
  114. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/example_config_virtsource.yaml +0 -0
  115. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_base_models.py +0 -0
  116. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_content_fixtures.py +0 -0
  117. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_content_models.py +0 -0
  118. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_examples.py +0 -0
  119. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_experiment_models.py +0 -0
  120. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_task_generation.py +0 -0
  121. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_task_models.py +0 -0
  122. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_testbed_fixtures.py +0 -0
  123. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/data_models/test_testbed_models.py +0 -0
  124. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/decoder_waveform/__init__.py +0 -0
  125. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/decoder_waveform/test_decoder.py +0 -0
  126. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/__init__.py +0 -0
  127. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/build_msp.elf +0 -0
  128. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/build_nrf.elf +0 -0
  129. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/conftest.py +0 -0
  130. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/test_converter.py +0 -0
  131. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/test_patcher.py +0 -0
  132. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/fw_tools/test_validation.py +0 -0
  133. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/inventory/__init__.py +0 -0
  134. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/inventory/test_inventory.py +0 -0
  135. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/test_cal_hw.py +0 -0
  136. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/test_examples.py +0 -0
  137. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/test_logger.py +0 -0
  138. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/test_reader.py +0 -0
  139. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/test_writer.py +0 -0
  140. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/testbed_client/__init__.py +0 -0
  141. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/vsource/__init__.py +0 -0
  142. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/vsource/conftest.py +0 -0
  143. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/vsource/test_converter.py +0 -0
  144. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/vsource/test_harvester.py +0 -0
  145. {shepherd_core-2025.2.1 → shepherd_core-2025.2.2}/tests/vsource/test_z.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: shepherd_core
3
- Version: 2025.2.1
3
+ Version: 2025.2.2
4
4
  Summary: Programming- and CLI-Interface for the h5-dataformat of the Shepherd-Testbed
5
5
  Author-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>
6
6
  Maintainer-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>
@@ -127,8 +127,9 @@ class Firmware(ContentModel, title="Firmware of Target"):
127
127
  arch = fw_tools.read_arch(file)
128
128
  if "msp430" in arch and not fw_tools.is_elf_msp430(file):
129
129
  raise ValueError("File is not a ELF for msp430")
130
- if "nrf52" in arch and not fw_tools.is_elf_nrf52(file):
130
+ if ("nrf52" in arch or "arm" in arch) and not fw_tools.is_elf_nrf52(file):
131
131
  raise ValueError("File is not a ELF for nRF52")
132
+ logger.debug("ELF-File '%s' has arch: %s", file.name, arch)
132
133
  if "mcu" not in kwargs:
133
134
  kwargs["mcu"] = arch_to_mcu[arch]
134
135
 
@@ -31,7 +31,7 @@ class ProgrammingTask(ShpModel):
31
31
  mcu_type: SafeStr
32
32
  # ⤷ must be either "nrf52" or "msp430" ATM, TODO: clean xp to tasks
33
33
  voltage: Annotated[float, Field(ge=1, lt=5)] = 3
34
- datarate: Annotated[int, Field(gt=0, le=1_000_000)] = 500_000
34
+ datarate: Annotated[int, Field(gt=0, le=1_000_000)] = 200_000
35
35
  protocol: ProgrammerProtocol
36
36
 
37
37
  simulate: bool = False
@@ -66,16 +66,14 @@ def is_hex_nrf52(file: Path) -> bool:
66
66
  """Try to detect specifics for that MCU.
67
67
 
68
68
  Observations:
69
- - addresses begin at 0x0
69
+ - addresses begin mostly at 0x0 (no must)
70
70
  - only one segment (.get_segments), todo
71
71
  """
72
72
  if is_hex(file):
73
73
  ih = IntelHex(file.as_posix())
74
- if ih.minaddr() != 0x0000:
75
- return False
76
-
77
- # conservative test for now - should be well below 1 MB + 256 kB
78
- return ih.get_memory_size() < 1310720
74
+ # conservative test for now - should be between 0 and 1 MB + 256 kB,
75
+ # but lately showed much higher values > 4 MB
76
+ return ih.get_memory_size() > 0
79
77
  return False
80
78
 
81
79
 
@@ -145,15 +143,15 @@ def determine_arch(file: Path) -> str:
145
143
  """Figure out arch (msp430 or nrf52)."""
146
144
  file_t = determine_type(file)
147
145
  if file_t == FirmwareDType.path_elf:
148
- if is_elf_nrf52(file):
149
- return "nrf52"
150
146
  if is_elf_msp430(file):
151
147
  return "msp430"
148
+ if is_elf_nrf52(file):
149
+ return "nrf52"
152
150
  raise ValueError("Arch of ELF '%s' could not be determined", file.name)
153
151
  if file_t == FirmwareDType.path_hex:
154
- if is_hex_nrf52(file):
155
- return "nrf52"
156
152
  if is_hex_msp430(file):
157
153
  return "msp430"
154
+ if is_hex_nrf52(file):
155
+ return "nrf52"
158
156
  raise ValueError("Arch of HEX '%s' could not be determined", file.name)
159
157
  raise ValueError("Arch of file '%s' could not be determined", file.name)
@@ -1,3 +1,3 @@
1
1
  """Separated string avoids circular imports."""
2
2
 
3
- version: str = "2025.02.1"
3
+ version: str = "2025.02.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: shepherd_core
3
- Version: 2025.2.1
3
+ Version: 2025.2.2
4
4
  Summary: Programming- and CLI-Interface for the h5-dataformat of the Shepherd-Testbed
5
5
  Author-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>
6
6
  Maintainer-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>