diff options
author | Mike Lockwood <lockwood@android.com> | 2011-06-21 08:27:06 -0400 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2011-06-21 08:27:06 -0400 |
commit | 7d40d42a364f520da853b41956b0a18ed172491b (patch) | |
tree | babec49303223c277a3a511076fe46ab35d3dcaf /media | |
parent | 422bf6702f4f099e6fd4fab4c26b0deaeb684e9f (diff) | |
download | frameworks_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.java | 6 | ||||
-rw-r--r-- | media/jni/android_mtp_MtpServer.cpp | 12 | ||||
-rw-r--r-- | media/mtp/MtpServer.cpp | 18 | ||||
-rw-r--r-- | media/mtp/MtpServer.h | 5 |
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(); |