I have a program that wait for an OBEX put from a palm, does some quick
processing and then OBEX puts another file back to the palm.  Most of the
time this second put fails.  If I wait 12seconds before it tries it again
it works.  12seconds happens to be the default link timeout, right?  During
this time Linux is sending RR_CMD frames but the Palm never responds.

What *seems* to be happening is that Palm sends a RR_RSP that was never
asked for with a RR_CMD.   RR frames also don't seem to fly between I_CMDs
and I_RSP, but that seems to be OK.

Here is the interesting part of the irdadump log:

...
02:43:24.989489 xid:cmd 0e09b617 > ffffffff S=6 s=4 (14) 
02:43:24.989403 xid:rsp 0e09b617 < 8b741a44 S=6 s=3 Justin Huff hint=8220 [
PDA/Palmtop IrOBEX ] (28) 
02:43:25.079472 xid:cmd 0e09b617 > ffffffff S=6 s=5 (14) 
02:43:25.169481 xid:cmd 0e09b617 > ffffffff S=6 s=* chimborazo hint=4400 [
Computer LAN Access ] (26) 
02:43:25.170134 snrm:cmd ca=fe pf=1 0e09b617 > 8b741a44 new-ca=a6 (32) 
02:43:25.319397 ua:rsp ca=a6 pf=1 0e09b617 < 8b741a44 (31) 
02:43:25.340225 rr:cmd > ca=a6 pf=1 nr=0 (2) 
02:43:25.349571 rr:rsp < ca=a6 pf=1 nr=0 (2) 
02:43:25.349692 i:cmd  > ca=a6 pf=1 nr=0 ns=0 LM slsap=1b dlsap=00 CONN_CMD
(6) 
02:43:25.359522 i:rsp  < ca=a6 pf=1 nr=1 ns=0 LM slsap=00 dlsap=1b CONN_RSP
(6) 
02:43:25.359750 i:cmd  > ca=a6 pf=1 nr=1 ns=1 LM slsap=1b dlsap=00
GET_VALUE_BY_CLASS: "OBEX" "IrDA:TinyTP:LsapSel" (30) 
02:43:25.379943 i:rsp  < ca=a6 pf=1 nr=2 ns=1 LM slsap=00 dlsap=1b
GET_VALUE_BY_CLASS: Success Integer: 02 (15) 
02:43:25.380193 i:cmd  > ca=a6 pf=1 nr=2 ns=2 LM slsap=1b dlsap=00 DISC (6)

02:43:25.389727 rr:rsp < ca=a6 pf=1 nr=3 (2)
                <=========??????
02:43:25.389842 i:cmd  > ca=a6 pf=1 nr=2 ns=3 LM slsap=1c dlsap=02 CONN_CMD
TTP credits=0(7) 
02:43:25.399710 i:rsp  < ca=a6 pf=1 nr=4 ns=2 LM slsap=02 dlsap=1c CONN_RSP
TTP credits=0(7) 
02:43:25.400361 i:cmd  > ca=a6 pf=1 nr=3 ns=4 LM slsap=1c dlsap=02 TTP
credits=0 
        OBEX CONNECT len=7 ver=1.1 flags=0 mtu=1024 (12) 
02:43:25.409597 i:rsp  < ca=a6 pf=1 nr=5 ns=3 LM slsap=02 dlsap=1c TTP
credits=1 
        OBEX SUCCESS len=7 ver=1.0 flags=0 mtu=4072 (12) 
02:43:25.411054 i:cmd  > ca=a6 pf=1 nr=4 ns=5 LM slsap=1c dlsap=02 TTP
credits=1 
        OBEX PUT final=1 len=39 Name="mb_cmd.irx" Lenght=3 body-end=[3
bytes] (44) 
02:43:25.569532 i:rsp  < ca=a6 pf=1 nr=6 ns=4 LM slsap=02 dlsap=1c TTP
credits=1 
        OBEX SUCCESS len=3 (8) 
02:43:25.569896 i:cmd  > ca=a6 pf=1 nr=5 ns=6 LM slsap=1c dlsap=02 TTP
credits=1 
        OBEX DISC (8) 
02:43:25.579431 i:rsp  < ca=a6 pf=1 nr=7 ns=5 LM slsap=02 dlsap=1c TTP
credits=1 
        OBEX SUCCESS len=3 (8) 
02:43:25.580524 i:cmd  > ca=a6 pf=1 nr=6 ns=7 LM slsap=1c dlsap=02 DISC (6)

02:43:26.079471 rr:cmd > ca=a6 pf=1 nr=6 (2) 
02:43:26.579462 rr:cmd > ca=a6 pf=1 nr=6 (2) 
02:43:27.079460 rr:cmd > ca=a6 pf=1 nr=6 (2) 
02:43:27.579520 rr:cmd > ca=a6 pf=1 nr=6 (2) 
...

What about ignoring these 'rouge' frames (assuming that they are) in
irlap_state_nrm_p()?  i.e. drop the frame if we got a RR_RSP but we don't
think the receiver is busy.

Ideas?
thanks!
--Justin






_______________________________________________
Linux-IrDA mailing list  -  [EMAIL PROTECTED]
http://www.pasta.cs.UiT.No/mailman/listinfo/linux-irda

Reply via email to