def generate_advanced(pinout_file_name, symbol_file_name="", footprint_file_name=""): """ generate one or many parts from pinout file. Read more data from file. pinout_file_name: name of file with pinouts symbol_file_name: name of file with symbols footprint_file_name: name of file with footprints """ ret=[] if symbol_file_name=="": symbol_file_name = pinout_file_name if footprint_file_name=="": footprint_file_name = pinout_file_name parts=icGenerator.load_parts_advanced(pinout_file_name) for part_descr in parts: if part_descr: if part_descr[0]: new_part=part(part_descr[0], defaults.icRefDes) symbols = icGenerator.load_symbol_advanced(symbol_file_name, part_descr[1]) new_part.symbols.extend(symbols) footprints = icGenerator.load_footprints_advanced(footprint_file_name) #, part_descr[2] new_part.footprints.extend(footprints) ret.append(new_part) return ret
def generate(fileName, pinNames=[], footprints=[], namePosfix="", symbolType="dual",size=0): """ generate one or many parts from pinout file fileName: name of file with pinouts pinNames: pin configuration: [[pins left], [pins right],...[pins left], [pins right]] like: [["1","2","3"],["6","5","4"]] or [["1","2"],["6","5"],["4","7"],["8","9"]] footprints: list of footprint objects namePostfix: postfix to IC name read from pinout """ pinout=icGenerator.loadPinout(fileName) ret=[] if not pinNames: #auto generate if symbolType=="quad": nPins=len(pinout[0]["pins"]) nSide=int((nPins)/4) #if additional pin above N*4 (thermal pad) plus=((nPins%4)>0)*1 pinNames=np.array([[None]*(nSide+plus)]*4) for side in range(4): for i in range(nSide): pinNames[side,i]=pinout[0]["pins"][i+side*nSide] if plus: pinNames[3,nSide]=pinout[0]["pins"][nPins-1] else: raise ValueError("Auto pinout for %s symbol type not implemented yet!" % symbolType) #for each pinout variant for v in pinout: # generate symbol(s) symbols=[] pins=[] for pinNameCol in pinNames: pinCol = [] for p in pinNameCol: if p: p=str(p) pinCol.append([v["pinNames"][p], p, v["pinTypes"][p]]) else: pinCol.append(None) pins.append(pinCol) if symbolType=="dual": #for 1..2 pin columns - one symbol, for 2..3 - 2 etc. nSymbols = int((len(pinNames)+1)/2) for i in range(nSymbols): if nSymbols>1: symPostfix = "_%d" % i else: symPostfix = "" symbols.append(symbolIC(v["name"]+symPostfix+namePosfix, pinsLeft=pins[i*2], pinsRight=pins[i*2+1],\ width=size, refDes=defaults.icRefDes,showPinNames=True, showPinNumbers=True)) elif symbolType=="quad": symbols.append(symbolICquad(v["name"]+namePosfix,\ pins=pins,size=size)) else: raise ValueError("invalid symbolType: %s!" % symbolType) for p in v["partNames"]: _part = part(p+namePosfix, defaults.icRefDes) _part.symbols.extend(symbols) _part.footprints.extend(footprints) ret.append(_part) return ret