breadkit 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.codespellignore +2 -0
- data/.yamllint +16 -0
- data/README.md +109 -6
- data/data/boards/double_full.yml +18 -0
- data/data/boards/stripboard.yml +9 -0
- data/data/boards/universal.yml +8 -0
- data/data/parts/2n3904.yml +11 -0
- data/data/parts/2n7000_onsemi_to92.yml +10 -0
- data/data/parts/74hc00.yml +22 -0
- data/data/parts/74hc04.yml +22 -0
- data/data/parts/74hc08.yml +22 -0
- data/data/parts/74hc14.yml +22 -0
- data/data/parts/74hc165.yml +24 -0
- data/data/parts/74hc32.yml +22 -0
- data/data/parts/74hc595.yml +24 -0
- data/data/parts/active_buzzer.yml +8 -0
- data/data/parts/ams1117_3v3.yml +12 -0
- data/data/parts/arduino_nano.yml +70 -0
- data/data/parts/arduino_uno.yml +29 -26
- data/data/parts/atmega328p.yml +37 -0
- data/data/parts/attiny85.yml +16 -0
- data/data/parts/battery_box.yml +8 -0
- data/data/parts/cd4017.yml +24 -0
- data/data/parts/ck_bd04.yml +29 -0
- data/data/parts/crystal.yml +7 -0
- data/data/parts/dc_jack_2wire.yml +8 -0
- data/data/parts/diode.yml +1 -0
- data/data/parts/esp32_devkitc_v4_wroom32e.yml +86 -0
- data/data/parts/irlz44n.yml +10 -0
- data/data/parts/l293d.yml +24 -0
- data/data/parts/led.yml +1 -0
- data/data/parts/lm358.yml +16 -0
- data/data/parts/lm393.yml +16 -0
- data/data/parts/ne555.yml +2 -2
- data/data/parts/ntc_thermistor.yml +7 -0
- data/data/parts/photoresistor.yml +8 -0
- data/data/parts/pico.yml +89 -0
- data/data/parts/resistor.yml +1 -0
- data/data/parts/sc56_11ewa.yml +30 -0
- data/data/parts/seeed_xiao_samd21.yml +37 -0
- data/data/parts/shillehtek_mb102_4pin.yml +23 -0
- data/data/parts/slide_switch_spst.yml +8 -0
- data/data/parts/sparkfun_pro_micro_5v.yml +58 -0
- data/data/parts/transistor.yml +0 -1
- data/data/parts/ua7805.yml +10 -0
- data/data/parts/uln2003a.yml +23 -0
- data/data/parts/wp154a4sureqbfzgc.yml +11 -0
- data/docs/CLI.md +108 -0
- data/docs/COMPATIBILITY.md +60 -0
- data/docs/DECLARATIVE.md +138 -0
- data/docs/IR.md +42 -0
- data/docs/JUMPER_KIT.md +45 -0
- data/docs/LOCK.md +75 -0
- data/docs/LSP.md +59 -0
- data/docs/MB102_POWER.md +11 -0
- data/docs/MCP.md +44 -0
- data/docs/RAKE.md +19 -0
- data/docs/dsl.md +197 -6
- data/exe/breadkit-lsp +13 -0
- data/exe/breadkit-mcp +12 -0
- data/lib/breadkit/analysis.rb +174 -50
- data/lib/breadkit/board.rb +152 -4
- data/lib/breadkit/cli.rb +229 -13
- data/lib/breadkit/color.rb +38 -0
- data/lib/breadkit/dc_analysis.rb +261 -0
- data/lib/breadkit/dsl.rb +205 -24
- data/lib/breadkit/exporters.rb +202 -0
- data/lib/breadkit/formatter.rb +52 -0
- data/lib/breadkit/fritzing_export.rb +256 -0
- data/lib/breadkit/ir.rb +154 -22
- data/lib/breadkit/jumper_kit.rb +127 -0
- data/lib/breadkit/lsp_server.rb +248 -0
- data/lib/breadkit/mcp_server.rb +133 -0
- data/lib/breadkit/model.rb +47 -5
- data/lib/breadkit/part_library.rb +156 -3
- data/lib/breadkit/part_lock.rb +107 -0
- data/lib/breadkit/patterns.rb +119 -0
- data/lib/breadkit/rake_task.rb +25 -0
- data/lib/breadkit/resolver.rb +160 -28
- data/lib/breadkit/structured_input.rb +275 -0
- data/lib/breadkit/templates/555.bk.rb +34 -0
- data/lib/breadkit/templates/arduino.bk.rb +17 -0
- data/lib/breadkit/templates/led.bk.rb +21 -0
- data/lib/breadkit/value.rb +42 -3
- data/lib/breadkit/version.rb +1 -1
- data/lib/breadkit/wire_suggestions.rb +106 -0
- data/lib/breadkit.rb +28 -3
- data/package.json +1 -1
- data/schema/board-v1.json +38 -0
- data/schema/ir-v1.json +56 -11
- data/schema/ir-v2.json +173 -0
- data/schema/part-v1.json +52 -4
- data/sig/breadkit.rbs +107 -5
- metadata +119 -14
- data/docs/assets/01_led_button.svg +0 -12
- data/site/assets/01_led_button.svg +0 -14
- data/site/assets/03_arduino_blink.svg +0 -14
- data/site/favicon.svg +0 -7
- data/site/guide/components/index.html +0 -113
- data/site/guide/dsl/index.html +0 -132
- data/site/guide/index.html +0 -163
- data/site/index.html +0 -95
- data/site/styles.css +0 -14
data/schema/ir-v2.json
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://breadkit.github.io/breadkit/schema/ir-v2.json",
|
|
4
|
+
"title": "Breadkit IR v2",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema_version", "title", "boards", "components", "wires", "supplies", "labels", "expectations"],
|
|
7
|
+
"not": { "anyOf": [{ "required": ["board"] }, { "required": ["board_definition"] }] },
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": { "const": 2 },
|
|
10
|
+
"source_root": { "type": "string" },
|
|
11
|
+
"title": { "type": ["string", "null"] },
|
|
12
|
+
"steps": { "type": "array", "items": { "$ref": "#/$defs/step" } },
|
|
13
|
+
"part_definitions": { "type": "array", "items": { "$ref": "#/$defs/partDefinition" } },
|
|
14
|
+
"boards": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/namedBoard" } },
|
|
15
|
+
"lint_disables": { "type": "array", "items": { "type": "object" } },
|
|
16
|
+
"components": { "type": "array", "items": { "$ref": "#/$defs/component" } },
|
|
17
|
+
"wires": { "type": "array", "items": { "$ref": "#/$defs/wire" } },
|
|
18
|
+
"supplies": { "type": "array", "items": { "$ref": "#/$defs/supply" } },
|
|
19
|
+
"labels": { "type": "array", "items": { "$ref": "#/$defs/label" } },
|
|
20
|
+
"expectations": { "type": "array", "items": { "$ref": "#/$defs/expectation" } },
|
|
21
|
+
"analysis": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": ["nets"],
|
|
24
|
+
"properties": { "nets": { "type": "array", "items": { "$ref": "#/$defs/net" } } }
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"additionalProperties": true,
|
|
28
|
+
"$defs": {
|
|
29
|
+
"namedBoard": {
|
|
30
|
+
"type": "object", "required": ["name", "type", "options", "definition"],
|
|
31
|
+
"properties": {
|
|
32
|
+
"name": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_]*$" },
|
|
33
|
+
"type": { "type": "string", "minLength": 1 },
|
|
34
|
+
"options": { "type": "object", "properties": { "split_rails": { "type": "boolean" } } },
|
|
35
|
+
"definition": { "$ref": "#/$defs/boardDefinition" }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"partDefinition": {
|
|
39
|
+
"type": "object", "required": ["id", "pins"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"id": { "type": "string", "minLength": 1 },
|
|
42
|
+
"datasheet_url": { "type": "string", "format": "uri", "pattern": "^https://" },
|
|
43
|
+
"pins": { "type": "array", "items": { "type": "object", "required": ["num"],
|
|
44
|
+
"properties": { "num": { "type": ["string", "integer"] }, "name": { "type": "string" }, "type": { "type": "string" }, "role": { "type": "string" }, "max_current": { "type": "number", "exclusiveMinimum": 0 } } } },
|
|
45
|
+
"placement": { "enum": ["leads", "dip", "footprint", "offboard"] },
|
|
46
|
+
"max_lead_span_mm": { "type": "number", "exclusiveMinimum": 0 },
|
|
47
|
+
"polarity": { "type": "object" }, "footprint": { "type": "object" },
|
|
48
|
+
"provides": { "type": "array", "items": { "type": "object", "required": ["positive", "negative", "voltage"],
|
|
49
|
+
"properties": { "positive": { "type": "string" }, "negative": { "type": "string" }, "voltage": { "type": "number", "exclusiveMinimum": 0 } } } }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"boardDefinition": {
|
|
53
|
+
"type": "object", "required": ["id", "terminal"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"id": { "type": "string", "minLength": 1 },
|
|
56
|
+
"terminal": { "type": "object", "required": ["columns", "rows", "groups"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"columns": { "type": "integer", "minimum": 1 },
|
|
59
|
+
"rows": { "type": "array", "items": { "type": "string" } },
|
|
60
|
+
"groups": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } },
|
|
61
|
+
"ravine_between": { "type": "array", "items": { "type": "string" }, "minItems": 2, "maxItems": 2 }
|
|
62
|
+
} },
|
|
63
|
+
"rails": { "type": "array", "items": { "type": "object", "required": ["id"],
|
|
64
|
+
"properties": { "id": { "type": "string" }, "side": { "type": "string" }, "order": { "type": "integer" }, "polarity": { "enum": ["+", "-"] } } } },
|
|
65
|
+
"rail_layout": { "type": "object", "properties": { "segments": { "type": "array" }, "split_segments": { "type": "array" } } }
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"source": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"required": ["path", "line"],
|
|
71
|
+
"properties": { "path": { "type": "string" }, "line": { "type": "integer", "minimum": 1 } }
|
|
72
|
+
},
|
|
73
|
+
"nullableSource": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/source" }] },
|
|
74
|
+
"step": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"required": ["number"],
|
|
77
|
+
"properties": {
|
|
78
|
+
"number": { "type": "integer", "minimum": 1 },
|
|
79
|
+
"title": { "type": ["string", "null"], "minLength": 1 },
|
|
80
|
+
"source": { "$ref": "#/$defs/nullableSource" }
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"location": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"required": ["path", "line"],
|
|
86
|
+
"properties": { "path": { "type": "string" }, "line": { "type": "integer", "minimum": 1 } }
|
|
87
|
+
},
|
|
88
|
+
"component": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"required": ["ref", "part", "value", "attrs", "pins", "unused", "source"],
|
|
91
|
+
"properties": {
|
|
92
|
+
"ref": { "type": "string" },
|
|
93
|
+
"part": { "type": "string" },
|
|
94
|
+
"value": { "type": ["string", "number", "null"] },
|
|
95
|
+
"attrs": { "type": "object" },
|
|
96
|
+
"pins": { "type": "object", "additionalProperties": { "type": ["string", "null"] } },
|
|
97
|
+
"unused": { "type": "array", "items": { "type": "string" } },
|
|
98
|
+
"step": { "type": "integer", "minimum": 1 },
|
|
99
|
+
"source": { "$ref": "#/$defs/nullableSource" }
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"wire": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"required": ["id", "from", "to", "color", "route", "source"],
|
|
105
|
+
"properties": {
|
|
106
|
+
"id": { "type": "string" },
|
|
107
|
+
"from": { "type": "string" },
|
|
108
|
+
"to": { "type": "string" },
|
|
109
|
+
"color": { "type": ["string", "null"] },
|
|
110
|
+
"route": { "type": "string" },
|
|
111
|
+
"step": { "type": "integer", "minimum": 1 },
|
|
112
|
+
"source": { "$ref": "#/$defs/nullableSource" }
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"supply": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"required": ["name", "voltage", "plus", "minus", "source"],
|
|
118
|
+
"properties": {
|
|
119
|
+
"name": { "type": "string" },
|
|
120
|
+
"voltage": { "type": "number" },
|
|
121
|
+
"isolated": { "type": "boolean" },
|
|
122
|
+
"voltage_range": { "type": ["array", "null"], "prefixItems": [{ "type": "number", "exclusiveMinimum": 0 }, { "type": "number", "exclusiveMinimum": 0 }], "minItems": 2, "maxItems": 2 },
|
|
123
|
+
"current_limit": { "type": ["number", "null"], "exclusiveMinimum": 0 },
|
|
124
|
+
"plus": { "type": "string" },
|
|
125
|
+
"minus": { "type": "string" },
|
|
126
|
+
"step": { "type": "integer", "minimum": 1 },
|
|
127
|
+
"source": { "$ref": "#/$defs/nullableSource" }
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"label": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"required": ["net", "at", "source"],
|
|
133
|
+
"properties": {
|
|
134
|
+
"net": { "type": "string" },
|
|
135
|
+
"at": { "type": "string" },
|
|
136
|
+
"step": { "type": "integer", "minimum": 1 },
|
|
137
|
+
"source": { "$ref": "#/$defs/nullableSource" }
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"expectation": {
|
|
141
|
+
"type": "object",
|
|
142
|
+
"required": ["strict", "entries", "location"],
|
|
143
|
+
"properties": {
|
|
144
|
+
"strict": { "type": "boolean" },
|
|
145
|
+
"when": { "type": "string", "minLength": 1 },
|
|
146
|
+
"entries": {
|
|
147
|
+
"type": "array",
|
|
148
|
+
"items": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"required": ["kind", "refs", "location"],
|
|
151
|
+
"properties": {
|
|
152
|
+
"kind": { "enum": ["connected", "isolated", "net", "voltage", "current"] },
|
|
153
|
+
"refs": { "type": "array", "items": { "type": "string" } },
|
|
154
|
+
"range": { "type": "array", "items": { "type": "number" }, "minItems": 2, "maxItems": 2 },
|
|
155
|
+
"location": { "$ref": "#/$defs/location" }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"location": { "$ref": "#/$defs/location" }
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"net": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"required": ["name", "members", "holes", "potential"],
|
|
165
|
+
"properties": {
|
|
166
|
+
"name": { "type": "string" },
|
|
167
|
+
"members": { "type": "array", "items": { "type": "string" } },
|
|
168
|
+
"holes": { "type": "array", "items": { "type": "string" } },
|
|
169
|
+
"potential": { "type": ["number", "null"] }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
data/schema/part-v1.json
CHANGED
|
@@ -1,12 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://breadkit.github.io/breadkit/schema/part-v1.json",
|
|
3
4
|
"title": "Breadkit part definition v1",
|
|
4
5
|
"type": "object",
|
|
5
6
|
"required": ["id", "pins"],
|
|
6
7
|
"properties": {
|
|
7
8
|
"id": { "type": "string", "minLength": 1 },
|
|
9
|
+
"datasheet_url": { "type": "string", "format": "uri", "pattern": "^https://" },
|
|
8
10
|
"aliases": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
9
11
|
"category": { "type": "string" },
|
|
12
|
+
"extends": { "type": "string" },
|
|
13
|
+
"override": { "type": "boolean" },
|
|
14
|
+
"straddle": { "type": "boolean" },
|
|
15
|
+
"transistor_polarity": { "enum": ["NPN", "PNP"] },
|
|
16
|
+
"flags": { "type": "array", "items": { "type": "string" } },
|
|
17
|
+
"supply_range": { "type": "array", "prefixItems": [{ "type": "number" }, { "type": "number" }], "minItems": 2, "maxItems": 2 },
|
|
18
|
+
"max_reverse_voltage": { "type": "number", "minimum": 0 },
|
|
19
|
+
"forward_voltage": { "type": "number", "exclusiveMinimum": 0 },
|
|
20
|
+
"on_resistance": { "type": "number", "exclusiveMinimum": 0 },
|
|
21
|
+
"max_forward_current": { "type": "number", "exclusiveMinimum": 0 },
|
|
22
|
+
"max_lead_span_mm": { "type": "number", "exclusiveMinimum": 0 },
|
|
23
|
+
"package": { "type": "object", "properties": { "pins": { "type": "integer", "minimum": 1 } }, "additionalProperties": false },
|
|
24
|
+
"attributes": { "type": "object", "additionalProperties": { "oneOf": [{ "const": "css_color" }, { "type": "array", "minItems": 1, "items": { "type": ["string", "number"] } }] } },
|
|
25
|
+
"required_attributes": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
|
|
26
|
+
"provides": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": { "type": "object", "required": ["positive", "negative", "voltage"],
|
|
29
|
+
"properties": { "positive": { "type": "string" }, "negative": { "type": "string" }, "voltage": { "type": "number", "exclusiveMinimum": 0 },
|
|
30
|
+
"when": { "type": "object", "minProperties": 1, "additionalProperties": { "type": ["string", "number"] } } },
|
|
31
|
+
"additionalProperties": false }
|
|
32
|
+
},
|
|
33
|
+
"render": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"properties": {
|
|
36
|
+
"shape": { "type": "string" }, "label": { "type": "string" },
|
|
37
|
+
"size_mm": { "type": "array", "prefixItems": [{ "type": "number" }, { "type": "number" }], "minItems": 2, "maxItems": 2 },
|
|
38
|
+
"body_offset_mm": { "type": "array", "prefixItems": [{ "type": "number" }, { "type": "number" }], "minItems": 2, "maxItems": 2 },
|
|
39
|
+
"fill": { "type": "string" }, "stroke": { "type": "string" }, "text_color": { "type": "string" },
|
|
40
|
+
"svg": { "type": "string" }
|
|
41
|
+
}, "additionalProperties": false
|
|
42
|
+
},
|
|
10
43
|
"placement": { "enum": ["leads", "dip", "footprint", "offboard"] },
|
|
11
44
|
"pins": {
|
|
12
45
|
"type": "array",
|
|
@@ -17,10 +50,16 @@
|
|
|
17
50
|
"num": { "type": ["integer", "string"] },
|
|
18
51
|
"name": { "type": "string" },
|
|
19
52
|
"aliases": { "type": "array", "items": { "type": "string" } },
|
|
20
|
-
"type": { "
|
|
21
|
-
"role": { "
|
|
53
|
+
"type": { "$ref": "#/$defs/pinRole" },
|
|
54
|
+
"role": { "$ref": "#/$defs/pinRole" },
|
|
55
|
+
"label": { "type": ["boolean", "string"] },
|
|
56
|
+
"max_voltage": { "type": "number", "exclusiveMinimum": 0 },
|
|
57
|
+
"max_current": { "type": "number", "exclusiveMinimum": 0 },
|
|
58
|
+
"output_capable": { "type": "boolean" },
|
|
59
|
+
"mount": { "const": "rail" }
|
|
22
60
|
},
|
|
23
|
-
"
|
|
61
|
+
"not": { "required": ["type", "role"] },
|
|
62
|
+
"additionalProperties": false
|
|
24
63
|
}
|
|
25
64
|
},
|
|
26
65
|
"polarity": { "type": "object", "additionalProperties": { "type": ["string", "integer"] } },
|
|
@@ -31,12 +70,21 @@
|
|
|
31
70
|
"minItems": 2, "maxItems": 2
|
|
32
71
|
}
|
|
33
72
|
},
|
|
73
|
+
"footprint_mm": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"additionalProperties": {
|
|
76
|
+
"type": "array", "prefixItems": [{ "type": "number" }, { "type": "number" }],
|
|
77
|
+
"minItems": 2, "maxItems": 2
|
|
78
|
+
}
|
|
79
|
+
},
|
|
34
80
|
"internal": { "$ref": "#/$defs/pairs" },
|
|
35
81
|
"switch": { "$ref": "#/$defs/pairs" },
|
|
82
|
+
"independent_switches": { "const": true },
|
|
36
83
|
"same_strip_ok": { "$ref": "#/$defs/pairs" }
|
|
37
84
|
},
|
|
38
|
-
"additionalProperties":
|
|
85
|
+
"additionalProperties": false,
|
|
39
86
|
"$defs": {
|
|
87
|
+
"pinRole": { "enum": ["input", "output", "gpio", "power", "ground", "data", "clock", "interrupt", "address", "nc", "passive", "analog", "reset", "open_drain"] },
|
|
40
88
|
"pairs": {
|
|
41
89
|
"type": "array",
|
|
42
90
|
"items": {
|
data/sig/breadkit.rbs
CHANGED
|
@@ -5,9 +5,15 @@ module Breadkit
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
class DSLError < Error
|
|
8
|
+
attr_reader location: SourceLocation?
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
def self.load: (String path) -> Circuit
|
|
11
|
+
def self.load: (String path, ?timeout: Numeric) -> Circuit
|
|
12
|
+
|
|
13
|
+
module Color
|
|
14
|
+
NAMES: Array[String]
|
|
15
|
+
def self.valid?: (untyped value) -> bool
|
|
16
|
+
end
|
|
11
17
|
|
|
12
18
|
class SourceLocation
|
|
13
19
|
attr_reader path: String
|
|
@@ -32,7 +38,9 @@ module Breadkit
|
|
|
32
38
|
attr_reader ref: String
|
|
33
39
|
attr_reader part: PartDef
|
|
34
40
|
attr_reader pins: Hash[String, Pin]
|
|
41
|
+
attr_reader step: Integer?
|
|
35
42
|
def pin: (String | Symbol | Integer reference) -> Pin?
|
|
43
|
+
def body_bounds: (Board | BoardSet board) -> [Float, Float, Float, Float]?
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
class Wire
|
|
@@ -40,6 +48,7 @@ module Breadkit
|
|
|
40
48
|
attr_reader from: String
|
|
41
49
|
attr_reader to: String
|
|
42
50
|
attr_reader electrical: bool
|
|
51
|
+
attr_reader step: Integer?
|
|
43
52
|
end
|
|
44
53
|
|
|
45
54
|
class Supply
|
|
@@ -48,12 +57,17 @@ module Breadkit
|
|
|
48
57
|
attr_reader plus: String
|
|
49
58
|
attr_reader minus: String
|
|
50
59
|
attr_reader location: SourceLocation?
|
|
60
|
+
attr_reader isolated: bool
|
|
61
|
+
attr_reader voltage_range: Array[Float]?
|
|
62
|
+
attr_reader current_limit: Float?
|
|
63
|
+
attr_reader step: Integer?
|
|
51
64
|
end
|
|
52
65
|
|
|
53
66
|
class Label
|
|
54
67
|
attr_reader name: String
|
|
55
68
|
attr_reader at: String
|
|
56
69
|
attr_reader location: SourceLocation?
|
|
70
|
+
attr_reader step: Integer?
|
|
57
71
|
end
|
|
58
72
|
|
|
59
73
|
class Net
|
|
@@ -73,9 +87,23 @@ module Breadkit
|
|
|
73
87
|
attr_reader conflicts: Array[untyped]
|
|
74
88
|
end
|
|
75
89
|
|
|
90
|
+
class DCResult
|
|
91
|
+
attr_reader status: Symbol
|
|
92
|
+
attr_reader voltages: Hash[String, Float]
|
|
93
|
+
attr_reader currents: Hash[String, Float]
|
|
94
|
+
attr_reader power: Hash[String, Float]
|
|
95
|
+
attr_reader floating: Array[Array[String]]
|
|
96
|
+
attr_reader reference_nodes: Array[String]
|
|
97
|
+
attr_reader assumptions: Array[String]
|
|
98
|
+
attr_reader errors: Array[String]
|
|
99
|
+
def success?: () -> bool
|
|
100
|
+
end
|
|
101
|
+
|
|
76
102
|
class Circuit
|
|
77
103
|
attr_reader title: String?
|
|
78
|
-
attr_reader board: Board
|
|
104
|
+
attr_reader board: Board | BoardSet
|
|
105
|
+
def boards: () -> Hash[String, Board]
|
|
106
|
+
def multi_board?: () -> bool
|
|
79
107
|
attr_reader components: Hash[String, Component]
|
|
80
108
|
attr_reader wires: Array[Wire]
|
|
81
109
|
attr_reader supplies: Array[Supply]
|
|
@@ -83,12 +111,19 @@ module Breadkit
|
|
|
83
111
|
attr_reader expectations: Array[Hash[Symbol, untyped]]
|
|
84
112
|
attr_reader lint_disables: Array[Hash[Symbol, untyped]]
|
|
85
113
|
attr_reader diagnostics: Array[Diagnostic]
|
|
86
|
-
|
|
114
|
+
attr_reader source_root: String?
|
|
115
|
+
attr_reader steps: Array[Hash[Symbol, untyped]]
|
|
116
|
+
def voltage_sources: () -> Array[Supply]
|
|
117
|
+
def states: (?String mode, ?budget: Integer?) -> Array[State]
|
|
118
|
+
def state: (String? name) -> State?
|
|
87
119
|
def nets: (?State? state) -> Array[Net]
|
|
88
120
|
def potentials: (?State? state) -> PotentialResult
|
|
121
|
+
def dc_analysis: (?State? state) -> DCResult
|
|
89
122
|
def net_of: (String reference, ?State? state) -> Net?
|
|
123
|
+
def wire_suggestions: () -> Array[Hash[Symbol, untyped]]
|
|
90
124
|
def shortest_path: (String a, String b, ?State? state) -> Array[untyped]
|
|
91
125
|
def to_ir: () -> Hash[String, untyped]
|
|
126
|
+
def diff: (Circuit other) -> Hash[String, [untyped, untyped]]
|
|
92
127
|
end
|
|
93
128
|
|
|
94
129
|
class BoardDef
|
|
@@ -114,12 +149,23 @@ module Breadkit
|
|
|
114
149
|
def rail_polarity: (String id) -> String?
|
|
115
150
|
end
|
|
116
151
|
|
|
152
|
+
class BoardSet
|
|
153
|
+
attr_reader boards: Hash[String, Board]
|
|
154
|
+
attr_reader holes: Hash[String, untyped]
|
|
155
|
+
attr_reader strips: Hash[String, Array[String]]
|
|
156
|
+
def hole: (String id) -> untyped
|
|
157
|
+
def strip: (String id) -> Array[String]?
|
|
158
|
+
def board_id_for: (String id) -> String?
|
|
159
|
+
def width: () -> Integer
|
|
160
|
+
def height: () -> Integer
|
|
161
|
+
end
|
|
162
|
+
|
|
117
163
|
class HoleId
|
|
118
164
|
attr_reader kind: Symbol
|
|
119
165
|
attr_reader row: String?
|
|
120
166
|
attr_reader col: Integer?
|
|
121
167
|
attr_reader rail: String?
|
|
122
|
-
def self.parse: (String value, ?board: Board?) -> HoleId
|
|
168
|
+
def self.parse: (String value, ?board: (Board | BoardSet)?) -> HoleId
|
|
123
169
|
def to_s: () -> String
|
|
124
170
|
end
|
|
125
171
|
|
|
@@ -129,20 +175,32 @@ module Breadkit
|
|
|
129
175
|
def id: () -> String
|
|
130
176
|
def pins: () -> Array[Hash[String, untyped]]
|
|
131
177
|
def placement: () -> String
|
|
178
|
+
def max_lead_span_mm: () -> Float?
|
|
132
179
|
def pin: (String | Symbol | Integer value) -> Hash[String, untyped]?
|
|
133
180
|
end
|
|
134
181
|
|
|
135
182
|
class PartLibrary
|
|
183
|
+
attr_reader warnings: Array[String]
|
|
136
184
|
def initialize: (?extra_paths: Array[String], ?extra_definitions: Array[Hash[String, untyped]]) -> void
|
|
137
185
|
def find: (String | Symbol name, ?pin_count: Integer?) -> PartDef?
|
|
138
186
|
def all: () -> Array[PartDef]
|
|
139
187
|
end
|
|
140
188
|
|
|
189
|
+
class JumperKit
|
|
190
|
+
def initialize: (Hash[String, untyped] data) -> void
|
|
191
|
+
def self.load: (String path) -> JumperKit
|
|
192
|
+
def allocate: (Circuit circuit) -> Hash[Symbol, untyped]
|
|
193
|
+
end
|
|
194
|
+
|
|
141
195
|
class Value
|
|
142
196
|
attr_reader value: Float
|
|
143
197
|
attr_reader unit: String
|
|
144
|
-
def initialize: (String | Numeric value) -> void
|
|
198
|
+
def initialize: (String | Numeric value, ?category: Symbol?) -> void
|
|
145
199
|
def self.parse: (String | Numeric input) -> Float
|
|
200
|
+
def self.tolerance: (String | Numeric input) -> Float?
|
|
201
|
+
def self.power_rating: (String | Numeric input) -> Float?
|
|
202
|
+
def self.voltage_rating: (String | Numeric input) -> Float?
|
|
203
|
+
def self.split_spec: (String | Numeric input) -> [String, Array[String]]
|
|
146
204
|
def to_s: () -> String
|
|
147
205
|
end
|
|
148
206
|
|
|
@@ -154,17 +212,61 @@ module Breadkit
|
|
|
154
212
|
def run: (Array[String] argv) -> Integer
|
|
155
213
|
end
|
|
156
214
|
|
|
215
|
+
class RakeTask
|
|
216
|
+
attr_reader task: untyped
|
|
217
|
+
def initialize: (?String | Symbol name, files: Array[String]) -> void
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
class MCPServer
|
|
221
|
+
def initialize: (?root: String) -> void
|
|
222
|
+
def server: () -> untyped
|
|
223
|
+
def run: () -> untyped
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
module Exporters
|
|
227
|
+
FORMATS: Array[String]
|
|
228
|
+
def self.call: (Circuit circuit, format: String | Symbol) -> String
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
module Patterns
|
|
232
|
+
def self.call: (Circuit circuit) -> Array[Hash[String, String | Float]]
|
|
233
|
+
end
|
|
234
|
+
|
|
157
235
|
class Document
|
|
158
236
|
attr_accessor title: String?
|
|
159
237
|
attr_accessor board: Hash[Symbol, untyped]
|
|
238
|
+
attr_accessor boards: Array[Hash[Symbol, untyped]]
|
|
160
239
|
attr_accessor board_paths: Array[String]
|
|
161
240
|
attr_accessor board_definitions: Array[Hash[String, untyped]]
|
|
162
241
|
attr_accessor part_paths: Array[String]
|
|
163
242
|
attr_accessor part_definitions: Array[Hash[String, untyped]]
|
|
243
|
+
attr_accessor diagnostics: Array[Diagnostic]
|
|
244
|
+
attr_accessor source_root: String?
|
|
245
|
+
attr_accessor steps: Array[Hash[Symbol, untyped]]
|
|
164
246
|
end
|
|
165
247
|
|
|
166
248
|
module DSL
|
|
249
|
+
def self.load_file: (String path, ?timeout: Numeric, ?source: String?) -> Document
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
class StructuredInput
|
|
167
253
|
def self.load_file: (String path) -> Document
|
|
254
|
+
def self.load_source: (String path, String source) -> Document
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
class PartLock
|
|
258
|
+
def self.write: (String path) -> String
|
|
259
|
+
def self.verify: (Document document, String path) -> void
|
|
260
|
+
def self.lock_path: (String path) -> String
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
class LSPServer
|
|
264
|
+
def initialize: (?input: IO, ?output: IO, ?root: String?, ?trusted_ruby: bool) -> void
|
|
265
|
+
def run: () -> void
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
module Formatter
|
|
269
|
+
def self.call: (String path) -> String
|
|
168
270
|
end
|
|
169
271
|
|
|
170
272
|
module IR
|
metadata
CHANGED
|
@@ -1,70 +1,175 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: breadkit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yudai Takada
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
12
|
-
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: matrix
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0.4'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0.4'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: mcp
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '1.6'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.6'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: tomlrb
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '2.0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '2.0'
|
|
54
|
+
description: Breadkit resolves breadboard wiring descriptions into deterministic circuit
|
|
13
55
|
connectivity and JSON IR.
|
|
14
56
|
email:
|
|
15
57
|
- t.yudai92@gmail.com
|
|
16
58
|
executables:
|
|
17
59
|
- breadkit
|
|
60
|
+
- breadkit-lsp
|
|
61
|
+
- breadkit-mcp
|
|
18
62
|
extensions: []
|
|
19
63
|
extra_rdoc_files: []
|
|
20
64
|
files:
|
|
65
|
+
- ".codespellignore"
|
|
66
|
+
- ".yamllint"
|
|
21
67
|
- LICENSE.txt
|
|
22
68
|
- README.md
|
|
23
69
|
- SECURITY.md
|
|
70
|
+
- data/boards/double_full.yml
|
|
24
71
|
- data/boards/full.yml
|
|
25
72
|
- data/boards/half.yml
|
|
26
73
|
- data/boards/mini.yml
|
|
74
|
+
- data/boards/stripboard.yml
|
|
75
|
+
- data/boards/universal.yml
|
|
76
|
+
- data/parts/2n3904.yml
|
|
27
77
|
- data/parts/2n3906.yml
|
|
78
|
+
- data/parts/2n7000_onsemi_to92.yml
|
|
79
|
+
- data/parts/74hc00.yml
|
|
80
|
+
- data/parts/74hc04.yml
|
|
81
|
+
- data/parts/74hc08.yml
|
|
82
|
+
- data/parts/74hc14.yml
|
|
83
|
+
- data/parts/74hc165.yml
|
|
84
|
+
- data/parts/74hc32.yml
|
|
85
|
+
- data/parts/74hc595.yml
|
|
86
|
+
- data/parts/active_buzzer.yml
|
|
87
|
+
- data/parts/ams1117_3v3.yml
|
|
88
|
+
- data/parts/arduino_nano.yml
|
|
28
89
|
- data/parts/arduino_uno.yml
|
|
90
|
+
- data/parts/atmega328p.yml
|
|
91
|
+
- data/parts/attiny85.yml
|
|
92
|
+
- data/parts/battery_box.yml
|
|
29
93
|
- data/parts/bc547.yml
|
|
30
94
|
- data/parts/bc557.yml
|
|
31
95
|
- data/parts/capacitor.yml
|
|
96
|
+
- data/parts/cd4017.yml
|
|
97
|
+
- data/parts/ck_bd04.yml
|
|
98
|
+
- data/parts/crystal.yml
|
|
99
|
+
- data/parts/dc_jack_2wire.yml
|
|
32
100
|
- data/parts/diode.yml
|
|
33
101
|
- data/parts/electrolytic.yml
|
|
102
|
+
- data/parts/esp32_devkitc_v4_wroom32e.yml
|
|
103
|
+
- data/parts/irlz44n.yml
|
|
104
|
+
- data/parts/l293d.yml
|
|
34
105
|
- data/parts/led.yml
|
|
106
|
+
- data/parts/lm358.yml
|
|
107
|
+
- data/parts/lm393.yml
|
|
35
108
|
- data/parts/ne555.yml
|
|
109
|
+
- data/parts/ntc_thermistor.yml
|
|
110
|
+
- data/parts/photoresistor.yml
|
|
111
|
+
- data/parts/pico.yml
|
|
36
112
|
- data/parts/pot.yml
|
|
37
113
|
- data/parts/resistor.yml
|
|
114
|
+
- data/parts/sc56_11ewa.yml
|
|
115
|
+
- data/parts/seeed_xiao_samd21.yml
|
|
116
|
+
- data/parts/shillehtek_mb102_4pin.yml
|
|
117
|
+
- data/parts/slide_switch_spst.yml
|
|
118
|
+
- data/parts/sparkfun_pro_micro_5v.yml
|
|
38
119
|
- data/parts/tact_switch_6mm.yml
|
|
39
120
|
- data/parts/transistor.yml
|
|
40
|
-
-
|
|
121
|
+
- data/parts/ua7805.yml
|
|
122
|
+
- data/parts/uln2003a.yml
|
|
123
|
+
- data/parts/wp154a4sureqbfzgc.yml
|
|
124
|
+
- docs/CLI.md
|
|
125
|
+
- docs/COMPATIBILITY.md
|
|
126
|
+
- docs/DECLARATIVE.md
|
|
127
|
+
- docs/IR.md
|
|
128
|
+
- docs/JUMPER_KIT.md
|
|
129
|
+
- docs/LOCK.md
|
|
130
|
+
- docs/LSP.md
|
|
131
|
+
- docs/MB102_POWER.md
|
|
132
|
+
- docs/MCP.md
|
|
133
|
+
- docs/RAKE.md
|
|
41
134
|
- docs/dsl.md
|
|
42
135
|
- exe/breadkit
|
|
136
|
+
- exe/breadkit-lsp
|
|
137
|
+
- exe/breadkit-mcp
|
|
43
138
|
- lib/breadkit.rb
|
|
44
139
|
- lib/breadkit/analysis.rb
|
|
45
140
|
- lib/breadkit/board.rb
|
|
46
141
|
- lib/breadkit/cli.rb
|
|
142
|
+
- lib/breadkit/color.rb
|
|
143
|
+
- lib/breadkit/dc_analysis.rb
|
|
47
144
|
- lib/breadkit/dsl.rb
|
|
145
|
+
- lib/breadkit/exporters.rb
|
|
146
|
+
- lib/breadkit/formatter.rb
|
|
147
|
+
- lib/breadkit/fritzing_export.rb
|
|
48
148
|
- lib/breadkit/hole_id.rb
|
|
49
149
|
- lib/breadkit/ir.rb
|
|
150
|
+
- lib/breadkit/jumper_kit.rb
|
|
151
|
+
- lib/breadkit/lsp_server.rb
|
|
152
|
+
- lib/breadkit/mcp_server.rb
|
|
50
153
|
- lib/breadkit/model.rb
|
|
51
154
|
- lib/breadkit/part_library.rb
|
|
155
|
+
- lib/breadkit/part_lock.rb
|
|
156
|
+
- lib/breadkit/patterns.rb
|
|
157
|
+
- lib/breadkit/rake_task.rb
|
|
52
158
|
- lib/breadkit/resolver.rb
|
|
159
|
+
- lib/breadkit/structured_input.rb
|
|
160
|
+
- lib/breadkit/templates/555.bk.rb
|
|
161
|
+
- lib/breadkit/templates/arduino.bk.rb
|
|
162
|
+
- lib/breadkit/templates/led.bk.rb
|
|
53
163
|
- lib/breadkit/value.rb
|
|
54
164
|
- lib/breadkit/version.rb
|
|
165
|
+
- lib/breadkit/wire_suggestions.rb
|
|
55
166
|
- package-lock.json
|
|
56
167
|
- package.json
|
|
168
|
+
- schema/board-v1.json
|
|
57
169
|
- schema/ir-v1.json
|
|
170
|
+
- schema/ir-v2.json
|
|
58
171
|
- schema/part-v1.json
|
|
59
172
|
- sig/breadkit.rbs
|
|
60
|
-
- site/assets/01_led_button.svg
|
|
61
|
-
- site/assets/03_arduino_blink.svg
|
|
62
|
-
- site/favicon.svg
|
|
63
|
-
- site/guide/components/index.html
|
|
64
|
-
- site/guide/dsl/index.html
|
|
65
|
-
- site/guide/index.html
|
|
66
|
-
- site/index.html
|
|
67
|
-
- site/styles.css
|
|
68
173
|
homepage: https://github.com/breadkit/breadkit
|
|
69
174
|
licenses:
|
|
70
175
|
- MIT
|
|
@@ -88,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
88
193
|
- !ruby/object:Gem::Version
|
|
89
194
|
version: '0'
|
|
90
195
|
requirements: []
|
|
91
|
-
rubygems_version: 4.0.
|
|
196
|
+
rubygems_version: 4.0.20
|
|
92
197
|
specification_version: 4
|
|
93
|
-
summary: Describe and analyze breadboard circuits
|
|
198
|
+
summary: Describe and analyze breadboard circuits in Ruby, YAML, or TOML.
|
|
94
199
|
test_files: []
|