Subversion Repositories Code-Repo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
90 Kevin 1
package ioio.debugger;
2
 
3
import android.content.Context;
4
import android.content.SharedPreferences;
5
import android.preference.PreferenceManager;
6
import android.view.LayoutInflater;
7
import android.view.View;
8
import android.widget.CompoundButton;
9
import android.widget.CompoundButton.OnCheckedChangeListener;
10
import android.widget.ToggleButton;
11
import ioio.lib.api.AnalogInput;
12
import ioio.lib.api.DigitalInput;
13
import ioio.lib.api.DigitalOutput;
14
import ioio.lib.api.IOIO;
15
import ioio.lib.api.exception.ConnectionLostException;
16
 
17
public class CreateWidget {
18
 
19
	public static void addIA(final Integer pin, final long freq) {
20
 
21
		if (!IOIODebuggerActivity.getConnected())
22
			return;
23
 
24
		Context ctx = IOIODebuggerActivity.getContext();
25
		LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
26
		View v = inflater.inflate(R.layout.view_graph_text_widget, IOIODebuggerActivity._viewGroupGraphTextWidget);
27
 
28
		final ViewWidgetGraphText viewWidget = new ViewWidgetGraphText();
29
		SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
30
		viewWidget.setView(v, false, Integer.parseInt(sharedPrefs.getString("pref_graphLength", "100")));
31
 
32
		final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
33
		final Double[] data = new Double[1];
34
 
35
		Runnable r = new Runnable() {
36
 
37
			@Override
38
			public void run() {
39
 
40
				IOIODebuggerActivity.addOpenedPin(pin);
41
				viewWidget.setPin(pin);
42
				viewWidget.resetStopSignal();
43
				if (networkMgr.connectedOk())
44
					networkMgr.notifyStartIA(pin, freq);
45
				IOIO ioio = IOIODebuggerActivity.getIOIOInstance();
46
				AnalogInput in = null;
47
				Float volts;
48
				try {
49
					in = ioio.openAnalogInput(pin);
50
					viewWidget.updateStatus("Pin #" + pin.toString() + " : In : Analog : 3.3v");
51
					while (true) {
52
						if (Thread.currentThread().isInterrupted()) {
53
							in.close();
54
							viewWidget.setStopSignal();
55
							IOIODebuggerActivity.removeOpenedPin(pin);
56
							if (networkMgr.connectedOk())
57
								networkMgr.notifyStopPin(pin);
58
							break;
59
						}
60
						volts = in.getVoltage();
61
						viewWidget.updateText("Current Voltage: " + volts.toString());
62
						viewWidget.updateData((double)volts);
63
						viewWidget.refreshGraph();
64
						if (networkMgr.connectedOk()) {
65
							data[0] = (double)volts;
66
							networkMgr.sendData(pin, data);
67
						}
68
						Thread.sleep(freq);
69
					}
70
				} catch (ConnectionLostException e) {
71
					viewWidget.updateStatus("Connection Lost");
72
				} catch (InterruptedException e) {
73
					if (in != null)
74
						in.close();
75
					viewWidget.setStopSignal();
76
					IOIODebuggerActivity.removeOpenedPin(pin);
77
					if (networkMgr.connectedOk())
78
						networkMgr.notifyStopPin(pin);
79
				} catch (Exception e) {
80
 
81
				}
82
			}
83
		};
84
		viewWidget.setRunnable(r);
85
		IOIODebuggerActivity.setViewWidget(viewWidget);
86
	}
87
 
88
	public static void addID(final Integer pin, final long freq, final String mode) {
89
 
90
		if (!IOIODebuggerActivity.getConnected())
91
			return;
92
 
93
		Context ctx = IOIODebuggerActivity.getContext();
94
		LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
95
		View v = inflater.inflate(R.layout.view_graph_text_widget, IOIODebuggerActivity._viewGroupGraphTextWidget);
96
 
97
		final ViewWidgetGraphText viewWidget = new ViewWidgetGraphText();
98
		SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
99
		viewWidget.setView(v, true, Integer.parseInt(sharedPrefs.getString("pref_graphLength", "100")));
100
 
101
		final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
102
		final Double[] data = new Double[1];
103
 
104
		Runnable r = new Runnable() {
105
 
106
			@Override
107
			public void run() {
108
				IOIODebuggerActivity.addOpenedPin(pin);
109
				if (networkMgr.connectedOk())
110
					networkMgr.notifyStartID(pin, freq, mode);
111
				viewWidget.setPin(pin);
112
				viewWidget.resetStopSignal();
113
				IOIO ioio = IOIODebuggerActivity.getIOIOInstance();
114
				DigitalInput in = null;
115
				viewWidget.updateStatus("Pin #" + pin.toString() + " : In : Digital : 3.3v : " + mode);
116
				try {
117
					if (mode.compareTo("Float") == 0) {
118
						in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.FLOATING);
119
					} else if (mode.compareTo("Pull Down") == 0) {
120
						in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.PULL_DOWN);
121
					} else if (mode.compareTo("Pull Up") == 0) {
122
						in = ioio.openDigitalInput(pin, DigitalInput.Spec.Mode.PULL_UP);
123
					}
124
					while (true) {
125
						if (Thread.currentThread().isInterrupted()) {
126
							in.close();
127
							viewWidget.setStopSignal();
128
							IOIODebuggerActivity.removeOpenedPin(pin);
129
							if (networkMgr.connectedOk())
130
								networkMgr.notifyStopPin(pin);
131
							break;
132
						}
133
						if (in.read()) {
134
							viewWidget.updateText("Current Input: High");
135
							viewWidget.updateData(3.3);
136
							if (networkMgr.connectedOk()) {
137
								data[0] = 3.3;
138
								networkMgr.sendData(pin, data);
139
							}
140
						} else {
141
							viewWidget.updateText("Current Input: Low");
142
							viewWidget.updateData(0.0);
143
							if (networkMgr.connectedOk()) {
144
								data[0] = 0.0;
145
								networkMgr.sendData(pin, data);
146
							}
147
						}
148
						viewWidget.refreshGraph();
149
						Thread.sleep(freq);
150
					}
151
				} catch (ConnectionLostException e) {
152
					viewWidget.updateStatus("Connection Lost");
153
				} catch (InterruptedException e) {
154
					if (in != null)
155
						in.close();
156
					viewWidget.setStopSignal();
157
					IOIODebuggerActivity.removeOpenedPin(pin);
158
					if (networkMgr.connectedOk())
159
						networkMgr.notifyStopPin(pin);
160
				}
161
			}
162
		};
