part of porting the debug interface from tmk
parent
79b747a5fe
commit
415e815f75
|
@ -548,10 +548,16 @@ uint8_t twi_read(uint8_t *data) {
|
||||||
#define EXTRA_SIZE 8
|
#define EXTRA_SIZE 8
|
||||||
#define EXTRA_BUFFER EP_DOUBLE_BUFFER
|
#define EXTRA_BUFFER EP_DOUBLE_BUFFER
|
||||||
|
|
||||||
|
#define DEBUG_INTERFACE 2
|
||||||
|
#define DEBUG_TX_ENDPOINT 3
|
||||||
|
#define DEBUG_TX_SIZE 32
|
||||||
|
#define DEBUG_TX_BUFFER EP_DOUBLE_BUFFER
|
||||||
|
|
||||||
static const uint8_t PROGMEM endpoint_config_table[] = {
|
static const uint8_t PROGMEM endpoint_config_table[] = {
|
||||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KEYBOARD_SIZE) | KEYBOARD_BUFFER,
|
// enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation)
|
||||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 4
|
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KEYBOARD_SIZE) | KEYBOARD_BUFFER, // 1
|
||||||
|
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 2
|
||||||
|
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(DEBUG_TX_SIZE) | DEBUG_TX_BUFFER, // 3
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -614,10 +620,10 @@ static const uint8_t PROGMEM keyboard_hid_report_desc[] = {
|
||||||
0x95, 0x06, // Report Count (6),
|
0x95, 0x06, // Report Count (6),
|
||||||
0x75, 0x08, // Report Size (8),
|
0x75, 0x08, // Report Size (8),
|
||||||
0x15, 0x00, // Logical Minimum (0),
|
0x15, 0x00, // Logical Minimum (0),
|
||||||
0x25, 0xFF, // Logical Maximum(104),
|
0x25, 0xFF, // Logical Maximum(255),
|
||||||
0x05, 0x07, // Usage Page (Key Codes),
|
0x05, 0x07, // Usage Page (Key Codes),
|
||||||
0x19, 0x00, // Usage Minimum (0),
|
0x19, 0x00, // Usage Minimum (0),
|
||||||
0x29, 0xFF, // Usage Maximum (104),
|
0x29, 0xFF, // Usage Maximum (255),
|
||||||
0x81, 0x00, // Input (Data, Array),
|
0x81, 0x00, // Input (Data, Array),
|
||||||
0xc0 // End Collection
|
0xc0 // End Collection
|
||||||
};
|
};
|
||||||
|
@ -640,14 +646,31 @@ static const uint8_t PROGMEM extra_hid_report_desc[] = {
|
||||||
0xc0, // END_COLLECTION
|
0xc0, // END_COLLECTION
|
||||||
};
|
};
|
||||||
|
|
||||||
#define KEYBOARD_HID_DESC_NUM 0
|
// debug messages
|
||||||
|
static const uint8_t PROGMEM debug_hid_report_desc[] = {
|
||||||
|
0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined)
|
||||||
|
0x09, 0x74, // Usage 0x74
|
||||||
|
0xA1, 0x53, // Collection 0x53
|
||||||
|
0x75, 0x08, // report size = 8 bits
|
||||||
|
0x15, 0x00, // logical minimum = 0
|
||||||
|
0x26, 0xFF, 0x00, // logical maximum = 255
|
||||||
|
0x95, DEBUG_TX_SIZE, // report count
|
||||||
|
0x09, 0x75, // usage
|
||||||
|
0x81, 0x02, // Input (array)
|
||||||
|
0xC0 // end collection
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define KEYBOARD_HID_DESC_NUM 0
|
||||||
|
#define EXTRA_HID_DESC_NUM 1
|
||||||
|
#define DEBUG_HID_DESC_NUM 2
|
||||||
|
#define NUM_INTERFACES 3
|
||||||
|
|
||||||
#define KEYBOARD_HID_DESC_OFFSET (9+(9+9+7)*KEYBOARD_HID_DESC_NUM+9)
|
#define KEYBOARD_HID_DESC_OFFSET (9+(9+9+7)*KEYBOARD_HID_DESC_NUM+9)
|
||||||
|
#define EXTRA_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9)
|
||||||
|
#define DEBUG_HID_DESC_OFFSET (9+(9+9+7)*DEBUG_HID_DESC_NUM+9)
|
||||||
|
#define CONFIG1_DESC_SIZE (9+(9+9+7)*NUM_INTERFACES)
|
||||||
|
|
||||||
#define EXTRA_HID_DESC_NUM (KEYBOARD_HID_DESC_NUM + 1)
|
|
||||||
#define EXTRA_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9)
|
|
||||||
|
|
||||||
#define NUM_INTERFACES (EXTRA_HID_DESC_NUM + 1)
|
|
||||||
#define CONFIG1_DESC_SIZE (9+(9+9+7)*NUM_INTERFACES)
|
|
||||||
static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
// configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
|
// configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
|
||||||
9, // bLength;
|
9, // bLength;
|
||||||
|
@ -657,8 +680,9 @@ static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
NUM_INTERFACES, // bNumInterfaces
|
NUM_INTERFACES, // bNumInterfaces
|
||||||
1, // bConfigurationValue
|
1, // bConfigurationValue
|
||||||
0, // iConfiguration
|
0, // iConfiguration
|
||||||
0xC0, // bmAttributes
|
0xA0, // bmAttributes
|
||||||
50, // bMaxPower
|
50, // bMaxPower
|
||||||
|
|
||||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||||
9, // bLength
|
9, // bLength
|
||||||
4, // bDescriptorType
|
4, // bDescriptorType
|
||||||
|
@ -669,7 +693,6 @@ static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
0x01, // bInterfaceSubClass (0x01 = Boot)
|
0x01, // bInterfaceSubClass (0x01 = Boot)
|
||||||
0x01, // bInterfaceProtocol (0x01 = Keyboard)
|
0x01, // bInterfaceProtocol (0x01 = Keyboard)
|
||||||
0, // iInterface
|
0, // iInterface
|
||||||
|
|
||||||
// HID descriptor, HID 1.11 spec, section 6.2.1
|
// HID descriptor, HID 1.11 spec, section 6.2.1
|
||||||
9, // bLength
|
9, // bLength
|
||||||
0x21, // bDescriptorType
|
0x21, // bDescriptorType
|
||||||
|
@ -713,6 +736,33 @@ static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
0x03, // bmAttributes (0x03=intr)
|
0x03, // bmAttributes (0x03=intr)
|
||||||
EXTRA_SIZE, 0, // wMaxPacketSize
|
EXTRA_SIZE, 0, // wMaxPacketSize
|
||||||
10, // bInterval
|
10, // bInterval
|
||||||
|
|
||||||
|
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||||
|
9, // bLength
|
||||||
|
4, // bDescriptorType
|
||||||
|
DEBUG_INTERFACE, // bInterfaceNumber
|
||||||
|
0, // bAlternateSetting
|
||||||
|
1, // bNumEndpoints
|
||||||
|
0x03, // bInterfaceClass (0x03 = HID)
|
||||||
|
0x00, // bInterfaceSubClass
|
||||||
|
0x00, // bInterfaceProtocol
|
||||||
|
0, // iInterface
|
||||||
|
// HID descriptor, HID 1.11 spec, section 6.2.1
|
||||||
|
9, // bLength
|
||||||
|
0x21, // bDescriptorType
|
||||||
|
0x11, 0x01, // bcdHID
|
||||||
|
0, // bCountryCode
|
||||||
|
1, // bNumDescriptors
|
||||||
|
0x22, // bDescriptorType
|
||||||
|
sizeof(debug_hid_report_desc), // wDescriptorLength
|
||||||
|
0,
|
||||||
|
// endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
|
||||||
|
7, // bLength
|
||||||
|
5, // bDescriptorType
|
||||||
|
DEBUG_TX_ENDPOINT | 0x80, // bEndpointAddress
|
||||||
|
0x03, // bmAttributes (0x03=intr)
|
||||||
|
DEBUG_TX_SIZE, 0, // wMaxPacketSize
|
||||||
|
1, // bInterval
|
||||||
};
|
};
|
||||||
|
|
||||||
// If you're desperate for a little extra code memory, these strings
|
// If you're desperate for a little extra code memory, these strings
|
||||||
|
@ -743,14 +793,14 @@ static struct descriptor_list_struct {
|
||||||
// CONFIGURATION descriptor
|
// CONFIGURATION descriptor
|
||||||
{0x0200, 0x0000, config1_descriptor, sizeof(config1_descriptor)},
|
{0x0200, 0x0000, config1_descriptor, sizeof(config1_descriptor)},
|
||||||
// HID/REPORT descriptors
|
// HID/REPORT descriptors
|
||||||
{0x2100, KEYBOARD_INTERFACE, config1_descriptor + KEYBOARD_HID_DESC_OFFSET,
|
{0x2100, KEYBOARD_INTERFACE, config1_descriptor + KEYBOARD_HID_DESC_OFFSET, 9},
|
||||||
9},
|
{0x2200, KEYBOARD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)},
|
||||||
{0x2200, KEYBOARD_INTERFACE, keyboard_hid_report_desc,
|
|
||||||
sizeof(keyboard_hid_report_desc)},
|
|
||||||
// Extra HID Descriptor
|
// Extra HID Descriptor
|
||||||
{0x2100, EXTRA_INTERFACE, config1_descriptor + EXTRA_HID_DESC_OFFSET, 9},
|
{0x2100, EXTRA_INTERFACE, config1_descriptor + EXTRA_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, EXTRA_INTERFACE, extra_hid_report_desc,
|
{0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)},
|
||||||
sizeof(extra_hid_report_desc)},
|
// debug descriptors
|
||||||
|
{0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9},
|
||||||
|
{0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)},
|
||||||
// STRING descriptors
|
// STRING descriptors
|
||||||
{0x0300, 0x0000, (const uint8_t *)&string0, 4},
|
{0x0300, 0x0000, (const uint8_t *)&string0, 4},
|
||||||
{0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)},
|
{0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)},
|
||||||
|
@ -794,6 +844,7 @@ volatile uint8_t keyboard_leds=0;
|
||||||
uint16_t consumer_key;
|
uint16_t consumer_key;
|
||||||
uint16_t last_consumer_key;
|
uint16_t last_consumer_key;
|
||||||
|
|
||||||
|
volatile uint8_t debug_flush_timer=0;
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -1155,3 +1206,24 @@ int8_t usb_extra_consumer_send() {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------
|
||||||
|
// debug
|
||||||
|
// --------------------------------------------------------
|
||||||
|
|
||||||
|
// immediately transmit any buffered output.
|
||||||
|
void usb_debug_flush_output(void) {
|
||||||
|
uint8_t intr_state;
|
||||||
|
|
||||||
|
intr_state = SREG;
|
||||||
|
cli();
|
||||||
|
if (debug_flush_timer) {
|
||||||
|
UENUM = DEBUG_TX_ENDPOINT;
|
||||||
|
while ((UEINTX & (1 << RWAL))) {
|
||||||
|
UEDATX = 0;
|
||||||
|
}
|
||||||
|
UEINTX = 0x3A;
|
||||||
|
debug_flush_timer = 0;
|
||||||
|
}
|
||||||
|
SREG = intr_state;
|
||||||
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <avr/io.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
@ -84,12 +85,6 @@ extern uint8_t keyboard_keys[6];
|
||||||
|
|
||||||
extern uint16_t consumer_key;
|
extern uint16_t consumer_key;
|
||||||
|
|
||||||
// This file does not include the HID debug functions, so these empty
|
|
||||||
// macros replace them with nothing, so users can compile code that
|
|
||||||
// has calls to these functions.
|
|
||||||
#define usb_debug_putchar(c)
|
|
||||||
#define usb_debug_flush_output()
|
|
||||||
|
|
||||||
// Everything below this point is only intended for usb_serial.c
|
// Everything below this point is only intended for usb_serial.c
|
||||||
|
|
||||||
#define EP_TYPE_CONTROL 0x00
|
#define EP_TYPE_CONTROL 0x00
|
||||||
|
@ -201,3 +196,12 @@ extern uint16_t consumer_key;
|
||||||
{ k30,k31,k32,k33,k34,k35, na, na,k38,k39,k3A,k3B,k3C,k3D }, \
|
{ k30,k31,k32,k33,k34,k35, na, na,k38,k39,k3A,k3B,k3C,k3D }, \
|
||||||
{ k40,k41,k42,k43,k44,k45,k46, k47,k48,k49,k4A,k4B,k4C,k4D }, \
|
{ k40,k41,k42,k43,k44,k45,k46, k47,k48,k49,k4A,k4B,k4C,k4D }, \
|
||||||
{ k50,k51,k52,k53,k54,k55,k56, k57,k58,k59,k5A,k5B,k5C,k5D }}
|
{ k50,k51,k52,k53,k54,k55,k56, k57,k58,k59,k5A,k5B,k5C,k5D }}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
// debug
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
|
||||||
|
extern volatile uint8_t debug_flush_timer;
|
||||||
|
|
||||||
|
#define usb_debug_putchar(c)
|
||||||
|
void usb_debug_flush_output(void); // immediately transmit any buffered output
|
||||||
|
|
Loading…
Reference in New Issue