aboutsummaryrefslogtreecommitdiffstats
path: root/keyboard/hhkb/rn42/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/hhkb/rn42/main.c')
-rw-r--r--keyboard/hhkb/rn42/main.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/keyboard/hhkb/rn42/main.c b/keyboard/hhkb/rn42/main.c
new file mode 100644
index 000000000..83d995038
--- /dev/null
+++ b/keyboard/hhkb/rn42/main.c
@@ -0,0 +1,111 @@
+#include <avr/io.h>
+#include <avr/power.h>
+#include <avr/wdt.h>
+#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"
+
+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();
+
+ if (!rn42_rts()) {
+ host_set_driver(&rn42_driver);
+ } else {
+ host_set_driver(&lufa_driver);
+ }
+
+#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();
+ }
+}