| /* Copyright (C) 2008 The Android Open Source Project | |
| ** | |
| ** This software is licensed under the terms of the GNU General Public | |
| ** License version 2, as published by the Free Software Foundation, and | |
| ** may be copied, distributed, and modified under those terms. | |
| ** | |
| ** This program is distributed in the hope that it will be useful, | |
| ** but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| ** GNU General Public License for more details. | |
| */ | |
| #include "android/avd/hw-config.h" | |
| #include "android/utils/ini.h" | |
| #include "android/utils/system.h" | |
| #include <string.h> | |
| #include <stdlib.h> | |
| /* the global variable containing the hardware config for this device */ | |
| AndroidHwConfig android_hw[1]; | |
| static int | |
| stringToBoolean( const char* value ) | |
| { | |
| if (!strcmp(value,"1") || | |
| !strcmp(value,"yes") || | |
| !strcmp(value,"YES") || | |
| !strcmp(value,"true") || | |
| !strcmp(value,"TRUE")) | |
| { | |
| return 1; | |
| } | |
| else | |
| return 0; | |
| } | |
| static int64_t | |
| diskSizeToInt64( const char* diskSize ) | |
| { | |
| char* end; | |
| int64_t value; | |
| value = strtoll(diskSize, &end, 10); | |
| if (*end == 'k' || *end == 'K') | |
| value *= 1024ULL; | |
| else if (*end == 'm' || *end == 'M') | |
| value *= 1024*1024ULL; | |
| else if (*end == 'g' || *end == 'G') | |
| value *= 1024*1024*1024ULL; | |
| return value; | |
| } | |
| void | |
| androidHwConfig_init( AndroidHwConfig* config, | |
| int apiLevel ) | |
| { | |
| #define HWCFG_BOOL(n,s,d,a,t) config->n = stringToBoolean(d); | |
| #define HWCFG_INT(n,s,d,a,t) config->n = d; | |
| #define HWCFG_STRING(n,s,d,a,t) config->n = ASTRDUP(d); | |
| #define HWCFG_DOUBLE(n,s,d,a,t) config->n = d; | |
| #define HWCFG_DISKSIZE(n,s,d,a,t) config->n = diskSizeToInt64(d); | |
| #include "android/avd/hw-config-defs.h" | |
| /* Special case for hw.keyboard.lid, we need to set the | |
| * default to FALSE for apiLevel >= 12. This allows platform builds | |
| * to get correct orientation emulation even if they don't bring | |
| * a custom hardware.ini | |
| */ | |
| if (apiLevel >= 12) { | |
| config->hw_keyboard_lid = 0; | |
| } | |
| /* Special case for hw.useext4, we need to set the default to FALSE for | |
| * apiLevel <=18. We use yaffs2 for earlier versions. | |
| */ | |
| if (apiLevel <= 18) { | |
| config->hw_useext4 = 0; | |
| } | |
| } | |
| int | |
| androidHwConfig_read( AndroidHwConfig* config, | |
| IniFile* ini ) | |
| { | |
| if (ini == NULL) | |
| return -1; | |
| /* use the magic of macros to implement the hardware configuration loaded */ | |
| #define HWCFG_BOOL(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getBoolean(ini, s, d); } | |
| #define HWCFG_INT(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getInteger(ini, s, d); } | |
| #define HWCFG_STRING(n,s,d,a,t) if (iniFile_getValue(ini, s)) { AFREE(config->n); config->n = iniFile_getString(ini, s, d); } | |
| #define HWCFG_DOUBLE(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getDouble(ini, s, d); } | |
| #define HWCFG_DISKSIZE(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getDiskSize(ini, s, d); } | |
| #include "android/avd/hw-config-defs.h" | |
| return 0; | |
| } | |
| int | |
| androidHwConfig_write( AndroidHwConfig* config, | |
| IniFile* ini ) | |
| { | |
| if (ini == NULL) | |
| return -1; | |
| /* use the magic of macros to implement the hardware configuration loaded */ | |
| #define HWCFG_BOOL(n,s,d,a,t) iniFile_setBoolean(ini, s, config->n); | |
| #define HWCFG_INT(n,s,d,a,t) iniFile_setInteger(ini, s, config->n); | |
| #define HWCFG_STRING(n,s,d,a,t) iniFile_setValue(ini, s, config->n); | |
| #define HWCFG_DOUBLE(n,s,d,a,t) iniFile_setDouble(ini, s, config->n); | |
| #define HWCFG_DISKSIZE(n,s,d,a,t) iniFile_setDiskSize(ini, s, config->n); | |
| #include "android/avd/hw-config-defs.h" | |
| return 0; | |
| } | |
| void | |
| androidHwConfig_done( AndroidHwConfig* config ) | |
| { | |
| #define HWCFG_BOOL(n,s,d,a,t) config->n = 0; | |
| #define HWCFG_INT(n,s,d,a,t) config->n = 0; | |
| #define HWCFG_STRING(n,s,d,a,t) AFREE(config->n); | |
| #define HWCFG_DOUBLE(n,s,d,a,t) config->n = 0.0; | |
| #define HWCFG_DISKSIZE(n,s,d,a,t) config->n = 0; | |
| #include "android/avd/hw-config-defs.h" | |
| } | |
| int | |
| androidHwConfig_isScreenNoTouch( AndroidHwConfig* config ) | |
| { | |
| return strcmp(config->hw_screen, "no-touch") == 0; | |
| } | |
| int | |
| androidHwConfig_isScreenTouch( AndroidHwConfig* config ) | |
| { | |
| return strcmp(config->hw_screen, "touch") == 0; | |
| } | |
| int | |
| androidHwConfig_isScreenMultiTouch( AndroidHwConfig* config ) | |
| { | |
| return strcmp(config->hw_screen, "multi-touch") == 0; | |
| } |