integrate V-USB support into ps2_usb

This commit is contained in:
tmk 2011-02-21 15:43:17 +09:00
parent 47f5d8b545
commit fb8d23c60c
27 changed files with 176 additions and 1183 deletions

12
ps2.c
View file

@ -187,6 +187,9 @@ static inline void pbuf_enqueue(uint8_t data)
{
if (!data)
return;
uint8_t sreg = SREG;
cli();
uint8_t next = (pbuf_head + 1) % PBUF_SIZE;
if (next != pbuf_tail) {
pbuf[pbuf_head] = data;
@ -194,10 +197,12 @@ static inline void pbuf_enqueue(uint8_t data)
} else {
debug("pbuf: full\n");
}
SREG = sreg;
}
static inline uint8_t pbuf_dequeue(void)
{
uint8_t val = 0;
uint8_t sreg = SREG;
cli();
if (pbuf_head != pbuf_tail) {
@ -205,17 +210,20 @@ static inline uint8_t pbuf_dequeue(void)
pbuf_tail = (pbuf_tail + 1) % PBUF_SIZE;
}
SREG = sreg;
return val;
}
/* get data received by interrupt */
uint8_t ps2_host_recv(void)
{
// TODO: release clock line after 100us when inhibited by error
if (ps2_error) {
print("x");
phex(ps2_error);
ps2_host_send(0xFE); // request to resend
ps2_error = PS2_ERR_NONE;
}
idle();
return pbuf_dequeue();
}
@ -281,7 +289,7 @@ ISR(PS2_INT_VECT)
}
goto RETURN;
ERROR:
DEBUGP(0xFF);
DEBUGP(0x0F);
inhibit();
ps2_error = state;
DONE: