Dependencies:   mbed

Committer:
ICTFBI
Date:
Fri Oct 16 14:28:26 2015 +0000
Revision:
0:4edb816d21e1
Pre-update 16-10-15

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ICTFBI 0:4edb816d21e1 1
ICTFBI 0:4edb816d21e1 2 /*
ICTFBI 0:4edb816d21e1 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
ICTFBI 0:4edb816d21e1 4
ICTFBI 0:4edb816d21e1 5 Permission is hereby granted, free of charge, to any person obtaining a copy
ICTFBI 0:4edb816d21e1 6 of this software and associated documentation files (the "Software"), to deal
ICTFBI 0:4edb816d21e1 7 in the Software without restriction, including without limitation the rights
ICTFBI 0:4edb816d21e1 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ICTFBI 0:4edb816d21e1 9 copies of the Software, and to permit persons to whom the Software is
ICTFBI 0:4edb816d21e1 10 furnished to do so, subject to the following conditions:
ICTFBI 0:4edb816d21e1 11
ICTFBI 0:4edb816d21e1 12 The above copyright notice and this permission notice shall be included in
ICTFBI 0:4edb816d21e1 13 all copies or substantial portions of the Software.
ICTFBI 0:4edb816d21e1 14
ICTFBI 0:4edb816d21e1 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ICTFBI 0:4edb816d21e1 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ICTFBI 0:4edb816d21e1 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ICTFBI 0:4edb816d21e1 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ICTFBI 0:4edb816d21e1 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ICTFBI 0:4edb816d21e1 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ICTFBI 0:4edb816d21e1 21 THE SOFTWARE.
ICTFBI 0:4edb816d21e1 22 */
ICTFBI 0:4edb816d21e1 23
ICTFBI 0:4edb816d21e1 24 #ifndef USB_SERIAL_H
ICTFBI 0:4edb816d21e1 25 #define USB_SERIAL_H
ICTFBI 0:4edb816d21e1 26
ICTFBI 0:4edb816d21e1 27 //DG 2010
ICTFBI 0:4edb816d21e1 28 //Essentially a clone of Serial if
ICTFBI 0:4edb816d21e1 29 #include "Stream.h"
ICTFBI 0:4edb816d21e1 30 #include "mbed.h"
ICTFBI 0:4edb816d21e1 31
ICTFBI 0:4edb816d21e1 32 #include "drv/usb/UsbDevice.h"
ICTFBI 0:4edb816d21e1 33 #include "drv/usb/UsbEndpoint.h"
ICTFBI 0:4edb816d21e1 34
ICTFBI 0:4edb816d21e1 35 namespace mbed {
ICTFBI 0:4edb816d21e1 36
ICTFBI 0:4edb816d21e1 37 class UsbSerial : public Stream {
ICTFBI 0:4edb816d21e1 38
ICTFBI 0:4edb816d21e1 39 public:
ICTFBI 0:4edb816d21e1 40
ICTFBI 0:4edb816d21e1 41 UsbSerial(UsbDevice* pDevice, int epIn, int epOut, const char* name = NULL);
ICTFBI 0:4edb816d21e1 42 virtual ~UsbSerial();
ICTFBI 0:4edb816d21e1 43 //Apart from the ctor/dtor, exactly the same protos as Serial
ICTFBI 0:4edb816d21e1 44
ICTFBI 0:4edb816d21e1 45 void baud(int baudrate);
ICTFBI 0:4edb816d21e1 46
ICTFBI 0:4edb816d21e1 47 enum Parity {
ICTFBI 0:4edb816d21e1 48 None = 0,
ICTFBI 0:4edb816d21e1 49 Odd = 1,
ICTFBI 0:4edb816d21e1 50 Even = 2,
ICTFBI 0:4edb816d21e1 51 Forced1 = 3,
ICTFBI 0:4edb816d21e1 52 Forced0 = 4
ICTFBI 0:4edb816d21e1 53 };
ICTFBI 0:4edb816d21e1 54
ICTFBI 0:4edb816d21e1 55 enum IrqType {
ICTFBI 0:4edb816d21e1 56 RxIrq = 0
ICTFBI 0:4edb816d21e1 57 , TxIrq
ICTFBI 0:4edb816d21e1 58 };
ICTFBI 0:4edb816d21e1 59
ICTFBI 0:4edb816d21e1 60 void format(int bits, int parity, int stop);
ICTFBI 0:4edb816d21e1 61
ICTFBI 0:4edb816d21e1 62 class CDummy;
ICTFBI 0:4edb816d21e1 63 template <class T>
ICTFBI 0:4edb816d21e1 64 void attach(T* pCbItem, void (T::*pCbMeth)(), IrqType type = RxIrq)
ICTFBI 0:4edb816d21e1 65 {
ICTFBI 0:4edb816d21e1 66 if(type == RxIrq)
ICTFBI 0:4edb816d21e1 67 {
ICTFBI 0:4edb816d21e1 68 m_pInCbItem = (CDummy*) pCbItem;
ICTFBI 0:4edb816d21e1 69 m_pInCbMeth = (void (CDummy::*)()) pCbMeth;
ICTFBI 0:4edb816d21e1 70 }
ICTFBI 0:4edb816d21e1 71 else
ICTFBI 0:4edb816d21e1 72 {
ICTFBI 0:4edb816d21e1 73 m_pOutCbItem = (CDummy*) pCbItem;
ICTFBI 0:4edb816d21e1 74 m_pOutCbMeth = (void (CDummy::*)()) pCbMeth;
ICTFBI 0:4edb816d21e1 75 }
ICTFBI 0:4edb816d21e1 76 }
ICTFBI 0:4edb816d21e1 77
ICTFBI 0:4edb816d21e1 78 #if 0 // Inhereted from Stream, for documentation only
ICTFBI 0:4edb816d21e1 79
ICTFBI 0:4edb816d21e1 80 /* Function: putc
ICTFBI 0:4edb816d21e1 81 * Write a character
ICTFBI 0:4edb816d21e1 82 *
ICTFBI 0:4edb816d21e1 83 * Variables:
ICTFBI 0:4edb816d21e1 84 * c - The character to write to the serial port
ICTFBI 0:4edb816d21e1 85 */
ICTFBI 0:4edb816d21e1 86 int putc(int c);
ICTFBI 0:4edb816d21e1 87
ICTFBI 0:4edb816d21e1 88 /* Function: getc
ICTFBI 0:4edb816d21e1 89 * Read a character
ICTFBI 0:4edb816d21e1 90 *
ICTFBI 0:4edb816d21e1 91 * Variables:
ICTFBI 0:4edb816d21e1 92 * returns - The character read from the serial port
ICTFBI 0:4edb816d21e1 93 */
ICTFBI 0:4edb816d21e1 94 int getc();
ICTFBI 0:4edb816d21e1 95
ICTFBI 0:4edb816d21e1 96 /* Function: printf
ICTFBI 0:4edb816d21e1 97 * Write a formated string
ICTFBI 0:4edb816d21e1 98 *
ICTFBI 0:4edb816d21e1 99 * Variables:
ICTFBI 0:4edb816d21e1 100 * format - A printf-style format string, followed by the
ICTFBI 0:4edb816d21e1 101 * variables to use in formating the string.
ICTFBI 0:4edb816d21e1 102 */
ICTFBI 0:4edb816d21e1 103 int printf(const char* format, ...);
ICTFBI 0:4edb816d21e1 104
ICTFBI 0:4edb816d21e1 105 /* Function: scanf
ICTFBI 0:4edb816d21e1 106 * Read a formated string
ICTFBI 0:4edb816d21e1 107 *
ICTFBI 0:4edb816d21e1 108 * Variables:
ICTFBI 0:4edb816d21e1 109 * format - A scanf-style format string,
ICTFBI 0:4edb816d21e1 110 * followed by the pointers to variables to store the results.
ICTFBI 0:4edb816d21e1 111 */
ICTFBI 0:4edb816d21e1 112 int scanf(const char* format, ...);
ICTFBI 0:4edb816d21e1 113
ICTFBI 0:4edb816d21e1 114 #endif
ICTFBI 0:4edb816d21e1 115
ICTFBI 0:4edb816d21e1 116 /* Function: readable
ICTFBI 0:4edb816d21e1 117 * Determine if there is a character available to read
ICTFBI 0:4edb816d21e1 118 *
ICTFBI 0:4edb816d21e1 119 * Variables:
ICTFBI 0:4edb816d21e1 120 * returns - 1 if there is a character available to read, else 0
ICTFBI 0:4edb816d21e1 121 */
ICTFBI 0:4edb816d21e1 122 int readable();
ICTFBI 0:4edb816d21e1 123
ICTFBI 0:4edb816d21e1 124 /* Function: writeable
ICTFBI 0:4edb816d21e1 125 * Determine if there is space available to write a character
ICTFBI 0:4edb816d21e1 126 *
ICTFBI 0:4edb816d21e1 127 * Variables:
ICTFBI 0:4edb816d21e1 128 * returns - 1 if there is space to write a character, else 0
ICTFBI 0:4edb816d21e1 129 */
ICTFBI 0:4edb816d21e1 130 int writeable();
ICTFBI 0:4edb816d21e1 131
ICTFBI 0:4edb816d21e1 132 #ifdef MBED_RPC
ICTFBI 0:4edb816d21e1 133 virtual const struct rpc_method *get_rpc_methods();
ICTFBI 0:4edb816d21e1 134 static struct rpc_class *get_rpc_class();
ICTFBI 0:4edb816d21e1 135 #endif
ICTFBI 0:4edb816d21e1 136
ICTFBI 0:4edb816d21e1 137 protected:
ICTFBI 0:4edb816d21e1 138
ICTFBI 0:4edb816d21e1 139 virtual int _getc();
ICTFBI 0:4edb816d21e1 140 virtual int _putc(int c);
ICTFBI 0:4edb816d21e1 141
ICTFBI 0:4edb816d21e1 142 void onReadable();
ICTFBI 0:4edb816d21e1 143 void onWriteable();
ICTFBI 0:4edb816d21e1 144
ICTFBI 0:4edb816d21e1 145 void onEpInTransfer();
ICTFBI 0:4edb816d21e1 146 void onEpOutTransfer();
ICTFBI 0:4edb816d21e1 147
ICTFBI 0:4edb816d21e1 148 private:
ICTFBI 0:4edb816d21e1 149
ICTFBI 0:4edb816d21e1 150 UsbEndpoint m_epIn;
ICTFBI 0:4edb816d21e1 151 UsbEndpoint m_epOut;
ICTFBI 0:4edb816d21e1 152
ICTFBI 0:4edb816d21e1 153 CDummy* m_pInCbItem;
ICTFBI 0:4edb816d21e1 154 void (CDummy::*m_pInCbMeth)();
ICTFBI 0:4edb816d21e1 155
ICTFBI 0:4edb816d21e1 156 CDummy* m_pOutCbItem;
ICTFBI 0:4edb816d21e1 157 void (CDummy::*m_pOutCbMeth)();
ICTFBI 0:4edb816d21e1 158
ICTFBI 0:4edb816d21e1 159 void startTx();
ICTFBI 0:4edb816d21e1 160 void startRx();
ICTFBI 0:4edb816d21e1 161
ICTFBI 0:4edb816d21e1 162 Timeout m_txTimeout;
ICTFBI 0:4edb816d21e1 163 volatile bool m_timeout;
ICTFBI 0:4edb816d21e1 164
ICTFBI 0:4edb816d21e1 165 volatile char* m_inBufEven;
ICTFBI 0:4edb816d21e1 166 volatile char* m_inBufOdd;
ICTFBI 0:4edb816d21e1 167 volatile char* m_inBufUsr;
ICTFBI 0:4edb816d21e1 168 volatile char* m_inBufTrmt;
ICTFBI 0:4edb816d21e1 169
ICTFBI 0:4edb816d21e1 170 volatile char* m_outBufEven;
ICTFBI 0:4edb816d21e1 171 volatile char* m_outBufOdd;
ICTFBI 0:4edb816d21e1 172 volatile char* m_outBufUsr;
ICTFBI 0:4edb816d21e1 173 volatile char* m_outBufTrmt;
ICTFBI 0:4edb816d21e1 174
ICTFBI 0:4edb816d21e1 175 volatile int m_inBufLen;
ICTFBI 0:4edb816d21e1 176 volatile int m_outBufLen;
ICTFBI 0:4edb816d21e1 177
ICTFBI 0:4edb816d21e1 178 volatile char* m_pInBufPos;
ICTFBI 0:4edb816d21e1 179 volatile char* m_pOutBufPos;
ICTFBI 0:4edb816d21e1 180
ICTFBI 0:4edb816d21e1 181
ICTFBI 0:4edb816d21e1 182
ICTFBI 0:4edb816d21e1 183 };
ICTFBI 0:4edb816d21e1 184
ICTFBI 0:4edb816d21e1 185 }
ICTFBI 0:4edb816d21e1 186
ICTFBI 0:4edb816d21e1 187
ICTFBI 0:4edb816d21e1 188
ICTFBI 0:4edb816d21e1 189 #endif