Home | History | Annotate | Download | only in avd
      1 /* Copyright (C) 2008 The Android Open Source Project
      2 **
      3 ** This software is licensed under the terms of the GNU General Public
      4 ** License version 2, as published by the Free Software Foundation, and
      5 ** may be copied, distributed, and modified under those terms.
      6 **
      7 ** This program is distributed in the hope that it will be useful,
      8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 ** GNU General Public License for more details.
     11 */
     12 #ifndef ANDROID_AVD_INFO_H
     13 #define ANDROID_AVD_INFO_H
     14 
     15 #include "android/utils/ini.h"
     16 #include "android/avd/hw-config.h"
     17 
     18 /* An Android Virtual Device (AVD for short) corresponds to a
     19  * directory containing all kernel/disk images for a given virtual
     20  * device, as well as information about its hardware capabilities,
     21  * SDK version number, skin, etc...
     22  *
     23  * Each AVD has a human-readable name and is backed by a root
     24  * configuration file and a content directory. For example, an
     25  *  AVD named 'foo' will correspond to the following:
     26  *
     27  *  - a root configuration file named ~/.android/avd/foo.ini
     28  *    describing where the AVD's content can be found
     29  *
     30  *  - a content directory like ~/.android/avd/foo/ containing all
     31  *    disk image and configuration files for the virtual device.
     32  *
     33  * the 'foo.ini' file should contain at least one line of the form:
     34  *
     35  *    rootPath=<content-path>
     36  *
     37  * it may also contain other lines that cache stuff found in the
     38  * content directory, like hardware properties or SDK version number.
     39  *
     40  * it is possible to move the content directory by updating the foo.ini
     41  * file to point to the new location. This can be interesting when your
     42  * $HOME directory is located on a network share or in a roaming profile
     43  * (Windows), given that the content directory of a single virtual device
     44  * can easily use more than 100MB of data.
     45  *
     46  */
     47 
     48 /* a macro used to define the list of disk images managed by the
     49  * implementation. This macro will be expanded several times with
     50  * varying definitions of _AVD_IMG
     51  */
     52 #define  AVD_IMAGE_LIST \
     53     _AVD_IMG(KERNEL,"kernel-qemu","kernel") \
     54     _AVD_IMG(RAMDISK,"ramdisk.img","ramdisk") \
     55     _AVD_IMG(INITSYSTEM,"system.img","init system") \
     56     _AVD_IMG(INITDATA,"userdata.img","init data") \
     57     _AVD_IMG(USERSYSTEM,"system-qemu.img","user system") \
     58     _AVD_IMG(USERDATA,"userdata-qemu.img", "user data") \
     59     _AVD_IMG(CACHE,"cache.img","cache") \
     60     _AVD_IMG(SDCARD,"sdcard.img","SD Card") \
     61 
     62 /* define the enumared values corresponding to each AVD image type
     63  * examples are: AVD_IMAGE_KERNEL, AVD_IMAGE_SYSTEM, etc..
     64  */
     65 #define _AVD_IMG(x,y,z)   AVD_IMAGE_##x ,
     66 typedef enum {
     67     AVD_IMAGE_LIST
     68     AVD_IMAGE_MAX /* do not remove */
     69 } AvdImageType;
     70 #undef  _AVD_IMG
     71 
     72 /* AvdInfo is an opaque structure used to model the information
     73  * corresponding to a given AVD instance
     74  */
     75 typedef struct AvdInfo  AvdInfo;
     76 
     77 /* various flags used when creating an AvdInfo object */
     78 typedef enum {
     79     /* use to force a data wipe */
     80     AVDINFO_WIPE_DATA = (1 << 0),
     81     /* use to ignore the cache partition */
     82     AVDINFO_NO_CACHE  = (1 << 1),
     83     /* use to wipe cache partition, ignored if NO_CACHE is set */
     84     AVDINFO_WIPE_CACHE = (1 << 2),
     85     /* use to ignore ignore SDCard image (default or provided) */
     86     AVDINFO_NO_SDCARD = (1 << 3),
     87     /* use to wipe the system image with new initial values */
     88     AVDINFO_WIPE_SYSTEM = (1 << 4),
     89 } AvdFlags;
     90 
     91 typedef struct {
     92     unsigned     flags;
     93     const char*  skinName;
     94     const char*  skinRootPath;
     95     const char*  forcePaths[AVD_IMAGE_MAX];
     96 } AvdInfoParams;
     97 
     98 /* Creates a new AvdInfo object from a name. Returns NULL if name is NULL
     99  * or contains characters that are not part of the following list:
    100  * letters, digits, underscores, dashes and periods
    101  */
    102 AvdInfo*  avdInfo_new( const char*  name, AvdInfoParams*  params );
    103 
    104 /* A special function used to setup an AvdInfo for use when starting
    105  * the emulator from the Android build system. In this specific instance
    106  * we're going to create temporary files to hold all writable image
    107  * files, and activate all hardware features by default
    108  *
    109  * 'androidBuildRoot' must be the absolute path to the root of the
    110  * Android build system (i.e. the 'android' directory)
    111  *
    112  * 'androidOut' must be the target-specific out directory where
    113  * disk images will be looked for.
    114  */
    115 AvdInfo*  avdInfo_newForAndroidBuild( const char*     androidBuildRoot,
    116                                       const char*     androidOut,
    117                                       AvdInfoParams*  params );
    118 
    119 /* Frees an AvdInfo object and the corresponding strings that may be
    120  * returned by its getXXX() methods
    121  */
    122 void        avdInfo_free( AvdInfo*  i );
    123 
    124 /* Return the name of the Android Virtual Device
    125  */
    126 const char*  avdInfo_getName( AvdInfo*  i );
    127 
    128 /* Try to find the path of a given image file, returns NULL
    129  * if the corresponding file could not be found. the string
    130  * belongs to the AvdInfo object.
    131  */
    132 const char*  avdInfo_getImageFile( AvdInfo*  i, AvdImageType  imageType );
    133 
    134 /* Return the size of a given image file. Returns 0 if the file
    135  * does not exist or could not be accessed.
    136  */
    137 uint64_t     avdInfo_getImageFileSize( AvdInfo*  i, AvdImageType  imageType );
    138 
    139 /* Returns 1 if the corresponding image file is read-only
    140  */
    141 int          avdInfo_isImageReadOnly( AvdInfo*  i, AvdImageType  imageType );
    142 
    143 /* lock an image file if it is writable. returns 0 on success, or -1
    144  * otherwise. note that if the file is read-only, it doesn't need to
    145  * be locked and the function will return success.
    146  */
    147 int          avdInfo_lockImageFile( AvdInfo*  i, AvdImageType  imageType, int  abortOnError);
    148 
    149 /* Manually set the path of a given image file. */
    150 void         avdInfo_setImageFile( AvdInfo*  i, AvdImageType  imageType, const char*  imagePath );
    151 
    152 /* Returns the path of the skin directory */
    153 /* the string belongs to the AvdInfo object */
    154 const char*  avdInfo_getSkinPath( AvdInfo*  i );
    155 
    156 /* Returns the name of the virtual device's skin */
    157 const char*  avdInfo_getSkinName( AvdInfo*  i );
    158 
    159 /* Returns the root skin directory for this device */
    160 const char*  avdInfo_getSkinDir ( AvdInfo*  i );
    161 
    162 /* Returns the content path of the virtual device */
    163 const char*  avdInfo_getContentPath( AvdInfo*  i );
    164 
    165 /* Returns TRUE iff in the Android build system */
    166 int          avdInfo_inAndroidBuild( AvdInfo*  i );
    167 
    168 /* Reads the AVD's hardware configuration into 'hw'. returns -1 on error, 0 otherwise */
    169 int          avdInfo_getHwConfig( AvdInfo*  i, AndroidHwConfig*  hw );
    170 
    171 /* Returns a *copy* of the path used to store trace 'foo'. result must be freed by caller */
    172 char*        avdInfo_getTracePath( AvdInfo*  i, const char*  traceName );
    173 
    174 /* */
    175 
    176 #endif /* ANDROID_AVD_INFO_H */
    177