--- a/cdcacm.c Wed Mar 25 08:34:17 2015 +0000
+++ b/cdcacm.c Thu Mar 26 15:13:26 2015 +0000
@@ -39,8 +39,6 @@
#include "mork.h"
-static uint8_t *_inbuf = NULL, *_inlen; /* Input buffer */
-
static usbd_device *_usbd_dev = NULL;
static const struct usb_device_descriptor dev = {
@@ -224,20 +222,14 @@
return 0;
}
-static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
-{
- (void)ep;
- (void)usbd_dev;
-
- *_inlen = (uint8_t)usbd_ep_read_packet(usbd_dev, 0x01, (char *)_inbuf, 64);
-}
+static void cdcacm_gets(usbd_device *, uint8_t);
static void cdcacm_set_config(usbd_device *usbd_dev, uint16_t wValue)
{
(void)wValue;
(void)usbd_dev;
- usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, 64, cdcacm_data_rx_cb);
+ usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, 64, cdcacm_gets);
usbd_ep_setup(usbd_dev, 0x82, USB_ENDPOINT_ATTR_BULK, 64, NULL);
usbd_ep_setup(usbd_dev, 0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL);
@@ -247,10 +239,30 @@
cdcacm_control_request);
}
-void cdcacm_init(uint8_t *inbuf, uint8_t *inlen)
+/******************************************************************************
+ * Virtual COM Port
+ */
+
+/*
+ * Input buffer
+ */
+
+uint8_t inbuf[PKTLEN];
+uint8_t inptr, inlen;
+
+/*
+ * Output buffer
+ */
+
+uint8_t outbuf[PKTLEN];
+uint8_t outlen;
+
+void
+cdcacm_init(void)
{
- _inbuf = inbuf;
- _inlen = inlen;
+ inptr = 0;
+ inlen = 0;
+ outlen = 0;
_usbd_dev = usbd_init(&usb_driver, &dev, &config, usb_strings, 3,
usbd_control_buffer, sizeof(usbd_control_buffer));
@@ -258,12 +270,22 @@
usbd_register_set_config_callback(_usbd_dev, cdcacm_set_config);
}
-void cdcacm_poll(void)
+static void
+cdcacm_gets(usbd_device *usbd_dev, uint8_t ep)
+{
+ (void)ep;
+
+ inlen = (uint8_t)usbd_ep_read_packet(usbd_dev, 0x01, (char *)inbuf, 64);
+}
+
+void
+cdcacm_poll(void)
{
usbd_poll(_usbd_dev);
}
-uint16_t cdcacm_puts(uint8_t *buf, uint8_t len)
+uint16_t
+cdcacm_puts(void)
{
- return (usbd_ep_write_packet(_usbd_dev, 0x82, (char *)buf, (int)len));
+ return (usbd_ep_write_packet(_usbd_dev, 0x82, (char *)outbuf, (int)outlen));
}
--- a/cdcacm.h Wed Mar 25 08:34:17 2015 +0000
+++ b/cdcacm.h Thu Mar 26 15:13:26 2015 +0000
@@ -20,8 +20,11 @@
#ifndef _CDCACM_H
#define _CDCACM_H
-void cdcacm_init(uint8_t *, uint8_t *);
+/* Packets are always short */
+#define PKTLEN (60) /* 64 - 4 */
+
+void cdcacm_init(void);
void cdcacm_poll(void);
-uint16_t cdcacm_puts(uint8_t *, uint8_t);
+uint16_t cdcacm_puts(void);
#endif
--- a/uart.c Wed Mar 25 08:34:17 2015 +0000
+++ b/uart.c Thu Mar 26 15:13:26 2015 +0000
@@ -19,27 +19,18 @@
#include "mork.h"
-/*
- * Input buffer
- */
+/* VCP Input buffer */
+extern uint8_t inbuf[PKTLEN];
+extern uint8_t inptr, inlen;
-static uint8_t inbuf[PKTLEN];
-static uint8_t inptr, inlen;
-
-/*
- * Output buffer
- */
-
-static uint8_t outbuf[PKTLEN];
-static uint8_t outlen;
+/* VCP Output buffer */
+extern uint8_t outbuf[PKTLEN];
+extern uint8_t outlen;
void
uart_init(void)
{
- inptr = 0;
- inlen = 0;
- outlen = 0;
- cdcacm_init(inbuf, &inlen);
+ cdcacm_init();
}
void
@@ -93,7 +84,7 @@
uart_flush(void)
{
if (outlen) {
- while (cdcacm_puts(outbuf, outlen) != outlen)
+ while (cdcacm_puts() != outlen)
;
outlen = 0;
}
@@ -106,6 +97,7 @@
uart_putchar(char c)
{
outbuf[outlen++] = c;
+
if (outlen == PKTLEN)
uart_flush();
--- a/uart.h Wed Mar 25 08:34:17 2015 +0000
+++ b/uart.h Thu Mar 26 15:13:26 2015 +0000
@@ -17,11 +17,8 @@
* with Mork Microchip PIC ICSP. If not, see http://www.gnu.org/licenses/
*/
-#ifndef _UART_H
-#define _UART_H
-
-/* Packets are always short */
-#define PKTLEN (60) /* 64 - 4 */
+#ifndef __UART_H
+#define __UART_H
void uart_init(void);
void uart_shutdown(void);