diff options
Diffstat (limited to 'src/converter/schematic_converters/lib/PythonLib/misc.py')
-rw-r--r-- | src/converter/schematic_converters/lib/PythonLib/misc.py | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/src/converter/schematic_converters/lib/PythonLib/misc.py b/src/converter/schematic_converters/lib/PythonLib/misc.py new file mode 100644 index 00000000..1d77ae80 --- /dev/null +++ b/src/converter/schematic_converters/lib/PythonLib/misc.py @@ -0,0 +1,232 @@ +#The MIT License (MIT) + +#PSpice to Oscad Schematic Converter +#This code is written by Suryavamshi Tenneti, FOSSEE, IIT Bombay +#The code is modified by Sumanto Kar and Gloria Nandihal, FOSSEE, IIT Bombay + + +from component_instance import * + + +def skipTo(input_stream, s): # Find the line containing the first occurence (after the current position) of string s in istream& in and read it and then return it + tmp = '1' + while tmp != '' and tmp.find(s) == -1: + tmp = input_stream.readline().strip() # cout<<tmp<<"**"<<endl; + + # print('SkipLine',tmp) + # print('In skipto',tmp.find(s)) + + if tmp == '': # cerr<<"skipTo error"<<endl; + return '__ERROR__' + + return tmp + + +def stripNumFromRef(ref): + i = len(ref) - 1 + while i >= 0 and ref[i] >= '0' and ref[i] <= '9': + i -= 1 + return ref[:i + 1] + + +def fixComp(c): + + # print('In fixComp c.type' ,c.type_) + + ref = c.ref + + # print('last 6') + + if ref == 'Q': # Transistor + for i in range(0, len(c.pins)): + if c.pins[i].n == 'e' or c.pins[i].n == 'E': + c.pins[i].n = '1' + if c.pins[i].n == 'b' or c.pins[i].n == 'B': + c.pins[i].n = '2' + if c.pins[i].n == 'c' or c.pins[i].n == 'C': + c.pins[i].n = '3' + + ref = 'Q' + c.ref = 'Q' + return + + # print('last 5') + + if ref == 'J': # Mos + for i in range(0, len(c.pins)): + if c.pins[i].n == 'g' or c.pins[i].n == 'G': + c.pins[i].n = 'G' + if c.pins[i].n == 's' or c.pins[i].n == 'S': + c.pins[i].n = 'S' + if c.pins[i].n == 'd' or c.pins[i].n == 'D': + c.pins[i].n = 'D' + ref = 'J' + c.ref = 'J' + return + + # print('last 5') + + if ref == 'M': # FET + for i in range(0, len(c.pins)): + if c.pins[i].n == 'g' or c.pins[i].n == 'G': + c.pins[i].n = 'G' + if c.pins[i].n == 's' or c.pins[i].n == 'S': + c.pins[i].n = 'S' + if c.pins[i].n == 'd' or c.pins[i].n == 'D': + c.pins[i].n = 'D' + ref = 'M' + c.ref = 'M' + return + + # print('last4') + + if ref == 'E': # Linear voltage controlled voltage sources + for i in range(0, len(c.pins)): + if c.pins[i].n == '1': + c.pins[i].n = '3' + continue + if c.pins[i].n == '2': + c.pins[i].n = '4' + continue + if c.pins[i].n == '3': + c.pins[i].n = '1' + continue + if c.pins[i].n == '4': + c.pins[i].n = '2' + continue + ref = 'E' + c.ref = 'E' + return + + # print('last3') #Linear current controlled current sources + + if ref == 'F': + for i in range(0, len(c.pins)): + if c.pins[i].n == '1': + c.pins[i].n = '3' + continue + if c.pins[i].n == '2': + c.pins[i].n = '4' + continue + if c.pins[i].n == '3': + c.pins[i].n = '1' + continue + if c.pins[i].n == '4': + c.pins[i].n = '2' + continue + ref = 'F' + c.ref = 'F' + return + + # print('last2') + + if ref == 'G': # Linear Voltage controlled voltage sources + for i in range(0, len(c.pins)): + if c.pins[i].n == '1': + c.pins[i].n = '3' + continue + if c.pins[i].n == '2': + c.pins[i].n = '4' + continue + if c.pins[i].n == '3': + c.pins[i].n = '1' + continue + if c.pins[i].n == '4': + c.pins[i].n = '2' + continue + ref = 'G' + c.ref = 'G' + return + + # print('last1') + + if ref == 'H': # Linear Current controlled voltage sources + for i in range(0, len(c.pins)): + if c.pins[i].n == '1': + c.pins[i].n = '3' + continue + if c.pins[i].n == '2': + c.pins[i].n = '4' + continue + if c.pins[i].n == '3': + c.pins[i].n = '1' + continue + if c.pins[i].n == '4': + c.pins[i].n = '2' + continue + ref = 'H' + c.ref = 'H' + return + + # print('last') + + if c.type_ == 'VPLOT1' or c.type_ == 'VPLOT2' or c.type_ \ + == 'VPRINT1' or c.type_ == 'VPRINT2' or c.type_ == 'IPRINT' \ + or c.type_ == 'IPLOT': + ref = 'U' + c.ref = 'U' + c.value = c.type_ + if c.type_ == 'VPLOT2': + c.value = 'VPLOT8' + if c.type_ == 'VPRINT2': + c.value = 'VPRINT' + + # print('*1') + + return + + +def fixInst(ci): + + # print(len(ci.attrs)) + + ref = stripNumFromRef(ci.attrs[0].value) + + # print('misc',ref) + + if ref == 'J': + ci.attrs[0].value = 'J?' + return + if ref == 'M': + ci.attrs[0].value = 'M?' + return + +# Voltage sources + + if ci.type_ == 'VAC' or ci.type_ == 'VDC' or ci.type_ == 'VPULSE' \ + or ci.type_ == 'VSIN' or ci.type_ == 'VEXP' or ci.type_ \ + == 'VPWL': + if ci.attrs[1].value == 'VAC' or ci.attrs[1].value == 'VDC' \ + or ci.attrs[1].value == 'VPULSE' or ci.attrs[1].value \ + == 'VEXP': + ci.attrs[1].value = \ + ci.attrs[1].value[1:len(ci.attrs[1].value)] + if ci.attrs[1].value == 'VSIN': + ci.attrs[1].value = 'SINE' + return + +# Plot sources + + if ci.type_ == 'VPLOT1' or ci.type_ == 'VPLOT2' or ci.type_ \ + == 'VPRINT1' or ci.type_ == 'VPRINT2' or ci.type_ == 'IPRINT' \ + or ci.type_ == 'IPLOT': + ci.attrs[0].value = 'U?' + if ci.type_ == 'VPLOT2': + ci.attrs[1].value = 'VPLOT8' + if ci.type_ == 'VPRINT2': + ci.attrs[1].value = 'VPRINT' + return + +# Gnd sources + + if ci.type_ == 'AGND' or ci.type_ == 'GND_ANALOG': + ci.type_ = 'GND' + return + + if ci.type_ == 'EGND' or ci.type_ == 'GND_EARTH': + + # print(True) + + ci.type_ = 'GND' + return + |