summaryrefslogtreecommitdiff
path: root/src/kicadtoNgspice/Model.py
diff options
context:
space:
mode:
authorRahul P2022-05-19 16:07:31 +0530
committerGitHub2022-05-19 16:07:31 +0530
commit6af18ac0a1e4148f72854d872a72ab86bf24726e (patch)
tree3aea4ba273dc950b428dcd22e5abce15ebe23506 /src/kicadtoNgspice/Model.py
parentacb5ad93634384bb015330134571a9d7764975e8 (diff)
parentecd4f41efb20c31c9207d86e872205e72a1a4b08 (diff)
downloadeSim-6af18ac0a1e4148f72854d872a72ab86bf24726e.tar.gz
eSim-6af18ac0a1e4148f72854d872a72ab86bf24726e.tar.bz2
eSim-6af18ac0a1e4148f72854d872a72ab86bf24726e.zip
Merge pull request #168 from mistryjay/master
Hex upload GUI for microcontroller
Diffstat (limited to 'src/kicadtoNgspice/Model.py')
-rw-r--r--src/kicadtoNgspice/Model.py223
1 files changed, 182 insertions, 41 deletions
diff --git a/src/kicadtoNgspice/Model.py b/src/kicadtoNgspice/Model.py
index 0c821190..1389e556 100644
--- a/src/kicadtoNgspice/Model.py
+++ b/src/kicadtoNgspice/Model.py
@@ -1,86 +1,156 @@
-from PyQt5 import QtWidgets
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from PyQt5 import QtWidgets, QtCore, QtGui
+from PyQt5.QtCore import QObject, pyqtSlot
from . import TrackWidget
from xml.etree import ElementTree as ET
import os
+import sys
class Model(QtWidgets.QWidget):
+
"""
- This class creates Model Tab of KicadtoNgspice window.
The widgets are created dynamically in the Model Tab.
"""
- def __init__(self, schematicInfo, modelList, clarg1):
+ # by Sumanto and Jay
+
+ def addHex(self):
+ """
+ This function is use to keep track of all Device Model widget
+ """
+
+ # print("Calling Track Device Model Library funtion")
+
+ init_path = "../../../"
+ if os.name == "nt":
+ init_path = ""
+
+ self.hexfile = QtCore.QDir.toNativeSeparators(
+ QtWidgets.QFileDialog.getOpenFileName(
+ self, "Open Hex Directory", init_path + "home", "*.hex"
+ )[0]
+ )
+ self.text = open(self.hexfile).read()
+ chosen_file_path = os.path.abspath(self.hexfile)
+
+ # By Sumanto and Jay
+
+ def uploadHex(self):
+ """
+ This function is use to keep track of all Device Model widget
+ """
+
+ # print("Calling Track Device Model Library funtion")
+
+ path1 = os.path.expanduser("~")
+ path2 = "/ngspice-nghdl/src/xspice/icm/ghdl"
+ init_path = path1 + path2
+ if os.name == "nt":
+ init_path = ""
+
+ self.hexloc = QtWidgets.QFileDialog.getExistingDirectory(
+ self, "Open Hex Directory", init_path
+ )
+ self.file = open(self.hexloc + "/hex.txt", "w")
+ self.file.write(self.text)
+ self.file.close()
+
+ def __init__(
+ self,
+ schematicInfo,
+ modelList,
+ clarg1,
+ ):
QtWidgets.QWidget.__init__(self)
# Processing for getting previous values
+
kicadFile = clarg1
(projpath, filename) = os.path.split(kicadFile)
project_name = os.path.basename(projpath)
check = 1
try:
f = open(
- os.path.join(
- projpath,
- project_name +
- "_Previous_Values.xml"),
- 'r')
+ os.path.join(projpath, project_name + "_Previous_Values.xml"),
+ "r",
+ )
tree = ET.parse(f)
parent_root = tree.getroot()
for child in parent_root:
if child.tag == "model":
root = child
-
except BaseException:
+
check = 0
print("Model Previous Values XML is Empty")
# Creating track widget object
+
self.obj_trac = TrackWidget.TrackWidget()
# for increasing row and counting/tracking line edit widget
+
self.nextrow = 0
self.nextcount = 0
# for storing line edit details position details
+
self.start = 0
self.end = 0
+ self.entry_var = {}
+ self.text = ""
# Creating GUI dynamically for Model tab
+
self.grid = QtWidgets.QGridLayout()
self.setLayout(self.grid)
for line in modelList:
+
# print "ModelList Item:",line
# Adding title label for model
# Key: Tag name,Value:Entry widget number
+
tag_dict = {}
modelbox = QtWidgets.QGroupBox()
modelgrid = QtWidgets.QGridLayout()
modelbox.setTitle(line[5])
self.start = self.nextcount
+
# line[7] is parameter dictionary holding parameter tags.
+
i = 0
- for key, value in line[7].items():
+ for (key, value) in line[7].items():
+
# Check if value is iterable
- if not isinstance(value, str) and hasattr(value, '__iter__'):
+
+ if not isinstance(value, str) and hasattr(value, "__iter__"):
+
# For tag having vector value
+
temp_tag = []
for item in value:
paramLabel = QtWidgets.QLabel(item)
modelgrid.addWidget(paramLabel, self.nextrow, 0)
- self.obj_trac.model_entry_var[self.nextcount] = (
- QtWidgets.QLineEdit()
- )
+ self.obj_trac.model_entry_var[
+ self.nextcount
+ ] = QtWidgets.QLineEdit()
modelgrid.addWidget(
- self.obj_trac.model_entry_var
- [self.nextcount], self.nextrow, 1)
+ self.obj_trac.model_entry_var[self.nextcount],
+ self.nextrow,
+ 1,
+ )
try:
for child in root:
- if child.text == line[2] \
- and child.tag == line[3]:
+ if (
+ child.text == line[2]
+ and child.tag == line[3]
+ ):
self.obj_trac.model_entry_var
[self.nextcount].setText(child[i].text)
i = i + 1
@@ -90,58 +160,129 @@ class Model(QtWidgets.QWidget):
temp_tag.append(self.nextcount)
self.nextcount = self.nextcount + 1
self.nextrow = self.nextrow + 1
- tag_dict[key] = temp_tag
+ if "upload_hex_file:1" in tag_dict:
+ self.addbtn = QtWidgets.QPushButton("Add Hex File")
+ self.addbtn.setObjectName("%d" % self.nextcount)
+ self.addbtn.clicked.connect(self.addHex)
+ modelgrid.addWidget(self.addbtn, self.nextrow, 2)
+ modelbox.setLayout(modelgrid)
+
+ # CSS
+
+ modelbox.setStyleSheet(
+ " \
+ QGroupBox { border: 1px solid gray; border-radius:\
+ 9px; margin-top: 0.5em; } \
+ QGroupBox::title {subcontrol-origin: margin; left:\
+ 10px; padding: 0 3px 0 3px; } \
+ "
+ )
+
+ self.grid.addWidget(modelbox)
+ self.addbtn = QtWidgets.QPushButton(
+ "Upload Hex File"
+ )
+ self.addbtn.setObjectName("%d" % self.nextcount)
+ self.addbtn.clicked.connect(self.uploadHex)
+ modelgrid.addWidget(self.addbtn, self.nextrow, 3)
+ modelbox.setLayout(modelgrid)
+
+ # CSS
+ modelbox.setStyleSheet(
+ " \
+ QGroupBox { border: 1px solid gray; border-radius:\
+ 9px; margin-top: 0.5em; } \
+ QGroupBox::title {subcontrol-origin: margin; left:\
+ 10px; padding: 0 3px 0 3px; } \
+ "
+ )
+
+ self.grid.addWidget(modelbox)
+
+ tag_dict[key] = temp_tag
else:
+
paramLabel = QtWidgets.QLabel(value)
modelgrid.addWidget(paramLabel, self.nextrow, 0)
- self.obj_trac.model_entry_var[self.nextcount] = (
- QtWidgets.QLineEdit()
- )
+ self.obj_trac.model_entry_var[
+ self.nextcount
+ ] = QtWidgets.QLineEdit()
modelgrid.addWidget(
self.obj_trac.model_entry_var[self.nextcount],
- self.nextrow, 1
+ self.nextrow,
+ 1,
)
try:
for child in root:
if child.text == line[2] and child.tag == line[3]:
- self.obj_trac.model_entry_var[self.nextcount] \
- .setText(child[i].text)
+ self.obj_trac.model_entry_var[
+ self.nextcount
+ ].setText(child[i].text)
i = i + 1
except BaseException:
pass
+
tag_dict[key] = self.nextcount
self.nextcount = self.nextcount + 1
self.nextrow = self.nextrow + 1
+ if "upload_hex_file:1" in tag_dict:
+ self.addbtn = QtWidgets.QPushButton("Add Hex File")
+ self.addbtn.setObjectName("%d" % self.nextcount)
+ self.addbtn.clicked.connect(self.addHex)
+ modelgrid.addWidget(self.addbtn, self.nextrow, 2)
+ modelbox.setLayout(modelgrid)
+
+ # CSS
+
+ modelbox.setStyleSheet(
+ " \
+ QGroupBox { border: 1px solid gray; border-radius:\
+ 9px; margin-top: 0.5em; } \
+ QGroupBox::title { subcontrol-origin: margin; left:\
+ 10px; padding: 0 3px 0 3px; } \
+ "
+ )
+
+ self.grid.addWidget(modelbox)
+ self.addbtn = QtWidgets.QPushButton("Upload Hex File")
+ self.addbtn.setObjectName("%d" % self.nextcount)
+ self.addbtn.clicked.connect(self.uploadHex)
+ modelgrid.addWidget(self.addbtn, self.nextrow, 3)
+ modelbox.setLayout(modelgrid)
+
+ # CSS
+
+ modelbox.setStyleSheet(
+ " \
+ QGroupBox { border: 1px solid gray; border-radius:\
+ 9px; margin-top: 0.5em; } \
+ QGroupBox::title { subcontrol-origin: margin; left:\
+ 10px; padding: 0 3px 0 3px; } \
+ "
+ )
+
+ self.grid.addWidget(modelbox)
self.end = self.nextcount - 1
modelbox.setLayout(modelgrid)
# CSS
- modelbox.setStyleSheet(" \
+
+ modelbox.setStyleSheet(
+ " \
QGroupBox { border: 1px solid gray; border-radius: \
9px; margin-top: 0.5em; } \
QGroupBox::title { subcontrol-origin: margin; left:\
10px; padding: 0 3px 0 3px; } \
- ")
+ "
+ )
self.grid.addWidget(modelbox)
- '''
- Listing all
- line[0] = index
- line[1] = compLine
- line[2] = modelname #Change from compType to modelname
- line[3] = compName
- line[4] = comment
- line[5] = title
- line[6] = type i.e analog or digital
- Now adding start,end and tag_dict which will be line[7],
- line[8] and line[9] respectively
- '''
-
# This keeps the track of Model Tab Widget
+
lst = [
line[0],
line[1],
@@ -152,12 +293,12 @@ class Model(QtWidgets.QWidget):
line[6],
self.start,
self.end,
- tag_dict]
+ tag_dict,
+ ]
check = 0
for itr in self.obj_trac.modelTrack:
if itr == lst:
check = 1
-
if check == 0:
self.obj_trac.modelTrack.append(lst)