test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anhtran 0:e9fd5575b10e 1 /* mbed USBHost Library
anhtran 0:e9fd5575b10e 2 * Copyright (c) 2006-2013 ARM Limited
anhtran 0:e9fd5575b10e 3 *
anhtran 0:e9fd5575b10e 4 * Licensed under the Apache License, Version 2.0 (the "License");
anhtran 0:e9fd5575b10e 5 * you may not use this file except in compliance with the License.
anhtran 0:e9fd5575b10e 6 * You may obtain a copy of the License at
anhtran 0:e9fd5575b10e 7 *
anhtran 0:e9fd5575b10e 8 * http://www.apache.org/licenses/LICENSE-2.0
anhtran 0:e9fd5575b10e 9 *
anhtran 0:e9fd5575b10e 10 * Unless required by applicable law or agreed to in writing, software
anhtran 0:e9fd5575b10e 11 * distributed under the License is distributed on an "AS IS" BASIS,
anhtran 0:e9fd5575b10e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
anhtran 0:e9fd5575b10e 13 * See the License for the specific language governing permissions and
anhtran 0:e9fd5575b10e 14 * limitations under the License.
anhtran 0:e9fd5575b10e 15 */
anhtran 0:e9fd5575b10e 16
anhtran 0:e9fd5575b10e 17 #ifndef USBHOSTSERIAL_H
anhtran 0:e9fd5575b10e 18 #define USBHOSTSERIAL_H
anhtran 0:e9fd5575b10e 19
anhtran 0:e9fd5575b10e 20 #include "USBHostConf.h"
anhtran 0:e9fd5575b10e 21
anhtran 0:e9fd5575b10e 22 #if USBHOST_SERIAL
anhtran 0:e9fd5575b10e 23
anhtran 0:e9fd5575b10e 24 #include "USBHost.h"
anhtran 0:e9fd5575b10e 25 #include "Stream.h"
anhtran 0:e9fd5575b10e 26 #include "CircBufferHostSerial.h"
anhtran 0:e9fd5575b10e 27 #include "Callback.h"
anhtran 0:e9fd5575b10e 28
anhtran 0:e9fd5575b10e 29 /**
anhtran 0:e9fd5575b10e 30 * A class to communicate a USB virtual serial port
anhtran 0:e9fd5575b10e 31 */
anhtran 0:e9fd5575b10e 32 class USBHostSerialPort : public Stream {
anhtran 0:e9fd5575b10e 33 public:
anhtran 0:e9fd5575b10e 34 /**
anhtran 0:e9fd5575b10e 35 * Constructor
anhtran 0:e9fd5575b10e 36 */
anhtran 0:e9fd5575b10e 37 USBHostSerialPort(uint32_t buf_size);
anhtran 0:e9fd5575b10e 38
anhtran 0:e9fd5575b10e 39 /**
anhtran 0:e9fd5575b10e 40 * Destructor
anhtran 0:e9fd5575b10e 41 */
anhtran 0:e9fd5575b10e 42 virtual ~USBHostSerialPort();
anhtran 0:e9fd5575b10e 43
anhtran 0:e9fd5575b10e 44 enum IrqType {
anhtran 0:e9fd5575b10e 45 RxIrq,
anhtran 0:e9fd5575b10e 46 TxIrq,
anhtran 0:e9fd5575b10e 47
anhtran 0:e9fd5575b10e 48 IrqCnt
anhtran 0:e9fd5575b10e 49 };
anhtran 0:e9fd5575b10e 50
anhtran 0:e9fd5575b10e 51 enum Parity {
anhtran 0:e9fd5575b10e 52 None = 0,
anhtran 0:e9fd5575b10e 53 Odd,
anhtran 0:e9fd5575b10e 54 Even,
anhtran 0:e9fd5575b10e 55 Mark,
anhtran 0:e9fd5575b10e 56 Space
anhtran 0:e9fd5575b10e 57 };
anhtran 0:e9fd5575b10e 58
anhtran 0:e9fd5575b10e 59 void connect(USBHost* _host, USBDeviceConnected * _dev,
anhtran 0:e9fd5575b10e 60 uint8_t _serial_intf, USBEndpoint* _bulk_in, USBEndpoint* _bulk_out);
anhtran 0:e9fd5575b10e 61
anhtran 0:e9fd5575b10e 62 bool connected();
anhtran 0:e9fd5575b10e 63
anhtran 0:e9fd5575b10e 64 /**
anhtran 0:e9fd5575b10e 65 * Check the number of bytes available.
anhtran 0:e9fd5575b10e 66 *
anhtran 0:e9fd5575b10e 67 * @returns the number of bytes available
anhtran 0:e9fd5575b10e 68 */
anhtran 0:e9fd5575b10e 69 uint32_t available();
anhtran 0:e9fd5575b10e 70
anhtran 0:e9fd5575b10e 71 /**
anhtran 0:e9fd5575b10e 72 * Attach a member function to call when a packet is received.
anhtran 0:e9fd5575b10e 73 *
anhtran 0:e9fd5575b10e 74 * @param obj pointer to the object to call the member function on
anhtran 0:e9fd5575b10e 75 * @param method pointer to the member function to be called
anhtran 0:e9fd5575b10e 76 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
anhtran 0:e9fd5575b10e 77 */
anhtran 0:e9fd5575b10e 78 template<typename T>
anhtran 0:e9fd5575b10e 79 void attach(T *obj, void (T::*method)(), IrqType type=RxIrq) {
anhtran 0:e9fd5575b10e 80 attach(callback(obj, method), type);
anhtran 0:e9fd5575b10e 81 }
anhtran 0:e9fd5575b10e 82
anhtran 0:e9fd5575b10e 83 /** Attach a function to call whenever a serial interrupt is generated
anhtran 0:e9fd5575b10e 84 *
anhtran 0:e9fd5575b10e 85 * @param func A pointer to a void function, or 0 to set as none
anhtran 0:e9fd5575b10e 86 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
anhtran 0:e9fd5575b10e 87 */
anhtran 0:e9fd5575b10e 88 void attach(Callback<void()> func, IrqType type=RxIrq) {
anhtran 0:e9fd5575b10e 89 if (func) {
anhtran 0:e9fd5575b10e 90 _irq[type] = func;
anhtran 0:e9fd5575b10e 91 }
anhtran 0:e9fd5575b10e 92 }
anhtran 0:e9fd5575b10e 93
anhtran 0:e9fd5575b10e 94 /** Set the baud rate of the serial port
anhtran 0:e9fd5575b10e 95 *
anhtran 0:e9fd5575b10e 96 * @param baudrate The baudrate of the serial port (default = 9600).
anhtran 0:e9fd5575b10e 97 */
anhtran 0:e9fd5575b10e 98 void baud(int baudrate = 9600);
anhtran 0:e9fd5575b10e 99
anhtran 0:e9fd5575b10e 100 /** Set the transmission format used by the Serial port
anhtran 0:e9fd5575b10e 101 *
anhtran 0:e9fd5575b10e 102 * @param bits The number of bits in a word (default = 8)
anhtran 0:e9fd5575b10e 103 * @param parity The parity used (USBHostSerialPort::None, USBHostSerialPort::Odd, USBHostSerialPort::Even, USBHostSerialPort::Mark, USBHostSerialPort::Space; default = USBHostSerialPort::None)
anhtran 0:e9fd5575b10e 104 * @param stop The number of stop bits (1 or 2; default = 1)
anhtran 0:e9fd5575b10e 105 */
anhtran 0:e9fd5575b10e 106 void format(int bits = 8, Parity parity = USBHostSerialPort::None, int stop_bits = 1);
anhtran 0:e9fd5575b10e 107 virtual int writeBuf(const char* b, int s);
anhtran 0:e9fd5575b10e 108 virtual int readBuf(char* b, int s, int timeout = -1);
anhtran 0:e9fd5575b10e 109
anhtran 0:e9fd5575b10e 110 //protected:
anhtran 0:e9fd5575b10e 111 virtual int _getc();
anhtran 0:e9fd5575b10e 112 virtual int _putc(int c);
anhtran 0:e9fd5575b10e 113
anhtran 0:e9fd5575b10e 114 private:
anhtran 0:e9fd5575b10e 115 USBHost * host;
anhtran 0:e9fd5575b10e 116 USBDeviceConnected * dev;
anhtran 0:e9fd5575b10e 117
anhtran 0:e9fd5575b10e 118 USBEndpoint * bulk_in;
anhtran 0:e9fd5575b10e 119 USBEndpoint * bulk_out;
anhtran 0:e9fd5575b10e 120 uint32_t size_bulk_in;
anhtran 0:e9fd5575b10e 121 uint32_t size_bulk_out;
anhtran 0:e9fd5575b10e 122
anhtran 0:e9fd5575b10e 123 void init();
anhtran 0:e9fd5575b10e 124
anhtran 0:e9fd5575b10e 125 CircBufferHostSerial<uint8_t> * p_circ_buf;
anhtran 0:e9fd5575b10e 126
anhtran 0:e9fd5575b10e 127 uint8_t * p_buf;
anhtran 0:e9fd5575b10e 128
anhtran 0:e9fd5575b10e 129 typedef struct {
anhtran 0:e9fd5575b10e 130 uint32_t baudrate;
anhtran 0:e9fd5575b10e 131 uint8_t stop_bits;
anhtran 0:e9fd5575b10e 132 uint8_t parity;
anhtran 0:e9fd5575b10e 133 uint8_t data_bits;
anhtran 0:e9fd5575b10e 134 } PACKED LINE_CODING;
anhtran 0:e9fd5575b10e 135
anhtran 0:e9fd5575b10e 136 #if defined(TARGET_RZ_A2XX)
anhtran 0:e9fd5575b10e 137 LINE_CODING * p_line_coding;
anhtran 0:e9fd5575b10e 138 uint8_t * p_buf_out;
anhtran 0:e9fd5575b10e 139 uint8_t * p_buf_out_c;
anhtran 0:e9fd5575b10e 140 #else
anhtran 0:e9fd5575b10e 141 LINE_CODING line_coding;
anhtran 0:e9fd5575b10e 142 #endif
anhtran 0:e9fd5575b10e 143
anhtran 0:e9fd5575b10e 144 void rxHandler();
anhtran 0:e9fd5575b10e 145 void txHandler();
anhtran 0:e9fd5575b10e 146 Callback<void()> _irq[IrqCnt];
anhtran 0:e9fd5575b10e 147
anhtran 0:e9fd5575b10e 148 uint8_t serial_intf;
anhtran 0:e9fd5575b10e 149 bool dev_connected;
anhtran 0:e9fd5575b10e 150 };
anhtran 0:e9fd5575b10e 151
anhtran 0:e9fd5575b10e 152 #if (USBHOST_SERIAL <= 1)
anhtran 0:e9fd5575b10e 153
anhtran 0:e9fd5575b10e 154 class USBHostSerial : public IUSBEnumerator, public USBHostSerialPort
anhtran 0:e9fd5575b10e 155 {
anhtran 0:e9fd5575b10e 156 public:
anhtran 0:e9fd5575b10e 157 USBHostSerial(uint32_t buf_size = (1024 * 32));
anhtran 0:e9fd5575b10e 158
anhtran 0:e9fd5575b10e 159 /**
anhtran 0:e9fd5575b10e 160 * Try to connect a serial device
anhtran 0:e9fd5575b10e 161 *
anhtran 0:e9fd5575b10e 162 * @return true if connection was successful
anhtran 0:e9fd5575b10e 163 */
anhtran 0:e9fd5575b10e 164 bool connect();
anhtran 0:e9fd5575b10e 165
anhtran 0:e9fd5575b10e 166 void disconnect();
anhtran 0:e9fd5575b10e 167
anhtran 0:e9fd5575b10e 168 uint16_t get_vid() {
anhtran 0:e9fd5575b10e 169 return _vid;
anhtran 0:e9fd5575b10e 170 }
anhtran 0:e9fd5575b10e 171
anhtran 0:e9fd5575b10e 172 uint16_t get_pid() {
anhtran 0:e9fd5575b10e 173 return _pid;
anhtran 0:e9fd5575b10e 174 }
anhtran 0:e9fd5575b10e 175
anhtran 0:e9fd5575b10e 176 protected:
anhtran 0:e9fd5575b10e 177 USBHost* host;
anhtran 0:e9fd5575b10e 178 USBDeviceConnected* dev;
anhtran 0:e9fd5575b10e 179 uint8_t port_intf;
anhtran 0:e9fd5575b10e 180 int ports_found;
anhtran 0:e9fd5575b10e 181 uint16_t _vid;
anhtran 0:e9fd5575b10e 182 uint16_t _pid;
anhtran 0:e9fd5575b10e 183
anhtran 0:e9fd5575b10e 184 //From IUSBEnumerator
anhtran 0:e9fd5575b10e 185 virtual void setVidPid(uint16_t vid, uint16_t pid);
anhtran 0:e9fd5575b10e 186 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
anhtran 0:e9fd5575b10e 187 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
anhtran 0:e9fd5575b10e 188
anhtran 0:e9fd5575b10e 189 };
anhtran 0:e9fd5575b10e 190
anhtran 0:e9fd5575b10e 191 #else // (USBHOST_SERIAL > 1)
anhtran 0:e9fd5575b10e 192
anhtran 0:e9fd5575b10e 193 class USBHostMultiSerial : public IUSBEnumerator {
anhtran 0:e9fd5575b10e 194 public:
anhtran 0:e9fd5575b10e 195 USBHostMultiSerial(uint32_t buf_size = (1024 * 32));
anhtran 0:e9fd5575b10e 196 virtual ~USBHostMultiSerial();
anhtran 0:e9fd5575b10e 197
anhtran 0:e9fd5575b10e 198 USBHostSerialPort* getPort(int port)
anhtran 0:e9fd5575b10e 199 {
anhtran 0:e9fd5575b10e 200 return port < USBHOST_SERIAL ? ports[port] : NULL;
anhtran 0:e9fd5575b10e 201 }
anhtran 0:e9fd5575b10e 202
anhtran 0:e9fd5575b10e 203 /**
anhtran 0:e9fd5575b10e 204 * Try to connect a serial device
anhtran 0:e9fd5575b10e 205 *
anhtran 0:e9fd5575b10e 206 * @return true if connection was successful
anhtran 0:e9fd5575b10e 207 */
anhtran 0:e9fd5575b10e 208 bool connect();
anhtran 0:e9fd5575b10e 209
anhtran 0:e9fd5575b10e 210 void disconnect();
anhtran 0:e9fd5575b10e 211
anhtran 0:e9fd5575b10e 212 /**
anhtran 0:e9fd5575b10e 213 * Check if a any serial port is connected
anhtran 0:e9fd5575b10e 214 *
anhtran 0:e9fd5575b10e 215 * @returns true if a serial device is connected
anhtran 0:e9fd5575b10e 216 */
anhtran 0:e9fd5575b10e 217 bool connected();
anhtran 0:e9fd5575b10e 218
anhtran 0:e9fd5575b10e 219 protected:
anhtran 0:e9fd5575b10e 220 USBHost* host;
anhtran 0:e9fd5575b10e 221 USBDeviceConnected* dev;
anhtran 0:e9fd5575b10e 222 USBHostSerialPort* ports[USBHOST_SERIAL];
anhtran 0:e9fd5575b10e 223 uint8_t port_intf[USBHOST_SERIAL];
anhtran 0:e9fd5575b10e 224 int ports_found;
anhtran 0:e9fd5575b10e 225 uint32_t _buf_size;
anhtran 0:e9fd5575b10e 226
anhtran 0:e9fd5575b10e 227 //From IUSBEnumerator
anhtran 0:e9fd5575b10e 228 virtual void setVidPid(uint16_t vid, uint16_t pid);
anhtran 0:e9fd5575b10e 229 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
anhtran 0:e9fd5575b10e 230 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
anhtran 0:e9fd5575b10e 231
anhtran 0:e9fd5575b10e 232 private:
anhtran 0:e9fd5575b10e 233 bool dev_connected;
anhtran 0:e9fd5575b10e 234 };
anhtran 0:e9fd5575b10e 235 #endif // (USBHOST_SERIAL <= 1)
anhtran 0:e9fd5575b10e 236
anhtran 0:e9fd5575b10e 237 #endif
anhtran 0:e9fd5575b10e 238
anhtran 0:e9fd5575b10e 239 #endif