@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,416 @@
1
+ # Device Tree Generation Guide
2
+
3
+ Comprehensive guide for using KiCad MCP Server's device tree generation capabilities.
4
+
5
+ ## Overview
6
+
7
+ Device tree generation tools automatically create Linux device tree source (.dts) files from KiCad schematics, supporting multiple SOC families and peripheral types.
8
+
9
+ ## Tools
10
+
11
+ ### `generate_device_tree(schematic_path: str, target_soc: str = "stm32f4", output_path: str = "") -> str`
12
+
13
+ Generate complete device tree source file from schematic.
14
+
15
+ **Supported SOC Families:**
16
+ - `stm32f4` - STM32F4 series (STM32F407, STM32F411, etc.)
17
+ - `esp32` - ESP32 series (ESP32, ESP32-S2, ESP32-S3)
18
+ - `nrf52` - nRF52 series (nRF52832, nRF52840)
19
+ - `atmega` - ATmega series (ATmega328P, ATmega2560)
20
+
21
+ **Example:**
22
+ ```python
23
+ # Generate device tree for STM32F4
24
+ result = generate_device_tree(
25
+ schematic_path="board.kicad_sch",
26
+ target_soc="stm32f4",
27
+ output_path="board.dts"
28
+ )
29
+ print(result)
30
+ ```
31
+
32
+ **Output includes:**
33
+ - GPIO pin configurations
34
+ - I2C buses and devices
35
+ - SPI buses and devices
36
+ - UART/USART configurations
37
+ - Power domains and regulators
38
+ - SOC-specific configurations
39
+
40
+ ### `extract_gpio_config(schematic_path: str, soc_family: str = "") -> str`
41
+
42
+ Extract GPIO pin configurations from schematic.
43
+
44
+ **Example:**
45
+ ```python
46
+ # Extract all GPIO configurations
47
+ gpio = extract_gpio_config("board.kicad_sch")
48
+
49
+ # Extract for specific SOC
50
+ stm32_gpio = extract_gpio_config("board.kicad_sch", soc_family="stm32")
51
+ ```
52
+
53
+ **Output includes:**
54
+ - Pin numbers and names
55
+ - Net connections
56
+ - SOC family identification
57
+ - Code generation suggestions
58
+
59
+ ### `extract_i2c_devices(schematic_path: str) -> str`
60
+
61
+ Extract I2C bus and device configurations.
62
+
63
+ **Example:**
64
+ ```python
65
+ i2c_devices = extract_i2c_devices("board.kicad_sch")
66
+ print(i2c_devices)
67
+ ```
68
+
69
+ **Output includes:**
70
+ - I2C bus configuration
71
+ - Device addresses (extracted from net names)
72
+ - Device tree compatible strings
73
+ - Device tree node configurations
74
+
75
+ ### `extract_spi_devices(schematic_path: str) -> str`
76
+
77
+ Extract SPI bus and device configurations.
78
+
79
+ **Example:**
80
+ ```python
81
+ spi_devices = extract_spi_devices("board.kicad_sch")
82
+ print(spi_devices)
83
+ ```
84
+
85
+ **Output includes:**
86
+ - SPI bus configuration
87
+ - Chip select assignments
88
+ - Device tree compatible strings
89
+ - SPI frequency settings
90
+
91
+ ### `extract_power_domains(schematic_path: str) -> str`
92
+
93
+ Extract power domain and regulator configurations.
94
+
95
+ **Example:**
96
+ ```python
97
+ power = extract_power_domains("board.kicad_sch")
98
+ print(power)
99
+ ```
100
+
101
+ **Output includes:**
102
+ - Regulator components
103
+ - Power domain assignments
104
+ - Voltage configurations
105
+ - Device tree regulator nodes
106
+
107
+ ### `validate_pin_configuration(schematic_path: str) -> str`
108
+
109
+ Validate pin configuration before device tree generation.
110
+
111
+ **Example:**
112
+ ```python
113
+ validation = validate_pin_configuration("board.kicad_sch")
114
+ if "✅" in validation:
115
+ # Safe to generate device tree
116
+ generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
117
+ else:
118
+ print("Fix validation issues first")
119
+ ```
120
+
121
+ ## Device Tree Bindings Database
122
+
123
+ ### Supported Components
124
+
125
+ **Sensors:**
126
+ - BMP280, BME280, BMP388 (bosch,bmp280)
127
+ - LSM6DS3, MPU6050, MPU9250 (motion sensors)
128
+ - HTS221, LPS22HB (environmental sensors)
129
+ - DHT22, SHT30 (temperature/humidity)
130
+ - MAX31855 (thermocouple)
131
+
132
+ **Displays:**
133
+ - ST7789, ST7735, ILI9341 (TFT displays)
134
+ - SSD1306, SH1106 (OLED displays)
135
+
136
+ **Memory:**
137
+ - AT24C256 (I2C EEPROM)
138
+ - W25Q128, GD25Q16 (SPI Flash)
139
+
140
+ **Wireless:**
141
+ - ESP8266 (WiFi module)
142
+ - nRF24L01 (2.4GHz radio)
143
+ - SX1278 (LoRa radio)
144
+
145
+ **Connectivity:**
146
+ - CP2102, FT232RL, CH340G (USB-serial)
147
+
148
+ **Power:**
149
+ - TP4056 (battery charger)
150
+ - AXP192 (power management)
151
+ - LP3985, AP2112 (voltage regulators)
152
+
153
+ ## Usage Patterns
154
+
155
+ ### Basic Device Tree Generation
156
+
157
+ ```python
158
+ # 1. Validate pin configuration
159
+ validation = validate_pin_configuration("board.kicad_sch")
160
+ assert "✅" in validation, "Fix validation issues first"
161
+
162
+ # 2. Generate device tree
163
+ result = generate_device_tree(
164
+ schematic_path="board.kicad_sch",
165
+ target_soc="stm32f4",
166
+ output_path="board.dts"
167
+ )
168
+
169
+ print(result)
170
+ ```
171
+
172
+ ### Multi-SOC Support
173
+
174
+ ```python
175
+ # Generate device trees for different SOCs
176
+ for soc in ["stm32f4", "esp32", "nrf52"]:
177
+ result = generate_device_tree(
178
+ schematic_path="board.kicad_sch",
179
+ target_soc=soc,
180
+ output_path=f"board_{soc}.dts"
181
+ )
182
+ print(f"Generated {soc} device tree")
183
+ ```
184
+
185
+ ### Peripheral-Specific Extraction
186
+
187
+ ```python
188
+ # Extract specific peripheral configurations
189
+ gpio = extract_gpio_config("board.kicad_sch", "stm32")
190
+ i2c = extract_i2c_devices("board.kicad_sch")
191
+ spi = extract_spi_devices("board.kicad_sch")
192
+ power = extract_power_domains("board.kicad_sch")
193
+
194
+ # Use extracted data for custom device tree
195
+ # (integrate into your build system)
196
+ ```
197
+
198
+ ## Schematic Requirements
199
+
200
+ ### Component Naming
201
+
202
+ For best results, use standard component values:
203
+
204
+ ```python
205
+ # Good - Recognizable components
206
+ "STM32F407VGT6"
207
+ "ESP32-WROOM-32"
208
+ "BMP280"
209
+ "SSD1306"
210
+
211
+ # Avoid - Generic names
212
+ "U1" # Use proper component value
213
+ "SENSOR" # Be specific
214
+ ```
215
+
216
+ ### Net Naming
217
+
218
+ Use descriptive net names for automatic detection:
219
+
220
+ ```python
221
+ # I2C nets
222
+ "I2C1_SDA"
223
+ "I2C1_SCL"
224
+ "I2C_SENSOR_SDA_0x76" # Include I2C address
225
+
226
+ # SPI nets
227
+ "SPI1_MOSI"
228
+ "SPI1_MISO"
229
+ "SPI1_SCK"
230
+ "SPI1_CS0"
231
+
232
+ # UART nets
233
+ "UART1_TX"
234
+ "UART1_RX"
235
+
236
+ # GPIO nets
237
+ "GPIO_LED_STATUS"
238
+ "GPIO_BUTTON_RESET"
239
+ "PA0" # STM32 style
240
+ "IO0" # ESP32 style
241
+ ```
242
+
243
+ ### I2C Address Detection
244
+
245
+ Include I2C addresses in net names:
246
+
247
+ ```python
248
+ # Format: I2C_<name>_<address>
249
+ "I2C_SDA_0x76" # BMP280 at 0x76
250
+ "I2C_SCL_0x5A" # Device at 0x5A
251
+ ```
252
+
253
+ ## Device Tree Compilation
254
+
255
+ ### Compile Generated Device Tree
256
+
257
+ ```bash
258
+ # Install device tree compiler
259
+ sudo apt-get install device-tree-compiler
260
+
261
+ # Compile .dts to .dtb
262
+ dtc -I dts -O dtb -o board.dtb board.dts
263
+
264
+ # Verify compiled device tree
265
+ dtc -I dtb -O dts -o verify.dts board.dtb
266
+ ```
267
+
268
+ ### Integration with Build System
269
+
270
+ ```makefile
271
+ # Makefile
272
+ BOARD_DTS = board.dts
273
+ BOARD_DTB = board.dtb
274
+
275
+ all: $(BOARD_DTB)
276
+
277
+ $(BOARD_DTB): $(BOARD_DTS)
278
+ dtc -I dts -O dtb -o $@ $<
279
+
280
+ generate:
281
+ python -c "
282
+ from kicad_mcp_server.tools import device_tree
283
+ device_tree.generate_device_tree('board.kicad_sch', 'stm32f4', '$(BOARD_DTS)')
284
+ "
285
+
286
+ clean:
287
+ rm -f $(BOARD_DTB)
288
+ ```
289
+
290
+ ## Customization
291
+
292
+ ### Custom Templates
293
+
294
+ Create custom device tree templates:
295
+
296
+ ```python
297
+ # Save template as custom_soc.dts.j2
298
+ # In templates/device_tree/ directory
299
+
300
+ # Use custom template
301
+ result = generate_device_tree(
302
+ schematic_path="board.kicad_sch",
303
+ target_soc="custom_soc",
304
+ output_path="board.dts"
305
+ )
306
+ ```
307
+
308
+ ### Custom Bindings
309
+
310
+ Add device tree bindings for new components:
311
+
312
+ ```python
313
+ # In device_tree.py, add to DEVICE_TREE_BINDINGS
314
+ DEVICE_TREE_BINDINGS = {
315
+ "MyCategory": {
316
+ "MY_PART": {"compatible": "vendor,my-part"},
317
+ },
318
+ # ... existing bindings
319
+ }
320
+ ```
321
+
322
+ ### Post-Processing
323
+
324
+ Process generated device tree:
325
+
326
+ ```python
327
+ # Generate device tree
328
+ result = generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
329
+
330
+ # Read and modify
331
+ with open("board.dts", "r") as f:
332
+ dts = f.read()
333
+
334
+ # Add custom modifications
335
+ dts += """
336
+ /* Custom additions */
337
+ &i2c1 {
338
+ my_custom_device: custom@50 {
339
+ compatible = "vendor,custom";
340
+ reg = <0x50>;
341
+ };
342
+ };
343
+ """
344
+
345
+ # Write modified version
346
+ with open("board_custom.dts", "w") as f:
347
+ f.write(dts)
348
+ ```
349
+
350
+ ## Best Practices
351
+
352
+ 1. **Validate First**: Always run validation before generation
353
+ 2. **Use Standard Names**: Use recognizable component values and net names
354
+ 3. **Include Addresses**: Put I2C addresses in net names
355
+ 4. **Review Output**: Inspect generated .dts file
356
+ 5. **Test Compilation**: Compile .dts to .dtb to verify syntax
357
+ 6. **Version Control**: Keep both schematic and device tree in sync
358
+
359
+ ## Troubleshooting
360
+
361
+ **Issue:** MCU not detected
362
+ - **Solution:** Check component value (e.g., "STM32F407")
363
+ - **Solution:** Verify component library is properly configured
364
+
365
+ **Issue:** I2C addresses not detected
366
+ - **Solution:** Include address in net name (e.g., "I2C_SDA_0x76")
367
+ - **Solution:** Use hex format (0x76, not 118)
368
+
369
+ **Issue:** Device tree won't compile
370
+ - **Solution:** Check for syntax errors in generated .dts
371
+ - **Solution:** Verify all referenced nodes exist
372
+ - **Solution:** Check for missing include files
373
+
374
+ **Issue:** Generated device tree missing peripherals
375
+ - **Solution:** Check net naming conventions
376
+ - **Solution:** Verify component is in bindings database
377
+ - **Solution:** Ensure schematic netlist is up to date
378
+
379
+ ## Integration with Embedded Linux
380
+
381
+ ### Complete Workflow
382
+
383
+ ```python
384
+ # 1. Validate design
385
+ validate_pin_configuration("board.kicad_sch")
386
+
387
+ # 2. Generate device tree
388
+ generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
389
+
390
+ # 3. Compile device tree
391
+ import subprocess
392
+ subprocess.run(["dtc", "-I", "dts", "-O", "dtb", "-o", "board.dtb", "board.dts"])
393
+
394
+ # 4. Deploy to target
395
+ # (copy board.dtb to target system)
396
+ ```
397
+
398
+ ### Kernel Integration
399
+
400
+ ```bash
401
+ # Copy device tree to boot partition
402
+ cp board.dtb /boot/
403
+
404
+ # Update boot loader to use new device tree
405
+ # (varies by platform)
406
+
407
+ # Reboot and test
408
+ reboot
409
+ ```
410
+
411
+ ## Resources
412
+
413
+ - [Device Tree Specification](https://www.devicetree.org/)
414
+ - [Linux Device Tree Usage](https://www.kernel.org/doc/Documentation/devicetree/usage-model.txt)
415
+ - [Device Tree Compiler](https://github.com/dgibson/dtc)
416
+ - [STM32 Device Tree](https://wiki.st.com/stm32mpu/wiki/Device_tree)