summaryrefslogtreecommitdiff
path: root/apps/debug_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/debug_menu.c')
-rw-r--r--apps/debug_menu.c51
1 files changed, 35 insertions, 16 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 6676a84..694252a 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -1510,7 +1510,7 @@ static int disk_callback(int btn, struct gui_synclist *lists)
}
#ifdef HAVE_ATA_SMART
-static struct ata_smart_values *smart_data = NULL;
+static struct ata_smart_values smart_data STORAGE_ALIGN_ATTR;
static const char * ata_smart_get_attr_name(unsigned char id)
{
@@ -1526,20 +1526,24 @@ static const char * ata_smart_get_attr_name(unsigned char id)
case 9: return "Power-On Hours Count";
case 10: return "Spin-Up Retry Count";
case 12: return "Power Cycle Count";
+ case 191: return "G-Sense Error Rate";
case 192: return "Power-Off Retract Count";
case 193: return "Load/Unload Cycle Count";
case 194: return "HDA Temperature";
+ case 195: return "Hardware ECC Recovered";
case 196: return "Reallocated Event Count";
case 197: return "Current Pending Sector Count";
case 198: return "Uncorrectable Sector Count";
- case 199: return "UltraDMA CRC Error Count";
+ case 199: return "UDMA CRC Error Count";
+ case 200: return "Write Error Rate";
+ case 201: return "TA Counter Detected";
case 220: return "Disk Shift";
case 222: return "Loaded Hours";
case 223: return "Load/Unload Retry Count";
case 224: return "Load Friction";
+ case 225: return "Load Cycle Count";
case 226: return "Load-In Time";
case 240: return "Transfer Error Rate"; /* Fujitsu */
- /*case 240: return "Head Flying Hours";*/
default: return "Unknown Attribute";
}
};
@@ -1639,7 +1643,7 @@ static bool ata_smart_dump(void)
fd = creat("/smart_data.bin", 0666);
if(fd >= 0)
{
- write(fd, smart_data, sizeof(struct ata_smart_values));
+ write(fd, &smart_data, sizeof(struct ata_smart_values));
close(fd);
}
@@ -1651,7 +1655,7 @@ static bool ata_smart_dump(void)
for (i = 0; i < NUMBER_ATA_SMART_ATTRIBUTES; i++)
{
if (ata_smart_attr_to_string(
- &smart_data->vendor_attributes[i], buf, sizeof(buf)))
+ &smart_data.vendor_attributes[i], buf, sizeof(buf)))
{
write(fd, buf, strlen(buf));
write(fd, "\n", 1);
@@ -1666,32 +1670,47 @@ static bool ata_smart_dump(void)
static int ata_smart_callback(int btn, struct gui_synclist *lists)
{
(void)lists;
+ static bool read_done = false;
if (btn == ACTION_STD_CANCEL)
{
- smart_data = NULL;
+ read_done = false;
return btn;
}
/* read S.M.A.R.T. data only on first redraw */
- if (!smart_data)
+ if (!read_done)
{
- int i;
- char buf[SIMPLELIST_MAX_LINELENGTH];
- smart_data = ata_read_smart();
+ int rc;
+ memset(&smart_data, 0, sizeof(struct ata_smart_values));
+ rc = ata_read_smart(&smart_data);
simplelist_set_line_count(0);
- simplelist_addline("Id Name: Current,Worst Raw");
- for (i = 0; i < NUMBER_ATA_SMART_ATTRIBUTES; i++) {
- if (ata_smart_attr_to_string(
- &smart_data->vendor_attributes[i], buf, sizeof(buf)))
- simplelist_addline(buf);
+ if (rc == 0)
+ {
+ int i;
+ char buf[SIMPLELIST_MAX_LINELENGTH];
+ simplelist_addline("Id Name: Current,Worst Raw");
+ for (i = 0; i < NUMBER_ATA_SMART_ATTRIBUTES; i++)
+ {
+ if (ata_smart_attr_to_string(
+ &smart_data.vendor_attributes[i], buf, sizeof(buf)))
+ {
+ simplelist_addline(buf);
+ }
+ }
+ }
+ else
+ {
+ simplelist_addline("ATA SMART error: 0x%x", rc);
}
+ read_done = true;
}
if (btn == ACTION_STD_CONTEXT)
{
+ splash(0, "Dumping data...");
ata_smart_dump();
- splashf(HZ, "S.M.A.R.T. data dumped");
+ splash(HZ, "SMART data dumped");
}
return btn;