package uk.org.smithfamily.mslogger.activity;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import uk.org.smithfamily.mslogger.ApplicationSettings;
import uk.org.smithfamily.mslogger.R;
import uk.org.smithfamily.mslogger.ecuDef.Megasquirt;
import uk.org.smithfamily.mslogger.ecuDef.TableManager;
import uk.org.smithfamily.mslogger.log.DebugLogManager;
import android.app.Activity;
import android.content.*;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
/**
* Activity that calibrate the TPS of the Megasquirt
*/
public class CalibrateActivity extends Activity
{
private static final String THROTTLEFACTOR_INC = "throttlefactor.inc";
private static final String HEADER =
"; MSLogger-generated Linear Throttle Calibration\n" +
"; Written on %s\n" +
";\n" +
"; Low ADC = %d High ADC = %d\n" +
";\n" +
"THROTTLEFACTOR:\n" +
"\t\t\t; ADC" ;
private int minTPS = 256;
private int maxTPS = 0;
private TextView minValView;
private TextView curValView;
private TextView maxValView;
private ProgressBar tpsDisplay;
private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
int currentTPS = ApplicationSettings.INSTANCE.getEcuDefinition().getCurrentTPS();
updateWithRaw(currentTPS);
}
};
/**
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.calibrate);
Button button = (Button) findViewById(R.id.ConfirmButton);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
saveValues();
finish();
}
});
minValView = (TextView) findViewById(R.id.MinValue);
curValView = (TextView) findViewById(R.id.CurrentValue);
maxValView = (TextView) findViewById(R.id.MaxValue);
tpsDisplay = (ProgressBar) findViewById(R.id.TPSPosition);
IntentFilter dataFilter = new IntentFilter(Megasquirt.NEW_DATA);
this.registerReceiver(mReceiver, dataFilter);
}
/**
*
*/
@Override
protected void onDestroy()
{
super.onDestroy();
this.unregisterReceiver(mReceiver);
}
/**
*
* @param raw
*/
private void updateWithRaw(int raw)
{
if (raw < minTPS)
{
minTPS = raw;
}
if (raw > maxTPS)
{
maxTPS = raw;
}
minValView.setText(Integer.toString(minTPS));
curValView.setText(Integer.toString(raw));
maxValView.setText(Integer.toString(maxTPS));
tpsDisplay.setMax(Math.abs(maxTPS - minTPS));
tpsDisplay.setProgress(Math.abs(raw - minTPS));
}
/**
*
*/
private void saveValues()
{
File dataFile = new File(ApplicationSettings.INSTANCE.getDataDir(),THROTTLEFACTOR_INC);
try
{
PrintWriter pw = new PrintWriter(new FileWriter(dataFile));
String now = SimpleDateFormat.getDateTimeInstance().format(new Date());
String header = String.format(HEADER,now,minTPS,maxTPS);
pw.println(header);
for (int x = 0; x < 256; x++)
{
pw.println(String.format("\tDB\t%3dT\t; %3d", getPercentage(x),x));
}
pw.close();
TableManager.INSTANCE.flushTable(THROTTLEFACTOR_INC);
}
catch (IOException e)
{
DebugLogManager.INSTANCE.logException(e);
}
}
/**
*
* @param x
* @return
*/
private int getPercentage(int x)
{
if (x <= minTPS)
{
return 0;
}
if (x >= maxTPS)
{
return 100;
}
return (x - minTPS) * 100 / (maxTPS - minTPS);
}
}