Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/html/extensions/Variables/includes/ExtVariables.php on line 198
IOUSBDeviceFamily: Difference between revisions - iPhone Development Wiki

IOUSBDeviceFamily: Difference between revisions

From iPhone Development Wiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 19: Line 19:
| 5 || setProtocolForAlternateSetting || uint8_t ''protocol'', uint8_t ''_unused'' || -
| 5 || setProtocolForAlternateSetting || uint8_t ''protocol'', uint8_t ''_unused'' || -
|-
|-
| 6 || appendStandardClassOrVendorDescriptor || ? || -
| 6 || appendStandardClassOrVendorDescriptor || unsigned long ''?'', unsigned long ''flags''; uint8_t ''descriptor''[*] || -
|-
|-
| 7 || appendNonStandardClassOrVendorDescriptor || ? || -
| 7 || appendNonStandardClassOrVendorDescriptor || unsigned long ''?'', unsigned long ''flags''; uint8_t ''descriptor''[*] || -
|-
|-
| 8 || setClassCommandCallbacks || ? || -
| 8 || setClassCommandCallbacks (async) || bool ''wakeOnRequest'', bool ''hasCallback2'' || -
|-
|-
| 9 || classCommandCallbacksHandler || ? || -
| 9 || ? || bool ''handledRequest'', size_t ''dataLength'', uint64_t ''mapToken'', IOReturn ''status'' || -
|-
|-
| 10 || createPipe || int ''?'', int ''?'', int ''?'', int ''?'', int ''?'', int ''?'' || void* ''pipe''
| 10 || createPipe || int ''type'', int ''direction'', int ''maxPacketSize'', int ''interval'', int ''?'', int ''configIndex'' || void* ''pipe''
|-
|-
| 11 || commitConfiguration || - || -
| 11 || commitConfiguration || - || -
Line 33: Line 33:
| 12 || setAlternateSetting || uint8_t ''configIndex'' || -
| 12 || setAlternateSetting || uint8_t ''configIndex'' || -
|-
|-
| 13 || readPipe || ? || ?
| 13 || readPipe (may be async) || void* ''pipe'', uint64_t ''mapToken'', long ''capacity'' || long ''length''
|-
|-
| 14 || writePipe || ? || ?
| 14 || writePipe (may be async) || ? || ?
|-
|-
| 15 || stallPipe || void* ''pipe'' || -
| 15 || stallPipe || void* ''pipe'' || -
Line 43: Line 43:
| 17 || getPipeCurrentMaxPacketSize || void* ''pipe'' || int ''packetSize''
| 17 || getPipeCurrentMaxPacketSize || void* ''pipe'' || int ''packetSize''
|-
|-
| 18 || createData || ? || ?
| 18 || createData || int64_t ''length'' || uint8_t* ''dataPtr'', int ''capacity'', uint64_t ''mapToken''
|-
|-
| 19 || releaseDataCallback || ? || -
| 19 || releaseDataCallback || ? || -
|-
|-
| 20 || isActivated || - || bool ''?'' , bool ''?''
| 20 || isActivated || - || bool ''activated'' , bool ''isHighSpeed''
|-
|-
|}
|}
To use setClassCommandCallbacks, you must issue the call asynchronously, and put the callback function in its ''reference'' argument, e.g.
<source lang="c">
void callback(void* refcon, IOReturn result, size_t* arguments) {
    ...
}
uint64_t refs[3];
refs[1] = (uint64_t) callback;
refs[2] = (uint64_t) refcon;
IOConnectCallAsyncMethod(connection, 8, wakePort, refs, 3, ...);
</source>
The same applies to calling readPipe asynchronously, but the 3rd argument becomes "size_t ''dataLength''".


== IOUSBDeviceLib ==
== IOUSBDeviceLib ==

Latest revision as of 09:22, 26 December 2010

IOUSBDeviceFamily is a kernel-extension for communication of device to the host via the USB cable. This is only an abstract extension. The actual driver implementation is in AppleSynopsysOTG2.

Methods

Selector Action Input Output
0 open void* _arg -
1 close - -
2 setDescription char description[*] -
3 setClassForAlternateSetting uint8_t class_, uint8_t _unused -
4 setSubClassForAlternateSetting uint8_t subclass, uint8_t _unused -
5 setProtocolForAlternateSetting uint8_t protocol, uint8_t _unused -
6 appendStandardClassOrVendorDescriptor unsigned long ?, unsigned long flags; uint8_t descriptor[*] -
7 appendNonStandardClassOrVendorDescriptor unsigned long ?, unsigned long flags; uint8_t descriptor[*] -
8 setClassCommandCallbacks (async) bool wakeOnRequest, bool hasCallback2 -
9 ? bool handledRequest, size_t dataLength, uint64_t mapToken, IOReturn status -
10 createPipe int type, int direction, int maxPacketSize, int interval, int ?, int configIndex void* pipe
11 commitConfiguration - -
12 setAlternateSetting uint8_t configIndex -
13 readPipe (may be async) void* pipe, uint64_t mapToken, long capacity long length
14 writePipe (may be async) ? ?
15 stallPipe void* pipe -
16 abortPipe void* pipe -
17 getPipeCurrentMaxPacketSize void* pipe int packetSize
18 createData int64_t length uint8_t* dataPtr, int capacity, uint64_t mapToken
19 releaseDataCallback ? -
20 isActivated - bool activated , bool isHighSpeed

To use setClassCommandCallbacks, you must issue the call asynchronously, and put the callback function in its reference argument, e.g.

void callback(void* refcon, IOReturn result, size_t* arguments) {
    ...
}

uint64_t refs[3];
refs[1] = (uint64_t) callback;
refs[2] = (uint64_t) refcon;
IOConnectCallAsyncMethod(connection, 8, wakePort, refs, 3, ...);

The same applies to calling readPipe asynchronously, but the 3rd argument becomes "size_t dataLength".

IOUSBDeviceLib

IOUSBDeviceLib is a userland COM plug-in for accessing the IOUSBDeviceInterface. The plug-in's UUID is {9E72217E-8A60-11DB-BF57-000D936D06D2}, and its interface's UUID is {EA33BA4F-8A60-11DB-84DB-000D936D06D2}.