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 ++++++++++++++++--------------------------- test.rb | 8 ++++---- 2 files changed, 20 insertions(+), 31 deletions(-) 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] diff --git a/test.rb b/test.rb index d6cfbe2..e7f8b49 100755 --- a/test.rb +++ b/test.rb @@ -7,18 +7,18 @@ nl = Lace::Netlist.new do vcc = net("vcc") gnd = net("gnd") - stock_ic("inverter", "CD74HC04") do | ic | + define_singleton_method(:inverter, stock_ic("inverter", "CD74HC04") do | ic | vcc - ic[14] - c("100nF") - ic[7] - gnd - end + end) vcc - led(220) - gnd vcc - btn - led(220, "green") - gnd - vcc - btn("orange") - ic("inverter") - led(220, "white") - gnd + vcc - btn("orange") - inverter - led(220, "white") - gnd x = vcc - btn("white") x - net("x") - led(220, "amber") - gnd - x - ic("inverter") - net("xbar") - led(220, "blue") - gnd + x - inverter - net("xbar") - led(220, "blue") - gnd x - probe - gnd end -- cgit v1.2.3