
e5f9940 Merge commit '1bc3dd200b023cecf063a0cb3ba347f77f6d759d' into core_update da03c50 Add note for L/R side bit being ignored e80f3c1 Add in basic documentation for Macro system 35e8a76 core: Swap position of PEQL and PENT in unimap 00751f1 Merge pull request #406 from 39aldo39/patch-1 e50d7de V-USB remote wakeup 4340997 core: Fix typo in definition AC_g 958144d core: Debug print for system and consumer keys e7e1030 core: Fix sleep_led 0866323 core: Change matrix_init and matrix_print 0dbf73d core: Add matrix_clear() and default impl. 3202ca3 core: Add suspend mode options 4cda3aa core: Fix suspend/wake for converters #386 4e15247 core: LUFA_DEBUG_SUART for serial debug b9cf8e7 core: Fix mechanical locking supoort #390 12aa0fd Merge branch 'nemith-master' fccb3fa core: Fix OPT_DEFS for mbed build 2e2d2c8 Merge branch 'master' of github.com:leizzer/tmk_keyboard f1d3634 Change .gitignore for ChibiOS 3aab802 core: Fix build config in protocol.mk 5e43da0 core: Add short names in unimap 7a56998 core: Fix dfu wait in rules.mk 6d9c500 Merge branch 'mediakey-fix' 08382ac core: Fix 'make dfu' message 78cb04e Fix OS X Recognizing keyboard as Mouse/Tablet a114714 core: 'make dfu' waits for bootloader to start d0a8f13 core: Fix unimap UNIMAP_NO case e17abef core: Change lufa NKRO report size 16 to 32 bytes 375b20f core: Fix common.mk for build options 394fdff core: Fix unimap layout comment 912326c core: Add unimap support 00f4011 core: Fix doc/keymap.md for new keymap framework ddbd7b4 core: Add default implemenation of keymap read 671cacc core: action codes are action_t struct now b4fdb27 core: Change chibios repo directory names 7daed10 core: Fix keycode.txt 90399d7 core: Fix USB remote wakeup on ATmega32U2 #361 3677e84 usb_usb: Add multiple keyboard support 54d5b26 core: Fix Logical Maximum in report descriptor bd0d372 core: Fix LUFA report descriptor 95327b5 Merge pull request #355 from papodaca/XT 62bf548 core: change API of adb.c to accept device address 3097c9e Fix function name in host.h 836e209 Merge branch 'core_split_160522' 3918ea2 Merge commit '20b787fc1284176834cbe7ca2134e4b36bec5828' 7f87b11 core: Add comment of register 3 of ADB ef6478a core: Add adb_host_talk() 5c665b4 update macro names in bluefruit 4f2c5bf Merge commit '71381457fa1311dfa0b58ba882a96db740640871' 53a9c08 Merge pull request #321 from njbair/master f08a656 core: Fix media/consumer keys d526de8 Clean up wording in keymap example 0bb3dbb Clarify layer precedence d915c75 clarify layer documentation 72070d4 ps2_usb: Fix for VUSB configuration 170e2dc Mostly working. Is unstable, will emit bad codes after a while. c8e45b5 core: Actionmap support aabaa24 Codes appear to be detected correctly, the break codes are broken. git-subtree-dir: tmk_core git-subtree-split: e5f994033cbc8700745ac0c6d12772820492eed0
107 lines
2.5 KiB
C
107 lines
2.5 KiB
C
/* Name: main.c
|
|
* Project: hid-mouse, a very simple HID example
|
|
* Author: Christian Starkjohann
|
|
* Creation Date: 2008-04-07
|
|
* Tabsize: 4
|
|
* Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
|
|
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
|
* This Revision: $Id: main.c 790 2010-05-30 21:00:26Z cs $
|
|
*/
|
|
#include <stdint.h>
|
|
#include <avr/interrupt.h>
|
|
#include <avr/wdt.h>
|
|
#include <avr/sleep.h>
|
|
#include <util/delay.h>
|
|
#include "usbdrv.h"
|
|
#include "oddebug.h"
|
|
#include "vusb.h"
|
|
#include "keyboard.h"
|
|
#include "host.h"
|
|
#include "timer.h"
|
|
#include "uart.h"
|
|
#include "debug.h"
|
|
#include "suspend.h"
|
|
|
|
|
|
#define UART_BAUD_RATE 115200
|
|
|
|
|
|
/* This is from main.c of USBaspLoader */
|
|
static void initForUsbConnectivity(void)
|
|
{
|
|
uint8_t i = 0;
|
|
|
|
usbInit();
|
|
/* enforce USB re-enumerate: */
|
|
usbDeviceDisconnect(); /* do this while interrupts are disabled */
|
|
while(--i){ /* fake USB disconnect for > 250 ms */
|
|
wdt_reset();
|
|
_delay_ms(1);
|
|
}
|
|
usbDeviceConnect();
|
|
sei();
|
|
}
|
|
|
|
void usb_remote_wakeup(void) {
|
|
cli();
|
|
|
|
int8_t ddr_orig = USBDDR;
|
|
USBOUT |= (1 << USBMINUS);
|
|
USBDDR = ddr_orig | USBMASK;
|
|
USBOUT ^= USBMASK;
|
|
|
|
_delay_ms(25);
|
|
|
|
USBOUT ^= USBMASK;
|
|
USBDDR = ddr_orig;
|
|
USBOUT &= ~(1 << USBMINUS);
|
|
|
|
sei();
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
bool suspended = false;
|
|
#if USB_COUNT_SOF
|
|
uint16_t last_timer = timer_read();
|
|
#endif
|
|
|
|
CLKPR = 0x80, CLKPR = 0;
|
|
#ifndef NO_UART
|
|
uart_init(UART_BAUD_RATE);
|
|
#endif
|
|
|
|
keyboard_init();
|
|
host_set_driver(vusb_driver());
|
|
|
|
debug("initForUsbConnectivity()\n");
|
|
initForUsbConnectivity();
|
|
|
|
debug("main loop\n");
|
|
while (1) {
|
|
#if USB_COUNT_SOF
|
|
if (usbSofCount != 0) {
|
|
suspended = false;
|
|
usbSofCount = 0;
|
|
last_timer = timer_read();
|
|
} else {
|
|
// Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1)
|
|
if (timer_elapsed(last_timer) > 5) {
|
|
suspended = true;
|
|
}
|
|
}
|
|
#endif
|
|
if (!suspended) {
|
|
usbPoll();
|
|
|
|
// TODO: configuration process is incosistent. it sometime fails.
|
|
// To prevent failing to configure NOT scan keyboard during configuration
|
|
if (usbConfiguration && usbInterruptIsReady()) {
|
|
keyboard_task();
|
|
}
|
|
vusb_transfer_keyboard();
|
|
} else if (suspend_wakeup_condition()) {
|
|
usb_remote_wakeup();
|
|
}
|
|
}
|
|
}
|