1
0
Fork 0

clang-format changes

This commit is contained in:
skullY 2019-08-30 11:19:03 -07:00 committed by skullydazed
parent 61af76a10d
commit b624f32f94
502 changed files with 32259 additions and 39062 deletions

View file

@ -1,17 +1,17 @@
/* 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
@ -37,12 +37,9 @@
#include "host.h"
#include "pjrc.h"
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
int main(void)
{
int main(void) {
// set for 16 MHz clock
CPU_PRESCALE(0);
@ -52,7 +49,8 @@ int main(void)
// If the Teensy is powered without a PC connected to the USB port,
// this will wait forever.
usb_init();
while (!usb_configured()) /* wait */ ;
while (!usb_configured()) /* wait */
;
print_set_sendchar(sendchar);
@ -69,6 +67,6 @@ int main(void)
}
}
keyboard_task();
keyboard_task();
}
}

View file

@ -22,54 +22,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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 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
};
static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
host_driver_t *pjrc_driver(void)
{
return &driver;
}
host_driver_t *pjrc_driver(void) { return &driver; }
static uint8_t keyboard_leds(void) {
return usb_keyboard_leds;
}
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_keyboard(report_keyboard_t *report) { usb_keyboard_send_report(report); }
static void send_mouse(report_mouse_t *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)
{
static void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
usb_extra_system_send(data);
#endif
}
static void send_consumer(uint16_t data)
{
static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
usb_extra_consumer_send(data);
#endif

View file

@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "host_driver.h"
host_driver_t *pjrc_driver(void);
#endif

File diff suppressed because it is too large Load diff

View file

@ -22,116 +22,110 @@
*/
#ifndef USB_H
#define USB_H 1
#define USB_H 1
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
extern bool remote_wakeup;
extern bool suspend;
void usb_init(void); // initialize everything
uint8_t usb_configured(void); // is the USB port configured
void usb_remote_wakeup(void);
void usb_init(void); // initialize everything
uint8_t usb_configured(void); // is the USB port configured
void usb_remote_wakeup(void);
#define EP_TYPE_CONTROL 0x00
#define EP_TYPE_BULK_IN 0x81
#define EP_TYPE_BULK_OUT 0x80
#define EP_TYPE_INTERRUPT_IN 0xC1
#define EP_TYPE_INTERRUPT_OUT 0xC0
#define EP_TYPE_ISOCHRONOUS_IN 0x41
#define EP_TYPE_ISOCHRONOUS_OUT 0x40
#define EP_TYPE_CONTROL 0x00
#define EP_TYPE_BULK_IN 0x81
#define EP_TYPE_BULK_OUT 0x80
#define EP_TYPE_INTERRUPT_IN 0xC1
#define EP_TYPE_INTERRUPT_OUT 0xC0
#define EP_TYPE_ISOCHRONOUS_IN 0x41
#define EP_TYPE_ISOCHRONOUS_OUT 0x40
#define EP_SINGLE_BUFFER 0x02
#define EP_DOUBLE_BUFFER 0x06
#define EP_SINGLE_BUFFER 0x02
#define EP_DOUBLE_BUFFER 0x06
#define EP_SIZE(s) ((s) == 64 ? 0x30 : ((s) == 32 ? 0x20 : ((s) == 16 ? 0x10 : 0x00)))
#define EP_SIZE(s) ((s) == 64 ? 0x30 : \
((s) == 32 ? 0x20 : \
((s) == 16 ? 0x10 : \
0x00)))
#if defined (__AVR_AT90USB162__) || defined (__AVR_AT90USB82__)
# define MAX_ENDPOINT 4
# define UERST_MASK 0x1E
#if defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__)
# define MAX_ENDPOINT 4
# define UERST_MASK 0x1E
#else
# define MAX_ENDPOINT 6
# define UERST_MASK 0x7E
# define MAX_ENDPOINT 6
# define UERST_MASK 0x7E
#endif
#define LSB(n) (n & 255)
#define MSB(n) ((n >> 8) & 255)
#if defined(__AVR_AT90USB162__)
#define HW_CONFIG()
#define PLL_CONFIG() (PLLCSR = ((1<<PLLE)|(1<<PLLP0)))
#define USB_CONFIG() (USBCON = (1<<USBE))
#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# define HW_CONFIG()
# define PLL_CONFIG() (PLLCSR = ((1 << PLLE) | (1 << PLLP0)))
# define USB_CONFIG() (USBCON = (1 << USBE))
# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK)))
#elif defined(__AVR_ATmega32U4__)
#define HW_CONFIG() (UHWCON = 0x01)
#define PLL_CONFIG() (PLLCSR = 0x12)
#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# define HW_CONFIG() (UHWCON = 0x01)
# define PLL_CONFIG() (PLLCSR = 0x12)
# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE)))
# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK)))
#elif defined(__AVR_AT90USB646__)
#define HW_CONFIG() (UHWCON = 0x81)
#define PLL_CONFIG() (PLLCSR = 0x1A)
#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# define HW_CONFIG() (UHWCON = 0x81)
# define PLL_CONFIG() (PLLCSR = 0x1A)
# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE)))
# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK)))
#elif defined(__AVR_AT90USB1286__)
#define HW_CONFIG() (UHWCON = 0x81)
#define PLL_CONFIG() (PLLCSR = 0x16)
#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# define HW_CONFIG() (UHWCON = 0x81)
# define PLL_CONFIG() (PLLCSR = 0x16)
# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE)))
# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK)))
#endif
// standard control endpoint request types
#define GET_STATUS 0
#define CLEAR_FEATURE 1
#define SET_FEATURE 3
#define SET_ADDRESS 5
#define GET_DESCRIPTOR 6
#define GET_CONFIGURATION 8
#define SET_CONFIGURATION 9
#define GET_INTERFACE 10
#define SET_INTERFACE 11
#define GET_STATUS 0
#define CLEAR_FEATURE 1
#define SET_FEATURE 3
#define SET_ADDRESS 5
#define GET_DESCRIPTOR 6
#define GET_CONFIGURATION 8
#define SET_CONFIGURATION 9
#define GET_INTERFACE 10
#define SET_INTERFACE 11
// HID (human interface device)
#define HID_GET_REPORT 1
#define HID_GET_IDLE 2
#define HID_GET_PROTOCOL 3
#define HID_SET_REPORT 9
#define HID_SET_IDLE 10
#define HID_SET_PROTOCOL 11
#define HID_REPORT_INPUT 1
#define HID_REPORT_OUTPUT 2
#define HID_REPORT_FEATURE 3
#define HID_GET_REPORT 1
#define HID_GET_IDLE 2
#define HID_GET_PROTOCOL 3
#define HID_SET_REPORT 9
#define HID_SET_IDLE 10
#define HID_SET_PROTOCOL 11
#define HID_REPORT_INPUT 1
#define HID_REPORT_OUTPUT 2
#define HID_REPORT_FEATURE 3
// CDC (communication class device)
#define CDC_SET_LINE_CODING 0x20
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
#define CDC_SET_LINE_CODING 0x20
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
// HID feature selectors
#define DEVICE_REMOTE_WAKEUP 1
#define ENDPOINT_HALT 0
#define TEST_MODE 2
#define DEVICE_REMOTE_WAKEUP 1
#define ENDPOINT_HALT 0
#define TEST_MODE 2
/*------------------------------------------------------------------*
* Keyboard descriptor setting
*------------------------------------------------------------------*/
#define KBD_INTERFACE 0
#define KBD_ENDPOINT 1
#define KBD_SIZE 8
#define KBD_BUFFER EP_SINGLE_BUFFER
#define KBD_REPORT_KEYS (KBD_SIZE - 2)
#define KBD_INTERFACE 0
#define KBD_ENDPOINT 1
#define KBD_SIZE 8
#define KBD_BUFFER EP_SINGLE_BUFFER
#define KBD_REPORT_KEYS (KBD_SIZE - 2)
// secondary keyboard
#ifdef NKRO_ENABLE
#define KBD2_INTERFACE 4
#define KBD2_ENDPOINT 5
#define KBD2_SIZE 16
#define KBD2_BUFFER EP_DOUBLE_BUFFER
#define KBD2_REPORT_KEYS (KBD2_SIZE - 1)
# define KBD2_INTERFACE 4
# define KBD2_ENDPOINT 5
# define KBD2_SIZE 16
# define KBD2_BUFFER EP_DOUBLE_BUFFER
# define KBD2_REPORT_KEYS (KBD2_SIZE - 1)
#endif
#endif

