[purejavacomm] Re: Detect usb cable unplugged?

  • From: ant elder <ant.elder@xxxxxxxxx>
  • To: purejavacomm@xxxxxxxxxxxxx
  • Date: Thu, 21 Nov 2013 10:53:09 +0000

I've not tried it on Linux yet, but on Windows 7 if i pull out the cable
and do a read with PJC logging switched on, the read hangs and this is what
logging is output:

[err] log: 024372,class purejavacomm.PureJavaSerialPort$1 line 647, thread
id 41, Default Executor-thread-6, >
write(0,[8192,0x31,0x2C,0x31,0x32,0x2C,0x31,0x0A,0x35...],7)

[err] log: 024373,class jtermios.windows.JTermiosImpl line 495, thread id
41, Default Executor-thread-6, > WaitForMultipleObjects(2,
[2,native@0x7b0(jtermios.windows.WinAPI$HANDLE@7b0
),native@0x7a8 (jtermios.windows.WinAPI$HANDLE@7a8)], false, -1)

[err] log: 024374,class jtermios.windows.JTermiosImpl line 495, thread id
41, Default Executor-thread-6, < WaitForMultipleObjects(2,
[2,native@0x7b0(jtermios.windows.WinAPI$HANDLE@7b0
),native@0x7a8 (jtermios.windows.WinAPI$HANDLE@7a8)], false, -1) => 0

[err] log: 024375,class jtermios.windows.JTermiosImpl line 501, thread id
41, Default Executor-thread-6, >
GetOverlappedResult(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
auto-allocated@0x2485010 (32 bytes), [0], false)

[err] log: 024376,class jtermios.windows.JTermiosImpl line 501, thread id
41, Default Executor-thread-6, <
GetOverlappedResult(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
auto-allocated@0x2485010 (32 bytes), [7], false) => true

[err] log: 024376,class jtermios.windows.JTermiosImpl line 519, thread id
41, Default Executor-thread-6, >
ResetEvent(native@0x7b0(jtermios.windows.WinAPI$HANDLE@7b0
))

[err] log: 024377,class jtermios.windows.JTermiosImpl line 519, thread id
41, Default Executor-thread-6, <
ResetEvent(native@0x7b0(jtermios.windows.WinAPI$HANDLE@7b0))
=> true

[err] log: 024377,class jtermios.windows.JTermiosImpl line 525, thread id
41, Default Executor-thread-6, >
WriteFile(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[7,0x31,0x2C,0x31,0x32,0x2C...], 7, [7], auto-allocated@0x2485010 (32
bytes))

[err] log: 024378,class jtermios.windows.JTermiosImpl line 525, thread id
41, Default Executor-thread-6, <
WriteFile(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[7,0x31,0x2C,0x31,0x32,0x2C...], 7, [0], auto-allocated@0x2485010 (32
bytes)) => false

[err] log: 024379,class jtermios.windows.JTermiosImpl line 528, thread id
41, Default Executor-thread-6, > GetLastError()

[err] log: 024379,class jtermios.windows.JTermiosImpl line 528, thread id
41, Default Executor-thread-6, < GetLastError() => 997

[err] log: 024380,class purejavacomm.PureJavaSerialPort$1 line 647, thread
id 41, Default Executor-thread-6, <
write(0,[8192,0x31,0x2C,0x31,0x32,0x2C,0x31,0x0A,0x35...],7) => 7

[err] log: 024380,class purejavacomm.PureJavaSerialPort$1 line 673, thread
id 41, Default Executor-thread-6, > tcdrain(0)

[err] log: 024381,class jtermios.windows.JTermiosImpl line 314, thread id
41, Default Executor-thread-6, >
FlushFileBuffers(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c
))

[err] log: 024382,class jtermios.windows.JTermiosImpl line 314, thread id
41, Default Executor-thread-6, <
FlushFileBuffers(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c))
=> true

[err] log: 024382,class purejavacomm.PureJavaSerialPort$1 line 673, thread
id 41, Default Executor-thread-6, < tcdrain(0) => 0

[err] log: 024458,class purejavacomm.PureJavaSerialPort$2 line 891, thread
id 41, Default Executor-thread-6, >
select(1,[0],[],[],jtermios.TimeVal@43737616)

[err] log: 024459,class jtermios.windows.JTermiosImpl line 788, thread id
41, Default Executor-thread-6, >
ClearCommError(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[0], [fFlags 0000 cbInQue 0 cbInQue 0])

[err] log: 024460,class jtermios.windows.JTermiosImpl line 788, thread id
41, Default Executor-thread-6, <
ClearCommError(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[0], [fFlags 0000 cbInQue 0 cbInQue 0]) => true

