Kaynağa Gözat

FIX: send last report when idle timeouts. (pjrc)

core
tmk 13 yıl önce
ebeveyn
işleme
cec2549505
9 değiştirilmiş dosya ile 23 ekleme ve 9 silme
  1. 1
    1
      adb.c
  2. 1
    1
      adb_usb/Makefile
  3. 2
    2
      adb_usb/config.h
  4. 1
    1
      adb_usb/matrix.c
  5. 4
    1
      command.c
  6. 4
    0
      pjrc/host.c
  7. 4
    3
      pjrc/usb.c
  8. 1
    0
      pjrc/usb_keyboard.c
  9. 5
    0
      vusb/host.c

+ 1
- 1
adb.c Dosyayı Görüntüle

4: GND 4: GND





Commands Commands
-------- --------
ADB command is 1byte and consists of 4bit-address, 2bit-command ADB command is 1byte and consists of 4bit-address, 2bit-command
You can read the state from PSW line(active low) however You can read the state from PSW line(active low) however
the switch has a special scancode 0x7F7F, so you can the switch has a special scancode 0x7F7F, so you can
also read from Data line. It uses 0xFFFF for release scancode. also read from Data line. It uses 0xFFFF for release scancode.
Release code seems to delay about some 100ms. Due to Mac soft power?


Keyboard LEDs & state of keys(Register2) Keyboard LEDs & state of keys(Register2)
This register hold current state of three LEDs and nine keys. This register hold current state of three LEDs and nine keys.

+ 1
- 1
adb_usb/Makefile Dosyayı Görüntüle





#---------------- Programming Options -------------------------- #---------------- Programming Options --------------------------
PROGRAM_CMD = teensy_loader_cli.exe -mmcu=$(MCU) -w -v $(TARGET).hex
PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex







+ 2
- 2
adb_usb/config.h Dosyayı Görüntüle



/* key combination for command */ /* key combination for command */
#define IS_COMMAND() ( \ #define IS_COMMAND() ( \
keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \
keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \
keyboard_report->mods == (BIT_LSHIFT | BIT_LCTRL | BIT_LALT | BIT_LGUI) || \
keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) \
) )





+ 1
- 1
adb_usb/matrix.c Dosyayı Görüntüle

_register_key(key1); _register_key(key1);
} }


if (debug_matrix && matrix_is_modified()) {
if (debug_enable) {
print("adb_host_kbd_recv: "); phex16(codes); print("\n"); print("adb_host_kbd_recv: "); phex16(codes); print("\n");
} }
return 1; return 1;

+ 4
- 1
command.c Dosyayı Görüntüle

print("UDCON: "); phex(UDCON); print("\n"); print("UDCON: "); phex(UDCON); print("\n");
print("UDIEN: "); phex(UDIEN); print("\n"); print("UDIEN: "); phex(UDIEN); print("\n");
print("UDINT: "); phex(UDINT); print("\n"); print("UDINT: "); phex(UDINT); print("\n");
print("host_keyboard_leds:"); phex(host_keyboard_leds()); print("\n");
print("usb_keyboard_leds:"); phex(usb_keyboard_leds); print("\n");
print("usb_keyboard_protocol: "); phex(usb_keyboard_protocol); print("\n");
print("usb_keyboard_idle_config:"); phex(usb_keyboard_idle_config); print("\n");
print("usb_keyboard_idle_count:"); phex(usb_keyboard_idle_count); print("\n");
#endif #endif
break; break;
#ifdef USB_NKRO_ENABLE #ifdef USB_NKRO_ENABLE

+ 4
- 0
pjrc/host.c Dosyayı Görüntüle

#include <stdint.h> #include <stdint.h>
#include <avr/interrupt.h>
#include "usb_keycodes.h" #include "usb_keycodes.h"
#include "usb_keyboard.h" #include "usb_keyboard.h"
#include "usb_mouse.h" #include "usb_mouse.h"


void host_swap_keyboard_report(void) void host_swap_keyboard_report(void)
{ {
uint8_t sreg = SREG;
cli();
report_keyboard_t *tmp = keyboard_report_prev; report_keyboard_t *tmp = keyboard_report_prev;
keyboard_report_prev = keyboard_report; keyboard_report_prev = keyboard_report;
keyboard_report = tmp; keyboard_report = tmp;
SREG = sreg;
} }


void host_clear_keyboard_report(void) void host_clear_keyboard_report(void)

+ 4
- 3
pjrc/usb.c Dosyayı Görüntüle

usb_keyboard_idle_count++; usb_keyboard_idle_count++;
if (usb_keyboard_idle_count == usb_keyboard_idle_config) { if (usb_keyboard_idle_count == usb_keyboard_idle_config) {
usb_keyboard_idle_count = 0; usb_keyboard_idle_count = 0;
UEDATX = keyboard_report->mods;
UEDATX = keyboard_report_prev->mods;
UEDATX = 0; UEDATX = 0;
for (i=0; i<6; i++) {
UEDATX = keyboard_report->keys[i];
uint8_t keys = usb_keyboard_protocol ? KBD_REPORT_KEYS : 6;
for (i=0; i<keys; i++) {
UEDATX = keyboard_report_prev->keys[i];
} }
UEINTX = 0x3A; UEINTX = 0x3A;
} }

+ 1
- 0
pjrc/usb_keyboard.c Dosyayı Görüntüle



// the idle configuration, how often we send the report to the // the idle configuration, how often we send the report to the
// host (ms * 4) even when it hasn't changed // host (ms * 4) even when it hasn't changed
// Windows and Linux set 0 while OS X sets 6(24ms) by SET_IDLE request.
uint8_t usb_keyboard_idle_config=125; uint8_t usb_keyboard_idle_config=125;


// count until idle timeout // count until idle timeout

+ 5
- 0
vusb/host.c Dosyayı Görüntüle

#include <stdint.h>
#include <avr/interrupt.h>
#include "usbdrv.h" #include "usbdrv.h"
#include "usbconfig.h" #include "usbconfig.h"
#include "print.h" #include "print.h"


void host_swap_keyboard_report(void) void host_swap_keyboard_report(void)
{ {
uint8_t sreg = SREG;
cli();
report_keyboard_t *tmp = keyboard_report_prev; report_keyboard_t *tmp = keyboard_report_prev;
keyboard_report_prev = keyboard_report; keyboard_report_prev = keyboard_report;
keyboard_report = tmp; keyboard_report = tmp;
SREG = sreg;
} }


void host_clear_keyboard_report(void) void host_clear_keyboard_report(void)