summaryrefslogtreecommitdiffstats
path: root/core/java/android/hardware
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/hardware')
-rw-r--r--core/java/android/hardware/Camera.java38
-rw-r--r--core/java/android/hardware/ISensorService.aidl4
-rw-r--r--core/java/android/hardware/SensorManager.java72
3 files changed, 76 insertions, 38 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index ca579b6..091bc17 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -39,13 +39,16 @@ import android.os.Message;
public class Camera {
private static final String TAG = "Camera";
- // These match the enum in libs/android_runtime/android_hardware_Camera.cpp
- private static final int SHUTTER_CALLBACK = 0;
- private static final int RAW_PICTURE_CALLBACK = 1;
- private static final int JPEG_PICTURE_CALLBACK = 2;
- private static final int PREVIEW_CALLBACK = 3;
- private static final int AUTOFOCUS_CALLBACK = 4;
- private static final int ERROR_CALLBACK = 5;
+ // These match the enums in frameworks/base/include/ui/Camera.h
+ private static final int CAMERA_MSG_ERROR = 0;
+ private static final int CAMERA_MSG_SHUTTER = 1;
+ private static final int CAMERA_MSG_FOCUS = 2;
+ private static final int CAMERA_MSG_ZOOM = 3;
+ private static final int CAMERA_MSG_PREVIEW_FRAME = 4;
+ private static final int CAMERA_MSG_VIDEO_FRAME = 5;
+ private static final int CAMERA_MSG_POSTVIEW_FRAME = 6;
+ private static final int CAMERA_MSG_RAW_IMAGE = 7;
+ private static final int CAMERA_MSG_COMPRESSED_IMAGE = 8;
private int mNativeContext; // accessed by native methods
private EventHandler mEventHandler;
@@ -152,7 +155,11 @@ public class Camera {
* @throws IOException if the method fails.
*/
public final void setPreviewDisplay(SurfaceHolder holder) throws IOException {
- setPreviewDisplay(holder.getSurface());
+ if (holder != null) {
+ setPreviewDisplay(holder.getSurface());
+ } else {
+ setPreviewDisplay((Surface)null);
+ }
}
private native final void setPreviewDisplay(Surface surface);
@@ -231,22 +238,23 @@ public class Camera {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
- case SHUTTER_CALLBACK:
+ case CAMERA_MSG_SHUTTER:
if (mShutterCallback != null) {
mShutterCallback.onShutter();
}
return;
- case RAW_PICTURE_CALLBACK:
+
+ case CAMERA_MSG_RAW_IMAGE:
if (mRawImageCallback != null)
mRawImageCallback.onPictureTaken((byte[])msg.obj, mCamera);
return;
- case JPEG_PICTURE_CALLBACK:
+ case CAMERA_MSG_COMPRESSED_IMAGE:
if (mJpegCallback != null)
mJpegCallback.onPictureTaken((byte[])msg.obj, mCamera);
return;
- case PREVIEW_CALLBACK:
+ case CAMERA_MSG_PREVIEW_FRAME:
if (mPreviewCallback != null) {
mPreviewCallback.onPreviewFrame((byte[])msg.obj, mCamera);
if (mOneShot) {
@@ -255,12 +263,12 @@ public class Camera {
}
return;
- case AUTOFOCUS_CALLBACK:
+ case CAMERA_MSG_FOCUS:
if (mAutoFocusCallback != null)
mAutoFocusCallback.onAutoFocus(msg.arg1 == 0 ? false : true, mCamera);
return;
- case ERROR_CALLBACK:
+ case CAMERA_MSG_ERROR :
Log.e(TAG, "Error " + msg.arg1);
if (mErrorCallback != null)
mErrorCallback.onError(msg.arg1, mCamera);
@@ -363,7 +371,7 @@ public class Camera {
}
private native final void native_takePicture();
- // These match the enum in libs/android_runtime/android_hardware_Camera.cpp
+ // These match the enum in include/ui/Camera.h
/** Unspecified camerar error. @see #ErrorCallback */
public static final int CAMERA_ERROR_UNKNOWN = 1;
/** Media server died. In this case, the application must release the
diff --git a/core/java/android/hardware/ISensorService.aidl b/core/java/android/hardware/ISensorService.aidl
index 04af2ae..67180bd 100644
--- a/core/java/android/hardware/ISensorService.aidl
+++ b/core/java/android/hardware/ISensorService.aidl
@@ -17,13 +17,13 @@
package android.hardware;
-import android.os.ParcelFileDescriptor;
+import android.os.Bundle;
/**
* {@hide}
*/
interface ISensorService
{
- ParcelFileDescriptor getDataChanel();
+ Bundle getDataChannel();
boolean enableSensor(IBinder listener, String name, int sensor, int enable);
}
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index 67df23b..bf945ec 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -18,7 +18,9 @@ package android.hardware;
import android.content.Context;
import android.os.Binder;
+import android.os.Bundle;
import android.os.Looper;
+import android.os.Parcelable;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteException;
@@ -280,8 +282,8 @@ public class SensorManager
void startLocked(ISensorService service) {
try {
if (mThread == null) {
- ParcelFileDescriptor fd = service.getDataChanel();
- mThread = new Thread(new SensorThreadRunnable(fd),
+ Bundle dataChannel = service.getDataChannel();
+ mThread = new Thread(new SensorThreadRunnable(dataChannel),
SensorThread.class.getName());
mThread.start();
}
@@ -291,10 +293,52 @@ public class SensorManager
}
private class SensorThreadRunnable implements Runnable {
- private ParcelFileDescriptor mSensorDataFd;
- SensorThreadRunnable(ParcelFileDescriptor fd) {
- mSensorDataFd = fd;
+ private Bundle mDataChannel;
+ SensorThreadRunnable(Bundle dataChannel) {
+ mDataChannel = dataChannel;
}
+
+ private boolean open() {
+ if (mDataChannel == null) {
+ Log.e(TAG, "mDataChannel == NULL, exiting");
+ synchronized (sListeners) {
+ mThread = null;
+ }
+ return false;
+ }
+
+ // this thread is guaranteed to be unique
+ Parcelable[] pfds = mDataChannel.getParcelableArray("fds");
+ FileDescriptor[] fds;
+ if (pfds != null) {
+ int length = pfds.length;
+ fds = new FileDescriptor[length];
+ for (int i = 0; i < length; i++) {
+ ParcelFileDescriptor pfd = (ParcelFileDescriptor)pfds[i];
+ fds[i] = pfd.getFileDescriptor();
+ }
+ } else {
+ fds = null;
+ }
+ int[] ints = mDataChannel.getIntArray("ints");
+ sensors_data_open(fds, ints);
+ if (pfds != null) {
+ try {
+ // close our copies of the file descriptors,
+ // since we are just passing these to the JNI code and not using them here.
+ for (int i = pfds.length - 1; i >= 0; i--) {
+ ParcelFileDescriptor pfd = (ParcelFileDescriptor)pfds[i];
+ pfd.close();
+ }
+ } catch (IOException e) {
+ // *shrug*
+ Log.e(TAG, "IOException: ", e);
+ }
+ }
+ mDataChannel = null;
+ return true;
+ }
+
public void run() {
//Log.d(TAG, "entering main sensor thread");
final float[] values = new float[3];
@@ -302,23 +346,9 @@ public class SensorManager
final long timestamp[] = new long[1];
Process.setThreadPriority(Process.THREAD_PRIORITY_DISPLAY);
- if (mSensorDataFd == null) {
- Log.e(TAG, "mSensorDataFd == NULL, exiting");
- synchronized (sListeners) {
- mThread = null;
- }
+ if (!open()) {
return;
}
- // this thread is guaranteed to be unique
- sensors_data_open(mSensorDataFd.getFileDescriptor());
- try {
- mSensorDataFd.close();
- } catch (IOException e) {
- // *shrug*
- Log.e(TAG, "IOException: ", e);
- }
- mSensorDataFd = null;
-
while (true) {
// wait for an event
@@ -1469,7 +1499,7 @@ public class SensorManager
// Used within this module from outside SensorManager, don't make private
static native int sensors_data_init();
static native int sensors_data_uninit();
- static native int sensors_data_open(FileDescriptor fd);
+ static native int sensors_data_open(FileDescriptor[] fds, int[] ints);
static native int sensors_data_close();
static native int sensors_data_poll(float[] values, int[] status, long[] timestamp);
}