backlight.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //backlight.cpp
  2. #include "backlight.h"
  3. #include <avr/eeprom.h>
  4. #include <Arduino.h>
  5. #include "eeprom.h"
  6. #include "Marlin.h"
  7. #include "pins.h"
  8. #include "fastio.h"
  9. #include "Timer.h"
  10. #ifdef LCD_BL_PIN
  11. bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user
  12. int16_t backlightLevel_HIGH = 0;
  13. int16_t backlightLevel_LOW = 0;
  14. uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT;
  15. int16_t backlightTimer_period = 10;
  16. LongTimer backlightTimer;
  17. void backlight_save() //saves all backlight data to eeprom.
  18. {
  19. eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH);
  20. eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW);
  21. eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode);
  22. eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period);
  23. }
  24. void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on events such as knob click, rotate and on full screen notifications.
  25. {
  26. if (!backlightSupport) return;
  27. backlightTimer.start();
  28. }
  29. void backlight_update()
  30. {
  31. if (!backlightSupport) return;
  32. if (backlightMode == BACKLIGHT_MODE_AUTO)
  33. {
  34. if (backlightTimer.expired((uint32_t)backlightTimer_period * 1000ul)) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
  35. else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
  36. else {/*do nothing*/;} //display is dimmed.
  37. }
  38. else if (backlightMode == BACKLIGHT_MODE_DIM) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
  39. else analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
  40. }
  41. void backlight_init()
  42. {
  43. //check for backlight support on lcd
  44. SET_INPUT(LCD_BL_PIN);
  45. WRITE(LCD_BL_PIN,HIGH);
  46. _delay(10);
  47. backlightSupport = !READ(LCD_BL_PIN);
  48. if (!backlightSupport) return;
  49. //initialize backlight
  50. backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
  51. if (backlightMode == 0xFF) //set default values
  52. {
  53. backlightMode = BACKLIGHT_MODE_AUTO;
  54. backlightLevel_HIGH = 130;
  55. backlightLevel_LOW = 50;
  56. backlightTimer_period = 10; //in seconds
  57. backlight_save();
  58. }
  59. backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
  60. backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW);
  61. backlightTimer_period = eeprom_read_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT);
  62. SET_OUTPUT(LCD_BL_PIN);
  63. backlightTimer_reset();
  64. backlight_update(); //sets brightness
  65. }
  66. #endif //LCD_BL_PIN