You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /*
  2. Copyright 2014 Kai Ryu <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include <avr/io.h>
  15. #include <avr/interrupt.h>
  16. #include <avr/pgmspace.h>
  17. #include "backlight.h"
  18. #ifdef SOFTPWM_LED_ENABLE
  19. #include "softpwm_led.h"
  20. #else
  21. #include "breathing_led.h"
  22. #endif
  23. #include "action.h"
  24. #ifdef BACKLIGHT_ENABLE
  25. static const uint8_t backlight_table[] PROGMEM = {
  26. 0, 16, 128, 255
  27. };
  28. inline void backlight_set_raw(uint8_t raw);
  29. #ifdef SOFTPWM_LED_ENABLE
  30. #ifdef FADING_LED_ENABLE
  31. static uint8_t backlight_mode;
  32. #endif
  33. #endif
  34. /* Backlight pin configuration
  35. * PWM: PB7(OC1C)
  36. */
  37. #ifndef SOFTPWM_LED_ENABLE
  38. void backlight_enable(void)
  39. {
  40. // Turn on PWM
  41. cli();
  42. DDRB |= (1<<PB7);
  43. TCCR1A |= ( (1<<WGM10) | (1<<COM1C1) );
  44. TCCR1B |= ( (1<<CS11) | (1<<CS10) );
  45. sei();
  46. }
  47. void backlight_disable(void)
  48. {
  49. // Turn off PWM
  50. cli();
  51. DDRB &= ~(1<<PB7);
  52. TCCR1A &= ~( (1<<WGM10) | (1<<COM1C1) );
  53. TCCR1B &= ~( (1<<CS11) | (1<<CS10) );
  54. sei();
  55. }
  56. #endif
  57. void backlight_set(uint8_t level)
  58. {
  59. #ifdef FADING_LED_ENABLE
  60. backlight_mode = level;
  61. #endif
  62. #ifdef BREATHING_LED_ENABLE
  63. switch (level) {
  64. case 1:
  65. case 2:
  66. case 3:
  67. #ifdef SOFTPWM_LED_ENABLE
  68. softpwm_led_enable();
  69. #ifdef FADING_LED_ENABLE
  70. fading_led_disable_all();
  71. #endif
  72. breathing_led_disable_all();
  73. #else
  74. backlight_enable();
  75. breathing_led_disable();
  76. #endif
  77. backlight_set_raw(pgm_read_byte(&backlight_table[level]));
  78. break;
  79. case 4:
  80. case 5:
  81. case 6:
  82. #ifdef SOFTPWM_LED_ENABLE
  83. softpwm_led_enable();
  84. #ifdef FADING_LED_ENABLE
  85. fading_led_disable_all();
  86. #endif
  87. breathing_led_enable_all();
  88. #else
  89. backlight_enable();
  90. breathing_led_enable();
  91. #endif
  92. breathing_led_set_duration(6 - level);
  93. break;
  94. #ifdef SOFTPWM_LED_ENABLE
  95. #ifdef FADING_LED_ENABLE
  96. case 7:
  97. softpwm_led_enable();
  98. fading_led_enable_all();
  99. breathing_led_disable_all();
  100. fading_led_set_direction_all(FADING_LED_FADE_IN);
  101. fading_led_set_duration(3);
  102. break;
  103. case 8:
  104. softpwm_led_enable();
  105. fading_led_enable_all();
  106. breathing_led_disable_all();
  107. fading_led_set_direction_all(FADING_LED_FADE_OUT);
  108. fading_led_set_duration(3);
  109. break;
  110. #endif
  111. #endif
  112. case 0:
  113. default:
  114. #ifdef SOFTPWM_LED_ENABLE
  115. #ifdef FADING_LED_ENABLE
  116. fading_led_disable_all();
  117. #endif
  118. breathing_led_disable_all();
  119. softpwm_led_disable();
  120. #else
  121. breathing_led_disable();
  122. backlight_disable();
  123. #endif
  124. break;
  125. }
  126. #else
  127. if (level > 0) {
  128. backlight_enable();
  129. backlight_set_raw(pgm_read_byte(&backlight_table[level]));
  130. }
  131. else {
  132. backlight_disable();
  133. }
  134. #endif
  135. }
  136. #ifndef SOFTPWM_LED_ENABLE
  137. #ifdef BREATHING_LED_ENABLE
  138. void breathing_led_set_raw(uint8_t raw)
  139. {
  140. backlight_set_raw(raw);
  141. }
  142. #endif
  143. #endif
  144. inline void backlight_set_raw(uint8_t raw)
  145. {
  146. #ifdef SOFTPWM_LED_ENABLE
  147. softpwm_led_set_all(raw);
  148. #else
  149. OCR1C = raw;
  150. #endif
  151. }
  152. #ifndef LEDMAP_ENABLE
  153. #ifdef SOFTPWM_LED_ENABLE
  154. void softpwm_led_init(void)
  155. {
  156. DDRB |= (1<<PB7);
  157. }
  158. void softpwm_led_on(uint8_t index)
  159. {
  160. PORTB |= (1<<PB7);
  161. }
  162. void softpwm_led_off(uint8_t index)
  163. {
  164. PORTB &= ~(1<<PB7);
  165. }
  166. #endif
  167. #endif
  168. #ifdef SOFTPWM_LED_ENABLE
  169. #ifdef FADING_LED_ENABLE
  170. void action_keyevent(keyevent_t event)
  171. {
  172. if (backlight_mode == 7) {
  173. if (event.pressed) {
  174. softpwm_led_decrease_all(32);
  175. }
  176. }
  177. if (backlight_mode == 8) {
  178. if (event.pressed) {
  179. softpwm_led_increase_all(32);
  180. }
  181. }
  182. }
  183. #endif
  184. #endif
  185. #endif