mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-15 06:41:53 +02:00
m1r4/dsv/: M1rc3 BOM to BOOKSHELF conversion (may be incomplete)
This commit is contained in:
parent
df09557537
commit
b791fd712e
25
m1r4/dsv/Makefile
Normal file
25
m1r4/dsv/Makefile
Normal file
@ -0,0 +1,25 @@
|
||||
#
|
||||
# Obtaining the BOM:
|
||||
#
|
||||
# - wget http://downloads.qi-hardware.com/hardware/milkymist_one/bom/rc3/milkymist_one_bom_rc3.ods
|
||||
# - run ooffice or equivalent to save as CVS
|
||||
# - edit to remove embedded newline
|
||||
#
|
||||
|
||||
BOM = milkymist_one_bom_rc3.csv
|
||||
|
||||
.PHONY: all dsv clean spotless
|
||||
|
||||
all: dsv
|
||||
|
||||
dsv: BOOKSHELF
|
||||
../../../eda-tools/dsv/dsv setup BOOKSHELF
|
||||
|
||||
BOOKSHELF: $(BOM) bomshelf SUPPLEMENT
|
||||
./bomshelf $< >$@ || { rm -f $@; exit 1; }
|
||||
|
||||
clean:
|
||||
rm -f BOOKSHELF
|
||||
|
||||
spotless:
|
||||
rm -rf .dsv
|
18
m1r4/dsv/SUPPLEMENT
Normal file
18
m1r4/dsv/SUPPLEMENT
Normal file
@ -0,0 +1,18 @@
|
||||
#
|
||||
# Tags:
|
||||
#
|
||||
# C component reference
|
||||
# P manufacturer part number (can be prefix or substring)
|
||||
# A alias name (optional)
|
||||
# D data sheet URL (optional, overrides)
|
||||
#
|
||||
# Exactly one of C and P must be present.
|
||||
#
|
||||
|
||||
# Part numbering scheme seems to have changed.
|
||||
P: CC1206X7R9K472
|
||||
D: http://www.chipcera.com.cn/download/%E9%AB%98%E5%8E%8B%E5%93%811.pdf
|
||||
|
||||
# On Debian/Ubuntu, may need xpdf-japanese for character mapping.
|
||||
P: FBMJ3216HM600
|
||||
D: http://www.yuden.co.jp/ut/product/category/emisuppression/FBMJ3216HM600-T.pdf
|
95
m1r4/dsv/bomshelf
Executable file
95
m1r4/dsv/bomshelf
Executable file
@ -0,0 +1,95 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Source:
|
||||
# http://downloads.qi-hardware.com/hardware/milkymist_one/bom/rc3/milkymist_one_bom_rc3.ods
|
||||
# - save as CVS
|
||||
# - edit to remove embedded newlines
|
||||
#
|
||||
|
||||
sub csv
|
||||
{
|
||||
my $s = $_[0];
|
||||
my @a = ();
|
||||
|
||||
while (1) {
|
||||
if ($s =~ /^"/) {
|
||||
die unless $s =~ /^"([^"]*)"(,\s*)?/;
|
||||
push(@a, $1);
|
||||
$s = $';
|
||||
return @a unless length $2;
|
||||
|
||||
} elsif ($s =~ /,\s*/) {
|
||||
push(@a, $`);
|
||||
$s = $';
|
||||
} else {
|
||||
push(@a, $s);
|
||||
return @a;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
while (<>) {
|
||||
chop;
|
||||
@f = &csv($_);
|
||||
next unless $f[0] =~ /^[0-9]+$/;
|
||||
die "duplicate part $f[3]" if defined $cr{$f[3]};
|
||||
$f[1] =~ s/\(DNP\)//g;
|
||||
$cr{$f[3]} = $f[1];
|
||||
$url{$f[3]} = $f[4];
|
||||
$dsc{$f[3]} = $f[6];
|
||||
for (&csv($f[1])) {
|
||||
warn "\"$_\" used for $r{$_} and $f[3]" if defined $r{$_};
|
||||
$r{$_} = $f[3];
|
||||
}
|
||||
}
|
||||
|
||||
open(F, "SUPPLEMENT") || die "open SUPPLEMENT: $!";
|
||||
while (<F>) {
|
||||
chop;
|
||||
next if /^\s*#/;
|
||||
next if /^\s*$/;
|
||||
if (/^[Cc]:\s*/) {
|
||||
die "unknown component reference $'" unless defined $r{$'};
|
||||
$p = $r{$'};
|
||||
next;
|
||||
}
|
||||
if (/^[Pp]:\s*/) {
|
||||
$p = $';
|
||||
next if defined $cr{$p};
|
||||
@a = grep { $_ =~ /^$p/ } keys %cr;
|
||||
die "key $p* is ambiguous" if scalar @a > 1;
|
||||
if (!@a) {
|
||||
@a = grep { $_ =~ /$p/ } keys %cr;
|
||||
die "key *$p* is ambiguous" if scalar @a > 1;
|
||||
die "key $p matches nothing" unless @a;
|
||||
}
|
||||
$p = $a[0];
|
||||
next;
|
||||
}
|
||||
if (/^[Aa]:\s*/) {
|
||||
$a{$p} .= "," if defined $a{$p};
|
||||
$a{$p} .= $';
|
||||
next;
|
||||
}
|
||||
if (/^[Dd]:\s*/) {
|
||||
$url{$p} = $';
|
||||
next;
|
||||
}
|
||||
die "don't recognize \"$_\"";
|
||||
}
|
||||
|
||||
for (sort keys %cr) {
|
||||
next if $url{$_} eq "";
|
||||
print "# $dsc{$_}\n" unless $dsc{$_} eq "";
|
||||
print "N: $_\n";
|
||||
for $a (&csv($cr{$_})) {
|
||||
print "A: $a\n";
|
||||
}
|
||||
if (defined $a{$_}) {
|
||||
for $a (&csv($a{$_})) {
|
||||
print "A: $a\n";
|
||||
}
|
||||
}
|
||||
print "D: $url{$_}\n\n";
|
||||
}
|
Loading…
Reference in New Issue
Block a user