Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 89 → Rev 90

/Android Development/IOIODebugger/src/ioio/debugger/AddIAActivity.java
0,0 → 1,88
package ioio.debugger;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
 
public class AddIAActivity extends Activity implements OnClickListener {
 
private Spinner _spinnerPin;
private Spinner _spinnerFreq;
private Button _btnAdd;
private Integer pin;
private long freq;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.class_ia_activity);
_spinnerPin = (Spinner)findViewById(R.id.IAspinnerPin);
_spinnerFreq = (Spinner)findViewById(R.id.IAspinnerFreq);
_btnAdd = (Button)findViewById(R.id.IAbuttonAdd);
_btnAdd.setOnClickListener(this);
ArrayAdapter<CharSequence> adapterPin = ArrayAdapter.createFromResource(this, R.array.analog_pins, android.R.layout.simple_spinner_item);
adapterPin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerPin.setAdapter(adapterPin);
ArrayAdapter<CharSequence> adapterFreq = ArrayAdapter.createFromResource(this, R.array.refresh_rate, android.R.layout.simple_spinner_item);
adapterFreq.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerFreq.setAdapter(adapterFreq);
_spinnerPin.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String str = parent.getItemAtPosition(pos).toString();
pin = Integer.parseInt(str);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
_spinnerFreq.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String str = parent.getItemAtPosition(pos).toString();
double val = Double.parseDouble(str);
freq = (long)(val*1000);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
}
 
@Override
public void onClick(View v) {
for (Integer i : IOIODebuggerActivity.getOpenedPins()) {
if (i == pin) {
Toast.makeText(this, "Specified pin has already been opened", Toast.LENGTH_SHORT).show();
return;
}
}
 
CreateWidget.addIA(pin, freq);
setResult(RESULT_OK);
finish();
}
}
/Android Development/IOIODebugger/src/ioio/debugger/AddIDActivity.java
0,0 → 1,109
package ioio.debugger;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;
 
public class AddIDActivity extends Activity implements OnClickListener{
 
private Spinner _spinnerPin;
private Spinner _spinnerFreq;
private Spinner _spinnerMode;
private Button _btnAdd;
private Integer pin;
private long freq;
private String mode;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.class_id_activity);
_spinnerPin = (Spinner)findViewById(R.id.IDspinnerPin);
_spinnerFreq = (Spinner)findViewById(R.id.IDspinnerFreq);
_spinnerMode = (Spinner)findViewById(R.id.IDspinnerMode);
_btnAdd = (Button)findViewById(R.id.IDbuttonAdd);
_btnAdd.setOnClickListener(this);
ArrayAdapter<CharSequence> adapterPin = ArrayAdapter.createFromResource(this, R.array.digital_pins, android.R.layout.simple_spinner_item);
adapterPin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerPin.setAdapter(adapterPin);
ArrayAdapter<CharSequence> adapterFreq = ArrayAdapter.createFromResource(this, R.array.refresh_rate, android.R.layout.simple_spinner_item);
adapterFreq.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerFreq.setAdapter(adapterFreq);
ArrayAdapter<CharSequence> adapterMode = ArrayAdapter.createFromResource(this, R.array.digital_in_mode, android.R.layout.simple_spinner_item);
adapterMode.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerMode.setAdapter(adapterMode);
_spinnerPin.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String str = parent.getItemAtPosition(pos).toString();
pin = Integer.parseInt(str);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
_spinnerFreq.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String str = parent.getItemAtPosition(pos).toString();
double val = Double.parseDouble(str);
freq = (long)(val*1000);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
_spinnerMode.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
mode = parent.getItemAtPosition(pos).toString();
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
}
@Override
public void onClick(View v) {
for (Integer i : IOIODebuggerActivity.getOpenedPins()) {
if (i == pin) {
Toast.makeText(this, "Specified pin has already been opened", Toast.LENGTH_SHORT).show();
return;
}
}
 
CreateWidget.addID(pin, freq, mode);
setResult(RESULT_OK);
finish();
}
 
}
/Android Development/IOIODebugger/src/ioio/debugger/AddODActivity.java
0,0 → 1,92
package ioio.debugger;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.Toast;
 
public class AddODActivity extends Activity implements OnClickListener {
 
private Spinner _spinnerPin;
private Spinner _spinnerMode;
private CheckBox _checkMode;
private Button _btnAdd;
private Integer pin;
private String mode;
private boolean openDrain;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.class_od_activity);
_spinnerPin = (Spinner)findViewById(R.id.ODspinnerPin);
_spinnerMode = (Spinner)findViewById(R.id.ODspinnerLevel);
_checkMode = (CheckBox)findViewById(R.id.ODopenDrainMode);
_btnAdd = (Button)findViewById(R.id.ODbuttonAdd);
_btnAdd.setOnClickListener(this);
ArrayAdapter<CharSequence> adapterPin = ArrayAdapter.createFromResource(this, R.array.digital_pins, android.R.layout.simple_spinner_item);
adapterPin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerPin.setAdapter(adapterPin);
ArrayAdapter<CharSequence> adapterMode = ArrayAdapter.createFromResource(this, R.array.digital_out_mode, android.R.layout.simple_spinner_item);
adapterMode.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerMode.setAdapter(adapterMode);
_spinnerPin.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String str = parent.getItemAtPosition(pos).toString();
pin = Integer.parseInt(str);
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
_spinnerMode.setOnItemSelectedListener(new OnItemSelectedListener() {
 
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
mode = parent.getItemAtPosition(pos).toString();
}
 
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
}
 
@Override
public void onClick(View v) {
openDrain = _checkMode.isChecked();
for (Integer i : IOIODebuggerActivity.getOpenedPins()) {
if (i == pin) {
Toast.makeText(this, "Specified pin has already been opened", Toast.LENGTH_SHORT).show();
return;
}
}
CreateWidget.addOD(pin, mode, openDrain);
setResult(RESULT_OK);
finish();
}
}
/Android Development/IOIODebugger/src/ioio/debugger/CreateWidget.java
0,0 → 1,290
package ioio.debugger;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ToggleButton;
import ioio.lib.api.AnalogInput;
import ioio.lib.api.DigitalInput;
import ioio.lib.api.DigitalOutput;
import ioio.lib.api.IOIO;
import ioio.lib.api.exception.ConnectionLostException;
 
public class CreateWidget {
public static void addIA(final Integer pin, final long freq) {
if (!IOIODebuggerActivity.getConnected())
return;
Context ctx = IOIODebuggerActivity.getContext();
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.view_graph_text_widget, IOIODebuggerActivity._viewGroupGraphTextWidget);
final ViewWidgetGraphText viewWidget = new ViewWidgetGraphText();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
viewWidget.setView(v, false, Integer.parseInt(sharedPrefs.getString("pref_graphLength", "100")));
final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
final Double[] data = new Double[1];
Runnable r = new Runnable() {
@Override
public void run() {
IOIODebuggerActivity.addOpenedPin(pin);
viewWidget.setPin(pin);
viewWidget.resetStopSignal();
if (networkMgr.connectedOk())
networkMgr.notifyStartIA(pin, freq);
IOIO ioio = IOIODebuggerActivity.getIOIOInstance();
AnalogInput in = null;
Float volts;
try {
in = ioio.openAnalogInput(pin);
viewWidget.updateStatus("Pin #" + pin.toString() + " : In : Analog : 3.3v");
while (true) {
if (Thread.currentThread().isInterrupted()) {
in.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
break;
}
volts = in.getVoltage();
viewWidget.updateText("Current Voltage: " + volts.toString());
viewWidget.updateData((double)volts);
viewWidget.refreshGraph();
if (networkMgr.connectedOk()) {
data[0] = (double)volts;
networkMgr.sendData(pin, data);
}
Thread.sleep(freq);
}
} catch (ConnectionLostException e) {
viewWidget.updateStatus("Connection Lost");
} catch (InterruptedException e) {
if (in != null)
in.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
} catch (Exception e) {
}
}
};
viewWidget.setRunnable(r);
IOIODebuggerActivity.setViewWidget(viewWidget);
}
public static void addID(final Integer pin, final long freq, final String mode) {
if (!IOIODebuggerActivity.getConnected())
return;
Context ctx = IOIODebuggerActivity.getContext();
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.view_graph_text_widget, IOIODebuggerActivity._viewGroupGraphTextWidget);
final ViewWidgetGraphText viewWidget = new ViewWidgetGraphText();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
viewWidget.setView(v, true, Integer.parseInt(sharedPrefs.getString("pref_graphLength", "100")));
final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
final Double[] data = new Double[1];
Runnable r = new Runnable() {
@Override
public void run() {
IOIODebuggerActivity.addOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStartID(pin, freq, mode);
viewWidget.setPin(pin);
viewWidget.resetStopSignal();
IOIO ioio = IOIODebuggerActivity.getIOIOInstance();
DigitalInput in = null;
viewWidget.updateStatus("Pin #" + pin.toString() + " : In : Digital : 3.3v : " + mode);
try {
if (mode.compareTo("Float") == 0) {
in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.FLOATING);
} else if (mode.compareTo("Pull Down") == 0) {
in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.PULL_DOWN);
} else if (mode.compareTo("Pull Up") == 0) {
in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.PULL_UP);
}
while (true) {
if (Thread.currentThread().isInterrupted()) {
in.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
break;
}
if (in.read()) {
viewWidget.updateText("Current Input: High");
viewWidget.updateData(3.3);
if (networkMgr.connectedOk()) {
data[0] = 3.3;
networkMgr.sendData(pin, data);
}
} else {
viewWidget.updateText("Current Input: Low");
viewWidget.updateData(0.0);
if (networkMgr.connectedOk()) {
data[0] = 0.0;
networkMgr.sendData(pin, data);
}
}
viewWidget.refreshGraph();
Thread.sleep(freq);
}
} catch (ConnectionLostException e) {
viewWidget.updateStatus("Connection Lost");
} catch (InterruptedException e) {
if (in != null)
in.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
}
}
};
viewWidget.setRunnable(r);
IOIODebuggerActivity.setViewWidget(viewWidget);
}
public static void addOD(final Integer pin, final String mode, final boolean openDrain) {
if (!IOIODebuggerActivity.getConnected())
return;
Context ctx = IOIODebuggerActivity.getContext();
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.view_toggle_text_widget, IOIODebuggerActivity._viewGroupToggleTextWidget);
final ViewWidgetToggleText viewWidget = new ViewWidgetToggleText();
viewWidget.setView(v);
ToggleButton toggle = (ToggleButton) viewWidget.getView().findViewById(R.id.layout_toggleText_toggle);
if (mode.compareTo("High") == 0)
toggle.setChecked(true);
else
toggle.setChecked(false);
final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
final Double[] data = new Double[1];
Runnable r = new Runnable() {
boolean outputHigh;
IOIO ioio;
DigitalOutput out;
@Override
public void run() {
IOIODebuggerActivity.addOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStartOD(pin, mode, openDrain);
viewWidget.setPin(pin);
viewWidget.resetStopSignal();
if (mode.compareTo("High") == 0)
outputHigh = true;
else
outputHigh = false;
if (networkMgr.connectedOk()) {
if (outputHigh)
data[0] = 3.3;
else
data[0] = 0.0;
networkMgr.sendData(pin, data);
}
viewWidget.setToggle(outputHigh);
ioio = IOIODebuggerActivity.getIOIOInstance();
try {
if (openDrain && outputHigh)
out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.OPEN_DRAIN, true);
else if (openDrain && !outputHigh)
out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.OPEN_DRAIN, false);
else if (!openDrain && outputHigh)
out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.NORMAL, true);
else // (!openDrain && !outputHigh)
out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.NORMAL, false);
if (openDrain)
viewWidget.updateStatus("Pin #" + pin.toString() + " : Out : Digital : OD : 3.3v");
else
viewWidget.updateStatus("Pin #" + pin.toString() + " : Out : Digital : 3.3v");
ToggleButton toggle = (ToggleButton)viewWidget.getView().findViewById(R.id.layout_toggleText_toggle);
if (toggle.isChecked())
outputHigh = true;
else
outputHigh = false;
toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
outputHigh = true;
} else {
outputHigh = false;
}
if (networkMgr.connectedOk()) {
if (outputHigh)
data[0] = 3.3;
else
data[0] = 0.0;
networkMgr.sendData(pin, data);
}
}
});
while (true) {
if (Thread.currentThread().isInterrupted()) {
out.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
break;
}
if (outputHigh) {
viewWidget.updateText("Current Output: HIGH");
out.write(true);
} else {
viewWidget.updateText("Current Output: LOW");
out.write(false);
}
viewWidget.setToggle(outputHigh);
Thread.sleep(50);
}
} catch (ConnectionLostException e) {
viewWidget.updateStatus("Connection Lost");
} catch (InterruptedException e) {
if (out != null)
out.close();
viewWidget.setStopSignal();
IOIODebuggerActivity.removeOpenedPin(pin);
if (networkMgr.connectedOk())
networkMgr.notifyStopPin(pin);
} catch (Exception e) {
}
}
};
viewWidget.setRunnable(r);
IOIODebuggerActivity.setViewWidget(viewWidget);
}
}
/Android Development/IOIODebugger/src/ioio/debugger/Debug Protocol Details.txt
0,0 → 1,24
Network Debug Protocol Message Type Details:
 
