summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2011-06-21 08:27:06 -0400
committerMike Lockwood <lockwood@android.com>2011-06-21 08:27:06 -0400
commit7d40d42a364f520da853b41956b0a18ed172491b (patch)
treebabec49303223c277a3a511076fe46ab35d3dcaf /media
parent422bf6702f4f099e6fd4fab4c26b0deaeb684e9f (diff)
downloadframeworks_base-7d40d42a364f520da853b41956b0a18ed172491b.zip
frameworks_base-7d40d42a364f520da853b41956b0a18ed172491b.tar.gz
frameworks_base-7d40d42a364f520da853b41956b0a18ed172491b.tar.bz2
MTP: Add support for PTP variant of GetDeviceInfo result.
Change-Id: I09f86fda768b7697665e401adb9516588859bf59 Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'media')
-rw-r--r--media/java/android/mtp/MtpServer.java6
-rw-r--r--media/jni/android_mtp_MtpServer.cpp12
-rw-r--r--media/mtp/MtpServer.cpp18
-rw-r--r--media/mtp/MtpServer.h5
4 files changed, 29 insertions, 12 deletions
diff --git a/media/java/android/mtp/MtpServer.java b/media/java/android/mtp/MtpServer.java
index 687cc44..0133cf6 100644
--- a/media/java/android/mtp/MtpServer.java
+++ b/media/java/android/mtp/MtpServer.java
@@ -33,8 +33,8 @@ public class MtpServer {
System.loadLibrary("media_jni");
}
- public MtpServer(MtpDatabase database) {
- native_setup(database);
+ public MtpServer(MtpDatabase database, boolean usePtp) {
+ native_setup(database, usePtp);
}
public void start() {
@@ -69,7 +69,7 @@ public class MtpServer {
native_remove_storage(storage.getStorageId());
}
- private native final void native_setup(MtpDatabase database);
+ private native final void native_setup(MtpDatabase database, boolean usePtp);
private native final void native_start();
private native final void native_stop();
private native final void native_send_object_added(int handle);
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index e36e6db..aaf85c3 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -68,13 +68,15 @@ static bool ExceptionCheck(void* env)
class MtpThread : public Thread {
private:
MtpDatabase* mDatabase;
+ bool mPtp;
MtpServer* mServer;
MtpStorageList mStorageList;
int mFd;
public:
- MtpThread(MtpDatabase* database)
+ MtpThread(MtpDatabase* database, bool usePtp)
: mDatabase(database),
+ mPtp(usePtp),
mServer(NULL),
mFd(-1)
{
@@ -113,7 +115,7 @@ public:
mFd = open("/dev/mtp_usb", O_RDWR);
if (mFd >= 0) {
- mServer = new MtpServer(mFd, mDatabase, AID_MEDIA_RW, 0664, 0775);
+ mServer = new MtpServer(mFd, mDatabase, mPtp, AID_MEDIA_RW, 0664, 0775);
for (size_t i = 0; i < mStorageList.size(); i++) {
mServer->addStorage(mStorageList[i]);
}
@@ -156,11 +158,11 @@ static sp<MtpThread> sThread;
#endif // HAVE_ANDROID_OS
static void
-android_mtp_MtpServer_setup(JNIEnv *env, jobject thiz, jobject javaDatabase)
+android_mtp_MtpServer_setup(JNIEnv *env, jobject thiz, jobject javaDatabase, jboolean usePtp)
{
#ifdef HAVE_ANDROID_OS
// create the thread and assign it to the smart pointer
- sThread = new MtpThread(getMtpDatabase(env, javaDatabase));
+ sThread = new MtpThread(getMtpDatabase(env, javaDatabase), usePtp);
#endif
}
@@ -263,7 +265,7 @@ android_mtp_MtpServer_remove_storage(JNIEnv *env, jobject thiz, jint storageId)
// ----------------------------------------------------------------------------
static JNINativeMethod gMethods[] = {
- {"native_setup", "(Landroid/mtp/MtpDatabase;)V",
+ {"native_setup", "(Landroid/mtp/MtpDatabase;Z)V",
(void *)android_mtp_MtpServer_setup},
{"native_start", "()V", (void *)android_mtp_MtpServer_start},
{"native_stop", "()V", (void *)android_mtp_MtpServer_stop},
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index 9ec73c4..bc04e8c 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -95,10 +95,11 @@ static const MtpEventCode kSupportedEventCodes[] = {
MTP_EVENT_STORE_REMOVED,
};
-MtpServer::MtpServer(int fd, MtpDatabase* database,
+MtpServer::MtpServer(int fd, MtpDatabase* database, bool ptp,
int fileGroup, int filePerm, int directoryPerm)
: mFD(fd),
mDatabase(database),
+ mPtp(ptp),
mFileGroup(fileGroup),
mFilePermission(filePerm),
mDirectoryPermission(directoryPerm),
@@ -426,9 +427,20 @@ MtpResponseCode MtpServer::doGetDeviceInfo() {
// fill in device info
mData.putUInt16(MTP_STANDARD_VERSION);
- mData.putUInt32(6); // MTP Vendor Extension ID
+ if (mPtp) {
+ mData.putUInt32(0);
+ } else {
+ // MTP Vendor Extension ID
+ mData.putUInt32(6);
+ }
mData.putUInt16(MTP_STANDARD_VERSION);
- string.set("microsoft.com: 1.0; android.com: 1.0;");
+ if (mPtp) {
+ // no extensions
+ string.set("");
+ } else {
+ // MTP extensions
+ string.set("microsoft.com: 1.0; android.com: 1.0;");
+ }
mData.putString(string); // MTP Extensions
mData.putUInt16(0); //Functional Mode
mData.putAUInt16(kSupportedOperationCodes,
diff --git a/media/mtp/MtpServer.h b/media/mtp/MtpServer.h
index 859a18e..dfa8258 100644
--- a/media/mtp/MtpServer.h
+++ b/media/mtp/MtpServer.h
@@ -39,6 +39,9 @@ private:
MtpDatabase* mDatabase;
+ // appear as a PTP device
+ bool mPtp;
+
// group to own new files and folders
int mFileGroup;
// permissions for new files and directories
@@ -87,7 +90,7 @@ private:
Vector<ObjectEdit*> mObjectEditList;
public:
- MtpServer(int fd, MtpDatabase* database,
+ MtpServer(int fd, MtpDatabase* database, bool ptp,
int fileGroup, int filePerm, int directoryPerm);
virtual ~MtpServer();