diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 1288d9a..4a5b1e2 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1489,13 +1489,12 @@ static bool tsc2100_debug(void) * The power_history array is updated in power_thread of powermgmt.c. */ -#define BAT_LAST_VAL MIN(LCD_WIDTH, POWER_HISTORY_LEN) #define BAT_YSPACE (LCD_HEIGHT - 20) static bool view_battery(void) { int view = 0; - int i, x, y; + int i, x, y, y1, y2; unsigned short maxv, minv; lcd_setfont(FONT_SYSFIXED); @@ -1508,7 +1507,7 @@ static bool view_battery(void) /* Find maximum and minimum voltage for scaling */ minv = power_history[0]; maxv = minv + 1; - for (i = 1; i < BAT_LAST_VAL && power_history[i]; i++) { + for (i = 1; i < POWER_HISTORY_LEN && power_history[i]; i++) { if (power_history[i] > maxv) maxv = power_history[i]; if (power_history[i] < minv) @@ -1521,14 +1520,26 @@ static bool view_battery(void) minv / 1000, minv % 1000, maxv / 1000, maxv % 1000); x = 0; - for (i = BAT_LAST_VAL - 1; i >= 0; i--) { - y = (power_history[i] - minv) * BAT_YSPACE / (maxv - minv); - lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - lcd_vline(x, LCD_HEIGHT-1, 20); - lcd_set_drawmode(DRMODE_SOLID); - lcd_vline(x, LCD_HEIGHT-1, - MIN(MAX(LCD_HEIGHT-1 - y, 20), LCD_HEIGHT-1)); + for (i=POWER_HISTORY_LEN-1; i>0; i--) { + if (power_history[i] && power_history[i-1]) + { + y1 = (power_history[i] - minv) * BAT_YSPACE / + (maxv - minv); + y1 = MIN(MAX(LCD_HEIGHT-1 - y1, 20), + LCD_HEIGHT-1); + y2 = (power_history[i-1] - minv) * BAT_YSPACE / + (maxv - minv); + y2 = MIN(MAX(LCD_HEIGHT-1 - y2, 20), + LCD_HEIGHT-1); + + lcd_set_drawmode(DRMODE_SOLID); + + lcd_drawline(((x*LCD_WIDTH)/(POWER_HISTORY_LEN)), + y1, + (((x+1)*LCD_WIDTH)/(POWER_HISTORY_LEN)), + y2); x++; + } } break;