package uk.org.smithfamily.mslogger.ecu.simulated; import java.io.*; public class MS1Simulator extends MSSimulator { // Prepopulated FRD file from a previous run static final String fileName = "20110710095409.frd"; @SuppressWarnings("unused") private static final String TAG = "MS1Simulator"; String signature = "MS1/Extra format 029y3 *********"; private static final boolean simulateData = true; private static int cycleCounter = 0; @Override void process(final int b, final InputStream is, final OutputStream os) throws IOException { // Log.i(TAG, "received " + b); switch (b) { case 'S': speedLimitedWrite(os, signature.getBytes()); break; case 'R': speedLimitedWrite(os, getNextPageOfVars()); break; case 'P': final int pageIndex = is.read(); final int fetch = is.read(); if (fetch == 'V') { speedLimitedWrite(os, getFirmwarePage(getPageNo(pageIndex))); } break; // TODO: add page write processing } } private int getPageNo(final int pageIndex) { switch (pageIndex) { case 1: return 1; case 2: return 2; case 3: return 3; case 0: return 4; case 4: return 5; case 5: return 6; case 6: return 7; case 7: return 8; case 8: return 9; default: return 1; } } @Override public String getSignature() { return signature; } @Override public String getFirmwareFile() { return "uk.org.smithfamily.mslogger.ecuDef.gen.Msns_extra29y.firmware"; } @Override public String getFRDFilename() { return fileName; } @Override public int getBaudRate() { // Should really be 9600, but keep it nearer to what BT does. return 5000; } @Override public int getFirmwarePageSize(final int pageNo) { // All MS1 pages are the same size return 189; } @Override protected byte[] getNextPageOfVars() throws IOException { cycleCounter++; final byte[] buffer = super.getNextPageOfVars(); if (simulateData) { buffer[22] = (byte) (buffer[22] + ((byte) (cycleCounter % 32) - 3)); // RpmHiRes buffer[6] = (byte) (buffer[6] + ((cycleCounter % 17) - 2)); // Coolant buffer[9] = (byte) ((buffer[9] + (cycleCounter % 8)) - 4);// egoADC buffer[4] = (byte) ((buffer[4] + (cycleCounter % 10)) - 4);// mapADC buffer[5] = (byte) ((buffer[5] + (cycleCounter % 6)) - 4);// matADC } return buffer; } }