diff options
Diffstat (limited to '')
| -rw-r--r-- | library.rb | 43 |
1 files changed, 16 insertions, 27 deletions
| @@ -24,13 +24,23 @@ end | |||
| 24 | 24 | ||
| 25 | $ic = "TSSOP" | 25 | $ic = "TSSOP" |
| 26 | 26 | ||
| 27 | IC = Struct.new(:value, :pincount, :subparts, :automatic) | ||
| 28 | |||
| 29 | $ic_definitions = {} | ||
| 30 | $ic_available_parts = {} | ||
| 31 | |||
| 32 | def define_ic(name, value, pincount, *subparts, &automatic) | 27 | def 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 | ||
| 34 | end | 44 | end |
| 35 | 45 | ||
| 36 | def stock_ic(name, value, &automatic) | 46 | def stock_ic(name, value, &automatic) |
| @@ -40,27 +50,6 @@ def stock_ic(name, value, &automatic) | |||
| 40 | end | 50 | end |
| 41 | end | 51 | end |
| 42 | 52 | ||
| 43 | def 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 | ||
| 62 | end | ||
| 63 | |||
| 64 | def probe(attenuation=20, impedance=50) | 53 | def 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] |
