forked from len0rd/rockbox
Only save settings if they changed (saves a disk spinup otherwise).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8994 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
cc4dc39dde
commit
37f529cc3c
1 changed files with 43 additions and 30 deletions
|
@ -130,23 +130,29 @@ enum { OSC_HORIZ, OSC_VERT, MAX_OSC };
|
||||||
struct plugin_api* rb; /* global api struct pointer */
|
struct plugin_api* rb; /* global api struct pointer */
|
||||||
|
|
||||||
/* settings */
|
/* settings */
|
||||||
int osc_delay = 2; /* in ticks */
|
struct osc_config {
|
||||||
int osc_draw = DRAW_FILLED;
|
int delay; /* in ticks */
|
||||||
int osc_advance = ADV_SCROLL;
|
int draw;
|
||||||
int osc_orientation = OSC_HORIZ;
|
int advance;
|
||||||
|
int orientation;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct osc_config osc_disk = { 2, DRAW_FILLED, ADV_SCROLL, OSC_HORIZ };
|
||||||
|
struct osc_config osc; /* running config */
|
||||||
|
|
||||||
static const char cfg_filename[] = "oscilloscope.cfg";
|
static const char cfg_filename[] = "oscilloscope.cfg";
|
||||||
static char *draw_str[3] = { "filled", "line", "pixel" };
|
static char *draw_str[3] = { "filled", "line", "pixel" };
|
||||||
static char *advance_str[2] = { "scroll", "wrap" };
|
static char *advance_str[2] = { "scroll", "wrap" };
|
||||||
static char *orientation_str[2] = { "horizontal", "vertical" };
|
static char *orientation_str[2] = { "horizontal", "vertical" };
|
||||||
|
|
||||||
struct configdata config[] = {
|
struct configdata disk_config[] = {
|
||||||
{ TYPE_INT, 1, 99, &osc_delay, "delay", NULL, NULL },
|
{ TYPE_INT, 1, 99, &osc_disk.delay, "delay", NULL, NULL },
|
||||||
{ TYPE_ENUM, 0, MAX_DRAW, &osc_draw, "draw", draw_str, NULL },
|
{ TYPE_ENUM, 0, MAX_DRAW, &osc_disk.draw, "draw", draw_str, NULL },
|
||||||
{ TYPE_ENUM, 0, MAX_ADV, &osc_advance, "advance", advance_str, NULL },
|
{ TYPE_ENUM, 0, MAX_ADV, &osc_disk.advance, "advance", advance_str, NULL },
|
||||||
{ TYPE_ENUM, 0, MAX_OSC, &osc_orientation, "orientation", orientation_str, NULL }
|
{ TYPE_ENUM, 0, MAX_OSC, &osc_disk.orientation, "orientation", orientation_str, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
long last_tick = 0; /* time of last drawing */
|
long last_tick = 0; /* time of last drawing */
|
||||||
int last_pos = 0; /* last x or y drawing position. Reset for aspect switch. */
|
int last_pos = 0; /* last x or y drawing position. Reset for aspect switch. */
|
||||||
int last_left; /* last channel values */
|
int last_left; /* last channel values */
|
||||||
|
@ -163,7 +169,7 @@ void anim_horizontal(int cur_left, int cur_right)
|
||||||
int cur_x, x;
|
int cur_x, x;
|
||||||
int left, right, dl, dr;
|
int left, right, dl, dr;
|
||||||
long cur_tick = *rb->current_tick;
|
long cur_tick = *rb->current_tick;
|
||||||
long d = (cur_tick - last_tick) / osc_delay;
|
long d = (cur_tick - last_tick) / osc.delay;
|
||||||
bool full_update = false;
|
bool full_update = false;
|
||||||
|
|
||||||
if (d == 0) /* too early, bail out */
|
if (d == 0) /* too early, bail out */
|
||||||
|
@ -181,7 +187,7 @@ void anim_horizontal(int cur_left, int cur_right)
|
||||||
|
|
||||||
if (cur_x >= LCD_WIDTH)
|
if (cur_x >= LCD_WIDTH)
|
||||||
{
|
{
|
||||||
if (osc_advance == ADV_SCROLL)
|
if (osc.advance == ADV_SCROLL)
|
||||||
{
|
{
|
||||||
int shift = cur_x - (LCD_WIDTH-1);
|
int shift = cur_x - (LCD_WIDTH-1);
|
||||||
xlcd_scroll_left(shift);
|
xlcd_scroll_left(shift);
|
||||||
|
@ -207,7 +213,7 @@ void anim_horizontal(int cur_left, int cur_right)
|
||||||
}
|
}
|
||||||
rb->lcd_set_drawmode(DRMODE_SOLID);
|
rb->lcd_set_drawmode(DRMODE_SOLID);
|
||||||
|
|
||||||
switch (osc_draw)
|
switch (osc.draw)
|
||||||
{
|
{
|
||||||
case DRAW_FILLED:
|
case DRAW_FILLED:
|
||||||
left = last_left;
|
left = last_left;
|
||||||
|
@ -328,7 +334,7 @@ void anim_vertical(int cur_left, int cur_right)
|
||||||
int cur_y, y;
|
int cur_y, y;
|
||||||
int left, right, dl, dr;
|
int left, right, dl, dr;
|
||||||
long cur_tick = *rb->current_tick;
|
long cur_tick = *rb->current_tick;
|
||||||
long d = (cur_tick - last_tick) / osc_delay;
|
long d = (cur_tick - last_tick) / osc.delay;
|
||||||
bool full_update = false;
|
bool full_update = false;
|
||||||
|
|
||||||
if (d == 0) /* too early, bail out */
|
if (d == 0) /* too early, bail out */
|
||||||
|
@ -346,7 +352,7 @@ void anim_vertical(int cur_left, int cur_right)
|
||||||
|
|
||||||
if (cur_y >= LCD_HEIGHT)
|
if (cur_y >= LCD_HEIGHT)
|
||||||
{
|
{
|
||||||
if (osc_advance == ADV_SCROLL)
|
if (osc.advance == ADV_SCROLL)
|
||||||
{
|
{
|
||||||
int shift = cur_y - (LCD_HEIGHT-1);
|
int shift = cur_y - (LCD_HEIGHT-1);
|
||||||
xlcd_scroll_up(shift);
|
xlcd_scroll_up(shift);
|
||||||
|
@ -372,7 +378,7 @@ void anim_vertical(int cur_left, int cur_right)
|
||||||
}
|
}
|
||||||
rb->lcd_set_drawmode(DRMODE_SOLID);
|
rb->lcd_set_drawmode(DRMODE_SOLID);
|
||||||
|
|
||||||
switch (osc_draw)
|
switch (osc.draw)
|
||||||
{
|
{
|
||||||
case DRAW_FILLED:
|
case DRAW_FILLED:
|
||||||
left = last_left;
|
left = last_left;
|
||||||
|
@ -524,8 +530,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
xlcd_init(rb);
|
xlcd_init(rb);
|
||||||
configfile_init(rb);
|
configfile_init(rb);
|
||||||
|
|
||||||
configfile_load(cfg_filename, config, sizeof(config) / sizeof(config[0]),
|
configfile_load(cfg_filename, disk_config,
|
||||||
|
sizeof(disk_config) / sizeof(disk_config[0]),
|
||||||
CFGFILE_MINVERSION);
|
CFGFILE_MINVERSION);
|
||||||
|
rb->memcpy(&osc, &osc_disk, sizeof(osc)); /* copy to running config */
|
||||||
|
|
||||||
#if LCD_DEPTH > 1
|
#if LCD_DEPTH > 1
|
||||||
rb->lcd_set_foreground(GRAPH_COLOR);
|
rb->lcd_set_foreground(GRAPH_COLOR);
|
||||||
|
@ -544,7 +552,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
{
|
{
|
||||||
int left, right;
|
int left, right;
|
||||||
|
|
||||||
rb->sleep(MAX(last_tick + osc_delay - *rb->current_tick - 1, 0));
|
rb->sleep(MAX(last_tick + osc.delay - *rb->current_tick - 1, 0));
|
||||||
|
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
left = rb->mas_codec_readreg(0xC);
|
left = rb->mas_codec_readreg(0xC);
|
||||||
|
@ -552,7 +560,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
#elif (CONFIG_CODEC == SWCODEC)
|
#elif (CONFIG_CODEC == SWCODEC)
|
||||||
rb->pcm_calculate_peaks(&left, &right);
|
rb->pcm_calculate_peaks(&left, &right);
|
||||||
#endif
|
#endif
|
||||||
if (osc_orientation == OSC_HORIZ)
|
if (osc.orientation == OSC_HORIZ)
|
||||||
anim_horizontal(left, right);
|
anim_horizontal(left, right);
|
||||||
else
|
else
|
||||||
anim_vertical(left, right);
|
anim_vertical(left, right);
|
||||||
|
@ -567,8 +575,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OSCILLOSCOPE_ADVMODE:
|
case OSCILLOSCOPE_ADVMODE:
|
||||||
if (++osc_advance >= MAX_ADV)
|
if (++osc.advance >= MAX_ADV)
|
||||||
osc_advance = 0;
|
osc.advance = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OSCILLOSCOPE_DRAWMODE:
|
case OSCILLOSCOPE_DRAWMODE:
|
||||||
|
@ -576,13 +584,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
if (lastbutton != OSCILLOSCOPE_DRAWMODE_PRE)
|
if (lastbutton != OSCILLOSCOPE_DRAWMODE_PRE)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
if (++osc_draw >= MAX_DRAW)
|
if (++osc.draw >= MAX_DRAW)
|
||||||
osc_draw = 0;
|
osc.draw = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OSCILLOSCOPE_ORIENTATION:
|
case OSCILLOSCOPE_ORIENTATION:
|
||||||
if (++osc_orientation >= MAX_OSC)
|
if (++osc.orientation >= MAX_OSC)
|
||||||
osc_orientation = 0;
|
osc.orientation = 0;
|
||||||
last_pos = 0;
|
last_pos = 0;
|
||||||
last_tick = 0;
|
last_tick = 0;
|
||||||
displaymsg = false;
|
displaymsg = false;
|
||||||
|
@ -597,16 +605,16 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
|
|
||||||
case OSCILLOSCOPE_SPEED_UP:
|
case OSCILLOSCOPE_SPEED_UP:
|
||||||
case OSCILLOSCOPE_SPEED_UP | BUTTON_REPEAT:
|
case OSCILLOSCOPE_SPEED_UP | BUTTON_REPEAT:
|
||||||
if (osc_delay > 1)
|
if (osc.delay > 1)
|
||||||
{
|
{
|
||||||
osc_delay--;
|
osc.delay--;
|
||||||
tell_speed = true;
|
tell_speed = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OSCILLOSCOPE_SPEED_DOWN:
|
case OSCILLOSCOPE_SPEED_DOWN:
|
||||||
case OSCILLOSCOPE_SPEED_DOWN | BUTTON_REPEAT:
|
case OSCILLOSCOPE_SPEED_DOWN | BUTTON_REPEAT:
|
||||||
osc_delay++;
|
osc.delay++;
|
||||||
tell_speed = true;
|
tell_speed = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -643,13 +651,18 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||||
|
|
||||||
if (tell_speed)
|
if (tell_speed)
|
||||||
{
|
{
|
||||||
rb->snprintf(message, sizeof(message), "Speed: %d", 100 / osc_delay);
|
rb->snprintf(message, sizeof(message), "Speed: %d", 100 / osc.delay);
|
||||||
displaymsg = true;
|
displaymsg = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cleanup(NULL);
|
cleanup(NULL);
|
||||||
configfile_save(cfg_filename, config, sizeof(config) / sizeof(config[0]),
|
if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */
|
||||||
|
{
|
||||||
|
rb->memcpy(&osc_disk, &osc, sizeof(osc));
|
||||||
|
configfile_save(cfg_filename, disk_config,
|
||||||
|
sizeof(disk_config) / sizeof(disk_config[0]),
|
||||||
CFGFILE_VERSION);
|
CFGFILE_VERSION);
|
||||||
|
}
|
||||||
return PLUGIN_OK;
|
return PLUGIN_OK;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LCD_BITMAP */
|
#endif /* HAVE_LCD_BITMAP */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue