~ruther/qmk_firmware

42c962412b92a0ab4bd26c95f25867c645064bd6 — tmk 12 years ago 1f74615
Add LED support to x68k
M converter/x68k_usb/Makefile => converter/x68k_usb/Makefile +16 -4
@@ 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




M converter/x68k_usb/config_pjrc.h => converter/x68k_usb/config_pjrc.h +17 -6
@@ 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."

M converter/x68k_usb/led.c => converter/x68k_usb/led.c +22 -2
@@ 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);
}

M protocol/x68k.c => protocol/x68k.c +6 -0
@@ 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)
{

M protocol/x68k.h => protocol/x68k.h +1 -0
@@ 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 */