Add LED support to x68k
authortmk <nobody@nowhere>
Fri, 21 Jun 2013 07:34:39 +0000 (16:34 +0900)
committertmk <nobody@nowhere>
Fri, 21 Jun 2013 17:32:45 +0000 (02:32 +0900)
converter/x68k_usb/Makefile
converter/x68k_usb/config_pjrc.h
converter/x68k_usb/led.c
protocol/x68k.c
protocol/x68k.h

index 62b976c56f639812144866c7bea4a5745c60fdd4..fd66ed563b1fc8441bf19220d72e2c4e33cdd9b6 100644 (file)
@@ -16,7 +16,8 @@ TARGET_DIR = .
 SRC =  keymap.c \
        matrix.c \
        led.c \
-       x68k.c
+       protocol/x68k.c
+#      protocol/serial_uart.c
 
 CONFIG_H = config_pjrc.h
 
@@ -37,12 +38,23 @@ MCU = atmega32u4       # Teensy 2.0
 F_CPU = 16000000
 
 
+# Boot Section Size in bytes
+#   Teensy halfKay   512
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
 # Build Options
 #   *Comment out* to disable the options.
 #
-MOUSEKEY_ENABLE = yes  # Mouse keys
-EXTRAKEY_ENABLE = yes  # Audio control and System control
-NKRO_ENABLE = yes      # USB Nkey Rollover
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE = yes   # Console for debug(+400)
+COMMAND_ENABLE = yes    # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes     # USB Nkey Rollover - not yet supported in LUFA
 
 
 
index 2df83a2cb493f5fa16b99be64bd0d58bab0c81fc..dd277cff18bf0ea32769dce073f7db5c27615e5a 100644 (file)
@@ -40,11 +40,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* legacy keymap support */
 #define USE_LEGACY_KEYMAP
 
-/* mouse keys */
-#ifdef MOUSEKEY_ENABLE
-#   define MOUSEKEY_DELAY_TIME 255
-#endif
-
 
 /* USART configuration
  *     asynchronous, 2400baud, 8-data bit, non parity, 1-stop bit, no flow control
@@ -57,7 +52,23 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #   define KBD_RX_INIT()      do { \
         UBRR1L = (uint8_t) KBD_RX_UBBR; \
         UBRR1H = (uint8_t) (KBD_RX_UBBR>>8); \
-        UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); \
+        UCSR1B |= (1<<RXCIE1) | (1<<RXEN1) | (1<<TXEN1); \
+    } while(0)
+
+
+    #define SERIAL_UART_BAUD       2400
+    #define SERIAL_UART_DATA       UDR1
+    #define SERIAL_UART_UBRR       ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
+    #define SERIAL_UART_RXD_VECT   USART1_RX_vect
+    #define SERIAL_UART_TXD_READY  (UCSR1A&(1<<UDRE1))
+    #define SERIAL_UART_INIT()     do { \
+        UBRR1L = (uint8_t) SERIAL_UART_UBRR;       /* baud rate */ \
+        UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8);  /* baud rate */ \
+        UCSR1B = (1<<RXCIE1) | (1<<RXEN1) | /* RX: interrupt, RX: enable */ \
+                 (1<<TXEN1);                /* TX: enable */ \
+        UCSR1C = (1<<UPM11) | (1<<UPM10) | /* parity: none(00), even(01), odd(11) */ \
+                 (0<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10); /* 8bit-data(011) */ \
+        sei(); \
     } while(0)
 #else
 #   error "USART configuration is needed."
index 40156cf4accf1f604628652dbb22a0561f48c0bd..a1c1d546ece44048d700ac124ce593a0e05d3c8c 100644 (file)
@@ -16,11 +16,31 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "stdint.h"
-#include "x68k.h"
+#include "serial.h"
 #include "led.h"
+#include "debug.h"
+#include "x68k.h"
 
 
 void led_set(uint8_t usb_led)
 {
-    // not supported now
+    /* X68000 LED bits 0: on, 1: off
+     * bit 7   1(fixed)
+     * bit 6   全角
+     * bit 5   ひらがな
+     * bit 4   INS
+     * bit 3   CAPS
+     * bit 2   コード入力
+     * bit 1   ローマ字
+     * bit 0   かな
+     */
+    uint8_t led = 0xFF;
+    xprintf("usb_led: %02X\n", usb_led);
+    if (usb_led&(1<<USB_LED_NUM_LOCK))      led &= ~(1<<2);
+    if (usb_led&(1<<USB_LED_CAPS_LOCK))     led &= ~(1<<3);
+    if (usb_led&(1<<USB_LED_SCROLL_LOCK))   led &= ~(1<<1);
+    if (usb_led&(1<<USB_LED_COMPOSE))       led &= ~(1<<4);
+    if (usb_led&(1<<USB_LED_KANA))          led &= ~(1<<0);
+    xprintf("led: %02X\n", led);
+    x68k_send(led);
 }
index d17af51cc2dc6f7a659b9c2a447e9cef850ee3bf..b54e3d9a89f7c3cbda0a17f8815d281abb13706f 100644 (file)
@@ -64,6 +64,12 @@ uint8_t x68k_recv(void)
     return data;
 }
 
+void x68k_send(uint8_t d)
+{
+    while (!(UCSR1A&(1<<UDRE1)));
+    UDR1 = d;
+}
+
 // USART RX complete interrupt
 ISR(KBD_RX_VECT)
 {
index 2cfda63a7a3211d61217888854c8c9311a3fb59d..0d9c7de802015c2419810dbb1faf32fb83a6dcd7 100644 (file)
@@ -41,6 +41,7 @@ POSSIBILITY OF SUCH DAMAGE.
 /* host role */
 void x68k_init(void);
 uint8_t x68k_recv(void);
+void x68k_send(uint8_t d);
 
 /* device role */
 
Imprint / Impressum