163
		viewWidget.setRunnable(r);
164
		IOIODebuggerActivity.setViewWidget(viewWidget);
165
	}
166
 
167
	public static void addOD(final Integer pin, final String mode, final boolean openDrain) {
168
 
169
		if (!IOIODebuggerActivity.getConnected())
170
			return;
171
 
172
		Context ctx = IOIODebuggerActivity.getContext();
173
		LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
174
		View v = inflater.inflate(R.layout.view_toggle_text_widget, IOIODebuggerActivity._viewGroupToggleTextWidget);
175
 
176
		final ViewWidgetToggleText viewWidget = new ViewWidgetToggleText();
177
		viewWidget.setView(v);
178
 
179
		ToggleButton toggle = (ToggleButton) viewWidget.getView().findViewById(R.id.layout_toggleText_toggle);
180
		if (mode.compareTo("High") == 0)
181
			toggle.setChecked(true);
182
		else
183
			toggle.setChecked(false);
184
 
185
		final NetworkClientConnectionHandler networkMgr = IOIODebuggerActivity.get_networkMgr();
186
		final Double[] data = new Double[1];
187
 
188
		Runnable r = new Runnable() {
189
 
190
			boolean outputHigh;
191
			IOIO ioio;
192
			DigitalOutput out;
193
 
194
			@Override
195
			public void run() {
196
				IOIODebuggerActivity.addOpenedPin(pin);
197
				if (networkMgr.connectedOk())
198
					networkMgr.notifyStartOD(pin, mode, openDrain);
199
				viewWidget.setPin(pin);
200
				viewWidget.resetStopSignal();
201
				if (mode.compareTo("High") == 0)
202
					outputHigh = true;
203
				else
204
					outputHigh = false;
205
				if (networkMgr.connectedOk()) {
206
					if (outputHigh)
207
						data[0] = 3.3;
208
					else
209
						data[0] = 0.0;
210
					networkMgr.sendData(pin, data);
211
				}
212
				viewWidget.setToggle(outputHigh);
213
				ioio = IOIODebuggerActivity.getIOIOInstance();
214
 
215
				try {
216
					if (openDrain && outputHigh)
217
						out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.OPEN_DRAIN, true);
218
					else if (openDrain && !outputHigh)
219
						out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.OPEN_DRAIN, false);
220
					else if (!openDrain && outputHigh)
221
						out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.NORMAL, true);
222
					else // (!openDrain && !outputHigh)
223
						out = ioio.openDigitalOutput(pin, DigitalOutput.Spec.Mode.NORMAL, false);
224
 
225
					if (openDrain)
226
						viewWidget.updateStatus("Pin #" + pin.toString() + " : Out : Digital : OD : 3.3v");
227
					else
228
						viewWidget.updateStatus("Pin #" + pin.toString() + " : Out : Digital : 3.3v");
229
 
230
					ToggleButton toggle = (ToggleButton)viewWidget.getView().findViewById(R.id.layout_toggleText_toggle);
231
					if (toggle.isChecked())
232
						outputHigh = true;
233
					else
234
						outputHigh = false;
235
					toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {
236
 
237
						@Override
238
						public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
239
							if (isChecked) {
240
								outputHigh = true;
241
							} else {
242
								outputHigh = false;
243
							}
244
							if (networkMgr.connectedOk()) {
245
								if (outputHigh)
246
									data[0] = 3.3;
247
								else
248
									data[0] = 0.0;
249
								networkMgr.sendData(pin, data);
250
							}
251
						}
252
					});
253
 
254
					while (true) {
255
						if (Thread.currentThread().isInterrupted()) {
256
							out.close();
257
							viewWidget.setStopSignal();
258
							IOIODebuggerActivity.removeOpenedPin(pin);
259
							if (networkMgr.connectedOk())
260
								networkMgr.notifyStopPin(pin);
261
							break;
262
						}
263
						if (outputHigh) {
264
							viewWidget.updateText("Current Output: HIGH");
265
							out.write(true);
266
						} else {
267
							viewWidget.updateText("Current Output: LOW");
268
							out.write(false);
269
						}
270
						viewWidget.setToggle(outputHigh);
271
						Thread.sleep(50);
272
					}
273
				} catch (ConnectionLostException e) {
274
					viewWidget.updateStatus("Connection Lost");
275
				} catch (InterruptedException e) {
276
					if (out != null)
277
						out.close();
278
					viewWidget.setStopSignal();
279
					IOIODebuggerActivity.removeOpenedPin(pin);
280
					if (networkMgr.connectedOk())
281
						networkMgr.notifyStopPin(pin);
282
				} catch (Exception e) {
283
 
284
				}
285
			}
286
		};
287
		viewWidget.setRunnable(r);
288
		IOIODebuggerActivity.setViewWidget(viewWidget);
289
	}
290
}