2
0

satisfaction_encoder.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "satisfaction75.h"
  2. void pre_encoder_mode_change(){
  3. if(encoder_mode == ENC_MODE_CLOCK_SET){
  4. RTCDateTime timespec;
  5. timespec.year = year_config;
  6. timespec.month = month_config;
  7. timespec.day = day_config;
  8. // timespec.dayofweek = last_timespec.dayofweek;
  9. // timespec.dstflag = last_timespec.dstflag;
  10. timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;
  11. rtcSetTime(&RTCD1, &timespec);
  12. } else if (encoder_mode == ENC_MODE_BACKLIGHT){
  13. save_backlight_config_to_eeprom();
  14. }
  15. }
  16. void post_encoder_mode_change(){
  17. if(encoder_mode == ENC_MODE_CLOCK_SET){
  18. hour_config = (last_minute / 60);
  19. minute_config = last_minute % 60;
  20. year_config = last_timespec.year;
  21. month_config = last_timespec.month;
  22. day_config = last_timespec.day;
  23. time_config_idx = 0;
  24. }
  25. }
  26. void change_encoder_mode(bool negative){
  27. pre_encoder_mode_change();
  28. if(enabled_encoder_modes == 0){
  29. enabled_encoder_modes = 0x1F;
  30. }
  31. do {
  32. if(negative){
  33. if (encoder_mode == 0){
  34. encoder_mode = _NUM_ENCODER_MODES - 1;
  35. } else{
  36. encoder_mode = encoder_mode - 1;
  37. }
  38. } else {
  39. encoder_mode = (encoder_mode + 1) % _NUM_ENCODER_MODES;
  40. }
  41. } while(((1 << encoder_mode) & enabled_encoder_modes) == 0);
  42. post_encoder_mode_change();
  43. }
  44. void update_time_config(int8_t increment){
  45. uint8_t day_limit = 31;
  46. uint16_t adjusted_year = 1980 + year_config;
  47. switch(time_config_idx){
  48. case 0: // hour
  49. default:
  50. hour_config = (hour_config + increment) % 24;
  51. if (hour_config < 0){
  52. hour_config += 24;
  53. }
  54. break;
  55. case 1: // minute
  56. minute_config = (minute_config + increment) % 60;
  57. if (minute_config < 0){
  58. minute_config += 60;
  59. }
  60. break;
  61. case 2: // year
  62. year_config += increment;
  63. break;
  64. case 3: // month
  65. month_config = (month_config % 12) + increment;
  66. if (month_config <= 0){
  67. month_config += 12;
  68. }
  69. break;
  70. case 4: //day
  71. if (month_config == 9 || month_config == 4 || month_config == 6 || month_config == 11){
  72. day_limit = 30;
  73. } else if(month_config == 2){
  74. day_limit = adjusted_year % 4 == 0 && !(adjusted_year % 100 == 0 && adjusted_year % 400 != 0) ? 29 : 28;
  75. }
  76. day_config = (day_config % day_limit) + increment;
  77. if(day_config <= 0){
  78. day_config += day_limit;
  79. }
  80. break;
  81. }
  82. }
  83. uint16_t handle_encoder_clockwise(){
  84. uint16_t mapped_code = 0;
  85. switch(encoder_mode){
  86. default:
  87. case ENC_MODE_VOLUME:
  88. mapped_code = KC_VOLU;
  89. break;
  90. case ENC_MODE_MEDIA:
  91. mapped_code = KC_MEDIA_NEXT_TRACK;
  92. break;
  93. case ENC_MODE_SCROLL:
  94. mapped_code = KC_WH_D;
  95. break;
  96. case ENC_MODE_BACKLIGHT:
  97. kb_backlight_config.level = kb_backlight_config.level + 1;
  98. if(kb_backlight_config.level > BACKLIGHT_LEVELS){
  99. kb_backlight_config.level = BACKLIGHT_LEVELS;
  100. }
  101. backlight_set(kb_backlight_config.level);
  102. if (kb_backlight_config.level != 0){
  103. kb_backlight_config.enable = true;
  104. }
  105. break;
  106. case ENC_MODE_BRIGHTNESS:
  107. mapped_code = KC_BRIGHTNESS_UP;
  108. break;
  109. case ENC_MODE_CLOCK_SET:
  110. update_time_config(1);
  111. queue_for_send = true;
  112. break;
  113. }
  114. return mapped_code;
  115. }
  116. uint16_t handle_encoder_ccw(){
  117. uint16_t mapped_code = 0;
  118. switch(encoder_mode){
  119. default:
  120. case ENC_MODE_VOLUME:
  121. mapped_code = KC_VOLD;
  122. break;
  123. case ENC_MODE_MEDIA:
  124. mapped_code = KC_MEDIA_PREV_TRACK;
  125. break;
  126. case ENC_MODE_SCROLL:
  127. mapped_code = KC_WH_U;
  128. break;
  129. case ENC_MODE_BACKLIGHT:
  130. // mapped_code = BL_DEC;
  131. if(kb_backlight_config.level != 0){
  132. kb_backlight_config.level = kb_backlight_config.level - 1;
  133. }
  134. backlight_set(kb_backlight_config.level);
  135. if (kb_backlight_config.level == 0){
  136. kb_backlight_config.enable = false;
  137. }
  138. break;
  139. case ENC_MODE_BRIGHTNESS:
  140. mapped_code = KC_BRIGHTNESS_DOWN;
  141. break;
  142. case ENC_MODE_CLOCK_SET:
  143. update_time_config(-1);
  144. queue_for_send = true;
  145. break;
  146. }
  147. return mapped_code;
  148. }
  149. uint16_t handle_encoder_press(){
  150. uint16_t mapped_code = 0;
  151. switch(encoder_mode){
  152. case ENC_MODE_VOLUME:
  153. mapped_code = KC_MUTE;
  154. break;
  155. case ENC_MODE_MEDIA:
  156. mapped_code = KC_MEDIA_PLAY_PAUSE;
  157. break;
  158. case ENC_MODE_SCROLL:
  159. mapped_code = KC_BTN3;
  160. break;
  161. case ENC_MODE_BACKLIGHT:
  162. // mapped_code = BL_TOGG;
  163. kb_backlight_config.breathing = !kb_backlight_config.breathing;
  164. if(!kb_backlight_config.breathing){
  165. breathing_disable();
  166. } else{
  167. breathing_enable();
  168. }
  169. break;
  170. case ENC_MODE_CLOCK_SET:
  171. time_config_idx = (time_config_idx + 1) % 5;
  172. default:
  173. case ENC_MODE_BRIGHTNESS:
  174. break;
  175. }
  176. return mapped_code;
  177. }