diff options
Diffstat (limited to 'demokit/app/src/com/google/DemoKit/DemoKitActivity.java')
-rw-r--r-- | demokit/app/src/com/google/DemoKit/DemoKitActivity.java | 84 |
1 files changed, 68 insertions, 16 deletions
diff --git a/demokit/app/src/com/google/DemoKit/DemoKitActivity.java b/demokit/app/src/com/google/DemoKit/DemoKitActivity.java index b9f3636..338276f 100644 --- a/demokit/app/src/com/google/DemoKit/DemoKitActivity.java +++ b/demokit/app/src/com/google/DemoKit/DemoKitActivity.java @@ -54,6 +54,7 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee private PendingIntent mPermissionIntent; private boolean mPermissionRequestPending; + UsbAccessory mAccessory; ParcelFileDescriptor mFileDescriptor; FileInputStream mInputStream; FileOutputStream mOutputStream; @@ -158,7 +159,8 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (ACTION_USB_PERMISSION.equals(intent.getAction())) { + 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)) { @@ -168,6 +170,11 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee } mPermissionRequestPending = false; } + } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) { + UsbAccessory accessory = UsbManager.getAccessory(intent); + if (accessory != null && accessory.equals(mAccessory)) { + closeAccessory(); + } } } }; @@ -180,6 +187,7 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee 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); setContentView(R.layout.main); @@ -229,9 +237,10 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee mCap = (ImageView)findViewById(R.id.cap); - mSwitchOff = getResources().getDrawable(R.drawable.droid_off); + mSwitchOff = getResources().getDrawable(R.drawable.droid_off); mSwitchOn = getResources().getDrawable(R.drawable.droid_on); + enableControls(false); } @Override @@ -261,14 +270,7 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee @Override public void onPause() { super.onPause(); - if (mFileDescriptor != null) { - try { - mFileDescriptor.close(); - } catch (IOException e) { - } finally { - mFileDescriptor = null; - } - } + closeAccessory(); } @Override @@ -281,17 +283,73 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee 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); + 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; @@ -401,9 +459,6 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee }; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (mOutputStream == null) - return; - byte[] buffer = new byte[3]; if (progress > 255) progress = 255; @@ -454,9 +509,6 @@ public class DemoKitActivity extends Activity implements Runnable, SeekBar.OnSee } public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (mOutputStream == null) - return; - byte[] buffer = new byte[3]; buffer[0] = 0x3; buffer[1] = -1; |