Type# Description
1 General ACK_SUCCESS
2 General ACK_FAILURE
 
 
10 Check if connection is ok
11 Connection ok response
12 Connection not ok response
13 Reset board (hard reset)
50 Start pin
Type: InAnalog Pin:# Freq:#
Type: InDigital Pin:# Freq:# Mode:[Float/Pull Up/Pull Down]
Type: OutDigital Pin:# State:[Low/High] Boolean:[True/False]
51 Stop pin
Pin:#
52 Remove pin
Pin:#
70 Send new data
Pin:# Data:#
/Android Development/IOIODebugger/src/ioio/debugger/GenericXYSeries.java
0,0 → 1,53
package ioio.debugger;
 
import java.util.LinkedList;
import com.androidplot.series.XYSeries;
 
public class GenericXYSeries implements XYSeries {
private int length;
private String title;
private LinkedList<Number> data;
public GenericXYSeries(String str, int len) {
title = str;
length = len;
data = new LinkedList<Number>();
}
@Override
public String getTitle() {
return title;
}
 
@Override
public int size() {
return length;
}
 
@Override
public Number getX(int index) {
return index;
}
 
@Override
public Number getY(int index) {
if (index >= data.size())
return 0;
else
return data.get(index);
}
public void addDataToList(Number num) {
if (data.size() > length)
data.removeFirst();
data.addLast(num);
}
public void clearData() {
data.clear();
}
public LinkedList<Number> getData() {
return data;
}
}
/Android Development/IOIODebugger/src/ioio/debugger/GlobalPreferenceActivity.java
0,0 → 1,70
package ioio.debugger;
 
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceManager;
import android.text.InputType;
 
public class GlobalPreferenceActivity extends android.preference.PreferenceActivity implements OnSharedPreferenceChangeListener {
private EditTextPreference _pref_serverIP;
private EditTextPreference _pref_serverPort;
// private CheckBoxPreference _pref_serverReconnect;
private EditTextPreference _pref_serverReconnectInterval;
private EditTextPreference _pref_graphLength;
private SharedPreferences sharedPrefs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
_pref_serverIP = (EditTextPreference) findPreference("pref_serverIP");
_pref_serverPort = (EditTextPreference) findPreference("pref_serverPort");
// _pref_serverReconnect = (CheckBoxPreference) findPreference("pref_serverReconnect");
_pref_serverReconnectInterval = (EditTextPreference) findPreference("pref_serverReconnectInterval");
_pref_graphLength = (EditTextPreference) findPreference("pref_graphLength");
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
}
 
@Override
public void onResume() {
super.onResume();
// Set the summary text to the current value
_pref_serverIP.setSummary("Current Value: " + sharedPrefs.getString("pref_serverIP", ""));
_pref_serverPort.setSummary("Current Value: " + sharedPrefs.getString("pref_serverPort", ""));
_pref_serverReconnectInterval.setSummary("Current Value: " + sharedPrefs.getString("pref_serverReconnectInterval", ""));
_pref_graphLength.setSummary("Current Value: " + sharedPrefs.getString("pref_graphLength", ""));
_pref_serverPort.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
_pref_graphLength.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
_pref_serverReconnectInterval.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// Change the summary text when the value is changed
if (key.compareTo("pref_serverIP") == 0) {
_pref_serverIP.setSummary("Current Value: " + sharedPreferences.getString(key, ""));
} else if (key.compareTo("pref_serverPort") == 0) {
_pref_serverPort.setSummary("Current Value: " + sharedPreferences.getString(key, ""));
} else if (key.compareTo("pref_serverReconnectInterval") == 0) {
_pref_serverReconnectInterval.setSummary("Current Value: " + sharedPreferences.getString(key, ""));
} else if (key.compareTo("pref_graphLength") == 0) {
_pref_graphLength.setSummary("Current Value: " + sharedPrefs.getString("pref_graphLength", ""));
}
}
}
/Android Development/IOIODebugger/src/ioio/debugger/IOIODebuggerActivity.java
0,0 → 1,663
package ioio.debugger;
 
import java.util.ArrayList;
 
import ioio.lib.api.IOIO;
import ioio.lib.api.IOIOFactory;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.api.exception.IncompatibilityException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
 
