예제 #1
0
 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
예제 #2
0
 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