View file

@ -25,78 +25,74 @@
#include "sendchar.h"
#include "usb_debug.h"
// the time remaining before we transmit any partially full
// packet, or send a zero length packet.
volatile uint8_t debug_flush_timer=0;
volatile uint8_t debug_flush_timer = 0;
int8_t sendchar(uint8_t c) {
static uint8_t previous_timeout = 0;
uint8_t timeout, intr_state;
int8_t sendchar(uint8_t c)
{
static uint8_t previous_timeout=0;
uint8_t timeout, intr_state;
// if we're not online (enumerated and configured), error
if (!usb_configured()) return -1;
// interrupts are disabled so these functions can be
// used from the main program or interrupt context,
// even both in the same program!
intr_state = SREG;
cli();
UENUM = DEBUG_TX_ENDPOINT;
// if we gave up due to timeout before, don't wait again
if (previous_timeout) {
if (!(UEINTX & (1<<RWAL))) {
SREG = intr_state;
return -1;
}
previous_timeout = 0;
}
// wait for the FIFO to be ready to accept data
timeout = UDFNUML + 4;
while (1) {
// are we ready to transmit?
if (UEINTX & (1<<RWAL)) break;
SREG = intr_state;
// have we waited too long?
if (UDFNUML == timeout) {
previous_timeout = 1;
return -1;
}
// has the USB gone offline?
if (!usb_configured()) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = DEBUG_TX_ENDPOINT;
}
// actually write the byte into the FIFO
UEDATX = c;
// if this completed a packet, transmit it now!
if (!(UEINTX & (1<<RWAL))) {
UEINTX = 0x3A;
debug_flush_timer = 0;
} else {
debug_flush_timer = 2;
}
SREG = intr_state;
return 0;
// if we're not online (enumerated and configured), error
if (!usb_configured()) return -1;
// interrupts are disabled so these functions can be
// used from the main program or interrupt context,
// even both in the same program!
intr_state = SREG;
cli();
UENUM = DEBUG_TX_ENDPOINT;
// if we gave up due to timeout before, don't wait again
if (previous_timeout) {
if (!(UEINTX & (1 << RWAL))) {
SREG = intr_state;
return -1;
}
previous_timeout = 0;
}
// wait for the FIFO to be ready to accept data
timeout = UDFNUML + 4;
while (1) {
// are we ready to transmit?
if (UEINTX & (1 << RWAL)) break;
SREG = intr_state;
// have we waited too long?
if (UDFNUML == timeout) {
previous_timeout = 1;
return -1;
}
// has the USB gone offline?
if (!usb_configured()) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = DEBUG_TX_ENDPOINT;
}
// actually write the byte into the FIFO
UEDATX = c;
// if this completed a packet, transmit it now!
if (!(UEINTX & (1 << RWAL))) {
UEINTX = 0x3A;
debug_flush_timer = 0;
} else {
debug_flush_timer = 2;
}
SREG = intr_state;
return 0;
}
// immediately transmit any buffered output.
void usb_debug_flush_output(void)
{
uint8_t intr_state;
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;
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;
}

View file

@ -22,21 +22,18 @@
*/
#ifndef USB_DEBUG_H
#define USB_DEBUG_H 1
#define USB_DEBUG_H 1
#include <stdint.h>
#include "usb.h"
#define DEBUG_INTERFACE 2
#define DEBUG_TX_ENDPOINT 3
#define DEBUG_TX_SIZE 32
#define DEBUG_TX_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
extern volatile uint8_t debug_flush_timer;
void usb_debug_flush_output(void); // immediately transmit any buffered output
void usb_debug_flush_output(void); // immediately transmit any buffered output
#endif

View file

@ -26,45 +26,37 @@
#include "host.h"
#include "usb_extra.h"
int8_t usb_extra_send(uint8_t report_id, uint16_t data) {
uint8_t intr_state, timeout;
int8_t usb_extra_send(uint8_t report_id, uint16_t data)
{
uint8_t intr_state, timeout;
if (!usb_configured()) return -1;
intr_state = SREG;
cli();
UENUM = EXTRA_ENDPOINT;
timeout = UDFNUML + 50;
while (1) {
// are we ready to transmit?
if (UEINTX & (1 << RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = EXTRA_ENDPOINT;
}
if (!usb_configured()) return -1;
intr_state = SREG;
cli();
UENUM = EXTRA_ENDPOINT;
timeout = UDFNUML + 50;
while (1) {
// are we ready to transmit?
if (UEINTX & (1<<RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = EXTRA_ENDPOINT;
}
UEDATX = report_id;
UEDATX = data & 0xFF;
UEDATX = (data >> 8) & 0xFF;
UEDATX = report_id;
UEDATX = data&0xFF;
UEDATX = (data>>8)&0xFF;
UEINTX = 0x3A;
SREG = intr_state;
return 0;
UEINTX = 0x3A;
SREG = intr_state;
return 0;
}
int8_t usb_extra_consumer_send(uint16_t bits)
{
return usb_extra_send(REPORT_ID_CONSUMER, bits);
}
int8_t usb_extra_consumer_send(uint16_t bits) { return usb_extra_send(REPORT_ID_CONSUMER, bits); }
int8_t usb_extra_system_send(uint16_t bits)
{
return usb_extra_send(REPORT_ID_SYSTEM, bits);
}
int8_t usb_extra_system_send(uint16_t bits) { return usb_extra_send(REPORT_ID_SYSTEM, bits); }

View file

@ -22,7 +22,7 @@
*/
#ifndef USB_EXTRA_H
#define USB_EXTRA_H 1
#define USB_EXTRA_H 1
/*
* Enhanced keyboard features for Windows:
* Audio control and System control
@ -33,12 +33,10 @@
#include <stdint.h>
#include "usb.h"
#define EXTRA_INTERFACE 3
#define EXTRA_ENDPOINT 4
#define EXTRA_SIZE 8
#define EXTRA_BUFFER EP_DOUBLE_BUFFER
#define EXTRA_INTERFACE 3
#define EXTRA_ENDPOINT 4
#define EXTRA_SIZE 8
#define EXTRA_BUFFER EP_DOUBLE_BUFFER
int8_t usb_extra_consumer_send(uint16_t bits);
int8_t usb_extra_system_send(uint16_t bits);

View file

@ -31,34 +31,30 @@
#include "host.h"
#ifdef NKRO_ENABLE
#include "keycode_config.h"
# include "keycode_config.h"
extern keymap_config_t keymap_config;
extern keymap_config_t keymap_config;
#endif
// protocol setting from the host. We use exactly the same report
// either way, so this variable only stores the setting since we
// are required to be able to report which setting is in use.
uint8_t keyboard_protocol=1;
uint8_t keyboard_protocol = 1;
// the idle configuration, how often we send the report to the
// host (ms * 4) even when it hasn't changed
// Windows and Linux set 0 while OS X sets 6(24ms) by SET_IDLE request.
uint8_t keyboard_idle=125;
uint8_t keyboard_idle = 125;
// count until idle timeout
uint8_t usb_keyboard_idle_count=0;
uint8_t usb_keyboard_idle_count = 0;
// 1=num lock, 2=caps lock, 4=scroll lock, 8=compose, 16=kana
volatile uint8_t usb_keyboard_leds=0;
volatile uint8_t usb_keyboard_leds = 0;
static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end);
int8_t usb_keyboard_send_report(report_keyboard_t *report)
{
int8_t usb_keyboard_send_report(report_keyboard_t *report) {
int8_t result = 0;
#ifdef NKRO_ENABLE
@ -76,41 +72,43 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
return 0;
}
void usb_keyboard_print_report(report_keyboard_t *report)
{
void usb_keyboard_print_report(report_keyboard_t *report) {
if (!debug_keyboard) return;
print("keys: ");
for (int i = 0; i < KEYBOARD_REPORT_KEYS; i++) { phex(report->keys[i]); print(" "); }
print(" mods: "); phex(report->mods); print("\n");
for (int i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
phex(report->keys[i]);
print(" ");
}
print(" mods: ");
phex(report->mods);
print("\n");
}
static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end)
{
static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end) {
uint8_t intr_state, timeout;
if (!usb_configured()) return -1;
intr_state = SREG;
cli();
UENUM = endpoint;
UENUM = endpoint;
timeout = UDFNUML + 50;
while (1) {
// are we ready to transmit?
if (UEINTX & (1<<RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = endpoint;
// are we ready to transmit?
if (UEINTX & (1 << RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = endpoint;
}
for (uint8_t i = keys_start; i < keys_end; i++) {
UEDATX = report->raw[i];
UEDATX = report->raw[i];
}
UEINTX = 0x3A;
SREG = intr_state;
SREG = intr_state;
return 0;
}

View file

@ -22,19 +22,17 @@
*/
#ifndef USB_KEYBOARD_H
#define USB_KEYBOARD_H 1
#define USB_KEYBOARD_H 1
#include <stdint.h>
#include <stdbool.h>
#include "usb.h"
#include "host.h"
extern uint8_t usb_keyboard_idle_count;
extern uint8_t usb_keyboard_idle_count;
extern volatile uint8_t usb_keyboard_leds;
int8_t usb_keyboard_send_report(report_keyboard_t *report);
void usb_keyboard_print_report(report_keyboard_t *report);
void usb_keyboard_print_report(report_keyboard_t *report);
#endif

View file

@ -27,55 +27,57 @@
#include "print.h"
#include "debug.h"
uint8_t usb_mouse_protocol = 1;
uint8_t usb_mouse_protocol=1;
int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) {
uint8_t intr_state, timeout;
if (!usb_configured()) return -1;
if (x == -128) x = -127;
if (y == -128) y = -127;
if (wheel_v == -128) wheel_v = -127;
if (wheel_h == -128) wheel_h = -127;
intr_state = SREG;
cli();
UENUM = MOUSE_ENDPOINT;
timeout = UDFNUML + 50;
while (1) {
// are we ready to transmit?
if (UEINTX & (1 << RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = MOUSE_ENDPOINT;
}
UEDATX = buttons;
UEDATX = x;
UEDATX = y;
if (usb_mouse_protocol) {
UEDATX = wheel_v;
UEDATX = wheel_h;
}
int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons)
{
uint8_t intr_state, timeout;
if (!usb_configured()) return -1;
if (x == -128) x = -127;
if (y == -128) y = -127;
if (wheel_v == -128) wheel_v = -127;
if (wheel_h == -128) wheel_h = -127;
intr_state = SREG;
cli();
UENUM = MOUSE_ENDPOINT;
timeout = UDFNUML + 50;
while (1) {
// are we ready to transmit?
if (UEINTX & (1<<RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if (!usb_configured()) return -1;
// have we waited too long?
if (UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = MOUSE_ENDPOINT;
}
UEDATX = buttons;
UEDATX = x;
UEDATX = y;
if (usb_mouse_protocol) {
UEDATX = wheel_v;
UEDATX = wheel_h;
}
UEINTX = 0x3A;
SREG = intr_state;
return 0;
UEINTX = 0x3A;
SREG = intr_state;
return 0;
}
void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) {
if (!debug_mouse) return;
print("usb_mouse[btn|x y v h]: ");
phex(buttons); print("|");
phex(x); print(" ");
phex(y); print(" ");
phex(wheel_v); print(" ");
phex(wheel_h); print("\n");
phex(buttons);
print("|");
phex(x);
print(" ");
phex(y);
print(" ");
phex(wheel_v);
print(" ");
phex(wheel_h);
print("\n");
}

View file

@ -22,29 +22,26 @@
*/
#ifndef USB_MOUSE_H
#define USB_MOUSE_H 1
#define USB_MOUSE_H 1
#include <stdint.h>
#include <stdbool.h>
#include "usb.h"
#define MOUSE_INTERFACE 1
#define MOUSE_ENDPOINT 2
#define MOUSE_SIZE 8
#define MOUSE_BUFFER EP_SINGLE_BUFFER
#define MOUSE_INTERFACE 1
#define MOUSE_ENDPOINT 2
#define MOUSE_SIZE 8
#define MOUSE_BUFFER EP_SINGLE_BUFFER
#define MOUSE_BTN1 (1<<0)
#define MOUSE_BTN2 (1<<1)
#define MOUSE_BTN3 (1<<2)
#define MOUSE_BTN4 (1<<3)
#define MOUSE_BTN5 (1<<4)
#define MOUSE_BTN1 (1 << 0)
#define MOUSE_BTN2 (1 << 1)
#define MOUSE_BTN3 (1 << 2)
#define MOUSE_BTN4 (1 << 3)
#define MOUSE_BTN5 (1 << 4)
extern uint8_t usb_mouse_protocol;
int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons);
void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons);
void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons);
#endif