USB Host WAN Dongle library

Fork of USBHostWANDongle_bleedingedge by Donatien Garnier

Committer:
ashleymills
Date:
Fri Sep 20 10:40:15 2013 +0000
Revision:
27:980fe31c14f7
Parent:
25:3184f71557bf
Added support for Ublox LISA U200 module

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 27:980fe31c14f7 31 WAN_DONGLE_TYPE_UNKNOWN = -1,
ashleymills 27:980fe31c14f7 32 WAN_DONGLE_TYPE_VODAFONE_K3770 = 0,
ashleymills 27:980fe31c14f7 33 WAN_DONGLE_TYPE_VODAFONE_K3772Z = 1,
ashleymills 27:980fe31c14f7 34 WAN_DONGLE_TYPE_VODAFONE_K3772 = 2,
ashleymills 27:980fe31c14f7 35 WAN_DONGLE_TYPE_VODAFONE_K3773 = 3,
ashleymills 27:980fe31c14f7 36 WAN_DONGLE_TYPE_HUAWEI_MU509 = 4,
ashleymills 27:980fe31c14f7 37 WAN_DONGLE_TYPE_UBLOX_LISAU200 = 5
donatien 8:0d1ec493842c 38 };
donatien 8:0d1ec493842c 39
donatien 8:0d1ec493842c 40 class WANDongleInitializer : public IUSBEnumerator
donatien 8:0d1ec493842c 41 {
donatien 8:0d1ec493842c 42 protected:
donatien 8:0d1ec493842c 43 WANDongleInitializer(USBHost* pHost);
donatien 8:0d1ec493842c 44 USBHost* m_pHost;
donatien 8:0d1ec493842c 45
donatien 8:0d1ec493842c 46 public:
donatien 8:0d1ec493842c 47 virtual uint16_t getMSDVid() = 0;
donatien 8:0d1ec493842c 48 virtual uint16_t getMSDPid() = 0;
donatien 8:0d1ec493842c 49
donatien 8:0d1ec493842c 50 virtual uint16_t getSerialVid() = 0;
donatien 8:0d1ec493842c 51 virtual uint16_t getSerialPid() = 0;
donatien 8:0d1ec493842c 52
donatien 8:0d1ec493842c 53 virtual bool switchMode(USBDeviceConnected* pDev) = 0;
donatien 8:0d1ec493842c 54
donatien 9:c9e9817c398c 55 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx) = 0;
donatien 8:0d1ec493842c 56
donatien 8:0d1ec493842c 57 virtual int getSerialPortCount() = 0;
donatien 8:0d1ec493842c 58
donatien 8:0d1ec493842c 59 virtual void setVidPid(uint16_t vid, uint16_t pid) = 0;
donatien 8:0d1ec493842c 60
donatien 8:0d1ec493842c 61 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 62
donatien 8:0d1ec493842c 63 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 64
donatien 8:0d1ec493842c 65 virtual WAN_DONGLE_TYPE getType() = 0;
donatien 8:0d1ec493842c 66
donatien 8:0d1ec493842c 67 static WANDongleInitializer** getInitializers(USBHost* pHost);
donatien 8:0d1ec493842c 68 };
donatien 8:0d1ec493842c 69
donatien 8:0d1ec493842c 70 class VodafoneK3770Initializer : public WANDongleInitializer
donatien 8:0d1ec493842c 71 {
donatien 8:0d1ec493842c 72 public:
donatien 8:0d1ec493842c 73 VodafoneK3770Initializer(USBHost* pHost);
donatien 8:0d1ec493842c 74
donatien 8:0d1ec493842c 75 virtual uint16_t getMSDVid();
donatien 8:0d1ec493842c 76 virtual uint16_t getMSDPid();
donatien 8:0d1ec493842c 77
donatien 8:0d1ec493842c 78 virtual uint16_t getSerialVid();
donatien 8:0d1ec493842c 79 virtual uint16_t getSerialPid();
donatien 8:0d1ec493842c 80
donatien 8:0d1ec493842c 81 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 8:0d1ec493842c 82
donatien 9:c9e9817c398c 83 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 8:0d1ec493842c 84
donatien 8:0d1ec493842c 85 virtual int getSerialPortCount();
donatien 8:0d1ec493842c 86
donatien 8:0d1ec493842c 87 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 8:0d1ec493842c 88
donatien 8:0d1ec493842c 89 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 90
donatien 8:0d1ec493842c 91 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 92
donatien 8:0d1ec493842c 93 virtual WAN_DONGLE_TYPE getType();
donatien 8:0d1ec493842c 94
donatien 8:0d1ec493842c 95 private:
donatien 8:0d1ec493842c 96
donatien 8:0d1ec493842c 97 bool m_hasSwitched;
donatien 8:0d1ec493842c 98 int m_currentSerialIntf;
donatien 8:0d1ec493842c 99 int m_endpointsToFetch;
donatien 8:0d1ec493842c 100 };
donatien 8:0d1ec493842c 101
ashleymills 20:3abcf818be31 102 class VodafoneK3773Initializer : public WANDongleInitializer
donatien 18:7d5242aa7b95 103 {
donatien 18:7d5242aa7b95 104 public:
ashleymills 20:3abcf818be31 105 VodafoneK3773Initializer(USBHost* pHost);
donatien 18:7d5242aa7b95 106
donatien 18:7d5242aa7b95 107 virtual uint16_t getMSDVid();
donatien 18:7d5242aa7b95 108 virtual uint16_t getMSDPid();
donatien 18:7d5242aa7b95 109
donatien 18:7d5242aa7b95 110 virtual uint16_t getSerialVid();
donatien 18:7d5242aa7b95 111 virtual uint16_t getSerialPid();
donatien 18:7d5242aa7b95 112
donatien 18:7d5242aa7b95 113 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 18:7d5242aa7b95 114
donatien 18:7d5242aa7b95 115 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 18:7d5242aa7b95 116
donatien 18:7d5242aa7b95 117 virtual int getSerialPortCount();
donatien 18:7d5242aa7b95 118
donatien 18:7d5242aa7b95 119 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 18:7d5242aa7b95 120
donatien 18:7d5242aa7b95 121 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 122
donatien 18:7d5242aa7b95 123 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 124
donatien 18:7d5242aa7b95 125 virtual WAN_DONGLE_TYPE getType();
donatien 18:7d5242aa7b95 126
donatien 18:7d5242aa7b95 127 private:
donatien 18:7d5242aa7b95 128
donatien 18:7d5242aa7b95 129 bool m_hasSwitched;
donatien 18:7d5242aa7b95 130 int m_currentSerialIntf;
donatien 18:7d5242aa7b95 131 int m_endpointsToFetch;
donatien 18:7d5242aa7b95 132 };
donatien 18:7d5242aa7b95 133
donatien 8:0d1ec493842c 134 class VodafoneK3772ZInitializer : public WANDongleInitializer
donatien 8:0d1ec493842c 135 {
donatien 8:0d1ec493842c 136 public:
donatien 8:0d1ec493842c 137 VodafoneK3772ZInitializer(USBHost* pHost);
donatien 8:0d1ec493842c 138
donatien 8:0d1ec493842c 139 virtual uint16_t getMSDVid();
donatien 8:0d1ec493842c 140 virtual uint16_t getMSDPid();
donatien 8:0d1ec493842c 141
donatien 8:0d1ec493842c 142 virtual uint16_t getSerialVid();
donatien 8:0d1ec493842c 143 virtual uint16_t getSerialPid();
donatien 8:0d1ec493842c 144
donatien 8:0d1ec493842c 145 virtual bool switchMode(USBDeviceConnected* pDev);
donatien 8:0d1ec493842c 146
donatien 9:c9e9817c398c 147 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
donatien 8:0d1ec493842c 148
donatien 8:0d1ec493842c 149 virtual int getSerialPortCount();
donatien 8:0d1ec493842c 150
donatien 8:0d1ec493842c 151 virtual void setVidPid(uint16_t vid, uint16_t pid);
donatien 8:0d1ec493842c 152
donatien 8:0d1ec493842c 153 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 154
donatien 8:0d1ec493842c 155 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 156
donatien 8:0d1ec493842c 157 virtual WAN_DONGLE_TYPE getType();
donatien 8:0d1ec493842c 158
donatien 8:0d1ec493842c 159 private:
donatien 8:0d1ec493842c 160
donatien 8:0d1ec493842c 161 bool m_hasSwitched;
donatien 8:0d1ec493842c 162 int m_currentSerialIntf;
donatien 8:0d1ec493842c 163 int m_endpointsToFetch;
donatien 8:0d1ec493842c 164 };
donatien 8:0d1ec493842c 165
ashleymills 27:980fe31c14f7 166 class HuaweiMU509Initializer : public WANDongleInitializer
ashleymills 21:dcc8c866ccbb 167 {
ashleymills 21:dcc8c866ccbb 168 public:
ashleymills 27:980fe31c14f7 169 HuaweiMU509Initializer(USBHost* pHost);
ashleymills 21:dcc8c866ccbb 170
ashleymills 21:dcc8c866ccbb 171 virtual uint16_t getMSDVid();
ashleymills 21:dcc8c866ccbb 172 virtual uint16_t getMSDPid();
ashleymills 21:dcc8c866ccbb 173
ashleymills 21:dcc8c866ccbb 174 virtual uint16_t getSerialVid();
ashleymills 21:dcc8c866ccbb 175 virtual uint16_t getSerialPid();
ashleymills 21:dcc8c866ccbb 176
ashleymills 21:dcc8c866ccbb 177 virtual bool switchMode(USBDeviceConnected* pDev);
ashleymills 21:dcc8c866ccbb 178
ashleymills 21:dcc8c866ccbb 179 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
ashleymills 21:dcc8c866ccbb 180
ashleymills 21:dcc8c866ccbb 181 virtual int getSerialPortCount();
ashleymills 21:dcc8c866ccbb 182
ashleymills 21:dcc8c866ccbb 183 virtual void setVidPid(uint16_t vid, uint16_t pid);
ashleymills 21:dcc8c866ccbb 184
ashleymills 21:dcc8c866ccbb 185 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 186
ashleymills 21:dcc8c866ccbb 187 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 188
ashleymills 21:dcc8c866ccbb 189 virtual WAN_DONGLE_TYPE getType();
ashleymills 21:dcc8c866ccbb 190
ashleymills 21:dcc8c866ccbb 191 private:
ashleymills 21:dcc8c866ccbb 192
ashleymills 21:dcc8c866ccbb 193 int m_currentSerialIntf;
ashleymills 21:dcc8c866ccbb 194 int m_endpointsToFetch;
ashleymills 21:dcc8c866ccbb 195 };
ashleymills 21:dcc8c866ccbb 196
ashleymills 25:3184f71557bf 197 class VodafoneK3772Initializer : public WANDongleInitializer
ashleymills 25:3184f71557bf 198 {
ashleymills 25:3184f71557bf 199 public:
ashleymills 25:3184f71557bf 200 VodafoneK3772Initializer(USBHost* pHost);
ashleymills 25:3184f71557bf 201
ashleymills 25:3184f71557bf 202 virtual uint16_t getMSDVid();
ashleymills 25:3184f71557bf 203 virtual uint16_t getMSDPid();
ashleymills 25:3184f71557bf 204
ashleymills 25:3184f71557bf 205 virtual uint16_t getSerialVid();
ashleymills 25:3184f71557bf 206 virtual uint16_t getSerialPid();
ashleymills 25:3184f71557bf 207
ashleymills 25:3184f71557bf 208 virtual bool switchMode(USBDeviceConnected* pDev);
ashleymills 25:3184f71557bf 209
ashleymills 25:3184f71557bf 210 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
ashleymills 25:3184f71557bf 211
ashleymills 25:3184f71557bf 212 virtual int getSerialPortCount();
ashleymills 25:3184f71557bf 213
ashleymills 25:3184f71557bf 214 virtual void setVidPid(uint16_t vid, uint16_t pid);
ashleymills 25:3184f71557bf 215
ashleymills 25:3184f71557bf 216 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 217
ashleymills 25:3184f71557bf 218 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 219
ashleymills 25:3184f71557bf 220 virtual WAN_DONGLE_TYPE getType();
ashleymills 25:3184f71557bf 221
ashleymills 25:3184f71557bf 222 private:
ashleymills 25:3184f71557bf 223
ashleymills 25:3184f71557bf 224 bool m_hasSwitched;
ashleymills 25:3184f71557bf 225 int m_currentSerialIntf;
ashleymills 25:3184f71557bf 226 int m_endpointsToFetch;
ashleymills 25:3184f71557bf 227 };
ashleymills 25:3184f71557bf 228
ashleymills 27:980fe31c14f7 229 //-----------------------------------------------------------------------
ashleymills 27:980fe31c14f7 230 // mamm, u-blox Modem
ashleymills 27:980fe31c14f7 231 //-----------------------------------------------------------------------
ashleymills 27:980fe31c14f7 232
ashleymills 27:980fe31c14f7 233 class UbloxLISAU200Initializer : public WANDongleInitializer
ashleymills 27:980fe31c14f7 234 {
ashleymills 27:980fe31c14f7 235 public:
ashleymills 27:980fe31c14f7 236 UbloxLISAU200Initializer(USBHost* pHost);
ashleymills 27:980fe31c14f7 237
ashleymills 27:980fe31c14f7 238 virtual uint16_t getMSDVid();
ashleymills 27:980fe31c14f7 239 virtual uint16_t getMSDPid();
ashleymills 27:980fe31c14f7 240
ashleymills 27:980fe31c14f7 241 virtual uint16_t getSerialVid();
ashleymills 27:980fe31c14f7 242 virtual uint16_t getSerialPid();
ashleymills 27:980fe31c14f7 243
ashleymills 27:980fe31c14f7 244 virtual bool switchMode(USBDeviceConnected* pDev);
ashleymills 27:980fe31c14f7 245
ashleymills 27:980fe31c14f7 246 virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
ashleymills 27:980fe31c14f7 247
ashleymills 27:980fe31c14f7 248 virtual int getSerialPortCount();
ashleymills 27:980fe31c14f7 249
ashleymills 27:980fe31c14f7 250 virtual void setVidPid(uint16_t vid, uint16_t pid);
ashleymills 27:980fe31c14f7 251
ashleymills 27:980fe31c14f7 252 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 27:980fe31c14f7 253
ashleymills 27:980fe31c14f7 254 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
ashleymills 27:980fe31c14f7 255
ashleymills 27:980fe31c14f7 256 virtual WAN_DONGLE_TYPE getType();
ashleymills 27:980fe31c14f7 257
ashleymills 27:980fe31c14f7 258 private:
ashleymills 27:980fe31c14f7 259
ashleymills 27:980fe31c14f7 260 bool m_hasSwitched;
ashleymills 27:980fe31c14f7 261 int m_currentSerialIntf;
ashleymills 27:980fe31c14f7 262 int m_endpointsToFetch;
ashleymills 27:980fe31c14f7 263 };
ashleymills 27:980fe31c14f7 264
donatien 8:0d1ec493842c 265 #endif
ashleymills 25:3184f71557bf 266