public class IOIODebuggerActivity extends Activity {
// Static IOIO instance so other activities can access it
private static IOIO _IOIOInstance;
private static ArrayList<Integer> _openedPins = new ArrayList<Integer>();
// Static variable for passing ViewWidget classes between activities
private static ViewWidget retClass;
// Holds the selected view when the context menu is brought up
private static View currentlySelectedView;
// Resources for allocating new ViewWidgets
private static Context _context;
public static ViewGroup _viewGroupGraphTextWidget;
public static ViewGroup _viewGroupToggleTextWidget;
public static ViewGroup _viewGroupSimpleTextWidget;
// List of all view widgets to display
ArrayList<ViewWidget> _viewList = new ArrayList<ViewWidget>();
private static Boolean _connected = false;
private static Handler _handler = new Handler();
private Boolean _connectionReset = true;
private Thread _connectionMonitor;
private TextView _status;
private TextView _statusServer;
private LinearLayout _mainLayout;
private LinearLayout _rootLayout;
private ProgressBar _statusProgress;
// Identifiers for started activities
static final int ACTIVITY_INPUT_ANALOG = 0;
static final int ACTIVITY_INPUT_DIGITAL = 1;
static final int ACTIVITY_INPUT_PULSE = 2;
static final int ACTIVITY_OUTPUT_DIGITAL = 3;
static final int ACTIVITY_OUTPUT_PULSE = 4;
// Connection manager to the server
private static NetworkClientConnectionHandler _networkMgr;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
if (item.getItemId() != R.id.menuOptions &&
item.getItemId() != R.id.menuShowPinDetails &&
item.getItemId() != R.id.menuConnect &&
item.getItemId() != R.id.menuDisconnectFromServer &&
!_connected) {
Toast.makeText(this, "IOIO board not connected", Toast.LENGTH_SHORT).show();
return true;
}
switch (item.getItemId()) {
case R.id.addIA:
// Show activity to add new monitoring instance
startActivityForResult(new Intent(this, AddIAActivity.class), ACTIVITY_INPUT_ANALOG);
return true;
case R.id.addID:
// Show activity to add new monitoring instance
startActivityForResult(new Intent(this, AddIDActivity.class), ACTIVITY_INPUT_DIGITAL);
return true;
case R.id.addOD:
// Show activity to add new monitoring instance
startActivityForResult(new Intent(this, AddODActivity.class), ACTIVITY_OUTPUT_DIGITAL);
return true;
case R.id.menuOptions:
// Show options/preferences menu
startActivity(new Intent(this, GlobalPreferenceActivity.class));
return true;
case R.id.menuShowPinDetails:
// Pullup a list of pin and their details
startActivity(new Intent(this, PinDetailActivity.class));
return true;
case R.id.menuHardReset:
hardReset();
return true;
case R.id.menuResetMonitor:
// Send command to clear all temp stored data
clearAllMonitoredData();
return true;
case R.id.menuDisconnectFromServer:
// Disconnect from the server if connected
if (_networkMgr.connectedOk())
_networkMgr.disconnectFromServer();
return true;
case R.id.menuPauseAll:
pauseAll();
return true;
case R.id.menuResumeAll:
resumeAll();
return true;
case R.id.menuConnect:
// Initiate connection to Netty server
connectToServer();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
/** Create a context menu that comes up on selection of a view */
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.viewcontextmenu, menu);
currentlySelectedView = v;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
ViewWidget vw;
// Operates on the individual widget views depending on the option selected
switch (item.getItemId()) {
case R.id.menuContextPause:
stopViewWidget(currentlySelectedView);
return true;
case R.id.menuContextResume:
startViewWidget(currentlySelectedView);
return true;
case R.id.menuContextRemove:
removeViewWidget(currentlySelectedView);
return true;
case R.id.menuContextMoveDown:
// Find the selected view
for (int i = 0; i < _viewList.size()-1; i++) {
vw = _viewList.get(i);
if (vw.getView() == currentlySelectedView) {
// Relocate the widget in the list
_viewList.remove(i);
_viewList.add(i+1, vw);
// Remove view and divider after the view
_mainLayout.removeViewAt(i*2);
_mainLayout.removeViewAt(i*2);
// Add a new divider
addDivider(i*2+1);
// Add the view
_mainLayout.addView(vw.getView(), i*2+2);
break;
}
}
return true;
case R.id.menuContextMoveUp:
// Find the selected view
for (int i = 1; i < _viewList.size(); i++) {
vw = _viewList.get(i);
if (vw.getView() == currentlySelectedView) {
// Relocate the widget in the list
_viewList.remove(i);
_viewList.add(i-1, vw);
// Remove view and divider before the view
_mainLayout.removeViewAt(i*2);
_mainLayout.removeViewAt(i*2-1);
// Add a new divider
addDivider(i*2-2);
// Add the view
_mainLayout.addView(vw.getView(), i*2-2);
break;
}
}
return true;
default:
return super.onContextItemSelected(item);
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_status = (TextView)findViewById(R.id.textStatus);
_mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
_rootLayout = (LinearLayout)findViewById(R.id.rootLayout);
_statusProgress = (ProgressBar)findViewById(R.id.progressStatus);
_statusServer = new TextView(this);
_rootLayout.addView(_statusServer, 0);
_statusServer.setVisibility(8);
_context = getApplicationContext();
_viewGroupSimpleTextWidget = (ViewGroup) findViewById(R.id.layout_simpleText_root);
_viewGroupGraphTextWidget = (ViewGroup) findViewById(R.id.layout_graphText_root);
_viewGroupToggleTextWidget = (ViewGroup) findViewById(R.id.layout_toggleText_root);
_networkMgr = new NetworkClientConnectionHandler(this);
// Start connection monitoring thread for the IOIO board
connectToIOIOBoard();
}
@Override
public void onDestroy() {
super.onDestroy();
// Stop all monitoring update threads
for (ViewWidget vw : _viewList)
vw.stopThread();
_connectionMonitor.interrupt();
_IOIOInstance.disconnect();
_openedPins.clear();
_connected = false;
_networkMgr.stopAutoReconnect();
// Disconnect from server if connected
if (_networkMgr.isConnected())
_networkMgr.disconnectFromServer();
}
 
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED) {
return;
} else {
processAddWidget(requestCode);
}
}
/** Called by internal/external functions to add a widget after setting retClass
*
* @param requestCode one of the static codes from this class eg. ACTIVITY_INPUT_ANALOG
*/
public void processAddWidget(final int requestCode) {
_handler.post(new Runnable() {
@Override
public void run() {
if (_mainLayout.getChildCount() != 0) {
// Insert a divider before each entry but not the first entry
addDivider(_mainLayout.getChildCount());
}
switch (requestCode) {
case ACTIVITY_INPUT_ANALOG:
_mainLayout.addView(retClass.getView());
retClass.startThread();
_viewList.add(retClass);
registerForContextMenu(retClass.getView());
return;
case ACTIVITY_INPUT_DIGITAL:
_mainLayout.addView(retClass.getView());
retClass.startThread();
_viewList.add(retClass);
registerForContextMenu(retClass.getView());
return;
case ACTIVITY_OUTPUT_DIGITAL:
_mainLayout.addView(retClass.getView());
retClass.startThread();
_viewList.add(retClass);
registerForContextMenu(retClass.getView());
return;
}
}
});
}
/** Start the server using values from shared preferences */
private void connectToServer() {
// Show the server status message
_statusServer.setVisibility(0);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String server = sharedPrefs.getString("pref_serverIP", "");
int port = Integer.parseInt(sharedPrefs.getString("pref_serverPort", "0"));
boolean reconnect = sharedPrefs.getBoolean("pref_serverReconnect", false);
int reconnectInterval = Integer.parseInt(sharedPrefs.getString("pref_serverReconnectInterval", "3000"));
get_networkMgr().setConnectionSettings(server, port, reconnect, reconnectInterval);
get_networkMgr().startConnect();
}
/** Change the server status message text */
public void updateServerStatus(final String str) {
_handler.post(new Runnable() {
@Override
public void run() {
_statusServer.setText(str);
}
});
}
/** Starts the thread that monitors the connection to the IOIO board */
private void connectToIOIOBoard() {
_connectionMonitor = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
// Check if a new instance of IOIO needs to be created
// Reset is only triggered when a disconnect happens
if (_connectionReset) {
updateStatus("Waiting to connect to the IOIO board...");
toggleProgressOn();
_IOIOInstance = IOIOFactory.create();
_connectionReset = false;
}
// Check if thread should keep running
if (Thread.currentThread().isInterrupted()) {
break;
}
// Attempt to connect to the IOIO board
// If the board was disconnected, ConnectionLostException is thrown
_IOIOInstance.waitForConnect();
_connected = true;
updateStatus("Connected to the IOIO board");
toggleProgressOff();
Thread.sleep(500);
} catch (ConnectionLostException e) {
// Reset the connection so reconnection attempts can be made
_connected = false;
_connectionReset = true;
connectionReset();
updateStatus("Connection to the IOIO board has be lost");
} catch (IncompatibilityException e) {
_connected = false;
_connectionReset = true;
connectionReset();
updateStatus("Connected IOIO board is incompatible");
} catch (InterruptedException e) {
break;
}
}
}
});
_connectionMonitor.start();
}
/** Called when the connection to the IOIO board is reset */
private void connectionReset() {
_handler.post(new Runnable() {
@Override
public void run() {
// Stop all threads and remove all views
for (ViewWidget view : _viewList) {
view.stopThread();
if (_networkMgr.connectedOk())
_networkMgr.notifyRemovePin(view.getPin());
}
_openedPins.clear();
_mainLayout.removeAllViews();
_viewList.clear();
}
});
}
/** Adds a divider at location in mainLayout */
private void addDivider(int index) {
View ruler = new View(this);
ruler.setBackgroundColor(0xAAAAAAAA);
_mainLayout.addView(ruler, index, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 2));
}
private void pauseAll() {
_handler.post(new Runnable() {
@Override
public void run() {
if (_viewList.size() != 0) {
for (ViewWidget vw : _viewList) {
if (vw.getThread().isAlive())
vw.stopThread();
}
}
}
});
}
private void resumeAll() {
_handler.post(new Runnable() {
@Override
public void run() {
if (_viewList.size() != 0) {
for (ViewWidget vw : _viewList) {
if (!vw.getThread().isAlive())
vw.startThread();
}
}
}
});
}
/** Clear all stored data */
private void clearAllMonitoredData() {
for (ViewWidget vw : _viewList) {
vw.clearData();
}
}
/**
* A soft reset means "return everything to its initial state".
* This includes closing all interfaces obtained from this IOIO
* instance, and in turn freeing all resources. All pins (save
* the stat LED) will become floating inputs. All modules will
* be powered off. These operations are done without dropping
* the connection with the IOIO, thus a soft reset is very fast.
*/
// private void softReset() {
// try {
// _IOIOInstance.softReset();
// } catch (ConnectionLostException e) {
// synchronized (_connected) {
// _connected = false;
// _connectionReset = true;
// connectionReset();
// updateStatus("Connection to the IOIO board has be lost");
// }
// }
// }
/**
* A hard reset is exactly like physically powering off the IOIO
* board and powering it back on. As a result, the connection
* with the IOIO will drop and the IOIO instance will become
* disconnected and unusable. The board will perform a full reboot,
* including going through the bootloader sequence, i.e. an attempt
* to update the board's firmware will be made.
*/
public void hardReset() {
try {
_IOIOInstance.hardReset();
} catch (ConnectionLostException e) {
_connected = false;
_connectionReset = true;
connectionReset();
updateStatus("Connection to the IOIO board has be lost");
}
}
private void toggleProgressOn() {
_handler.post(new Runnable() {
@Override
public void run() {
_statusProgress.setVisibility(View.VISIBLE);
}
});
}
private void toggleProgressOff() {
_handler.post(new Runnable() {
@Override
public void run() {
_statusProgress.setVisibility(View.GONE);
}
});
}
/**
* Updates the status label
*
* @param text The string for the label to be set to
*/
private void updateStatus(final String text) {
_handler.post(new Runnable() {
@Override
public void run() {
_status.setText("Status: " + text);
}
});
}
/** Returns the static IOIO instance */
public static IOIO getIOIOInstance() {
return _IOIOInstance;
}
/** Returns the context of the application */
public static Context getContext() {
return _context;
}
/** Returns the list of opened pins */
public static ArrayList<Integer> getOpenedPins() {
return _openedPins;
}
 
/** Adds a pin to the list of opened pins */
public static void addOpenedPin(Integer i) {
_openedPins.add(i);
}
/** Removes a pin from the list of opened pins */
public static void removeOpenedPin(Integer i) {
_openedPins.remove(i);
}
// /** Returns the static retClass ViewWidget */
// public static ViewWidget getViewWidget() {
// return retClass;
// }
 
/** Sets the current static retClass ViewWidget */
public static void setViewWidget(final ViewWidget retClass) {
_handler.post(new Runnable() {
@Override
public void run() {
IOIODebuggerActivity.retClass = retClass;
}
});
}
 
