/* MultiWii EZ-GUI
Copyright (C) <2012> Bartosz Szczygiel (eziosoft)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.ezio.multiwii.graph;
import java.util.ArrayList;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.WindowManager;
import com.actionbarsherlock.app.SherlockActivity;
//import com.actionbarsherlock.view.Menu;
//import com.actionbarsherlock.view.MenuInflater;
//import com.actionbarsherlock.view.MenuItem;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;
import com.ezio.multiwii.R;
import com.ezio.multiwii.app.App;
import com.ezio.multiwii.graph.GraphView.GraphViewData;
import com.ezio.multiwii.graph.GraphView.LegendAlign;
import com.ezio.multiwii.graph.GraphViewSeries.GraphViewSeriesStyle;
public class PadGraphsActivity {
private boolean killme = false;
public Activity mContext;
public App app;
public Handler mHandler;
LineGraphView graphView;
ArrayList<GraphViewSeries> series = new ArrayList<GraphViewSeries>();
Random rnd = new Random();
final static int REFRESH_RATE = 5000;
int CurentPosition = 0;
int NextLimit = REFRESH_RATE;
boolean pause = false;
private Runnable update = new Runnable() {
@Override
public void run() {
app.mw.ProcessSerialData(app.loggingON);
app.frskyProtocol.ProcessSerialData(false);
app.Frequentjobs();
update();
app.mw.SendRequest(app.MainRequestMethod);
if (!killme)
mHandler.postDelayed(update, 100);
if(app.D) Log.d(app.TAG, "loop "+this.getClass().getName());
}
};
public void update() {
if (!pause) {
CurentPosition++;
if (CurentPosition == NextLimit) {
for (GraphViewSeries s : series) {
s.resetData(new GraphViewData[] { new GraphViewData(CurentPosition, 0) });
}
NextLimit = CurentPosition + REFRESH_RATE;
}
// debug
// app.mw.ax = rnd.nextFloat();
// app.mw.ay = rnd.nextFloat();
// app.mw.az = rnd.nextFloat();
//
// app.mw.gx = rnd.nextFloat();
// app.mw.gy = rnd.nextFloat();
// app.mw.gz = rnd.nextFloat();
//
// app.mw.magx = rnd.nextFloat();
// app.mw.magy = rnd.nextFloat();
// app.mw.magz = rnd.nextFloat();
//
// app.mw.alt = rnd.nextFloat();
// app.mw.head = rnd.nextFloat();
// //////
for (GraphViewSeries s : series) {
if (s.key.equals(app.ACCROLL))
s.appendData(new GraphViewData(CurentPosition, app.mw.ax), true);
if (s.key.equals(app.ACCPITCH))
s.appendData(new GraphViewData(CurentPosition, app.mw.ay), true);
if (s.key.equals(app.ACCZ))
s.appendData(new GraphViewData(CurentPosition, app.mw.az), true);
// /
if (s.key.equals(app.GYROROLL))
s.appendData(new GraphViewData(CurentPosition, app.mw.gx), true);
if (s.key.equals(app.GYROPITCH))
s.appendData(new GraphViewData(CurentPosition, app.mw.gy), true);
if (s.key.equals(app.GYROYAW))
s.appendData(new GraphViewData(CurentPosition, app.mw.gz), true);
// /
if (s.key.equals(app.MAGROLL))
s.appendData(new GraphViewData(CurentPosition, app.mw.magx), true);
if (s.key.equals(app.MAGPITCH))
s.appendData(new GraphViewData(CurentPosition, app.mw.magy), true);
if (s.key.equals(app.MAGYAW))
s.appendData(new GraphViewData(CurentPosition, app.mw.magz), true);
// /
if (s.key.equals(app.ALT))
s.appendData(new GraphViewData(CurentPosition, app.mw.alt), true);
if (s.key.equals(app.HEAD))
s.appendData(new GraphViewData(CurentPosition, app.mw.head), true);
}
}
}
protected void onCreate(Bundle savedInstanceState) {
}
void graphInit() {
CurentPosition = 0;
NextLimit = REFRESH_RATE;
if (graphView == null) {
graphView = new LineGraphView(mContext.getApplicationContext(), mContext.getString(R.string.Graphs));
graphView.setViewPort(1, 100);
graphView.setScalable(true);
graphView.setShowLegend(true);
graphView.setLegendAlign(LegendAlign.BOTTOM);
LinearLayout a = (LinearLayout) mContext.findViewById(R.id.graphy);
a.addView(graphView);
}
for (GraphViewSeries s : series) {
graphView.removeSeries(s);
}
series = new ArrayList<GraphViewSeries>();
String gr = app.GraphsToShow;
if (gr.contains(app.ACCROLL))
series.add(new GraphViewSeries(app.ACCROLL, mContext.getString(R.string.ACCROLL), new GraphViewSeriesStyle(Color.RED, 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.ACCPITCH))
series.add(new GraphViewSeries(app.ACCPITCH, mContext.getString(R.string.ACCPITCH), new GraphViewSeriesStyle(Color.GREEN, 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.ACCZ))
series.add(new GraphViewSeries(app.ACCZ, mContext.getString(R.string.ACCZ), new GraphViewSeriesStyle(Color.BLUE, 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.GYROROLL))
series.add(new GraphViewSeries(app.GYROROLL, mContext.getString(R.string.GYROROLL), new GraphViewSeriesStyle(Color.rgb(196, 201, 0), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.GYROPITCH))
series.add(new GraphViewSeries(app.GYROPITCH, mContext.getString(R.string.GYROPITCH), new GraphViewSeriesStyle(Color.rgb(0, 255, 255), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.GYROYAW))
series.add(new GraphViewSeries(app.GYROYAW, mContext.getString(R.string.GYROYAW), new GraphViewSeriesStyle(Color.rgb(255, 0, 255), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.MAGROLL))
series.add(new GraphViewSeries(app.MAGROLL, mContext.getString(R.string.MAGROLL), new GraphViewSeriesStyle(Color.rgb(52, 101, 144), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.MAGPITCH))
series.add(new GraphViewSeries(app.MAGPITCH, mContext.getString(R.string.MAGPITCH), new GraphViewSeriesStyle(Color.rgb(98, 51, 149), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.MAGYAW))
series.add(new GraphViewSeries(app.MAGYAW, mContext.getString(R.string.MAGYAW), new GraphViewSeriesStyle(Color.rgb(150, 100, 49), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.ALT))
series.add(new GraphViewSeries(app.ALT, mContext.getString(R.string.ALT), new GraphViewSeriesStyle(Color.rgb(130, 122, 125), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
if (gr.contains(app.HEAD))
series.add(new GraphViewSeries(app.HEAD, mContext.getString(R.string.HEAD), new GraphViewSeriesStyle(Color.rgb(255, 226, 124), 3), new GraphViewData[] { new GraphViewData(0, 0) }));
for (GraphViewSeries s : series) {
graphView.addSeries(s);
}
//setContentView(graphView);
}
protected void onResume() {
graphInit();
//killme = false;
//mHandler.postDelayed(update, 100);
}
protected void onPause() {
mHandler.removeCallbacks(null);
//killme = true;
}
// /////menu////////
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = mContext.getMenuInflater();
inflater.inflate(R.menu.menu_graphs, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.MenuGraphsShow) {
mContext.startActivity(new Intent(mContext.getApplicationContext(), SelectToShowActivity.class));
return true;
}
if (item.getItemId() == R.id.MenuGraphsPause) {
pause = !pause;
}
return false;
}
// ///menu end//////
public void PauseOnClick() {
pause = !pause;
Button b1 = (Button)mContext.findViewById(R.id.graphy_bt1);
b1.setText(pause?R.string.Started:R.string.Pause);
}
public void ShowOnClick() {
mContext.startActivity(new Intent(mContext.getApplicationContext(), SelectToShowActivity.class));
}
public void show() {
onCreate(null);
onResume();
}
}