diff --git a/common/mousekey.h b/common/mousekey.h
index ac26a46c..d8d7beaa 100644
--- a/common/mousekey.h
+++ b/common/mousekey.h
@@ -45,7 +45,7 @@ along with this program. If not, see .
#define MOUSEKEY_TIME_TO_MAX 20
#endif
#ifndef MOUSEKEY_WHEEL_MAX_SPEED
-#define MOUSEKEY_WHEEL_MAX_SPEED 16
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
#endif
#ifndef MOUSEKEY_WHEEL_TIME_TO_MAX
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
diff --git a/protocol/serial.c b/protocol/serial_soft.c
similarity index 71%
rename from protocol/serial.c
rename to protocol/serial_soft.c
index b5c2ae31..b7d06b64 100644
--- a/protocol/serial.c
+++ b/protocol/serial_soft.c
@@ -38,12 +38,19 @@ POSSIBILITY OF SUCH DAMAGE.
#include
#include
#include
+#include
#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)
{
- SERIAL_RX_INIT();
+ SERIAL_RXD_INIT();
}
// RX ring buffer
@@ -64,12 +71,44 @@ uint8_t serial_recv(void)
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<>= 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;
if (next != rbuf_tail) {
- rbuf[rbuf_head] = SERIAL_RX_DATA;
+ rbuf[rbuf_head] = data;
rbuf_head = next;
}
+
+ SERIAL_RXD_INT_EXIT();
}
diff --git a/rules.mk b/rules.mk
index f53fe912..2e4fce51 100644
--- a/rules.mk
+++ b/rules.mk
@@ -252,7 +252,7 @@ EXTMEMOPTS =
# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
#
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += -Wl,--relax
+#LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--gc-sections
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))