Selaa lähdekoodia

Use software serial for Sun.

core
tmk 11 vuotta sitten
vanhempi
commit
6536dc9a14
3 muutettua tiedostoa jossa 45 lisäystä ja 6 poistoa
  1. 1
    1
      common/mousekey.h
  2. 43
    4
      protocol/serial_soft.c
  3. 1
    1
      rules.mk

+ 1
- 1
common/mousekey.h Näytä tiedosto

#define MOUSEKEY_TIME_TO_MAX 20 #define MOUSEKEY_TIME_TO_MAX 20
#endif #endif
#ifndef MOUSEKEY_WHEEL_MAX_SPEED #ifndef MOUSEKEY_WHEEL_MAX_SPEED
#define MOUSEKEY_WHEEL_MAX_SPEED 16
#define MOUSEKEY_WHEEL_MAX_SPEED 8
#endif #endif
#ifndef MOUSEKEY_WHEEL_TIME_TO_MAX #ifndef MOUSEKEY_WHEEL_TIME_TO_MAX
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40

protocol/serial.c → protocol/serial_soft.c Näytä tiedosto

#include <stdbool.h> #include <stdbool.h>
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <util/delay.h>
#include "serial.h" #include "serial.h"


/*
* Stupid Inefficient Busy-wait Software Serial
* is still useful for negative logic signal like Sun protocol not supported by hardware USART.
*/

#define WAIT_US (1000000/SERIAL_BAUD)


void serial_init(void) void serial_init(void)
{ {
SERIAL_RX_INIT();
SERIAL_RXD_INIT();
} }


// RX ring buffer // RX ring buffer
return data; return data;
} }


// USART RX complete interrupt
ISR(SERIAL_RX_VECT)
//ISR(INT2_vect)
ISR(SERIAL_RXD_VECT)
{ {
SERIAL_RXD_INT_ENTER()

uint8_t data = 0;
#ifdef SERIAL_BIT_ORDER_MSB
uint8_t pos = 0x80;
#else
uint8_t pos = 0x01;
#endif
// to center of start bit
_delay_us(WAIT_US/2);
do {
// to center of next bit
_delay_us(WAIT_US);

if (SERIAL_RXD_PIN&(1<<SERIAL_RXD_BIT)) {
data |= pos;
}
#ifdef SERIAL_BIT_ORDER_MSB
pos >>= 1;
#else
pos <<= 1;
#endif
} while (pos);
// to center of stop bit
_delay_us(WAIT_US);

#ifdef SERIAL_NEGATIVE_LOGIC
data = ~data;
#endif

uint8_t next = (rbuf_head + 1) % RBUF_SIZE; uint8_t next = (rbuf_head + 1) % RBUF_SIZE;
if (next != rbuf_tail) { if (next != rbuf_tail) {
rbuf[rbuf_head] = SERIAL_RX_DATA;
rbuf[rbuf_head] = data;
rbuf_head = next; rbuf_head = next;
} }

SERIAL_RXD_INT_EXIT();
} }

+ 1
- 1
rules.mk Näytä tiedosto

# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
# #
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += -Wl,--relax
#LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--gc-sections LDFLAGS += -Wl,--gc-sections
LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))