@hybridlabor-api/bdb-hardware-pcb 0.1.0

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 (192) hide show
  1. package/README.md +116 -0
  2. package/config/mcp/antigravity.json +22 -0
  3. package/config/mcp/claude.json +22 -0
  4. package/config/mcp/codex.toml +25 -0
  5. package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
  6. package/docs/review_documentation.md +121 -0
  7. package/installer.js +358 -0
  8. package/mcp_servers/kicad-mcp-server/.env.example +22 -0
  9. package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
  10. package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
  11. package/mcp_servers/kicad-mcp-server/README.md +316 -0
  12. package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
  13. package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
  14. package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
  15. package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
  16. package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
  17. package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
  18. package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
  19. package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
  20. package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
  21. package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
  22. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
  23. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
  24. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
  25. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
  26. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
  27. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
  28. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
  29. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
  30. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
  31. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
  32. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
  33. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
  34. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
  35. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
  36. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
  37. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
  38. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
  39. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
  40. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
  41. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
  42. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
  43. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
  44. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
  45. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
  46. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
  47. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
  48. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
  49. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
  50. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
  51. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
  52. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
  53. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
  54. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
  55. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
  56. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
  57. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
  58. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
  59. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
  60. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
  61. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
  62. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
  63. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
  64. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
  65. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
  66. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
  67. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
  68. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
  69. package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
  70. package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
  71. package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
  72. package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
  73. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
  74. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
  75. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
  76. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
  77. package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
  78. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
  79. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
  80. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
  81. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
  82. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
  83. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
  84. package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
  85. package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
  86. package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
  87. package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
  88. package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
  89. package/mcp_servers/openscad-mcp-server/README.md +154 -0
  90. package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
  91. package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
  92. package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
  93. package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
  94. package/mcp_servers/openscad-mcp-server/glama.json +4 -0
  95. package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
  96. package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
  97. package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
  98. package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
  99. package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
  100. package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
  101. package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
  102. package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
  103. package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
  104. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
  105. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
  106. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
  107. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
  108. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
  109. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
  110. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
  111. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
  112. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
  113. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
  114. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
  115. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
  116. package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
  117. package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
  118. package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
  119. package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
  120. package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
  121. package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
  122. package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
  123. package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
  124. package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
  125. package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
  126. package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
  127. package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
  128. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
  129. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
  130. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
  131. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
  132. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
  133. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
  134. package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
  135. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
  136. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
  137. package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
  138. package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
  139. package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
  140. package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
  141. package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
  142. package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
  143. package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
  144. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
  145. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
  146. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
  147. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
  148. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
  149. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
  150. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
  151. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
  152. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
  153. package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
  154. package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
  155. package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
  156. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
  157. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
  158. package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
  159. package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
  160. package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
  161. package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
  162. package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
  163. package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
  164. package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
  165. package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
  166. package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
  167. package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
  168. package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
  169. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
  170. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
  171. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
  172. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
  173. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
  174. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
  175. package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
  176. package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
  177. package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
  178. package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
  179. package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
  180. package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
  181. package/package.json +44 -0
  182. package/scripts/install_mcps.sh +86 -0
  183. package/scripts/openscad_wrapper.sh +62 -0
  184. package/scripts/run_kicad_mcp.sh +25 -0
  185. package/scripts/run_openscad_mcp.sh +41 -0
  186. package/scripts/test_mcp_connection.py +626 -0
  187. package/scripts/test_mcp_connection.sh +168 -0
  188. package/skills/code-first-hardware-design/SKILL.md +260 -0
  189. package/skills/pcb-constraint-definition/SKILL.md +236 -0
  190. package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
  191. package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
  192. package/skills/schematic-datasheet-analysis/SKILL.md +202 -0
@@ -0,0 +1 @@
1
+ """Tests for KiCad MCP Server."""
@@ -0,0 +1,219 @@
1
+ # ESP32S3 Development Board Test Example
2
+
3
+ This document demonstrates how to use the KiCad MCP Server to create a complete ESP32S3 development board schematic with peripherals and generate Arduino test code.
4
+
5
+ ## Project Description
6
+
7
+ Create an ESP32S3 development board with:
8
+ - **MCU**: ESP32S3-WROOM-1 module
9
+ - **Display**: SSD1306 I2C OLED (128x32)
10
+ - **Input**: Push button with pull-up resistor
11
+ - **Output**: LED with current limiting resistor
12
+
13
+ ## Generated Files
14
+
15
+ ### 1. Schematic File (`esp32s3_devboard.kicad_sch`)
16
+
17
+ KiCad schematic file with the following components:
18
+
19
+ | Reference | Component | Value | Footprint |
20
+ |-----------|-----------|-------|-----------|
21
+ | U1 | ESP32 Module | ESP32S3-WROOM-1 | Module:ESP32S3-WROOM-1-N16R8 |
22
+ | U2 | OLED Display | SSD1306 | Display:OLED-0.91-128x32 |
23
+ | SW1 | Push Button | BUTTON | Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mm |
24
+ | D1 | LED | LED_RED | LED_SMD:LED_0805_2012Metric |
25
+ | R1 | Resistor | 1k | Resistor_SMD:R_0805_2012Metric |
26
+ | R2 | Resistor | 10k | Resistor_SMD:R_0805_2012Metric |
27
+
28
+ ### 2. Arduino Test Code (`esp32s3_test.ino`)
29
+
30
+ Complete Arduino test firmware with:
31
+
32
+ #### Features
33
+ - **LED Test**: Blinks LED 3 times on startup
34
+ - **Button Test**: Detects button presses with debounce
35
+ - **I2C Scan**: Scans I2C bus and detects OLED display
36
+ - **OLED Display**: Shows test status and button press count
37
+ - **Serial Output**: 115200 baud debug output
38
+
39
+ #### Pin Configuration
40
+ ```
41
+ BUTTON_PIN = GPIO0 (internal pull-up)
42
+ LED_PIN = GPIO2
43
+ I2C_SDA = GPIO6
44
+ I2C_SCL = GPIO7
45
+ ```
46
+
47
+ #### Test Sequence
48
+ 1. Initialize serial communication
49
+ 2. Configure GPIO pins
50
+ 3. Initialize I2C bus
51
+ 4. Initialize OLED display
52
+ 5. Run LED blink test
53
+ 6. Run button input test
54
+ 7. Scan I2C bus for devices
55
+ 8. Enter interactive mode:
56
+ - Press button to toggle LED
57
+ - Update display with test count
58
+ - Serial output of each action
59
+
60
+ #### Required Libraries
61
+ ```cpp
62
+ #include <Wire.h>
63
+ #include <Adafruit_GFX.h>
64
+ #include <Adafruit_SSD1306.h>
65
+ ```
66
+
67
+ Install via Arduino IDE Library Manager:
68
+ - Adafruit GFX Library
69
+ - Adafruit SSD1306
70
+
71
+ #### Hardware Connections
72
+ ```
73
+ ESP32S3-WROOM-1:
74
+ GPIO6 → OLED SDA
75
+ GPIO7 → OLED SCL
76
+ GPIO0 → SW1 (Button)
77
+ GPIO2 → R1 → D1 (LED) → GND
78
+ +3V3 → OLED VDD, R2, R1
79
+ GND → OLED GND, SW1, D1 cathode
80
+ ```
81
+
82
+ ## Usage Instructions
83
+
84
+ ### 1. Setup Arduino IDE
85
+
86
+ ```bash
87
+ # Install Arduino IDE 2.0
88
+ # Add ESP32 board support
89
+ # Tools > Board > Boards Manager > Search "ESP32" > Install
90
+ ```
91
+
92
+ ### 2. Configure Board
93
+
94
+ ```
95
+ Tools > Board > esp32 > ESP32S3 Dev Module
96
+ Tools > Upload Speed: 921600
97
+ Tools > USB Mode: Hardware CDC and JTAG
98
+ Tools > Port: (Select your ESP32S3 board)
99
+ ```
100
+
101
+ ### 3. Install Required Libraries
102
+
103
+ ```
104
+ Sketch > Include Library > Manage Libraries
105
+ Search: "Adafruit GFX" → Install
106
+ Search: "Adafruit SSD1306" → Install
107
+ ```
108
+
109
+ ### 4. Upload Code
110
+
111
+ 1. Open `esp32s3_test.ino` in Arduino IDE
112
+ 2. Verify/Compile the code (✓ button)
113
+ 3. Upload to ESP32S3
114
+ 4. Open Serial Monitor (115200 baud)
115
+
116
+ ### 5. Expected Output
117
+
118
+ ```
119
+ ===============================================
120
+ ESP32S3 Dev Board - Arduino Test Suite
121
+ ===============================================
122
+
123
+ ✅ Pins initialized:
124
+ Button: GPIO0
125
+ LED: GPIO2
126
+
127
+ ✅ I2C initialized:
128
+ SDA: GPIO6
129
+ SCL: GPIO7
130
+
131
+ ✅ OLED display initialized (0x3C)
132
+
133
+ Display test pattern shown on OLED
134
+
135
+ Running initial tests...
136
+
137
+ Test: LED Blink
138
+ Blink 1
139
+ Blink 2
140
+ Blink 3
141
+ ✅ LED test passed
142
+
143
+ Test: Button Input
144
+ Initial state: HIGH
145
+ Waiting for button press...
146
+ ✅ Button test ready
147
+
148
+ Test: I2C Bus Scan
149
+ Scanning I2C bus...
150
+ I2C device found at 0x3C
151
+ 1 device(s) found
152
+ ✅ I2C scan complete
153
+
154
+ ===============================================
155
+ Initialization complete!
156
+ Ready for interactive testing
157
+ ===============================================
158
+ ```
159
+
160
+ ### 6. Interactive Testing
161
+
162
+ Press the button to:
163
+ - Toggle LED on/off
164
+ - Increment test counter
165
+ - Update OLED display
166
+ - Log to serial monitor
167
+
168
+ OLED will show:
169
+ ```
170
+ ESP32S3 Test
171
+ Count: 5
172
+ LED: ON
173
+ Btn: PRESSED
174
+ ```
175
+
176
+ ## Troubleshooting
177
+
178
+ ### OLED not detected
179
+ - Check I2C connections (SDA/SCL)
180
+ - Verify I2C address (default 0x3C)
181
+ - Try scanning I2C bus with different addresses
182
+
183
+ ### Button not working
184
+ - Verify GPIO0 is properly connected
185
+ - Check internal pull-up is enabled
186
+ - Test with external pull-up resistor (10k)
187
+
188
+ ### LED not lighting
189
+ - Verify LED orientation (anode to MCU)
190
+ - Check current limiting resistor (1k to GND)
191
+ - Test LED with multimeter
192
+
193
+ ### Upload fails
194
+ - Press BOOT button when uploading
195
+ - Check USB driver installation
196
+ - Try lower upload speed (460800)
197
+
198
+ ## Example Output Video
199
+
200
+ Expected behavior:
201
+ 1. Power on → OLED displays "ESP32S3 Test"
202
+ 2. LED blinks 3 times
203
+ 3. Serial monitor shows test sequence
204
+ 4. Press button → LED toggles
205
+ 5. OLED updates with count
206
+
207
+ ## Extensions
208
+
209
+ Possible enhancements:
210
+ - Add WiFi/Bluetooth connectivity tests
211
+ - PWM output to LED for brightness control
212
+ - ADC input for analog sensors
213
+ - SPI flash memory test
214
+ - Deep sleep mode test
215
+ - OTA firmware update
216
+
217
+ ## License
218
+
219
+ This test code is part of the KiCad MCP Server project.
@@ -0,0 +1,65 @@
1
+ # Test Fixtures for KiCad MCP Server
2
+
3
+ This directory contains test fixture files for testing the MCP server tools.
4
+
5
+ ## Fixture Categories
6
+
7
+ ### Validation Test Fixtures
8
+ - `erc_violations.kicad_sch` - Schematic with intentional ERC violations
9
+ - `drc_violations.kicad_pcb` - PCB with intentional DRC violations
10
+ - `clean_design.kicad_sch` - Clean schematic with no violations
11
+ - `clean_design.kicad_pcb` - Clean PCB with no violations
12
+
13
+ ### Pin Analysis Test Fixtures
14
+ - `stm32_board.kicad_sch` - STM32-based board for pin analysis
15
+ - `esp32_board.kicad_sch` - ESP32-based board for pin analysis
16
+ - `pin_conflicts.kicad_sch` - Schematic with pin conflicts
17
+
18
+ ### Device Tree Test Fixtures
19
+ - `stm32f4_project/` - Complete STM32F4 project for device tree generation
20
+ - `esp32_project/` - Complete ESP32 project for device tree generation
21
+ - `complex_peripherals.kicad_sch` - Schematic with multiple I2C/SPI devices
22
+
23
+ ### Test Generation Test Fixtures
24
+ - `gpio_test_board.kicad_sch` - Board for GPIO test generation
25
+ - `i2c_sensors.kicad_sch` - Board with multiple I2C sensors
26
+ - `spi_devices.kicad_sch` - Board with multiple SPI devices
27
+
28
+ ## Fixture Creation Guidelines
29
+
30
+ ### ERC Violation Fixture
31
+ Create schematic with:
32
+ - Unconnected input pins
33
+ - Multiple outputs on same net
34
+ - Power-to-power connections
35
+ - Pin type mismatches
36
+
37
+ ### DRC Violation Fixture
38
+ Create PCB with:
39
+ - Clearance violations (< 0.15mm)
40
+ - Missing connections
41
+ - Pad/footprint overlaps
42
+ - Board edge constraints
43
+
44
+ ### Device Tree Fixture
45
+ Create project with:
46
+ - MCU component (STM32/ESP32/etc.)
47
+ - I2C devices with proper naming
48
+ - SPI devices with chip selects
49
+ - GPIO pins with named nets
50
+ - Power management components
51
+
52
+ ## Usage
53
+
54
+ ```python
55
+ # Example test using fixtures
56
+ def test_run_erc_with_violations():
57
+ result = await run_erc("tests/fixtures/erc_violations.kicad_sch")
58
+ assert "❌ ERC violation detected" in result
59
+ assert "unconnected pin" in result.lower()
60
+ ```
61
+
62
+ ## Note
63
+
64
+ These fixtures should be created using actual KiCad 9.0 to ensure compatibility.
65
+ For now, this directory serves as a placeholder for future fixture creation.
@@ -0,0 +1 @@
1
+ """Test fixtures for KiCad MCP Server."""
@@ -0,0 +1,177 @@
1
+ (kicad_pcb (version 20171130) (host pcbnew 5.1.0)
2
+
3
+ (general
4
+ (thickness 1.6)
5
+ (drawings 0)
6
+ (tracks 0)
7
+ (vias 0)
8
+ (zones 0)
9
+ (modules 4)
10
+ (nets 3)
11
+ )
12
+
13
+ (page A4)
14
+ (layers
15
+ (0 F.Cu signal)
16
+ (31 B.Cu signal)
17
+ (32 B.Adhes user)
18
+ (33 F.Adhes user)
19
+ (34 B.Paste user)
20
+ (35 F.Paste user)
21
+ (36 B.SilkS user)
22
+ (37 F.SilkS user)
23
+ (38 B.Mask user)
24
+ (39 F.Mask user)
25
+ (40 Dwgs.User user)
26
+ (41 Cmts.User user)
27
+ (42 Eco1.User user)
28
+ (43 Eco2.User user)
29
+ (44 Edge.Cuts user)
30
+ (45 Margin user)
31
+ (46 B.CrtYd user)
32
+ (47 F.CrtYd user)
33
+ (48 B.Fab user)
34
+ (49 F.Fab user)
35
+ )
36
+
37
+ (setup
38
+ (last_trace_width 0.25)
39
+ (trace_clearance 0.2)
40
+ (zone_clearance 0.508)
41
+ (zone_45_only no)
42
+ (trace_min 0.2)
43
+ (via_size 0.8)
44
+ (via_drill 0.4)
45
+ (via_min_size 0.4)
46
+ (via_min_drill 0.3)
47
+ (uvia_size 0.3)
48
+ (uvia_drill 0.1)
49
+ (uvias_allowed no)
50
+ (uvia_min_size 0.2)
51
+ (uvia_min_drill 0.1)
52
+ (edge_width 0.05)
53
+ (segment_width 0.2)
54
+ (pcb_text_width 0.3)
55
+ (pcb_text_size 1.5 1.5)
56
+ (mod_edge_width 0.12)
57
+ (mod_text_size 1 1)
58
+ (mod_text_width 0.15)
59
+ (pad_size 1.524 1.524)
60
+ (pad_drill 0.762)
61
+ (pad_to_mask_clearance 0.05)
62
+ (aux_axis_origin 0 0)
63
+ (visible_elements FFFFFF7F)
64
+ (pcbplotparams
65
+ (layerselection 0x010fc_ffffffff)
66
+ (usegerberextensions false)
67
+ (usegerberattributes false)
68
+ (usegerberadvancedattributes false)
69
+ (creategerberjobfile false)
70
+ (excludeedgelayer true)
71
+ (linewidth 0.100000)
72
+ (plotframeref false)
73
+ (viasonmask false)
74
+ (mode 1)
75
+ (useauxorigin false)
76
+ (hpglpennumber 1)
77
+ (hpglpenspeed 20)
78
+ (hpglpendiameter 15.000000)
79
+ (psnegative false)
80
+ (psa4output false)
81
+ (plotreference true)
82
+ (plotvalue true)
83
+ (plotinvisibletext false)
84
+ (padsonsilk false)
85
+ (subtractmaskfromsilk false)
86
+ (outputformat 1)
87
+ (mirror false)
88
+ (drillshape 1)
89
+ (scaleselection 1)
90
+ (outputdirectory ""))
91
+ )
92
+
93
+ (net 0 "")
94
+ (net 1 "GND")
95
+ (net 2 "+3V3")
96
+
97
+ (net_class Default "This is the default net class."
98
+ (clearance 0.2)
99
+ (trace_width 0.25)
100
+ (via_dia 0.8)
101
+ (via_drill 0.4)
102
+ (uvia_dia 0.3)
103
+ (uvia_drill 0.1)
104
+ )
105
+
106
+ (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 5ABCDEF0)
107
+ (at 100 100)
108
+ (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal")
109
+ (tags resistor)
110
+ (path 12345678-1234-1234-1234-123456789abc)
111
+ (attr smd)
112
+ (fp_text reference R1 (at 0 -1.65) (layer F.SilkS)
113
+ (effects (font (size 1 1) (thickness 0.15)))
114
+ )
115
+ (fp_text value 10k (at 0 1.65) (layer F.Fab)
116
+ (effects (font (size 1 1) (thickness 0.15)))
117
+ )
118
+ (pad 1 smd rect (at -0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
119
+ (net 1))
120
+ (pad 2 smd rect (at 0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
121
+ (net 2))
122
+ )
123
+
124
+ (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 5ABCDEF1)
125
+ (at 150 100)
126
+ (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal")
127
+ (tags resistor)
128
+ (path 12345678-1234-1234-1234-123456789abd)
129
+ (attr smd)
130
+ (fp_text reference R2 (at 0 -1.65) (layer F.SilkS)
131
+ (effects (font (size 1 1) (thickness 0.15)))
132
+ )
133
+ (fp_text value 4.7k (at 0 1.65) (layer F.Fab)
134
+ (effects (font (size 1 1) (thickness 0.15)))
135
+ )
136
+ (pad 1 smd rect (at -0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
137
+ (net 2))
138
+ (pad 2 smd rect (at 0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
139
+ (net 1))
140
+ )
141
+
142
+ (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 5ABCDEF2)
143
+ (at 100 150)
144
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal")
145
+ (tags capacitor)
146
+ (path 12345678-1234-1234-1234-123456789abe)
147
+ (attr smd)
148
+ (fp_text reference C1 (at 0 -1.65) (layer F.SilkS)
149
+ (effects (font (size 1 1) (thickness 0.15)))
150
+ )
151
+ (fp_text value 100nF (at 0 1.65) (layer F.Fab)
152
+ (effects (font (size 1 1) (thickness 0.15)))
153
+ )
154
+ (pad 1 smd rect (at -0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
155
+ (net 2))
156
+ (pad 2 smd rect (at 0.95 0) (size 1.2 1.5) (layers F.Cu F.Paste F.Mask)
157
+ (net 1))
158
+ )
159
+
160
+ (module Module:ESP32-WROOM-32 (layer F.Cu) (tedit 5A030DC3) (tstamp 5ABCDEF3)
161
+ (at 200 150)
162
+ (descr "RF Module, ESP32-WROOM-32, http://www.espressif.com/sites/default/files/documentation/0a-esp32-wroom-32_datasheet_en.pdf")
163
+ (tags "ESP Wi-Fi Bluetooth")
164
+ (path 12345678-1234-1234-1234-123456789abf)
165
+ (attr smd)
166
+ (fp_text reference U1 (at 0 -12.7) (layer F.SilkS)
167
+ (effects (font (size 1 1) (thickness 0.15)))
168
+ )
169
+ (fp_text value ESP32-WROOM-32 (at 0 12.7) (layer F.Fab)
170
+ (effects (font (size 1 1) (thickness 0.15)))
171
+ )
172
+ (pad 1 smd rect (at -8 6) (size 2 1) (layers F.Cu F.Paste F.Mask)
173
+ (net 1))
174
+ (pad 2 smd rect (at -8 4) (size 2 1) (layers F.Cu F.Paste F.Mask)
175
+ (net 2))
176
+ )
177
+ )
@@ -0,0 +1,145 @@
1
+ (kicad_sch (version 20211123) (generator eeschema)
2
+
3
+ (paper "A4")
4
+ (title_block
5
+ (title "Example Project")
6
+ (company "Test Company")
7
+ (date "2025-01-25")
8
+ (rev "1.0")
9
+ )
10
+
11
+ (lib_symbols
12
+ )
13
+
14
+ (polyline (pts (xy 50 100) (xy 150 100)))
15
+
16
+ (symbol (lib_id "Device:R") (at 100 100 0) (unit 1)
17
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
18
+ (uuid 12345678-1234-1234-1234-123456789abc)
19
+ (property "Reference" "R1" (at 95 95 0)
20
+ (effects (font (size 1.27 1.27)))
21
+ )
22
+ (property "Value" "10k" (at 95 105 0)
23
+ (effects (font (size 1.27 1.27)))
24
+ )
25
+ (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 100 100 0)
26
+ (effects (font (size 1.27 1.27)) hide)
27
+ )
28
+ (pin "1" (uuid 11111111-1111-1111-1111-111111111111))
29
+ (pin "2" (uuid 22222222-2222-2222-2222-222222222222))
30
+ )
31
+
32
+ (symbol (lib_id "Device:R") (at 150 100 0) (unit 1)
33
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
34
+ (uuid 12345678-1234-1234-1234-123456789abd)
35
+ (property "Reference" "R2" (at 145 95 0)
36
+ (effects (font (size 1.27 1.27)))
37
+ )
38
+ (property "Value" "4.7k" (at 145 105 0)
39
+ (effects (font (size 1.27 1.27)))
40
+ )
41
+ (property "Footprint" "" (at 150 100 0)
42
+ (effects (font (size 1.27 1.27)) hide)
43
+ )
44
+ (pin "1" (uuid 33333333-3333-3333-3333-333333333333))
45
+ (pin "2" (uuid 44444444-4444-4444-4444-444444444444))
46
+ )
47
+
48
+ (symbol (lib_id "Device:C") (at 100 150 0) (unit 1)
49
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
50
+ (uuid 12345678-1234-1234-1234-123456789abe)
51
+ (property "Reference" "C1" (at 95 145 0)
52
+ (effects (font (size 1.27 1.27)))
53
+ )
54
+ (property "Value" "100nF" (at 95 155 0)
55
+ (effects (font (size 1.27 1.27)))
56
+ )
57
+ (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 100 150 0)
58
+ (effects (font (size 1.27 1.27)) hide)
59
+ )
60
+ (pin "1" (uuid 55555555-5555-5555-5555-555555555555))
61
+ (pin "2" (uuid 66666666-6666-6666-6666-666666666666))
62
+ )
63
+
64
+ (symbol (lib_id "MCU_Module:ESP32_WROOM") (at 200 150 0) (unit 1)
65
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
66
+ (uuid 12345678-1234-1234-1234-123456789abf)
67
+ (property "Reference" "U1" (at 195 145 0)
68
+ (effects (font (size 1.27 1.27)))
69
+ )
70
+ (property "Value" "ESP32-WROOM-32" (at 195 155 0)
71
+ (effects (font (size 1.27 1.27)))
72
+ )
73
+ (property "Footprint" "Module:ESP32-WROOM-32" (at 200 150 0)
74
+ (effects (font (size 1.27 1.27)) hide)
75
+ )
76
+ (pin "1" (uuid 77777777-7777-7777-7777-777777777777))
77
+ (pin "2" (uuid 88888888-8888-8888-8888-888888888888))
78
+ )
79
+
80
+ (symbol (lib_id "Connector:Conn_01x04_Pin") (at 250 100 0) (unit 1)
81
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
82
+ (uuid 12345678-1234-1234-1234-123456789ac0)
83
+ (property "Reference" "J1" (at 245 95 0)
84
+ (effects (font (size 1.27 1.27)))
85
+ )
86
+ (property "Value" "Conn_01x04" (at 245 105 0)
87
+ (effects (font (size 1.27 1.27)))
88
+ )
89
+ (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" (at 250 100 0)
90
+ (effects (font (size 1.27 1.27)) hide)
91
+ )
92
+ (pin "1" (uuid 99999999-9999-9999-9999-999999999999))
93
+ (pin "2" (uuid aaaaaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa))
94
+ (pin "3" (uuid bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb))
95
+ (pin "4" (uuid cccccccc-cccc-cccc-cccc-cccccccccccc))
96
+ )
97
+
98
+ (symbol (lib_id "Device:R") (at 300 100 0) (unit 1)
99
+ (exclude_from_sim no) (in_bom no) (on_board yes) (dnp yes)
100
+ (uuid 12345678-1234-1234-1234-123456789ac1)
101
+ (property "Reference" "R3" (at 295 95 0)
102
+ (effects (font (size 1.27 1.27)))
103
+ )
104
+ (property "Value" "0R" (at 295 105 0)
105
+ (effects (font (size 1.27 1.27)))
106
+ )
107
+ (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 300 100 0)
108
+ (effects (font (size 1.27 1.27)) hide)
109
+ )
110
+ (pin "1" (uuid dddddddd-dddd-dddd-dddd-dddddddddddd))
111
+ (pin "2" (uuid eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee))
112
+ )
113
+
114
+ (global_label "SPI_CLK" (shape input) (at 120 90 0) (fields_autoplaced yes)
115
+ (effects (font (size 1.27 1.27)) (justify left))
116
+ (uuid ffffffff-ffff-ffff-ffff-ffffffffffff)
117
+ )
118
+
119
+ (label "+3V3" (at 140 100 0) (fields_autoplaced yes)
120
+ (effects (font (size 1.27 1.27)) (justify left))
121
+ (uuid dddddddd-dddd-dddd-dddd-ffffffffffff)
122
+ )
123
+
124
+ (hierarchical_label "SDA" (shape bidirectional) (at 160 90 0)
125
+ (effects (font (size 1.27 1.27)) (justify left))
126
+ (uuid aaaaaaaa-aaaa-aaaa-aaaa-ffffffffffff)
127
+ )
128
+
129
+ (hierarchical_label "SCL" (shape bidirectional) (at 160 95 0)
130
+ (effects (font (size 1.27 1.27)) (justify left))
131
+ (uuid bbbbbbbb-bbbb-bbbb-bbbb-ffffffffffff)
132
+ )
133
+
134
+ (symbol (lib_id "power:GND") (at 100 120 0) (unit 1)
135
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
136
+ (uuid cccccccc-cccc-cccc-cccc-ffffffffffff)
137
+ (property "Reference" "#PWR01" (at 100 126.35 0)
138
+ (effects (font (size 1.27 1.27)) hide)
139
+ )
140
+ (property "Value" "GND" (at 100 123.81 0)
141
+ (effects (font (size 1.27 1.27)))
142
+ )
143
+ (pin "1" (uuid bbbbbbbb-bbbb-bbbb-bbbb-ffffffffffff))
144
+ )
145
+ )
@@ -0,0 +1,24 @@
1
+ (kicad_sch (version 20231120) (generator eeschema)
2
+
3
+ (paper "A4")
4
+
5
+ (lib_symbols
6
+ )
7
+
8
+ (symbol (lib_id "Device:C") (at 80 80 0) (unit 1)
9
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
10
+ (uuid bbbbbbbb-0000-0000-0000-000000000002)
11
+ (property "Reference" "C9" (at 75 75 0)
12
+ (effects (font (size 1.27 1.27)))
13
+ )
14
+ (property "Value" "100nF" (at 75 85 0)
15
+ (effects (font (size 1.27 1.27)))
16
+ )
17
+ (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 80 80 0)
18
+ (effects (font (size 1.27 1.27)) hide)
19
+ )
20
+ (pin "1" (uuid 33333333-0000-0000-0000-333333333333))
21
+ (pin "2" (uuid 44444444-0000-0000-0000-444444444444))
22
+ )
23
+
24
+ )
@@ -0,0 +1,38 @@
1
+ (kicad_sch (version 20231120) (generator eeschema)
2
+
3
+ (paper "A4")
4
+
5
+ (lib_symbols
6
+ )
7
+
8
+ (symbol (lib_id "Device:R") (at 100 100 0) (unit 1)
9
+ (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)
10
+ (uuid aaaaaaaa-0000-0000-0000-000000000001)
11
+ (property "Reference" "R1" (at 95 95 0)
12
+ (effects (font (size 1.27 1.27)))
13
+ )
14
+ (property "Value" "10k" (at 95 105 0)
15
+ (effects (font (size 1.27 1.27)))
16
+ )
17
+ (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 100 100 0)
18
+ (effects (font (size 1.27 1.27)) hide)
19
+ )
20
+ (pin "1" (uuid 11111111-0000-0000-0000-111111111111))
21
+ (pin "2" (uuid 22222222-0000-0000-0000-222222222222))
22
+ )
23
+
24
+ (sheet
25
+ (at 150 50)
26
+ (size 30 20)
27
+ (property "Sheetname" "Power")
28
+ (property "Sheetfile" "child.kicad_sch")
29
+ )
30
+
31
+ (sheet
32
+ (at 150 100)
33
+ (size 30 20)
34
+ (property "Sheetname" "Ghost")
35
+ (property "Sheetfile" "missing.kicad_sch")
36
+ )
37
+
38
+ )
@@ -0,0 +1 @@
1
+ """Test package for tools."""