satisfaction_encoder.c 4.5 KB

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