Merge "Remove command line mtp host tool"
diff --git a/media/tests/mtp/Android.mk b/media/tests/mtp/Android.mk
deleted file mode 100644
index a9074ed..0000000
--- a/media/tests/mtp/Android.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-ifneq ($(TARGET_SIMULATOR),true)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	mtp.cpp \
-	MtpFile.cpp \
-
-LOCAL_C_INCLUDES += \
-    frameworks/base/media/mtp \
-
-LOCAL_CFLAGS := -DMTP_HOST
-
-LOCAL_MODULE := mtp
-
-LOCAL_STATIC_LIBRARIES := libmtp libusbhost libutils libcutils
-
-include $(BUILD_EXECUTABLE)
-
-endif
-
-ifeq ($(HOST_OS),linux)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	mtp.cpp \
-	MtpFile.cpp \
-	../../../libs/utils/RefBase.cpp \
-	../../../libs/utils/SharedBuffer.cpp \
-	../../../libs/utils/Threads.cpp \
-	../../../libs/utils/VectorImpl.cpp \
-
-LOCAL_C_INCLUDES += \
-    frameworks/base/media/mtp \
-
-LOCAL_CFLAGS := -DMTP_HOST -g -O0
-
-have_readline := $(wildcard /usr/include/readline/readline.h)
-have_history := $(wildcard /usr/lib/libhistory*)
-ifneq ($(strip $(have_readline)),)
-LOCAL_CFLAGS += -DHAVE_READLINE=1
-endif
-
-LOCAL_LDLIBS += -lpthread
-ifneq ($(strip $(have_readline)),)
-LOCAL_LDLIBS += -lreadline -lncurses
-endif
-ifneq ($(strip $(have_history)),)
-LOCAL_LDLIBS += -lhistory
-endif
-
-LOCAL_MODULE := mtp
-
-LOCAL_STATIC_LIBRARIES := libmtp libusbhost libcutils
-
-include $(BUILD_HOST_EXECUTABLE)
-
-endif
diff --git a/media/tests/mtp/MtpFile.cpp b/media/tests/mtp/MtpFile.cpp
deleted file mode 100644
index 00d328e..0000000
--- a/media/tests/mtp/MtpFile.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "MtpClient.h"
-#include "MtpDevice.h"
-#include "MtpDeviceInfo.h"
-#include "MtpObjectInfo.h"
-#include "MtpStorage.h"
-#include "MtpUtils.h"
-
-#include "MtpFile.h"
-
-namespace android {
-
-MtpClient* MtpFile::sClient = NULL;
-
-MtpFile::MtpFile(MtpDevice* device)
-    :   mDevice(device),
-        mStorage(0),
-        mHandle(0)
-{
-}
-
-MtpFile::MtpFile(MtpDevice* device, MtpStorageID storage)
-    :   mDevice(device),
-        mStorage(storage),
-        mHandle(0)
-{
-}
-
-MtpFile::MtpFile(MtpDevice* device, MtpStorageID storage, MtpObjectHandle handle)
-    :   mDevice(device),
-        mStorage(storage),
-        mHandle(handle)
-{
-}
-
-MtpFile::MtpFile(MtpFile* file)
-    :   mDevice(file->mDevice),
-        mStorage(file->mStorage),
-        mHandle(file->mHandle)
-{
-}
-
-MtpFile::~MtpFile() {
-}
-
-void MtpFile::print() {
-    if (mHandle) {
-
-    } else if (mStorage) {
-        printf("%x\n", mStorage);
-    } else {
-        int id = mDevice->getID();
-        MtpDeviceInfo* info = mDevice->getDeviceInfo();
-        if (info)
-            printf("%d\t%s %s %s\n", id, info->mManufacturer, info->mModel, info->mSerial);
-        else
-            printf("%d\t(no device info available)\n", id);
-        delete info;
-    }
-}
-
-MtpObjectInfo* MtpFile::getObjectInfo() {
-    return mDevice->getObjectInfo(mHandle);
-}
-
-void MtpFile::list() {
-    if (mStorage) {
-        MtpObjectHandleList* handles = mDevice->getObjectHandles(mStorage, 0,
-                                                (mHandle ? mHandle : -1));
-        if (handles) {
-            for (int i = 0; i < handles->size(); i++) {
-                MtpObjectHandle handle = (*handles)[i];
-                MtpObjectInfo* info = mDevice->getObjectInfo(handle);
-                if (info) {
-                    char modified[100];
-                    struct tm tm;
-
-                    gmtime_r(&info->mDateModified, &tm);
-                    strftime(modified, sizeof(modified), "%a %b %e %H:%M:%S GMT %Y", &tm);
-                    printf("%s Handle: %d Format: %04X Size: %d Modified: %s\n",
-                            info->mName, handle, info->mFormat, info->mCompressedSize, modified);
-                    delete info;
-                }
-            }
-            delete handles;
-        }
-    } else {
-        // list storage units for device
-        MtpStorageIDList* storageList = mDevice->getStorageIDs();
-        for (int i = 0; i < storageList->size(); i++) {
-            MtpStorageID storageID = (*storageList)[i];
-            printf("%x\n", storageID);
-        }
-    }
-}
-
-void MtpFile::init(MtpClient* client) {
-    sClient = client;
-}
-
-MtpFile* MtpFile::parsePath(MtpFile* base, char* path) {
-    MtpDevice* device = NULL;
-    MtpStorageID storage = 0;
-    MtpObjectHandle handle = 0;
-
-    if (path[0] != '/' && base) {
-        device = base->mDevice;
-        storage = base->mStorage;
-        handle = base->mHandle;
-    }
-
-    // parse an absolute path
-    if (path[0] == '/')
-        path++;
-    char* tok = strtok(path, "/");
-    while (tok) {
-        if (storage) {
-            // find child of current handle
-            MtpObjectHandleList* handles = device->getObjectHandles(storage, 0,
-                                                    (handle ? handle : -1));
-            MtpObjectHandle childHandle = 0;
-
-            if (handles) {
-                for (int i = 0; i < handles->size() && !childHandle; i++) {
-                    MtpObjectHandle handle = (*handles)[i];
-                    MtpObjectInfo* info = device->getObjectInfo(handle);
-                    if (info && !strcmp(tok, info->mName))
-                        childHandle = handle;
-                    delete info;
-                }
-                delete handles;
-            }
-            if (childHandle)
-                handle = childHandle;
-            else
-                return NULL;
-        } else if (device) {
-            unsigned int id;
-            // find storage for the device
-            if (sscanf(tok, "%x", &id) == 1) {
-                MtpStorageIDList* storageList = device->getStorageIDs();
-                bool found = false;
-                for (int i = 0; i < storageList->size(); i++) {
-                    if ((*storageList)[i] == id) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (found)
-                    storage = id;
-                else
-                    return NULL;
-            }
-        } else {
-            // find device
-            unsigned int id;
-            if (sscanf(tok, "%d", &id) == 1)
-                device = sClient->getDevice(id);
-            if (!device)
-                return NULL;
-        }
-
-        tok = strtok(NULL, "/");
-    }
-
-    if (device)
-        return new MtpFile(device, storage, handle);
-    else
-        return NULL;
-}
-
-}
diff --git a/media/tests/mtp/MtpFile.h b/media/tests/mtp/MtpFile.h
deleted file mode 100644
index ab8762b..0000000
--- a/media/tests/mtp/MtpFile.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _MTP_FILE_H
-#define _MTP_FILE_H
-
-#include "MtpTypes.h"
-
-namespace android {
-
-class MtpClient;
-class MtpDevice;
-class MtpObjectInfo;
-
-// File-like abstraction for the interactive shell.
-// This can be used to represent an MTP device, storage unit or object
-// (either file or association).
-class MtpFile {
-private:
-    MtpDevice*          mDevice;
-    MtpStorageID        mStorage;
-    MtpObjectHandle     mHandle;
-    static MtpClient*   sClient;
-
-public:
-    MtpFile(MtpDevice* device);
-    MtpFile(MtpDevice* device, MtpStorageID storage);
-    MtpFile(MtpDevice* device, MtpStorageID storage, MtpObjectHandle handle);
-    MtpFile(MtpFile* file);
-    virtual ~MtpFile();
-
-    MtpObjectInfo* getObjectInfo();
-    void print();
-    void list();
-
-    inline MtpDevice* getDevice() const { return mDevice; }
-
-    static void init(MtpClient* client);
-    static MtpFile* parsePath(MtpFile* base, char* path);
-};
-
-}
-
-#endif // _MTP_DIRECTORY_H
diff --git a/media/tests/mtp/mtp.cpp b/media/tests/mtp/mtp.cpp
deleted file mode 100644
index 9732944..0000000
--- a/media/tests/mtp/mtp.cpp
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#if HAVE_READLINE
-#include <readline/readline.h>
-#include <readline/history.h>
-#endif
-
-#include "MtpClient.h"
-#include "MtpDevice.h"
-#include "MtpObjectInfo.h"
-
-#include "MtpFile.h"
-
-#define PROMPT  "mtp> "
-
-using namespace android;
-
-static MtpClient* sClient = NULL;
-
-// current working directory information for interactive shell
-static MtpFile* sCurrentDirectory = NULL;
-
-static MtpFile* parse_path(char* path) {
-    return MtpFile::parsePath(sCurrentDirectory, path);
-}
-
-class MyClient : public MtpClient {
-private:
-    virtual void deviceAdded(MtpDevice *device) {
-    }
-
-    virtual void deviceRemoved(MtpDevice *device) {
-    }
-
-public:
-};
-
-static void init() {
-    sClient = new MyClient;
-    sClient->start();
-    MtpFile::init(sClient);
-}
-
-static int set_cwd(int argc, char* argv[]) {
-    if (argc != 1) {
-        fprintf(stderr, "cd should have one argument\n");
-        return -1;
-    }
-    if (!strcmp(argv[0], "/")) {
-        delete sCurrentDirectory;
-        sCurrentDirectory = NULL;
-    }
-    else {
-        MtpFile* file = parse_path(argv[0]);
-        if (file) {
-            delete sCurrentDirectory;
-            sCurrentDirectory = file;
-        } else {
-            fprintf(stderr, "could not find %s\n", argv[0]);
-            return -1;
-        }
-    }
-    return 0;
-}
-
-static void list_devices() {
-    // TODO - need to make sure the list will not change while iterating
-    MtpDeviceList& devices = sClient->getDeviceList();
-    for (int i = 0; i < devices.size(); i++) {
-        MtpDevice* device = devices[i];
-        MtpFile* file = new MtpFile(device);
-        file->print();
-        delete file;
-    }
-}
-
-static int list(int argc, char* argv[]) {
-    if (argc == 0) {
-        // list cwd
-        if (sCurrentDirectory) {
-            sCurrentDirectory->list();
-        } else {
-            list_devices();
-        }
-    }
-
-    for (int i = 0; i < argc; i++) {
-        char* path = argv[i];
-        if (!strcmp(path, "/")) {
-            list_devices();
-        } else {
-            MtpFile* file = parse_path(path);
-            if (!file) {
-                fprintf(stderr, "could not find %s\n", path);
-                return -1;
-            }
-            file->list();
-        }
-    }
-
-    return 0;
-}
-
-static int get_file(int argc, char* argv[]) {
-    int ret = -1;
-    int srcFD = -1;
-    int destFD = -1;
-    MtpFile* srcFile = NULL;
-    MtpObjectInfo* info = NULL;
-    char* dest;
-
-    if (argc < 1) {
-        fprintf(stderr, "not enough arguments\n");
-        return -1;
-    } else if (argc > 2) {
-        fprintf(stderr, "too many arguments\n");
-        return -1;
-    }
-
-    // find source object
-    char* src = argv[0];
-    srcFile = parse_path(src);
-    if (!srcFile) {
-        fprintf(stderr, "could not find %s\n", src);
-        return -1;
-    }
-    info = srcFile->getObjectInfo();
-    if (!info) {
-        fprintf(stderr, "could not find object info for %s\n", src);
-        goto fail;
-    }
-    if (info->mFormat == MTP_FORMAT_ASSOCIATION) {
-        fprintf(stderr, "copying directories not implemented yet\n");
-        goto fail;
-    }
-
-    dest = (argc > 1 ? argv[1] : info->mName);
-    if (srcFile->getDevice()->readObject(info->mHandle, dest))
-        ret = 0;
-
-fail:
-    delete srcFile;
-    delete info;
-    return ret;
-}
-
-static int put_file(int argc, char* argv[]) {
-    int ret = -1;
-    int srcFD = -1;
-    MtpFile* destFile = NULL;
-    MtpObjectInfo* srcInfo = NULL;
-    MtpObjectInfo* destInfo = NULL;
-    MtpObjectHandle handle;
-    struct stat statbuf;
-    const char* lastSlash;
-
-    if (argc < 1) {
-        fprintf(stderr, "not enough arguments\n");
-        return -1;
-    } else if (argc > 2) {
-        fprintf(stderr, "too many arguments\n");
-        return -1;
-    }
-    const char* src = argv[0];
-    srcFD = open(src, O_RDONLY);
-    if (srcFD < 0) {
-        fprintf(stderr, "could not open %s\n", src);
-        goto fail;
-    }
-    if (argc == 2) {
-         char* dest = argv[1];
-        destFile = parse_path(dest);
-        if (!destFile) {
-            fprintf(stderr, "could not find %s\n", dest);
-            goto fail;
-        }
-    } else {
-        if (!sCurrentDirectory) {
-            fprintf(stderr, "current working directory not set\n");
-            goto fail;
-        }
-        destFile = new MtpFile(sCurrentDirectory);
-    }
-
-    destInfo = destFile->getObjectInfo();
-    if (!destInfo) {
-        fprintf(stderr, "could not find object info destination directory\n");
-        goto fail;
-    }
-    if (destInfo->mFormat != MTP_FORMAT_ASSOCIATION) {
-        fprintf(stderr, "destination not a directory\n");
-        goto fail;
-    }
-
-    if (fstat(srcFD, &statbuf))
-        goto fail;
-
-    srcInfo = new MtpObjectInfo(0);
-    srcInfo->mStorageID = destInfo->mStorageID;
-    srcInfo->mFormat = MTP_FORMAT_EXIF_JPEG;  // FIXME
-    srcInfo->mCompressedSize = statbuf.st_size;
-    srcInfo->mParent = destInfo->mHandle;
-    lastSlash = strrchr(src, '/');
-    srcInfo->mName = strdup(lastSlash ? lastSlash + 1 : src);
-    srcInfo->mDateModified = statbuf.st_mtime;
-    handle = destFile->getDevice()->sendObjectInfo(srcInfo);
-    if (handle <= 0) {
-        printf("sendObjectInfo returned %04X\n", handle);
-        goto fail;
-    }
-    if (destFile->getDevice()->sendObject(srcInfo, srcFD))
-        ret = 0;
-
-fail:
-    delete destFile;
-    delete srcInfo;
-    delete destInfo;
-    if (srcFD >= 0)
-        close(srcFD);
-    printf("returning %d\n", ret);
-    return ret;
-}
-
-typedef int (* command_func)(int argc, char* argv[]);
-
-struct command_table_entry {
-    const char* name;
-    command_func func;
-};
-
-const command_table_entry command_list[] = {
-    {   "cd",       set_cwd         },
-    {   "ls",       list            },
-    {   "get",      get_file        },
-    {   "put",      put_file        },
-    {   NULL,       NULL            },
-};
-
-
-static int do_command(int argc, char* argv[]) {
-    const command_table_entry* command = command_list;
-    const char* name = *argv++;
-    argc--;
-
-    while (command->name) {
-        if (!strcmp(command->name, name))
-            return command->func(argc, argv);
-        else
-            command++;
-    }
-    fprintf(stderr, "unknown command %s\n", name);
-    return -1;
-}
-
-static int shell() {
-    int argc;
-    int result = 0;
-#define MAX_ARGS    100
-    char* argv[MAX_ARGS];
-
-#if HAVE_READLINE
-    using_history();
-#endif
-
-    while (1) {
-#if HAVE_READLINE
-        char* line = readline(PROMPT);
-        if (!line) {
-            printf("\n");
-            exit(0);
-        }
-#else
-        char    buffer[1000];
-        printf("%s", PROMPT);
-        char* line = NULL;
-        size_t length = 0;
-
-        buffer[0] = 0;
-        fgets(buffer, sizeof(buffer), stdin);
-        int count = strlen(buffer);
-        if (count > 0 && buffer[0] == (char)EOF) {
-            printf("\n");
-            exit(0);
-        }
-        if (count > 0 && line[count - 1] == '\n')
-            line[count - 1] == 0;
-#endif
-        char* tok = strtok(line, " \t\n\r");
-        if (!tok)
-            continue;
-        if (!strcmp(tok, "quit") || !strcmp(tok, "exit")) {
-            exit(0);
-        }
-#if HAVE_READLINE
-        add_history(line);
-#endif
-        argc = 0;
-        while (tok) {
-            if (argc + 1 == MAX_ARGS) {
-                fprintf(stderr, "too many arguments\n");
-                result = -1;
-                goto bottom_of_loop;
-            }
-
-            argv[argc++] = strdup(tok);
-            tok = strtok(NULL, " \t\n\r");
-        }
-
-        result = do_command(argc, argv);
-
-bottom_of_loop:
-        for (int i = 0; i < argc; i++)
-            free(argv[i]);
-        free(line);
-    }
-
-    return result;
-}
-
-int main(int argc, char* argv[]) {
-    init();
-
-    if (argc == 1)
-        return shell();
-    else
-        return do_command(argc - 1, argv + 1);
-}