[err] log: 024461,class jtermios.windows.JTermiosImpl line 830, thread id
41, Default Executor-thread-6, >
SetCommMask(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
0x00000000)

[err] log: 024461,class jtermios.windows.JTermiosImpl line 830, thread id
41, Default Executor-thread-6, <
SetCommMask(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
0x00000000) => true

[err] log: 024462,class jtermios.windows.JTermiosImpl line 832, thread id
41, Default Executor-thread-6, >
GetOverlappedResult(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
auto-allocated@0x2485040 (32 bytes), [4], false)

[err] log: 024463,class jtermios.windows.JTermiosImpl line 832, thread id
41, Default Executor-thread-6, <
GetOverlappedResult(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
auto-allocated@0x2485040 (32 bytes), [4], false) => true

[err] log: 024463,class jtermios.windows.JTermiosImpl line 836, thread id
41, Default Executor-thread-6, >
ResetEvent(native@0x7b4(jtermios.windows.WinAPI$HANDLE@7b4
))

[err] log: 024464,class jtermios.windows.JTermiosImpl line 836, thread id
41, Default Executor-thread-6, <
ResetEvent(native@0x7b4(jtermios.windows.WinAPI$HANDLE@7b4))
=> true

[err] log: 024464,class jtermios.windows.JTermiosImpl line 845, thread id
41, Default Executor-thread-6, >
SetCommMask(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
0x00000001)

[err] log: 024465,class jtermios.windows.JTermiosImpl line 845, thread id
41, Default Executor-thread-6, <
SetCommMask(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
0x00000001) => true

[err] log: 024466,class jtermios.windows.JTermiosImpl line 848, thread id
41, Default Executor-thread-6, >
WaitCommEvent(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[0], auto-allocated@0x2485040 (32 bytes))

[err] log: 024466,class jtermios.windows.JTermiosImpl line 848, thread id
41, Default Executor-thread-6, <
WaitCommEvent(native@0x79c(jtermios.windows.WinAPI$HANDLE@79c),
[0], auto-allocated@0x2485040 (32 bytes)) => false

[err] log: 024467,class jtermios.windows.JTermiosImpl line 856, thread id
41, Default Executor-thread-6, > GetLastError()

[err] log: 024467,class jtermios.windows.JTermiosImpl line 856, thread id
41, Default Executor-thread-6, < GetLastError() => 997

[err] log: 024468,class jtermios.windows.JTermiosImpl line 879, thread id
41, Default Executor-thread-6, > WaitForMultipleObjects(2,
[2,native@0x7b4(jtermios.windows.WinAPI$HANDLE@7b4
),native@0x7a0 (jtermios.windows.WinAPI$HANDLE@7a0)], false, 2147483647)




On Thu, Nov 21, 2013 at 10:48 AM, Kustaa Nyholm
<Kustaa.Nyholm@xxxxxxxxxxxx>wrote:

>
>  As far as the platform allows/enables PJC read throws an exception if a
> device is unplugged.
>
>  Which platform you are using?
>
>  For Linux and Mac OS X, the inputstream.read() is very thin layer over
> the POSIX read()
> and if the OS does not return from a read when the device becomes
> dysfunctional there
> is little that can be done. IIRC in that respect OS X did not behave as it
> should.
>
>
>  br Kusti
>
>
>   From: ant elder <ant.elder@xxxxxxxxx>
> Reply-To: "purejavacomm@xxxxxxxxxxxxx" <purejavacomm@xxxxxxxxxxxxx>
> Date: Thu, 21 Nov 2013 12:32:06 +0200
> To: "purejavacomm@xxxxxxxxxxxxx" <purejavacomm@xxxxxxxxxxxxx>
> Subject: [purejavacomm] Detect usb cable unplugged?
>
>  Is there any way to have an application notified by PureJavaComm when a
> usb serial port is unplugged?
>
>  Presently unplugging the cable without first closing the PureJavaComm
> SerialPort can cause a hang if a read is done on the still open port. It
> would be nice if the application could be notified when the cable is
> unplugged and so close the SerialPort, or at least if a read on a
> SerialPort thats been unplugged would throw an exception.
>
>     ...ant
>
> ------------------------------
> This e-mail may contain confidential or privileged information. If you are
> not the intended recipient (or have received this e-mail in error) please
> notify the sender immediately and destroy this e-mail. Any unauthorized
> copying, disclosure or distribution of the material in this e-mail is
> strictly forbidden. We will not be liable for direct, indirect, special or
> consequential damages arising from alteration of the contents of this
> message by a third party or as a result of any virus being passed on or as
> of transmission of this e-mail in general.
>

Other related posts: