198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood/*
298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Copyright (C) 2010 The Android Open Source Project
398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * you may not use this file except in compliance with the License.
698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * You may obtain a copy of the License at
798ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
1098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Unless required by applicable law or agreed to in writing, software
1198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * See the License for the specific language governing permissions and
1498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * limitations under the License.
1598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood */
1698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
170cd0136d440cf6ad9d5fab430269116786e671ecMike Lockwoodpackage android.mtp;
1898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
1998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood/**
2098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Java wrapper for MTP/PTP support as USB responder.
2198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * {@hide}
2298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood */
23dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwoodpublic class MtpServer implements Runnable {
24a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood
25dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood    private int mNativeContext; // accessed by native methods
2698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
2798ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    static {
2898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood        System.loadLibrary("media_jni");
2998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
3098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
317d40d42a364f520da853b41956b0a18ed172491bMike Lockwood    public MtpServer(MtpDatabase database, boolean usePtp) {
327d40d42a364f520da853b41956b0a18ed172491bMike Lockwood        native_setup(database, usePtp);
3398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
3498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
3598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    public void start() {
36dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood        Thread thread = new Thread(this, "MtpServer");
37dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood        thread.start();
3898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
3998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
40dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood    @Override
41dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood    public void run() {
42dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood        native_run();
43dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood        native_cleanup();
4498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
4598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
46be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    public void sendObjectAdded(int handle) {
47be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood        native_send_object_added(handle);
48be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    }
49be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood
50be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    public void sendObjectRemoved(int handle) {
51be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood        native_send_object_removed(handle);
52be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    }
53be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood
54b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood    public void addStorage(MtpStorage storage) {
55b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood        native_add_storage(storage);
5666e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    }
5766e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood
58b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood    public void removeStorage(MtpStorage storage) {
59b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood        native_remove_storage(storage.getStorageId());
60b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood    }
61b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood
627d40d42a364f520da853b41956b0a18ed172491bMike Lockwood    private native final void native_setup(MtpDatabase database, boolean usePtp);
63dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood    private native final void native_run();
64dcc31946f2b78be4bf95b1cace2e2c211f027e72Mike Lockwood    private native final void native_cleanup();
65be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    private native final void native_send_object_added(int handle);
66be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    private native final void native_send_object_removed(int handle);
67b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood    private native final void native_add_storage(MtpStorage storage);
68b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood    private native final void native_remove_storage(int storageId);
6998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood}
70