aboutsummaryrefslogtreecommitdiff
path: root/demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java')
-rw-r--r--demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java843
1 files changed, 339 insertions, 504 deletions
diff --git a/demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java b/demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java
index d066f8b..3544481 100644
--- a/demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java
+++ b/demokit/app/src/com/google/android/DemoKit/DemoKitActivity.java
@@ -16,6 +16,11 @@
package com.google.android.DemoKit;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
@@ -27,231 +32,141 @@ import android.os.Handler;
import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.util.Log;
-
-import android.widget.ImageView;
-import android.widget.TextView;
import android.widget.SeekBar;
-import android.widget.ToggleButton;
-import android.widget.CompoundButton;
-import android.graphics.drawable.Drawable;
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
+public class DemoKitActivity extends Activity implements Runnable {
+ private static final String TAG = "DemoKit";
+
+ private static final String ACTION_USB_PERMISSION = "com.google.android.DemoKit.action.USB_PERMISSION";
+ private UsbManager mUsbManager;
+ private PendingIntent mPermissionIntent;
+ private boolean mPermissionRequestPending;
-public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSeekBarChangeListener, CompoundButton.OnCheckedChangeListener {
- private static final String TAG = "DemoKit";
+ UsbAccessory mAccessory;
+ ParcelFileDescriptor mFileDescriptor;
+ FileInputStream mInputStream;
+ FileOutputStream mOutputStream;
- private static final String ACTION_USB_PERMISSION =
- "com.google.android.DemoKit.action.USB_PERMISSION";
+ private static final int MESSAGE_SWITCH = 1;
+ private static final int MESSAGE_TEMPERATURE = 2;
+ private static final int MESSAGE_LIGHT = 3;
+ private static final int MESSAGE_JOY = 4;
- private UsbManager mUsbManager;
- private PendingIntent mPermissionIntent;
- private boolean mPermissionRequestPending;
+ public static final byte LED_SERVO_COMMAND = 2;
+ public static final byte RELAY_COMMAND = 3;
- UsbAccessory mAccessory;
- ParcelFileDescriptor mFileDescriptor;
- FileInputStream mInputStream;
- FileOutputStream mOutputStream;
+ protected class SwitchMsg {
+ private byte sw;
+ private byte state;
- ImageView mButton1Image;
- ImageView mButton2Image;
- ImageView mButton3Image;
+ public SwitchMsg(byte sw, byte state) {
+ this.sw = sw;
+ this.state = state;
+ }
+
+ public byte getSw() {
+ return sw;
+ }
+
+ public byte getState() {
+ return state;
+ }
+ }
+
+ protected class TemperatureMsg {
+ private int temperature;
+
+ public TemperatureMsg(int temperature) {
+ this.temperature = temperature;
+ }
+
+ public int getTemperature() {
+ return temperature;
+ }
+ }
+
+ protected class LightMsg {
+ private int light;
+
+ public LightMsg(int light) {
+ this.light = light;
+ }
+
+ public int getLight() {
+ return light;
+ }
+ }
+
+ protected class JoyMsg {
+ private int x;
+ private int y;
+
+ public JoyMsg(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+ }
+
+ private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (ACTION_USB_PERMISSION.equals(action)) {
+ synchronized (this) {
+ UsbAccessory accessory = UsbManager.getAccessory(intent);
+ if (intent.getBooleanExtra(
+ UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
+ openAccessory(accessory);
+ } else {
+ Log.d(TAG, "permission denied for accessory "
+ + accessory);
+ }
+ mPermissionRequestPending = false;
+ }
+ } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
+ UsbAccessory accessory = UsbManager.getAccessory(intent);
+ if (accessory != null && accessory.equals(mAccessory)) {
+ closeAccessory();
+ }
+ }
+ }
+ };
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mUsbManager = UsbManager.getInstance(this);
+ mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
+ ACTION_USB_PERMISSION), 0);
+ IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
+ filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
+ registerReceiver(mUsbReceiver, filter);
+
+ if (getLastNonConfigurationInstance() != null) {
+ mAccessory = (UsbAccessory) getLastNonConfigurationInstance();
+ openAccessory(mAccessory);
+ }
+
+ setContentView(R.layout.main);
+
+ enableControls(false);
+ }
- SeekBar mLed1Red;
- SeekBar mLed1Green;
- SeekBar mLed1Blue;
- SeekBar mLed2Red;
- SeekBar mLed2Green;
- SeekBar mLed2Blue;
- SeekBar mLed3Red;
- SeekBar mLed3Green;
- SeekBar mLed3Blue;
-
- ToggleButton mRelay1Button;
- ToggleButton mRelay2Button;
-
- TextView mTemperature;
- TextView mLight;
-
- SeekBar mServo1;
- SeekBar mServo2;
- SeekBar mServo3;
-
- TextView mJoyX;
- TextView mJoyY;
- ImageView mJoyButtonImage;
-
-
- ImageView mCap;
-
-
- Drawable mSwitchOff;
- Drawable mSwitchOn;
-
- private static final int MESSAGE_SWITCH = 1;
- private static final int MESSAGE_TEMPERATURE = 2;
- private static final int MESSAGE_LIGHT = 3;
- private static final int MESSAGE_JOY = 4;
-
- private class SwitchMsg {
- private byte sw;
- private byte state;
- public SwitchMsg(byte sw, byte state) {
- this.sw = sw;
- this.state = state;
- }
-
- public byte getSw() {
- return sw;
- }
-
- public byte getState() {
- return state;
- }
- }
-
- private class TemperatureMsg {
- private int temperature;
-
- public TemperatureMsg(int temperature) {
- this.temperature = temperature;
- }
-
- public int getTemperature() {
- return temperature;
- }
- }
-
- private class LightMsg {
- private int light;
-
- public LightMsg(int light) {
- this.light = light;
- }
-
- public int getLight() {
- return light;
- }
- }
-
- private class JoyMsg {
- private int x;
- private int y;
-
- public JoyMsg(int x, int y) {
- this.x = x;
- this.y = y;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
- }
-
- private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (ACTION_USB_PERMISSION.equals(action)) {
- synchronized (this) {
- UsbAccessory accessory = UsbManager.getAccessory(intent);
- if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
- openAccessory(accessory);
- } else {
- Log.d(TAG, "permission denied for accessory " + accessory);
- }
- mPermissionRequestPending = false;
- }
- } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
- UsbAccessory accessory = UsbManager.getAccessory(intent);
- if (accessory != null && accessory.equals(mAccessory)) {
- closeAccessory();
- }
- }
- }
- };
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mUsbManager = UsbManager.getInstance(this);
- mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
- IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
- filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
- registerReceiver(mUsbReceiver, filter);
-
- if (getLastNonConfigurationInstance() != null) {
- mAccessory = (UsbAccessory) getLastNonConfigurationInstance();
- openAccessory(mAccessory);
- }
-
- setContentView(R.layout.main);
-
- mButton1Image = (ImageView)findViewById(R.id.button1Image);
- mButton2Image = (ImageView)findViewById(R.id.button2Image);
- mButton3Image = (ImageView)findViewById(R.id.button3Image);
-
- mLed1Red = (SeekBar)findViewById(R.id.led1Red);
- mLed1Red.setOnSeekBarChangeListener(this);
- mLed1Green = (SeekBar)findViewById(R.id.led1Green);
- mLed1Green.setOnSeekBarChangeListener(this);
- mLed1Blue = (SeekBar)findViewById(R.id.led1Blue);
- mLed1Blue.setOnSeekBarChangeListener(this);
-
- mLed2Red = (SeekBar)findViewById(R.id.led2Red);
- mLed2Red.setOnSeekBarChangeListener(this);
- mLed2Green = (SeekBar)findViewById(R.id.led2Green);
- mLed2Green.setOnSeekBarChangeListener(this);
- mLed2Blue = (SeekBar)findViewById(R.id.led2Blue);
- mLed2Blue.setOnSeekBarChangeListener(this);
-
- mLed3Red = (SeekBar)findViewById(R.id.led3Red);
- mLed3Red.setOnSeekBarChangeListener(this);
- mLed3Green = (SeekBar)findViewById(R.id.led3Green);
- mLed3Green.setOnSeekBarChangeListener(this);
- mLed3Blue = (SeekBar)findViewById(R.id.led3Blue);
- mLed3Blue.setOnSeekBarChangeListener(this);
-
- mRelay1Button = (ToggleButton)findViewById(R.id.relay1Button);
- mRelay1Button.setOnCheckedChangeListener(this);
- mRelay2Button = (ToggleButton)findViewById(R.id.relay2Button);
- mRelay2Button.setOnCheckedChangeListener(this);
-
- mTemperature = (TextView)findViewById(R.id.temperature);
- mLight = (TextView)findViewById(R.id.light);
-
- mServo1 = (SeekBar)findViewById(R.id.servo1);
- mServo1.setOnSeekBarChangeListener(this);
- mServo2 = (SeekBar)findViewById(R.id.servo2);
- mServo2.setOnSeekBarChangeListener(this);
- mServo3 = (SeekBar)findViewById(R.id.servo3);
- mServo3.setOnSeekBarChangeListener(this);
-
- mJoyX = (TextView)findViewById(R.id.joyX);
- mJoyY = (TextView)findViewById(R.id.joyY);
- mJoyButtonImage = (ImageView)findViewById(R.id.joyButtonImage);
-
- mCap = (ImageView)findViewById(R.id.cap);
-
- mSwitchOff = getResources().getDrawable(R.drawable.droid_off);
- mSwitchOn = getResources().getDrawable(R.drawable.droid_on);
-
- enableControls(false);
- }
-
- @Override
+ @Override
public Object onRetainNonConfigurationInstance() {
if (mAccessory != null) {
return mAccessory;
@@ -261,295 +176,215 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee
}
@Override
- public void onResume() {
- super.onResume();
-
- Intent intent = getIntent();
- Log.d(TAG, "intent: " + intent);
- if (mInputStream != null && mOutputStream != null) {
- return;
- }
-
- UsbAccessory[] accessories = mUsbManager.getAccessoryList();
- UsbAccessory accessory = (accessories == null ? null : accessories[0]);
- if (accessory != null) {
- if (mUsbManager.hasPermission(accessory)) {
- openAccessory(accessory);
- } else {
- synchronized (mUsbReceiver) {
- if (!mPermissionRequestPending) {
- mUsbManager.requestPermission(accessory, mPermissionIntent);
- mPermissionRequestPending = true;
- }
- }
- }
- } else {
- Log.d(TAG, "mAccessory is null");
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- closeAccessory();
- }
-
- @Override
- public void onDestroy() {
- unregisterReceiver(mUsbReceiver);
- super.onDestroy();
- }
-
- private void openAccessory(UsbAccessory accessory) {
- Log.d(TAG, "openAccessory: " + accessory);
- mFileDescriptor = mUsbManager.openAccessory(accessory);
- if (mFileDescriptor != null) {
- mAccessory = accessory;
- FileDescriptor fd = mFileDescriptor.getFileDescriptor();
- mInputStream = new FileInputStream(fd);
- mOutputStream = new FileOutputStream(fd);
- Thread thread = new Thread(null, this, "AccessoryChat");
- thread.start();
- Log.d(TAG, "openAccessory succeeded");
- enableControls(true);
- } else {
- Log.d(TAG, "openAccessory fail");
- }
- }
-
- private void closeAccessory() {
- enableControls(false);
-
- mButton1Image.setImageDrawable(mSwitchOff);
- mButton2Image.setImageDrawable(mSwitchOff);
- mButton3Image.setImageDrawable(mSwitchOff);
- mJoyButtonImage.setImageDrawable(mSwitchOff);
- mCap.setImageDrawable(mSwitchOff);
- mLed1Red.setProgress(0);
- mLed1Green.setProgress(0);
- mLed1Blue.setProgress(0);
- mLed2Red.setProgress(0);
- mLed2Green.setProgress(0);
- mLed2Blue.setProgress(0);
- mLed3Red.setProgress(0);
- mLed3Green.setProgress(0);
- mLed3Blue.setProgress(0);
- mServo1.setProgress(0);
- mServo2.setProgress(0);
- mServo3.setProgress(0);
- mTemperature.setText("");
- mLight.setText("");
- mJoyX.setText("");
- mJoyY.setText("");
- mRelay1Button.setChecked(false);
- mRelay2Button.setChecked(false);
-
- try {
- if (mFileDescriptor != null) {
- mFileDescriptor.close();
- }
- } catch (IOException e) {
- } finally {
- mFileDescriptor = null;
- mAccessory = null;
- }
- }
-
- private void enableControls(boolean enable) {
- mLed1Red.setEnabled(enable);
- mLed1Green.setEnabled(enable);
- mLed1Blue.setEnabled(enable);
- mLed2Red.setEnabled(enable);
- mLed2Green.setEnabled(enable);
- mLed2Blue.setEnabled(enable);
- mLed3Red.setEnabled(enable);
- mLed3Green.setEnabled(enable);
- mLed3Blue.setEnabled(enable);
- mServo1.setEnabled(enable);
- mServo2.setEnabled(enable);
- mServo3.setEnabled(enable);
- mRelay1Button.setEnabled(enable);
- mRelay2Button.setEnabled(enable);
- }
-
- private int composeInt(byte hi, byte lo) {
- int val = (int)hi & 0xff;
- val *= 256;
- val += (int)lo & 0xff;
- return val;
- }
-
- public void run() {
- int ret = 0;
- byte[] buffer = new byte[16384];
- int i;
-
- while (ret >= 0) {
- try {
- ret = mInputStream.read(buffer);
- } catch (IOException e) {
- break;
- }
-
- Log.d(TAG, "got bytes " + ret);
- i = 0;
- while (i < ret) {
- int len = ret - i;
-
- switch (buffer[i]) {
- case 0x1:
- if (len >= 3) {
- Message m = Message.obtain(mHandler, MESSAGE_SWITCH);
- m.obj = new SwitchMsg(buffer[i+1], buffer[i+2]);
- mHandler.sendMessage(m);
- }
- i += 3;
- break;
-
- case 0x4:
- if (len >= 3) {
- Message m = Message.obtain(mHandler, MESSAGE_TEMPERATURE);
- m.obj = new TemperatureMsg(composeInt(buffer[i+1], buffer[i+2]));
- mHandler.sendMessage(m);
- }
- i += 3;
- break;
-
- case 0x5:
- if (len >= 3) {
- Message m = Message.obtain(mHandler, MESSAGE_LIGHT);
- m.obj = new LightMsg(composeInt(buffer[i+1], buffer[i+2]));
- mHandler.sendMessage(m);
- }
- i += 3;
- break;
-
- case 0x6:
- if (len >= 3) {
- Message m = Message.obtain(mHandler, MESSAGE_JOY);
- m.obj = new JoyMsg(buffer[i+1], buffer[i+2]);
- mHandler.sendMessage(m);
- }
- i += 3;
- break;
-
- default:
- Log.d(TAG, "unknown msg: " + buffer[i]);
- i = len;
- break;
- }
- }
-
- }
- Log.d(TAG, "thread out");
- }
-
- Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MESSAGE_SWITCH:
- SwitchMsg o = (SwitchMsg)msg.obj;
- if (o.getSw() == 0)
- mButton1Image.setImageDrawable(o.getState() != 0 ? mSwitchOn : mSwitchOff);
- else if (o.getSw() == 1)
- mButton2Image.setImageDrawable(o.getState() != 0 ? mSwitchOn : mSwitchOff);
- else if (o.getSw() == 2)
- mButton3Image.setImageDrawable(o.getState() != 0 ? mSwitchOn : mSwitchOff);
- else if (o.getSw() == 3)
- mCap.setImageDrawable(o.getState() != 0 ? mSwitchOn : mSwitchOff);
- else if (o.getSw() == 4)
- mJoyButtonImage.setImageDrawable(o.getState() != 0 ? mSwitchOn : mSwitchOff);
- break;
-
- case MESSAGE_TEMPERATURE:
- TemperatureMsg t = (TemperatureMsg)msg.obj;
- mTemperature.setText(String.format("%04x", t.getTemperature()));
- break;
-
- case MESSAGE_LIGHT:
- LightMsg l = (LightMsg)msg.obj;
- mLight.setText(String.format("%04x", l.getLight()));
- break;
-
- case MESSAGE_JOY:
- JoyMsg j = (JoyMsg)msg.obj;
- mJoyX.setText(String.format("%d", j.getX()));
- mJoyY.setText(String.format("%d", j.getY()));
- break;
-
- }
- }
- };
-
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- byte[] buffer = new byte[3];
- if (progress > 255)
- progress = 255;
-
- buffer[0] = 0x2;
- buffer[1] = -1;
- buffer[2] = (byte) progress;
-
- if (seekBar == mLed1Red)
- buffer[1] = 0x0;
- else if (seekBar == mLed1Green)
- buffer[1] = 0x1;
- else if (seekBar == mLed1Blue)
- buffer[1] = 0x2;
- else if (seekBar == mLed2Red)
- buffer[1] = 0x3;
- else if (seekBar == mLed2Green)
- buffer[1] = 0x4;
- else if (seekBar == mLed2Blue)
- buffer[1] = 0x5;
- else if (seekBar == mLed3Red)
- buffer[1] = 0x6;
- else if (seekBar == mLed3Green)
- buffer[1] = 0x7;
- else if (seekBar == mLed3Blue)
- buffer[1] = 0x8;
- else if (seekBar == mServo1)
- buffer[1] = 0x10;
- else if (seekBar == mServo2)
- buffer[1] = 0x11;
- else if (seekBar == mServo3)
- buffer[1] = 0x12;
-
- if (mOutputStream != null && buffer[1] != -1) {
- try {
- mOutputStream.write(buffer);
- } catch (IOException e) {
- Log.e(TAG, "write failed", e);
- }
- }
-
- }
-
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
-
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- byte[] buffer = new byte[3];
- buffer[0] = 0x3;
- buffer[1] = -1;
- buffer[2] = isChecked ? (byte)0x1 : (byte)0x0;
-
- if (buttonView == mRelay1Button)
- buffer[1] = 0;
- else if (buttonView == mRelay2Button)
- buffer[1] = 1;
-
- if (buffer[1] != -1) {
- try {
- mOutputStream.write(buffer);
- } catch (IOException e) {
- Log.e(TAG, "write failed", e);
- }
- }
- }
-}
+ public void onResume() {
+ super.onResume();
+
+ Intent intent = getIntent();
+ Log.d(TAG, "intent: " + intent);
+ if (mInputStream != null && mOutputStream != null) {
+ return;
+ }
+
+ UsbAccessory[] accessories = mUsbManager.getAccessoryList();
+ UsbAccessory accessory = (accessories == null ? null : accessories[0]);
+ if (accessory != null) {
+ if (mUsbManager.hasPermission(accessory)) {
+ openAccessory(accessory);
+ } else {
+ synchronized (mUsbReceiver) {
+ if (!mPermissionRequestPending) {
+ mUsbManager.requestPermission(accessory,
+ mPermissionIntent);
+ mPermissionRequestPending = true;
+ }
+ }
+ }
+ } else {
+ Log.d(TAG, "mAccessory is null");
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ closeAccessory();
+ }
+
+ @Override
+ public void onDestroy() {
+ unregisterReceiver(mUsbReceiver);
+ super.onDestroy();
+ }
+
+ private void openAccessory(UsbAccessory accessory) {
+ Log.d(TAG, "openAccessory: " + accessory);
+ mFileDescriptor = mUsbManager.openAccessory(accessory);
+ if (mFileDescriptor != null) {
+ mAccessory = accessory;
+ FileDescriptor fd = mFileDescriptor.getFileDescriptor();
+ mInputStream = new FileInputStream(fd);
+ mOutputStream = new FileOutputStream(fd);
+ Thread thread = new Thread(null, this, "AccessoryChat");
+ thread.start();
+ Log.d(TAG, "openAccessory succeeded");
+ enableControls(true);
+ } else {
+ Log.d(TAG, "openAccessory fail");
+ }
+ }
+
+ private void closeAccessory() {
+ enableControls(false);
+
+ try {
+ if (mFileDescriptor != null) {
+ mFileDescriptor.close();
+ }
+ } catch (IOException e) {
+ } finally {
+ mFileDescriptor = null;
+ mAccessory = null;
+ }
+ }
+
+ protected void enableControls(boolean enable) {
+ }
+ private int composeInt(byte hi, byte lo) {
+ int val = (int) hi & 0xff;
+ val *= 256;
+ val += (int) lo & 0xff;
+ return val;
+ }
+
+ public void run() {
+ int ret = 0;
+ byte[] buffer = new byte[16384];
+ int i;
+
+ while (ret >= 0) {
+ try {
+ ret = mInputStream.read(buffer);
+ } catch (IOException e) {
+ break;
+ }
+
+ Log.d(TAG, "got bytes " + ret);
+ i = 0;
+ while (i < ret) {
+ int len = ret - i;
+
+ switch (buffer[i]) {
+ case 0x1:
+ if (len >= 3) {
+ Message m = Message.obtain(mHandler, MESSAGE_SWITCH);
+ m.obj = new SwitchMsg(buffer[i + 1], buffer[i + 2]);
+ mHandler.sendMessage(m);
+ }
+ i += 3;
+ break;
+
+ case 0x4:
+ if (len >= 3) {
+ Message m = Message.obtain(mHandler,
+ MESSAGE_TEMPERATURE);
+ m.obj = new TemperatureMsg(composeInt(buffer[i + 1],
+ buffer[i + 2]));
+ mHandler.sendMessage(m);
+ }
+ i += 3;
+ break;
+
+ case 0x5:
+ if (len >= 3) {
+ Message m = Message.obtain(mHandler, MESSAGE_LIGHT);
+ m.obj = new LightMsg(composeInt(buffer[i + 1],
+ buffer[i + 2]));
+ mHandler.sendMessage(m);
+ }
+ i += 3;
+ break;
+
+ case 0x6:
+ if (len >= 3) {
+ Message m = Message.obtain(mHandler, MESSAGE_JOY);
+ m.obj = new JoyMsg(buffer[i + 1], buffer[i + 2]);
+ mHandler.sendMessage(m);
+ }
+ i += 3;
+ break;
+
+ default:
+ Log.d(TAG, "unknown msg: " + buffer[i]);
+ i = len;
+ break;
+ }
+ }
+
+ }
+ Log.d(TAG, "thread out");
+ }
+
+ Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_SWITCH:
+ SwitchMsg o = (SwitchMsg) msg.obj;
+ handleSwitchMessage(o);
+ break;
+
+ case MESSAGE_TEMPERATURE:
+ TemperatureMsg t = (TemperatureMsg) msg.obj;
+ handleTemperatureMessage(t);
+ break;
+
+ case MESSAGE_LIGHT:
+ LightMsg l = (LightMsg) msg.obj;
+ handleLightMessage(l);
+ break;
+
+ case MESSAGE_JOY:
+ JoyMsg j = (JoyMsg) msg.obj;
+ handleJoyMessage(j);
+ break;
+
+ }
+ }
+ };
+
+ public void sendCommand(byte command, byte target, int value) {
+ byte[] buffer = new byte[3];
+ if (value > 255)
+ value = 255;
+
+ buffer[0] = command;
+ buffer[1] = target;
+ buffer[2] = (byte) value;
+ if (mOutputStream != null && buffer[1] != -1) {
+ try {
+ mOutputStream.write(buffer);
+ } catch (IOException e) {
+ Log.e(TAG, "write failed", e);
+ }
+ }
+ }
+
+ protected void handleJoyMessage(JoyMsg j) {
+ }
+
+ protected void handleLightMessage(LightMsg l) {
+ }
+
+ protected void handleTemperatureMessage(TemperatureMsg t) {
+ }
+
+ protected void handleSwitchMessage(SwitchMsg o) {
+ }
+
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+}