javax.usb
Interface UsbPipe

All Known Implementing Classes:
UsbControlPipeImp, UsbPipeImp, UsbUtil.SynchronizedUsbPipe

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.

Author:
Dan Streetman, E. Michael Maximilien

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

open

void open()
          throws UsbException,
                 UsbNotActiveException,
                 UsbNotClaimedException,
                 UsbDisconnectedException
Open this UsbPipe.

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.

Throws:
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.

close

void close()
           throws UsbException,
                  UsbNotActiveException,
                  UsbNotOpenException,
                  UsbDisconnectedException
Close this UsbPipe.

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.

Throws:
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.

isActive

boolean isActive()
If this pipe is active.

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.

Returns:
If this UsbPipe is active.

isOpen

boolean isOpen()
If this pipe is open.

This is true after a sucessful open until a successful close.

If this pipe is not active, this returns false.

Returns:
If this UsbPipe is open.

getUsbEndpoint

UsbEndpoint getUsbEndpoint()
Get this pipe's UsbEndpoint.

Returns:
The associated endpoint.

syncSubmit

int syncSubmit(byte[] data)
               throws UsbException,
                      UsbNotActiveException,
                      UsbNotOpenException,
                      java.lang.IllegalArgumentException,
                      UsbDisconnectedException
Synchonously submit a byte[] to the UsbPipe.

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.

Parameters:
data - The buffer to use.
Returns:
The number of bytes actually transferred.
Throws:
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.

asyncSubmit

UsbIrp asyncSubmit(byte[] data)
                   throws UsbException,
                          UsbNotActiveException,
                          UsbNotOpenException,
                          java.lang.IllegalArgumentException,
                          UsbDisconnectedException
Asynchonously submit a byte[] to the UsbPipe.

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.

Parameters:
data - The buffer to use.
Returns:
A UsbIrp representing the submission.
Throws:
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.

syncSubmit

void syncSubmit(UsbIrp irp)
                throws UsbException,
                       UsbNotActiveException,
                       UsbNotOpenException,
                       java.lang.IllegalArgumentException,
                       UsbDisconnectedException
Synchonously submit a UsbIrp to the UsbPipe.

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.

Parameters:
irp - A UsbIrp to use for the submission.
Throws:
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.

asyncSubmit

void asyncSubmit(UsbIrp irp)
                 throws UsbException,
                        UsbNotActiveException,
                        UsbNotOpenException,
                        java.lang.IllegalArgumentException,
                        UsbDisconnectedException
Asynchonously submit a UsbIrp to the UsbPipe.

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.

Parameters:
irp - The UsbIrp to use for the submission.
Throws:
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.

syncSubmit

void syncSubmit(java.util.List list)
                throws UsbException,
                       UsbNotActiveException,
                       UsbNotOpenException,
                       java.lang.IllegalArgumentException,
                       UsbDisconnectedException
Synchonously submit a List of UsbIrps to the UsbPipe.

This is exactly the same as calling syncSubmit multiple times, except:

If this is a Control type pipe, the UsbIrps must be UsbControlIrps.

Parameters:
list - The List of UsbIrps.
Throws:
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.

asyncSubmit

void asyncSubmit(java.util.List list)
                 throws UsbException,
                        UsbNotActiveException,
                        UsbNotOpenException,
                        java.lang.IllegalArgumentException,
                        UsbDisconnectedException
Asynchonously submit a List of UsbIrps to the UsbPipe.

This is exactly the same as calling asyncSubmit multiple times, except:

If this is a Control type pipe, the UsbIrps must be UsbControlIrps.

Parameters:
list - The List of UsbIrps.
Throws:
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.

abortAllSubmissions

void abortAllSubmissions()
                         throws UsbNotActiveException,
                                UsbNotOpenException,
                                UsbDisconnectedException
Stop all submissions in progress.

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.

Throws:
UsbNotActiveException - If the pipe is not active.
UsbNotOpenException - If the pipe is not open.
UsbDisconnectedException - If this pipe (device) has been disconnected.

createUsbIrp

UsbIrp createUsbIrp()
Create a UsbIrp.

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).

Returns:
A UsbIrp ready for use.

createUsbControlIrp

UsbControlIrp createUsbControlIrp(byte bmRequestType,
                                  byte bRequest,
                                  short wValue,
                                  short wIndex)
Create a UsbControlIrp.

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.

Parameters:
bmRequestType - The bmRequestType.
bRequest - The bRequest.
wValue - The wValue.
wIndex - The wIndex.
Returns:
A UsbControlIrp ready for use.

addUsbPipeListener

void addUsbPipeListener(UsbPipeListener listener)
Adds the listener.

Parameters:
listener - The UsbPipeListener.

removeUsbPipeListener

void removeUsbPipeListener(UsbPipeListener listener)
Removes the listener.

Parameters:
listener - The UsbPipeListener.