From 5477bf39bfc01468ea8c09f025cf9c5ee3efd1b7 Mon Sep 17 00:00:00 2001 From: Enochen Date: Mon, 9 Jul 2018 21:12:59 -0400 Subject: add hhkb bluetooth functionality (rn42) (#2693) * add hhkb bluetooth functionality (rn42) pretty much straight from tmk some minor changes to make things work * hhkb jp personal keymap * Revert "hhkb jp personal keymap" This reverts commit 886713d8bb98572f03110f285706a8140a083892. --- keyboards/hhkb/rn42/main.c | 106 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 keyboards/hhkb/rn42/main.c (limited to 'keyboards/hhkb/rn42/main.c') diff --git a/keyboards/hhkb/rn42/main.c b/keyboards/hhkb/rn42/main.c new file mode 100644 index 000000000..8ec9220a2 --- /dev/null +++ b/keyboards/hhkb/rn42/main.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include "lufa.h" +#include "print.h" +#include "sendchar.h" +#include "rn42.h" +#include "rn42_task.h" +#include "serial.h" +#include "keyboard.h" +#include "keycode.h" +#include "action.h" +#include "action_util.h" +#include "wait.h" +#include "suart.h" +#include "suspend.h" +#include "matrix.h" + +static int8_t sendchar_func(uint8_t c) +{ + xmit(c); // SUART + sendchar(c); // LUFA + return 0; +} + +static void SetupHardware(void) +{ + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + /* Disable clock division */ + clock_prescale_set(clock_div_1); + + // Leonardo needs. Without this USB device is not recognized. + USB_Disable(); + + USB_Init(); + + // for Console_Task + USB_Device_EnableSOFEvents(); + print_set_sendchar(sendchar_func); + + // SUART PD0:output, PD1:input + DDRD |= (1<<0); + PORTD |= (1<<0); + DDRD &= ~(1<<1); + PORTD |= (1<<1); +} + +int main(void) __attribute__ ((weak)); +int main(void) +{ + SetupHardware(); + sei(); + + /* wait for USB startup to get ready for debug output */ + uint8_t timeout = 255; // timeout when USB is not available(Bluetooth) + while (timeout-- && USB_DeviceState != DEVICE_STATE_Configured) { + wait_ms(4); +#if defined(INTERRUPT_CONTROL_ENDPOINT) + ; +#else + USB_USBTask(); +#endif + } + print("\nUSB init\n"); + + rn42_init(); + rn42_task_init(); + print("RN-42 init\n"); + + /* init modules */ + keyboard_init(); + +#ifdef SLEEP_LED_ENABLE + sleep_led_init(); +#endif + + print("Keyboard start\n"); + while (1) { + while (rn42_rts() && // RN42 is off + USB_DeviceState == DEVICE_STATE_Suspended) { + print("[s]"); + matrix_power_down(); + suspend_power_down(); + suspend_power_down(); + suspend_power_down(); + suspend_power_down(); + suspend_power_down(); + suspend_power_down(); + suspend_power_down(); + if (USB_Device_RemoteWakeupEnabled && suspend_wakeup_condition()) { + USB_Device_SendRemoteWakeup(); + } + } + + keyboard_task(); + +#if !defined(INTERRUPT_CONTROL_ENDPOINT) + USB_USBTask(); +#endif + + rn42_task(); + } +} \ No newline at end of file -- cgit v1.2.3