|
1 // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of the License "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // e32/include/d32usbc.h |
|
15 // User side class definitions for USB Device support. |
|
16 // |
|
17 // |
|
18 |
|
19 /** |
|
20 @file d32usbc.h |
|
21 @publishedPartner |
|
22 @released |
|
23 */ |
|
24 |
|
25 #ifndef __D32USBC_H__ |
|
26 #define __D32USBC_H__ |
|
27 |
|
28 #include <e32ver.h> |
|
29 #include <usb.h> |
|
30 #include <d32usbcshared.h> |
|
31 |
|
32 |
|
33 |
|
34 /** @internalComponent |
|
35 */ |
|
36 enum TTransferType |
|
37 { |
|
38 ETransferTypeReadData, |
|
39 ETransferTypeReadPacket, |
|
40 ETransferTypeWrite, |
|
41 ETransferTypeNone, |
|
42 ETransferTypeReadOneOrMore, |
|
43 ETransferTypeReadUntilShort |
|
44 }; |
|
45 |
|
46 |
|
47 /** Available endpoints. At most only these are available per interface. |
|
48 */ |
|
49 enum TEndpointNumber |
|
50 { |
|
51 EEndpoint0 = 0, |
|
52 EEndpoint1 = 1, |
|
53 EEndpoint2 = 2, |
|
54 EEndpoint3 = 3, |
|
55 EEndpoint4 = 4, |
|
56 EEndpoint5 = 5 |
|
57 }; |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 /** Bandwidth indicators for an Interface |
|
63 |
|
64 @see RDevUsbcClient::SetInterface() |
|
65 */ |
|
66 enum TUsbcBandwidthPriority |
|
67 { |
|
68 /** Economical OUT buffering. */ |
|
69 EUsbcBandwidthOUTDefault = 0x00, |
|
70 /** More memory than Default for OUT buffering. */ |
|
71 EUsbcBandwidthOUTPlus1 = 0x01, |
|
72 /** More memory than Plus1 for OUT buffering. */ |
|
73 EUsbcBandwidthOUTPlus2 = 0x02, |
|
74 /** Maximum memory for OUT buffering. |
|
75 Use this value for high volume USB High-speed |
|
76 data transfers only, otherwise memory will be wasted. |
|
77 */ |
|
78 EUsbcBandwidthOUTMaximum = 0x03, |
|
79 // |
|
80 /** Economical IN buffering */ |
|
81 EUsbcBandwidthINDefault = 0x00, |
|
82 /** More memory than Default for IN buffering */ |
|
83 EUsbcBandwidthINPlus1 = 0x10, |
|
84 /** More memory than Plus1 for IN buffering */ |
|
85 EUsbcBandwidthINPlus2 = 0x20, |
|
86 /** Maximum memory for IN buffering. |
|
87 Use this value for high volume USB High-speed |
|
88 data transfers only, otherwise memory will be wasted. |
|
89 */ |
|
90 EUsbcBandwidthINMaximum = 0x30 |
|
91 }; |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 /** Bit positions of endpoints. |
|
100 |
|
101 @see RDevUsbcClient::EndpointStatusNotify() |
|
102 @see RDevUsbcClient::EndpointTransferCancel() |
|
103 |
|
104 Bit position of endpoint0. |
|
105 */ |
|
106 const TUint KUsbcEndpoint0Bit = 1<<EEndpoint0; |
|
107 /** Bit position of endpoint1. |
|
108 */ |
|
109 const TUint KUsbcEndpoint1Bit = 1<<EEndpoint1; |
|
110 /** Bit position of endpoint2. |
|
111 */ |
|
112 const TUint KUsbcEndpoint2Bit = 1<<EEndpoint2; |
|
113 /** Bit position of endpoint3. |
|
114 */ |
|
115 const TUint KUsbcEndpoint3Bit = 1<<EEndpoint3; |
|
116 /** Bit position of endpoint4. |
|
117 */ |
|
118 const TUint KUsbcEndpoint4Bit = 1<<EEndpoint4; |
|
119 /** Bit position of endpoint5. |
|
120 */ |
|
121 const TUint KUsbcEndpoint5Bit = 1<<EEndpoint5; |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 /** This must be filled in prior to a call to RDevUsbcClient::SetInterface(). |
|
131 */ |
|
132 class TUsbcInterfaceInfo |
|
133 { |
|
134 public: |
|
135 TUsbcInterfaceInfo(TInt aClass=0, TInt aSubClass=0, TInt aProtocol=0, |
|
136 TDesC16* aString=NULL, TUint aTotalEndpoints=0); |
|
137 public: |
|
138 /** The class, subclass and protocol that this interface supports. */ |
|
139 TUsbcClassInfo iClass; |
|
140 /** The description string for the interface. Used to construct the interface string descriptor. */ |
|
141 const TDesC16* iString; |
|
142 /** Total number of endpoints being requested (0-5). Endpoint 0 should not be included in this number. */ |
|
143 TUint iTotalEndpointsUsed; |
|
144 /** Desired properties of the endpoints requested. |
|
145 Do NOT include endpoint 0. |
|
146 APIs use endpoint numbers that are offsets into this array. |
|
147 */ |
|
148 TUsbcEndpointInfo iEndpointData[KMaxEndpointsPerClient]; |
|
149 /** 32 flag bits used for specifying miscellaneous Interface features. |
|
150 Currently defined are: |
|
151 - KUsbcInterfaceInfo_NoEp0RequestsPlease = 0x00000001 |
|
152 */ |
|
153 TUint32 iFeatureWord; |
|
154 }; |
|
155 |
|
156 |
|
157 /** Package buffer for a TUsbcInterfaceInfo object. |
|
158 |
|
159 @see TUsbcInterfaceInfo |
|
160 */ |
|
161 typedef TPckgBuf<TUsbcInterfaceInfo> TUsbcInterfaceInfoBuf; |
|
162 |
|
163 |
|
164 /** The user side handle to the USB client driver. |
|
165 */ |
|
166 class RDevUsbcClient : public RBusLogicalChannel |
|
167 { |
|
168 public: |
|
169 /** @internalComponent */ |
|
170 enum TVer |
|
171 { |
|
172 EMajorVersionNumber = 0, |
|
173 EMinorVersionNumber = 1, |
|
174 EBuildVersionNumber = KE32BuildVersionNumber |
|
175 }; |
|
176 |
|
177 enum TRequest |
|
178 { |
|
179 // Positive requests. |
|
180 ERequestEp0 = 0x0, |
|
181 ERequestEp1 = EEndpoint1, |
|
182 ERequestEp2 = EEndpoint2, |
|
183 ERequestEp3 = EEndpoint3, |
|
184 ERequestEp4 = EEndpoint4, |
|
185 ERequestEp5 = EEndpoint5, |
|
186 ERequestUnused = 6, |
|
187 ERequestAlternateDeviceStatusNotify = 7, |
|
188 ERequestReEnumerate = 8, |
|
189 ERequestEndpointStatusNotify = 9, |
|
190 // The cancel TRequest's are interpreted as bitmaps. As they're not mixed |
|
191 // with the previous ones, it doesn't matter if they have the same absolute |
|
192 // value as those. |
|
193 ERequestEp0Cancel = 1<<ERequestEp0, |
|
194 ERequestEp1Cancel = 1<<ERequestEp1, |
|
195 ERequestEp2Cancel = 1<<ERequestEp2, |
|
196 ERequestEp3Cancel = 1<<ERequestEp3, |
|
197 ERequestEp4Cancel = 1<<ERequestEp4, |
|
198 ERequestEp5Cancel = 1<<ERequestEp5, |
|
199 ERequestUnusedCancel = 1<<ERequestUnused, |
|
200 ERequestAllCancel = (ERequestEp0Cancel | ERequestEp1Cancel | |
|
201 ERequestEp2Cancel | ERequestEp3Cancel | |
|
202 ERequestEp4Cancel | ERequestEp5Cancel | |
|
203 ERequestUnusedCancel), |
|
204 ERequestAlternateDeviceStatusNotifyCancel = 1<<ERequestAlternateDeviceStatusNotify, |
|
205 ERequestReEnumerateCancel = 1<<ERequestReEnumerate, |
|
206 ERequestEndpointStatusNotifyCancel = 1<<ERequestEndpointStatusNotify, |
|
207 ERequestOtgFeaturesNotify = 10, |
|
208 ERequestOtgFeaturesNotifyCancel = 1<<ERequestOtgFeaturesNotify, |
|
209 }; |
|
210 |
|
211 enum TControl |
|
212 { |
|
213 // Changing the order of these enums will break BC. |
|
214 EControlEndpointZeroRequestError, // 0 |
|
215 EControlEndpointCaps, |
|
216 EControlDeviceCaps, |
|
217 EControlGetAlternateSetting, |
|
218 EControlDeviceStatus, |
|
219 EControlEndpointStatus, |
|
220 EControlSetInterface, |
|
221 EControlReleaseInterface, |
|
222 EControlQueryReceiveBuffer, |
|
223 EControlSendEp0StatusPacket, // 9 |
|
224 // |
|
225 EControlHaltEndpoint, // 10 |
|
226 EControlClearHaltEndpoint, |
|
227 EControlSetDeviceControl, |
|
228 EControlReleaseDeviceControl, |
|
229 EControlEndpointZeroMaxPacketSizes, |
|
230 EControlSetEndpointZeroMaxPacketSize, |
|
231 EControlGetDeviceDescriptor, |
|
232 EControlSetDeviceDescriptor, |
|
233 EControlGetDeviceDescriptorSize, |
|
234 EControlGetConfigurationDescriptor, // 19 |
|
235 // |
|
236 EControlSetConfigurationDescriptor, // 20 |
|
237 EControlGetConfigurationDescriptorSize, |
|
238 EControlGetInterfaceDescriptor, |
|
239 EControlSetInterfaceDescriptor, |
|
240 EControlGetInterfaceDescriptorSize, |
|
241 EControlGetEndpointDescriptor, |
|
242 EControlSetEndpointDescriptor, |
|
243 EControlGetEndpointDescriptorSize, |
|
244 EControlGetCSInterfaceDescriptor, |
|
245 EControlSetCSInterfaceDescriptor, // 29 |
|
246 // |
|
247 EControlGetCSInterfaceDescriptorSize, // 30 |
|
248 EControlGetCSEndpointDescriptor, |
|
249 EControlSetCSEndpointDescriptor, |
|
250 EControlGetCSEndpointDescriptorSize, |
|
251 EControlSignalRemoteWakeup, |
|
252 EControlGetStringDescriptorLangId, |
|
253 EControlSetStringDescriptorLangId, |
|
254 EControlGetManufacturerStringDescriptor, |
|
255 EControlSetManufacturerStringDescriptor, |
|
256 EControlRemoveManufacturerStringDescriptor, // 39 |
|
257 // |
|
258 EControlGetProductStringDescriptor, // 40 |
|
259 EControlSetProductStringDescriptor, |
|
260 EControlRemoveProductStringDescriptor, |
|
261 EControlGetSerialNumberStringDescriptor, |
|
262 EControlSetSerialNumberStringDescriptor, |
|
263 EControlRemoveSerialNumberStringDescriptor, |
|
264 EControlGetConfigurationStringDescriptor, |
|
265 EControlSetConfigurationStringDescriptor, |
|
266 EControlRemoveConfigurationStringDescriptor, |
|
267 EControlDeviceDisconnectFromHost, // 49 |
|
268 // |
|
269 EControlDeviceConnectToHost, // 50 |
|
270 EControlDevicePowerUpUdc, |
|
271 EControlDumpRegisters, |
|
272 EControlSetInterface1, // (not used) |
|
273 EControlAllocateEndpointResource, |
|
274 EControlDeAllocateEndpointResource, |
|
275 EControlQueryEndpointResourceUse, |
|
276 EControlGetEndpointZeroMaxPacketSize, |
|
277 EControlGetDeviceQualifierDescriptor, |
|
278 EControlSetDeviceQualifierDescriptor, // 59 |
|
279 // |
|
280 EControlGetOtherSpeedConfigurationDescriptor, // 60 |
|
281 EControlSetOtherSpeedConfigurationDescriptor, |
|
282 EControlCurrentlyUsingHighSpeed, |
|
283 EControlSetStringDescriptor, |
|
284 EControlGetStringDescriptor, |
|
285 EControlRemoveStringDescriptor, |
|
286 EControlSetOtgDescriptor, |
|
287 EControlGetOtgDescriptor, |
|
288 EControlGetOtgFeatures |
|
289 }; |
|
290 |
|
291 public: |
|
292 |
|
293 #ifndef __KERNEL_MODE__ |
|
294 |
|
295 /** Opens a channel. |
|
296 |
|
297 @param aUnit This should be 0 (zero). |
|
298 |
|
299 @return KErrNone if successful. |
|
300 */ |
|
301 inline TInt Open(TInt aUnit); |
|
302 |
|
303 inline TVersion VersionRequired() const; |
|
304 |
|
305 /** Stalls ep0 to signal command fault to the host. |
|
306 |
|
307 @return KErrNone if successful. |
|
308 */ |
|
309 inline TInt EndpointZeroRequestError(); |
|
310 |
|
311 /** Retrieves the capabilities of all the endpoints on the device. |
|
312 |
|
313 Suggested use is as follows: |
|
314 |
|
315 @code |
|
316 TUsbcEndpointData data[KUsbcMaxEndpoints]; |
|
317 TPtr8 dataPtr(reinterpret_cast<TUint8*>(data), sizeof(data), sizeof(data)); |
|
318 ret = usbPort.EndpointCaps(dataPtr); |
|
319 @endcode |
|
320 |
|
321 @param aEpCapsBuf a descriptor encapsulating an array of TUsbcEndpointData. |
|
322 |
|
323 @return KErrNone if successful. |
|
324 */ |
|
325 inline TInt EndpointCaps(TDes8& aEpCapsBuf); |
|
326 |
|
327 /** Retrieves the capabilities of the USB device. |
|
328 |
|
329 @see TUsbDeviceCaps |
|
330 |
|
331 @param aDevCapsBuf a TUsbDeviceCaps object. |
|
332 |
|
333 @return KErrNone if successful. |
|
334 */ |
|
335 inline TInt DeviceCaps(TUsbDeviceCaps& aDevCapsBuf); |
|
336 |
|
337 /** Copies the current alternate setting for this interface into aInterfaceNumber |
|
338 For USB Interfaces whose main interface is active, this will be 0 (zero). |
|
339 |
|
340 @param aInterfaceNumber current alternate setting for this interface is copied into this. |
|
341 |
|
342 @return KErrNone if successful. |
|
343 */ |
|
344 inline TInt GetAlternateSetting(TInt& aInterfaceNumber); |
|
345 |
|
346 /** Copies the current device status into aDeviceStatus. |
|
347 |
|
348 @param aDeviceStatus current device status is copied into this. |
|
349 |
|
350 @return KErrNone if successful |
|
351 */ |
|
352 inline TInt DeviceStatus(TUsbcDeviceState& aDeviceStatus); |
|
353 |
|
354 /** Copies the current endpoint status into aEndpointStatus. |
|
355 |
|
356 @param aEndpoint endpoint number valid for the current alternate setting. |
|
357 @param aEndpointStatus the current endpoint status, might be stalled, not stalled or unknown. |
|
358 |
|
359 @return KErrNone if successful. |
|
360 */ |
|
361 inline TInt EndpointStatus(TEndpointNumber aEndpoint, TEndpointState& aEndpointStatus); |
|
362 |
|
363 /** Copies the number of bytes available in the aEndpoint read buffer into aNumberOfBytes. |
|
364 |
|
365 @param aEndpoint endpoint number valid for the current alternate setting. |
|
366 @param aNumberOfBytes number of bytes available in the aEndpoint read buffer. |
|
367 |
|
368 @return KErrNone if successful. |
|
369 */ |
|
370 inline TInt QueryReceiveBuffer(TEndpointNumber aEndpoint, TInt& aNumberOfBytes); |
|
371 |
|
372 /** Requests that a zero length status packet be sent to the host in response |
|
373 to a class or vendor specific ep0 SETUP packet. |
|
374 |
|
375 @return KErrNone if successful. |
|
376 */ |
|
377 inline TInt SendEp0StatusPacket(); |
|
378 |
|
379 /** Stalls endpoint aEndpoint, usually to indicate an error condition with a previous command. |
|
380 The host will normally send a SET_FEATURE command on ep0 to acknowledge and clear the stall. |
|
381 |
|
382 @return KErrNone if successful. |
|
383 */ |
|
384 inline TInt HaltEndpoint(TEndpointNumber aEndpoint); |
|
385 |
|
386 /** Clears the stall condition on endpoint aEndpoint. This is inluded for symmetry and test purposes. |
|
387 |
|
388 @return KErrNone if successful. |
|
389 */ |
|
390 inline TInt ClearHaltEndpoint(TEndpointNumber aEndpoint); |
|
391 |
|
392 /** Requests that device control be allocated to this channel. |
|
393 |
|
394 @return KErrNone if successful. |
|
395 */ |
|
396 inline TInt SetDeviceControl(); |
|
397 |
|
398 /** Relinquishes device control previously allocated to this channel. |
|
399 |
|
400 @return KErrNone if successful. |
|
401 */ |
|
402 inline TInt ReleaseDeviceControl(); |
|
403 |
|
404 /** Returns a bitmap of available ep0 maximum packet sizes. |
|
405 |
|
406 @return bitmap of available ep0 maximum packet sizes. |
|
407 */ |
|
408 inline TUint EndpointZeroMaxPacketSizes(); |
|
409 |
|
410 /** Requests that a maximum packet size of aMaxPacketSize be set on ep0. |
|
411 |
|
412 @param aMaxPacketSize The maximum packet size. |
|
413 |
|
414 @return KErrNone if successful. |
|
415 */ |
|
416 inline TInt SetEndpointZeroMaxPacketSize(TInt aMaxPacketSize); |
|
417 |
|
418 /** Queries the current maximum packet size on ep0. |
|
419 |
|
420 @return The currently set maximum packet size on ep0. |
|
421 */ |
|
422 inline TInt GetEndpointZeroMaxPacketSize(); |
|
423 |
|
424 /** Copies the current device descriptor into aDeviceDescriptor. |
|
425 |
|
426 @param aDeviceDescriptor Receives the current device descriptor. |
|
427 |
|
428 @return KErrNone if successful. |
|
429 */ |
|
430 inline TInt GetDeviceDescriptor(TDes8& aDeviceDescriptor); |
|
431 |
|
432 /** Sets the contents of aDeviceDescriptor to be the current device descriptor. |
|
433 |
|
434 @param aDeviceDescriptor contains the device descriptor. |
|
435 |
|
436 @return KErrNone if successful. |
|
437 */ |
|
438 inline TInt SetDeviceDescriptor(const TDesC8& aDeviceDescriptor); |
|
439 |
|
440 /** Gets the size of the current device descriptor. This is unlikely to be anything other than 9. |
|
441 |
|
442 @param aSize receives the size of the current device descriptor. |
|
443 |
|
444 @return KErrNone if successful. |
|
445 */ |
|
446 inline TInt GetDeviceDescriptorSize(TInt& aSize); |
|
447 |
|
448 /** Copies the current configuration descriptor into aConfigurationDescriptor. |
|
449 |
|
450 @param aConfigurationDescriptor Receives the current configuration descriptor. |
|
451 |
|
452 @return KErrNone if successful. |
|
453 */ |
|
454 inline TInt GetConfigurationDescriptor(TDes8& aConfigurationDescriptor); |
|
455 |
|
456 /** Sets the contents of aConfigurationDescriptor to be the current configuration descriptor. |
|
457 |
|
458 @param aConfigurationDescriptor contains the configuration descriptor. |
|
459 |
|
460 @return KErrNone if successful. |
|
461 */ |
|
462 inline TInt SetConfigurationDescriptor(const TDesC8& aConfigurationDescriptor); |
|
463 |
|
464 /** Gets the size of the current configuration descriptor. |
|
465 |
|
466 @param aSize receives the size of the current configuration descriptor. |
|
467 |
|
468 @return KErrNone if successful. |
|
469 */ |
|
470 inline TInt GetConfigurationDescriptorSize(TInt& aSize); |
|
471 |
|
472 /** Copies the interface descriptor into aInterfaceDescriptor for the interface with alternate |
|
473 setting aSettingNumber, 0 for the main interface. |
|
474 |
|
475 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
476 @param aInterfaceDescriptor Receives the interface descriptor. |
|
477 |
|
478 @return KErrNone if successful. |
|
479 */ |
|
480 inline TInt GetInterfaceDescriptor(TInt aSettingNumber, TDes8& aInterfaceDescriptor); |
|
481 |
|
482 /** Sets the interface descriptor contained in aInterfaceDescriptor for the interface with |
|
483 alternate setting aSettingNumber, 0 for the main interface, for transmission to the host |
|
484 during enumeration. |
|
485 |
|
486 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
487 @param aInterfaceDescriptor Contains the interface descriptor to be set. |
|
488 |
|
489 @return KErrNone if successful. |
|
490 */ |
|
491 inline TInt SetInterfaceDescriptor(TInt aSettingNumber, const TDesC8& aInterfaceDescriptor); |
|
492 |
|
493 /** Copies the size of the interface descriptor for the interface with alternate |
|
494 setting aSettingNumber, 0 for the main interface, into aSize. |
|
495 |
|
496 @param aSettingNumber The alternate setting. |
|
497 @param aSize receives the size of the interface descriptor. |
|
498 |
|
499 @return KErrNone if successful. |
|
500 */ |
|
501 inline TInt GetInterfaceDescriptorSize(TInt aSettingNumber, TInt& aSize); |
|
502 |
|
503 /** Copies the endpoint descriptor for logical endpoint number aEndpointNumber into aEndpointDescriptor |
|
504 for the interface with alternate setting aSettingNumber, 0 for the main interface. |
|
505 |
|
506 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
507 @param aEndpointNumber. |
|
508 @param aEndpointDescriptor Receives the endpoint descriptor. |
|
509 |
|
510 @return KErrNone if successful. |
|
511 */ |
|
512 inline TInt GetEndpointDescriptor(TInt aSettingNumber, TInt aEndpointNumber, TDes8& aEndpointDescriptor); |
|
513 |
|
514 /** Sets the endpoint descriptor for logical endpoint number aEndpointNumber contained in |
|
515 aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main interface, |
|
516 for transmission to the host during enumeration. |
|
517 |
|
518 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
519 @param aEndpointNumber Valid endpoint number on this interface. |
|
520 @param aEndpointDescriptor Contains the endpoint descriptor to be set. |
|
521 |
|
522 @return KErrNone if successful. |
|
523 */ |
|
524 inline TInt SetEndpointDescriptor(TInt aSettingNumber, TInt aEndpointNumber, |
|
525 const TDesC8& aEndpointDescriptor); |
|
526 |
|
527 /** Copies the size of the endpoint descriptor for logical endpoint number aEndpointNumber for the |
|
528 interface with alternate setting aSettingNumber, 0 for the main interface, into aSize. |
|
529 |
|
530 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
531 @param aEndpointNumber Valid endpoint number on this interface. |
|
532 @param aSize receives the size of the endpoint descriptor. |
|
533 |
|
534 @return KErrNone if successful. |
|
535 */ |
|
536 inline TInt GetEndpointDescriptorSize(TInt aSettingNumber, TInt aEndpointNumber, TInt& aSize); |
|
537 |
|
538 /** Get OTG descriptor size |
|
539 |
|
540 @param aSize TInt reference which contains OTG descriptor size on return |
|
541 */ |
|
542 inline void GetOtgDescriptorSize(TInt& aSize); |
|
543 |
|
544 /** Get OTG descriptor of USB on-the-go feature |
|
545 |
|
546 @param aOtgDesc User-side buffer to store copy of descriptor |
|
547 |
|
548 @return KErrNone if successful |
|
549 */ |
|
550 inline TInt GetOtgDescriptor(TDes8& aOtgDesc); |
|
551 |
|
552 /** Set OTG descriptor by user to enable/disable USB on-the-go feature |
|
553 |
|
554 @param aOtgDesc Descriptor buffer containing OTG features |
|
555 |
|
556 @return KErrNone if successful |
|
557 */ |
|
558 inline TInt SetOtgDescriptor(const TDesC8& aOtgDesc); |
|
559 |
|
560 /** Copies the current device_qualifier descriptor into aDescriptor. |
|
561 |
|
562 @param aDescriptor Receives the current device_qualifier descriptor. |
|
563 |
|
564 @return KErrNone if successful. |
|
565 */ |
|
566 inline TInt GetDeviceQualifierDescriptor(TDes8& aDescriptor); |
|
567 |
|
568 /** Sets the device_qualifier descriptor to the contents of aDescriptor. |
|
569 |
|
570 @param aDescriptor contains the new device_qualifier descriptor. |
|
571 |
|
572 @return KErrNone if successful. |
|
573 */ |
|
574 inline TInt SetDeviceQualifierDescriptor(const TDesC8& aDescriptor); |
|
575 |
|
576 /** Copies the current other_speed_configuration descriptor into aDescriptor. |
|
577 |
|
578 @param aDescriptor Receives the current other_speed_configuration descriptor. |
|
579 |
|
580 @return KErrNone if successful. |
|
581 */ |
|
582 inline TInt GetOtherSpeedConfigurationDescriptor(TDes8& aDescriptor); |
|
583 |
|
584 /** Sets the other_speed_configuration descriptor to the contents of aDescriptor. |
|
585 |
|
586 @param aDescriptor contains the new other_speed_configuration descriptor. |
|
587 |
|
588 @return KErrNone if successful. |
|
589 */ |
|
590 inline TInt SetOtherSpeedConfigurationDescriptor(const TDesC8& aDescriptor); |
|
591 |
|
592 /** Copies the class specific interface descriptor block into aInterfaceDescriptor for the interface |
|
593 with alternate setting aSettingNumber, 0 for the main interface. |
|
594 |
|
595 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
596 @param aInterfaceDescriptor Contains the interface descriptor to be set. |
|
597 |
|
598 @return KErrNone if successful. |
|
599 */ |
|
600 inline TInt GetCSInterfaceDescriptorBlock(TInt aSettingNumber, TDes8& aInterfaceDescriptor); |
|
601 |
|
602 /** aSettingNumber is the alternate interface setting, 0 for the main interface, that the descriptor block |
|
603 aDes should be attached to. aDes is a block of data containing at least one class specific descriptor |
|
604 for transmission during enumeration after the class interface descriptor (or alternate interface |
|
605 descriptor) has been sent, but before the endpoint descriptors belonging to this interface are sent. |
|
606 aDes may contain as many descriptors as are necessary or only 1. SetCSInterfaceDescriptorBlock() |
|
607 should be called at any time after SetInterface() has been called to establish a main interface or an |
|
608 alternate interface. More than one call may be made - the data blocks will be concatenated prior to |
|
609 sending. No checking or validation of the contents of aDes will be made and it is the caller's |
|
610 responsibility to ensure that the data supplied is correct and appropriate to the interface identified |
|
611 by aSettingNumber. |
|
612 |
|
613 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
614 @param aInterfaceDescriptor Contains the interface descriptor to be set. |
|
615 |
|
616 @return KErrNone if successful. |
|
617 */ |
|
618 inline TInt SetCSInterfaceDescriptorBlock(TInt aSettingNumber, const TDesC8& aInterfaceDescriptor); |
|
619 |
|
620 /** Copies the size of the class specific interface descriptor block for the interface with alternate |
|
621 setting aSettingNumber, 0 for the main interface, into aSize. |
|
622 |
|
623 @param aSettingNumber The alternate setting number. |
|
624 @param aSize receives the size of the interface descriptor. |
|
625 |
|
626 @return KErrNone if successful. |
|
627 */ |
|
628 inline TInt GetCSInterfaceDescriptorBlockSize(TInt aSettingNumber, TInt& aSize); |
|
629 |
|
630 /** Copies the class specific endpoint descriptor for logical endpoint number aEndpointNumber |
|
631 into aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main |
|
632 interface. |
|
633 |
|
634 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
635 @param aEndpointNumber Valid endpoint number on this interface. |
|
636 @param aEndpointDescriptor Receives the endpoint descriptor. |
|
637 |
|
638 @return KErrNone if successful. |
|
639 */ |
|
640 inline TInt GetCSEndpointDescriptorBlock(TInt aSettingNumber, TInt aEndpointNumber, |
|
641 TDes8& aEndpointDescriptor); |
|
642 |
|
643 /** Sets the class specific endpoint descriptor for logical endpoint number aEndpointNumber contained in |
|
644 aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main interface, |
|
645 for transmission to the host during enumeration. |
|
646 |
|
647 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
648 @param aEndpointNumber Valid endpoint number on this interface. |
|
649 @param aEndpointDescriptor Contains the endpoint descriptor to be set. |
|
650 |
|
651 @return KErrNone if successful. |
|
652 */ |
|
653 inline TInt SetCSEndpointDescriptorBlock(TInt aSettingNumber, TInt aEndpointNumber, |
|
654 const TDesC8& aEndpointDescriptor); |
|
655 |
|
656 /** Copies the size of the class specific endpoint descriptor block for logical endpoint number |
|
657 aEndpointNumber for the interface with alternate setting aSettingNumber, 0 for the main interface, |
|
658 into aSize. |
|
659 |
|
660 @param aSettingNumber Alternate setting number on the interface, 0 for the main interface. |
|
661 @param aEndpointNumber Valid endpoint number on this interface. |
|
662 @param aSize On return, contains the size of the class specific endpoint descriptor block. |
|
663 |
|
664 @return KErrNone if successful. |
|
665 */ |
|
666 inline TInt GetCSEndpointDescriptorBlockSize(TInt aSettingNumber, TInt aEndpointNumber, TInt& aSize); |
|
667 |
|
668 /** Generates a Remote Wakeup bus condition |
|
669 The capability of the device to generate Remote Wakeup signalling is enquired in |
|
670 RDevUsbcClient::DeviceCaps. |
|
671 |
|
672 @return KErrNone if this signalling is possible and the signal has been generated. |
|
673 */ |
|
674 inline TInt SignalRemoteWakeup(); |
|
675 |
|
676 /** Simulates a physical removal of the USB cable by disabling the D+/- pull-ups.The iConnect member of |
|
677 TUsbDeviceCapsV01, returned by RDevUsbcClient::DeviceCaps(), indicates whether this functionality is |
|
678 supported. |
|
679 |
|
680 @return KErrNone if successful. |
|
681 */ |
|
682 inline TInt DeviceDisconnectFromHost(); |
|
683 |
|
684 /** Simulates a physical insertion of the USB cable by enabling the D+/- pull-ups.The iConnect member |
|
685 of TUsbDeviceCapsV01, returned by RDevUsbcClient::DeviceCaps(), indicates whether this functionality |
|
686 is supported. |
|
687 |
|
688 @return KErrNone if successful. |
|
689 */ |
|
690 inline TInt DeviceConnectToHost(); |
|
691 |
|
692 /** Powers up the UDC and connects it to the bus if one or more interfaces exist. |
|
693 |
|
694 @return KErrNone if UDC successfully powered up, KErrNotReady if no |
|
695 interfaces have been registered yet, KErrHardwareNotAvailable if UDC |
|
696 couldn't be activated. |
|
697 */ |
|
698 inline TInt PowerUpUdc(); |
|
699 |
|
700 /** Enquires about the current operating speed of the UDC. |
|
701 |
|
702 @return ETrue if the UDC is currently operating at High speed, EFalse otherwise. |
|
703 */ |
|
704 inline TBool CurrentlyUsingHighSpeed(); |
|
705 |
|
706 /** Allocates the use of aResource to aEndpoint. it will be used from when the current bus transfer has been |
|
707 completed. |
|
708 |
|
709 @param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint |
|
710 behaviour. aResource is not a bitmap and TEndpointResource values should not be combined. |
|
711 @param aEndpoint The endpoint number to which the resource is to be allocated. |
|
712 |
|
713 @return KErrNone if successful, KErrInUse if the resource is already consumed and cannot be allocated, |
|
714 KErrNotSupported if the endpoint does not support the resource requested. |
|
715 |
|
716 @publishedPartner @deprecated |
|
717 |
|
718 @see TUsbcEndpointInfo |
|
719 */ |
|
720 inline TInt AllocateEndpointResource(TInt aEndpoint, TUsbcEndpointResource aResource); |
|
721 |
|
722 /** Deallocates the use of aResource aEndpoint or ends a specified endpoint behaviour. |
|
723 |
|
724 @param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint |
|
725 behaviour. aResource is not a bitmap and TEndpointResource values should not be combined. |
|
726 @param aEndpoint The endpoint number from which the resource is to be removed. |
|
727 |
|
728 @return KErrNone if the resource has been successfully deallocated, KErrNotSupported if the endpoint |
|
729 does not support the resource requested. |
|
730 |
|
731 @publishedPartner @deprecated |
|
732 |
|
733 @see TUsbcEndpointInfo |
|
734 */ |
|
735 inline TInt DeAllocateEndpointResource(TInt aEndpoint, TUsbcEndpointResource aResource); |
|
736 |
|
737 /** Queries endpoint resource use. |
|
738 |
|
739 @param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint |
|
740 behaviour. aResource is not a bitmap and TEndpointResource values should not be combined. |
|
741 @param aEndpoint The endpoint number at which the resource is to be queried. |
|
742 |
|
743 @return ETrue is the specified resource is in use at the endpoint and EFalse if not. |
|
744 */ |
|
745 inline TBool QueryEndpointResourceUse(TInt aEndpoint, TUsbcEndpointResource aResource); |
|
746 |
|
747 /** Request (i.e. claim for this channel) up to five endpoints and set the class type for this USB |
|
748 interface. 'aInterfaceData' is a package buffer which describes the interface and all the endpoints |
|
749 being requested by the driver for this interface. |
|
750 |
|
751 @param aInterfaceNumber Distinguishes between alternate interfaces. If these are not be used then this |
|
752 should always be zero. If this parameter is used, then its value must be one more than that of the |
|
753 proceeding alternate interface. |
|
754 @param aInterfaceData a package buffer which describes the interface and all the endpoints being |
|
755 requested by the driver for this interface. |
|
756 @param aBandwidthPriority is a bitmap combining the required IN and OUT priorities. Values are in the |
|
757 range [0,3] from the lowest priority bandwidth, 0, to the highest 3 and are separately specified for |
|
758 IN and OUT endpoints. Interfaces requiring higher bandwidth are allocated significantly more buffering |
|
759 than low bandwidth interfaces. Interfaces should not be given a higher bandwidth priority than they |
|
760 require. |
|
761 |
|
762 @return KErrInUse if any of the endpoints being requested have already been claimed by another channel |
|
763 KErrNotSupported if an endpoint with all of the specified properties is not supported on this |
|
764 platform. KErrNoMemory if insufficient memory is available to complete the operation. |
|
765 */ |
|
766 inline TInt SetInterface(TInt aInterfaceNumber, TUsbcInterfaceInfoBuf& aInterfaceData, |
|
767 TUint32 aBandwidthPriority = |
|
768 (EUsbcBandwidthOUTDefault | EUsbcBandwidthINDefault)); |
|
769 |
|
770 /** Release an interface previously claimed by this channel. Alternate interfaces need to be released |
|
771 in strict descending order, starting with the last (i.e. highest numbered) one. |
|
772 It is not necessary to release an interface that wasn't successfully requested. |
|
773 |
|
774 @param aInterfaceNumber Specifies the alternate setting number 'aInterfaceNum' of the interface to be |
|
775 released. |
|
776 |
|
777 @return KErrNone if successful. KErrArgument if the alternate setting doesn't exist or is released out |
|
778 of order. |
|
779 */ |
|
780 inline TInt ReleaseInterface(TInt aInterfaceNumber); |
|
781 |
|
782 /** Copies the current string descriptor language ID (LANGID) code into the aLangId argument. Even though |
|
783 the USB spec allows for the existence of a whole array of LANGID codes, we only support one. |
|
784 |
|
785 @param aLangId receives the LANGID code. |
|
786 |
|
787 @return KErrNone if successful, KErrArgument if problem with argument (memory cannot be written to, etc.). |
|
788 */ |
|
789 inline TInt GetStringDescriptorLangId(TUint16& aLangId); |
|
790 |
|
791 /** Sets the string descriptor language ID (LANGID). Even though the USB spec allows for the existence of |
|
792 a whole array of LANGID codes, we only support one. |
|
793 |
|
794 @param aLangId the LANGID code to be set. |
|
795 |
|
796 @return KErrNone if successful. |
|
797 */ |
|
798 inline TInt SetStringDescriptorLangId(TUint16 aLangId); |
|
799 |
|
800 /** Copies the string descriptor identified by the iManufacturer index field of the Standard Device |
|
801 Descriptor into the aString argument. |
|
802 |
|
803 @param aString receives manufacturer string. |
|
804 |
|
805 @return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire |
|
806 descriptor, KErrNotFound if the string descriptor couldn't be found. |
|
807 */ |
|
808 inline TInt GetManufacturerStringDescriptor(TDes16& aString); |
|
809 |
|
810 /** Sets the string descriptor identified by the iManufacturer index field of the Standard Device |
|
811 Descriptor to the aString argument. |
|
812 |
|
813 @param aString Contains the new manufacturer string descriptor. |
|
814 |
|
815 @return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from |
|
816 aString (in which case the old string descriptor will be preserved). |
|
817 */ |
|
818 inline TInt SetManufacturerStringDescriptor(const TDesC16& aString); |
|
819 |
|
820 /** Removes (deletes) the string descriptor identified by the iManufacturer index field of the Standard |
|
821 Device Descriptor and sets that field to zero. |
|
822 |
|
823 @return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found. |
|
824 */ |
|
825 inline TInt RemoveManufacturerStringDescriptor(); |
|
826 |
|
827 /** Retrieves the string descriptor identified by the iProduct index field of the Standard Device |
|
828 Descriptor into the aString argument. |
|
829 |
|
830 @param aString receives product string. |
|
831 |
|
832 @return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire |
|
833 descriptor, KErrNotFound if the string descriptor couldn't be found. |
|
834 */ |
|
835 inline TInt GetProductStringDescriptor(TDes16& aString); |
|
836 |
|
837 /** Sets the string descriptor identified by the iProduct index field of the Standard Device Descriptor to |
|
838 the aString argument. |
|
839 |
|
840 @param aString Contains the new product string descriptor. |
|
841 |
|
842 @return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from |
|
843 aString (in which case the old string descriptor will be preserved). |
|
844 */ |
|
845 inline TInt SetProductStringDescriptor(const TDesC16& aString); |
|
846 |
|
847 /** Removes (deletes) the string descriptor identified by the iProduct index field of the Standard Device |
|
848 Descriptor and sets that field to zero. |
|
849 |
|
850 @return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found. |
|
851 */ |
|
852 inline TInt RemoveProductStringDescriptor(); |
|
853 |
|
854 /** Retrieves the string descriptor identified by the iSerialNumber index field of the Standard Device |
|
855 Descriptor into the aString argument. |
|
856 |
|
857 @param aString receives product string. |
|
858 |
|
859 @return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire |
|
860 descriptor, KErrNotFound if the string descriptor couldn't be found. |
|
861 */ |
|
862 inline TInt GetSerialNumberStringDescriptor(TDes16& aString); |
|
863 |
|
864 /** Sets the string descriptor identified by the iSerialNumber index field of the Standard Device |
|
865 Descriptor to the aString argument. |
|
866 |
|
867 @param aString Contains the new serial number string descriptor. |
|
868 |
|
869 @return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from |
|
870 aString (in which case the old string descriptor will be preserved). |
|
871 */ |
|
872 inline TInt SetSerialNumberStringDescriptor(const TDesC16& aString); |
|
873 |
|
874 /** Removes (deletes) the string descriptor identified by the iSerialNumber index field of the Standard |
|
875 Device Descriptor and sets that field to zero. |
|
876 |
|
877 @return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found. |
|
878 */ |
|
879 inline TInt RemoveSerialNumberStringDescriptor(); |
|
880 |
|
881 /** Retrieves the string descriptor identified by the iConfiguration index field of the (first) Standard |
|
882 Configuration Descriptor into the aString argument. |
|
883 |
|
884 @param aString receives configuration string. |
|
885 |
|
886 @return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire |
|
887 descriptor, KErrNotFound if the string descriptor couldn't be found. |
|
888 */ |
|
889 inline TInt GetConfigurationStringDescriptor(TDes16& aString); |
|
890 |
|
891 /** Sets the string descriptor identified by the iConfiguration index field of the Standard Configuration |
|
892 Descriptor to the aString argument. |
|
893 |
|
894 @param aString Contains the new serial number string descriptor. |
|
895 |
|
896 @return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from |
|
897 aString (in which case the old string descriptor will be preserved). |
|
898 */ |
|
899 inline TInt SetConfigurationStringDescriptor(const TDesC16& aString); |
|
900 |
|
901 /** Removes (deletes) the string descriptor identified by the iConfiguration index field of the Standard |
|
902 Configuration Descriptor and sets that field to zero. |
|
903 |
|
904 @return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found. |
|
905 */ |
|
906 inline TInt RemoveConfigurationStringDescriptor(); |
|
907 |
|
908 /** Copies the string of the USB string descriptor at the specified index in the string descriptor array |
|
909 into the aString argument. |
|
910 |
|
911 Although this function can also be used for it, for querying most standard string descriptors |
|
912 there exists a set of dedicated access functions. |
|
913 |
|
914 @see RDevUsbcClient::GetStringDescriptorLangId |
|
915 @see RDevUsbcClient::GetManufacturerStringDescriptor |
|
916 @see RDevUsbcClient::GetProductStringDescriptor |
|
917 @see RDevUsbcClient::GetSerialNumberStringDescriptor |
|
918 @see RDevUsbcClient::GetConfigurationStringDescriptor |
|
919 |
|
920 @param aIndex The position of the string descriptor in the string descriptor array. |
|
921 @param aString The target location for the string descriptor copy. |
|
922 |
|
923 @return KErrNone if successful, KErrNotFound if no string descriptor exists at the specified index, |
|
924 KErrArgument if MaxLength() of aString is too small to hold the entire descriptor. |
|
925 */ |
|
926 inline TInt GetStringDescriptor(TUint8 aIndex, TDes16& aString); |
|
927 |
|
928 /** Sets the aString argument to be the string of a USB string descriptor at the specified index in the |
|
929 string descriptor array. If a string descriptor already exists at that position then its string will |
|
930 be replaced. |
|
931 |
|
932 Care should be taken, when choosing aIndex, not to inadvertently overwrite one of the standard |
|
933 string descriptors. For their manipulation there exists a set of dedicated access functions. |
|
934 |
|
935 @see RDevUsbcClient::SetStringDescriptorLangId |
|
936 @see RDevUsbcClient::SetManufacturerStringDescriptor |
|
937 @see RDevUsbcClient::SetProductStringDescriptor |
|
938 @see RDevUsbcClient::SetSerialNumberStringDescriptor |
|
939 @see RDevUsbcClient::SetConfigurationStringDescriptor |
|
940 |
|
941 @param aIndex The position of the string descriptor in the string descriptor array. |
|
942 @param aString Contains the string descriptor to be set. |
|
943 |
|
944 @return KErrNone if successful, KErrArgument if aIndex is invalid, KErrNoMemory if no memory |
|
945 is available to store the new string (an existing descriptor at that index will be preserved). |
|
946 */ |
|
947 inline TInt SetStringDescriptor(TUint8 aIndex, const TDesC16& aString); |
|
948 |
|
949 /** Removes (deletes) the USB string descriptor at the specified index in the string descriptor array. |
|
950 The position in the array of other string descriptors is not affected. |
|
951 |
|
952 Care should be taken, when choosing aIndex, not to inadvertently delete a standard string descriptor |
|
953 (also because index references from non-string descriptors would be invalidated). For the deletion |
|
954 of most standard string descriptors there exists a set of dedicated functions. |
|
955 |
|
956 @see RDevUsbcClient::RemoveManufacturerStringDescriptor |
|
957 @see RDevUsbcClient::RemoveProductStringDescriptor |
|
958 @see RDevUsbcClient::RemoveSerialNumberStringDescriptor |
|
959 @see RDevUsbcClient::RemoveConfigurationStringDescriptor |
|
960 |
|
961 @param aIndex The position of the string descriptor in the string descriptor array. |
|
962 |
|
963 @return KErrNone if successful, KErrNotFound if no string descriptor exists at the specified index. |
|
964 */ |
|
965 inline TInt RemoveStringDescriptor(TUint8 aIndex); |
|
966 |
|
967 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. |
|
968 Request completes when the specified number of bytes is received, length taken from max. length of |
|
969 descriptor. |
|
970 |
|
971 @param aStatus The request status. |
|
972 @param aEndpoint The endpoint number to read from. |
|
973 @param aDes Descriptor to receive the data. |
|
974 */ |
|
975 inline void Read(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes); |
|
976 |
|
977 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. |
|
978 Request completes when the specified number of bytes is received. |
|
979 |
|
980 @param aStatus The request status. |
|
981 @param aEndpoint The endpoint number to read from. |
|
982 @param aDes Descriptor to receive the data. |
|
983 @param aLen The number of bytes to read. |
|
984 */ |
|
985 inline void Read(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes, TInt aLen); |
|
986 |
|
987 /** Asynchronously read an entire packet of data from endpoint 'aEndpoint' into the descriptor 'aDes'. |
|
988 If a packet has previously been partly read. then only the remainder of the packet will be returned. |
|
989 The request should be for the maximum packet size of the endpoint. If less data is requested, then |
|
990 after this read completes the remainder of the data in the packet will be discarded and the next read |
|
991 will start from the next available packet. |
|
992 Request completes when either a complete packet is received or the length of the packet currently |
|
993 being received exceeds 'aMaxLen'. |
|
994 |
|
995 @param aStatus The request status. |
|
996 @param aEndpoint The endpoint number to read from. |
|
997 @param aDes Descriptor to receive the data. |
|
998 @param aMaxLen . |
|
999 */ |
|
1000 inline void ReadPacket(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes, TInt aMaxLen); |
|
1001 |
|
1002 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. |
|
1003 Request completes when the specified number of bytes is received (in first version, |
|
1004 length taken from max. length of descriptor). |
|
1005 |
|
1006 @param aStatus The request status. |
|
1007 @param aEndpoint The endpoint number to read from. |
|
1008 @param aDes Descriptor to receive the data. |
|
1009 */ |
|
1010 inline void ReadUntilShort(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes); |
|
1011 |
|
1012 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. |
|
1013 Request completes when the specified number of bytes is received (in first version, |
|
1014 length taken from max. length of descriptor). |
|
1015 |
|
1016 @param aStatus The request status. |
|
1017 @param aEndpoint The endpoint number to read from. |
|
1018 @param aDes Descriptor to receive the data. |
|
1019 @param aLen The number of bytes to receive. |
|
1020 */ |
|
1021 inline void ReadUntilShort(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes, TInt aLen); |
|
1022 |
|
1023 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. The request completes |
|
1024 when the specified number of bytes is received, length taken from max. length of descriptor or a |
|
1025 packet whose size is smaller than the endpoint's maximum packet size is received. |
|
1026 |
|
1027 @param aStatus The request status. |
|
1028 @param aEndpoint The endpoint number to read from. |
|
1029 @param aDes Descriptor to receive the data. |
|
1030 */ |
|
1031 inline void ReadOneOrMore(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes); |
|
1032 |
|
1033 /** Asynchronously read data from endpoint 'aEndpoint' into the descriptor 'aDes'. The request completes |
|
1034 when the specified number of bytes is received, or a packet whose size is smaller than the endpoint's |
|
1035 maximum packet size is received. |
|
1036 |
|
1037 @param aStatus The request status. |
|
1038 @param aEndpoint The endpoint number to read from. |
|
1039 @param aDes Descriptor to receive the data. |
|
1040 @param aLen The number of bytes to receive. |
|
1041 */ |
|
1042 inline void ReadOneOrMore(TRequestStatus& aStatus, TEndpointNumber aEndpoint, TDes8& aDes, TInt aLen); |
|
1043 |
|
1044 /** Cancels an outstanding read request. The request will complete with whatever data is available. |
|
1045 */ |
|
1046 inline void ReadCancel(TEndpointNumber aEndpoint); |
|
1047 |
|
1048 /** Asynchronously write 'aLen' bytes of data to endpoint 'aEndpoint' from descriptor 'aDes'. 'aZlpRequired' |
|
1049 (optional) signals that ZLP termination may be required. |
|
1050 |
|
1051 @param aStatus The request status. |
|
1052 @param aEndpoint The endpoint number to write to. |
|
1053 @param aDes Descriptor to provide the data. |
|
1054 @param aLen The number of bytes of data to be written. |
|
1055 @param aZlpRequired True, if ZLP termination is required; false, otherwise. |
|
1056 */ |
|
1057 inline void Write(TRequestStatus& aStatus, TEndpointNumber aEndpoint, const TDesC8& aDes, TInt aLen, |
|
1058 TBool aZlpRequired=EFalse); |
|
1059 |
|
1060 /** Cancels an outstanding write request on endpoint aEndpoint. |
|
1061 |
|
1062 @param aEndpoint The endpoint number whose write is to be cancelled. |
|
1063 */ |
|
1064 inline void WriteCancel(TEndpointNumber aEndpoint); |
|
1065 |
|
1066 /** Cancels any transfer on any endpoint specified in aEndpointMask. |
|
1067 |
|
1068 @code |
|
1069 // Cancel transfer requests on endpoints 1, 2 & 3 |
|
1070 usbPort.EndpointTransferCancel(KUsbcEndpoint1Bit | KUsbcEndpoint2Bit | KUsbcEndpoint3Bit); |
|
1071 @endcode |
|
1072 |
|
1073 @param aEndpointMask bitmap of the endpoints. |
|
1074 */ |
|
1075 inline void EndpointTransferCancel(TUint aEndpointMask); |
|
1076 |
|
1077 /** Register for notification when a change of the Interface alternate setting or the USB Controller's |
|
1078 current state occurs. When the alternate setting or the Controller state changes, then the |
|
1079 asynchronous function completes and the current alternate setting number or Controller state is |
|
1080 written back to aValue. If the KUsbAlternateSetting bit is set then the remaining bits are the |
|
1081 alternate setting number. Otherwise aValue is interpreted as a TUsbcDeviceState. |
|
1082 |
|
1083 @see TUsbcDeviceState |
|
1084 |
|
1085 @param aStatus The request status. |
|
1086 @param aValue Receives the alternate setting number or Controller state. |
|
1087 */ |
|
1088 inline void AlternateDeviceStatusNotify(TRequestStatus& aStatus, TUint& aValue); |
|
1089 |
|
1090 /** Completes an AlternateDeviceStatusNotify request. If a request has previously been made then the |
|
1091 status variable is updated with the current device state. |
|
1092 */ |
|
1093 inline void AlternateDeviceStatusNotifyCancel(); |
|
1094 |
|
1095 /** If the channel has changed the grouping of endpoints between interfaces or changed the interface class |
|
1096 type from the defaults then it is necessary to force a re-enumeration. This will typically involve the |
|
1097 Symbian OS device initiating a disconnection and re-connection. This is an asynchronous operation |
|
1098 which will complete when the Controller is successfully configured by the host, i.e. has achieved |
|
1099 EUsbcDeviceStateConfigured. Since it is not known if the operation has failed, at the same time that |
|
1100 a ReEnumerate request is made, a timer should be set up to complete after approximately 5 seconds. It |
|
1101 can be assumed that if the operation has not completed after this time interval then it will not |
|
1102 complete. |
|
1103 |
|
1104 @param aStatus The request status. |
|
1105 */ |
|
1106 inline void ReEnumerate(TRequestStatus& aStatus); |
|
1107 |
|
1108 /** Cancels an outstanding ReEnumerate() request. |
|
1109 */ |
|
1110 inline void ReEnumerateCancel(); |
|
1111 |
|
1112 /** Register for notification when a change in stall status of any of the interface's endpoints occurs, |
|
1113 but not ep0. When a change in stall status occurs, then the asynchronous function completes and the |
|
1114 current stall state is written back to 'aEndpointStatus' as a bit map: Only stall state changes caused |
|
1115 by SET_FEATURE and CLEAR_FEATURE standard commands on ep0 will be notified when this function |
|
1116 completes. After this request completes the request should be re-issued to obtain future |
|
1117 notifications. |
|
1118 |
|
1119 @param aStatus The request status. |
|
1120 @param aEndpointMask a bitmap of the endpoints stall status. This is filled in when the call completes |
|
1121 bit 1 represents the interface's virtual endpoint 1, (KUsbcEndpoint1Bit) |
|
1122 bit 2 represents the interface's virtual endpoint 2, (KUsbcEndpoint2Bit) etc. |
|
1123 bit value 0 - not stalled, |
|
1124 bit value 1 - stalled. |
|
1125 */ |
|
1126 inline void EndpointStatusNotify(TRequestStatus& aStatus, TUint& aEndpointMask); |
|
1127 |
|
1128 /** Completes an endpoint status notify request. |
|
1129 */ |
|
1130 inline void EndpointStatusNotifyCancel(); |
|
1131 |
|
1132 /** Get current on-the-go features relating to the ability of device/host pair to |
|
1133 perform OTG role swap. |
|
1134 |
|
1135 @param aFeatures On return it contanis features the device currently has |
|
1136 bit 2 represents b_hnp_enable, (KUsbOtgAttr_B_HnpEnable) |
|
1137 bit 3 represents a_hnp_support, (KUsbOtgAttr_A_HnpSupport) |
|
1138 bit 4 represents a_alt_hnp_support, (KUsbOtgAttr_A_AltHnpSupport) |
|
1139 @return KErrNone if successful, KErrNotSupported if OTG is not supported by |
|
1140 this device, otherwise system-wide error returns |
|
1141 */ |
|
1142 inline TInt GetOtgFeatures(TUint8& aFeatures); |
|
1143 |
|
1144 /** Register for notification on USB on-the-go features' change. If any OTG feature |
|
1145 is changed, request completes and current feature value is filled in aValue. |
|
1146 |
|
1147 @param aStatus Request status object |
|
1148 @param aValue On request completion, it contains current OTG feature value |
|
1149 */ |
|
1150 inline void OtgFeaturesNotify(TRequestStatus& aStatus, TUint8& aValue); |
|
1151 |
|
1152 /** Cancel pending OTG feature request. |
|
1153 */ |
|
1154 inline void OtgFeaturesNotifyCancel(); |
|
1155 |
|
1156 #endif // #ifndef __KERNEL_MODE__ |
|
1157 }; |
|
1158 |
|
1159 |
|
1160 #include <d32usbc.inl> |
|
1161 |
|
1162 |
|
1163 #endif // __D32USBC_H__ |