Added Bulegiga iWRAP support into HHKB.(Bluetooth)
This commit is contained in:
parent
b703de7b29
commit
e67c988824
90 changed files with 3154 additions and 541 deletions
10
pjrc/host.c
10
pjrc/host.c
|
@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE)
|
||||
#include "usb_mouse.h"
|
||||
#endif
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
#include "usb_extra.h"
|
||||
#endif
|
||||
#include "debug.h"
|
||||
|
@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include "util.h"
|
||||
|
||||
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
bool keyboard_nkro = false;
|
||||
#endif
|
||||
|
||||
|
@ -51,7 +51,7 @@ uint8_t host_keyboard_leds(void)
|
|||
/* keyboard report operations */
|
||||
void host_add_key(uint8_t key)
|
||||
{
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
if (keyboard_nkro) {
|
||||
add_key_bit(key);
|
||||
return;
|
||||
|
@ -109,7 +109,7 @@ uint8_t host_has_anykey(void)
|
|||
|
||||
uint8_t host_get_first_key(void)
|
||||
{
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
if (keyboard_nkro) {
|
||||
uint8_t i = 0;
|
||||
for (; i < REPORT_KEYS && !keyboard_report->keys[i]; i++)
|
||||
|
@ -133,7 +133,7 @@ void host_mouse_send(report_mouse_t *report)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
void host_system_send(uint16_t data)
|
||||
{
|
||||
usb_extra_system_send(data);
|
||||
|
|
97
pjrc/main.c
Normal file
97
pjrc/main.c
Normal file
|
@ -0,0 +1,97 @@
|
|||
/* Keyboard example with debug channel, for Teensy USB Development Board
|
||||
* http://www.pjrc.com/teensy/usb_keyboard.html
|
||||
* Copyright (c) 2008 PJRC.COM, LLC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <util/delay.h>
|
||||
#include "keyboard.h"
|
||||
#include "usb.h"
|
||||
#include "matrix.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "util.h"
|
||||
#include "jump_bootloader.h"
|
||||
#ifdef PS2_MOUSE_ENABLE
|
||||
# include "ps2_mouse.h"
|
||||
#endif
|
||||
#include "host.h"
|
||||
#include "pjrc.h"
|
||||
|
||||
|
||||
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
|
||||
|
||||
|
||||
bool debug_enable = false;
|
||||
bool debug_matrix = false;
|
||||
bool debug_keyboard = false;
|
||||
bool debug_mouse = false;
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
DEBUG_LED_CONFIG;
|
||||
DEBUG_LED_OFF;
|
||||
|
||||
// set for 16 MHz clock
|
||||
CPU_PRESCALE(0);
|
||||
|
||||
// Initialize the USB, and then wait for the host to set configuration.
|
||||
// If the Teensy is powered without a PC connected to the USB port,
|
||||
// this will wait forever.
|
||||
usb_init();
|
||||
while (!usb_configured()) /* wait */ ;
|
||||
|
||||
keyboard_init();
|
||||
matrix_scan();
|
||||
if (matrix_key_count() >= 3) {
|
||||
#ifdef DEBUG_LED
|
||||
for (int i = 0; i < 6; i++) {
|
||||
DEBUG_LED_CONFIG;
|
||||
DEBUG_LED_ON;
|
||||
_delay_ms(500);
|
||||
DEBUG_LED_OFF;
|
||||
_delay_ms(500);
|
||||
}
|
||||
#else
|
||||
_delay_ms(5000);
|
||||
#endif
|
||||
print_enable = true;
|
||||
debug_enable = true;
|
||||
debug_matrix = true;
|
||||
debug_keyboard = true;
|
||||
debug_mouse = true;
|
||||
print("debug enabled.\n");
|
||||
}
|
||||
if (matrix_key_count() >= 4) {
|
||||
print("jump to bootloader...\n");
|
||||
_delay_ms(1000);
|
||||
jump_bootloader(); // not return
|
||||
}
|
||||
|
||||
|
||||
host_set_driver(pjrc_driver());
|
||||
while (1) {
|
||||
keyboard_proc();
|
||||
}
|
||||
}
|
76
pjrc/pjrc.c
Normal file
76
pjrc/pjrc.c
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "usb_keyboard.h"
|
||||
#include "usb_mouse.h"
|
||||
#include "usb_extra.h"
|
||||
#include "host_driver.h"
|
||||
#include "pjrc.h"
|
||||
|
||||
|
||||
/*------------------------------------------------------------------*
|
||||
* Host driver
|
||||
*------------------------------------------------------------------*/
|
||||
static uint8_t keyboard_leds(void);
|
||||
static void send_keyboard(report_keyboard_t *report);
|
||||
static void send_mouse(report_mouse_t *report);
|
||||
static void send_system(uint16_t data);
|
||||
static void send_consumer(uint16_t data);
|
||||
|
||||
static host_driver_t driver = {
|
||||
keyboard_leds,
|
||||
send_keyboard,
|
||||
send_mouse,
|
||||
send_system,
|
||||
send_consumer
|
||||
};
|
||||
|
||||
host_driver_t *pjrc_driver(void)
|
||||
{
|
||||
return &driver;
|
||||
}
|
||||
|
||||
static uint8_t keyboard_leds(void) {
|
||||
return usb_keyboard_leds;
|
||||
}
|
||||
|
||||
static void send_keyboard(report_keyboard_t *report)
|
||||
{
|
||||
usb_keyboard_send_report(report);
|
||||
}
|
||||
|
||||
static void send_mouse(report_mouse_t *report)
|
||||
{
|
||||
#ifdef MOUSE_ENABLE
|
||||
usb_mouse_send(report->x, report->y, report->v, report->h, report->buttons);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void send_system(uint16_t data)
|
||||
{
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
usb_extra_system_send(data);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void send_consumer(uint16_t data)
|
||||
{
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
usb_extra_consumer_send(data);
|
||||
#endif
|
||||
}
|
26
pjrc/pjrc.h
Normal file
26
pjrc/pjrc.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PJRC_H
|
||||
#define PJRC_H
|
||||
|
||||
#include "host_driver.h"
|
||||
|
||||
|
||||
host_driver_t *pjrc_driver(void);
|
||||
|
||||
#endif
|
34
pjrc/usb.c
34
pjrc/usb.c
|
@ -91,18 +91,18 @@ bool suspend = false;
|
|||
static const uint8_t PROGMEM endpoint_config_table[] = {
|
||||
// enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation)
|
||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD_SIZE) | KBD_BUFFER, // 1
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(MOUSE_SIZE) | MOUSE_BUFFER, // 2
|
||||
#else
|
||||
0, // 2
|
||||
#endif
|
||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(DEBUG_TX_SIZE) | DEBUG_TX_BUFFER, // 3
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 4
|
||||
#else
|
||||
0, // 4
|
||||
#endif
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD2_SIZE) | KBD2_BUFFER, // 5
|
||||
#else
|
||||
0, // 5
|
||||
|
@ -176,7 +176,7 @@ static uint8_t PROGMEM keyboard_hid_report_desc[] = {
|
|||
0x81, 0x00, // Input (Data, Array),
|
||||
0xc0 // End Collection
|
||||
};
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
static uint8_t PROGMEM keyboard2_hid_report_desc[] = {
|
||||
0x05, 0x01, // Usage Page (Generic Desktop),
|
||||
0x09, 0x06, // Usage (Keyboard),
|
||||
|
@ -213,7 +213,7 @@ static uint8_t PROGMEM keyboard2_hid_report_desc[] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
// Mouse Protocol 1, HID 1.11 spec, Appendix B, page 59-60, with wheel extension
|
||||
// http://www.microchip.com/forums/tm.aspx?high=&m=391435&mpage=1#391521
|
||||
// http://www.keil.com/forum/15671/
|
||||
|
@ -282,7 +282,7 @@ static uint8_t PROGMEM debug_hid_report_desc[] = {
|
|||
0xC0 // end collection
|
||||
};
|
||||
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
// audio controls & system controls
|
||||
// http://www.microsoft.com/whdc/archive/w2kbd.mspx
|
||||
static uint8_t PROGMEM extra_hid_report_desc[] = {
|
||||
|
@ -318,7 +318,7 @@ static uint8_t PROGMEM extra_hid_report_desc[] = {
|
|||
#define KBD_HID_DESC_NUM 0
|
||||
#define KBD_HID_DESC_OFFSET (9+(9+9+7)*KBD_HID_DESC_NUM+9)
|
||||
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
# define MOUSE_HID_DESC_NUM (KBD_HID_DESC_NUM + 1)
|
||||
# define MOUSE_HID_DESC_OFFSET (9+(9+9+7)*MOUSE_HID_DESC_NUM+9)
|
||||
#else
|
||||
|
@ -328,14 +328,14 @@ static uint8_t PROGMEM extra_hid_report_desc[] = {
|
|||
#define DEBUG_HID_DESC_NUM (MOUSE_HID_DESC_NUM + 1)
|
||||
#define DEBUG_HID_DESC_OFFSET (9+(9+9+7)*DEBUG_HID_DESC_NUM+9)
|
||||
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 1)
|
||||
# define EXTRA_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9)
|
||||
#else
|
||||
# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 0)
|
||||
#endif
|
||||
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 1)
|
||||
# define KBD2_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9)
|
||||
#else
|
||||
|
@ -383,7 +383,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
|||
KBD_SIZE, 0, // wMaxPacketSize
|
||||
10, // bInterval
|
||||
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||
9, // bLength
|
||||
4, // bDescriptorType
|
||||
|
@ -444,7 +444,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
|||
DEBUG_TX_SIZE, 0, // wMaxPacketSize
|
||||
1, // bInterval
|
||||
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||
9, // bLength
|
||||
4, // bDescriptorType
|
||||
|
@ -473,7 +473,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
|||
10, // bInterval
|
||||
#endif
|
||||
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||
9, // bLength
|
||||
4, // bDescriptorType
|
||||
|
@ -542,17 +542,17 @@ static struct descriptor_list_struct {
|
|||
// HID/REPORT descriptors
|
||||
{0x2100, KBD_INTERFACE, config1_descriptor+KBD_HID_DESC_OFFSET, 9},
|
||||
{0x2200, KBD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)},
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
{0x2100, MOUSE_INTERFACE, config1_descriptor+MOUSE_HID_DESC_OFFSET, 9},
|
||||
{0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)},
|
||||
#endif
|
||||
{0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9},
|
||||
{0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)},
|
||||
#ifdef USB_EXTRA_ENABLE
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
{0x2100, EXTRA_INTERFACE, config1_descriptor+EXTRA_HID_DESC_OFFSET, 9},
|
||||
{0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)},
|
||||
#endif
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
{0x2100, KBD2_INTERFACE, config1_descriptor+KBD2_HID_DESC_OFFSET, 9},
|
||||
{0x2200, KBD2_INTERFACE, keyboard2_hid_report_desc, sizeof(keyboard2_hid_report_desc)},
|
||||
#endif
|
||||
|
@ -653,7 +653,7 @@ ISR(USB_GEN_vect)
|
|||
}
|
||||
}
|
||||
/* TODO: should keep IDLE rate on each keyboard interface */
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
if (!keyboard_nkro && usb_keyboard_idle_config && (++div4 & 3) == 0) {
|
||||
#else
|
||||
if (usb_keyboard_idle_config && (++div4 & 3) == 0) {
|
||||
|
@ -894,7 +894,7 @@ ISR(USB_COM_vect)
|
|||
}
|
||||
}
|
||||
}
|
||||
#ifdef USB_MOUSE_ENABLE
|
||||
#ifdef MOUSE_ENABLE
|
||||
if (wIndex == MOUSE_INTERFACE) {
|
||||
if (bmRequestType == 0xA1) {
|
||||
if (bRequest == HID_GET_REPORT) {
|
||||
|
|
|
@ -120,7 +120,7 @@ void usb_remote_wakeup(void);
|
|||
#define KBD_REPORT_KEYS (KBD_SIZE - 2)
|
||||
|
||||
// secondary keyboard
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
#define KBD2_INTERFACE 4
|
||||
#define KBD2_ENDPOINT 5
|
||||
#define KBD2_SIZE 16
|
||||
|
|
|
@ -55,7 +55,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
|
|||
{
|
||||
int8_t result = 0;
|
||||
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
if (keyboard_nkro)
|
||||
result = send_report(report, KBD2_ENDPOINT, 0, KBD2_REPORT_KEYS);
|
||||
else
|
||||
|
@ -105,7 +105,7 @@ static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, ui
|
|||
UENUM = endpoint;
|
||||
}
|
||||
UEDATX = report->mods;
|
||||
#ifdef USB_NKRO_ENABLE
|
||||
#ifdef NKRO_ENABLE
|
||||
if (!keyboard_nkro)
|
||||
UEDATX = 0;
|
||||
#else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue