USB Host WAN Dongle library

Fork of USBHostWANDongle_bleedingedge by Donatien Garnier

Committer:
ashleymills
Date:
Fri Mar 08 11:04:45 2013 +0000
Revision:
25:3184f71557bf
Parent:
22:bec61bcc9c25
Parent:
18:7d5242aa7b95
Child:
27:980fe31c14f7
Merged MU509 and K3773 changes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 10:08bce4cd973a 1 /* Copyright (c) 2010-2012 mbed.org, MIT License
donatien 8:0d1ec493842c 2 *
donatien 8:0d1ec493842c 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
donatien 8:0d1ec493842c 4 * and associated documentation files (the "Software"), to deal in the Software without
donatien 8:0d1ec493842c 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
donatien 8:0d1ec493842c 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
donatien 8:0d1ec493842c 7 * Software is furnished to do so, subject to the following conditions:
donatien 8:0d1ec493842c 8 *
donatien 8:0d1ec493842c 9 * The above copyright notice and this permission notice shall be included in all copies or
donatien 8:0d1ec493842c 10 * substantial portions of the Software.
donatien 8:0d1ec493842c 11 *
donatien 8:0d1ec493842c 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
donatien 8:0d1ec493842c 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
donatien 8:0d1ec493842c 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
donatien 8:0d1ec493842c 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 8:0d1ec493842c 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
donatien 8:0d1ec493842c 17 */
donatien 8:0d1ec493842c 18
donatien 8:0d1ec493842c 19 #ifndef WANDONGLEINITIALIZER_H
donatien 8:0d1ec493842c 20 #define WANDONGLEINITIALIZER_H
donatien 8:0d1ec493842c 21
donatien 8:0d1ec493842c 22 #include <cstdint>
donatien 8:0d1ec493842c 23 using std::uint16_t;
donatien 8:0d1ec493842c 24 using std::uint32_t;
donatien 8:0d1ec493842c 25
donatien 8:0d1ec493842c 26 #include "USBHost.h"
donatien 8:0d1ec493842c 27 #include "IUSBEnumerator.h"
donatien 8:0d1ec493842c 28
donatien 8:0d1ec493842c 29 enum WAN_DONGLE_TYPE
donatien 8:0d1ec493842c 30 {
ashleymills 25:3184f71557bf 31 WAN_DONGLE_TYPE_UNKNOWN = -1,
ashleymills 25:3184f71557bf 32 WAN_DONGLE_TYPE_VODAFONEK3770 = 0,
ashleymills 25:3184f71557bf 33 WAN_DONGLE_TYPE_VODAFONEK3772Z = 1,
ashleymills 25:3184f71557bf 34 WAN_DONGLE_TYPE_VODAFONEK3772 = 2,
ashleymills 25:3184f71557bf 35 WAN_DONGLE_TYPE_VODAFONEK3773 = 3,
ashleymills 25:3184f71557bf 36 WAN_DONGLE_TYPE_VODAFONEMU509 = 4,
donatien 8:0d1ec493842c 37 };
donatien 8:0d1ec493842c 38
donatien 8:0d1ec493842c 39 class WANDongleInitializer : public IUSBEnumerator
donatien 8:0d1ec493842c 40 {
donatien 8:0d1ec493842c 41 protected:
donatien 8:0d1ec493842c 42 WANDongleInitializer(USBHost* pHost);
donatien 8:0d1ec493842c 43 USBHost* m_pHost;
donatien 8:0d1ec493842c 44
donatien 8:0d1ec493842c 45 public:
donatien 8:0d1ec493842c 46 virtual uint16_t getMSDVid() = 0;
donatien 8:0d1ec493842c 47 virtual uint16_t getMSDPid() = 0;
donatien 8:0d1ec493842c 48
donatien 8:0d1ec493842c 49 virtual uint16_t getSerialVid() = 0;
donatien 8:0d1ec493842c 50 virtual uint16_t getSerialPid() = 0;
donatien 8:0d1ec493842c 51
donatien 8:0d1ec493842c 52 virtual bool switchMode(USBDeviceConnected* pDev) = 0;
donatien 8:0d1ec493842c 53
donatien 9:c9e9817c398c 54 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx) = 0;
donatien 8:0d1ec493842c 55
donatien 8:0d1ec493842c 56 virtual int getSerialPortCount() = 0;
donatien 8:0d1ec493842c 57
donatien 8:0d1ec493842c 58 virtual void setVidPid(uint16_t vid, uint16_t pid) = 0;
donatien 8:0d1ec493842c 59
donatien 8:0d1ec493842c 60 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol) = 0; //Must return true if the interface should be parsed
donatien 8:0d1ec493842c 61
donatien 8:0d1ec493842c 62 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) = 0; //Must return true if the endpoint will be used
donatien 8:0d1ec493842c 63
donatien 8:0d1ec493842c 64 virtual WAN_DONGLE_TYPE getType() = 0;
donatien 8:0d1ec493842c 65
donatien 8:0d1ec493842c 66 static WANDongleInitializer** getInitializers(USBHost* pHost);
donatien 8:0d1ec493842c 67 };
donatien 8:0d1ec493842c 68
donatien 8:0d1ec493842c 69 class VodafoneK3770Initializer : public WANDongleInitializer
donatien 8:0d1ec493842c 70 {
donatien 8:0d1ec493842c 71 public:
donatien 8:0d1ec493842c 72 VodafoneK3770Initializer(USBHost* pHost);
donatien 8:0d1ec493842c 73
donatien 8:0d1ec493842c 74 virtual uint16_t getMSDVid();
donatien 8:0d1ec493842c 75 virtual uint16_t getMSDPid();
donatien 8:0d1ec493842c 76
donatien 8:0d1ec493842c 77 virtual uint16_t getSerialVid();
donatien 8:0d1ec493842c 78 virtual uint16_t getSerialPid();
donatien 8:0d1ec493842c 79
donatien 8:0d1ec493842c 80 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 8:0d1ec493842c 81
donatien 9:c9e9817c398c 82 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 8:0d1ec493842c 83
donatien 8:0d1ec493842c 84 virtual int getSerialPortCount();
donatien 8:0d1ec493842c 85
donatien 8:0d1ec493842c 86 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 8:0d1ec493842c 87
donatien 8:0d1ec493842c 88 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
donatien 8:0d1ec493842c 89
donatien 8:0d1ec493842c 90 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
donatien 8:0d1ec493842c 91
donatien 8:0d1ec493842c 92 virtual WAN_DONGLE_TYPE getType();
donatien 8:0d1ec493842c 93
donatien 8:0d1ec493842c 94 private:
donatien 8:0d1ec493842c 95
donatien 8:0d1ec493842c 96 bool m_hasSwitched;
donatien 8:0d1ec493842c 97 int m_currentSerialIntf;
donatien 8:0d1ec493842c 98 int m_endpointsToFetch;
donatien 8:0d1ec493842c 99 };
donatien 8:0d1ec493842c 100
ashleymills 20:3abcf818be31 101 class VodafoneK3773Initializer : public WANDongleInitializer
donatien 18:7d5242aa7b95 102 {
donatien 18:7d5242aa7b95 103 public:
ashleymills 20:3abcf818be31 104 VodafoneK3773Initializer(USBHost* pHost);
donatien 18:7d5242aa7b95 105
donatien 18:7d5242aa7b95 106 virtual uint16_t getMSDVid();
donatien 18:7d5242aa7b95 107 virtual uint16_t getMSDPid();
donatien 18:7d5242aa7b95 108
donatien 18:7d5242aa7b95 109 virtual uint16_t getSerialVid();
donatien 18:7d5242aa7b95 110 virtual uint16_t getSerialPid();
donatien 18:7d5242aa7b95 111
donatien 18:7d5242aa7b95 112 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 18:7d5242aa7b95 113
donatien 18:7d5242aa7b95 114 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 18:7d5242aa7b95 115
donatien 18:7d5242aa7b95 116 virtual int getSerialPortCount();
donatien 18:7d5242aa7b95 117
donatien 18:7d5242aa7b95 118 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 18:7d5242aa7b95 119
donatien 18:7d5242aa7b95 120 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
donatien 18:7d5242aa7b95 121
donatien 18:7d5242aa7b95 122 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
donatien 18:7d5242aa7b95 123
donatien 18:7d5242aa7b95 124 virtual WAN_DONGLE_TYPE getType();
donatien 18:7d5242aa7b95 125
donatien 18:7d5242aa7b95 126 private:
donatien 18:7d5242aa7b95 127
donatien 18:7d5242aa7b95 128 bool m_hasSwitched;
donatien 18:7d5242aa7b95 129 int m_currentSerialIntf;
donatien 18:7d5242aa7b95 130 int m_endpointsToFetch;
donatien 18:7d5242aa7b95 131 };
donatien 18:7d5242aa7b95 132
donatien 8:0d1ec493842c 133 class VodafoneK3772ZInitializer : public WANDongleInitializer
donatien 8:0d1ec493842c 134 {
donatien 8:0d1ec493842c 135 public:
donatien 8:0d1ec493842c 136 VodafoneK3772ZInitializer(USBHost* pHost);
donatien 8:0d1ec493842c 137
donatien 8:0d1ec493842c 138 virtual uint16_t getMSDVid();
donatien 8:0d1ec493842c 139 virtual uint16_t getMSDPid();
donatien 8:0d1ec493842c 140
donatien 8:0d1ec493842c 141 virtual uint16_t getSerialVid();
donatien 8:0d1ec493842c 142 virtual uint16_t getSerialPid();
donatien 8:0d1ec493842c 143
donatien 8:0d1ec493842c 144 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 8:0d1ec493842c 145
donatien 9:c9e9817c398c 146 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 8:0d1ec493842c 147
donatien 8:0d1ec493842c 148 virtual int getSerialPortCount();
donatien 8:0d1ec493842c 149
donatien 8:0d1ec493842c 150 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 8:0d1ec493842c 151
donatien 8:0d1ec493842c 152 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
donatien 8:0d1ec493842c 153
donatien 8:0d1ec493842c 154 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
donatien 8:0d1ec493842c 155
donatien 8:0d1ec493842c 156 virtual WAN_DONGLE_TYPE getType();
donatien 8:0d1ec493842c 157
donatien 8:0d1ec493842c 158 private:
donatien 8:0d1ec493842c 159
donatien 8:0d1ec493842c 160 bool m_hasSwitched;
donatien 8:0d1ec493842c 161 int m_currentSerialIntf;
donatien 8:0d1ec493842c 162 int m_endpointsToFetch;
donatien 8:0d1ec493842c 163 };
donatien 8:0d1ec493842c 164
ashleymills 21:dcc8c866ccbb 165 class VodafoneMU509Initializer : public WANDongleInitializer
ashleymills 21:dcc8c866ccbb 166 {
ashleymills 21:dcc8c866ccbb 167 public:
ashleymills 21:dcc8c866ccbb 168 VodafoneMU509Initializer(USBHost* pHost);
ashleymills 21:dcc8c866ccbb 169
ashleymills 21:dcc8c866ccbb 170 virtual uint16_t getMSDVid();
ashleymills 21:dcc8c866ccbb 171 virtual uint16_t getMSDPid();
ashleymills 21:dcc8c866ccbb 172
ashleymills 21:dcc8c866ccbb 173 virtual uint16_t getSerialVid();
ashleymills 21:dcc8c866ccbb 174 virtual uint16_t getSerialPid();
ashleymills 21:dcc8c866ccbb 175
ashleymills 21:dcc8c866ccbb 176 virtual bool switchMode(USBDeviceConnected* pDev);
ashleymills 21:dcc8c866ccbb 177
ashleymills 21:dcc8c866ccbb 178 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
ashleymills 21:dcc8c866ccbb 179
ashleymills 21:dcc8c866ccbb 180 virtual int getSerialPortCount();
ashleymills 21:dcc8c866ccbb 181
ashleymills 21:dcc8c866ccbb 182 virtual void setVidPid(uint16_t vid, uint16_t pid);
ashleymills 21:dcc8c866ccbb 183
ashleymills 21:dcc8c866ccbb 184 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
ashleymills 21:dcc8c866ccbb 185
ashleymills 21:dcc8c866ccbb 186 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
ashleymills 21:dcc8c866ccbb 187
ashleymills 21:dcc8c866ccbb 188 virtual WAN_DONGLE_TYPE getType();
ashleymills 21:dcc8c866ccbb 189
ashleymills 21:dcc8c866ccbb 190 private:
ashleymills 21:dcc8c866ccbb 191
ashleymills 21:dcc8c866ccbb 192 int m_currentSerialIntf;
ashleymills 21:dcc8c866ccbb 193 int m_endpointsToFetch;
ashleymills 21:dcc8c866ccbb 194 };
ashleymills 21:dcc8c866ccbb 195
ashleymills 25:3184f71557bf 196 class VodafoneK3772Initializer : public WANDongleInitializer
ashleymills 25:3184f71557bf 197 {
ashleymills 25:3184f71557bf 198 public:
ashleymills 25:3184f71557bf 199 VodafoneK3772Initializer(USBHost* pHost);
ashleymills 25:3184f71557bf 200
ashleymills 25:3184f71557bf 201 virtual uint16_t getMSDVid();
ashleymills 25:3184f71557bf 202 virtual uint16_t getMSDPid();
ashleymills 25:3184f71557bf 203
ashleymills 25:3184f71557bf 204 virtual uint16_t getSerialVid();
ashleymills 25:3184f71557bf 205 virtual uint16_t getSerialPid();
ashleymills 25:3184f71557bf 206
ashleymills 25:3184f71557bf 207 virtual bool switchMode(USBDeviceConnected* pDev);
ashleymills 25:3184f71557bf 208
ashleymills 25:3184f71557bf 209 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
ashleymills 25:3184f71557bf 210
ashleymills 25:3184f71557bf 211 virtual int getSerialPortCount();
ashleymills 25:3184f71557bf 212
ashleymills 25:3184f71557bf 213 virtual void setVidPid(uint16_t vid, uint16_t pid);
ashleymills 25:3184f71557bf 214
ashleymills 25:3184f71557bf 215 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
ashleymills 25:3184f71557bf 216
ashleymills 25:3184f71557bf 217 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
ashleymills 25:3184f71557bf 218
ashleymills 25:3184f71557bf 219 virtual WAN_DONGLE_TYPE getType();
ashleymills 25:3184f71557bf 220
ashleymills 25:3184f71557bf 221 private:
ashleymills 25:3184f71557bf 222
ashleymills 25:3184f71557bf 223 bool m_hasSwitched;
ashleymills 25:3184f71557bf 224 int m_currentSerialIntf;
ashleymills 25:3184f71557bf 225 int m_endpointsToFetch;
ashleymills 25:3184f71557bf 226 };
ashleymills 25:3184f71557bf 227
donatien 8:0d1ec493842c 228 #endif
ashleymills 25:3184f71557bf 229