Commits

izdubar committed 9f3bf50

Added option to specify the HDD spin down time out.

Value is in minute(s), max is 20 minutes. Value "0" means no automatic spin down of HDD.

When automatic spin down is disabled, the HDD won't be stopped either when using IGR to PS2Browser.

Comments (0)

Files changed (13)

include/dialogs.h

 #define CFG_DANDROP				39
 #define CFG_USBDELAY			40
 #define CFG_USBPREFIX			41
+#define CFG_HDDSPINDOWN			42
 
 extern struct UIItem diaIPConfig[];
 extern struct UIItem diaCompatConfig[];
 #define _STR_USB_DELAY				104
 #define _STR_USB_PREFIX				105
 #define _STR_HINT_EXITPATH			106
-#define LANG_STR_COUNT 107
+#define _STR_HINT_SPINDOWN			107
+#define _STR_HDD_SPINDOWN			108
+#define LANG_STR_COUNT 109
 
 // Maximum external languages supported
 #define MAX_LANGUAGE_FILES 15
 int gNetworkStartup;
 // true if the ip config should be saved as well
 int gIPConfigChanged;
+int gHDDSpindown;
 /// Indicates the hdd module loading sequence
 int gHddStartup;
 /// 0 = off, 1 = manual, 2 = auto

lng/lang_Spanish.lng

 Guardar cambios
 O Atrás
 Configurar red
-<No hay elementos>
+<Sin configurar>
 Configuración guardada...
 ¡Error al guardar la configuración!
 Salir
 Cargar del disco
 Espera por favor
 Error al cargar la ID del juego
-Lista de juegos ordenada por alfabeto
+Listas ordenadas por alfabeto
 Error al cargar archivo de idioma
 No mostrar los colores para depuración
 Mando no encontrado, esperando...
 Comprobar fragmentación de juego USB
 Recordar último juego jugado
 Error, el juego está fragmentado
-Error, no se pudo iniciar el objeto
+Error, no se pudo iniciar el archivo
 Test
 Dejar vacío para autentificar como GUEST
 Cargar núcleo alternativo
 Buffer cdvdfsv reducido
 Ocultar módulo dev9
 Combinación de IGR alternativa
-Cambiar el tamaño reformateará la VMC
+Cambiar el tamaño formateará la VMC
 Crear
 Modificar
 Abortar
 Tamaño
 Estado
 Progreso
-Archivo VMC ya existe
+Archivo VMC creado
 Archivo VMC inválido, el tamaño es incorrecto
 El archivo VMC debe ser creado
 Error con el archivo VMC, ¿continuar con la MC física?
-Refresco automático de la lista
+Refresco automático de las listas
 Acerca del OPL
 Desarrolladores
 	p = _strtok(NULL, " ");
 	USBDelay = _strtoui(p);
 	DPRINTF("USB Delay = %d\n", USBDelay);
+
+	p = _strtok(NULL, " ");
+	HDDSpindown = _strtoui(p);
+	DPRINTF("HDD Spindown = %d\n", HDDSpindown);
+
 	p = _strtok(NULL, " ");
 	_strcpy(g_ps2_ip, p);
 	p = _strtok(NULL, " ");
 
 char ExitPath[32];
 int USBDelay;