/** Returns the static NetworkClientConnectionHandler */
public static NetworkClientConnectionHandler get_networkMgr() {
return _networkMgr;
}
/** Signal all monitoring threads to send history of saved data */
public void sendAllData() {
for (ViewWidget vw : _viewList) {
vw.sendDataHistory();
}
}
/** Sends new data to the server */
public static void sendData(int pin, Double[] d) {
_networkMgr.sendData(pin, d);
}
/** Queries if the IOIO board is currently connected */
public static boolean getConnected() {
return _connected;
}
/** Starts the updater thread for the specified view */
public void startViewWidget(View vw) {
// Find the selected view
for (ViewWidget vww : _viewList) {
if (vww.getView() == currentlySelectedView) {
vww.startThread();
break;
}
}
}
/** Stops the updater thread for the specified view */
public void stopViewWidget(View vw) {
// Find the selected view
for (ViewWidget vww : _viewList) {
if (vww.getView() == currentlySelectedView) {
vww.stopThread();
break;
}
}
}
/** Stops the updater thread for the ViewWidget with the specified pin */
public void stopViewWidget(int pin) {
// Find the selected view
for (ViewWidget vww : _viewList) {
if (vww.getPin() == pin) {
vww.stopThread();
break;
}
}
}
/** Removes the ViewWidget that has the specified view */
public void removeViewWidget(View view) {
ViewWidget vw;
// Find the selected view
for (int i = 0; i < _viewList.size(); i++) {
vw = _viewList.get(i);
if (vw.getView() == view) {
vw.stopThread();
// If the widget to remove is the first one and there is only one
if (i == 0 && _viewList.size() == 1) {
_mainLayout.removeViewAt(0);
// If the widget to remove is the first one and there is more than one
} else if (i == 0 && _viewList.size() > 1) {
_mainLayout.removeViewAt(0);
_mainLayout.removeViewAt(0);
// If the widget to remove is the last one
} else if (i == _viewList.size()-1) {
_mainLayout.removeViewAt(_mainLayout.getChildCount()-1);
_mainLayout.removeViewAt(_mainLayout.getChildCount()-1);
} else {
// Remove the widget at the specified location
_mainLayout.removeViewAt(i*2);
_mainLayout.removeViewAt(i*2);
}
// Notify the server that a pin is being removed
if (_networkMgr.connectedOk())
_networkMgr.notifyRemovePin(vw.getPin());
_viewList.remove(i);
break;
}
}
}
/** Removes the ViewWidget with the specified pin */
public void removeViewWidget(int pin) {
ViewWidget vw;
// Find the selected view
for (int i = 0; i < _viewList.size(); i++) {
vw = _viewList.get(i);
if (vw.getPin() == pin) {
vw.stopThread();
// If the widget to remove is the first one and there is only one
if (i == 0 && _viewList.size() == 1) {
_mainLayout.removeViewAt(0);
// If the widget to remove is the first one and there is more than one
} else if (i == 0 && _viewList.size() > 1) {
_mainLayout.removeViewAt(0);
_mainLayout.removeViewAt(0);
// If the widget to remove is the last one
} else if (i == _viewList.size()-1) {
_mainLayout.removeViewAt(_mainLayout.getChildCount()-1);
_mainLayout.removeViewAt(_mainLayout.getChildCount()-1);
} else {
// Remove the widget at the specified location
_mainLayout.removeViewAt(i*2);
_mainLayout.removeViewAt(i*2);
}
// Notify the server that a pin is being removed
if (_networkMgr.connectedOk())
_networkMgr.notifyRemovePin(vw.getPin());
_viewList.remove(i);
break;
}
}
}
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkClient.java
0,0 → 1,55
/**************************************************************************
* Copyright 2011 Jules White
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
 
package ioio.debugger;
 
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
 
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
 
 
public class NetworkClient {
 
@SuppressWarnings("rawtypes")
public static NetworkClientHandler connect(String host, int port) throws Exception {
// Configure the client.
ClientBootstrap bootstrap = new ClientBootstrap(
new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
 
// Configure the pipeline factory.
bootstrap.setPipelineFactory(new NetworkClientPipelineFactory());
 
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
 
// Wait until the connection attempt succeeds or fails.
Channel channel = future.awaitUninterruptibly().getChannel();
if (!future.isSuccess()) {
future.getCause().printStackTrace();
bootstrap.releaseExternalResources();
return null;
}
return channel.getPipeline().get(NetworkClientHandler.class);
}
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkClientConnectionHandler.java
0,0 → 1,356
package ioio.debugger;
 
import java.util.List;
 
import ioio.debugger.NetworkIOIOProtocol.Message;
import ioio.debugger.NetworkIOIOProtocol.Message.Builder;
import ioio.debugger.NetworkIOIOProtocol.TrackingMessage;
 
import org.jboss.netty.channel.Channel;
 
import android.os.Handler;
 
public class NetworkClientConnectionHandler implements NetworkMessageHandler<TrackingMessage> {
 
// Message handler for sending messages to server
private NetworkClientHandler<NetworkIOIOProtocol.TrackingMessage> msgHandler_;
private Boolean connected_ = false;
private boolean connectionOk_ = false;
private long reconnectInterval_ = 3000;
private boolean autoReconnect_ = false;
private String server_;
private int port_;
private IOIODebuggerActivity parent_;
private Thread connection_;
private Handler handler_ = new Handler();
public NetworkClientConnectionHandler(IOIODebuggerActivity parent) {
parent_ = parent;
connection_ = new Thread();
}
public void setConnectionSettings(final String server, final int port, final boolean autoReconnect, final long reconnectInterval) {
handler_.post(new Runnable() {
@Override
public void run() {
server_ = server;
port_ = port;
autoReconnect_ = autoReconnect;
reconnectInterval_ = reconnectInterval;
}
});
}
@Override
public void channelException(Throwable e) {
synchronized (connected_) {
parent_.updateServerStatus("Exception occured contacting server");
connected_ = false;
connectionOk_ = false;
}
}
 
@Override
public void channelClosed(Channel c) {
synchronized (connected_) {
parent_.updateServerStatus("Connection to server closed");
connected_ = false;
connectionOk_ = false;
}
}
 
@Override
public void received(final TrackingMessage msg) {
handler_.post(new Runnable() {
@Override
public void run() {
List<Message> messageList;
switch(msg.getType()) {
case 11:
parent_.updateServerStatus("Connected to server [ " + server_ + " :: " + port_ + " ]");
connectionOk_ = true;
parent_.sendAllData();
break;
case 12:
parent_.updateServerStatus("Connection to server rejected. Try again?");
disconnectFromServer();
break;
case 13:
parent_.hardReset();
break;
case 50:
messageList = msg.getMessageList();
for (Message message : messageList) {
String type = message.getType();
if (type.compareTo("InAnalog") == 0) {
CreateWidget.addIA(message.getPin(), message.getFreq());
parent_.processAddWidget(IOIODebuggerActivity.ACTIVITY_INPUT_ANALOG);
} else if (type.compareTo("InDigital") == 0) {
CreateWidget.addID(message.getPin(), message.getFreq(), message.getMode());
parent_.processAddWidget(IOIODebuggerActivity.ACTIVITY_INPUT_DIGITAL);
} else if (type.compareTo("OutDigital") == 0) {
CreateWidget.addOD(message.getPin(), message.getMode(), message.getBoolean());
parent_.processAddWidget(IOIODebuggerActivity.ACTIVITY_OUTPUT_DIGITAL);
}
}
break;
case 51:
messageList = msg.getMessageList();
for (Message message : messageList) {
parent_.stopViewWidget(message.getPin());
}
break;
case 52:
messageList = msg.getMessageList();
for (Message message : messageList) {
parent_.removeViewWidget(message.getPin());
}
}
}
});
}
 
@SuppressWarnings("unchecked")
public boolean connectToServer() {
 
try {
synchronized (connected_) {
if (connected_)
return true;
 
parent_.updateServerStatus("Connecting to server...");
 
msgHandler_ = NetworkClient.connect(server_, port_);
msgHandler_.setListener(this);
connected_ = true;
// Wait a bit for the connection to finish initialization
Thread.sleep(500);
// Queries if connection is ok
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(10)
.build();
msgHandler_.send(newMsg);
}
return true;
} catch (Exception e) {
parent_.updateServerStatus("Unable to connect to server");
return false;
}
 
}
private class ConnectWorker implements Runnable {
 
public void run() {
doConnect();
}
 
public void doConnect() {
try {
if (!connectToServer()) {
while (autoReconnect_ && !connectToServer()) {
parent_.updateServerStatus("Waiting to reconnect to server...");
Thread.sleep(reconnectInterval_);
}
}
} catch (Exception e) {
doConnect();
}
}
}
public void startConnect() {
handler_.post(new Runnable() {
@Override
public void run() {
ConnectWorker w = new ConnectWorker();
connection_ = new Thread(w);
connection_.start();
}
});
}
 
public void stopAutoReconnect() {
autoReconnect_ = false;
}
public void disconnectFromServer() {
synchronized (connected_) {
connected_ = false;
connectionOk_ = false;
autoReconnect_ = false;
msgHandler_.disconnect();
parent_.updateServerStatus("Disconnected from server");
}
}
public Boolean isConnected() {
return connected_;
}
public boolean connectedOk() {
return connectionOk_;
}
public void notifyACK_Success() {
handler_.post(new Runnable() {
@Override
public void run() {
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(1)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyACK_Failure() {
handler_.post(new Runnable() {
@Override
public void run() {
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(2)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyStartIA(final int pin, final long freq) {
handler_.post(new Runnable() {
@Override
public void run() {
Builder message = Message.newBuilder()
.setPin(pin)
.setFreq(freq)
.setType("InAnalog");
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(50)
.addMessage(message)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyStartID(final int pin, final long freq, final String mode) {
handler_.post(new Runnable() {
@Override
public void run() {
Builder message = Message.newBuilder()
.setPin(pin)
.setFreq(freq)
.setMode(mode)
.setType("InDigital");
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(50)
.addMessage(message)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyStartOD(final int pin, final String state, final boolean openDrain) {
handler_.post(new Runnable() {
@Override
public void run() {
Builder message = Message.newBuilder()
.setPin(pin)
.setState(state)
.setBoolean(openDrain)
.setType("OutDigital");
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(50)
.addMessage(message)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyStopPin(final int pin) {
handler_.post(new Runnable() {
@Override
public void run() {
Builder message = Message.newBuilder()
.setPin(pin);
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(51)
.addMessage(message)
.build();
msgHandler_.send(newMsg);
}
});
}
public void notifyRemovePin(final int pin) {
handler_.post(new Runnable() {
@Override
public void run() {
Builder message = Message.newBuilder()
.setPin(pin);
TrackingMessage newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(52)
.addMessage(message)
.build();
msgHandler_.send(newMsg);
}
});
}
public void sendData(final int pin, final Double[] data) {
handler_.post(new Runnable() {
@Override
public void run() {
ioio.debugger.NetworkIOIOProtocol.TrackingMessage.Builder newMsg = TrackingMessage.newBuilder()
.setId(0)
.setType(70);
Builder message = Message.newBuilder().setPin(pin);
for (double d : data) {
message.addData(d);
}
newMsg.addMessage(message);
msgHandler_.send(newMsg.build());
}
});
}
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkClientHandler.java
0,0 → 1,116
/**************************************************************************
* Copyright 2011 Jules White
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package ioio.debugger;
 
import java.util.logging.Level;
import java.util.logging.Logger;
 
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
 
import android.util.Log;
 
/**
* Handles a client-side channel.
*
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
*
* @version $Rev: 2121 $, $Date: 2010-02-02 09:38:07 +0900 (Tue, 02 Feb 2010) $
*/
public class NetworkClientHandler<T> extends SimpleChannelUpstreamHandler {
 
private static final String TAG = NetworkClientHandler.class.getName();
private NetworkMessageHandler<T> listener_;
 
private Channel channel_;
 
private static final Logger logger = Logger
.getLogger(NetworkClientHandler.class.getName());
 
public void disconnect(){
channel_.disconnect();
}
@Override
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e)
throws Exception {
if (e instanceof ChannelStateEvent) {
logger.info(e.toString());
}
super.handleUpstream(ctx, e);
}
 
// @Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
 
channel_ = e.getChannel();
 
channel_.getCloseFuture().addListener(new ChannelFutureListener() {
 
@Override
public void operationComplete(ChannelFuture future)
throws Exception {
listener_.channelClosed(channel_);
}
});
}
 
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
if (listener_ != null) {
@SuppressWarnings("unchecked")
T msg = (T) e.getMessage();
listener_.received(msg);
} else {
System.err.println(e.getMessage());
}
}
 
public void send(NetworkIOIOProtocol.TrackingMessage msg) {
channel_.write(msg);
}
 
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
logger.log(Level.WARNING, "Unexpected exception from downstream.",
e.getCause());
e.getChannel().close();
 
if(listener_ != null)
listener_.channelException(e.getCause());
else
Log.e(TAG, "Error communicating with server",e.getCause());
}
 
public NetworkMessageHandler<T> getListener() {
return listener_;
}
 
public void setListener(NetworkMessageHandler<T> listener) {
listener_ = listener;
}
 
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkClientPipelineFactory.java
0,0 → 1,54
/**************************************************************************
* Copyright 2011 Jules White
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package ioio.debugger;
 
import static org.jboss.netty.channel.Channels.pipeline;
 
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
 
/**
* Creates a newly configured {@link ChannelPipeline} for a new channel.
*
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
*
* @version $Rev: 2080 $, $Date: 2010-01-26 18:04:19 +0900 (Tue, 26 Jan 2010) $
*
*/
public class NetworkClientPipelineFactory implements ChannelPipelineFactory {
 
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = pipeline();
 
pipeline.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
pipeline.addLast("protobufDecoder", new ProtobufDecoder(
NetworkIOIOProtocol.TrackingMessage.getDefaultInstance()));
 
pipeline.addLast("frameEncoder",
new ProtobufVarint32LengthFieldPrepender());
pipeline.addLast("protobufEncoder", new ProtobufEncoder());
 
// and then business logic.
pipeline.addLast("handler", new NetworkClientHandler<NetworkIOIOProtocol.TrackingMessage>());
 
return pipeline;
}
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkIOIOProtocol.java
0,0 → 1,1591
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: NetworkIOIOProtocol.proto
 
package ioio.debugger;
 
