diff --git a/mtp/ffs/MtpServer.cpp b/mtp/ffs/MtpServer.cpp index fa670243..454da251 100755 --- a/mtp/ffs/MtpServer.cpp +++ b/mtp/ffs/MtpServer.cpp @@ -164,8 +164,17 @@ bool MtpServer::hasStorage(MtpStorageID id) { void MtpServer::run() { if (mHandle->start(mPtp)) { - MTPE("Failed to start usb driver!"); + MTPE("Failed to start usb driver!\n"); mHandle->close(); + int controlFd = open(FFS_MTP_EP0, O_RDWR); + bool ffs_ok = access(FFS_MTP_EP0, W_OK) == 0; + if (ffs_ok) { + bool aio_compat = android::base::GetBoolProperty("sys.usb.ffs.aio_compat", false); + mHandle = aio_compat ? new MtpFfsCompatHandle(controlFd) : new MtpFfsHandle(controlFd); + mHandle->writeDescriptors(mPtp); + } else { + mHandle = new MtpDevHandle(controlFd); + } return; }