aboutsummaryrefslogtreecommitdiffstats
path: root/app/vuart.c
diff options
context:
space:
mode:
authorroot <root@ka-ata-killa.ourano.james.local>2021-03-03 15:24:13 +0000
committerroot <root@ka-ata-killa.ourano.james.local>2021-03-03 16:03:28 +0000
commit49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3 (patch)
treef65cb7440711ea1708c25fe78819e9986b2d8566 /app/vuart.c
parent129a103238d69bd90b4fe9a44bbed943b9488fc2 (diff)
downloadserial_over_dp-49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3.tar.gz
serial_over_dp-49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3.tar.bz2
serial_over_dp-49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3.zip
support cheap chinese blue pill boards, make usb dfu compatible with dfuse
Diffstat (limited to 'app/vuart.c')
-rw-r--r--app/vuart.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/app/vuart.c b/app/vuart.c
index 5aaf2d3..3c4ab79 100644
--- a/app/vuart.c
+++ b/app/vuart.c
@@ -82,25 +82,18 @@ static void vuart_xmit (uint8_t c)
led1 = 100;
ring_write_byte (&usart_tx_ring, c);
usart_kick();
-#ifdef USB
ring_write_byte (&cdcacm_tx_ring, c);
-#endif
}
static int vuart_recv_empty (void)
{
- if (!ring_empty (&usart_rx_ring)) {
+ if (!ring_empty (&usart_rx_ring))
return 0;
- }
-
-#ifdef USB
- if (!ring_empty (&cdcacm_rx_ring)) {
+ if (!ring_empty (&cdcacm_rx_ring))
return 0;
- }
-#endif
return 1;
}
@@ -114,25 +107,22 @@ static int vuart_recv (uint8_t *c)
return 0;
}
-#ifdef USB
-
if (!ring_read_byte (&cdcacm_rx_ring, c)) {
led2 = 100;
return 0;
}
-#endif
return -1;
}
static void update_lsr (void)
{
- if (vuart_recv_empty()) {
+ if (vuart_recv_empty())
lsr &= ~LSR_DA;
- } else {
+
+ else
lsr |= LSR_DA;
- }
}
uint8_t vuart_read (unsigned reg)
@@ -147,28 +137,33 @@ uint8_t vuart_read (unsigned reg)
vuart_recv (&val);
update_lsr();
return val;
- } else {
+ } else
return dllr;
- }
case IER:
//case DLLH:
return (lcr & LCR_DLAB) ? dlhr : ier;
+
case IIR:
return iir;
+
case LCR:
return lcr;
+
case MCR:
return mcr;
+
case LSR:
update_lsr();
val = lsr;
lsr &= 0xe1;
return val;
+
case MSR:
val = msr;
msr &= 0xf0;
return val;
+
case SR:
return sr;
}
@@ -183,29 +178,33 @@ void vuart_write (unsigned reg, uint8_t val)
case RXR:
//case DLLR:
- if (! (lcr & LCR_DLAB)) {
+ if (! (lcr & LCR_DLAB))
vuart_xmit (val);
- } else {
+
+ else
dllr = val;
- }
break;
+
case IER:
//case DLHR:
- if (! (lcr & LCR_DLAB)) {
+ if (! (lcr & LCR_DLAB))
ier = val & 0xf;
- } else {
+
+ else
dlhr = val;
- }
break;
+
case LCR:
lcr = val;
break;
+
case MCR:
mcr = val & 0x1f;
break;
+
case SR:
sr = val;
break;