OPT4001DNPQ1EVM: Can't open GUI

Part Number: OPT4001DNPQ1EVM

Tool/software:

Hello team,

My customer cannot open GUI. Please teach me how to solove this issue.

I posted E2E before, change some script, it was solved.

The other engineer challenge today, and faced similar problem. But seeing from code, the script is newer. It means there are already changed script from previous version.

Regards,

Youhei MIYAOKA

import serial
from PySide import QtCore, QtGui

def evmSelectorSelected(val):
	global regProg,capDev,dev,evmTitle,evmSelectList,evmSelectWindow,evmSelectCentralWidget,evmProgressBar
	evmSelectCentralWidget.setEnabled(False)
	evmProgressBar.setValue(10)
	if(type(val) is QtGui.QListWidgetItem):
		selection=evmSelectListWidget.currentRow()
	else:
		selection=val
	evmTitle=evmSelectList[selection]
	regProg = mMSPF5529Controller.MSP5529RegProgrammer(addr=evmList.control[0])
	capDev  = mMSPF5529Controller.MSP5529_OPT4XXX_Capture(dataPort=evmList.data[0],controlPort=evmList.control[0])
	dev = mDevice.Device(fileName=scriptsRootDir+'OPT4001_EVM.dml',ignoreLast=False,regProgDevice=regProg,name='Registers View')
	evmProgressBar.setValue(30)
	mainWindow.runFile(scriptsRootDir+r'/resetDevice.py')
	evmProgressBar.setValue(40)
	mainWindow.runFile(scriptsRootDir+r'/updateGUIFromDevice.py')
	evmProgressBar.setValue(50)
	mainWindow.runFile(scriptsRootDir+r'/captureDataStructure.py')
	evmProgressBar.setValue(70)
	mainWindow.runFile(scriptsRootDir+r'/04-launchGUI.py')
	evmProgressBar.setValue(100)
	evmSelectWindow.close()
	
if('dev' in locals().keys()):
	errorMessage=QtGui.QErrorMessage()
	errorMessage.showMessage("Please clear session. Session->Clear Session (CTRL+T) or close and restart Latte")
	errorMessage.resize(500,250)
else:
	## Imports
	# -------
	import imp
	import mDevice
	
	scriptsRootDir=PROJECTS_DIR+r'OPT4001/OPT4001DNPQ1_EVM/'
	
	mEVMSelector=imp.load_source('mEVMSelector',scriptsRootDir+r'mEVMSelector.py')
	mMSPF5529Controller=imp.load_source('mMSPF5529Controller',scriptsRootDir+'/mMSP5529Programmer.py')

	## Instance creation
	# -----------------
	evmFound=False
	while(not evmFound):
		evmList=mEVMSelector.EVMSelector()
		if(len(evmList.control)>0):
			evmFound=True
			break
		msgBox=QtGui.QMessageBox()
		msgBox.setText("OPT4001 Connection Problem")
		msgBox.setIcon(QtGui.QMessageBox.Critical)
		msgBox.setInformativeText('OPT4001 not connected. Please check USB connection')
		msgBox.setStandardButtons(QtGui.QMessageBox.Retry | QtGui.QMessageBox.Abort)
		msgBox.setWindowTitle ('Connection Problem')
		result=msgBox.exec_()
		if(result==QtGui.QMessageBox.Retry):
			continue
		if(result==QtGui.QMessageBox.Abort):
			#sys.exit(0)
			mainWindow.closeEvent(QtGui.QCloseEvent)
			break
	
	evmSelectList=[]
	for c0 in np.arange(len(evmList.control)):
		evmSelectList.append('EVM%d:Control:%s/Data:%s'%(c0,evmList.control[c0],evmList.data[c0]))

		
	evmSelectWindow=QtGui.QMainWindow()
	evmSelectWindow.setWindowTitle('EVM Selector')
	evmSelectListWidget= QtGui.QListWidget()
	evmProgressBar=QtGui.QProgressBar()
	evmProgressBar.setValue(0)
	
	evmSelectListWidget.setToolTip('Double click to select EVM')
	evmSelectListWidget.addItems(evmSelectList)
	usableEVMsFlag=np.zeros(len(evmList.control),dtype=np.bool)

	for c0 in np.arange(len(evmList.control)):
		try:
			ser=serial.Serial(port=evmList.control[c0])
			ser.close()
			alreadyOpen=False
		except:
			alreadyOpen=True
		usableEVMsFlag[c0]=not alreadyOpen
		if(alreadyOpen):
			evmSelectListWidget.item(c0).setFlags(QtCore.Qt.NoItemFlags)
	
	evmSelectCentralWidget=QtGui.QWidget()
	evmSelectionLayout=QtGui.QVBoxLayout()

	evmSelectionLayout.addWidget(evmSelectListWidget)
	evmSelectionLayout.addWidget(evmProgressBar)

	evmSelectCentralWidget.setLayout(evmSelectionLayout)
	evmSelectWindow.setCentralWidget(evmSelectCentralWidget)

	evmSelectListWidget.itemDoubleClicked.connect(evmSelectorSelected)
	if(np.sum(usableEVMsFlag)==1):
		evmSelectorSelected(np.argwhere(usableEVMsFlag).ravel()[0])
	else:
		evmSelectWindow.show()

