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.

пре 11 година
пре 11 година
пре 11 година
пре 13 година
пре 13 година
пре 11 година
пре 13 година
пре 13 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 13 година
пре 11 година
пре 11 година
пре 11 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. Copyright 2012 Jun Wako <[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. #ifndef CONFIG_H
  15. #define CONFIG_H
  16. #include <avr/interrupt.h>
  17. #define VENDOR_ID 0xFEED
  18. #define PRODUCT_ID 0x6512
  19. #define MANUFACTURER t.m.k.
  20. #define PRODUCT PS/2 keyboard converter
  21. #define DESCRIPTION convert PS/2 keyboard to USB
  22. /* matrix size */
  23. #define MATRIX_ROWS 32 // keycode bit: 3-0
  24. #define MATRIX_COLS 8 // keycode bit: 6-4
  25. /* key combination for command */
  26. #define IS_COMMAND() ( \
  27. keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
  28. keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
  29. )
  30. /* mouse keys */
  31. #ifdef MOUSEKEY_ENABLE
  32. # define MOUSEKEY_DELAY_TIME 255
  33. #endif
  34. #ifdef PS2_USE_USART
  35. #if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
  36. /* XCK for clock line and RXD for data line */
  37. #define PS2_CLOCK_PORT PORTD
  38. #define PS2_CLOCK_PIN PIND
  39. #define PS2_CLOCK_DDR DDRD
  40. #define PS2_CLOCK_BIT 5
  41. #define PS2_DATA_PORT PORTD
  42. #define PS2_DATA_PIN PIND
  43. #define PS2_DATA_DDR DDRD
  44. #define PS2_DATA_BIT 2
  45. /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
  46. /* set DDR of CLOCK as input to be slave */
  47. #define PS2_USART_INIT() do { \
  48. PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
  49. PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
  50. UCSR1C = ((1 << UMSEL10) | \
  51. (3 << UPM10) | \
  52. (0 << USBS1) | \
  53. (3 << UCSZ10) | \
  54. (0 << UCPOL1)); \
  55. UCSR1A = 0; \
  56. UBRR1H = 0; \
  57. UBRR1L = 0; \
  58. } while (0)
  59. #define PS2_USART_RX_INT_ON() do { \
  60. UCSR1B = ((1 << RXCIE1) | \
  61. (1 << RXEN1)); \
  62. } while (0)
  63. #define PS2_USART_RX_POLL_ON() do { \
  64. UCSR1B = (1 << RXEN1); \
  65. } while (0)
  66. #define PS2_USART_OFF() do { \
  67. UCSR1C = 0; \
  68. UCSR1B &= ~((1 << RXEN1) | \
  69. (1 << TXEN1)); \
  70. } while (0)
  71. #define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
  72. #define PS2_USART_RX_DATA UDR1
  73. #define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
  74. #define PS2_USART_RX_VECT USART1_RX_vect
  75. #elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
  76. /* XCK for clock line and RXD for data line */
  77. #define PS2_CLOCK_PORT PORTD
  78. #define PS2_CLOCK_PIN PIND
  79. #define PS2_CLOCK_DDR DDRD
  80. #define PS2_CLOCK_BIT 4
  81. #define PS2_DATA_PORT PORTD
  82. #define PS2_DATA_PIN PIND
  83. #define PS2_DATA_DDR DDRD
  84. #define PS2_DATA_BIT 0
  85. /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
  86. /* set DDR of CLOCK as input to be slave */
  87. #define PS2_USART_INIT() do { \
  88. PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
  89. PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
  90. UCSR0C = ((1 << UMSEL00) | \
  91. (3 << UPM00) | \
  92. (0 << USBS0) | \
  93. (3 << UCSZ00) | \
  94. (0 << UCPOL0)); \
  95. UCSR0A = 0; \
  96. UBRR0H = 0; \
  97. UBRR0L = 0; \
  98. } while (0)
  99. #define PS2_USART_RX_INT_ON() do { \
  100. UCSR0B = ((1 << RXCIE0) | \
  101. (1 << RXEN0)); \
  102. } while (0)
  103. #define PS2_USART_RX_POLL_ON() do { \
  104. UCSR0B = (1 << RXEN0); \
  105. } while (0)
  106. #define PS2_USART_OFF() do { \
  107. UCSR0C = 0; \
  108. UCSR0B &= ~((1 << RXEN0) | \
  109. (1 << TXEN0)); \
  110. } while (0)
  111. #define PS2_USART_RX_READY (UCSR0A & (1<<RXC0))
  112. #define PS2_USART_RX_DATA UDR0
  113. #define PS2_USART_ERROR (UCSR0A & ((1<<FE0) | (1<<DOR0) | (1<<UPE0)))
  114. #define PS2_USART_RX_VECT USART_RX_vect
  115. #endif
  116. #endif
  117. #ifdef PS2_USE_INT
  118. /* uses INT1 for clock line(ATMega32U4) */
  119. #define PS2_CLOCK_PORT PORTD
  120. #define PS2_CLOCK_PIN PIND
  121. #define PS2_CLOCK_DDR DDRD
  122. #define PS2_CLOCK_BIT 1
  123. #define PS2_DATA_PORT PORTD
  124. #define PS2_DATA_PIN PIND
  125. #define PS2_DATA_DDR DDRD
  126. #define PS2_DATA_BIT 2
  127. #define PS2_INT_INIT() do { \
  128. EICRA |= ((1<<ISC11) | \
  129. (0<<ISC10)); \
  130. } while (0)
  131. #define PS2_INT_ON() do { \
  132. EIMSK |= (1<<INT1); \
  133. } while (0)
  134. #define PS2_INT_OFF() do { \
  135. EIMSK &= ~(1<<INT1); \
  136. } while (0)
  137. #define PS2_INT_VECT INT1_vect
  138. #endif
  139. #ifdef PS2_USE_BUSYWAIT
  140. #define PS2_CLOCK_PORT PORTF
  141. #define PS2_CLOCK_PIN PINF
  142. #define PS2_CLOCK_DDR DDRF
  143. #define PS2_CLOCK_BIT 0
  144. #define PS2_DATA_PORT PORTF
  145. #define PS2_DATA_PIN PINF
  146. #define PS2_DATA_DDR DDRF
  147. #define PS2_DATA_BIT 1
  148. #endif
  149. #endif