1
0
mirror of git://projects.qi-hardware.com/xue.git synced 2024-11-07 17:38:27 +02:00
xue/emqbit-utilities/kicad/xil2kc.py
2010-07-24 06:58:53 -05:00

114 lines
2.8 KiB
Python
Executable File

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Copyright (C) 2010 Andres Calderon, andres.calderon@emqbit.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
import re
import sys
import getopt
from kccomp import *
def usage(appname):
print "usage : " + appname + " --pkg-file=inputfile.pkg --output-file=output.lib"
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], 'p:o:', ['pkg-file=', 'output-file='])
except getopt.GetoptError:
usage(sys.argv[0])
sys.exit(2)
inputfile=None
outputfile=None
for o, a in opts:
if o in ("-p", "--pkg-file"):
inputfile = a
elif o in ("-o", "--output-file"):
outputfile = a
if inputfile==None:
usage(sys.argv[0])
sys.exit(2)
part = inputfile.split('.')[0]
if outputfile==None:
outputfile = part+'.lib'
f = open(inputfile,'r')
pl = re.compile('^(pin|pkgpin)')
pins = []
for line in f.read().split('\n'):
if pl.search(line):
tags = re.split('\s+',line)
# pin or function pin vref vcco
# pkgpin name name bank bank
pins.append((tags[0],tags[5], tags[2],tags[3],tags[4]))
f.close()
m = {}
for i in xrange(len(pins)):
if m.has_key(pins[i][4]):
m[pins[i][4]].append(i)
else:
m[pins[i][4]] = []
xl = KcLibrary (outputfile)
comp = KcComponent(part);
xl.add_part(comp)
subpart=1
for id_bank in m:
un = KcUnit(subpart)
comp.add_unit(un)
subpart=subpart+1
signals = []
for signal in m[id_bank]:
if re.search("VCC",pins[signal][1]):
un.top_pins.append(KcPin(pins[signal][1],pins[signal][2]))
else:
if re.search("GND",pins[signal][1]):
un.bot_pins.append(KcPin(pins[signal][1],pins[signal][2]))
else:
signals.append(KcPin(pins[signal][1],pins[signal][2]))
#signals=sorted(signals, key=lambda KcPin: KcPin.name)
#for signal in signals:
#if(signal.name=="NC"):
#signal.pin_type = 'N'
sp=len(signals)/2
for signal in signals[0:sp]:
un.left_pins.append(signal)
for signal in signals[sp:]:
un.right_pins.append(signal)
xl.write()
#end-main
if __name__ == "__main__":
main()