VolumeManager.cpp revision f1b736bc5605e92e917ab27f5abf3ba839be2270
1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include <stdio.h> 18#include <errno.h> 19 20#define LOG_TAG "Vold" 21 22#include <cutils/log.h> 23 24#include "VolumeManager.h" 25#include "DeviceVolume.h" 26#include "ErrorCode.h" 27 28VolumeManager *VolumeManager::sInstance = NULL; 29 30VolumeManager *VolumeManager::Instance() { 31 if (!sInstance) 32 sInstance = new VolumeManager(); 33 return sInstance; 34} 35 36VolumeManager::VolumeManager() { 37 mBlockDevices = new BlockDeviceCollection(); 38 mVolumes = new VolumeCollection(); 39 mBroadcaster = NULL; 40} 41 42VolumeManager::~VolumeManager() { 43 delete mBlockDevices; 44} 45 46int VolumeManager::start() { 47 return 0; 48} 49 50int VolumeManager::stop() { 51 return 0; 52} 53 54int VolumeManager::addVolume(Volume *v) { 55 mVolumes->push_back(v); 56 return 0; 57} 58 59void VolumeManager::handleDiskInserted(const char *devpath, int maj, int min, 60 int nr_parts) { 61 62 /* Lookup possible candidate DeviceVolumes */ 63 VolumeCollection::iterator it; 64 bool hit = false; 65 for (it = mVolumes->begin(); it != mVolumes->end(); ++it) { 66 if (!(*it)->handleDiskInsertion(devpath, maj, min, nr_parts)) { 67 hit = true; 68 LOGD("Volume '%s' has handled disk insertion for '%s'", 69 (*it)->getLabel(), devpath); 70 break; 71 } 72 } 73 74 if (!hit) { 75 LOGW("No volumes handled insertion of disk '%s'", devpath); 76 } 77} 78 79void VolumeManager::handleDiskRemoved(int maj, int min) { 80} 81 82void VolumeManager::handlePartCreated(const char *devpath, int maj, int min, 83 int part_no) { 84} 85 86void VolumeManager::handlePartRemoved(int maj, int min) { 87} 88 89 90int VolumeManager::listVolumes(SocketClient *cli) { 91 VolumeCollection::iterator i; 92 93 for (i = mVolumes->begin(); i != mVolumes->end(); ++i) { 94 char *buffer; 95 asprintf(&buffer, "%s %s %d", 96 (*i)->getLabel(), (*i)->getMountpoint(), 97 (*i)->getState()); 98 cli->sendMsg(ErrorCode::VolumeListResult, buffer, false); 99 free(buffer); 100 } 101 cli->sendMsg(ErrorCode::CommandOkay, "Volumes Listed", false); 102 return 0; 103} 104