logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

1upslider8.c (13497B)


  1. /* Copyright 2022 ziptyze
  2. *
  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. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "analog.h"
  17. #include "qmk_midi.h"
  18. #include "quantum.h"
  19. #include "quantum/midi/midi.h"
  20. #include "quantum/midi/midi_device.h"
  21. uint8_t divisor = 0;
  22. void slider(void) {
  23. if (divisor++) { // only run the slider function 1/256 times it's called
  24. return;
  25. }
  26. midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
  27. uprintf("%d string", analogReadPin(SLIDER_PIN));
  28. }
  29. void housekeeping_task_kb(void) {
  30. slider();
  31. }
  32. static uint32_t oled_logo_timer = 0;
  33. static bool clear_logo = true;
  34. static const char PROGMEM my_logo[] = {
  35. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  36. 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
  37. 0xE0, 0xF0, 0x70, 0x70, 0x70, 0x70,
  38. 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00,
  39. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  40. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  41. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  42. 0x00, 0x63, 0xE7, 0xE7, 0xCE, 0xCE,
  43. 0xCE, 0xCE, 0xFC, 0xFC, 0x78, 0x00,
  44. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  45. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  46. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  47. 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC1,
  48. 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
  49. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  50. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  51. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  52. 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
  53. 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
  54. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  55. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  56. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  57. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  58. 0x00, 0x07, 0x07, 0x07, 0x07, 0x07,
  59. 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
  60. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  61. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  62. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  63. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  64. 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
  65. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  66. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  67. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  68. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69. 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x00,
  70. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  71. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  72. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  73. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74. 0xFC, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C,
  75. 0x1C, 0x3C, 0xF8, 0xF8, 0xE0, 0x00,
  76. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  77. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  78. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79. 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x70,
  80. 0x70, 0x70, 0x70, 0x78, 0x3F, 0x3F,
  81. 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
  82. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84. 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
  85. 0xF0, 0xF0, 0x70, 0x70, 0x70, 0x70,
  86. 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
  87. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90. 0x00, 0xFF, 0xFF, 0xFF, 0xCE, 0xCE,
  91. 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0x00,
  92. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  93. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  94. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95. 0x00, 0x00, 0xC0, 0xC1, 0xC1, 0xC1,
  96. 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x81,
  97. 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  98. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  99. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  100. 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
  101. 0xFF, 0x39, 0x39, 0x79, 0xF9, 0xF9,
  102. 0xDF, 0x9F, 0x0F, 0x00, 0x00, 0x00,
  103. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  104. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  105. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106. 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
  107. 0x00, 0x03, 0x07, 0x07, 0x06, 0x04,
  108. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  109. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  110. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  111. 0x00, 0x00, 0x00, 0x00, 0x1C, 0xBE,
  112. 0xFF, 0x63, 0x63, 0xFF, 0xBE, 0x1C,
  113. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  114. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  115. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  116. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  117. 0x07, 0x0F, 0x1F, 0x18, 0x18, 0x1F,
  118. 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00,
  119. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  120. 0x00, 0x00
  121. };
  122. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  123. return OLED_ROTATION_270;
  124. }
  125. static const char PROGMEM ou_logo[] = {
  126. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  127. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  128. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  129. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  130. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  131. 0x00, 0x00, 0xFC, 0xFC, 0xCF, 0xCF,
  132. 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF,
  133. 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03,
  134. 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03,
  135. 0x03, 0x03, 0xF3, 0xF3, 0x03, 0x03,
  136. 0x0C, 0x0C, 0xFC, 0xFC, 0x00, 0x00,
  137. 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0,
  138. 0xFF, 0xFF, 0xF0, 0xF0, 0xC3, 0xC3,
  139. 0xC0, 0xC0, 0xF0, 0xF0, 0xFF, 0xFF,
  140. 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFC,
  141. 0x0C, 0x0C, 0x0F, 0x0F, 0x03, 0x03,
  142. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  143. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  144. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  145. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  146. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  147. 0x00, 0x00
  148. };
  149. static char PROGMEM caps_on[] = {
  150. 0x00, 0x00, 0x00, 0xF8, 0x04, 0x04,
  151. 0x04, 0x88, 0x00, 0x00, 0xE0, 0x58,
  152. 0x44, 0x58, 0xE0, 0x00, 0x00, 0xFC,
  153. 0x24, 0x24, 0x24, 0x18, 0x00, 0x00,
  154. 0x98, 0x24, 0x24, 0x24, 0xC8, 0x00,
  155. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  156. 0x01, 0x01, 0x01, 0x00, 0x00, 0x81,
  157. 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF1,
  158. 0xF0, 0xF1, 0xF0, 0xF0, 0xE0, 0xC0,
  159. 0x80, 0x00, 0x00, 0x01, 0x01, 0x01,
  160. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  161. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  162. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  163. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  164. 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  165. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  166. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  167. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F,
  168. 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
  169. 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x03,
  170. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  171. 0x00, 0x00
  172. };
  173. static char PROGMEM caps_off[] = {
  174. 0x00, 0x00, 0x00, 0xF8, 0x04, 0x04,
  175. 0x04, 0x88, 0x00, 0x00, 0xE0, 0x58,
  176. 0x44, 0x58, 0xE0, 0x00, 0x00, 0xFC,
  177. 0x24, 0x24, 0x24, 0x18, 0x00, 0x00,
  178. 0x98, 0x24, 0x24, 0x24, 0xC8, 0x00,
  179. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  180. 0x01, 0x01, 0x01, 0x00, 0x00, 0x81,
  181. 0xC0, 0xE0, 0xF0, 0x70, 0x30, 0x31,
  182. 0x30, 0x31, 0x70, 0xF0, 0xE0, 0xC0,
  183. 0x80, 0x00, 0x00, 0x01, 0x01, 0x01,
  184. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  185. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  186. 0xFF, 0xFF, 0x03, 0x01, 0x00, 0x00,
  187. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  188. 0x01, 0x03, 0xFF, 0xFF, 0x00, 0x00,
  189. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  190. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  191. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1E,
  192. 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30,
  193. 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x03,
  194. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  195. 0x00, 0x00
  196. };
  197. static const char PROGMEM num_on[] = {
  198. 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
  199. 0x18, 0x20, 0xC0, 0xFC, 0x00, 0x00,
  200. 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC,
  201. 0x00, 0x00, 0xFC, 0x18, 0x60, 0x80,
  202. 0x60, 0x18, 0xFC, 0x00, 0x00, 0x00,
  203. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  204. 0x00, 0x01, 0x00, 0x00, 0x00, 0x81,
  205. 0xC0, 0xE0, 0xF0, 0xF0, 0xF1, 0xF1,
  206. 0xF1, 0xF0, 0xF0, 0xF0, 0xE1, 0xC0,
  207. 0x80, 0x01, 0x00, 0x00, 0x01, 0x00,
  208. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  209. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  210. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  211. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  212. 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  213. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  214. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  215. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F,
  216. 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
  217. 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x03,
  218. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  219. 0x00, 0x00
  220. };
  221. static const char PROGMEM num_off[] = {
  222. 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
  223. 0x18, 0x20, 0xC0, 0xFC, 0x00, 0x00,
  224. 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC,
  225. 0x00, 0x00, 0xFC, 0x18, 0x60, 0x80,
  226. 0x60, 0x18, 0xFC, 0x00, 0x00, 0x00,
  227. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  228. 0x00, 0x01, 0x00, 0x00, 0x00, 0x81,
  229. 0xC0, 0xE0, 0xF0, 0x70, 0x31, 0x31,
  230. 0x31, 0x30, 0x70, 0xF0, 0xE1, 0xC0,
  231. 0x80, 0x01, 0x00, 0x00, 0x01, 0x00,
  232. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  233. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  234. 0xFF, 0xFF, 0x03, 0x01, 0x00, 0x00,
  235. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  236. 0x01, 0x03, 0xFF, 0xFF, 0x00, 0x00,
  237. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  238. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  239. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1E,
  240. 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30,
  241. 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x03,
  242. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  243. 0x00, 0x00
  244. };
  245. static const char PROGMEM scrl_on[] = {
  246. 0x00, 0x00, 0x00, 0x98, 0x24, 0x24,
  247. 0x24, 0xC8, 0x00, 0x00, 0xF8, 0x04,
  248. 0x04, 0x04, 0x88, 0x00, 0x00, 0xFC,
  249. 0x24, 0x24, 0xE4, 0x18, 0x00, 0x00,
  250. 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
  251. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  252. 0x01, 0x01, 0x01, 0x00, 0x00, 0x80,
  253. 0xC0, 0xE1, 0xF1, 0xF1, 0xF0, 0xF0,
  254. 0xF0, 0xF1, 0xF0, 0xF0, 0xE0, 0xC1,
  255. 0x80, 0x00, 0x00, 0x01, 0x01, 0x01,
  256. 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  257. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  258. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  259. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  260. 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  261. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  262. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  263. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F,
  264. 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
  265. 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x03,
  266. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  267. 0x00, 0x00
  268. };
  269. static const char PROGMEM scrl_off[] = {
  270. 0x00, 0x00, 0x00, 0x98, 0x24, 0x24,
  271. 0x24, 0xC8, 0x00, 0x00, 0xF8, 0x04,
  272. 0x04, 0x04, 0x88, 0x00, 0x00, 0xFC,
  273. 0x24, 0x24, 0xE4, 0x18, 0x00, 0x00,
  274. 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
  275. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  276. 0x01, 0x01, 0x01, 0x00, 0x00, 0x80,
  277. 0xC0, 0xE1, 0xF1, 0x71, 0x30, 0x30,
  278. 0x30, 0x31, 0x70, 0xF0, 0xE0, 0xC1,
  279. 0x80, 0x00, 0x00, 0x01, 0x01, 0x01,
  280. 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  281. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  282. 0xFF, 0xFF, 0x03, 0x01, 0x00, 0x00,
  283. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  284. 0x01, 0x03, 0xFF, 0xFF, 0x00, 0x00,
  285. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  286. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  287. 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1E,
  288. 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30,
  289. 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x03,
  290. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  291. 0x00, 0x00
  292. };
  293. static void render_oled(void) {
  294. const int combined_size = sizeof(ou_logo) + sizeof(caps_off) + sizeof(num_off) + sizeof(scrl_off);
  295. char combined[combined_size];
  296. led_t led_state = host_keyboard_led_state();
  297. memcpy_P(combined, ou_logo, sizeof(ou_logo));
  298. if (led_state.caps_lock) {
  299. memcpy_P(combined + sizeof(ou_logo), caps_on, sizeof(caps_off));
  300. }
  301. else {
  302. memcpy_P(combined + sizeof(ou_logo), caps_off, sizeof(caps_off));
  303. }
  304. if (led_state.num_lock) {
  305. memcpy_P(combined + sizeof(ou_logo) + sizeof(caps_off), num_on, sizeof(num_off));
  306. }
  307. else {
  308. memcpy_P(combined + sizeof(ou_logo) + sizeof(caps_off), num_off, sizeof(num_off));
  309. }
  310. if (led_state.scroll_lock) {
  311. memcpy_P(combined + sizeof(ou_logo) + sizeof(caps_off) + sizeof(num_off), scrl_on, sizeof(scrl_off));
  312. }
  313. else {
  314. memcpy_P(combined + sizeof(ou_logo) + sizeof(caps_off) + sizeof(num_off), scrl_off, sizeof(scrl_off));
  315. }
  316. oled_write_raw_P(combined, sizeof(combined));
  317. }
  318. void render_logo(void) {
  319. oled_write_raw_P(my_logo, sizeof(my_logo));
  320. }
  321. void clear_screen(void) {
  322. if (clear_logo){
  323. for (uint8_t i = 0; i < OLED_DISPLAY_HEIGHT; ++i) {
  324. for (uint8_t j = 0; j < OLED_DISPLAY_WIDTH; ++j) {
  325. oled_write_raw_byte(0x0, i*OLED_DISPLAY_WIDTH + j);
  326. }
  327. }
  328. clear_logo = false;
  329. }
  330. }
  331. #define MIDI_CONTROL_CHANGE 0xB0
  332. MidiDevice _midi_device;
  333. void midi_callback(uint8_t cable, uint8_t *midi_data, uint16_t length) {
  334. // Check if this is a MIDI CC message on channel 2
  335. if ((midi_data[0] & 0xF0) == MIDI_CONTROL_CHANGE && midi_data[0] & (0x0F == 1)) {
  336. uprintf("%s string", midi_data );
  337. // ...
  338. }
  339. }
  340. void slider8_cc_callback(struct _midi_device *dev, uint8_t cable, uint8_t code_index, uint8_t value) {
  341. midi_callback(MIDI_CONTROL_CHANGE, &value, 1);
  342. }
  343. void init_timer(void){
  344. oled_logo_timer = timer_read32();
  345. };
  346. void keyboard_post_init_kb(void) {
  347. init_timer();
  348. keyboard_post_init_user();
  349. }
  350. void matrix_init_kb(void) {
  351. midi_register_cc_callback(&_midi_device, slider8_cc_callback);
  352. matrix_init_user();
  353. }
  354. #ifndef SHOW_LOGO
  355. # define SHOW_LOGO 5000
  356. #endif
  357. bool oled_task_kb(void) {
  358. if (!oled_task_user()) { return false; }
  359. if ((timer_elapsed32(oled_logo_timer) < SHOW_LOGO)){
  360. render_logo();
  361. }else{
  362. clear_screen();
  363. render_oled();
  364. }
  365. return false;
  366. }