USB device stack - modified

Dependents:   shaun_larada

Fork of USBDevice by mbed official

Committer:
setcom_001
Date:
Mon Jul 22 21:16:27 2013 +0000
Revision:
12:a9671b78d24e
docs update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
setcom_001 12:a9671b78d24e 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
setcom_001 12:a9671b78d24e 2 *
setcom_001 12:a9671b78d24e 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
setcom_001 12:a9671b78d24e 4 * and associated documentation files (the "Software"), to deal in the Software without
setcom_001 12:a9671b78d24e 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
setcom_001 12:a9671b78d24e 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
setcom_001 12:a9671b78d24e 7 * Software is furnished to do so, subject to the following conditions:
setcom_001 12:a9671b78d24e 8 *
setcom_001 12:a9671b78d24e 9 * The above copyright notice and this permission notice shall be included in all copies or
setcom_001 12:a9671b78d24e 10 * substantial portions of the Software.
setcom_001 12:a9671b78d24e 11 *
setcom_001 12:a9671b78d24e 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
setcom_001 12:a9671b78d24e 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
setcom_001 12:a9671b78d24e 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
setcom_001 12:a9671b78d24e 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
setcom_001 12:a9671b78d24e 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
setcom_001 12:a9671b78d24e 17 */
setcom_001 12:a9671b78d24e 18
setcom_001 12:a9671b78d24e 19 #ifndef USBSERIAL_H
setcom_001 12:a9671b78d24e 20 #define USBSERIAL_H
setcom_001 12:a9671b78d24e 21
setcom_001 12:a9671b78d24e 22 #include "USBCDC.h"
setcom_001 12:a9671b78d24e 23 #include "Stream.h"
setcom_001 12:a9671b78d24e 24 #include "CircBuffer.h"
setcom_001 12:a9671b78d24e 25
setcom_001 12:a9671b78d24e 26
setcom_001 12:a9671b78d24e 27 /**
setcom_001 12:a9671b78d24e 28 * USBSerial example
setcom_001 12:a9671b78d24e 29 *
setcom_001 12:a9671b78d24e 30 * @code
setcom_001 12:a9671b78d24e 31 * #include "mbed.h"
setcom_001 12:a9671b78d24e 32 * #include "USBSerial.h"
setcom_001 12:a9671b78d24e 33 *
setcom_001 12:a9671b78d24e 34 * //Virtual serial port over USB
setcom_001 12:a9671b78d24e 35 * USBSerial serial;
setcom_001 12:a9671b78d24e 36 *
setcom_001 12:a9671b78d24e 37 * int main(void) {
setcom_001 12:a9671b78d24e 38 *
setcom_001 12:a9671b78d24e 39 * while(1)
setcom_001 12:a9671b78d24e 40 * {
setcom_001 12:a9671b78d24e 41 * serial.printf("I am a virtual serial port\n");
setcom_001 12:a9671b78d24e 42 * wait(1);
setcom_001 12:a9671b78d24e 43 * }
setcom_001 12:a9671b78d24e 44 * }
setcom_001 12:a9671b78d24e 45 * @endcode
setcom_001 12:a9671b78d24e 46 */
setcom_001 12:a9671b78d24e 47 class USBSerial: public USBCDC//, public Stream
setcom_001 12:a9671b78d24e 48 {
setcom_001 12:a9671b78d24e 49 public:
setcom_001 12:a9671b78d24e 50
setcom_001 12:a9671b78d24e 51 /**
setcom_001 12:a9671b78d24e 52 * Constructor
setcom_001 12:a9671b78d24e 53 *
setcom_001 12:a9671b78d24e 54 * @param vendor_id Your vendor_id (default: 0x1f00)
setcom_001 12:a9671b78d24e 55 * @param product_id Your product_id (default: 0x2012)
setcom_001 12:a9671b78d24e 56 * @param product_release Your preoduct_release (default: 0x0001)
setcom_001 12:a9671b78d24e 57 *
setcom_001 12:a9671b78d24e 58 */
setcom_001 12:a9671b78d24e 59 USBSerial( uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001 );
setcom_001 12:a9671b78d24e 60
setcom_001 12:a9671b78d24e 61
setcom_001 12:a9671b78d24e 62 /**
setcom_001 12:a9671b78d24e 63 * Send a character. You can use puts, printf.
setcom_001 12:a9671b78d24e 64 *
setcom_001 12:a9671b78d24e 65 * @param c character to be sent
setcom_001 12:a9671b78d24e 66 * @returns true if there is no error, false otherwise
setcom_001 12:a9671b78d24e 67 */
setcom_001 12:a9671b78d24e 68 virtual int _putc( int c );
setcom_001 12:a9671b78d24e 69
setcom_001 12:a9671b78d24e 70 /**
setcom_001 12:a9671b78d24e 71 * Read a character: blocking
setcom_001 12:a9671b78d24e 72 *
setcom_001 12:a9671b78d24e 73 * @returns character read
setcom_001 12:a9671b78d24e 74 */
setcom_001 12:a9671b78d24e 75 virtual int _getc();
setcom_001 12:a9671b78d24e 76
setcom_001 12:a9671b78d24e 77 /**
setcom_001 12:a9671b78d24e 78 * Check the number of bytes available.
setcom_001 12:a9671b78d24e 79 *
setcom_001 12:a9671b78d24e 80 * @returns the number of bytes available
setcom_001 12:a9671b78d24e 81 */
setcom_001 12:a9671b78d24e 82 uint8_t available();
setcom_001 12:a9671b78d24e 83
setcom_001 12:a9671b78d24e 84
setcom_001 12:a9671b78d24e 85 /**
setcom_001 12:a9671b78d24e 86 * Check the number of bytes available.
setcom_001 12:a9671b78d24e 87 */
setcom_001 12:a9671b78d24e 88 void flush( void );
setcom_001 12:a9671b78d24e 89
setcom_001 12:a9671b78d24e 90 /**
setcom_001 12:a9671b78d24e 91 * Write a block of data.
setcom_001 12:a9671b78d24e 92 *
setcom_001 12:a9671b78d24e 93 * For more efficiency, a block of size 64 (maximum size of a bulk endpoint) has to be written.
setcom_001 12:a9671b78d24e 94 *
setcom_001 12:a9671b78d24e 95 * @param buf pointer on data which will be written
setcom_001 12:a9671b78d24e 96 * @param size size of the buffer. The maximum size of a block is limited by the size of the endpoint (64 bytes)
setcom_001 12:a9671b78d24e 97 *
setcom_001 12:a9671b78d24e 98 * @returns true if successfull
setcom_001 12:a9671b78d24e 99 */
setcom_001 12:a9671b78d24e 100 bool writeBlock( uint8_t *buf, uint16_t size );
setcom_001 12:a9671b78d24e 101 bool writeBlock( const char *buf );
setcom_001 12:a9671b78d24e 102 void printf( const char *format, ... );
setcom_001 12:a9671b78d24e 103
setcom_001 12:a9671b78d24e 104 #ifdef USB_ERRATA_WORKAROUND
setcom_001 12:a9671b78d24e 105 void connect( void );
setcom_001 12:a9671b78d24e 106 void disconnect( void );
setcom_001 12:a9671b78d24e 107 bool vbusDetected( void );
setcom_001 12:a9671b78d24e 108 #endif
setcom_001 12:a9671b78d24e 109
setcom_001 12:a9671b78d24e 110 /**
setcom_001 12:a9671b78d24e 111 * Attach a member function to call when a packet is received.
setcom_001 12:a9671b78d24e 112 *
setcom_001 12:a9671b78d24e 113 * @param tptr pointer to the object to call the member function on
setcom_001 12:a9671b78d24e 114 * @param mptr pointer to the member function to be called
setcom_001 12:a9671b78d24e 115 */
setcom_001 12:a9671b78d24e 116 template<typename T>
setcom_001 12:a9671b78d24e 117 void attach( T *tptr, void ( T::*mptr )( void ) )
setcom_001 12:a9671b78d24e 118 {
setcom_001 12:a9671b78d24e 119 if( ( mptr != NULL ) && ( tptr != NULL ) )
setcom_001 12:a9671b78d24e 120 {
setcom_001 12:a9671b78d24e 121 rx.attach( tptr, mptr );
setcom_001 12:a9671b78d24e 122 }
setcom_001 12:a9671b78d24e 123 }
setcom_001 12:a9671b78d24e 124
setcom_001 12:a9671b78d24e 125 /**
setcom_001 12:a9671b78d24e 126 * Attach a callback called when a packet is received
setcom_001 12:a9671b78d24e 127 *
setcom_001 12:a9671b78d24e 128 * @param fptr function pointer
setcom_001 12:a9671b78d24e 129 */
setcom_001 12:a9671b78d24e 130 void attach( void ( *fn )( void ) )
setcom_001 12:a9671b78d24e 131 {
setcom_001 12:a9671b78d24e 132 if( fn != NULL )
setcom_001 12:a9671b78d24e 133 {
setcom_001 12:a9671b78d24e 134 rx.attach( fn );
setcom_001 12:a9671b78d24e 135 }
setcom_001 12:a9671b78d24e 136 }
setcom_001 12:a9671b78d24e 137
setcom_001 12:a9671b78d24e 138
setcom_001 12:a9671b78d24e 139 protected:
setcom_001 12:a9671b78d24e 140 virtual bool EP2_OUT_callback();
setcom_001 12:a9671b78d24e 141
setcom_001 12:a9671b78d24e 142 private:
setcom_001 12:a9671b78d24e 143 FunctionPointer rx;
setcom_001 12:a9671b78d24e 144 CircBuffer<uint8_t> buf;
setcom_001 12:a9671b78d24e 145
setcom_001 12:a9671b78d24e 146 #ifdef USB_ERRATA_WORKAROUND
setcom_001 12:a9671b78d24e 147 DigitalOut _connect;
setcom_001 12:a9671b78d24e 148 DigitalIn _vbus;
setcom_001 12:a9671b78d24e 149 #endif
setcom_001 12:a9671b78d24e 150
setcom_001 12:a9671b78d24e 151 };
setcom_001 12:a9671b78d24e 152
setcom_001 12:a9671b78d24e 153 #endif
setcom_001 12:a9671b78d24e 154