From 45d32cec5b78dcc8d84e737985fd25ab744f292c Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Tue, 3 Dec 2002 13:12:55 +0000 Subject: Added 'Disk info' to debug menu git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2908 a1c6a512-1295-4272-9138-f99709370657 --- apps/debug_menu.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ firmware/drivers/ata.c | 5 ++++ firmware/drivers/ata.h | 1 + 3 files changed, 83 insertions(+) diff --git a/apps/debug_menu.c b/apps/debug_menu.c index ae660d49c5..3aca2b8f2c 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -39,6 +39,7 @@ #include "disk.h" #include "mpeg.h" #include "settings.h" +#include "ata.h" #ifdef HAVE_LCD_BITMAP #include "widgets.h" #include "peakmeter.h" @@ -1080,6 +1081,81 @@ static bool view_runtime(void) return false; } +static bool dbg_disk_info(void) +{ + char buf[128]; + bool done = false; + int i; + int page = 0; + const int max_page = 2; + unsigned short* identify_info = ata_get_identify(); + + while(!done) + { + int y=0; + int key; + lcd_clear_display(); +#ifdef HAVE_LCD_BITMAP + lcd_puts(0, y++, "Disk info:"); + y++; +#endif + + switch (page) { + case 0: + for (i=0; i < 20; i++) + ((unsigned short*)buf)[i]=identify_info[i+27]; + buf[40]=0; + /* kill trailing space */ + for (i=39; i && buf[i]==' '; i--) + buf[i] = 0; + lcd_puts(0, y++, "Model"); + lcd_puts_scroll(0, y++, buf); + break; + + case 1: + for (i=0; i < 4; i++) + ((unsigned short*)buf)[i]=identify_info[i+23]; + buf[8]=0; + lcd_puts(0, y++, "Firmware"); + lcd_puts(0, y++, buf); + break; + + case 2: + snprintf(buf, sizeof buf, "%d MB", + ((unsigned)identify_info[61] << 16 | + (unsigned)identify_info[60]) / 2048 ); + lcd_puts(0, y++, "Size"); + lcd_puts(0, y++, buf); + } + lcd_update(); + + /* Wait for a key to be pushed */ + key = button_get_w_tmo(HZ*5); + switch(key) { +#ifdef HAVE_PLAYER_KEYPAD + case BUTTON_STOP | BUTTON_REL: +#else + case BUTTON_OFF | BUTTON_REL: +#endif + done = true; + break; + + case BUTTON_LEFT: + if (--page < 0) + page = max_page; + break; + + case BUTTON_RIGHT: + if (++page > max_page) + page = 0; + break; + } + lcd_stop_scroll(); + } + + return false; +} + bool debug_menu(void) { int m; @@ -1105,6 +1181,7 @@ bool debug_menu(void) #endif { "View HW info", dbg_hw_info }, { "View partitions", dbg_partitions }, + { "View disk info", dbg_disk_info }, #ifdef HAVE_LCD_BITMAP { "View mpeg thread", dbg_mpeg_thread }, #ifdef PM_DEBUG diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index bdb744095d..1b2cbd369c 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -717,6 +717,11 @@ static int set_multiple_mode(int sectors) return 0; } +unsigned short* ata_get_identify(void) +{ + return identify_info; +} + int ata_init(void) { mutex_init(&ata_mtx); diff --git a/firmware/drivers/ata.h b/firmware/drivers/ata.h index 4a24cff412..a9a79870c4 100644 --- a/firmware/drivers/ata.h +++ b/firmware/drivers/ata.h @@ -45,6 +45,7 @@ extern int ata_write_sectors(unsigned long start, int count, void* buf); extern void ata_delayed_write(unsigned long sector, void* buf); extern void ata_flush(void); extern void ata_spin(void); +extern unsigned short* ata_get_identify(void); extern long last_disk_activity; -- cgit v1.2.3