public final class NetworkIOIOProtocol {
private NetworkIOIOProtocol() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
}
public interface TrackingMessageOrBuilder
extends com.google.protobuf.MessageOrBuilder {
// required int32 id = 1;
boolean hasId();
int getId();
// required int32 type = 2;
boolean hasType();
int getType();
// repeated .ioio.debugger.Message message = 3;
java.util.List<ioio.debugger.NetworkIOIOProtocol.Message>
getMessageList();
ioio.debugger.NetworkIOIOProtocol.Message getMessage(int index);
int getMessageCount();
java.util.List<? extends ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder>
getMessageOrBuilderList();
ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder getMessageOrBuilder(
int index);
}
public static final class TrackingMessage extends
com.google.protobuf.GeneratedMessage
implements TrackingMessageOrBuilder {
// Use TrackingMessage.newBuilder() to construct.
private TrackingMessage(Builder builder) {
super(builder);
}
private TrackingMessage(boolean noInit) {}
private static final TrackingMessage defaultInstance;
public static TrackingMessage getDefaultInstance() {
return defaultInstance;
}
public TrackingMessage getDefaultInstanceForType() {
return defaultInstance;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_TrackingMessage_descriptor;
}
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_TrackingMessage_fieldAccessorTable;
}
private int bitField0_;
// required int32 id = 1;
public static final int ID_FIELD_NUMBER = 1;
private int id_;
public boolean hasId() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
public int getId() {
return id_;
}
// required int32 type = 2;
public static final int TYPE_FIELD_NUMBER = 2;
private int type_;
public boolean hasType() {
return ((bitField0_ & 0x00000002) == 0x00000002);
}
public int getType() {
return type_;
}
// repeated .ioio.debugger.Message message = 3;
public static final int MESSAGE_FIELD_NUMBER = 3;
private java.util.List<ioio.debugger.NetworkIOIOProtocol.Message> message_;
public java.util.List<ioio.debugger.NetworkIOIOProtocol.Message> getMessageList() {
return message_;
}
public java.util.List<? extends ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder>
getMessageOrBuilderList() {
return message_;
}
public int getMessageCount() {
return message_.size();
}
public ioio.debugger.NetworkIOIOProtocol.Message getMessage(int index) {
return message_.get(index);
}
public ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder getMessageOrBuilder(
int index) {
return message_.get(index);
}
private void initFields() {
id_ = 0;
type_ = 0;
message_ = java.util.Collections.emptyList();
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized != -1) return isInitialized == 1;
if (!hasId()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasType()) {
memoizedIsInitialized = 0;
return false;
}
memoizedIsInitialized = 1;
return true;
}
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
getSerializedSize();
if (((bitField0_ & 0x00000001) == 0x00000001)) {
output.writeInt32(1, id_);
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeInt32(2, type_);
}
for (int i = 0; i < message_.size(); i++) {
output.writeMessage(3, message_.get(i));
}
getUnknownFields().writeTo(output);
}
private int memoizedSerializedSize = -1;
public int getSerializedSize() {
int size = memoizedSerializedSize;
if (size != -1) return size;
size = 0;
if (((bitField0_ & 0x00000001) == 0x00000001)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(1, id_);
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(2, type_);
}
for (int i = 0; i < message_.size(); i++) {
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(3, message_.get(i));
}
size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size;
return size;
}
private static final long serialVersionUID = 0L;
@java.lang.Override
protected java.lang.Object writeReplace()
throws java.io.ObjectStreamException {
return super.writeReplace();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(java.io.InputStream input)
throws java.io.IOException {
return newBuilder().mergeFrom(input).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return newBuilder().mergeFrom(input, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
Builder builder = newBuilder();
if (builder.mergeDelimitedFrom(input)) {
return builder.buildParsed();
} else {
return null;
}
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
Builder builder = newBuilder();
if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
return builder.buildParsed();
} else {
return null;
}
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return newBuilder().mergeFrom(input).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.TrackingMessage parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return newBuilder().mergeFrom(input, extensionRegistry)
.buildParsed();
}
public static Builder newBuilder() { return Builder.create(); }
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder(ioio.debugger.NetworkIOIOProtocol.TrackingMessage prototype) {
return newBuilder().mergeFrom(prototype);
}
public Builder toBuilder() { return newBuilder(this); }
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessage.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
public static final class Builder extends
com.google.protobuf.GeneratedMessage.Builder<Builder>
implements ioio.debugger.NetworkIOIOProtocol.TrackingMessageOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_TrackingMessage_descriptor;
}
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_TrackingMessage_fieldAccessorTable;
}
// Construct using ioio.debugger.NetworkIOIOProtocol.TrackingMessage.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
getMessageFieldBuilder();
}
}
private static Builder create() {
return new Builder();
}
public Builder clear() {
super.clear();
id_ = 0;
bitField0_ = (bitField0_ & ~0x00000001);
type_ = 0;
bitField0_ = (bitField0_ & ~0x00000002);
if (messageBuilder_ == null) {
message_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000004);
} else {
messageBuilder_.clear();
}
return this;
}
public Builder clone() {
return create().mergeFrom(buildPartial());
}
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return ioio.debugger.NetworkIOIOProtocol.TrackingMessage.getDescriptor();
}
public ioio.debugger.NetworkIOIOProtocol.TrackingMessage getDefaultInstanceForType() {
return ioio.debugger.NetworkIOIOProtocol.TrackingMessage.getDefaultInstance();
}
public ioio.debugger.NetworkIOIOProtocol.TrackingMessage build() {
ioio.debugger.NetworkIOIOProtocol.TrackingMessage result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
private ioio.debugger.NetworkIOIOProtocol.TrackingMessage buildParsed()
throws com.google.protobuf.InvalidProtocolBufferException {
ioio.debugger.NetworkIOIOProtocol.TrackingMessage result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(
result).asInvalidProtocolBufferException();
}
return result;
}
public ioio.debugger.NetworkIOIOProtocol.TrackingMessage buildPartial() {
ioio.debugger.NetworkIOIOProtocol.TrackingMessage result = new ioio.debugger.NetworkIOIOProtocol.TrackingMessage(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
to_bitField0_ |= 0x00000001;
}
result.id_ = id_;
if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
to_bitField0_ |= 0x00000002;
}
result.type_ = type_;
if (messageBuilder_ == null) {
if (((bitField0_ & 0x00000004) == 0x00000004)) {
message_ = java.util.Collections.unmodifiableList(message_);
bitField0_ = (bitField0_ & ~0x00000004);
}
result.message_ = message_;
} else {
result.message_ = messageBuilder_.build();
}
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
}
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof ioio.debugger.NetworkIOIOProtocol.TrackingMessage) {
return mergeFrom((ioio.debugger.NetworkIOIOProtocol.TrackingMessage)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(ioio.debugger.NetworkIOIOProtocol.TrackingMessage other) {
if (other == ioio.debugger.NetworkIOIOProtocol.TrackingMessage.getDefaultInstance()) return this;
if (other.hasId()) {
setId(other.getId());
}
if (other.hasType()) {
setType(other.getType());
}
if (messageBuilder_ == null) {
if (!other.message_.isEmpty()) {
if (message_.isEmpty()) {
message_ = other.message_;
bitField0_ = (bitField0_ & ~0x00000004);
} else {
ensureMessageIsMutable();
message_.addAll(other.message_);
}
onChanged();
}
} else {
if (!other.message_.isEmpty()) {
if (messageBuilder_.isEmpty()) {
messageBuilder_.dispose();
messageBuilder_ = null;
message_ = other.message_;
bitField0_ = (bitField0_ & ~0x00000004);
messageBuilder_ =
com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
getMessageFieldBuilder() : null;
} else {
messageBuilder_.addAllMessages(other.message_);
}
}
}
this.mergeUnknownFields(other.getUnknownFields());
return this;
}
public final boolean isInitialized() {
if (!hasId()) {
return false;
}
if (!hasType()) {
return false;
}
return true;
}
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder(
this.getUnknownFields());
while (true) {
int tag = input.readTag();
switch (tag) {
case 0:
this.setUnknownFields(unknownFields.build());
onChanged();
return this;
default: {
if (!parseUnknownField(input, unknownFields,
extensionRegistry, tag)) {
this.setUnknownFields(unknownFields.build());
onChanged();
return this;
}
break;
}
case 8: {
bitField0_ |= 0x00000001;
id_ = input.readInt32();
break;
}
case 16: {
bitField0_ |= 0x00000002;
type_ = input.readInt32();
break;
}
case 26: {
ioio.debugger.NetworkIOIOProtocol.Message.Builder subBuilder = ioio.debugger.NetworkIOIOProtocol.Message.newBuilder();
input.readMessage(subBuilder, extensionRegistry);
addMessage(subBuilder.buildPartial());
break;
}
}
}
}
private int bitField0_;
// required int32 id = 1;
private int id_ ;
public boolean hasId() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
public int getId() {
return id_;
}
public Builder setId(int value) {
bitField0_ |= 0x00000001;
id_ = value;
onChanged();
return this;
}
public Builder clearId() {
bitField0_ = (bitField0_ & ~0x00000001);
id_ = 0;
onChanged();
return this;
}
// required int32 type = 2;
private int type_ ;
public boolean hasType() {
return ((bitField0_ & 0x00000002) == 0x00000002);
}
public int getType() {
return type_;
}
public Builder setType(int value) {
bitField0_ |= 0x00000002;
type_ = value;
onChanged();
return this;
}
public Builder clearType() {
bitField0_ = (bitField0_ & ~0x00000002);
type_ = 0;
onChanged();
return this;
}
// repeated .ioio.debugger.Message message = 3;
private java.util.List<ioio.debugger.NetworkIOIOProtocol.Message> message_ =
java.util.Collections.emptyList();
private void ensureMessageIsMutable() {
if (!((bitField0_ & 0x00000004) == 0x00000004)) {
message_ = new java.util.ArrayList<ioio.debugger.NetworkIOIOProtocol.Message>(message_);
bitField0_ |= 0x00000004;
}
}
private com.google.protobuf.RepeatedFieldBuilder<
ioio.debugger.NetworkIOIOProtocol.Message, ioio.debugger.NetworkIOIOProtocol.Message.Builder, ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder> messageBuilder_;
public java.util.List<ioio.debugger.NetworkIOIOProtocol.Message> getMessageList() {
if (messageBuilder_ == null) {
return java.util.Collections.unmodifiableList(message_);
} else {
return messageBuilder_.getMessageList();
}
}
public int getMessageCount() {
if (messageBuilder_ == null) {
return message_.size();
} else {
return messageBuilder_.getCount();
}
}
public ioio.debugger.NetworkIOIOProtocol.Message getMessage(int index) {
if (messageBuilder_ == null) {
return message_.get(index);
} else {
return messageBuilder_.getMessage(index);
}
}
public Builder setMessage(
int index, ioio.debugger.NetworkIOIOProtocol.Message value) {
if (messageBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureMessageIsMutable();
message_.set(index, value);
onChanged();
} else {
messageBuilder_.setMessage(index, value);
}
return this;
}
public Builder setMessage(
int index, ioio.debugger.NetworkIOIOProtocol.Message.Builder builderForValue) {
if (messageBuilder_ == null) {
ensureMessageIsMutable();
message_.set(index, builderForValue.build());
onChanged();
} else {
messageBuilder_.setMessage(index, builderForValue.build());
}
return this;
}
public Builder addMessage(ioio.debugger.NetworkIOIOProtocol.Message value) {
if (messageBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureMessageIsMutable();
message_.add(value);
onChanged();
} else {
messageBuilder_.addMessage(value);
}
return this;
}
public Builder addMessage(
int index, ioio.debugger.NetworkIOIOProtocol.Message value) {
if (messageBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureMessageIsMutable();
message_.add(index, value);
onChanged();
} else {
messageBuilder_.addMessage(index, value);
}
return this;
}
public Builder addMessage(
ioio.debugger.NetworkIOIOProtocol.Message.Builder builderForValue) {
if (messageBuilder_ == null) {
ensureMessageIsMutable();
message_.add(builderForValue.build());
onChanged();
} else {
messageBuilder_.addMessage(builderForValue.build());
}
return this;
}
public Builder addMessage(
int index, ioio.debugger.NetworkIOIOProtocol.Message.Builder builderForValue) {
if (messageBuilder_ == null) {
ensureMessageIsMutable();
message_.add(index, builderForValue.build());
onChanged();
} else {
messageBuilder_.addMessage(index, builderForValue.build());
}
return this;
}
public Builder addAllMessage(
java.lang.Iterable<? extends ioio.debugger.NetworkIOIOProtocol.Message> values) {
if (messageBuilder_ == null) {
ensureMessageIsMutable();
super.addAll(values, message_);
onChanged();
} else {
messageBuilder_.addAllMessages(values);
}
return this;
}
public Builder clearMessage() {
if (messageBuilder_ == null) {
message_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000004);
onChanged();
} else {
messageBuilder_.clear();
}
return this;
}
public Builder removeMessage(int index) {
if (messageBuilder_ == null) {
ensureMessageIsMutable();
message_.remove(index);
onChanged();
} else {
messageBuilder_.remove(index);
}
return this;
}
public ioio.debugger.NetworkIOIOProtocol.Message.Builder getMessageBuilder(
int index) {
return getMessageFieldBuilder().getBuilder(index);
}
public ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder getMessageOrBuilder(
int index) {
if (messageBuilder_ == null) {
return message_.get(index); } else {
return messageBuilder_.getMessageOrBuilder(index);
}
}
public java.util.List<? extends ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder>
getMessageOrBuilderList() {
if (messageBuilder_ != null) {
return messageBuilder_.getMessageOrBuilderList();
} else {
return java.util.Collections.unmodifiableList(message_);
}
}
public ioio.debugger.NetworkIOIOProtocol.Message.Builder addMessageBuilder() {
return getMessageFieldBuilder().addBuilder(
ioio.debugger.NetworkIOIOProtocol.Message.getDefaultInstance());
}
public ioio.debugger.NetworkIOIOProtocol.Message.Builder addMessageBuilder(
int index) {
return getMessageFieldBuilder().addBuilder(
index, ioio.debugger.NetworkIOIOProtocol.Message.getDefaultInstance());
}
public java.util.List<ioio.debugger.NetworkIOIOProtocol.Message.Builder>
getMessageBuilderList() {
return getMessageFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilder<
ioio.debugger.NetworkIOIOProtocol.Message, ioio.debugger.NetworkIOIOProtocol.Message.Builder, ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder>
getMessageFieldBuilder() {
if (messageBuilder_ == null) {
messageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
ioio.debugger.NetworkIOIOProtocol.Message, ioio.debugger.NetworkIOIOProtocol.Message.Builder, ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder>(
message_,
((bitField0_ & 0x00000004) == 0x00000004),
getParentForChildren(),
isClean());
message_ = null;
}
return messageBuilder_;
}
// @@protoc_insertion_point(builder_scope:ioio.debugger.TrackingMessage)
}
static {
defaultInstance = new TrackingMessage(true);
defaultInstance.initFields();
}
// @@protoc_insertion_point(class_scope:ioio.debugger.TrackingMessage)
}
public interface MessageOrBuilder
extends com.google.protobuf.MessageOrBuilder {
// optional int32 pin = 1;
boolean hasPin();
int getPin();
// repeated double data = 2;
java.util.List<java.lang.Double> getDataList();
int getDataCount();
double getData(int index);
// optional string type = 3;
boolean hasType();
String getType();
// optional int64 freq = 4;
boolean hasFreq();
long getFreq();
// optional string mode = 5;
boolean hasMode();
String getMode();
// optional string state = 6;
boolean hasState();
String getState();
// optional bool boolean = 7;
boolean hasBoolean();
boolean getBoolean();
}
public static final class Message extends
com.google.protobuf.GeneratedMessage
implements MessageOrBuilder {
// Use Message.newBuilder() to construct.
private Message(Builder builder) {
super(builder);
}
private Message(boolean noInit) {}
private static final Message defaultInstance;
public static Message getDefaultInstance() {
return defaultInstance;
}
public Message getDefaultInstanceForType() {
return defaultInstance;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_Message_descriptor;
}
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_Message_fieldAccessorTable;
}
private int bitField0_;
// optional int32 pin = 1;
public static final int PIN_FIELD_NUMBER = 1;
private int pin_;
public boolean hasPin() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
public int getPin() {
return pin_;
}
// repeated double data = 2;
public static final int DATA_FIELD_NUMBER = 2;
private java.util.List<java.lang.Double> data_;
public java.util.List<java.lang.Double>
getDataList() {
return data_;
}
public int getDataCount() {
return data_.size();
}
public double getData(int index) {
return data_.get(index);
}
// optional string type = 3;
public static final int TYPE_FIELD_NUMBER = 3;
private java.lang.Object type_;
public boolean hasType() {
return ((bitField0_ & 0x00000002) == 0x00000002);
}
public String getType() {
java.lang.Object ref = type_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (com.google.protobuf.Internal.isValidUtf8(bs)) {
type_ = s;
}
return s;
}
}
private com.google.protobuf.ByteString getTypeBytes() {
java.lang.Object ref = type_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8((String) ref);
type_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
// optional int64 freq = 4;
public static final int FREQ_FIELD_NUMBER = 4;
private long freq_;
public boolean hasFreq() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
public long getFreq() {
return freq_;
}
// optional string mode = 5;
public static final int MODE_FIELD_NUMBER = 5;
private java.lang.Object mode_;
public boolean hasMode() {
return ((bitField0_ & 0x00000008) == 0x00000008);
}
public String getMode() {
java.lang.Object ref = mode_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (com.google.protobuf.Internal.isValidUtf8(bs)) {
mode_ = s;
}
return s;
}
}
private com.google.protobuf.ByteString getModeBytes() {
java.lang.Object ref = mode_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8((String) ref);
mode_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
// optional string state = 6;
public static final int STATE_FIELD_NUMBER = 6;
private java.lang.Object state_;
public boolean hasState() {
return ((bitField0_ & 0x00000010) == 0x00000010);
}
public String getState() {
java.lang.Object ref = state_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (com.google.protobuf.Internal.isValidUtf8(bs)) {
state_ = s;
}
return s;
}
}
private com.google.protobuf.ByteString getStateBytes() {
java.lang.Object ref = state_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8((String) ref);
state_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
// optional bool boolean = 7;
public static final int BOOLEAN_FIELD_NUMBER = 7;
private boolean boolean_;
public boolean hasBoolean() {
return ((bitField0_ & 0x00000020) == 0x00000020);
}
public boolean getBoolean() {
return boolean_;
}
private void initFields() {
pin_ = 0;
data_ = java.util.Collections.emptyList();;
type_ = "";
freq_ = 0L;
mode_ = "";
state_ = "";
boolean_ = false;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized != -1) return isInitialized == 1;
memoizedIsInitialized = 1;
return true;
}
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
getSerializedSize();
if (((bitField0_ & 0x00000001) == 0x00000001)) {
output.writeInt32(1, pin_);
}
for (int i = 0; i < data_.size(); i++) {
output.writeDouble(2, data_.get(i));
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeBytes(3, getTypeBytes());
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
output.writeInt64(4, freq_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
output.writeBytes(5, getModeBytes());
}
if (((bitField0_ & 0x00000010) == 0x00000010)) {
output.writeBytes(6, getStateBytes());
}
if (((bitField0_ & 0x00000020) == 0x00000020)) {
output.writeBool(7, boolean_);
}
getUnknownFields().writeTo(output);
}
private int memoizedSerializedSize = -1;
public int getSerializedSize() {
int size = memoizedSerializedSize;
if (size != -1) return size;
size = 0;
if (((bitField0_ & 0x00000001) == 0x00000001)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(1, pin_);
}
{
int dataSize = 0;
dataSize = 8 * getDataList().size();
size += dataSize;
size += 1 * getDataList().size();
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(3, getTypeBytes());
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
size += com.google.protobuf.CodedOutputStream
.computeInt64Size(4, freq_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(5, getModeBytes());
}
if (((bitField0_ & 0x00000010) == 0x00000010)) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(6, getStateBytes());
}
if (((bitField0_ & 0x00000020) == 0x00000020)) {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(7, boolean_);
}
size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size;
return size;
}
private static final long serialVersionUID = 0L;
@java.lang.Override
protected java.lang.Object writeReplace()
throws java.io.ObjectStreamException {
return super.writeReplace();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return newBuilder().mergeFrom(data, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(java.io.InputStream input)
throws java.io.IOException {
return newBuilder().mergeFrom(input).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return newBuilder().mergeFrom(input, extensionRegistry)
.buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
Builder builder = newBuilder();
if (builder.mergeDelimitedFrom(input)) {
return builder.buildParsed();
} else {
return null;
}
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
Builder builder = newBuilder();
if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
return builder.buildParsed();
} else {
return null;
}
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return newBuilder().mergeFrom(input).buildParsed();
}
public static ioio.debugger.NetworkIOIOProtocol.Message parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return newBuilder().mergeFrom(input, extensionRegistry)
.buildParsed();
}
public static Builder newBuilder() { return Builder.create(); }
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder(ioio.debugger.NetworkIOIOProtocol.Message prototype) {
return newBuilder().mergeFrom(prototype);
}
public Builder toBuilder() { return newBuilder(this); }
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessage.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
public static final class Builder extends
com.google.protobuf.GeneratedMessage.Builder<Builder>
implements ioio.debugger.NetworkIOIOProtocol.MessageOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_Message_descriptor;
}
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return ioio.debugger.NetworkIOIOProtocol.internal_static_ioio_debugger_Message_fieldAccessorTable;
}
// Construct using ioio.debugger.NetworkIOIOProtocol.Message.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
}
}
private static Builder create() {
return new Builder();
}
public Builder clear() {
super.clear();
pin_ = 0;
bitField0_ = (bitField0_ & ~0x00000001);
data_ = java.util.Collections.emptyList();;
bitField0_ = (bitField0_ & ~0x00000002);
type_ = "";
bitField0_ = (bitField0_ & ~0x00000004);
freq_ = 0L;
bitField0_ = (bitField0_ & ~0x00000008);
mode_ = "";
bitField0_ = (bitField0_ & ~0x00000010);
state_ = "";
bitField0_ = (bitField0_ & ~0x00000020);
boolean_ = false;
bitField0_ = (bitField0_ & ~0x00000040);
return this;
}
public Builder clone() {
return create().mergeFrom(buildPartial());
}
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return ioio.debugger.NetworkIOIOProtocol.Message.getDescriptor();
}
public ioio.debugger.NetworkIOIOProtocol.Message getDefaultInstanceForType() {
return ioio.debugger.NetworkIOIOProtocol.Message.getDefaultInstance();
}
public ioio.debugger.NetworkIOIOProtocol.Message build() {
ioio.debugger.NetworkIOIOProtocol.Message result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
private ioio.debugger.NetworkIOIOProtocol.Message buildParsed()
throws com.google.protobuf.InvalidProtocolBufferException {
ioio.debugger.NetworkIOIOProtocol.Message result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(
result).asInvalidProtocolBufferException();
}
return result;
}
public ioio.debugger.NetworkIOIOProtocol.Message buildPartial() {
ioio.debugger.NetworkIOIOProtocol.Message result = new ioio.debugger.NetworkIOIOProtocol.Message(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
to_bitField0_ |= 0x00000001;
}
result.pin_ = pin_;
if (((bitField0_ & 0x00000002) == 0x00000002)) {
data_ = java.util.Collections.unmodifiableList(data_);
bitField0_ = (bitField0_ & ~0x00000002);
}
result.data_ = data_;
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
to_bitField0_ |= 0x00000002;
}
result.type_ = type_;
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
to_bitField0_ |= 0x00000004;
}
result.freq_ = freq_;
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
to_bitField0_ |= 0x00000008;
}
result.mode_ = mode_;
if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
to_bitField0_ |= 0x00000010;
}
result.state_ = state_;
if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
to_bitField0_ |= 0x00000020;
}
result.boolean_ = boolean_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
}
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof ioio.debugger.NetworkIOIOProtocol.Message) {
return mergeFrom((ioio.debugger.NetworkIOIOProtocol.Message)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(ioio.debugger.NetworkIOIOProtocol.Message other) {
if (other == ioio.debugger.NetworkIOIOProtocol.Message.getDefaultInstance()) return this;
if (other.hasPin()) {
setPin(other.getPin());
}
if (!other.data_.isEmpty()) {
if (data_.isEmpty()) {
data_ = other.data_;
bitField0_ = (bitField0_ & ~0x00000002);
} else {
ensureDataIsMutable();
data_.addAll(other.data_);
}
onChanged();
}
if (other.hasType()) {
setType(other.getType());
}
if (other.hasFreq()) {
setFreq(other.getFreq());
}
if (other.hasMode()) {
setMode(other.getMode());
}
if (other.hasState()) {
setState(other.getState());
}
if (other.hasBoolean()) {
setBoolean(other.getBoolean());
}
this.mergeUnknownFields(other.getUnknownFields());
return this;
}
public final boolean isInitialized() {
return true;
}
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder(
this.getUnknownFields());
while (true) {
int tag = input.readTag();
switch (tag) {
case 0:
this.setUnknownFields(unknownFields.build());
onChanged();
return this;
default: {
if (!parseUnknownField(input, unknownFields,
extensionRegistry, tag)) {
this.setUnknownFields(unknownFields.build());
onChanged();
return this;
}
break;
}
case 8: {
bitField0_ |= 0x00000001;
pin_ = input.readInt32();
break;
}
case 17: {
ensureDataIsMutable();
data_.add(input.readDouble());
break;
}
case 18: {
int length = input.readRawVarint32();
int limit = input.pushLimit(length);
while (input.getBytesUntilLimit() > 0) {
addData(input.readDouble());
}
input.popLimit(limit);
break;
}
case 26: {
bitField0_ |= 0x00000004;
type_ = input.readBytes();
break;
}
case 32: {
bitField0_ |= 0x00000008;
freq_ = input.readInt64();
break;
}
case 42: {
bitField0_ |= 0x00000010;
mode_ = input.readBytes();
break;
}
case 50: {
bitField0_ |= 0x00000020;
state_ = input.readBytes();
break;
}
case 56: {
bitField0_ |= 0x00000040;
boolean_ = input.readBool();
break;
}
}
}
}
private int bitField0_;
// optional int32 pin = 1;
private int pin_ ;
public boolean hasPin() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
public int getPin() {
return pin_;
}
public Builder setPin(int value) {
bitField0_ |= 0x00000001;
pin_ = value;
onChanged();
return this;
}
public Builder clearPin() {
bitField0_ = (bitField0_ & ~0x00000001);
pin_ = 0;
onChanged();
return this;
}
// repeated double data = 2;
private java.util.List<java.lang.Double> data_ = java.util.Collections.emptyList();;
private void ensureDataIsMutable() {
if (!((bitField0_ & 0x00000002) == 0x00000002)) {
data_ = new java.util.ArrayList<java.lang.Double>(data_);
bitField0_ |= 0x00000002;
}
}
public java.util.List<java.lang.Double>
getDataList() {
return java.util.Collections.unmodifiableList(data_);
}
public int getDataCount() {
return data_.size();
}
public double getData(int index) {
return data_.get(index);
}
public Builder setData(
int index, double value) {
ensureDataIsMutable();
data_.set(index, value);
onChanged();
return this;
}
public Builder addData(double value) {
ensureDataIsMutable();
data_.add(value);
onChanged();
return this;
}
public Builder addAllData(
java.lang.Iterable<? extends java.lang.Double> values) {
ensureDataIsMutable();
super.addAll(values, data_);
onChanged();
return this;
}
public Builder clearData() {
data_ = java.util.Collections.emptyList();;
bitField0_ = (bitField0_ & ~0x00000002);
onChanged();
return this;
}
// optional string type = 3;
private java.lang.Object type_ = "";
public boolean hasType() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
public String getType() {
java.lang.Object ref = type_;
if (!(ref instanceof String)) {
String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
type_ = s;
return s;
} else {
return (String) ref;
}
}
public Builder setType(String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
type_ = value;
onChanged();
return this;
}
public Builder clearType() {
bitField0_ = (bitField0_ & ~0x00000004);
type_ = getDefaultInstance().getType();
onChanged();
return this;
}
void setType(com.google.protobuf.ByteString value) {
bitField0_ |= 0x00000004;
type_ = value;
onChanged();
}
// optional int64 freq = 4;
private long freq_ ;
public boolean hasFreq() {
return ((bitField0_ & 0x00000008) == 0x00000008);
}
public long getFreq() {
return freq_;
}
public Builder setFreq(long value) {
bitField0_ |= 0x00000008;
freq_ = value;
onChanged();
return this;
}
public Builder clearFreq() {
bitField0_ = (bitField0_ & ~0x00000008);
freq_ = 0L;
onChanged();
return this;
}
// optional string mode = 5;
private java.lang.Object mode_ = "";
public boolean hasMode() {
return ((bitField0_ & 0x00000010) == 0x00000010);
}
public String getMode() {
java.lang.Object ref = mode_;
if (!(ref instanceof String)) {
String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
mode_ = s;
return s;
} else {
return (String) ref;
}
}
public Builder setMode(String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000010;
mode_ = value;
onChanged();
return this;
}
public Builder clearMode() {
bitField0_ = (bitField0_ & ~0x00000010);
mode_ = getDefaultInstance().getMode();
onChanged();
return this;
}
void setMode(com.google.protobuf.ByteString value) {
bitField0_ |= 0x00000010;
mode_ = value;
onChanged();
}
// optional string state = 6;
private java.lang.Object state_ = "";
public boolean hasState() {
return ((bitField0_ & 0x00000020) == 0x00000020);
}
public String getState() {
java.lang.Object ref = state_;
if (!(ref instanceof String)) {
String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
state_ = s;
return s;
} else {
return (String) ref;
}
}
public Builder setState(String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000020;
state_ = value;
onChanged();
return this;
}
public Builder clearState() {
bitField0_ = (bitField0_ & ~0x00000020);
state_ = getDefaultInstance().getState();
onChanged();
return this;
}
void setState(com.google.protobuf.ByteString value) {
bitField0_ |= 0x00000020;
state_ = value;
onChanged();
}
// optional bool boolean = 7;
private boolean boolean_ ;
public boolean hasBoolean() {
return ((bitField0_ & 0x00000040) == 0x00000040);
}
public boolean getBoolean() {
return boolean_;
}
public Builder setBoolean(boolean value) {
bitField0_ |= 0x00000040;
boolean_ = value;
onChanged();
return this;
}
public Builder clearBoolean() {
bitField0_ = (bitField0_ & ~0x00000040);
boolean_ = false;
onChanged();
return this;
}
// @@protoc_insertion_point(builder_scope:ioio.debugger.Message)
}
static {
defaultInstance = new Message(true);
defaultInstance.initFields();
}
// @@protoc_insertion_point(class_scope:ioio.debugger.Message)
}
private static com.google.protobuf.Descriptors.Descriptor
internal_static_ioio_debugger_TrackingMessage_descriptor;
private static
com.google.protobuf.GeneratedMessage.FieldAccessorTable
internal_static_ioio_debugger_TrackingMessage_fieldAccessorTable;
private static com.google.protobuf.Descriptors.Descriptor
internal_static_ioio_debugger_Message_descriptor;
private static
com.google.protobuf.GeneratedMessage.FieldAccessorTable
internal_static_ioio_debugger_Message_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\031NetworkIOIOProtocol.proto\022\rioio.debugg" +
"er\"T\n\017TrackingMessage\022\n\n\002id\030\001 \002(\005\022\014\n\004typ" +
"e\030\002 \002(\005\022\'\n\007message\030\003 \003(\0132\026.ioio.debugger" +
".Message\"n\n\007Message\022\013\n\003pin\030\001 \001(\005\022\014\n\004data" +
"\030\002 \003(\001\022\014\n\004type\030\003 \001(\t\022\014\n\004freq\030\004 \001(\003\022\014\n\004mo" +
"de\030\005 \001(\t\022\r\n\005state\030\006 \001(\t\022\017\n\007boolean\030\007 \001(\010"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
public com.google.protobuf.ExtensionRegistry assignDescriptors(
com.google.protobuf.Descriptors.FileDescriptor root) {
descriptor = root;
internal_static_ioio_debugger_TrackingMessage_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_ioio_debugger_TrackingMessage_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_ioio_debugger_TrackingMessage_descriptor,
new java.lang.String[] { "Id", "Type", "Message", },
ioio.debugger.NetworkIOIOProtocol.TrackingMessage.class,
ioio.debugger.NetworkIOIOProtocol.TrackingMessage.Builder.class);
internal_static_ioio_debugger_Message_descriptor =
getDescriptor().getMessageTypes().get(1);
internal_static_ioio_debugger_Message_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_ioio_debugger_Message_descriptor,
new java.lang.String[] { "Pin", "Data", "Type", "Freq", "Mode", "State", "Boolean", },
ioio.debugger.NetworkIOIOProtocol.Message.class,
ioio.debugger.NetworkIOIOProtocol.Message.Builder.class);
return null;
}
};
com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
}, assigner);
}
// @@protoc_insertion_point(outer_class_scope)
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkIOIOProtocol.proto
0,0 → 1,17
package ioio.debugger;
 
