update teensy3 lib to latest, use new vector change mechanism
[megadrive.git] / teensy3 / usb_seremu.h
index f3679c5..abc28c6 100644 (file)
  * permit persons to whom the Software is furnished to do so, subject to
  * the following conditions:
  *
- * 1. The above copyright notice and this permission notice shall be 
+ * 1. The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
- * 2. If the Software is incorporated into a build system that allows 
+ * 2. If the Software is incorporated into a build system that allows
  * selection among a list of target devices, then similar target
  * devices manufactured by PJRC.COM must be included in the list of
  * target devices and selectable in the same manner.
@@ -35,6 +35,8 @@
 
 #include <inttypes.h>
 
+#if F_CPU >= 20000000
+
 // C language implementation
 #ifdef __cplusplus
 extern "C" {
@@ -45,6 +47,7 @@ int usb_seremu_available(void);
 void usb_seremu_flush_input(void);
 int usb_seremu_putchar(uint8_t c);
 int usb_seremu_write(const void *buffer, uint32_t size);
+int usb_seremu_write_buffer_free(void);
 void usb_seremu_flush_output(void);
 void usb_seremu_flush_callback(void);
 extern volatile uint8_t usb_seremu_transmit_flush_timer;
@@ -53,7 +56,6 @@ extern volatile uint8_t usb_configuration;
 }
 #endif
 
-
 // C++ interface
 #ifdef __cplusplus
 #include "Stream.h"
@@ -72,6 +74,7 @@ public:
         size_t write(long n) { return write((uint8_t)n); }
         size_t write(unsigned int n) { return write((uint8_t)n); }
         size_t write(int n) { return write((uint8_t)n); }
+       int availableForWrite() { return usb_seremu_write_buffer_free(); }
        using Print::write;
         void send_now(void) { usb_seremu_flush_output(); };
         uint32_t baud(void) { return 9600; }
@@ -82,10 +85,51 @@ public:
         uint8_t rts(void) { return 1; }
         operator bool() { return usb_configuration; }
 };
-
 extern usb_seremu_class Serial;
+extern void serialEvent(void);
+#endif // __cplusplus
+
 
+
+#else  // F_CPU < 20 MHz
+
+// Allow Arduino programs using Serial to compile, but Serial will do nothing.
+#ifdef __cplusplus
+#include "Stream.h"
+class usb_seremu_class : public Stream
+{
+public:
+       void begin(long) { };
+       void end() { };
+       virtual int available() { return 0; }
+       virtual int read() { return -1; }
+       virtual int peek() { return -1; }
+       virtual void flush() { }
+       virtual size_t write(uint8_t c) { return 1; }
+       virtual size_t write(const uint8_t *buffer, size_t size) { return size; }
+       size_t write(unsigned long n) { return 1; }
+       size_t write(long n) { return 1; }
+       size_t write(unsigned int n) { return 1; }
+       size_t write(int n) { return 1; }
+       int availableForWrite() { return 0; }
+       using Print::write;
+       void send_now(void) { }
+       uint32_t baud(void) { return 0; }
+       uint8_t stopbits(void) { return 1; }
+       uint8_t paritytype(void) { return 0; }
+       uint8_t numbits(void) { return 8; }
+       uint8_t dtr(void) { return 1; }
+       uint8_t rts(void) { return 1; }
+       operator bool() { return true; }
+};
+
+extern usb_seremu_class Serial;
+extern void serialEvent(void);
 #endif // __cplusplus
 
+
+#endif // F_CPU >= 20 MHz
+
 #endif // USB_HID
+
 #endif // USBseremu_h_