A copy of the mbed USBDevice with USBSerial library

Dependents:   STM32L0_LoRa Smartage STM32L0_LoRa Turtle_RadioShuttle

Committer:
Helmut Tschemernjak
Date:
Sun Feb 24 14:52:33 2019 +0100
Revision:
8:961423d1da74
Parent:
6:1f27c2a2b4de
Added sleep manager support to avoids sleeps while a USB CDC
connection is active

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut Tschemernjak 3:bddd92cd3a17 1 /*
Helmut Tschemernjak 3:bddd92cd3a17 2 * $Id: bulkserial.h,v 1.3 2018/02/23 15:04:29 grimrath Exp $
Helmut Tschemernjak 3:bddd92cd3a17 3 * This is an unpublished work copyright (c) 2018 HELIOS Software GmbH
Helmut Tschemernjak 3:bddd92cd3a17 4 * 30827 Garbsen, Germany
Helmut Tschemernjak 3:bddd92cd3a17 5 */
Helmut Tschemernjak 3:bddd92cd3a17 6 #ifndef __USBSERIALBUFFERED_H__
Helmut Tschemernjak 3:bddd92cd3a17 7 #define __USBSERIALBUFFERED_H__
Helmut Tschemernjak 3:bddd92cd3a17 8
Helmut Tschemernjak 3:bddd92cd3a17 9 #include "USBSerial.h"
Helmut Tschemernjak 3:bddd92cd3a17 10
Helmut Tschemernjak 3:bddd92cd3a17 11 /** This class is a wrapper around @ref USBSerial such that sending
Helmut Tschemernjak 3:bddd92cd3a17 12 * of serial data over USB is supported in (and outside) of interrupt context.
Helmut Tschemernjak 3:bddd92cd3a17 13 * In addition it buffers characters (similiar to the I/O buffering of stdio)
Helmut Tschemernjak 3:bddd92cd3a17 14 * before starting a USB data transmit. Silently discards data if the
Helmut Tschemernjak 3:bddd92cd3a17 15 * @ref USBSerial object is not connected to the USB host.
Helmut Tschemernjak 3:bddd92cd3a17 16 */
Helmut Tschemernjak 3:bddd92cd3a17 17 class USBSerialBuffered : public USBSerial {
Helmut Tschemernjak 3:bddd92cd3a17 18 public:
Helmut Tschemernjak 6:1f27c2a2b4de 19 USBSerialBuffered(int MaxBuffSize = 128, uint16_t vendor_id = 0x16c0, uint16_t product_id = 0x05e1, uint16_t product_release = 0x0001, bool connect_blocking = false);
Helmut Tschemernjak 3:bddd92cd3a17 20 ~USBSerialBuffered();
Helmut Tschemernjak 3:bddd92cd3a17 21
Helmut Tschemernjak 3:bddd92cd3a17 22 /** sends internally queued but not yet sent data. Is blocking. Must not
Helmut Tschemernjak 3:bddd92cd3a17 23 * be called from interrupt context. */
Helmut Tschemernjak 3:bddd92cd3a17 24 void flush();
Helmut Tschemernjak 3:bddd92cd3a17 25
Helmut Tschemernjak 3:bddd92cd3a17 26 /** Writes a formatted string into an internal buffer for later sending.
Helmut Tschemernjak 3:bddd92cd3a17 27 * with e.g. @ref flush . Explicitly designed to be called from interrupt
Helmut Tschemernjak 3:bddd92cd3a17 28 * context. If the string does not fit into the internal buffer it is
Helmut Tschemernjak 3:bddd92cd3a17 29 * silently truncated. */
Helmut Tschemernjak 3:bddd92cd3a17 30 int printf_irqsafe(const char *fmt, ...) __attribute__((format(printf,2,3)));
Helmut Tschemernjak 3:bddd92cd3a17 31
Helmut Tschemernjak 3:bddd92cd3a17 32 /** the varargs variant of printf_ */
Helmut Tschemernjak 3:bddd92cd3a17 33 int vprintf_irqsafe(const char *fmt, std::va_list ap);
Helmut Tschemernjak 3:bddd92cd3a17 34
Helmut Tschemernjak 3:bddd92cd3a17 35 protected:
Helmut Tschemernjak 3:bddd92cd3a17 36 /** Called from @ref Stream::printf and other stdio-like methods from the base class @ref Stream . */
Helmut Tschemernjak 3:bddd92cd3a17 37 virtual int _putc(int c);
Helmut Tschemernjak 3:bddd92cd3a17 38
Helmut Tschemernjak 3:bddd92cd3a17 39 private:
Helmut Tschemernjak 3:bddd92cd3a17 40 enum {
Helmut Tschemernjak 3:bddd92cd3a17 41 CorkBuffSize = MAX_PACKET_SIZE_EPBULK,
Helmut Tschemernjak 3:bddd92cd3a17 42 };
Helmut Tschemernjak 3:bddd92cd3a17 43
Helmut Tschemernjak 3:bddd92cd3a17 44 static inline bool RunningInInterrupt() {
Helmut Tschemernjak 3:bddd92cd3a17 45 return SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk;
Helmut Tschemernjak 3:bddd92cd3a17 46 }
Helmut Tschemernjak 3:bddd92cd3a17 47
Helmut Tschemernjak 3:bddd92cd3a17 48 int irqbuff_acquire();
Helmut Tschemernjak 3:bddd92cd3a17 49 void irqbuff_release(int buffused);
Helmut Tschemernjak 3:bddd92cd3a17 50
Helmut Tschemernjak 3:bddd92cd3a17 51 void putc_normal(int c);
Helmut Tschemernjak 3:bddd92cd3a17 52
Helmut Tschemernjak 3:bddd92cd3a17 53 private:
Helmut Tschemernjak 3:bddd92cd3a17 54 int mFullBuffSize;
Helmut Tschemernjak 3:bddd92cd3a17 55 char *m_buff;
Helmut Tschemernjak 3:bddd92cd3a17 56 int m_irq_buffused;
Helmut Tschemernjak 3:bddd92cd3a17 57 };
Helmut Tschemernjak 3:bddd92cd3a17 58
Helmut Tschemernjak 3:bddd92cd3a17 59 #endif // __USBSERIALBUFFERED_H__