1df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang/*
2df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * Copyright (C) 2016 The Android Open Source Project
3df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang *
4df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * you may not use this file except in compliance with the License.
6df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * You may obtain a copy of the License at
7df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang *
8df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang *
10df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * Unless required by applicable law or agreed to in writing, software
11df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * See the License for the specific language governing permissions and
14df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang * limitations under the License.
15df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang */
16df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
17df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang#ifndef _MTP_FFS_COMPAT_HANDLE_H
18df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang#define _MTP_FFS_COMPAT_HANDLE_H
19df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
20df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang#include <MtpFfsHandle.h>
21df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
22df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhangnamespace android {
23df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
24df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhangtemplate <class T> class MtpFfsHandleTest;
25df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
26df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhangclass MtpFfsCompatHandle : public MtpFfsHandle {
27df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    template <class T> friend class android::MtpFfsHandleTest;
28df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhangprivate:
29df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int writeHandle(int fd, const void *data, size_t len);
30df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int readHandle(int fd, void *data, size_t len);
31df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
32df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    size_t mMaxWrite;
33df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    size_t mMaxRead;
34df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
35df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhangpublic:
36df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int read(void* data, size_t len) override;
37df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int write(const void* data, size_t len) override;
38df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int receiveFile(mtp_file_range mfr, bool zero_packet) override;
39df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    int sendFile(mtp_file_range mfr) override;
40df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
41df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    /**
42df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang     * Open ffs endpoints and allocate necessary kernel and user memory.
43df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang     * Will sleep until endpoints are enabled, for up to 1 second.
44df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang     */
4563dac45aa868b9048c028967e9865c90a9ba544dJerry Zhang    int start(bool ptp) override;
46df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
4763dac45aa868b9048c028967e9865c90a9ba544dJerry Zhang    MtpFfsCompatHandle(int controlFd);
48df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang    ~MtpFfsCompatHandle();
49df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang};
50df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
51df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang} // namespace android
52df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
53df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang#endif // _MTP_FFS_COMPAT_HANDLE_H
54df69dd33b4d8a2f9926b5eaccbf53ee7f67475c2Jerry Zhang
55