Advertisement
Songs0fFailure

Sansa, FS#(9305+11304)_ext

Mar 16th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.87 KB | None | 0 0
  1. diff --git a/apps/action.c b/apps/action.c
  2. index 44980cd..ef692d9 100644
  3. --- apps/action.c
  4. +++ apps/action.c
  5. @@ -150,6 +150,39 @@
  6.              items[i].action_code;
  7.  }
  8.  
  9. +static bool backlight_on_action(int action)
  10. +{
  11. +    /* no backlight on volume change and pause/play */
  12. +    return (action != ACTION_WPS_VOLUP)
  13. +        && (action != ACTION_WPS_VOLDOWN)
  14. +        && (action != ACTION_WPS_SKIPNEXT)
  15. +        && (action != ACTION_WPS_SKIPPREV)
  16. +        && (action != ACTION_WPS_PLAY)
  17. +        && (action != ACTION_WPS_HOTKEY)
  18. +        && (action != ACTION_WPS_VIEW_PLAYLIST);
  19. +}
  20. +
  21. +static bool backlight_on_keypress_oracle(int btn)
  22. +{
  23. +    /* check whether the button would fire an action */
  24. +    /* If yes, check whether that action should turn on the backlight */
  25. +    /* Keep this function fast! It's called from the button ticktask */
  26. +    /* or the scrollwheel interrupt handler! */
  27. +
  28. +    const struct button_mapping *items = NULL;
  29. +    int i = 0;
  30. +
  31. +    if (!global_settings.backlight_on_volume_change)
  32. +    {
  33. +        items = get_context_mapping(CONTEXT_WPS);
  34. +        /* also check action for button release */
  35. +        return backlight_on_action(do_button_check(items, btn, BUTTON_NONE, &i))
  36. +            && backlight_on_action(do_button_check(items, btn | BUTTON_REL, btn, &i));
  37. +    }
  38. +    else
  39. +        return true;
  40. +}
  41. +
  42.  #if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
  43.  
  44.  /* Timeout for gui boost in seconds. */
  45. @@ -209,6 +242,16 @@
  46.      
  47.      send_event(GUI_EVENT_ACTIONUPDATE, NULL);
  48.  
  49. +    /* In CONTEXT_WPS or CONTEXT_FM we may want to keep the backlight off */
  50. +    /* on certain actions. */
  51. +    /* Thus, a callback function is used to check if it should turn on. */
  52. +    /* See also button.c */
  53. +    if (   (context & ~ALLOW_SOFTLOCK) == CONTEXT_WPS
  54. +        || (context & ~ALLOW_SOFTLOCK) == CONTEXT_FM )
  55. +        set_backlight_on_keypress_oracle(backlight_on_keypress_oracle);
  56. +    else
  57. +        set_backlight_on_keypress_oracle(NULL);
  58. +
  59.      if (timeout == TIMEOUT_NOBLOCK)
  60.          button = button_get(false);
  61.      else if  (timeout == TIMEOUT_BLOCK)
  62. diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang
  63. index ad709cc..3b9e3f2 100644
  64. --- apps/lang/deutsch.lang
  65. +++ apps/lang/deutsch.lang
  66. @@ -2595,6 +2595,20 @@
  67.    </voice>
  68.  </phrase>
  69.  <phrase>
  70. +  id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
  71. +  desc: Backlight on volume change and on pause/play
  72. +  user: core
  73. +  <source>
  74. +    *: "Backlight On Volume Change"
  75. +  </source>
  76. +  <dest>
  77. +    *: "Beleuchtung bei Änderung der Lautstärke"
  78. +  </dest>
  79. +  <voice>
  80. +    *: "Beleuchtung bei Änderung der Lautstärke"
  81. +  </voice>
  82. +</phrase>
  83. +<phrase>
  84.    id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
  85.    desc: In display settings, time to switch LCD chip into power saving state
  86.    user: core
  87. diff --git a/apps/lang/english.lang b/apps/lang/english.lang
  88. index 627fda8..f2b06dc 100644
  89. --- apps/lang/english.lang
  90. +++ apps/lang/english.lang
  91. @@ -2678,6 +2678,20 @@
  92.    </voice>
  93.  </phrase>
  94.  <phrase>
  95. +  id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
  96. +  desc: Backlight on volume change and on pause/play
  97. +  user: core
  98. +  <source>
  99. +    *: "Backlight on Volume Change"
  100. +  </source>
  101. +  <dest>
  102. +    *: "Backlight on Volume Change"
  103. +  </dest>
  104. +  <voice>
  105. +    *: "Backlight on Volume Change"
  106. +  </voice>
  107. +</phrase>
  108. +<phrase>
  109.    id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
  110.    desc: In display settings, time to switch LCD chip into power saving state
  111.    user: core
  112. diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang
  113. index 420e85b..96d57fd 100644
  114. --- apps/lang/russian.lang
  115. +++ apps/lang/russian.lang
  116. @@ -7622,6 +7622,20 @@
  117.    </voice>
  118.  </phrase>
  119.  <phrase>
  120. +  id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
  121. +  desc: Backlight on volume change and on pause/play
  122. +  user: core
  123. +  <source>
  124. +    *: "Backlight on Volume Change"
  125. +  </source>
  126. +  <dest>
  127. +    *: "Подсветка при изменении Громкости"
  128. +  </dest>
  129. +  <voice>
  130. +    *: "Подсветка при изменении Громкости"
  131. +  </voice>
  132. +</phrase>
  133. +<phrase>
  134.    id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
  135.    desc: In display settings, time to switch LCD chip into power saving state
  136.    user: core
  137. diff --git a/apps/settings.h b/apps/settings.h
  138. index d0fd320..b92a5c7 100644
  139. --- apps/settings.h
  140. +++ apps/settings.h
  141. @@ -682,6 +682,8 @@
  142.                                 then according to timeout_values[] */
  143.      bool caption_backlight; /* turn on backlight at end and start of track */
  144.      bool bl_filter_first_keypress;   /* filter first keypress when dark? */
  145. +    bool backlight_on_volume_change; /* turn on the backlight on volume change
  146. +                                        and on pause/play? */
  147.  #if CONFIG_CHARGING
  148.      int backlight_timeout_plugged;
  149.  #endif
  150. diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c
  151. index 3e1443d..664752d 100644
  152. --- apps/menus/display_menu.c
  153. +++ apps/menus/display_menu.c
  154. @@ -103,6 +103,9 @@
  155.  MENUITEM_SETTING(bl_filter_first_keypress,
  156.                      &global_settings.bl_filter_first_keypress,
  157.                      filterfirstkeypress_callback);
  158. +MENUITEM_SETTING(backlight_on_volume_change,
  159. +                    &global_settings.backlight_on_volume_change,
  160. +                    NULL);
  161.  #ifdef HAVE_LCD_SLEEP_SETTING
  162.  MENUITEM_SETTING(lcd_sleep_after_backlight_off,
  163.                  &global_settings.lcd_sleep_after_backlight_off, NULL);
  164. @@ -140,6 +143,7 @@
  165.              ,&backlight_fade_in, &backlight_fade_out
  166.  #endif
  167.              ,&bl_filter_first_keypress
  168. +            ,&backlight_on_volume_change
  169.  # ifdef HAVE_LCD_SLEEP_SETTING
  170.              ,&lcd_sleep_after_backlight_off
  171.  # endif
  172. diff --git a/apps/settings_list.c b/apps/settings_list.c
  173. index 44295ac..ff34cd6 100644
  174. --- apps/settings_list.c
  175. +++ apps/settings_list.c
  176. @@ -926,6 +926,9 @@
  177.      OFFON_SETTING(0, bl_filter_first_keypress,
  178.                    LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
  179.                    "backlight filters first keypress", NULL),
  180. +    OFFON_SETTING(0, backlight_on_volume_change,
  181. +                  LANG_BACKLIGHT_ON_VOLUME_CHANGE, true,
  182. +                  "backlight on volume change", NULL),
  183.  #ifdef HAVE_REMOTE_LCD
  184.      OFFON_SETTING(0, remote_bl_filter_first_keypress,
  185.                    LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
  186. diff --git a/firmware/export/button.h b/firmware/export/button.h
  187. index 3f6052a..4a4456d 100644
  188. --- firmware/export/button.h
  189. +++ firmware/export/button.h
  190. @@ -64,6 +64,23 @@
  191.  #endif
  192.  #ifdef HAVE_BACKLIGHT
  193.  void set_backlight_filter_keypress(bool value);
  194. +
  195. +/* Callback function to tell whether the backlight should be turned on
  196. + * when a key is pressed. Called just after a key press.
  197. + *
  198. + * @param btn The button that was pressed
  199. + *
  200. + * Returns true iff the backlight should be turned on on key press.
  201. + */
  202. +typedef bool (*backlight_on_keypress_oracle_func)(int btn);
  203. +
  204. +/* Sets the new 'oracle' to tell whether the backlight should be turned
  205. + * on when a key is pressed. Passing NULL as parameter will turn on the BL
  206. + * on every key press.
  207. + */
  208. +void set_backlight_on_keypress_oracle(backlight_on_keypress_oracle_func func);
  209. +void backlight_on_by_button(int btn);
  210. +
  211.  #ifdef HAVE_REMOTE_LCD
  212.  void set_remote_backlight_filter_keypress(bool value);
  213.  #endif
  214. diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
  215. index 8244c47..0f7d16c 100644
  216. --- firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
  217. +++ firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
  218. @@ -168,7 +168,7 @@
  219.                     (wheel_delta << 24) | wheel_velocity*360/WHEELCLICKS_PER_ROTATION);
  220.              /* message posted - reset delta and poke backlight on*/
  221.              wheel_delta = 1;
  222. -            backlight_on();
  223. +            backlight_on_by_button(btn);
  224.              buttonlight_on();
  225.          }
  226.          else
  227. diff --git a/firmware/target/arm/ipod/button-clickwheel.c b/firmware/target/arm/ipod/button-clickwheel.c
  228. index 2abe25f..f8fd7d5 100644
  229. --- firmware/target/arm/ipod/button-clickwheel.c
  230. +++ firmware/target/arm/ipod/button-clickwheel.c
  231. @@ -137,8 +137,7 @@
  232.                  new_wheel_value = (status >> 16) & 0x7f;
  233.                  whl = new_wheel_value;
  234.                  
  235. -                /* switch on backlight (again), reset power-off timer */
  236. -                backlight_on();
  237. +                /* reset power-off timer */
  238.                  reset_poweroff_timer();
  239.                  
  240.                  /* Check whether the scrollwheel was untouched by accident or by will. */
  241. @@ -181,6 +180,9 @@
  242.  
  243.                      if (wheel_keycode != BUTTON_NONE)
  244.                      {
  245. +                        /* switch on backlight (again) */
  246. +                        backlight_on_by_button(wheel_keycode);
  247. +
  248.                          long v = (usec - last_wheel_usec) & 0x7fffffff;
  249.                          
  250.                          /* undo signedness */
  251. diff --git a/firmware/target/arm/ipod/button-1g-3g.c b/firmware/target/arm/ipod/button-1g-3g.c
  252. index 045a0f6..790ed24 100644
  253. --- firmware/target/arm/ipod/button-1g-3g.c
  254. +++ firmware/target/arm/ipod/button-1g-3g.c
  255. @@ -95,13 +95,6 @@
  256.          count = 0;
  257.      }
  258.  
  259. -    /* poke backlight every 1/4s of activity */
  260. -    if (TIME_AFTER(current_tick, next_backlight_on)) {
  261. -        backlight_on();
  262. -        reset_poweroff_timer();
  263. -        next_backlight_on = current_tick + HZ/4;
  264. -    }
  265. -
  266.      /* has wheel travelled far enough? */
  267.      if (++count < WHEEL_BASE_SENSITIVITY) {
  268.          return;
  269. @@ -126,6 +119,13 @@
  270.  
  271.      /* have a keycode */
  272.  
  273. +    /* poke backlight every 1/4s of activity */
  274. +    if (TIME_AFTER(current_tick, next_backlight_on)) {
  275. +        backlight_on_by_button(wheel_keycode);
  276. +        reset_poweroff_timer();
  277. +        next_backlight_on = current_tick + HZ/4;
  278. +    }
  279. +
  280.      usec = USEC_TIMER;
  281.      v = usec - last_wheel_usec;
  282.  
  283. diff --git a/firmware/target/arm/ipod/button-mini1g.c b/firmware/target/arm/ipod/button-mini1g.c
  284. index d4a75c9..d30e1e0 100644
  285. --- firmware/target/arm/ipod/button-mini1g.c
  286. +++ firmware/target/arm/ipod/button-mini1g.c
  287. @@ -91,13 +91,6 @@
  288.          return;
  289.      }
  290.  
  291. -   /* poke backlight every 1/4s of activity */
  292. -    if (TIME_AFTER(current_tick, next_backlight_on)) {
  293. -        backlight_on();
  294. -        reset_poweroff_timer();
  295. -        next_backlight_on = current_tick + HZ/4;
  296. -    }
  297. -
  298.      if (++count < WHEEL_BASE_SENSITIVITY)
  299.          return;
  300.  
  301. @@ -118,6 +111,13 @@
  302.  
  303.      /* have a keycode */
  304.  
  305. +   /* poke backlight every 1/4s of activity */
  306. +    if (TIME_AFTER(current_tick, next_backlight_on)) {
  307. +        backlight_on_by_button(wheel_keycode);
  308. +        reset_poweroff_timer();
  309. +        next_backlight_on = current_tick + HZ/4;
  310. +    }
  311. +
  312.      usec = USEC_TIMER;
  313.      v = usec - last_wheel_usec;
  314.  
  315. diff --git a/firmware/target/arm/sandisk/sansa-e200/button-e200.c b/firmware/target/arm/sandisk/sansa-e200/button-e200.c
  316. index 1e952b3..cd79023 100644
  317. --- firmware/target/arm/sandisk/sansa-e200/button-e200.c
  318. +++ firmware/target/arm/sandisk/sansa-e200/button-e200.c
  319. @@ -170,7 +170,7 @@
  320.          /* Poke backlight to turn it on or maintain it no more often
  321.           * than every 1/4 second */
  322.          next_backlight_on = current_tick + HZ/4;
  323. -        backlight_on();
  324. +        backlight_on_by_button(keycode);
  325.  #ifdef HAVE_BUTTON_LIGHT
  326.          buttonlight_on();
  327.  #endif
  328. diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
  329. index 3ee5e7c..8f50300 100644
  330. --- firmware/drivers/button.c
  331. +++ firmware/drivers/button.c
  332. @@ -41,6 +41,7 @@
  333.  #ifdef HAVE_REMOTE_LCD
  334.  #include "lcd-remote.h"
  335.  #endif
  336. +#include "debug.h"
  337.  
  338.  struct event_queue button_queue SHAREDBSS_ATTR;
  339.  
  340. @@ -52,6 +53,7 @@
  341.  #endif
  342.  #ifdef HAVE_BACKLIGHT
  343.  static bool filter_first_keypress;
  344. +static backlight_on_keypress_oracle_func backlight_on_keypress_oracle = NULL;
  345.  #ifdef HAVE_REMOTE_LCD
  346.  static bool remote_filter_first_keypress;
  347.  #endif
  348. @@ -138,6 +140,28 @@
  349.      return ret;
  350.  }
  351.  
  352. +void backlight_on_by_button(int btn)
  353. +{
  354. +    bool bl_on;
  355. +    if ((backlight_on_keypress_oracle != NULL) && (!is_backlight_on(true)))
  356. +    {
  357. +        bl_on = (*backlight_on_keypress_oracle)(btn);
  358. +        DEBUGF("BL oracle (%d) returned: %d\n", btn, bl_on);
  359. +    }
  360. +    else
  361. +    {
  362. +        bl_on = true;
  363. +        DEBUGF("BL callback is NULL -> bl ON\n");
  364. +    }
  365. +    if (bl_on)
  366. +    {
  367. +        backlight_on();
  368. +#ifdef HAVE_BUTTON_LIGHT
  369. +        buttonlight_on();
  370. +#endif
  371. +    }
  372. +}
  373. +
  374.  static void button_tick(void)
  375.  {
  376.      static int count = 0;
  377. @@ -308,10 +332,13 @@
  378.                              skip_remote_release = true;
  379.                      }
  380.                      else
  381. -#endif
  382. -                        if (!filter_first_keypress || is_backlight_on(false)
  383. +#endif /* HAVE_REMOTE_LCD */
  384. +                        if (!filter_first_keypress
  385. +                            || is_backlight_on(false)
  386. +                            || ((backlight_on_keypress_oracle != NULL)
  387. +                                && !(*backlight_on_keypress_oracle)(btn))
  388.  #if BUTTON_REMOTE
  389. -                                || (btn & BUTTON_REMOTE)
  390. +                            || (btn & BUTTON_REMOTE)
  391.  #endif
  392.                             )
  393.                              button_try_post(btn, data);
  394. @@ -327,12 +354,7 @@
  395.                      remote_backlight_on();
  396.                  else
  397.  #endif
  398. -                {
  399. -                    backlight_on();
  400. -#ifdef HAVE_BUTTON_LIGHT
  401. -                    buttonlight_on();
  402. -#endif
  403. -                }
  404. +                    backlight_on_by_button(btn);
  405.  
  406.                  reset_poweroff_timer();
  407.              }
  408. @@ -447,6 +469,7 @@
  409.  #endif
  410.  #ifdef HAVE_BACKLIGHT
  411.      filter_first_keypress = false;
  412. +    set_backlight_on_keypress_oracle(NULL);
  413.  #ifdef HAVE_REMOTE_LCD
  414.      remote_filter_first_keypress = false;
  415.  #endif    
  416. @@ -558,6 +581,12 @@
  417.  {
  418.      filter_first_keypress = value;
  419.  }
  420. +
  421. +void set_backlight_on_keypress_oracle(backlight_on_keypress_oracle_func new_value)
  422. +{
  423. +    backlight_on_keypress_oracle = new_value;
  424. +}
  425. +
  426.  #ifdef HAVE_REMOTE_LCD
  427.  void set_remote_backlight_filter_keypress(bool value)
  428.  {
  429. diff --git a/firmware/drivers/audio/as3514.c b/firmware/drivers/audio/as3514.c
  430. index 2260962..d4916ee 100644
  431. --- firmware/drivers/audio/as3514.c
  432. +++ firmware/drivers/audio/as3514.c
  433. @@ -151,9 +151,9 @@
  434.  #ifdef HAVE_AS3543
  435.  
  436.      as3514_write(AS3514_AUDIOSET1, AUDIOSET1_DAC_on | AUDIOSET1_DAC_GAIN_on);
  437. -    as3514_write(AS3514_AUDIOSET2, AUDIOSET2_AGC_off | AUDIOSET2_HPH_QUALITY_LOW_POWER);
  438. +    as3514_write(AS3514_AUDIOSET2, AUDIOSET2_AGC_off | AUDIOSET2_HPH_QUALITY_HIGH);
  439.      /* common ground on, delay playback unmuting when inserting headphones */
  440. -    as3514_write(AS3514_AUDIOSET3, AUDIOSET3_HPCM_on | AUDIOSET3_HP_LONGSTART);
  441. +    as3514_write(AS3514_AUDIOSET3, AUDIOSET3_HPCM_on | AUDIOSET3_HP_LONGSTART | AUDIOSET3_HP_BIAS_150);
  442.  
  443.      as3514_write(AS3543_DAC_IF, AS3543_DAC_INT_PLL);
  444.      /* Select Line 2 for FM radio */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement