156118b5b385adad0ff301f67be2cf601432d94baMike Lockwood/*
256118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * Copyright (C) 2010 The Android Open Source Project
356118b5b385adad0ff301f67be2cf601432d94baMike Lockwood *
456118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
556118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * you may not use this file except in compliance with the License.
656118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * You may obtain a copy of the License at
756118b5b385adad0ff301f67be2cf601432d94baMike Lockwood *
856118b5b385adad0ff301f67be2cf601432d94baMike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
956118b5b385adad0ff301f67be2cf601432d94baMike Lockwood *
1056118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * Unless required by applicable law or agreed to in writing, software
1156118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1256118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * See the License for the specific language governing permissions and
1456118b5b385adad0ff301f67be2cf601432d94baMike Lockwood * limitations under the License.
1556118b5b385adad0ff301f67be2cf601432d94baMike Lockwood */
1656118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
1756118b5b385adad0ff301f67be2cf601432d94baMike Lockwood#ifndef _MTP_DATABASE_H
1856118b5b385adad0ff301f67be2cf601432d94baMike Lockwood#define _MTP_DATABASE_H
1956118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
205bae7f615b6375820f61b28f6792cb2d01aab54bMike Lockwood#include "MtpTypes.h"
2156118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
228d3257a7dc10e1b3fda03e00f40d1b65d699ff23Mike Lockwoodnamespace android {
238d3257a7dc10e1b3fda03e00f40d1b65d699ff23Mike Lockwood
2456118b5b385adad0ff301f67be2cf601432d94baMike Lockwoodclass MtpDataPacket;
25828d19dd96b05fa99abdc517701e5366543c324fMike Lockwoodclass MtpProperty;
269df53fae3afd1c6b5278216be2fd33a255602aefMike Lockwoodclass MtpObjectInfo;
2756118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
288dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwoodclass MtpDatabase {
2956118b5b385adad0ff301f67be2cf601432d94baMike Lockwoodpublic:
302d6c9e9c4e5f261b252962bf8ce04c50000a8e2cMike Lockwood    virtual ~MtpDatabase() {}
318dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood
32d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    // called from SendObjectInfo to reserve a database entry for the incoming file
33d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    virtual MtpObjectHandle         beginSendObject(const char* path,
348dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            MtpObjectFormat format,
358dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            MtpObjectHandle parent,
368dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            MtpStorageID storage,
378dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            uint64_t size,
388dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            time_t modified) = 0;
398dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood
40d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    // called to report success or failure of the SendObject file transfer
41d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    // success should signal a notification of the new object's creation,
42d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    // failure should remove the database entry created in beginSendObject
43d815f79766984fce499e147ecbacc01914683f74Mike Lockwood    virtual void                    endSendObject(const char* path,
44d815f79766984fce499e147ecbacc01914683f74Mike Lockwood                                            MtpObjectHandle handle,
45d815f79766984fce499e147ecbacc01914683f74Mike Lockwood                                            MtpObjectFormat format,
46d815f79766984fce499e147ecbacc01914683f74Mike Lockwood                                            bool succeeded) = 0;
47d815f79766984fce499e147ecbacc01914683f74Mike Lockwood
488dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood    virtual MtpObjectHandleList*    getObjectList(MtpStorageID storageID,
49d815f79766984fce499e147ecbacc01914683f74Mike Lockwood                                            MtpObjectFormat format,
50d815f79766984fce499e147ecbacc01914683f74Mike Lockwood                                            MtpObjectHandle parent) = 0;
5156118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
527a047c89862febf63ce1bb5873179c7a2ff8d9d3Mike Lockwood    virtual int                     getNumObjects(MtpStorageID storageID,
537a047c89862febf63ce1bb5873179c7a2ff8d9d3Mike Lockwood                                            MtpObjectFormat format,
547a047c89862febf63ce1bb5873179c7a2ff8d9d3Mike Lockwood                                            MtpObjectHandle parent) = 0;
557a047c89862febf63ce1bb5873179c7a2ff8d9d3Mike Lockwood
564b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    // callee should delete[] the results from these
574b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    // results can be NULL
584b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    virtual MtpObjectFormatList*    getSupportedPlaybackFormats() = 0;
594b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    virtual MtpObjectFormatList*    getSupportedCaptureFormats() = 0;
604b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    virtual MtpObjectPropertyList*  getSupportedObjectProperties(MtpObjectFormat format) = 0;
614b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood    virtual MtpDevicePropertyList*  getSupportedDeviceProperties() = 0;
624b322ce4fb86b5a7a6e50633a3a9f498ca8d4706Mike Lockwood
63828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpResponseCode         getObjectPropertyValue(MtpObjectHandle handle,
648dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            MtpObjectProperty property,
658dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood                                            MtpDataPacket& packet) = 0;
6656118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
67828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpResponseCode         setObjectPropertyValue(MtpObjectHandle handle,
68828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood                                            MtpObjectProperty property,
69828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood                                            MtpDataPacket& packet) = 0;
70828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood
71828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpResponseCode         getDevicePropertyValue(MtpDeviceProperty property,
72828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood                                            MtpDataPacket& packet) = 0;
73828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood
74828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpResponseCode         setDevicePropertyValue(MtpDeviceProperty property,
75828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood                                            MtpDataPacket& packet) = 0;
76828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood
77828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpResponseCode         resetDeviceProperty(MtpDeviceProperty property) = 0;
78828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood
79e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    virtual MtpResponseCode         getObjectPropertyList(MtpObjectHandle handle,
807d7fb63071ca370f77ed69055ac30341b8388d15Mike Lockwood                                            uint32_t format, uint32_t property,
81e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood                                            int groupCode, int depth,
82e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood                                            MtpDataPacket& packet) = 0;
83e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
848dd2a39bae441143ebbb65237db63f65fdc1c645Mike Lockwood    virtual MtpResponseCode         getObjectInfo(MtpObjectHandle handle,
859df53fae3afd1c6b5278216be2fd33a255602aefMike Lockwood                                            MtpObjectInfo& info) = 0;
8656118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
87c89f22242b955ae748765b3465b819b40f70ee5fMike Lockwood    virtual void*                   getThumbnail(MtpObjectHandle handle, size_t& outThumbSize) = 0;
88c89f22242b955ae748765b3465b819b40f70ee5fMike Lockwood
8959c777a24a2c639dfd84b7bf17e430e6d3424866Mike Lockwood    virtual MtpResponseCode         getObjectFilePath(MtpObjectHandle handle,
90365e03e4943b2d2f4d1e602409ab0e770ea77d1dMike Lockwood                                            MtpString& outFilePath,
91365e03e4943b2d2f4d1e602409ab0e770ea77d1dMike Lockwood                                            int64_t& outFileLength,
92365e03e4943b2d2f4d1e602409ab0e770ea77d1dMike Lockwood                                            MtpObjectFormat& outFormat) = 0;
939a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood
9459c777a24a2c639dfd84b7bf17e430e6d3424866Mike Lockwood    virtual MtpResponseCode         deleteFile(MtpObjectHandle handle) = 0;
959a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood
969a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood    virtual MtpObjectHandleList*    getObjectReferences(MtpObjectHandle handle) = 0;
979a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood
989a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood    virtual MtpResponseCode         setObjectReferences(MtpObjectHandle handle,
999a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood                                            MtpObjectHandleList* references) = 0;
1009a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood
101828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpProperty*            getObjectPropertyDesc(MtpObjectProperty property,
102828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood                                            MtpObjectFormat format) = 0;
103828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood
104828d19dd96b05fa99abdc517701e5366543c324fMike Lockwood    virtual MtpProperty*            getDevicePropertyDesc(MtpDeviceProperty property) = 0;
1052837eefc5459427138c080d445bb491c75630163Mike Lockwood
1062837eefc5459427138c080d445bb491c75630163Mike Lockwood    virtual void                    sessionStarted() = 0;
1072837eefc5459427138c080d445bb491c75630163Mike Lockwood
1082837eefc5459427138c080d445bb491c75630163Mike Lockwood    virtual void                    sessionEnded() = 0;
10956118b5b385adad0ff301f67be2cf601432d94baMike Lockwood};
11056118b5b385adad0ff301f67be2cf601432d94baMike Lockwood
1118d3257a7dc10e1b3fda03e00f40d1b65d699ff23Mike Lockwood}; // namespace android
1128d3257a7dc10e1b3fda03e00f40d1b65d699ff23Mike Lockwood
11356118b5b385adad0ff301f67be2cf601432d94baMike Lockwood#endif // _MTP_DATABASE_H
114