USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Revision:
1:ea8e179320d7
diff -r 2385683c867a -r ea8e179320d7 tests/USBMSD2/USB_CDC.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/USBMSD2/USB_CDC.h	Sat Sep 28 03:21:14 2013 +0000
@@ -0,0 +1,93 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#pragma once
+
+/* These headers are included for child class. */
+#include "USBEndpoints.h"
+#include "USBDescriptor.h"
+#include "USBDevice_Types.h"
+
+#include "USBDevice.h"
+#include "CircBuffer.h"
+
+#define CDC_EPINT_IN   EP1IN
+#define CDC_EPBULK_IN  EP5IN 
+#define CDC_EPBULK_OUT EP5OUT
+
+class USB_CDC {
+public:
+    USB_CDC(USBDevice* device);
+
+    /** target to virtual COM
+     */
+    void putc(int c);
+    
+    /** virtial COM to target
+     */
+    int getc();
+
+    int readable();
+    
+    int writeable();
+
+    void baud_callback(int baudrate);
+    void send_break_callback(uint16_t duration);
+    void control_line_callback(int rts, int dtr);
+
+    /*
+    * Send a buffer
+    *
+    * @param endpoint endpoint which will be sent the buffer
+    * @param buffer buffer to be sent
+    * @param size length of the buffer
+    * @returns true if successful
+    */
+    bool send(uint8_t * buffer, uint32_t size);
+    
+    /*
+    * Read a buffer from a certain endpoint. Warning: blocking
+    *
+    * @param endpoint endpoint to read
+    * @param buffer buffer where will be stored bytes
+    * @param size the number of bytes read will be stored in *size
+    * @param maxSize the maximum length that can be read
+    * @returns true if successful
+    */
+    bool readEP(uint8_t * buffer, uint32_t * size);
+    
+    /*
+    * Read a buffer from a certain endpoint. Warning: non blocking
+    *
+    * @param endpoint endpoint to read
+    * @param buffer buffer where will be stored bytes
+    * @param size the number of bytes read will be stored in *size
+    * @param maxSize the maximum length that can be read
+    * @returns true if successful
+    */
+    bool readEP_NB(uint8_t * buffer, uint32_t * size);
+
+    bool Request_callback(CONTROL_TRANSFER* transfer);
+    bool RequestCompleted_callback(CONTROL_TRANSFER* transfer, uint8_t* buf, int length);
+    bool EPBULK_OUT_callback();
+    
+protected:
+    USBDevice* _device;
+    CircBuffer<uint8_t> _rx_buf;
+    volatile bool terminal_connected;
+};