MtpStorage.cpp revision a849440ca96e93f700d62c6e41d48905b4d405b6
116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood/* 216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * you may not use this file except in compliance with the License. 616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * You may obtain a copy of the License at 716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 1016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Unless required by applicable law or agreed to in writing, software 1116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 1216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * See the License for the specific language governing permissions and 1416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * limitations under the License. 1516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood */ 1616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 17b14e588bec4d5e39e61b020b5b575f2ce555d316Mike Lockwood#define LOG_TAG "MtpStorage" 18b14e588bec4d5e39e61b020b5b575f2ce555d316Mike Lockwood 19b14e588bec4d5e39e61b020b5b575f2ce555d316Mike Lockwood#include "MtpDebug.h" 2016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpDatabase.h" 2116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpStorage.h" 2216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 2316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <sys/types.h> 2416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <sys/stat.h> 2516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <sys/statfs.h> 2616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <unistd.h> 2716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <dirent.h> 2816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <errno.h> 2916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <string.h> 3016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <stdio.h> 3116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <limits.h> 3216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 337850ef999740f214a1990a9c090d3f3865d435aaMike Lockwoodnamespace android { 3416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 3520c3be0e0394e1340c036685eb1edb8f6ef5a2acMike LockwoodMtpStorage::MtpStorage(MtpStorageID id, const char* filePath, uint64_t reserveSpace) 3616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood : mStorageID(id), 3716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood mFilePath(filePath), 3820c3be0e0394e1340c036685eb1edb8f6ef5a2acMike Lockwood mMaxCapacity(0), 3920c3be0e0394e1340c036685eb1edb8f6ef5a2acMike Lockwood mReserveSpace(reserveSpace) 4016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood{ 4159d6ae5e339547fea8a350c1d855b52d5ac4f62cMike Lockwood LOGV("MtpStorage id: %d path: %s\n", id, filePath); 4216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 4316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 4416864bae0f51c32c456da2c43adf7a057c0c4882Mike LockwoodMtpStorage::~MtpStorage() { 4516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 4616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 4716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodint MtpStorage::getType() const { 4816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return MTP_STORAGE_FIXED_RAM; 4916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 5016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 5116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodint MtpStorage::getFileSystemType() const { 5216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return MTP_STORAGE_FILESYSTEM_HIERARCHICAL; 5316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 5416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 5516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodint MtpStorage::getAccessCapability() const { 5616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return MTP_STORAGE_READ_WRITE; 5716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 5816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 5916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwooduint64_t MtpStorage::getMaxCapacity() { 6016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood if (mMaxCapacity == 0) { 6116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood struct statfs stat; 62a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood if (statfs(getPath(), &stat)) 6316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return -1; 6416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood mMaxCapacity = (uint64_t)stat.f_blocks * (uint64_t)stat.f_bsize; 6516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood } 6616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return mMaxCapacity; 6716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 6816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 6916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwooduint64_t MtpStorage::getFreeSpace() { 7016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood struct statfs stat; 71a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood if (statfs(getPath(), &stat)) 7216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood return -1; 7320c3be0e0394e1340c036685eb1edb8f6ef5a2acMike Lockwood uint64_t freeSpace = (uint64_t)stat.f_bavail * (uint64_t)stat.f_bsize; 7420c3be0e0394e1340c036685eb1edb8f6ef5a2acMike Lockwood return (freeSpace > mReserveSpace ? freeSpace - mReserveSpace : 0); 7516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 7616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 7716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodconst char* MtpStorage::getDescription() const { 78c42aa12f73edf79bc9cb0dbf6b74a7f1af11c683Mike Lockwood return "Device Storage"; 7916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood} 8016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 817850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood} // namespace android 82