shepherd-core 2024.11.1__tar.gz → 2024.11.3__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-2024.11.1 → shepherd_core-2024.11.3}/PKG-INFO +1 -1
  2. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/experiment_generic_var1.py +1 -1
  3. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/experiment_generic_var2.py +1 -1
  4. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/__init__.py +11 -13
  5. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/__init__.py +3 -4
  6. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/virtual_harvester.py +24 -4
  7. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/experiment/__init__.py +4 -6
  8. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/__init__.py +6 -9
  9. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/__init__.py +7 -9
  10. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/observer_fixture.yaml +27 -25
  11. shepherd_core-2024.11.1/shepherd_core/data_models/testbed/target_fixture.yaml → shepherd_core-2024.11.3/shepherd_core/data_models/testbed/target_fixture.old1 +1 -1
  12. shepherd_core-2024.11.3/shepherd_core/data_models/testbed/target_fixture.yaml +163 -0
  13. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/testbed_fixture.yaml +3 -3
  14. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/fw_tools/__init__.py +14 -17
  15. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/reader.py +21 -0
  16. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/version.py +1 -1
  17. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/virtual_harvester_simulation.py +1 -0
  18. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/virtual_source_model.py +2 -0
  19. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/virtual_source_simulation.py +1 -0
  20. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/PKG-INFO +1 -1
  21. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/SOURCES.txt +1 -0
  22. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_testbed_fixtures.py +1 -0
  23. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/vsource/test_converter.py +14 -6
  24. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/vsource/test_harvester.py +31 -1
  25. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/README.md +0 -0
  26. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/eenv_generator.py +0 -0
  27. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/experiment_from_yaml.yaml +0 -0
  28. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/experiment_models.py +0 -0
  29. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/firmware_model.py +0 -0
  30. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/firmware_modification.py +0 -0
  31. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/inventory.py +0 -0
  32. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/simulate_vharvester.py +0 -0
  33. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/simulate_vsource.py +0 -0
  34. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/uart_decode_waveform.py +0 -0
  35. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/uart_raw2.csv +0 -0
  36. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/examples/vsource_debug_sim.py +0 -0
  37. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/pyproject.toml +0 -0
  38. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/setup.cfg +0 -0
  39. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/__init__.py +10 -10
  40. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/calibration_hw_def.py +0 -0
  41. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/commons.py +0 -0
  42. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/__init__.py +0 -0
  43. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/cal_measurement.py +0 -0
  44. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/calibration.py +0 -0
  45. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/content.py +0 -0
  46. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/shepherd.py +0 -0
  47. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/timezone.py +0 -0
  48. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/base/wrapper.py +0 -0
  49. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/_external_fixtures.yaml +0 -0
  50. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/energy_environment.py +0 -0
  51. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -0
  52. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/firmware.py +0 -0
  53. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/firmware_datatype.py +0 -0
  54. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -0
  55. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/virtual_source.py +0 -0
  56. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -0
  57. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/experiment/experiment.py +0 -0
  58. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/experiment/observer_features.py +0 -0
  59. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/experiment/target_config.py +0 -0
  60. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/readme.md +0 -0
  61. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/emulation.py +0 -0
  62. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/firmware_mod.py +0 -0
  63. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/harvest.py +0 -0
  64. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/observer_tasks.py +0 -0
  65. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/programming.py +0 -0
  66. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/task/testbed_tasks.py +0 -0
  67. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/cape.py +0 -0
  68. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/cape_fixture.yaml +0 -0
  69. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/gpio.py +0 -0
  70. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -0
  71. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/mcu.py +0 -0
  72. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -0
  73. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/observer.py +0 -0
  74. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/target.py +0 -0
  75. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/testbed/testbed.py +0 -0
  76. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/data_models/virtual_source_doc.txt +0 -0
  77. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/decoder_waveform/__init__.py +0 -0
  78. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/decoder_waveform/uart.py +0 -0
  79. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/fw_tools/converter.py +0 -0
  80. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/fw_tools/converter_elf.py +0 -0
  81. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/fw_tools/patcher.py +0 -0
  82. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/fw_tools/validation.py +0 -0
  83. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/inventory/__init__.py +0 -0
  84. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/inventory/python.py +0 -0
  85. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/inventory/system.py +0 -0
  86. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/inventory/target.py +0 -0
  87. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/logger.py +0 -0
  88. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/__init__.py +2 -2
  89. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/cache_path.py +0 -0
  90. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/client_abc_fix.py +0 -0
  91. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/client_web.py +0 -0
  92. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/fixtures.py +0 -0
  93. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/testbed_client/user_model.py +0 -0
  94. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/__init__.py +3 -3
  95. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/target_model.py +0 -0
  96. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/virtual_converter_model.py +0 -0
  97. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/vsource/virtual_harvester_model.py +0 -0
  98. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core/writer.py +0 -0
  99. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/dependency_links.txt +0 -0
  100. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/requires.txt +0 -0
  101. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/top_level.txt +0 -0
  102. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/shepherd_core.egg-info/zip-safe +0 -0
  103. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/__init__.py +0 -0
  104. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/conftest.py +0 -0
  105. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/__init__.py +0 -0
  106. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/conftest.py +0 -0
  107. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_cal_data.yaml +0 -0
  108. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_cal_data_faulty.yaml +0 -0
  109. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_cal_meas.yaml +0 -0
  110. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_cal_meas_faulty1.yaml +0 -0
  111. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_cal_meas_faulty2.yaml +0 -0
  112. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_emulator.yaml +0 -0
  113. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_experiment.yaml +0 -0
  114. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_experiment_alternative.yaml +0 -0
  115. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_harvester.yaml +0 -0
  116. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_testbed.yaml +0 -0
  117. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/example_config_virtsource.yaml +0 -0
  118. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_base_models.py +0 -0
  119. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_content_fixtures.py +0 -0
  120. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_content_models.py +0 -0
  121. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_examples.py +0 -0
  122. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_experiment_models.py +0 -0
  123. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_task_generation.py +0 -0
  124. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_task_models.py +0 -0
  125. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/data_models/test_testbed_models.py +0 -0
  126. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/decoder_waveform/__init__.py +0 -0
  127. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/decoder_waveform/test_decoder.py +0 -0
  128. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/__init__.py +0 -0
  129. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/build_msp.elf +0 -0
  130. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/build_nrf.elf +0 -0
  131. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/conftest.py +0 -0
  132. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/test_converter.py +0 -0
  133. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/test_patcher.py +0 -0
  134. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/fw_tools/test_validation.py +0 -0
  135. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/inventory/__init__.py +0 -0
  136. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/inventory/test_inventory.py +0 -0
  137. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/test_cal_hw.py +0 -0
  138. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/test_examples.py +0 -0
  139. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/test_logger.py +0 -0
  140. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/test_reader.py +0 -0
  141. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/test_writer.py +0 -0
  142. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/testbed_client/__init__.py +0 -0
  143. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/vsource/__init__.py +0 -0
  144. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/vsource/conftest.py +0 -0
  145. {shepherd_core-2024.11.1 → shepherd_core-2024.11.3}/tests/vsource/test_z.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: shepherd_core