message TrackingMessage {
required int32 id = 1;
required int32 type = 2;
repeated Message message = 3;
}
 
message Message {
optional int32 pin = 1;
repeated double data = 2;
optional string type = 3;
optional int64 freq = 4;
optional string mode = 5;
optional string state = 6;
optional bool boolean = 7;
}
/Android Development/IOIODebugger/src/ioio/debugger/NetworkMessageHandler.java
0,0 → 1,29
/**************************************************************************
* Copyright 2011 Jules White
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package ioio.debugger;
 
import org.jboss.netty.channel.Channel;
 
 
public interface NetworkMessageHandler<T> {
 
public void received(T msg);
 
public void channelException(Throwable e);
public void channelClosed(Channel c);
}
/Android Development/IOIODebugger/src/ioio/debugger/PinDetailActivity.java
0,0 → 1,132
package ioio.debugger;
 
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
import android.widget.TextView;
 
public class PinDetailActivity extends Activity {
 
private TableLayout root;
private int totalPins = 48;
private HashSet<Integer> AD;
private HashSet<Integer> PPSi;
private HashSet<Integer> PPSo;
private HashSet<Integer> FiveV;
private HashMap<Integer, String> I2C = new HashMap<Integer, String>();
private HashMap<Integer, String> Comp = new HashMap<Integer, String>();;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pin_details);
root = (TableLayout) findViewById(R.id.pin_table_root);
Integer[] ad = {31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46};
AD = new HashSet<Integer>(Arrays.asList(ad));
Integer[] ppsi = {3,4,5,6,7,9,10,11,12,13,14,27,28,29,30,31,32,34,35,36,37,38,39,40,45,46,47,48};
PPSi = new HashSet<Integer>(Arrays.asList(ppsi));
Integer[] ppso = {3,4,5,6,7,10,11,12,13,14,27,28,29,30,31,32,34,35,36,37,38,39,40,45,46,47,48};
PPSo = new HashSet<Integer>(Arrays.asList(ppso));
Integer[] fiveV = {3,4,5,6,7,10,11,12,13,14,18,19,20,21,22,23,24,25,26,47,48};
FiveV = new HashSet<Integer>(Arrays.asList(fiveV));
I2C.put(4, "DA0");
I2C.put(5, "CL0");
I2C.put(25, "DA2");
I2C.put(26, "CL2");
I2C.put(47, "DA1");
I2C.put(48, "CL1");
Comp.put(8, "3D");
Comp.put(9, "3C");
Comp.put(15, "3B");
Comp.put(16, "3A");
Comp.put(27, "1D");
Comp.put(28, "1C");
Comp.put(29, "2D");
Comp.put(30, "2C");
Comp.put(31, "1A");
Comp.put(32, "1B");
Comp.put(33, "2A");
Comp.put(34, "2B");
root.setStretchAllColumns(true);
for (Integer i = 1; i <= totalPins; i++) {
TableRow row = new TableRow(this);
TextView tv = new TextView(this);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
tv.setGravity(Gravity.CENTER);
tv.setText(String.valueOf(i));
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (AD.contains(i))
tv.setText("\u2713");
else
tv.setText("");
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (I2C.containsKey(i))
tv.setText(I2C.get(i));
else
tv.setText("");
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (PPSi.contains(i))
tv.setText("\u2713");
else
tv.setText("");
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (PPSo.contains(i))
tv.setText("\u2713");
else
tv.setText("");
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (FiveV.contains(i))
tv.setText("\u2713");
else
tv.setText("");
row.addView(tv);
tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
if (Comp.containsKey(i))
tv.setText(Comp.get(i));
else
tv.setText("");
row.addView(tv);
root.addView(row);
}
}
}
/Android Development/IOIODebugger/src/ioio/debugger/ViewWidget.java
0,0 → 1,18
package ioio.debugger;
 
import android.view.View;
 
public interface ViewWidget {
public void stopThread();
public void startThread();
public void clearData();
public void setStopSignal();
public void resetStopSignal();
public void sendDataHistory();
public View getView();
public Thread getThread();
public void setPin(int pin);
public int getPin();
}
/Android Development/IOIODebugger/src/ioio/debugger/ViewWidgetGraphText.java
0,0 → 1,194
package ioio.debugger;
 
import java.util.LinkedList;
 
import com.androidplot.Plot.BorderStyle;
import com.androidplot.xy.BoundaryMode;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.StepFormatter;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.XYStepMode;
 
import android.graphics.Color;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
 
public class ViewWidgetGraphText implements ViewWidget {
 
private View view;
private Runnable run;
private Thread thread;
private Handler handler = new Handler();
private GenericXYSeries plotData;
private XYPlot historyPlot;
private int pin;
 
public ViewWidgetGraphText() {
}
@Override
public void stopThread() {
thread.interrupt();
}
@Override
public void startThread() {
// Kill the thread if it is already running
if (thread != null && thread.isAlive())
thread.interrupt();
// Start a new thread and run the passed Runnable
thread = new Thread (run);
thread.start();
}
@Override
public View getView() {
return view;
}
 
@Override
public Thread getThread() {
return thread;
}
@Override
public void clearData() {
plotData.clearData();
}
@Override
public void setStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_graphText_status);
tv.setTextColor(Color.RED);
}
});
}
@Override
public void resetStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_graphText_status);
tv.setTextColor(Color.WHITE);
}
});
}
@Override
public void sendDataHistory() {
LinkedList<Number> data = plotData.getData();
Double[] data2 = data.toArray(new Double[data.size()]);
IOIODebuggerActivity.get_networkMgr().sendData(pin, data2);
}
@Override
public int getPin() {
return pin;
}
public void setPin(final int p) {
pin = p;
}
public void updateText(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_graphText_text);
tv.setText(str);
}
});
}
public void updateStatus(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_graphText_status);
tv.setText(str);
}
});
}
 
public void setView(View view, boolean useStep, int historyLength) {
this.view = view;
// Set graph plot details
plotData = new GenericXYSeries("Analog In", historyLength);
historyPlot = (XYPlot) view.findViewById(R.id.layout_graphText_graph);
// Add data to plot
if (!useStep)
historyPlot.addSeries(plotData, new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0, 100),Color.rgb(150, 150, 190)));
else {
StepFormatter stepFormatter = new StepFormatter(Color.rgb(0, 0, 0), Color.rgb(150, 190, 150));
stepFormatter.getLinePaint().setStrokeWidth(1);
historyPlot.addSeries(plotData, stepFormatter);
}
// Set boundary and ticks
historyPlot.setRangeBoundaries(0, 3.3, BoundaryMode.FIXED);
historyPlot.setDomainBoundaries(0, historyLength, BoundaryMode.FIXED);
historyPlot.setDomainStepValue(5);
historyPlot.setRangeStep(XYStepMode.SUBDIVIDE, 4);
historyPlot.setTicksPerRangeLabel(3);
// Remove labels and legend
historyPlot.getLegendWidget().setVisible(false);
historyPlot.getDomainLabelWidget().setVisible(false);
historyPlot.getRangeLabelWidget().setVisible(false);
historyPlot.getTitleWidget().setVisible(false);
// Remove extra margin space
historyPlot.getGraphWidget().setMargins(0, 10, 10, 0);
historyPlot.getGraphWidget().setRangeLabelWidth(30);
historyPlot.getGraphWidget().setDomainLabelWidth(15);
historyPlot.getGraphWidget().setMarginLeft(-5);
historyPlot.getGraphWidget().setMarginRight(25);
historyPlot.setPlotMargins(0, 0, 0, 0);
historyPlot.setPlotPadding(0, 0, 0, 0);
 
// Remove background color
historyPlot.getGraphWidget().setBackgroundPaint(null);
historyPlot.setBackgroundPaint(null);
historyPlot.setBorderPaint(null);
historyPlot.setBorderStyle(BorderStyle.SQUARE, null, null);
historyPlot.disableAllMarkup();
}
public void setRunnable(Runnable r) {
run = r;
}
public void updateData(Number num) {
plotData.addDataToList(num);
}
public void refreshGraph() {
handler.post(new Runnable() {
 
@Override
public void run() {
historyPlot.redraw();
}
});
}
public void setRange(Number start, Number end) {
historyPlot.setRangeBoundaries(start, end, BoundaryMode.FIXED);
}
public void setDomain(Number length) {
historyPlot.setDomainBoundaries(0, length, BoundaryMode.FIXED);
}
}
/Android Development/IOIODebugger/src/ioio/debugger/ViewWidgetSimpleText.java
0,0 → 1,117
package ioio.debugger;
 
import android.graphics.Color;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
 
public class ViewWidgetSimpleText implements ViewWidget {
 
private View view;
private Runnable run;
private Thread thread;
private Handler handler = new Handler();
private int pin;
 
public ViewWidgetSimpleText() {
}
@Override
public void stopThread() {
thread.interrupt();
}
@Override
public void startThread() {
// Kill the thread if it is already running
if (thread != null && thread.isAlive())
thread.interrupt();
// Start a new thread and run the passed Runnable
thread = new Thread (run);
thread.start();
}
@Override
public View getView() {
return view;
}
 
@Override
public Thread getThread() {
return thread;
}
@Override
public void clearData() {
}
@Override
public void setStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_simpleText_status);
tv.setTextColor(Color.RED);
}
});
}
@Override
public void resetStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_simpleText_status);
tv.setTextColor(Color.WHITE);
}
});
}
@Override
public void sendDataHistory() {
}
@Override
public int getPin() {
return pin;
}
public void setPin(int pin) {
this.pin = pin;
}
public void updateText(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_simpleText_text);
tv.setText(str);
}
});
}
public void updateStatus(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_simpleText_status);
tv.setText(str);
}
});
}
 
public void setView(View view) {
this.view = view;
}
 
public void setRunnable(Runnable r) {
this.run = r;
}
}
/Android Development/IOIODebugger/src/ioio/debugger/ViewWidgetToggleText.java
0,0 → 1,127
package ioio.debugger;
 
import android.graphics.Color;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
 
public class ViewWidgetToggleText implements ViewWidget {
 
private View view;
private Runnable run;
private Thread thread;
private Handler handler = new Handler();
private int pin;
private boolean toggle;
 
public ViewWidgetToggleText() {
}
@Override
public void stopThread() {
thread.interrupt();
}
@Override
public void startThread() {
// Kill the thread if it is already running
if (thread != null && thread.isAlive())
thread.interrupt();
// Start a new thread and run the passed Runnable
thread = new Thread (run);
thread.start();
}
@Override
public View getView() {
return view;
}
 
@Override
public Thread getThread() {
return thread;
}
@Override
public void clearData() {
}
@Override
public void setStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_toggleText_status);
tv.setTextColor(Color.RED);
}
});
}
@Override
public void resetStopSignal() {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_toggleText_status);
tv.setTextColor(Color.WHITE);
}
});
}
@Override
public void sendDataHistory() {
Double[] data = new Double[1];
if (toggle)
data[0] = 3.3;
else
data[0] = 0.0;
IOIODebuggerActivity.get_networkMgr().sendData(pin, data);
}
 
@Override
public int getPin() {
return pin;
}
public void setPin(int pin) {
this.pin = pin;
}
public void updateText(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_toggleText_text);
tv.setText(str);
}
});
}
public void updateStatus(final String str) {
handler.post(new Runnable() {
@Override
public void run() {
TextView tv = (TextView)view.findViewById(R.id.layout_toggleText_status);
tv.setText(str);
}
});
}
 
public void setToggle(boolean b) {
toggle = b;
}
public void setView(View view) {
this.view = view;
}
public void setRunnable(Runnable r) {
this.run = r;
}
}
/Android Development/IOIODebugger/src/ioio/debugger/build_protocol.sh
0,0 → 1,0
protoc NetworkIOIOProtocol.proto --java_out=../../