+int HDDSpindown;
 
 int DisableDebug;
 #define GS_BGCOLOUR *((volatile unsigned long int*)0x120000E0)
 static void Go_Browser(void)
 {
 	// Shutdown Dev9 hardware
-	Shutdown_Dev9();
+	if (HDDSpindown)
+		Shutdown_Dev9();
 	
 	// FlushCache before exiting
 	FlushCache(0);
 
 	{UI_SPLITTER},
 
+	{UI_LABEL, 0, 1, -1, {.label = {NULL, _STR_HDD_SPINDOWN}}}, {UI_SPACER}, {UI_INT, CFG_HDDSPINDOWN, 1, _STR_HINT_SPINDOWN, {.intvalue = {20, 20, 0, 20}}}, {UI_BREAK},
+
+	{UI_SPLITTER},
+
 	{UI_LABEL, 0, 1, -1, {.label = {NULL, _STR_USBMODE}}}, {UI_SPACER}, {UI_ENUM, CFG_USBMODE, 1, -1, {.intvalue = {0, 0}}}, {UI_BREAK},
 	{UI_LABEL, 0, 1, -1, {.label = {NULL, _STR_HDDMODE}}}, {UI_SPACER}, {UI_ENUM, CFG_HDDMODE, 1, -1, {.intvalue = {0, 0}}}, {UI_BREAK},
 	{UI_LABEL, 0, 1, -1, {.label = {NULL, _STR_ETHMODE}}}, {UI_SPACER}, {UI_ENUM, CFG_ETHMODE, 1, -1, {.intvalue = {0, 0}}}, {UI_BREAK},
 	diaSetInt(diaConfig, CFG_DEBUG, gDisableDebug);
 	diaSetString(diaConfig, CFG_EXITTO, gExitPath);
 	diaSetInt(diaConfig, CFG_DANDROP, gEnableDandR);
+	diaSetInt(diaConfig, CFG_HDDSPINDOWN, gHDDSpindown);
 	diaSetInt(diaConfig, CFG_CHECKUSBFRAG, gCheckUSBFragmentation);
 	diaSetInt(diaConfig, CFG_USBDELAY, gUSBDelay);
 	diaSetString(diaConfig, CFG_USBPREFIX, gUSBPrefix);
 		diaGetString(diaConfig, CFG_EXITTO, gExitPath);
 		diaGetInt(diaConfig, CFG_DEBUG, &gDisableDebug);
 		diaGetInt(diaConfig, CFG_DANDROP, &gEnableDandR);
+		diaGetInt(diaConfig, CFG_HDDSPINDOWN, &gHDDSpindown);
 		diaGetInt(diaConfig, CFG_CHECKUSBFRAG, &gCheckUSBFragmentation);
 		diaGetInt(diaConfig, CFG_USBDELAY, &gUSBDelay);
 		diaGetString(diaConfig, CFG_USBPREFIX, gUSBPrefix);
 
 	LOG("hddLoadModules: modules loaded\n");
 
+	hddSetIdleTimeout(gHDDSpindown * 12); // gHDDSpindown [0..20] -> spindown [0..240] -> seconds [0..1200]
+
 	ret = fileXioMount(hddPrefix, oplPart, FIO_MT_RDWR);
 	if (ret < 0) {
 		fileXioUmount(hddPrefix);
 		dmaMode -= 3;
 	}
 	hddSetTransferMode(dmaType, dmaMode);
+	hddSetIdleTimeout(gHDDSpindown * 12);
 
 	if (hddHDProKitDetected) {
 		size_irx = size_hdd_hdpro_cdvdman_irx;
 	"Coders",
 	"USB delay",
 	"USB prefix path",
-	"Leave empty to exit to PS2Browser"
+	"Leave empty to exit to PS2Browser",
+	"Value in minute(s), 0 to disable spin down",
+	"Automatic HDD spin down"
 };
 
 static int guiLangID = 0;
 			configGetInt(configOPL, "default_device", &gDefaultDevice);
 			configGetInt(configOPL, "disable_debug", &gDisableDebug);
 			configGetInt(configOPL, "enable_delete_rename", &gEnableDandR);
+			configGetInt(configOPL, "hdd_spindown", &gHDDSpindown);
 			configGetInt(configOPL, "check_usb_frag", &gCheckUSBFragmentation);
 			configGetInt(configOPL, "usb_delay", &gUSBDelay);
 			if (configGetStr(configOPL, "usb_prefix", &temp))
 		configSetInt(configOPL, "default_device", gDefaultDevice);
 		configSetInt(configOPL, "disable_debug", gDisableDebug);
 		configSetInt(configOPL, "enable_delete_rename", gEnableDandR);
+		configSetInt(configOPL, "hdd_spindown", gHDDSpindown);
 		configSetInt(configOPL, "check_usb_frag", gCheckUSBFragmentation);
 		configSetInt(configOPL, "usb_delay", gUSBDelay);
 		configSetStr(configOPL, "usb_prefix", gUSBPrefix);
 	gNetworkStartup = 6;
 	gHddStartup = 6;
 	
+	gHDDSpindown = 20;
 	// no change to the ipconfig was done
 	gIPConfigChanged = 0;
 	gScrollSpeed = 1;
 	FlushCache(0);
 	FlushCache(2);
 
-	sprintf(config_str, "%s %d %s %d %d.%d.%d.%d %d.%d.%d.%d %d.%d.%d.%d", mode_str, gDisableDebug, gExitPath, gUSBDelay, \
+	sprintf(config_str, "%s %d %s %d %d %d.%d.%d.%d %d.%d.%d.%d %d.%d.%d.%d", mode_str, gDisableDebug, gExitPath, gUSBDelay, gHDDSpindown, \
 		ps2_ip[0], ps2_ip[1], ps2_ip[2], ps2_ip[3], \
 		ps2_netmask[0], ps2_netmask[1], ps2_netmask[2], ps2_netmask[3], \
 		ps2_gateway[0], ps2_gateway[1], ps2_gateway[2], ps2_gateway[3]);