import serial
from serial.tools import list_ports 
import numpy as np
import re
import time
import globalDefs as Globals


def send(ser, cmd):
	ser.write(cmd+'\r')
	time.sleep(1e-3)
	timeOut = 0xFFFF
	while ((not ser.inWaiting()) and timeOut > 0):
		timeOut -= 1
	if (timeOut > 0):
		retCode = ser.readline()
		retCode = retCode.splitlines()[0]
		retSp = retCode.split(':')
	return retSp, retCode, timeOut


def sendCheck(ser, cmd):
	retSp, retCode, timeOut = send(ser, cmd)
	assert timeOut > 0
	assert retSp[1] == '0'
	return retSp, retCode, timeOut

def decodeHwrz(s):
	a = ""
	for i in range(3):
		a += chr(int(s[2*i:2*i+2]))
	return a

class EVMSelector():
	VID=0x2047
	PID=0x0A3C
	dv=-1
	def __init__(self):
		portList=np.array([])
		for port in serial.tools.list_ports.comports():
			#print 'VID is 0x%04x PID is 0x%04x'%(port.vid,port.pid)
			if((port.vid==self.VID) and (port.pid==self.PID)):
				portList=np.append(portList,port)
		if(np.size(portList)%2):
			Globals.error('Number of ports with EVM\'s VID and PID seems to be odd number. Expected even number')
			return
		
		locList=dict()
		
		self.control=np.array([])
		self.data=np.array([])
		self.controlP=np.array([])
		self.dataP=np.array([])
		#print portList
#		import imp 
#		mMSP5503Programmer=imp.load_source('mMSP5503Programmer','c:/Asterix/projects/OPT3101/OPT3101EVMrevE3_TIDAWideFov/'+'/mMSP5503Programmer.py')
		for i,port in enumerate(portList):
			try:
				ser=serial.Serial(port.device,9600)
				#print "Passed to open",port.device
			except:
				#print "Failed to open",port.device
				Globals.log('Serial port [%s] Locked'%port.device)
				continue
			ser.write('HWR?'+'\r')
			storeSize=5
			time.sleep(1e-3)
			timeOut=0xFFFF
			while((not ser.inWaiting()) and timeOut>0):
				timeOut-=1
			if(timeOut>0):
				retCode=ser.readline()
				retCode=retCode.splitlines()[0]
				retSp=retCode.split(':')
				#print "Appending ",retCode
				if(retSp[1]=='C'):
					retSp2, retCode2, timeOut2 = send(ser, 'HWRF')
					if (timeOut2 > 0):
						if (retSp2[1] == 'F'):
							Globals.error("Invalid EVM detected")
							return	
						elif (int(retSp2[1]) >= 1):
							sendCheck(ser, 'FLS!R')
							z = sendCheck(ser, 'FLSH')[0]
							assert z[2] == '%02d'%storeSize
							r = [sendCheck(ser, 'FLSR')[0][2] for i in range(storeSize)]
							sendCheck(ser, 'FLS!R')
							s = "".join([decodeHwrz(st) if i != 1 else st[2:6]
							            for i, st in enumerate(r)])
							Globals.log("Device detected: " + s)
							assert s == "OPT4001DNP-Q1EVM"
							self.dv=1
					else:
						Globals.error('Communication Error.')
						assert 0
					self.controlP=np.append(self.controlP,port)
					self.control=np.append(self.control,port.device)
				if(retSp[1]=='D'):
					self.dataP=np.append(self.dataP,port)
					self.data=np.append(self.data,port.device)
			ser.close()
		if(not (np.size(self.controlP)==np.size(self.dataP))):
			Globals.error('Number of Control and Data ports not matched. Unlock all COM ports')
			return
		for c0,port in enumerate(self.controlP):
			try:
				ser=serial.Serial(port.device,9600)
			except:
				Globals.log('Serial port [%s] Locked'%port)
				continue
			ser.write('HWRX%d'%(c0+1)+'\r')
			ser.close()
		dataOrder=[]
		for c0,port in enumerate(self.dataP):
			try:
				ser=serial.Serial(port.device,9600)
			except:
				Globals.log('Serial port [%s] Locked'%port)
				continue
			ser.write('HWRX'+'\r')
			time.sleep(1e-3)
			timeOut=0xFFFF
			while((not ser.inWaiting()) and timeOut>0):
				timeOut-=1
			if(timeOut>0):
				retCode=ser.readline()
				retCode=retCode.splitlines()[0]
				retSp=retCode.split(':')
				dataOrder.append(np.uint8(retSp[1])-1)
			ser.close()
		self.data=self.data[dataOrder]
		self.dataP=self.dataP[dataOrder]
		#for c0 in np.arange(np.size(
		return 
		
if __name__ == '__main__':
	evmList=EVMSelector()
	for c0 in np.arange(evmList.control.shape[0]):
		print "Control Port for EVM %d is "%c0,evmList.control[c0]
		print "Data    Port for EVM %d is "%c0,evmList.data[c0]