|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object javax.usb.util.UsbUtil.SynchronizedUsbPipe
public static class UsbUtil.SynchronizedUsbPipe
A synchronized UsbPipe wrapper implementation.
Not all methods are synchronized; the open/close methods are synchronized to each other, and the submission and abort methods are synchronized to each other.
Field Summary | |
---|---|
UsbPipe |
usbPipe
|
Constructor Summary | |
---|---|
UsbUtil.SynchronizedUsbPipe(UsbPipe usbPipe)
|
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. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public UsbPipe usbPipe
Constructor Detail |
---|
public UsbUtil.SynchronizedUsbPipe(UsbPipe usbPipe)
Method Detail |
---|
public void open() throws UsbException, UsbNotActiveException, UsbNotClaimedException
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.
open
in interface UsbPipe
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.public void close() throws UsbException, UsbNotOpenException
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.
close
in interface UsbPipe
UsbException
- If the UsbPipe could not be closed.
UsbNotOpenException
- If the UsbPipe is not open.public boolean isActive()
UsbPipe
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.
isActive
in interface UsbPipe
public boolean isOpen()
UsbPipe
This is true after a sucessful open
until a successful close
.
If this pipe is not active
, this returns false.
isOpen
in interface UsbPipe
public UsbEndpoint getUsbEndpoint()
UsbPipe
getUsbEndpoint
in interface UsbPipe
public int syncSubmit(byte[] data) throws UsbException, UsbNotOpenException
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.
syncSubmit
in interface UsbPipe
data
- The buffer to use.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public UsbIrp asyncSubmit(byte[] data) throws UsbException, UsbNotOpenException
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.
asyncSubmit
in interface UsbPipe
data
- The buffer to use.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public void syncSubmit(UsbIrp irp) throws UsbException, UsbNotOpenException
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
.
syncSubmit
in interface UsbPipe
irp
- A UsbIrp to use for the submission.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public void asyncSubmit(UsbIrp irp) throws UsbException, UsbNotOpenException
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
.
asyncSubmit
in interface UsbPipe
irp
- The UsbIrp to use for the submission.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public void syncSubmit(java.util.List list) throws UsbException, UsbNotOpenException
UsbPipe
This is exactly the same as calling
syncSubmit
multiple times, except:
If this is a Control type
pipe,
the UsbIrps must be UsbControlIrps
.
syncSubmit
in interface UsbPipe
list
- The List of UsbIrps.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public void asyncSubmit(java.util.List list) throws UsbException, UsbNotOpenException
UsbPipe
This is exactly the same as calling
asyncSubmit
multiple times, except:
If this is a Control type
pipe,
the UsbIrps must be UsbControlIrps
.
asyncSubmit
in interface UsbPipe
list
- The List of UsbIrps.
UsbException
- If an error occurs.
UsbNotOpenException
- If the pipe is not open
.public void abortAllSubmissions() throws UsbNotOpenException
UsbPipe
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.
abortAllSubmissions
in interface UsbPipe
UsbNotOpenException
- If the pipe is not open
.public UsbIrp createUsbIrp()
UsbPipe
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).
createUsbIrp
in interface UsbPipe
public UsbControlIrp createUsbControlIrp(byte bmRequestType, byte bRequest, short wValue, short wIndex)
UsbPipe
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.
createUsbControlIrp
in interface UsbPipe
bmRequestType
- The bmRequestType.bRequest
- The bRequest.wValue
- The wValue.wIndex
- The wIndex.
public void addUsbPipeListener(UsbPipeListener listener)
UsbPipe
addUsbPipeListener
in interface UsbPipe
listener
- The UsbPipeListener.public void removeUsbPipeListener(UsbPipeListener listener)
UsbPipe
removeUsbPipeListener
in interface UsbPipe
listener
- The UsbPipeListener.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |