mirror of https://github.com/rusefi/RomRaider.git
working on saving maps back to the utec
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@541 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
a1580eb825
commit
a32691e8a8
|
@ -8,6 +8,7 @@ import javax.swing.*;
|
|||
import enginuity.logger.utec.commEvent.*;
|
||||
import enginuity.logger.utec.mapData.GetMapFromUtecListener;
|
||||
import enginuity.logger.utec.mapData.UtecMapData;
|
||||
import enginuity.logger.utec.properties.UtecProperties;
|
||||
|
||||
/**
|
||||
* Class negotiates data to and from UTEC via the serial port
|
||||
|
@ -90,8 +91,17 @@ public class UtecSerialConnection implements SerialPortEventListener {
|
|||
public void startLoggerDataFlow() {
|
||||
System.out.println("Starting data flow from UTEC");
|
||||
|
||||
// OutPut a '!' to start basic data flow from UTEC
|
||||
this.sendDataToUtec(33);
|
||||
String[] commandList = UtecProperties.getProperties("utec.startLogging");
|
||||
if(commandList == null){
|
||||
System.err.println("Command string in properties file for utec.startLogging not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.resetUtec();
|
||||
for(int i = 0; i < commandList.length ; i++){
|
||||
// Send parsed command to the utec
|
||||
this.sendCommandToUtec(Integer.parseInt(commandList[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -99,16 +109,18 @@ public class UtecSerialConnection implements SerialPortEventListener {
|
|||
*
|
||||
*/
|
||||
public void resetUtec() {
|
||||
// OutPut 2 ctrl-x to UTEC
|
||||
// this.sendDataToUtec('\u0018');
|
||||
// this.sendDataToUtec('\u0018');
|
||||
System.out.println("Utec reset called.");
|
||||
this.sendDataToUtec(24);
|
||||
this.waitForIt();
|
||||
this.sendDataToUtec(24);
|
||||
this.waitForIt();
|
||||
this.sendDataToUtec(24);
|
||||
this.waitForIt();
|
||||
|
||||
String[] commandList = UtecProperties.getProperties("utec.resetUtec");
|
||||
if(commandList == null){
|
||||
System.err.println("Command string in properties file for utec.resetUtec not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < commandList.length ; i++){
|
||||
// Send parsed command to the utec
|
||||
this.sendCommandToUtec(Integer.parseInt(commandList[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -117,15 +129,22 @@ public class UtecSerialConnection implements SerialPortEventListener {
|
|||
* @param mapNumber
|
||||
*/
|
||||
public void pullMapData(int mapNumber, GetMapFromUtecListener listener) {
|
||||
this.resetUtec();
|
||||
System.out.println("UtecControl, getting map:" + mapNumber);
|
||||
|
||||
// Check bounds of map requested
|
||||
// Sanity check
|
||||
if (mapNumber < 1 || mapNumber > 5) {
|
||||
System.err.println("Map selection out of range.");
|
||||
return;
|
||||
}
|
||||
|
||||
String[] commandList = UtecProperties.getProperties("utec.startMapDownload");
|
||||
if(commandList == null){
|
||||
System.err.println("Command string in properties file for utec.startMapDownload not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.resetUtec();
|
||||
System.out.println("UtecControl, getting map:" + mapNumber);
|
||||
|
||||
// Null out any previously loaded map
|
||||
this.currentMap = null;
|
||||
|
||||
|
@ -136,86 +155,177 @@ public class UtecSerialConnection implements SerialPortEventListener {
|
|||
this.isMapFromUtecPrep = true;
|
||||
this.isMapFromUtec = false;
|
||||
|
||||
// Reset the UTEC
|
||||
this.resetUtec();
|
||||
// Iterate through command string
|
||||
int starCounter = 0;
|
||||
for(int i = 0; i < commandList.length ; i++){
|
||||
if(commandList[i].equalsIgnoreCase("*")){
|
||||
if(starCounter == 0){
|
||||
// Select map
|
||||
|
||||
// Send an 'e' to enter map menu
|
||||
// this.sendDataToUtec('\u0065');
|
||||
this.sendDataToUtec(101);
|
||||
System.out.println("Sent an e");
|
||||
this.waitForIt();
|
||||
if (mapNumber == 1) {
|
||||
this.sendCommandToUtec(33);
|
||||
System.out.println("Requested Map 1");
|
||||
}
|
||||
if (mapNumber == 2) {
|
||||
this.sendCommandToUtec(64);
|
||||
System.out.println("Requested Map 2");
|
||||
}
|
||||
if (mapNumber == 3) {
|
||||
this.sendCommandToUtec(35);
|
||||
System.out.println("Requested Map 3");
|
||||
}
|
||||
if (mapNumber == 4) {
|
||||
this.sendCommandToUtec(36);
|
||||
System.out.println("Requested Map 4");
|
||||
}
|
||||
if (mapNumber == 5) {
|
||||
this.sendCommandToUtec(37);
|
||||
System.out.println("Requested Map 5");
|
||||
}
|
||||
}else if(starCounter == 1){
|
||||
|
||||
// Point UTEC menu to the appropriate map
|
||||
if (mapNumber == 1) {
|
||||
// this.sendDataToUtec('\u0021');
|
||||
this.sendDataToUtec(33);
|
||||
System.out.println("Requested Map 1");
|
||||
this.waitForIt();
|
||||
}
|
||||
if (mapNumber == 2) {
|
||||
// this.sendDataToUtec('\u0040');
|
||||
this.sendDataToUtec(64);
|
||||
System.out.println("Requested Map 2");
|
||||
}
|
||||
if (mapNumber == 3) {
|
||||
// this.sendDataToUtec('\u0023');
|
||||
this.sendDataToUtec(35);
|
||||
System.out.println("Requested Map 3");
|
||||
}
|
||||
if (mapNumber == 4) {
|
||||
// this.sendDataToUtec('\u0024');
|
||||
this.sendDataToUtec(36);
|
||||
System.out.println("Requested Map 4");
|
||||
}
|
||||
if (mapNumber == 5) {
|
||||
// this.sendDataToUtec('\u0025');
|
||||
this.sendDataToUtec(37);
|
||||
System.out.println("Requested Map 5");
|
||||
// Make this class receptive to map transfer
|
||||
this.isMapFromUtec = true;
|
||||
|
||||
// No longer map prep
|
||||
this.isMapFromUtecPrep = false;
|
||||
|
||||
}else{
|
||||
System.err.println("No operation supported for properties value '*'");
|
||||
}
|
||||
|
||||
starCounter++;
|
||||
}else{
|
||||
// Send parsed command to the utec
|
||||
this.sendCommandToUtec(Integer.parseInt(commandList[i]));
|
||||
}
|
||||
}
|
||||
|
||||
// Write first ctrl-s to init save state
|
||||
// this.sendDataToUtec('\u0013');
|
||||
this.sendDataToUtec(19);
|
||||
System.out.println("Sent crtl-s");
|
||||
this.waitForIt();
|
||||
|
||||
// Make this class receptive to map transfer
|
||||
this.isMapFromUtec = true;
|
||||
|
||||
// No longer map prep
|
||||
this.isMapFromUtecPrep = false;
|
||||
|
||||
// Write second ctrl-s to start map data flow
|
||||
// this.sendDataToUtec('\u0013');
|
||||
this.sendDataToUtec(19);
|
||||
System.out.println("Sent crtl-s");
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to write chars to the UTEC
|
||||
* Transmit a map to the utec
|
||||
*
|
||||
* @param mapNumber
|
||||
* @param listener
|
||||
*/
|
||||
public void sendMapData(int mapNumber, StringBuffer mapData) {
|
||||
|
||||
// Sanity check
|
||||
if (mapNumber < 1 || mapNumber > 5) {
|
||||
System.err.println("Map selection out of range.");
|
||||
return;
|
||||
}
|
||||
|
||||
String[] commandList = UtecProperties.getProperties("utec.startMapDownload");
|
||||
if(commandList == null){
|
||||
System.err.println("Command string in properties file for utec.startMapUpload not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.resetUtec();
|
||||
System.out.println("UtecControl, sending map:" + mapNumber);
|
||||
|
||||
// Iterate through command string
|
||||
int starCounter = 0;
|
||||
for(int i = 0; i < commandList.length ; i++){
|
||||
if(commandList[i].equalsIgnoreCase("*")){
|
||||
if(starCounter == 0){
|
||||
// Select map
|
||||
|
||||
if (mapNumber == 1) {
|
||||
this.sendCommandToUtec(33);
|
||||
System.out.println("Requested Map 1");
|
||||
}
|
||||
if (mapNumber == 2) {
|
||||
this.sendCommandToUtec(64);
|
||||
System.out.println("Requested Map 2");
|
||||
}
|
||||
if (mapNumber == 3) {
|
||||
this.sendCommandToUtec(35);
|
||||
System.out.println("Requested Map 3");
|
||||
}
|
||||
if (mapNumber == 4) {
|
||||
this.sendCommandToUtec(36);
|
||||
System.out.println("Requested Map 4");
|
||||
}
|
||||
if (mapNumber == 5) {
|
||||
this.sendCommandToUtec(37);
|
||||
System.out.println("Requested Map 5");
|
||||
}
|
||||
}else if(starCounter == 1){
|
||||
this.sendDataToUtec(mapData);
|
||||
|
||||
}else{
|
||||
System.err.println("No operation supported for properties value '*'");
|
||||
}
|
||||
|
||||
starCounter++;
|
||||
}else{
|
||||
// Send parsed command to the utec
|
||||
this.sendCommandToUtec(Integer.parseInt(commandList[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper method to write chcommands to the UTEC. There is a pause after each command sent to ensure utec has time to respond.
|
||||
*
|
||||
* @param charValue
|
||||
*/
|
||||
public void sendDataToUtec(int charValue) {
|
||||
public void sendCommandToUtec(int charValue) {
|
||||
|
||||
if(this.sPort == null){ System.err.println("No Port Selected, therefore no interraction with Utec happening.");
|
||||
return; }
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
outputToUtecStream.write(charValue);
|
||||
|
||||
System.out.println("Sending command to the ute:"+charValue);
|
||||
} catch (IOException e) {
|
||||
System.err.println("Can't send char data to UTEC: " + charValue);
|
||||
System.err.println("Can't send char command to UTEC: " + charValue);
|
||||
e.getMessage();
|
||||
}
|
||||
|
||||
|
||||
this.waitForIt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method sends string data to the utec
|
||||
* @param mapData
|
||||
*/
|
||||
public void sendDataToUtec(StringBuffer mapData){
|
||||
if(this.sPort == null){ System.err.println("No Port Selected, therefore no interraction with Utec happening.");
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < mapData.length(); i++){
|
||||
try {
|
||||
outputToUtecStream.write(mapData.charAt(i));
|
||||
} catch (IOException e) {
|
||||
System.err.println("Can't send char data to UTEC: " + mapData.charAt(i));
|
||||
e.getMessage();
|
||||
}
|
||||
|
||||
//Wait
|
||||
this.waitForIt();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to pause application. Used to spread data transmission
|
||||
*
|
||||
*/
|
||||
private void waitForIt(){
|
||||
String[] pauseString = UtecProperties.getProperties("utec.dataTransmissionPauseMS");
|
||||
|
||||
int pauseCount = Integer.parseInt(pauseString[0]);
|
||||
try {
|
||||
Thread.currentThread().sleep(1000);
|
||||
System.out.println("waiting 1 second.");
|
||||
Thread.currentThread().sleep(pauseCount);
|
||||
System.out.println("waiting for this many ms:"+pauseCount);
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -21,7 +21,7 @@ import enginuity.logger.utec.mapData.UtecMapData;
|
|||
public class CommEvent {
|
||||
private String UtecBuffer = null;
|
||||
private String[] data = new String[6];
|
||||
private double[] doubleData = new double[6];
|
||||
private double[] doubleData = null; //new double[6];
|
||||
|
||||
private boolean isLoggerData = false;
|
||||
private boolean isMapData = false;
|
||||
|
@ -32,45 +32,11 @@ public class CommEvent {
|
|||
|
||||
public void setLoggerData(String buffer){
|
||||
UtecBuffer = buffer;
|
||||
StringTokenizer st = new StringTokenizer(UtecBuffer, ",");
|
||||
int counter = 0;
|
||||
while(st.hasMoreTokens()){
|
||||
String theData = st.nextToken();
|
||||
|
||||
//RPM
|
||||
if(counter == 0){
|
||||
data[0] = theData;
|
||||
}
|
||||
data = UtecBuffer.split(",");
|
||||
doubleData = new double[data.length];
|
||||
|
||||
//PSI
|
||||
if(counter == 1){
|
||||
data[1] = theData;
|
||||
}
|
||||
|
||||
//KNOCK
|
||||
if(counter == 5){
|
||||
data[2] = theData;
|
||||
}
|
||||
|
||||
//IGN
|
||||
if(counter == 6){
|
||||
data[3] = theData;
|
||||
}
|
||||
|
||||
//DUTY
|
||||
if(counter == 7){
|
||||
data[4] = theData;
|
||||
}
|
||||
|
||||
//AFR
|
||||
if(counter == 13){
|
||||
data[5] = theData;
|
||||
}
|
||||
|
||||
counter++;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 6; i++){
|
||||
for(int i = 0; i < data.length; i++){
|
||||
String theData = data[i];
|
||||
theData = theData.trim();
|
||||
if(theData.startsWith(">")){
|
||||
|
|
|
@ -19,6 +19,7 @@ import javax.swing.*;
|
|||
|
||||
import enginuity.logger.utec.gui.realtimeData.*;
|
||||
import enginuity.logger.utec.mapData.GetMapFromUtecListener;
|
||||
import enginuity.logger.utec.mapData.UtecMapData;
|
||||
import enginuity.logger.utec.comm.*;
|
||||
/**
|
||||
* @author emorgan
|
||||
|
@ -52,13 +53,18 @@ public class UtecInterface{
|
|||
utecControl.pullMapData(mapNumber, listener);
|
||||
}
|
||||
|
||||
public static void uploadMap(int mapNumber, UtecMapData mapData){
|
||||
openConnection();
|
||||
utecControl.sendMapData(mapNumber, mapData.getUpdatedMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass a command to the UTEC
|
||||
* @param charValue
|
||||
*/
|
||||
public static void sendDataToUtec(int charValue){
|
||||
public static void sendCommandToUtec(int charValue){
|
||||
openConnection();
|
||||
utecControl.sendDataToUtec(charValue);
|
||||
utecControl.sendCommandToUtec(charValue);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,7 +20,8 @@ import enginuity.logger.utec.gui.realtimeData.*;
|
|||
import enginuity.logger.utec.gui.bottomControl.*;
|
||||
import enginuity.logger.utec.mapData.GetMapFromUtecListener;
|
||||
import enginuity.logger.utec.mapData.UtecMapData;
|
||||
import enginuity.tts.VoiceThread;
|
||||
import enginuity.logger.utec.properties.UtecProperties;
|
||||
import enginuity.tts.SpeakString;
|
||||
import enginuity.logger.utec.commInterface.UtecInterface;
|
||||
|
||||
/**
|
||||
|
@ -67,6 +68,11 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
public JMenuItem loadMapFour = new JMenuItem("Load Map #4");
|
||||
public JMenuItem loadMapFive = new JMenuItem("Load Map #5");
|
||||
|
||||
public JMenuItem saveMapOne = new JMenuItem("Save To Map #1");
|
||||
public JMenuItem saveMapTwo = new JMenuItem("Save To Map #2");
|
||||
public JMenuItem saveMapThree = new JMenuItem("Save To Map #3");
|
||||
public JMenuItem saveMapFour = new JMenuItem("Save To Map #4");
|
||||
public JMenuItem saveMapFive = new JMenuItem("Save To Map #5");
|
||||
|
||||
|
||||
private static JutecGUI instance = null;
|
||||
|
@ -91,7 +97,7 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
|
||||
// Main frame
|
||||
// Grid layout with a top and bottom, ie two rows
|
||||
super("UTEC Loggers");
|
||||
super("UTEC Logger");
|
||||
this.setSize(800, 640);
|
||||
this.setResizable(false);
|
||||
this.setDefaultCloseOperation(setDefaultCloseOperation);
|
||||
|
@ -100,8 +106,7 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
// Voice the welcome message
|
||||
// *************************
|
||||
|
||||
VoiceThread vc = new VoiceThread("Welcome to you teck logger! Use at your own risk.");
|
||||
vc.start();
|
||||
SpeakString vc = new SpeakString("Welcome to you teck logger! Use at your own risk.");
|
||||
|
||||
// Actions to take when window is closing
|
||||
addWindowListener(new WindowAdapter() {
|
||||
|
@ -159,6 +164,23 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
getMapsMenu.add(loadMapFive);
|
||||
menuBar.add(getMapsMenu);
|
||||
|
||||
|
||||
// ****************************************
|
||||
// Add menu item to save maps to the utec
|
||||
// ****************************************
|
||||
JMenu setMapsMenu = new JMenu("Save Map");
|
||||
saveMapOne.addActionListener(this);
|
||||
saveMapTwo.addActionListener(this);
|
||||
saveMapThree.addActionListener(this);
|
||||
saveMapFour.addActionListener(this);
|
||||
saveMapFive.addActionListener(this);
|
||||
setMapsMenu.add(saveMapOne);
|
||||
setMapsMenu.add(saveMapTwo);
|
||||
setMapsMenu.add(saveMapThree);
|
||||
setMapsMenu.add(saveMapFour);
|
||||
setMapsMenu.add(saveMapFive);
|
||||
menuBar.add(setMapsMenu);
|
||||
|
||||
// ***************************************
|
||||
// Add a menu item for comm port selection
|
||||
// ***************************************
|
||||
|
@ -203,7 +225,7 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
bottomPanel = new BottomUtecControl();
|
||||
|
||||
|
||||
this.topTabbedPane.add("Graph Data", new RealTimeData());
|
||||
this.topTabbedPane.add("Dashboard", new RealTimeData());
|
||||
this.topTabbedPane.add("Timing Data", new MapJPanel(MapJPanel.TIMINGMAP));
|
||||
this.topTabbedPane.add("Fuel Data", new MapJPanel(MapJPanel.FUELMAP));
|
||||
this.topTabbedPane.add("Boost Data", new MapJPanel(MapJPanel.BOOSTMAP));
|
||||
|
@ -327,6 +349,30 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
UtecInterface.getMap(5, this);
|
||||
}
|
||||
|
||||
else if (cmd.equals("Save To Map #1")) {
|
||||
System.out.println("Starting to save map #1");
|
||||
UtecInterface.uploadMap(1, DataManager.getCurrentMapData());
|
||||
}
|
||||
|
||||
else if (cmd.equals("Save To Map #2")) {
|
||||
System.out.println("Starting to save map #2");
|
||||
UtecInterface.uploadMap(2, DataManager.getCurrentMapData());
|
||||
}
|
||||
|
||||
else if (cmd.equals("Save To Map #3")) {
|
||||
System.out.println("Starting to save map #3");
|
||||
UtecInterface.uploadMap(3, DataManager.getCurrentMapData());
|
||||
}
|
||||
|
||||
else if (cmd.equals("Save To Map #4")) {
|
||||
System.out.println("Starting to save map #4");
|
||||
UtecInterface.uploadMap(4, DataManager.getCurrentMapData());
|
||||
}
|
||||
|
||||
else if (cmd.equals("Save To Map #5")) {
|
||||
System.out.println("Starting to save map #5");
|
||||
UtecInterface.uploadMap(5, DataManager.getCurrentMapData());
|
||||
}
|
||||
else if (cmd.equals("Exit")) {
|
||||
// Use interface to finally close the connection to the Utec
|
||||
UtecInterface.closeConnection();
|
||||
|
@ -407,7 +453,7 @@ public class JutecGUI extends JFrame implements ActionListener,GetMapFromUtecLis
|
|||
System.out.println("Key Code entered:"+charCodeInt);
|
||||
|
||||
//Pass along command to the UTEC
|
||||
UtecInterface.sendDataToUtec(charCodeInt);
|
||||
UtecInterface.sendCommandToUtec(charCodeInt);
|
||||
}
|
||||
|
||||
// Empty out the text field
|
||||
|
|
|
@ -36,14 +36,25 @@ public class DataManager {
|
|||
}
|
||||
|
||||
public static void setFuelMapValue(int row, int col, double value){
|
||||
currentMapData.setFuelMapValue(row, col, value);
|
||||
if(currentMapData != null){
|
||||
currentMapData.setFuelMapValue(row, col, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setBoostMapValue(int row, int col, double value){
|
||||
currentMapData.setBoostMapValue(row, col, value);
|
||||
if(currentMapData != null){
|
||||
currentMapData.setBoostMapValue(row, col, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setTimingMapValue(int row, int col, double value){
|
||||
currentMapData.setTimingMapValue(row, col, value);
|
||||
if(currentMapData != null){
|
||||
currentMapData.setTimingMapValue(row, col, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static UtecMapData getCurrentMapData() {
|
||||
return currentMapData;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,8 @@ import java.awt.geom.*;
|
|||
import javax.swing.*;
|
||||
|
||||
import enginuity.logger.utec.gui.bottomControl.*;
|
||||
import enginuity.tts.VoiceThread;
|
||||
import enginuity.logger.utec.properties.UtecProperties;
|
||||
import enginuity.tts.SpeakString;
|
||||
import enginuity.logger.utec.commEvent.*;
|
||||
import enginuity.logger.utec.commInterface.UtecInterface;
|
||||
|
||||
|
@ -16,18 +17,8 @@ import enginuity.logger.utec.commInterface.UtecInterface;
|
|||
*/
|
||||
public class RealTimeData extends JComponent implements CommListener{
|
||||
|
||||
//Buttons to be used
|
||||
private JButton openButton;
|
||||
private JButton closeButton;
|
||||
private JButton startButton;
|
||||
private JButton stopButton;
|
||||
|
||||
//Text areas to be used
|
||||
private JTextArea textFromUtec;
|
||||
|
||||
//Recieved utec data, start values are zero
|
||||
public String[] stringData = {"0","0","0","0","0","0"};
|
||||
public double[] doubleData = {0,0,0,0,0,0};
|
||||
public double[] doubleData = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
|
||||
//Graph Constants
|
||||
private double maxHeight = 370;
|
||||
|
@ -35,6 +26,11 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
//Window Constants
|
||||
private int windowHeight = 400;
|
||||
|
||||
// Needed data
|
||||
String[] indexes = UtecProperties.getProperties("utec.loggerIndexes");
|
||||
String[] titles = UtecProperties.getProperties("utec.loggerTitles");
|
||||
String[] dataRanges = UtecProperties.getProperties("utec.loggerDataRanges");
|
||||
|
||||
//Constructor
|
||||
public RealTimeData() {
|
||||
UtecInterface.addListener(this);
|
||||
|
@ -56,10 +52,10 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
Font font = new Font("Serif", Font.PLAIN, 20);
|
||||
g2.setFont(font);
|
||||
|
||||
//RPM
|
||||
double max1 = 7500;
|
||||
double min1 = 0;
|
||||
double value1 = doubleData[0];
|
||||
// 0
|
||||
double max1 = (minAndMax(dataRanges[0]))[1];
|
||||
double min1 = (minAndMax(dataRanges[0]))[0];
|
||||
double value1 = doubleData[Integer.parseInt(indexes[0])];
|
||||
double height1 = ((value1 - min1)/(max1 - min1))*maxHeight;
|
||||
double yValue1 = 5 + (maxHeight - height1);
|
||||
double xValueLeft1 = 30;
|
||||
|
@ -69,14 +65,14 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect1);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect1);
|
||||
g2.drawString("RPM:"+(int)value1, (int)xValueLeft1, windowHeight);
|
||||
g2.drawString(titles[0]+":"+(int)value1, (int)xValueLeft1, windowHeight);
|
||||
|
||||
//PSI
|
||||
double max2 = 20;
|
||||
double min2 = -14.7;
|
||||
double value2 = doubleData[1];
|
||||
// 1
|
||||
double max2 = (minAndMax(dataRanges[1]))[1];
|
||||
double min2 = (minAndMax(dataRanges[1]))[0];
|
||||
double value2 = doubleData[Integer.parseInt(indexes[1])];
|
||||
if(value2 > 18.5){
|
||||
VoiceThread vc = new VoiceThread("Max P S I,"+value2);
|
||||
SpeakString vc = new SpeakString("Max P S I,"+value2);
|
||||
vc.start();
|
||||
}
|
||||
double height2 = ((value2 - min2)/(max2 - min2))*maxHeight;
|
||||
|
@ -88,14 +84,14 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect2);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect2);
|
||||
g2.drawString("PSI:"+value2, (int)xValueLeft2, windowHeight);
|
||||
g2.drawString(titles[1]+":"+value2, (int)xValueLeft2, windowHeight);
|
||||
|
||||
//KNOCK
|
||||
double max3 = 20;
|
||||
double min3 = 0;
|
||||
double value3 = doubleData[2];
|
||||
// 2
|
||||
double max3 = (minAndMax(dataRanges[2]))[1];
|
||||
double min3 = (minAndMax(dataRanges[2]))[0];
|
||||
double value3 = doubleData[Integer.parseInt(indexes[2])];
|
||||
if(value3 > 0){
|
||||
VoiceThread vc = new VoiceThread("knock, count "+(int)value3);
|
||||
SpeakString vc = new SpeakString("knock, count "+(int)value3);
|
||||
vc.start();
|
||||
}
|
||||
double height3 = ((value3 - min3)/(max3 - min3))*maxHeight;
|
||||
|
@ -107,12 +103,12 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect3);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect3);
|
||||
g2.drawString("KNOCK:"+(int)value3, (int)xValueLeft3, windowHeight);
|
||||
g2.drawString(titles[2]+":"+(int)value3, (int)xValueLeft3, windowHeight);
|
||||
|
||||
//IGN
|
||||
double max4 = 80;
|
||||
double min4 = 0;
|
||||
double value4 = doubleData[3];
|
||||
// 3
|
||||
double max4 = (minAndMax(dataRanges[3]))[1];
|
||||
double min4 = (minAndMax(dataRanges[3]))[0];
|
||||
double value4 = doubleData[Integer.parseInt(indexes[3])];
|
||||
double height4 = ((value4 - min4)/(max4 - min4))*maxHeight;
|
||||
double yValue4 = 5 + (maxHeight - height4);
|
||||
double xValueLeft4 = 400;
|
||||
|
@ -122,14 +118,14 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect4);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect4);
|
||||
g2.drawString("IGN:"+value4, (int)xValueLeft4, windowHeight);
|
||||
g2.drawString(titles[3]+":"+value4, (int)xValueLeft4, windowHeight);
|
||||
|
||||
//DUTY
|
||||
double max5 = 105;
|
||||
double min5 = 0;
|
||||
double value5 = doubleData[4];
|
||||
// 4
|
||||
double max5 = (minAndMax(dataRanges[4]))[1];
|
||||
double min5 = (minAndMax(dataRanges[4]))[0];
|
||||
double value5 = doubleData[Integer.parseInt(indexes[4])];
|
||||
if(value5 > 98){
|
||||
VoiceThread vc = new VoiceThread("Max duty "+value5);
|
||||
SpeakString vc = new SpeakString("Max duty "+value5);
|
||||
vc.start();
|
||||
}
|
||||
double height5 = ((value5 - min5)/(max5 - min5))*maxHeight;
|
||||
|
@ -141,12 +137,12 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect5);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect5);
|
||||
g2.drawString("DUTY:"+value5, (int)xValueLeft5, windowHeight);
|
||||
g2.drawString(titles[4]+":"+value5, (int)xValueLeft5, windowHeight);
|
||||
|
||||
//AFR
|
||||
double max6 = 26;
|
||||
double min6 = 0;
|
||||
double value6 = doubleData[5];
|
||||
// 5
|
||||
double max6 = (minAndMax(dataRanges[5]))[1];
|
||||
double min6 = (minAndMax(dataRanges[5]))[0];
|
||||
double value6 = doubleData[Integer.parseInt(indexes[5])];
|
||||
double height6 = ((value6 - min6)/(max6 - min6))*maxHeight;
|
||||
double yValue6 = 5 + (maxHeight - height6);
|
||||
double xValueLeft6 = 660;
|
||||
|
@ -156,15 +152,24 @@ public class RealTimeData extends JComponent implements CommListener{
|
|||
g2.fill(rect6);
|
||||
g2.setPaint(Color.BLACK);
|
||||
g2.draw(rect6);
|
||||
g2.drawString("AFR:"+value6, (int)xValueLeft6, windowHeight);
|
||||
g2.drawString(titles[5]+":"+value6, (int)xValueLeft6, windowHeight);
|
||||
|
||||
}
|
||||
|
||||
public void getCommEvent(CommEvent e){
|
||||
if(e.isLoggerData()){
|
||||
stringData = e.getData();
|
||||
doubleData = e.getDoubleData();
|
||||
this.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
private double[] minAndMax(String value){
|
||||
String[] temp = value.split("<>");
|
||||
|
||||
double[] values = new double[2];
|
||||
values[0] = Double.parseDouble(temp[0]);
|
||||
values[1] = Double.parseDouble(temp[1]);
|
||||
|
||||
return values;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package enginuity.logger.utec.properties;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class UtecProperties {
|
||||
private static Properties properties = new Properties();
|
||||
|
||||
private static boolean init = false;
|
||||
|
||||
public static String[] getProperties(String name){
|
||||
if(init == false){
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
String propertyString = properties.getProperty(name);
|
||||
String[] values = propertyString.split(",");
|
||||
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
private static void init(){
|
||||
try {
|
||||
properties.load(new FileInputStream("utec/utec.properties"));
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
init = true;
|
||||
}
|
||||
}
|
|
@ -6,22 +6,33 @@
|
|||
*/
|
||||
package enginuity.tts;
|
||||
|
||||
import enginuity.logger.utec.properties.UtecProperties;
|
||||
|
||||
/**
|
||||
* @author botman
|
||||
*
|
||||
* TODO To change the template for this generated type comment go to
|
||||
* Window - Preferences - Java - Code Style - Code Templates
|
||||
*/
|
||||
public class VoiceThread extends Thread{
|
||||
public class SpeakString extends Thread{
|
||||
|
||||
private String message = null;
|
||||
|
||||
public VoiceThread(String message){
|
||||
public SpeakString(String message){
|
||||
this.message = message;
|
||||
|
||||
this.speakNow();
|
||||
}
|
||||
|
||||
public void run(){
|
||||
SpeakKnock.speakString(message);
|
||||
}
|
||||
|
||||
public void speakNow(){
|
||||
String[] toSpeak = UtecProperties.getProperties("utec.sound");
|
||||
boolean parsedBoolean = Boolean.parseBoolean(toSpeak[0]);
|
||||
if(parsedBoolean){
|
||||
this.start();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
utec.sound=false
|
||||
utec.dataTransmissionPauseMS=100
|
||||
utec.afrIndex=13
|
||||
utec.startLogging=33
|
||||
utec.startMapDownload=101,*,19,19,*
|
||||
utec.startMapUpload=101,*,21,13,*,13
|
||||
utec.resetUtec=24,24,24
|
||||
utec.loggerIndexes=0,1,5,6,7,13
|
||||
utec.loggerTitles=RPM,PSI,KNOCK,IGN,DUTY,AFR
|
||||
utec.loggerDataRanges=0<>7500,-14.7<>26,0<>10,0<>80,0<>110,0<>26
|
Loading…
Reference in New Issue