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 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. #define VENDOR_ID 0xFEED
  17. #define PRODUCT_ID 0x9898
  18. #define DEVICE_VER 0x0100
  19. #define MANUFACTURER t.m.k.
  20. #define PRODUCT PC98 keyboard converter
  21. #define DESCRIPTION converts PC98 keyboard protocol into USB
  22. /* matrix size */
  23. #define MATRIX_ROWS 16
  24. #define MATRIX_COLS 8
  25. /* key combination for command */
  26. #define IS_COMMAND() ( \
  27. host_get_first_key() == KC_CANCEL \
  28. )
  29. /* PC98 Reset Port shared with TXD */
  30. #define PC98_RST_DDR DDRD
  31. #define PC98_RST_PORT PORTD
  32. #define PC98_RST_BIT 3
  33. /* PC98 Ready Port */
  34. #define PC98_RDY_DDR DDRD
  35. #define PC98_RDY_PORT PORTD
  36. #define PC98_RDY_BIT 4
  37. /* PC98 Retry Port */
  38. #define PC98_RTY_DDR DDRD
  39. #define PC98_RTY_PORT PORTD
  40. #define PC98_RTY_BIT 5
  41. /*
  42. * PC98 Serial(USART) configuration
  43. * asynchronous, positive logic, 19200baud, bit order: LSB first
  44. * 1-start bit, 8-data bit, odd parity, 1-stop bit
  45. */
  46. /*
  47. * Software Serial
  48. */
  49. #define SERIAL_SOFT_BAUD 19200
  50. #define SERIAL_SOFT_PARITY_ODD
  51. #define SERIAL_SOFT_BIT_ORDER_LSB
  52. #define SERIAL_SOFT_LOGIC_POSITIVE
  53. /* RXD Port */
  54. #define SERIAL_SOFT_RXD_DDR DDRD
  55. #define SERIAL_SOFT_RXD_PORT PORTD
  56. #define SERIAL_SOFT_RXD_PIN PIND
  57. #define SERIAL_SOFT_RXD_BIT 2
  58. #define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
  59. /* RXD Interupt */
  60. #define SERIAL_SOFT_RXD_VECT INT2_vect
  61. #define SERIAL_SOFT_RXD_INIT() do { \
  62. /* pin configuration: input with pull-up */ \
  63. SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
  64. SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
  65. /* enable interrupt: INT2(falling edge) */ \
  66. EICRA |= ((1<<ISC21)|(0<<ISC20)); \
  67. EIMSK |= (1<<INT2); \
  68. sei(); \
  69. } while (0)
  70. #define SERIAL_SOFT_RXD_INT_ENTER()
  71. #define SERIAL_SOFT_RXD_INT_EXIT() do { \
  72. /* clear interrupt flag */ \
  73. EIFR = (1<<INTF2); \
  74. } while (0)
  75. /* TXD Port */
  76. #define SERIAL_SOFT_TXD_DDR DDRD
  77. #define SERIAL_SOFT_TXD_PORT PORTD
  78. #define SERIAL_SOFT_TXD_PIN PIND
  79. #define SERIAL_SOFT_TXD_BIT 3
  80. #define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
  81. #define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
  82. #define SERIAL_SOFT_TXD_INIT() do { \
  83. /* pin configuration: output */ \
  84. SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
  85. /* idle */ \
  86. SERIAL_SOFT_TXD_ON(); \
  87. } while (0)
  88. /*
  89. * Hardware Serial(UART)
  90. */
  91. #ifdef __AVR_ATmega32U4__
  92. #define SERIAL_UART_BAUD 19200
  93. #define SERIAL_UART_DATA UDR1
  94. #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
  95. #define SERIAL_UART_RXD_VECT USART1_RX_vect
  96. #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
  97. #define SERIAL_UART_INIT() do { \
  98. UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
  99. UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
  100. UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
  101. UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
  102. UCSR1C |= (1<<UPM11) | (1<<UPM10); /* parity: none(00), even(01), odd(11) */ \
  103. sei(); \
  104. } while(0)
  105. #else
  106. #error "USART configuration is needed."
  107. #endif
  108. #endif