kut 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.rdoc +6 -0
- data/README.rdoc +20 -0
- data/Rakefile.rb +63 -0
- data/bin/kut +27 -0
- data/doc-src/PINS.rdoc +18 -0
- data/examples/example_helper.rb +1 -0
- data/examples/net_list/print_cmp_list.rb +101 -0
- data/examples/pins/A3P1000_PQFP208.pins +216 -0
- data/examples/pins/AT32UC3A0512.pins +151 -0
- data/examples/pins/EMP7464S_TQFP100.pins +101 -0
- data/examples/pins/ata40conn.pins +44 -0
- data/examples/pins/full_sata.pins +25 -0
- data/examples/pins/jm20330.pins +85 -0
- data/lib/kut.rb +2 -0
- data/lib/kut/application.rb +56 -0
- data/lib/kut/commands/gost/bom2el_list.rb +171 -0
- data/lib/kut/commands/help-cmd.rb +32 -0
- data/lib/kut/commands/lib-gen-cmd.rb +88 -0
- data/lib/kut/commands/net_list2bom.rb +81 -0
- data/lib/kut/eeschema/wire.rb +3 -0
- data/lib/kut/kut_module.rb +18 -0
- data/lib/kut/library/components.rb +167 -0
- data/lib/kut/library/generator.rb +25 -0
- data/lib/kut/library/generator/default.rb +123 -0
- data/lib/kut/library/generator/gost-con.rb +116 -0
- data/lib/kut/library/generator/simple.rb +123 -0
- data/lib/kut/library/pins_reader.rb +47 -0
- data/lib/kut/library/regexp.rb +18 -0
- data/lib/kut/misc/matrix.rb +2 -0
- data/lib/kut/misc/point.rb +25 -0
- data/lib/kut/misc/rectangle.rb +20 -0
- data/lib/kut/net_list/concept.rb +20 -0
- data/lib/kut/net_list/kicad.rb +40 -0
- data/lib/kut/net_list/pcad.rb +69 -0
- data/lib/kut/tests/Rakefile.rb +0 -0
- data/lib/kut/tests/rectangle.rb +23 -0
- data/test/library_cmp_pin_test.rb +16 -0
- data/test/library_pins_reader_test.rb +40 -0
- data/test/point_test.rb +17 -0
- metadata +100 -0
data/LICENSE.rdoc
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
= Kut: KiCAD utils & tools for generation, manipulation KiCAD files.
|
2
|
+
|
3
|
+
== Quick Start
|
4
|
+
|
5
|
+
=== Installation:
|
6
|
+
git clone git://github.com/lexaficus/kut.git
|
7
|
+
cd kut
|
8
|
+
ruby ./bin/kut
|
9
|
+
|
10
|
+
=== How to generate library components:
|
11
|
+
|
12
|
+
ruby bin/kut gen-lib -G simple -i examples/pins/jm20330.pins -o simple.lib --name JM_20330
|
13
|
+
|
14
|
+
link:images/lib-gen-simple.png
|
15
|
+
|
16
|
+
ruby bin/kut gen-lib -i examples/pins/jm20330.pins -o default.lib --name JM20330
|
17
|
+
|
18
|
+
link:images/lib-gen-default.png
|
19
|
+
|
20
|
+
ruby bin/kut gen-lib -i examples/pins/ata40conn.pins -o gost.lib --name ATA --ref X
|
data/Rakefile.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require "rake/rdoctask"
|
5
|
+
require "rake/gempackagetask"
|
6
|
+
|
7
|
+
KUT_VERSION = "0.1.0"
|
8
|
+
|
9
|
+
task :default => [:test]
|
10
|
+
|
11
|
+
desc "Run all tests"
|
12
|
+
Rake::TestTask.new do |test|
|
13
|
+
test.libs << "lib"
|
14
|
+
test.test_files = Dir[ "test/*_test.rb" ]
|
15
|
+
test.verbose = true
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "genrates documentation"
|
19
|
+
Rake::RDocTask.new do |rdoc|
|
20
|
+
rdoc.rdoc_files.include( "README.rdoc",
|
21
|
+
"lib/",
|
22
|
+
Dir.glob("{doc-src,.}/*.rdoc"))
|
23
|
+
rdoc.main = "README.rdoc"
|
24
|
+
rdoc.rdoc_dir = "doc/html"
|
25
|
+
rdoc.title = "Kut Documentation"
|
26
|
+
rdoc.options = ['--charset=utf-8 --copy-local-images']
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "run all examples"
|
30
|
+
task :examples do
|
31
|
+
examples = Dir["examples/**/*.rb"]
|
32
|
+
t = Time.now
|
33
|
+
puts "Running Examples"
|
34
|
+
examples.each { |file| `ruby -Ilib #{file}` }
|
35
|
+
puts "Ran in #{Time.now - t} s"
|
36
|
+
end
|
37
|
+
|
38
|
+
spec = Gem::Specification.new do |s|
|
39
|
+
s.name = 'kut'
|
40
|
+
s.version = KUT_VERSION
|
41
|
+
s.date = '2009-09-24'
|
42
|
+
|
43
|
+
s.summary = 'KiCAD utils & tools for generation, manipulation KiCAD files.'
|
44
|
+
s.email = 'lexaficus@list.ru'
|
45
|
+
s.authors = ['Alexey Pavlyukov']
|
46
|
+
|
47
|
+
s.bindir = "bin" # Use these for applications.
|
48
|
+
s.executables = ["kut"]
|
49
|
+
s.default_executable = "kut"
|
50
|
+
|
51
|
+
s.has_rdoc = false
|
52
|
+
s.rdoc_options = ["--main", "README.rdoc", "--title", "GostFrames Documentation"]
|
53
|
+
#s.extra_rdoc_files = ["README.rdoc", "LICENSE.rdoc"]
|
54
|
+
s.rdoc_options = ["--charset=utf-8"]
|
55
|
+
s.require_paths = ["lib"]
|
56
|
+
s.files = Dir.glob("{examples,lib,data}/**/**/*") + ["Rakefile.rb"] + Dir.glob("{doc-src,.}/*.rdoc")
|
57
|
+
s.test_files = Dir[ "test/*_test.rb" ]
|
58
|
+
end
|
59
|
+
|
60
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
61
|
+
pkg.need_zip = true
|
62
|
+
pkg.need_tar = true
|
63
|
+
end
|
data/bin/kut
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'kut'
|
5
|
+
rescue LoadError
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
require 'kut'
|
9
|
+
rescue LoadError
|
10
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
11
|
+
require 'kut'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'kut/commands/lib-gen-cmd'
|
16
|
+
require 'kut/commands/help-cmd'
|
17
|
+
require 'kut/commands/net_list2bom'
|
18
|
+
require 'kut/commands/gost/bom2el_list'
|
19
|
+
|
20
|
+
Kut.application.commands = [
|
21
|
+
Kut::HelpCommand.new,
|
22
|
+
Kut::LibraryGeneratorCommand.new,
|
23
|
+
Kut::NetList2Bom.new,
|
24
|
+
Kut::Bom2EL.new
|
25
|
+
]
|
26
|
+
|
27
|
+
Kut.application.run
|
data/doc-src/PINS.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= pins file format
|
2
|
+
|
3
|
+
All strings in file starting with '#' is command for library generators.
|
4
|
+
All another strings in file must be contains: pin number, space, pin name.
|
5
|
+
|
6
|
+
pins file example:
|
7
|
+
#NAMES POWER_5V, POWER_3V
|
8
|
+
1 VCC
|
9
|
+
2 GND
|
10
|
+
|
11
|
+
Commands:
|
12
|
+
#NAMES - set component names
|
13
|
+
#REF - set component reference
|
14
|
+
#TOP - all pins enumerated after this command will be placed from the top of the component
|
15
|
+
#BOTTOM - all pins enumerated after this command will be placed under the bottom of the component
|
16
|
+
#LEFT - all pins enumerated after this command will be placed at the left of the component
|
17
|
+
#RIGHT - all pins enumerated after this command will be placed at the right of the component
|
18
|
+
#NO-PIN - insert space instead of the pin
|
@@ -0,0 +1 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../example_helper.rb"
|
2
|
+
require 'kut/net_list/kicad'
|
3
|
+
require 'kut/net_list/pcad'
|
4
|
+
|
5
|
+
#net_list = Kut::NetList::KiCadNetList.new($stdin)
|
6
|
+
net_list = Kut::NetList::PCadNetList.new($stdin)
|
7
|
+
|
8
|
+
cmp_list = net_list.by_components()
|
9
|
+
|
10
|
+
cmp_by_value = {}
|
11
|
+
|
12
|
+
cmp_list.each { |cmp|
|
13
|
+
cmp_by_value[cmp.value] << cmp if cmp_by_value[cmp.value]
|
14
|
+
cmp_by_value[cmp.value] = [cmp] unless cmp_by_value[cmp.value]
|
15
|
+
#puts "#{cmp.reference} #{cmp.value}"
|
16
|
+
}
|
17
|
+
|
18
|
+
cmp_list = {}
|
19
|
+
|
20
|
+
def join_ref(ref_list)
|
21
|
+
return '' unless ref_list
|
22
|
+
|
23
|
+
ref_list.sort! { |a, b|
|
24
|
+
a =~ /(\D+)(\d+)/
|
25
|
+
a_n = $1
|
26
|
+
a_val = $2.to_i
|
27
|
+
b =~ /(\D+)(\d+)/
|
28
|
+
b_n = $1
|
29
|
+
b_val = $2.to_i
|
30
|
+
|
31
|
+
res = a_n <=> b_n
|
32
|
+
res = a_val <=> b_val if res == 0
|
33
|
+
}
|
34
|
+
|
35
|
+
ref_list.first =~ /(\D+)(\d+)/
|
36
|
+
prev_pref = $1
|
37
|
+
prev_num = $2.to_i
|
38
|
+
prev_ref = ref_list.first
|
39
|
+
|
40
|
+
result = ref_list.first
|
41
|
+
ref_list.delete_at(0)
|
42
|
+
counter = 0
|
43
|
+
|
44
|
+
# while ! ref_list.empty?
|
45
|
+
# ref = ref_list.first
|
46
|
+
# ref_list.delete_at(0)
|
47
|
+
# end
|
48
|
+
|
49
|
+
flag = false
|
50
|
+
|
51
|
+
ref_list.each { |ref|
|
52
|
+
ref =~ /(\D+)(\d+)/
|
53
|
+
pref = $1
|
54
|
+
num = $2.to_i
|
55
|
+
|
56
|
+
flag = (pref == prev_pref) && (num == (prev_num + 1))
|
57
|
+
|
58
|
+
if !flag then
|
59
|
+
if counter != 0 then
|
60
|
+
result += counter > 1 ? '..' : ','
|
61
|
+
result += prev_ref + ',' + ref
|
62
|
+
else
|
63
|
+
result += ',' + ref
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#result += '..' + prev_ref + ',' + ref unless flag && counter != 0
|
68
|
+
#result += ',' + ref unless flag
|
69
|
+
|
70
|
+
counter += 1 if flag
|
71
|
+
counter = 0 unless flag
|
72
|
+
|
73
|
+
prev_pref = pref
|
74
|
+
prev_num = num
|
75
|
+
prev_ref = ref
|
76
|
+
}
|
77
|
+
|
78
|
+
if flag && counter != 0 then
|
79
|
+
result += counter > 1 ? '..' : ','
|
80
|
+
result += prev_ref
|
81
|
+
end
|
82
|
+
|
83
|
+
result
|
84
|
+
end
|
85
|
+
|
86
|
+
result = []
|
87
|
+
|
88
|
+
cmp_by_value.each { |key, cmps|
|
89
|
+
refs = []
|
90
|
+
count = 0
|
91
|
+
cmps.each { |cmp|
|
92
|
+
refs << cmp.reference
|
93
|
+
count += 1
|
94
|
+
}
|
95
|
+
refs = join_ref refs
|
96
|
+
result << ";#{refs};#{key};#{count};"
|
97
|
+
}
|
98
|
+
|
99
|
+
result.sort!
|
100
|
+
|
101
|
+
result.each{ |v| puts v }
|
@@ -0,0 +1,216 @@
|
|
1
|
+
#LEFT
|
2
|
+
1 GND
|
3
|
+
2 GAA2/IO225PDB3
|
4
|
+
3 IO225NDB3
|
5
|
+
4 GAB2/IO224PDB3
|
6
|
+
5 IO224NDB3
|
7
|
+
6 GAC2/IO223PDB3
|
8
|
+
7 IO223NDB3
|
9
|
+
8 IO222PDB3
|
10
|
+
9 IO222NDB3
|
11
|
+
10 IO220PDB3
|
12
|
+
11 IO220NDB3
|
13
|
+
12 IO218PDB3
|
14
|
+
13 IO218NDB3
|
15
|
+
14 IO216PDB3
|
16
|
+
15 IO216NDB3
|
17
|
+
16 VCC
|
18
|
+
17 GND
|
19
|
+
18 VCCIB3
|
20
|
+
19 IO212PDB3
|
21
|
+
20 IO212NDB3
|
22
|
+
21 GFC1/IO209PDB3
|
23
|
+
22 GFC0/IO209NDB3
|
24
|
+
23 GFB1/IO208PDB3
|
25
|
+
24 GFB0/IO208NDB3
|
26
|
+
25 VCOMPLF
|
27
|
+
26 GFA0/IO207NPB3
|
28
|
+
27 VCCPLF
|
29
|
+
28 GFA1/IO207PPB3
|
30
|
+
29 GND
|
31
|
+
30 GFA2/IO206PDB3
|
32
|
+
31 IO206NDB3
|
33
|
+
32 GFB2/IO205PDB3
|
34
|
+
33 IO205NDB3
|
35
|
+
34 GFC2/IO204PDB3
|
36
|
+
35 IO204NDB3
|
37
|
+
36 VCC
|
38
|
+
37 IO199PDB3
|
39
|
+
38 IO199NDB3
|
40
|
+
39 IO197PSB3
|
41
|
+
40 VCCIB3
|
42
|
+
41 GND
|
43
|
+
42 IO191PDB3
|
44
|
+
43 IO191NDB3
|
45
|
+
44 GEC1/IO190PDB3
|
46
|
+
45 GEC0/IO190NDB3
|
47
|
+
46 GEB1/IO189PDB3
|
48
|
+
47 GEB0/IO189NDB3
|
49
|
+
48 GEA1/IO188PDB3
|
50
|
+
49 GEA0/IO188NDB3
|
51
|
+
50 VMV3
|
52
|
+
51 GNDQ
|
53
|
+
|
54
|
+
#BOTTOM
|
55
|
+
52 GND
|
56
|
+
53 VMV2
|
57
|
+
54 GEA2/IO187RSB2
|
58
|
+
55 GEB2/IO186RSB2
|
59
|
+
56 GEC2/IO185RSB2
|
60
|
+
57 IO184RSB2
|
61
|
+
58 IO183RSB2
|
62
|
+
59 IO182RSB2
|
63
|
+
60 IO181RSB2
|
64
|
+
61 IO180RSB2
|
65
|
+
62 VCCIB2
|
66
|
+
63 IO178RSB2
|
67
|
+
64 IO176RSB2
|
68
|
+
65 GND
|
69
|
+
66 IO174RSB2
|
70
|
+
67 IO172RSB2
|
71
|
+
68 IO170RSB2
|
72
|
+
69 IO168RSB2
|
73
|
+
70 IO166RSB2
|
74
|
+
71 VCC
|
75
|
+
72 VCCIB2
|
76
|
+
73 IO162RSB2
|
77
|
+
74 IO160RSB2
|
78
|
+
75 IO158RSB2
|
79
|
+
76 IO156RSB2
|
80
|
+
77 IO154RSB2
|
81
|
+
78 IO152RSB2
|
82
|
+
79 IO150RSB2
|
83
|
+
80 IO148RSB2
|
84
|
+
81 GND
|
85
|
+
82 IO143RSB2
|
86
|
+
83 IO141RSB2
|
87
|
+
84 IO139RSB2
|
88
|
+
85 IO137RSB2
|
89
|
+
86 IO135RSB2TOP
|
90
|
+
87 IO133RSB2
|
91
|
+
88 VCC
|
92
|
+
89 VCCIB2
|
93
|
+
90 IO128RSB2
|
94
|
+
91 IO126RSB2
|
95
|
+
92 IO124RSB2
|
96
|
+
93 IO122RSB2
|
97
|
+
94 IO120RSB2
|
98
|
+
95 IO118RSB2
|
99
|
+
96 GDC2/IO116RSB2
|
100
|
+
97 GND
|
101
|
+
98 GDB2/IO115RSB2
|
102
|
+
99 GDA2/IO114RSB2
|
103
|
+
100 GNDQ
|
104
|
+
101 TCK
|
105
|
+
102 TDI
|
106
|
+
103 TMS
|
107
|
+
104 VMV2
|
108
|
+
|
109
|
+
#RIGHT
|
110
|
+
105 GND
|
111
|
+
106 VPUMP
|
112
|
+
107 GNDQ
|
113
|
+
108 TDO
|
114
|
+
109 TRST
|
115
|
+
110 VJTAG
|
116
|
+
111 GDA0/IO113NDB1
|
117
|
+
112 GDA1/IO113PDB1
|
118
|
+
113 GDB0/IO112NDB1
|
119
|
+
114 GDB1/IO112PDB1
|
120
|
+
115 GDC0/IO111NDB1
|
121
|
+
116 GDC1/IO111PDB1
|
122
|
+
117 IO109NDB1
|
123
|
+
118 IO109PDB1
|
124
|
+
119 IO106NDB1
|
125
|
+
120 IO106PDB1
|
126
|
+
121 IO104PSB1
|
127
|
+
122 GND
|
128
|
+
123 VCCIB1
|
129
|
+
124 IO99NDB1
|
130
|
+
125 IO99PDB1
|
131
|
+
126 NC
|
132
|
+
127 IO96NDB1
|
133
|
+
128 GCC2/IO96PDB1
|
134
|
+
129 GCB2/IO95PSB1
|
135
|
+
130 GND
|
136
|
+
131 GCA2/IO94PSB1
|
137
|
+
132 GCA1/IO93PDB1
|
138
|
+
133 GCA0/IO93NDB1
|
139
|
+
134 GCB0/IO92NDB1
|
140
|
+
135 GCB1/IO92PDB1
|
141
|
+
136 GCC0/IO91NDB1
|
142
|
+
137 GCC1/IO91PDB1
|
143
|
+
138 IO88NDB1
|
144
|
+
139 IO88PDB1
|
145
|
+
140 VCCIB1
|
146
|
+
141 GND
|
147
|
+
142 VCC
|
148
|
+
143 IO86PSB1
|
149
|
+
144 IO84NDB1
|
150
|
+
145 IO84PDB1
|
151
|
+
146 IO82NDB1
|
152
|
+
147 IO82PDB1
|
153
|
+
148 IO80NDB1
|
154
|
+
149 GBC2/IO80PDB1
|
155
|
+
150 IO79NDB1
|
156
|
+
151 GBB2/IO79PDB1
|
157
|
+
152 IO78NDB1
|
158
|
+
153 GBA2/IO78PDB1
|
159
|
+
154 VMV1
|
160
|
+
155 GNDQ
|
161
|
+
156 GND
|
162
|
+
|
163
|
+
#TOP
|
164
|
+
157 VMV0
|
165
|
+
158 GBA1/IO77RSB0
|
166
|
+
159 GBA0/IO76RSB0
|
167
|
+
160 GBB1/IO75RSB0
|
168
|
+
161 GBB0/IO74RSB0
|
169
|
+
162 GND
|
170
|
+
163 GBC1/IO73RSB0
|
171
|
+
164 GBC0/IO72RSB0
|
172
|
+
165 IO70RSB0
|
173
|
+
166 IO67RSB0
|
174
|
+
167 IO63RSB0
|
175
|
+
168 IO60RSB0
|
176
|
+
169 IO57RSB0
|
177
|
+
170 VCCIB0
|
178
|
+
171 VCC
|
179
|
+
172 IO54RSB0
|
180
|
+
173 IO51RSB0
|
181
|
+
174 IO48RSB0
|
182
|
+
175 IO45RSB0
|
183
|
+
176 IO42RSB0
|
184
|
+
177 IO40RSB0
|
185
|
+
178 GND
|
186
|
+
179 IO38RSB0
|
187
|
+
180 IO35RSB0
|
188
|
+
181 IO33RSB0
|
189
|
+
182 IO31RSB0
|
190
|
+
183 IO29RSB0
|
191
|
+
184 IO27RSB0
|
192
|
+
185 IO25RSB0
|
193
|
+
186 VCCIB0
|
194
|
+
187 VCC
|
195
|
+
188 IO22RSB0
|
196
|
+
189 IO20RSB0
|
197
|
+
190 IO18RSB0
|
198
|
+
191 IO16RSB0
|
199
|
+
192 IO15RSB0
|
200
|
+
193 IO14RSB0
|
201
|
+
194 IO13RSB0
|
202
|
+
195 GND
|
203
|
+
196 IO12RSB0
|
204
|
+
197 IO11RSB0
|
205
|
+
198 IO10RSB0
|
206
|
+
199 IO09RSB0
|
207
|
+
200 VCCIB0
|
208
|
+
201 GAC1/IO05RSB0
|
209
|
+
202 GAC0/IO04RSB0
|
210
|
+
203 GAB1/IO03RSB0
|
211
|
+
204 GAB0/IO02RSB0
|
212
|
+
205 GAA1/IO01RSB0
|
213
|
+
206 GAA0/IO00RSB0
|
214
|
+
207 GNDQ
|
215
|
+
208 VMV0
|
216
|
+
|