Bladeren bron

Add LED support to x68k

led_matrix
tmk 11 jaren geleden
bovenliggende
commit
42c962412b
5 gewijzigde bestanden met toevoegingen van 62 en 12 verwijderingen
  1. 16
    4
      converter/x68k_usb/Makefile
  2. 17
    6
      converter/x68k_usb/config_pjrc.h
  3. 22
    2
      converter/x68k_usb/led.c
  4. 6
    0
      protocol/x68k.c
  5. 1
    0
      protocol/x68k.h

+ 16
- 4
converter/x68k_usb/Makefile Bestand weergeven

SRC = keymap.c \ SRC = keymap.c \
matrix.c \ matrix.c \
led.c \ led.c \
x68k.c
protocol/x68k.c
# protocol/serial_uart.c


CONFIG_H = config_pjrc.h CONFIG_H = config_pjrc.h


F_CPU = 16000000 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 # Build Options
# *Comment out* to disable the 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







+ 17
- 6
converter/x68k_usb/config_pjrc.h Bestand weergeven

/* legacy keymap support */ /* legacy keymap support */
#define USE_LEGACY_KEYMAP #define USE_LEGACY_KEYMAP


/* mouse keys */
#ifdef MOUSEKEY_ENABLE
# define MOUSEKEY_DELAY_TIME 255
#endif



/* USART configuration /* USART configuration
* asynchronous, 2400baud, 8-data bit, non parity, 1-stop bit, no flow control * asynchronous, 2400baud, 8-data bit, non parity, 1-stop bit, no flow control
# define KBD_RX_INIT() do { \ # define KBD_RX_INIT() do { \
UBRR1L = (uint8_t) KBD_RX_UBBR; \ UBRR1L = (uint8_t) KBD_RX_UBBR; \
UBRR1H = (uint8_t) (KBD_RX_UBBR>>8); \ 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) } while(0)
#else #else
# error "USART configuration is needed." # error "USART configuration is needed."

+ 22
- 2
converter/x68k_usb/led.c Bestand weergeven

*/ */


#include "stdint.h" #include "stdint.h"
#include "x68k.h"
#include "serial.h"
#include "led.h" #include "led.h"
#include "debug.h"
#include "x68k.h"




void led_set(uint8_t usb_led) 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);
} }

+ 6
- 0
protocol/x68k.c Bestand weergeven

return data; return data;
} }


void x68k_send(uint8_t d)
{
while (!(UCSR1A&(1<<UDRE1)));
UDR1 = d;
}

// USART RX complete interrupt // USART RX complete interrupt
ISR(KBD_RX_VECT) ISR(KBD_RX_VECT)
{ {

+ 1
- 0
protocol/x68k.h Bestand weergeven

/* host role */ /* host role */
void x68k_init(void); void x68k_init(void);
uint8_t x68k_recv(void); uint8_t x68k_recv(void);
void x68k_send(uint8_t d);


/* device role */ /* device role */