rev2.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /* Copyright 2021 Danny Nguyen <danny@keeb.io>
  2. This program is free software: you can redistribute it and/or modify
  3. it under the terms of the GNU General Public License as published by
  4. the Free Software Foundation, either version 2 of the License, or
  5. (at your option) any later version.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. GNU General Public License for more details.
  10. You should have received a copy of the GNU General Public License
  11. along with this program. If not, see <http://www.gnu.org/licenses/>.
  12. */
  13. #pragma once
  14. #include "sinc.h"
  15. #include "quantum.h"
  16. #ifdef USE_I2C
  17. #include <stddef.h>
  18. #ifdef __AVR__
  19. #include <avr/io.h>
  20. #include <avr/interrupt.h>
  21. #endif
  22. #endif
  23. #define LAYOUT_75( \
  24. LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, \
  25. LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \
  26. LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, \
  27. LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC8, \
  28. LD3, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, \
  29. LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8 \
  30. ) \
  31. { \
  32. { KC_NO, KC_NO, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  33. { KC_NO, KC_NO, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  34. { KC_NO, KC_NO, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  35. { KC_NO, KC_NO, LD3, KC_NO, LD5, LD6, LD7, LD8, LD9 }, \
  36. { KC_NO, KC_NO, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  37. { KC_NO, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  38. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, KC_NO }, \
  39. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, KC_NO }, \
  40. { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8, KC_NO }, \
  41. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, KC_NO }, \
  42. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, KC_NO }, \
  43. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, KC_NO } \
  44. }
  45. #define LAYOUT_80( \
  46. LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, \
  47. LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
  48. LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \
  49. LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC8, RC9, \
  50. LD3, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, RD9, \
  51. LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8, RE9 \
  52. ) \
  53. { \
  54. { KC_NO, KC_NO, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  55. { KC_NO, KC_NO, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  56. { KC_NO, KC_NO, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  57. { KC_NO, KC_NO, LD3, KC_NO, LD5, LD6, LD7, LD8, LD9 }, \
  58. { KC_NO, KC_NO, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  59. { KC_NO, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  60. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9 }, \
  61. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9 }, \
  62. { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8, RC9 }, \
  63. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, RD9 }, \
  64. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, RE9 }, \
  65. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9 } \
  66. }
  67. #define LAYOUT_75_with_macro( \
  68. LF1, LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, \
  69. LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \
  70. LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, \
  71. LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC8, \
  72. LD1, LD2, LD3, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, \
  73. LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8 \
  74. ) \
  75. { \
  76. { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  77. { LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  78. { LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  79. { LD1, LD2, LD3, KC_NO, LD5, LD6, LD7, LD8, LD9 }, \
  80. { LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  81. { LF1, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  82. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, KC_NO }, \
  83. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, KC_NO }, \
  84. { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8, KC_NO }, \
  85. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, KC_NO }, \
  86. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, KC_NO }, \
  87. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, KC_NO } \
  88. }
  89. #define LAYOUT_80_with_macro( \
  90. LF1, LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, \
  91. LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
  92. LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \
  93. LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC8, RC9, \
  94. LD1, LD2, LD3, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, RD9, \
  95. LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8, RE9 \
  96. ) \
  97. { \
  98. { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  99. { LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  100. { LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  101. { LD1, LD2, LD3, KC_NO, LD5, LD6, LD7, LD8, LD9 }, \
  102. { LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  103. { LF1, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  104. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9 }, \
  105. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9 }, \
  106. { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8, RC9 }, \
  107. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, RD9 }, \
  108. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, RE9 }, \
  109. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9 } \
  110. }
  111. #define LAYOUT_75_iso( \
  112. LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, \
  113. LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \
  114. LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, \
  115. LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, \
  116. LD3, LD4, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, \
  117. LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8 \
  118. ) \
  119. { \
  120. { KC_NO, KC_NO, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  121. { KC_NO, KC_NO, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  122. { KC_NO, KC_NO, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  123. { KC_NO, KC_NO, LD3, LD4, LD5, LD6, LD7, LD8, LD9 }, \
  124. { KC_NO, KC_NO, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  125. { KC_NO, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  126. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, KC_NO }, \
  127. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, KC_NO, KC_NO }, \
  128. { RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, KC_NO }, \
  129. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, KC_NO }, \
  130. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, KC_NO }, \
  131. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, KC_NO } \
  132. }
  133. #define LAYOUT_80_iso( \
  134. LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, \
  135. LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
  136. LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB9, \
  137. LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9, \
  138. LD3, LD4, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, RD9, \
  139. LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8, RE9 \
  140. ) \
  141. { \
  142. { KC_NO, KC_NO, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  143. { KC_NO, KC_NO, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  144. { KC_NO, KC_NO, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  145. { KC_NO, KC_NO, LD3, LD4, LD5, LD6, LD7, LD8, LD9 }, \
  146. { KC_NO, KC_NO, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  147. { KC_NO, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  148. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9 }, \
  149. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, KC_NO, RB9 }, \
  150. { RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9 }, \
  151. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, RD9 }, \
  152. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, RE9 }, \
  153. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9 } \
  154. }
  155. #define LAYOUT_75_iso_with_macro( \
  156. LF1, LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, \
  157. LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, \
  158. LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, \
  159. LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, \
  160. LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, \
  161. LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8 \
  162. ) \
  163. { \
  164. { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  165. { LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  166. { LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  167. { LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9 }, \
  168. { LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  169. { LF1, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  170. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, KC_NO }, \
  171. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, KC_NO, KC_NO }, \
  172. { RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, KC_NO }, \
  173. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, KC_NO }, \
  174. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, KC_NO }, \
  175. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, KC_NO } \
  176. }
  177. #define LAYOUT_80_iso_with_macro( \
  178. LF1, LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, \
  179. LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
  180. LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB9, \
  181. LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9, \
  182. LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, RD9, \
  183. LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8, RE9 \
  184. ) \
  185. { \
  186. { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  187. { LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  188. { LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  189. { LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9 }, \
  190. { LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  191. { LF1, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  192. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9 }, \
  193. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, KC_NO, RB9 }, \
  194. { RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9 }, \
  195. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, RD9 }, \
  196. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, RE9 }, \
  197. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9 } \
  198. }
  199. #define LAYOUT_all( \
  200. LF1, LF3, LF4, LF5, LF6, LF7, LF8, LF9, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, \
  201. LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
  202. LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \
  203. LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9, \
  204. LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9, RD1, RD2, RD3, RD4, RD5, RD7, RD8, RD9, \
  205. LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, RE1, RE2, RE3, RE4, RE5, RE7, RE8, RE9 \
  206. ) \
  207. { \
  208. { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8, LA9 }, \
  209. { LB1, LB2, LB3, LB4, LB5, LB6, LB7, LB8, KC_NO }, \
  210. { LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, KC_NO }, \
  211. { LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9 }, \
  212. { LE1, LE2, LE3, LE4, LE5, LE6, LE7, LE8, KC_NO }, \
  213. { LF1, KC_NO, LF3, LF4, LF5, LF6, LF7, LF8, LF9 }, \
  214. { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9 }, \
  215. { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9 }, \
  216. { RC1, RC2, RC3, RC4, RC5, RC6, RC7, RC8, RC9 }, \
  217. { RD1, RD2, RD3, RD4, RD5, KC_NO, RD7, RD8, RD9 }, \
  218. { RE1, RE2, RE3, RE4, RE5, KC_NO, RE7, RE8, RE9 }, \
  219. { KC_NO, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9 } \
  220. }