3
- Version: 2024.11.1
3
+ Version: 2024.11.3
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>
@@ -41,7 +41,7 @@ xp = Experiment(
41
41
  duration=30,
42
42
  target_configs=[
43
43
  TargetConfig(
44
- target_IDs=range(7, 13),
44
+ target_IDs=range(7, 12),
45
45
  custom_IDs=range(1, 100), # note: longer list is OK
46
46
  energy_env=EnergyEnvironment(name="eenv_static_3000mV_50mA_3600s"),
47
47
  firmware1=Firmware(
@@ -38,7 +38,7 @@ xp = Experiment(
38
38
  duration=30,
39
39
  target_configs=[
40
40
  TargetConfig(
41
- target_IDs=range(7, 13),
41
+ target_IDs=range(7, 12),
42
42
  custom_IDs=range(1, 100), # note: longer list is OK
43
43
  energy_env=EnergyEnvironment(name="eenv_static_3000mV_50mA_3600s"),
44
44
  firmware1=Firmware.from_firmware(
@@ -34,29 +34,27 @@ from .experiment.observer_features import SystemLogging
34
34
  from .experiment.target_config import TargetConfig
35
35
 
36
36
  __all__ = [
37
- # Core
38
- "CapeData",
39
37
  "CalibrationCape",
40
38
  "CalibrationEmulator",
41
39
  "CalibrationHarvester",
42
- "CalibrationSeries",
43
40
  "CalibrationPair",
41
+ "CalibrationSeries",
42
+ "CapeData",
44
43
  "ContentModel",
45
- "ShpModel",
46
- "Wrapper",
47
- # User Content
44
+ "EnergyDType",
45
+ "EnergyEnvironment",
48
46
  "Experiment",
49
- "TargetConfig",
50
47
  "Firmware",
51
48
  "FirmwareDType",
52
- "SystemLogging",
53
- "PowerTracing",
54
- "GpioTracing",
55
49
  "GpioActuation",
56
50
  "GpioEvent",
57
51
  "GpioLevel",
58
- "EnergyEnvironment",
59
- "EnergyDType",
60
- "VirtualSourceConfig",
52
+ "GpioTracing",
53
+ "PowerTracing",
54
+ "ShpModel",
55
+ "SystemLogging",
56
+ "TargetConfig",
61
57
  "VirtualHarvesterConfig",
58
+ "VirtualSourceConfig",
59
+ "Wrapper",
62
60
  ]
@@ -11,11 +11,10 @@ from .virtual_harvester import VirtualHarvesterConfig
11
11
  from .virtual_source import VirtualSourceConfig
12
12
 
13
13
  __all__ = [
14
+ "EnergyDType",
14
15
  "EnergyEnvironment",
15
- "VirtualSourceConfig",
16
- "VirtualHarvesterConfig",
17
16
  "Firmware",
18
- # Enums
19
- "EnergyDType",
20
17
  "FirmwareDType",
18
+ "VirtualHarvesterConfig",
19
+ "VirtualSourceConfig",
21
20
  ]
@@ -239,6 +239,7 @@ class HarvesterPRUConfig(ShpModel):
239
239
  data: VirtualHarvesterConfig,
240
240
  dtype_in: Optional[EnergyDType] = EnergyDType.ivsample,
241
241
  window_size: Optional[u32] = None,
242
+ voltage_step_V: Optional[float] = None,
242
243
  *,
243
244
  for_emu: bool = False,
244
245
  ) -> Self:
@@ -247,17 +248,36 @@ class HarvesterPRUConfig(ShpModel):
247
248
  if for_emu and dtype_in not in {EnergyDType.ivsample, EnergyDType.ivcurve}:
248
249
  raise NotImplementedError
249
250
 
251
+ if for_emu and dtype_in == EnergyDType.ivcurve and voltage_step_V is None:
252
+ raise ValueError(
253
+ "For correct emulation specify voltage_step used by harvester "
254
+ "e.g. via file_src.get_voltage_step()"
255
+ )
256
+
257
+ if for_emu and dtype_in == EnergyDType.ivcurve and window_size is None:
258
+ raise ValueError(
259
+ "For correct emulation specify window_size used by harvester "
260
+ "e.g. via file_src.get_window_size()"
261
+ )
262
+
250
263
  interval_ms, duration_ms = data.calc_timings_ms(for_emu=for_emu)
264
+ window_size = (
265
+ window_size
266
+ if window_size is not None
267
+ else data.calc_window_size(dtype_in, for_emu=for_emu)
268
+ )
269
+ voltage_step_mV = (
270
+ 1e3 * voltage_step_V if voltage_step_V is not None else data.voltage_step_mV
271
+ )
272
+
251
273
  return cls(
252
274
  algorithm=data.calc_algorithm_num(for_emu=for_emu),
253
275
  hrv_mode=data.calc_hrv_mode(for_emu=for_emu),
254
- window_size=window_size
255
- if window_size is not None
256
- else data.calc_window_size(dtype_in, for_emu=for_emu),
276
+ window_size=window_size,
257
277
  voltage_uV=round(data.voltage_mV * 10**3),
258
278
  voltage_min_uV=round(data.voltage_min_mV * 10**3),
259
279
  voltage_max_uV=round(data.voltage_max_mV * 10**3),
260
- voltage_step_uV=round(data.voltage_step_mV * 10**3),
280
+ voltage_step_uV=round(voltage_step_mV * 10**3),
261
281
  current_limit_nA=round(data.current_limit_uA * 10**3),
262
282
  setpoint_n8=round(min(255, data.setpoint_n * 2**8)),
263
283
  interval_n=round(interval_ms * samplerate_sps_default * 1e-3),
@@ -14,13 +14,11 @@ from .target_config import TargetConfig
14
14
 
15
15
  __all__ = [
16
16
  "Experiment",
17
- "TargetConfig",
18
- # Features
19
- "PowerTracing",
20
- "GpioTracing",
21
17
  "GpioActuation",
22
18
  "GpioEvent",
23
- "SystemLogging",
24
- # Enums
25
19
  "GpioLevel",
20
+ "GpioTracing",
21
+ "PowerTracing",
22
+ "SystemLogging",
23
+ "TargetConfig",
26
24
  ]
@@ -22,18 +22,15 @@ from .programming import ProgrammingTask
22
22
  from .testbed_tasks import TestbedTasks
23
23
 
24
24
  __all__ = [
25
- # Hierarchical Order
26
- "TestbedTasks",
27
- "ObserverTasks",
28
- "FirmwareModTask",
29
- "ProgrammingTask",
25
+ "Compression",
30
26
  "EmulationTask",
27
+ "FirmwareModTask",
31
28
  "HarvestTask",
32
- # Enums
33
- "Compression",
34
- # helper functions
35
- "prepare_task",
29
+ "ObserverTasks",
30
+ "ProgrammingTask",
31
+ "TestbedTasks",
36
32
  "extract_tasks",
33
+ "prepare_task",
37
34
  ]
38
35
 
39
36
 
@@ -16,17 +16,15 @@ from .target import Target
16
16
  from .testbed import Testbed
17
17
 
18
18
  __all__ = [
19
- "Testbed",
20
- "Observer",
21
- "Cape",
22
- "Target",
23
- "MCU",
24
19
  "GPIO",
25
- # enums
26
- "ProgrammerProtocol",
20
+ "MCU",
21
+ "Cape",
27
22
  "Direction",
28
- "TargetPort",
29
- # custom types
30
23
  "IdInt16",
31
24
  "MACStr",
25
+ "Observer",
26
+ "ProgrammerProtocol",
27
+ "Target",
28
+ "TargetPort",
29
+ "Testbed",
32
30
  ]
@@ -14,8 +14,8 @@
14
14
  latitude: 0
15
15
  cape:
16
16
  name: cape53
17
- target_a:
18
- name: nRF52_FRAM_018
17
+ # target_a:
18
+ # name: nRF52_FRAM_018
19
19
  created: 2022-12-12 12:12:12
20
20
  active: false
21
21
  - datatype: observer
@@ -24,13 +24,13 @@
24
24
  name: sheep01
25
25
  ip: 192.168.165.201
26
26
  mac: 18:62:E4:E4:41:8D
27
- room: II70
28
- eth_port: B22
29
- description: mid-mid in room
27
+ room: II69
28
+ eth_port: B14
29
+ description: lower mid on east-side
30
30
  cape:
31
31
  name: cape51
32
32
  target_a:
33
- name: nRF52_FRAM_001
33
+ name: nRF52_FRAM_1392_386
34
34
  created: 2023-09-22 12:12:12
35
35
  - datatype: observer
36
36
  parameters:
@@ -44,7 +44,7 @@
44
44
  cape:
45
45
  name: cape52
46
46
  target_a:
47
- name: nRF52_FRAM_002
47
+ name: nRF52_FRAM_1392_378
48
48
  created: 2023-09-22 12:12:12
49
49
  - datatype: observer
50
50
  parameters:
@@ -57,9 +57,10 @@
57
57
  description: north-east-corner
58
58
  cape:
59
59
  name: cape63
60
- target_a:
61
- name: nRF52_FRAM_003
60
+ # target_a:
61
+ # name:
62
62
  created: 2023-09-22 12:12:12
63
+ active: false
63
64
  - datatype: observer
64
65
  parameters:
65
66
  id: 4
@@ -72,7 +73,7 @@
72
73
  cape:
73
74
  name: cape54
74
75
  target_a:
75
- name: nRF52_FRAM_004
76
+ name: nRF52_FRAM_1392_395
76
77
  created: 2023-09-22 12:12:12
77
78
  - datatype: observer
78
79
  parameters:
@@ -86,7 +87,7 @@
86
87
  cape:
87
88
  name: cape55
88
89
  target_a:
89
- name: nRF52_FRAM_011
90
+ name: nRF52_FRAM_1392_393
90
91
  target_b:
91
92
  name: target_nRF52_01 # ONLY VIRTUAL - for unittests
92
93
  created: 2023-09-22 12:12:12
@@ -102,7 +103,7 @@
102
103
  cape:
103
104
  name: cape56
104
105
  target_a:
105
- name: nRF52_FRAM_017 # TODO: not validated
106
+ name: nRF52_FRAM_1392_396
106
107
  created: 2023-09-22 12:12:12
107
108
  - datatype: observer
108
109
  parameters:
@@ -116,7 +117,7 @@
116
117
  cape:
117
118
  name: cape57
118
119
  target_a:
119
- name: nRF52_FRAM_008
120
+ name: nRF52_FRAM_1392_387
120
121
  created: 2023-09-22 12:12:12
121
122
  - datatype: observer
122
123
  parameters:
@@ -129,8 +130,8 @@
129
130
  description: north-east-corner
130
131
  cape:
131
132
  name: cape58
132
- target_a:
133
- name: nRF52_FRAM_016
133
+ # target_a:
134
+ # name:
134
135
  created: 2023-09-22 12:12:12
135
136
  active: false # TODO: cape is broken for now
136
137
  - datatype: observer
@@ -145,7 +146,7 @@
145
146
  cape:
146
147
  name: cape65
147
148
  target_a:
148
- name: nRF52_FRAM_009 # TODO: not validated
149
+ name: nRF52_FRAM_1392_385
149
150
  created: 2023-09-22 12:12:12
150
151
  - datatype: observer
151
152
  parameters:
@@ -159,7 +160,7 @@
159
160
  cape:
160
161
  name: cape59
161
162
  target_a:
162
- name: nRF52_FRAM_010
163
+ name: nRF52_FRAM_1392_377
163
164
  created: 2023-09-22 12:12:12
164
165
  - datatype: observer
165
166
  parameters:
@@ -167,14 +168,15 @@
167
168
  name: sheep11
168
169
  ip: 192.168.165.211
169
170
  mac: 18:62:E4:E4:0E:5D
170
- room: II69
171
- eth_port: B14
172
- description: lower mid on east-side
171
+ room: tbd
172
+ eth_port: tbd
173
+ description: tbd
173
174
  cape:
174
175
  name: cape61
175
- target_a:
176
- name: nRF52_FRAM_007
176
+ # target_a:
177
+ # name:
177
178
  created: 2023-09-22 12:12:12
179
+ active: false
178
180
  - datatype: observer
179
181
  parameters:
180
182
  id: 12
@@ -187,7 +189,7 @@
187
189
  cape:
188
190
  name: cape62
189
191
  target_a:
190
- name: nRF52_FRAM_014
192
+ name: nRF52_FRAM_1392_384
191
193
  created: 2023-09-22 12:12:12
192
194
  - datatype: observer
193
195
  parameters:
@@ -202,7 +204,7 @@
202
204
  cape:
203
205
  name: cape60
204
206
  target_a:
205
- name: nRF52_FRAM_005
207
+ name: nRF52_FRAM_1392_379
206
208
  created: 2023-09-22 12:12:12
207
209
  - datatype: observer
208
210
  parameters:
@@ -217,5 +219,5 @@
217
219
  cape:
218
220
  name: cape64
219
221
  target_a:
220
- name: nRF52_FRAM_006
222
+ name: nRF52_FRAM_1392_390
221
223
  created: 2023-09-22 12:12:12
@@ -3,7 +3,7 @@
3
3
  # https://github.com/orgua/shepherd_v2_planning/blob/main/doc_testbed/Target_pre-deployment-tests.xlsx
4
4
  - datatype: target
5
5
  parameters:
6
- id: 6 # Outer ID - selected by user - can be rearranged
6
+ id: 6 # Outer ID - selected by user for XP - can be rearranged
7
7
  name: nRF52_FRAM_001 # inner ID - used to link all parts together
8
8
  version: v1.0
9
9
  description: nRF52 as MCU + Radio, MSP430FR as SPI-FRAM or additional MCU
@@ -0,0 +1,163 @@
1
+ ---
2
+ # more human-readable test-protocol @
3
+ # https://github.com/orgua/shepherd_v2_planning/blob/main/doc_testbed/Target_pre-deployment-tests.xlsx
4
+ - datatype: target
5
+ parameters:
6
+ id: 2 # Outer ID - selected by user for XP - can be rearranged
7
+ name: nRF52_FRAM_1392_377 # inner ID - used to link all parts together
8
+ version: v1.3
9
+ description: nRF52 as MCU + Radio, MSP430FR as SPI-FRAM or additional MCU
10
+ comment: slight scratches from manufacturing
11
+ created: 2024-11-29
12
+ mcu1:
13
+ name: nRF52
14
+ mcu2:
15
+ name: MSP430FR
16
+ - datatype: target
17
+ parameters:
18
+ inherit_from: nRF52_FRAM_1392_377
19
+ id: 8
20
+ name: nRF52_FRAM_1392_378
21
+ - datatype: target
22
+ parameters:
23
+ inherit_from: nRF52_FRAM_1392_377
24
+ id: 9
25
+ name: nRF52_FRAM_1392_379
26
+ - datatype: target
27
+ parameters:
28
+ inherit_from: nRF52_FRAM_1392_377
29
+ id: 1392380
30
+ name: nRF52_FRAM_1392_380
31
+ comment: msp fails to program
32
+ active: false
33
+ - datatype: target
34
+ parameters:
35
+ inherit_from: nRF52_FRAM_1392_377
36
+ id: 1392381
37
+ name: nRF52_FRAM_1392_381
38
+ comment: nrf failed to program in testbed (but was fine before)
39
+ - datatype: target
40
+ parameters:
41
+ inherit_from: nRF52_FRAM_1392_377
42
+ id: 1392382
43
+ name: nRF52_FRAM_1392_382
44
+ comment: msp fails to program
45
+ active: false
46
+ - datatype: target
47
+ parameters:
48
+ inherit_from: nRF52_FRAM_1392_377
49
+ id: 1392383
50
+ name: nRF52_FRAM_1392_383
51
+ comment: nrf failed to program in testbed (but was fine before)
52
+ - datatype: target
53
+ parameters:
54
+ inherit_from: nRF52_FRAM_1392_377
55
+ id: 4
56
+ name: nRF52_FRAM_1392_384
57
+ - datatype: target
58
+ parameters:
59
+ inherit_from: nRF52_FRAM_1392_377
60
+ id: 5
61
+ name: nRF52_FRAM_1392_385
62
+ - datatype: target
63
+ parameters:
64
+ inherit_from: nRF52_FRAM_1392_377
65
+ id: 6
66
+ name: nRF52_FRAM_1392_386
67
+ - datatype: target
68
+ parameters:
69
+ inherit_from: nRF52_FRAM_1392_377
70
+ id: 7
71
+ name: nRF52_FRAM_1392_387
72
+ - datatype: target
73
+ parameters:
74
+ inherit_from: nRF52_FRAM_1392_377
75
+ id: 1392388
76
+ name: nRF52_FRAM_1392_388
77
+ comment: msp fails to program, msp removed, in darmstadt
78
+ mcu2: null
79
+ active: false
80
+ - datatype: target
81
+ parameters:
82
+ inherit_from: nRF52_FRAM_1392_377
83
+ id: 1392389
84
+ name: nRF52_FRAM_1392_389
85
+ comment: msp fails to program, msp removed, in darmstadt
86
+ mcu2: null
87
+ active: false
88
+ - datatype: target
89
+ parameters:
90
+ inherit_from: nRF52_FRAM_1392_377
91
+ id: 10
92
+ name: nRF52_FRAM_1392_390
93
+ - datatype: target
94
+ parameters:
95
+ inherit_from: nRF52_FRAM_1392_377
96
+ id: 1392391
97
+ name: nRF52_FRAM_1392_391
98
+ comment: nrf failed to program in testbed (but was fine before)
99
+ - datatype: target
100
+ parameters:
101
+ inherit_from: nRF52_FRAM_1392_377
102
+ id: 1392392
103
+ name: nRF52_FRAM_1392_392
104
+ comment: msp fails to program
105
+ active: false
106
+ - datatype: target
107
+ parameters:
108
+ inherit_from: nRF52_FRAM_1392_377
109
+ id: 1
110
+ name: nRF52_FRAM_1392_393
111
+ - datatype: target
112
+ parameters:
113
+ inherit_from: nRF52_FRAM_1392_377
114
+ id: 1392394
115
+ name: nRF52_FRAM_1392_394
116
+ comment: msp fails to program
117
+ active: false
118
+ - datatype: target
119
+ parameters:
120
+ inherit_from: nRF52_FRAM_1392_377
121
+ id: 3
122
+ name: nRF52_FRAM_1392_395
123
+ comment: initial test unit
124
+ - datatype: target
125
+ parameters:
126
+ inherit_from: nRF52_FRAM_1392_377
127
+ id: 11
128
+ name: nRF52_FRAM_1392_396
129
+ - datatype: target
130
+ parameters:
131
+ inherit_from: nRF52_FRAM_1392_377
132
+ id: 1392397
133
+ name: nRF52_FRAM_1392_397
134
+ - datatype: target
135
+ parameters:
136
+ inherit_from: nRF52_FRAM_1392_377
137
+ id: 1392398
138
+ name: nRF52_FRAM_1392_398
139
+ - datatype: target
140
+ parameters:
141
+ inherit_from: nRF52_FRAM_1392_377
142
+ id: 1392399
143
+ name: nRF52_FRAM_1392_399
144
+ comment: LabPrototype
145
+ - datatype: target
146
+ parameters:
147
+ inherit_from: nRF52_FRAM_1392_377
148
+ id: 1392400
149
+ name: nRF52_FRAM_1392_400
150
+ comment: in darmstadt
151
+
152
+
153
+ - datatype: target
154
+ parameters:
155
+ id: 1001
156
+ name: target_nRF52_01
157
+ version: v2.1r0
158
+ description: single target PCB, v2.1r0
159
+ comment: ONLY VIRTUAL - NOT REAL - for unittests
160
+ mcu1:
161
+ name: nRF52
162
+ mcu2: null
163
+ created: 2022-12-12 12:12:12
@@ -11,15 +11,15 @@
11
11
  observers:
12
12
  - name: sheep01
13
13
  - name: sheep02
14
- - name: sheep03
14
+ # - name: sheep03
15
15
  - name: sheep04
16
16
  - name: sheep05
17
17
  - name: sheep06
18
18
  - name: sheep07
19
- - name: sheep08
19
+ # - name: sheep08
20
20
  - name: sheep09
21
21
  - name: sheep10
22
- - name: sheep11
22
+ # - name: sheep11
23
23
  - name: sheep12
24
24
  - name: sheep13
25
25
  - name: sheep14
@@ -53,28 +53,25 @@ from .validation import is_hex_msp430
53
53
  from .validation import is_hex_nrf52
54
54
 
55
55
  __all__ = [
56
- # patcher
57
- "read_uid",
58
- "modify_uid",
59
- "modify_symbol_value",
60
- "find_symbol",
61
- "read_symbol",
62
- "read_arch",
63
- # converter
64
- "elf_to_hex",
65
- "file_to_base64",
66
56
  "base64_to_file",
67
- "file_to_hash",
68
57
  "base64_to_hash",
58
+ "determine_arch",
59
+ "determine_type",
60
+ "elf_to_hex",
69
61
  "extract_firmware",
62
+ "file_to_base64",
63
+ "file_to_hash",
64
+ "find_symbol",
70
65
  "firmware_to_hex",
71
- # validation
72
- "is_hex",
73
- "is_hex_msp430",
74
- "is_hex_nrf52",
75
66
  "is_elf",
76
67
  "is_elf_msp430",
77
68
  "is_elf_nrf52",
78
- "determine_type",
79
- "determine_arch",
69
+ "is_hex",
70
+ "is_hex_msp430",
71
+ "is_hex_nrf52",
72
+ "modify_symbol_value",
73
+ "modify_uid",
74
+ "read_arch",
75
+ "read_symbol",
76
+ "read_uid",
80
77
  ]
@@ -270,6 +270,26 @@ class Reader:
270
270
  else:
271
271
  return None
272
272
 
273
+ def get_voltage_step(self) -> Optional[float]:
274
+ """Informs about the voltage step (in volts) used during harvesting the ivcurve.
275
+
276
+ Options for figuring out the real step:
277
+ - look into config (if available)
278
+ - analyze recorded data for most often used delta
279
+ - calculate with 'steps_n * (1 + wait_cycles)' (done for calculating window_size)
280
+ """
281
+ voltage_step: Optional[float] = (
282
+ self.get_config().get("virtual_harvester", {}).get("voltage_step_mV", None)
283
+ )
284
+ if voltage_step is None:
285
+ dsv = self.ds_voltage[0:2000]
286
+ diffs_np = np.unique(dsv[1:] - dsv[0:-1], return_counts=False)
287
+ diffs_ls = [_e for _e in list(np.array(diffs_np)) if _e > 0]
288
+ voltage_step = min(diffs_ls)
289
+ if voltage_step is not None:
290
+ voltage_step = 1e-3 * voltage_step
291
+ return voltage_step
292
+
273
293
  def get_hrv_config(self) -> dict:
274
294
  """Essential info for harvester.
275
295
 
@@ -278,6 +298,7 @@ class Reader:
278
298
  return {
279
299
  "datatype": self.get_datatype(),
280
300
  "window_samples": self.get_window_samples(),
301
+ "voltage_step_V": self.get_voltage_step(),
281
302
  }
282
303
 
283
304
  def is_valid(self) -> bool:
@@ -1,3 +1,3 @@
1
1
  """Separated string avoids circular imports."""
2
2
 
3
- version: str = "2024.11.1"
3
+ version: str = "2024.11.3"
@@ -47,6 +47,7 @@ def simulate_harvester(
47
47
  for_emu=True,
48
48
  dtype_in=file_inp.get_datatype(),
49
49
  window_size=file_inp.get_window_samples(),
50
+ voltage_step_V=file_inp.get_voltage_step(),
50
51
  )
51
52
  hrv = VirtualHarvesterModel(hrv_pru)
52
53
  e_out_Ws = 0.0
@@ -31,6 +31,7 @@ class VirtualSourceModel:
31
31
  cal_emu: CalibrationEmulator,
32
32
  dtype_in: EnergyDType = EnergyDType.ivsample,
33
33
  window_size: Optional[int] = None,
34
+ voltage_step_V: Optional[float] = None,
34
35
  *,
35
36
  log_intermediate: bool = False,
36
37
  ) -> None:
@@ -50,6 +51,7 @@ class VirtualSourceModel:
50
51
  for_emu=True,
51
52
  dtype_in=dtype_in,
52
53
  window_size=window_size,
54
+ voltage_step_V=voltage_step_V,
53
55
  )
54
56
 
55
57
  self.hrv: VirtualHarvesterModel = VirtualHarvesterModel(hrv_config)
@@ -56,6 +56,7 @@ def simulate_source(
56
56
  dtype_in=file_inp.get_datatype(),
57
57
  log_intermediate=False,
58
58
  window_size=file_inp.get_window_samples(),
59
+ voltage_step_V=file_inp.get_voltage_step(),
59
60
  )
60
61
  i_out_nA = 0
61
62
  e_out_Ws = 0.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: shepherd_core
3
- Version: 2024.11.1
3
+ Version: 2024.11.3
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>