summaryrefslogtreecommitdiff
path: root/library.rb
diff options
context:
space:
mode:
Diffstat (limited to 'library.rb')
-rw-r--r--library.rb43
1 files changed, 16 insertions, 27 deletions
diff --git a/library.rb b/library.rb
index 0ba7cbc..1963b6e 100644
--- a/library.rb
+++ b/library.rb
@@ -24,13 +24,23 @@ end
24 24
25$ic = "TSSOP" 25$ic = "TSSOP"
26 26
27IC = Struct.new(:value, :pincount, :subparts, :automatic)
28
29$ic_definitions = {}
30$ic_available_parts = {}
31
32def define_ic(name, value, pincount, *subparts, &automatic) 27def define_ic(name, value, pincount, *subparts, &automatic)
33 $ic_definitions[name] = IC.new(value, pincount, subparts, automatic) 28 parts = []
29 proc do
30 if parts.size < 1
31 ic = comp("U", "#{$ic}-#{pincount}", name, value)
32 automatic.call(ic)
33 subs = subparts.map { | sub | sub.map { | pin | ic[pin] } }
34 subs.each do | sub |
35 if sub.size == 2
36 parts << pair(*sub)
37 else
38 parts << sub
39 end
40 end
41 end
42 parts.shift
43 end
34end 44end
35 45
36def stock_ic(name, value, &automatic) 46def stock_ic(name, value, &automatic)
@@ -40,27 +50,6 @@ def stock_ic(name, value, &automatic)
40 end 50 end
41end 51end
42 52
43def ic(name)
44 parts = $ic_available_parts.fetch(name, [])
45 if parts.size < 1
46 raise "IC #{name} not defined!" unless $ic_definitions.member?(name)
47 info = $ic_definitions[name]
48 ic = comp("U", "#{$ic}-#{info.pincount}", name, info.value)
49 info.automatic.call(ic)
50 subs = info.subparts.map { | sub | sub.map { | pin | ic[pin] } }
51 subs.each do | sub |
52 if sub.size == 2
53 parts << pair(*sub)
54 else
55 parts << sub
56 end
57 end
58 end
59 part = parts.shift
60 $ic_available_parts[name] = parts
61 return part
62end
63
64def probe(attenuation=20, impedance=50) 53def probe(attenuation=20, impedance=50)
65 jack = comp("J", "SMB", "SMB jack", "#{attenuation}x #{impedance}Ω probe") 54 jack = comp("J", "SMB", "SMB jack", "#{attenuation}x #{impedance}Ω probe")
66 jack[2] - jack[3] - jack[4] - jack[5] 55 jack[2] - jack[3] - jack[4] - jack[5]