Volume.h revision a2677e4ad01f250b0765f04adf0acfa6627efc98
1f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat/*
2f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Copyright (C) 2008 The Android Open Source Project
3f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
4f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * you may not use this file except in compliance with the License.
6f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * You may obtain a copy of the License at
7f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
8f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
10f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Unless required by applicable law or agreed to in writing, software
11f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * See the License for the specific language governing permissions and
14f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * limitations under the License.
15f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat */
16f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
17f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#ifndef _VOLUME_H
18f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#define _VOLUME_H
19f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
20f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <utils/List.h>
21f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
22fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehatclass NetlinkEvent;
23a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehatclass VolumeManager;
24fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehat
25f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatclass Volume {
26f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprivate:
27f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    int mState;
28f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
29f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatpublic:
30f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Init       = -1;
31a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_NoMedia    = 0;
32f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Idle       = 1;
33f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Pending    = 2;
34a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Checking   = 3;
35a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Mounted    = 4;
36a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Unmounting = 5;
37a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Formatting = 6;
38a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Shared     = 7;
39a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_SharedMnt  = 8;
40f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
41f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprotected:
42f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    char *mLabel;
43f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    char *mMountpoint;
44a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    VolumeManager *mVm;
45a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat
46a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    /*
47a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     * The major/minor tuple of the currently mounted filesystem.
48a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     */
49a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    dev_t mCurrentlyMountedKdev;
50f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
51f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatpublic:
52a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    Volume(VolumeManager *vm, const char *label, const char *mount_point);
53f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    virtual ~Volume();
54f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
55a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int mountVol();
56a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int unmountVol();
57a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int formatVol();
5849e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
59f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getLabel() { return mLabel; }
60f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getMountpoint() { return mMountpoint; }
61f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    int getState() { return mState; }
62f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
63fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehat    virtual int handleBlockEvent(NetlinkEvent *evt);
64a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual dev_t getDiskDevice();
65a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeShared();
66a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeUnshared();
67f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
68f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprotected:
69f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    void setState(int state);
7049e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
71a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual int getDeviceNodes(dev_t *devs, int max) = 0;
7249e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
73dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat    int createDeviceNode(const char *path, int major, int minor);
74dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat
7549e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehatprivate:
7649e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat    int checkFilesystem(const char *nodepath);
77a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int doMountVfat(const char *deviceNode, const char *mountPoint);
78a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int doFormatVfat(const char *deviceNode);
79a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int initializeMbr(const char *deviceNode);
80a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    bool isMountpointMounted(const char *path);
81f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat};
82f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
83f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehattypedef android::List<Volume *> VolumeCollection;
84f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
85f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#endif
86