1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
#===============================================================================
#
# FILE: openKicad.py
#
# USAGE: ---
#
# DESCRIPTION: It call kicad schematic
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Fahim Khan, fahim.elex@gmail.com
# ORGANIZATION: eSim team at FOSSEE, IIT Bombay.
# CREATED: Tuesday 17 Feb 2015
# REVISION: ---
#===============================================================================
import os
import Validation
from configuration.Appconfig import Appconfig
import Worker
from PyQt4 import QtGui, QtCore
import shutil
from gevent.hub import sleep
import subprocess
class Kicad:
"""
This class called the Kicad Schematic,KicadtoNgspice Converter,Layout editor and Footprint Editor
"""
def __init__(self):
self.obj_validation = Validation.Validation()
self.obj_appconfig = Appconfig()
def openSchematic(self):
"""
This function create command to open Kicad schematic
"""
print "Kicad Schematic is called"
self.projDir = self.obj_appconfig.current_project["ProjectName"]
#Validating if current project is available or not
if self.obj_validation.validateKicad(self.projDir):
#print "calling Kicad schematic ",self.projDir
self.projName = os.path.basename(self.projDir)
self.project = os.path.join(self.projDir,self.projName)
#Creating a command to run
self.cmd = "eeschema "+self.project+".sch "
self.obj_workThread = Worker.WorkerThread(self.cmd)
self.obj_workThread.start()
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Please select the project first. You can either create new project or open existing project')
self.msg.setWindowTitle("Error Message")
def openFootprint(self):
"""
This function create command to open Footprint editor
"""
print "Kicad Foot print Editor called"
self.projDir = self.obj_appconfig.current_project["ProjectName"]
#Validating if current project is available or not
if self.obj_validation.validateKicad(self.projDir):
#print "calling Kicad FootPrint Editor ",self.projDir
self.projName = os.path.basename(self.projDir)
self.project = os.path.join(self.projDir,self.projName)
#Creating a command to run
self.cmd = "cvpcb "+self.project+".net "
self.obj_workThread = Worker.WorkerThread(self.cmd)
self.obj_workThread.start()
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Please select the project first. You can either create new project or open existing project')
self.msg.setWindowTitle("Error Message")
def openLayout(self):
"""
This function create command to open Layout editor
"""
print "Kicad Layout is called"
self.projDir = self.obj_appconfig.current_project["ProjectName"]
#Validating if current project is available or not
if self.obj_validation.validateKicad(self.projDir):
print "calling Kicad schematic ",self.projDir
self.projName = os.path.basename(self.projDir)
self.project = os.path.join(self.projDir,self.projName)
#Creating a command to run
self.cmd = "pcbnew "+self.project+".net "
self.obj_workThread = Worker.WorkerThread(self.cmd)
self.obj_workThread.start()
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Please select the project first. You can either create new project or open existing project')
self.msg.setWindowTitle("Error Message")
def openKicadToNgspice(self):
"""
This function create command to call kicad to Ngspice converter.
"""
print "Open Kicad to Ngspice Conversion"
self.projDir = self.obj_appconfig.current_project["ProjectName"]
#Validating if current project is available or not
if self.obj_validation.validateKicad(self.projDir):
#print "Project is present"
#Cheking if project has .cir file or not
if self.obj_validation.validateCir(self.projDir):
#print "CIR file present"
self.projName = os.path.basename(self.projDir)
self.project = os.path.join(self.projDir,self.projName)
#Creating a command to run
self.cmd = "python ../kicadtoNgspice/KicadtoNgspice.py "+self.project+".cir "
self.obj_workThread = Worker.WorkerThread(self.cmd)
self.obj_workThread.start()
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Your project do not contain any Kicad netlist file for conversion')
self.msg.setWindowTitle("Error Message")
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Please select the project first. You can either create new project or open existing project')
self.msg.setWindowTitle("Error Message")
def openNgspice(self):
"""
This function call ngspice simulator
"""
self.projDir = self.obj_appconfig.current_project["ProjectName"]
#Validating if current project is available or not
if self.obj_validation.validateKicad(self.projDir):
self.projName = os.path.basename(self.projDir)
self.project = os.path.join(self.projDir,self.projName)
#Creating ngspice command
self.cmd = "xterm -e ngspice "+self.project+".cir.out"
proc = subprocess.Popen(self.cmd.split())
self.obj_appconfig.procThread_list.append(proc)
sleep(2) #Need permanent solution
try:
#Moving plot_data_i.txt and plot_data_v.txt to project directory
shutil.copy2("plot_data_i.txt", self.projDir)
shutil.copy2("plot_data_v.txt", self.projDir)
#Deleting this file from current directory
os.remove("plot_data_i.txt")
os.remove("plot_data_v.txt")
except Exception as e:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Unable to copy plot data file to project directory.')
print "Exception:",str(e)
self.msg.setWindowTitle("Error Message")
return False
return True
else:
self.msg = QtGui.QErrorMessage(None)
self.msg.showMessage('Please select the project first. You can either create new project or open existing project')
self.msg.setWindowTitle("Error Message")
#return False
|