package com.microchip.mplab.ipecmd; import com.microchip.mplab.ipecmd.common.SharedData; import com.microchip.mplab.ipelib.tools.IPENotifier; import com.microchip.mplab.ipelib.tools.NotifyData; import com.microchip.mplab.ipelib.tools.IPENotifier.Operation; import com.microchip.mplab.logger.MPLABLogger; import com.microchip.mplab.mdbcore.MessageMediator.Message; import com.microchip.mplab.mdbcore.MessageMediator.MessageMediatorListener; import java.util.Observable; import java.util.Observer; import java.util.logging.Level; public class IPEEvents implements Observer, MessageMediatorListener { public IPENotifier imp = null; private SharedData sharedData; private boolean isOutputWindow = true; private int timerUserPowerToggle = 1000; private int counterUserPowerToggle = 10; public IPEEvents() { this.sharedData = SharedData.getSingletonObject(); } public void addObserver() { this.imp = IPENotifier.getIPENotifierController(); this.imp.addObserver(this); } @Override public void update(Observable o, Object arg) { NotifyData nData = (NotifyData)arg; if (nData.m_eOperation == Operation.ID_MSG_NOTIFY) { String msg = nData.msgNotification; if (msg.contains("The JTAG board appears to be inserted into the REAL ICE")) { msg = "The JTAG board appears to be inserted into the REAL ICE. If you wish to use it, please use the -OJ argument."; this.sharedData.setJtagArgNotUsedFlag(true); } if (msg.contains("preserve memory ranges")) { String[] pgmRange = msg.split(" "); msg = String.format( this.sharedData.getStringFromBundle("IPECMD.PRESERVE_MEM_RANGE_WONT_BE_PROGRAMMED"), this.sharedData.getCoreParameters().getProperty("programoptions.preserveprogram.ranges", "0-0"), pgmRange[25] ); } this.sharedData.IPEPrint(msg); if (msg.contains("Please toggle the power on the target device")) { try { for (int i = 1; i <= this.counterUserPowerToggle; i++) { System.out.print("\b\b"); System.out.print(i); Thread.sleep(this.timerUserPowerToggle); } this.sharedData.IPEPrint("\n"); Thread.sleep(this.timerUserPowerToggle); } catch (InterruptedException var6) { MPLABLogger.mplog.log(Level.INFO, var6.toString()); } } } else if (nData.m_eOperation == Operation.ID_TOOL_NOTIFY) { } } public int handleMessage(Message objMessage, int ActionID) { String mes = objMessage.getMessageString(); if (objMessage.getClearOutputWindow()) { } if (mes.contains("IDE")) { mes = mes.replace("MPLAB IDE", "MPLAB IPE"); mes = mes.replace("wold", "would"); mes = mes.replace(". ", ".\n"); String[] splitStrings = mes.split(".\n"); for (int i = 0; i < splitStrings.length; i++) { if (splitStrings[i].contains("project properties")) { splitStrings[i] = ""; } } mes = ""; for (int m = 0; m < splitStrings.length; m++) { mes = mes.concat(splitStrings[m] + ".\n"); } } if (mes.contains("Invalid Device ID")) { if (!mes.contains("Would you like to continue?")) { this.sharedData.IPEPrint(mes); } return 1; } else { if (mes.contains("MPLAB PM3 Card file not found.")) { mes = mes.replace("MPLAB PM3 Card file not found.", ""); } if (mes.contains("PICkit 3 is in Programmer-to-go mode.")) { return 1; } else { this.checkForsetAction(ActionID); if (this.isOutputWindow && !this.isFilterRequired(mes)) { this.sharedData.IPEPrint(mes); } return 0; } } } private boolean checkForsetAction(Integer ActionID) { boolean retVal = false; switch (ActionID) { case 4: retVal = true; break; case 5: this.isOutputWindow = true; break; case 12: this.isOutputWindow = false; } return retVal; } public boolean isFilterRequired(String msg) { boolean retVal = false; String[] dat = new String[]{ "PM3 Versions Details", "MPLAB OS Suite Version", "BIOS Version", "OS Version", "Power Monitor Version", "CPLD Version", "FPGA Version", "ICSP Monitor Version", "USB Version", "Database Version", "Verifying", "Verify completed", "Programming target", "Programming completed", "Reading", "Reading completed" }; for (int iLoop = 0; iLoop < dat.length; iLoop++) { msg = msg.trim(); if (msg.startsWith(dat[iLoop])) { retVal = true; break; } } return retVal; } private static enum OutputType { Message, Error, Color, ErrorLink; } }