|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface UsbPipe
Interface for a USB pipe.
See the USB 1.1 specification sec 5.3.2 for details on USB pipes.
Data flows in the
direction
defined by the associated endpoint
, except for Control
type
pipes.
The implementation is not required to be Thread-safe. If a Thread-safe UsbPipe is
required, use a synchronizedUsbPipe
.
This pipe's configuration and interface setting must be active to use this pipe. Any attempt to use a UsbPipe belonging to an inactive configuration or interface setting will throw a UsbNotActiveException.
Method Summary | |
---|---|
void |
abortAllSubmissions()
Stop all submissions in progress. |
void |
addUsbPipeListener(UsbPipeListener listener)
Adds the listener. |
UsbIrp |
asyncSubmit(byte[] data)
Asynchonously submit a byte[] to the UsbPipe. |
void |
asyncSubmit(java.util.List list)
Asynchonously submit a List of UsbIrps to the UsbPipe. |
void |
asyncSubmit(UsbIrp irp)
Asynchonously submit a UsbIrp to the UsbPipe. |
void |
close()
Close this UsbPipe. |
UsbControlIrp |
createUsbControlIrp(byte bmRequestType,
byte bRequest,
short wValue,
short wIndex)
Create a UsbControlIrp. |
UsbIrp |
createUsbIrp()
Create a UsbIrp. |
UsbEndpoint |
getUsbEndpoint()
Get this pipe's UsbEndpoint. |
boolean |
isActive()
If this pipe is active. |
boolean |
isOpen()
If this pipe is open. |
void |
open()
Open this UsbPipe. |
void |
removeUsbPipeListener(UsbPipeListener listener)
Removes the listener. |
int |
syncSubmit(byte[] data)
Synchonously submit a byte[] to the UsbPipe. |
void |
syncSubmit(java.util.List list)
Synchonously submit a List of UsbIrps to the UsbPipe. |
void |
syncSubmit(UsbIrp irp)
Synchonously submit a UsbIrp to the UsbPipe. |
Method Detail |
---|
void open() throws UsbException, UsbNotActiveException, UsbNotClaimedException, UsbDisconnectedException
The pipe cannot be used for communication until it is open.
The implementation should, to whatever extent the platform allows, try to ensure the pipe is usable (not in error) before returning successfully.
If the pipe has already been opened, this will not succeed.
UsbException
- If the UsbPipe could not be opened.
UsbNotActiveException
- If the config or interface setting is not active.
UsbNotClaimedException
- If the interface is not claimed.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void close() throws UsbException, UsbNotActiveException, UsbNotOpenException, UsbDisconnectedException
The pipe can only be closed while no submissions are pending.
All submissions can be aborted by abortAllSubmissions
.
If the pipe is already closed, this fails.
UsbException
- If the UsbPipe could not be closed.
UsbNotActiveException
- If the UsbPipe is not active.
UsbNotOpenException
- If the UsbPipe is not open.
UsbDisconnectedException
- If this pipe (device) has been disconnected.boolean isActive()
This pipe is active only if it belongs to an
active configuration
and
interface setting
, otherwise it is inactive.
This UsbPipe cannot be used if inactive.
boolean isOpen()
This is true after a sucessful open
until a successful close
.
If this pipe is not active
, this returns false.
UsbEndpoint getUsbEndpoint()
int syncSubmit(byte[] data) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This can be used for input and output.
This may only be called when the pipe is open
.
The implementation must support multiple (queued) submissions.
There is no maximum size restriction; the implementation will segment the buffer
into multiple transactions if required. There may be a minimum size, but it
will not be more than the
maximum packet size
.
This will block until either all data is transferred or an error occurrs. Short packets indicate either the end of data or an error.
The return value will indicate the number of bytes sucessfully transferred to or from the target endpoint (depending on direction). The return value will never exceed the total size of the provided buffer. If the operation was not sucessful the UsbException will accurately reflect the cause of the error.
Short packets are accepted. There is no way to disable short packet acceptance using this method. See the USB 1.1 specification sec 5.3.2 for details on short packets and short packet detection.
data
- The buffer to use.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the data is null.
UsbDisconnectedException
- If this pipe (device) has been disconnected.UsbIrp asyncSubmit(byte[] data) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This can be used for input and output.
This may only be called when the pipe is open
.
The implementation must support multiple (queued) submissions.
There is no maximum size restriction; the implementation will segment the buffer
into multiple transactions if required. There may be a minimum size, but it
will not be more than the
maximum packet size
.
The implementation should only place this on a queue, or perform whatever minimal processing is required, and then return. This method will not block until the submission is complete.
The returned UsbIrp will represent the submission.
Short packets are accepted. There is no way to disable short packet acceptance using this method. See the USB 1.1 specification sec 5.3.2 for details on short packets and short packet detection.
data
- The buffer to use.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the data is null.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void syncSubmit(UsbIrp irp) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This can be used for input and output.
This may only be called when the pipe is open
.
The implementation must support multiple (queued) submissions.
There is no maximum size restriction; the implementation will segment the buffer
into multiple transactions if required. There may be a minimum size, but it
will not be more than the
maximum packet size
.
This will block until either all data is transferred or an error occurrs. Short packets indicate either the end of data or an error.
If this is a Control type
pipe,
the UsbIrp must be a UsbControlIrp
.
irp
- A UsbIrp to use for the submission.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the UsbIrp is not valid.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void asyncSubmit(UsbIrp irp) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This can be used for input and output.
This may only be called when the pipe is open
.
The implementation must support multiple (queued) submissions.
There is no maximum size restriction; the implementation will segment the buffer
into multiple transactions if required. There may be a minimum size, but it
will not be more than the
maximum packet size
.
The implementation should only place this on a queue, or perform whatever minimal processing is required, and then return. This method will not block until the submission is complete.
If this is a Control type
pipe,
the UsbIrp must be a UsbControlIrp
.
irp
- The UsbIrp to use for the submission.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the UsbIrp is not valid.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void syncSubmit(java.util.List list) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This is exactly the same as calling
syncSubmit
multiple times, except:
If this is a Control type
pipe,
the UsbIrps must be UsbControlIrps
.
list
- The List of UsbIrps.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the list is empty or contains any non-UsbIrp objects, or those UsbIrp(s) are invalid.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void asyncSubmit(java.util.List list) throws UsbException, UsbNotActiveException, UsbNotOpenException, java.lang.IllegalArgumentException, UsbDisconnectedException
This is exactly the same as calling
asyncSubmit
multiple times, except:
If this is a Control type
pipe,
the UsbIrps must be UsbControlIrps
.
list
- The List of UsbIrps.
UsbException
- If an error occurs.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
java.lang.IllegalArgumentException
- If the list is empty or contains any non-UsbIrp objects, or those UsbIrp(s) are invalid.
UsbDisconnectedException
- If this pipe (device) has been disconnected.void abortAllSubmissions() throws UsbNotActiveException, UsbNotOpenException, UsbDisconnectedException
This will abort all submission in progress on the pipe, and block until all submissions are complete. There will be no submissions pending after this returns.
UsbNotActiveException
- If the pipe is not active
.
UsbNotOpenException
- If the pipe is not open
.
UsbDisconnectedException
- If this pipe (device) has been disconnected.UsbIrp createUsbIrp()
This creates a UsbIrp that may be optimized for use on
this UsbPipe. Using this UsbIrp instead of a
DefaultUsbIrp
may increase performance or decrease memory requirements.
The UsbPipe cannot require this UsbIrp to be used, all submit methods must accept any UsbIrp implementation (or UsbControlIrp implementation if this is a Control-type UsbPipe).
UsbControlIrp createUsbControlIrp(byte bmRequestType, byte bRequest, short wValue, short wIndex)
This creates a UsbControlIrp that may be optimized for use on
this UsbPipe. Using this UsbControlIrp instead of a
DefaultUsbControlIrp
may increase performance or decrease memory requirements.
The UsbPipe cannot require this UsbControlIrp to be used, all submit methods must accept any UsbControlIrp implementation.
Note that if this is not a Control-type UsbPipe, none of the setup packet fields will be used.
bmRequestType
- The bmRequestType.bRequest
- The bRequest.wValue
- The wValue.wIndex
- The wIndex.
void addUsbPipeListener(UsbPipeListener listener)
listener
- The UsbPipeListener.void removeUsbPipeListener(UsbPipeListener listener)
listener
- The UsbPipeListener.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |