From 08cac544980a9de9bcb3b13f2e6f0846097caa75 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sat, 4 Jun 2022 00:10:32 -0700 Subject: Make IC definitions more self-contained --- library.rb | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) (limited to 'library.rb') diff --git a/library.rb b/library.rb index 0ba7cbc..1963b6e 100644 --- a/library.rb +++ b/library.rb @@ -24,13 +24,23 @@ end $ic = "TSSOP" -IC = Struct.new(:value, :pincount, :subparts, :automatic) - -$ic_definitions = {} -$ic_available_parts = {} - def define_ic(name, value, pincount, *subparts, &automatic) - $ic_definitions[name] = IC.new(value, pincount, subparts, automatic) + parts = [] + proc do + if parts.size < 1 + ic = comp("U", "#{$ic}-#{pincount}", name, value) + automatic.call(ic) + subs = subparts.map { | sub | sub.map { | pin | ic[pin] } } + subs.each do | sub | + if sub.size == 2 + parts << pair(*sub) + else + parts << sub + end + end + end + parts.shift + end end def stock_ic(name, value, &automatic) @@ -40,27 +50,6 @@ def stock_ic(name, value, &automatic) end end -def ic(name) - parts = $ic_available_parts.fetch(name, []) - if parts.size < 1 - raise "IC #{name} not defined!" unless $ic_definitions.member?(name) - info = $ic_definitions[name] - ic = comp("U", "#{$ic}-#{info.pincount}", name, info.value) - info.automatic.call(ic) - subs = info.subparts.map { | sub | sub.map { | pin | ic[pin] } } - subs.each do | sub | - if sub.size == 2 - parts << pair(*sub) - else - parts << sub - end - end - end - part = parts.shift - $ic_available_parts[name] = parts - return part -end - def probe(attenuation=20, impedance=50) jack = comp("J", "SMB", "SMB jack", "#{attenuation}x #{impedance}Ω probe") jack[2] - jack[3] - jack[4] - jack[5] -- cgit v1.2.3