From 83e9c0018c788a104e88c671c3fa7fd3ae991b40 Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Mon, 22 Oct 2018 10:01:47 +0000 Subject: [PATCH] Refs #660. Improved CAN connection with PCAN-USB. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@631 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../port/windows/canif/peak/pcanusb.c | 14 ++++++++++++++ Host/libopenblt.dll | Bin 165888 -> 165888 bytes 2 files changed, 14 insertions(+) diff --git a/Host/Source/LibOpenBLT/port/windows/canif/peak/pcanusb.c b/Host/Source/LibOpenBLT/port/windows/canif/peak/pcanusb.c index 19d45760..6c20d127 100644 --- a/Host/Source/LibOpenBLT/port/windows/canif/peak/pcanusb.c +++ b/Host/Source/LibOpenBLT/port/windows/canif/peak/pcanusb.c @@ -41,6 +41,16 @@ #include "PCANBasic.h" /* for PCAN-Basic API */ +/**************************************************************************************** +* Macro definitions +****************************************************************************************/ +/** \brief Configurable to enabled/disable the automatic CAN bus off recovery feature. + * Testing shows that it is better to leave this disabled. If no connection + * with the target can be made, the PCAN-USB automatically re-initialized anyway. + */ +#define PCANUSB_BUSOFF_AUTORECOVERY_ENABLE (0u) + + /*************************************************************************************** * Type definitions ****************************************************************************************/ @@ -280,7 +290,9 @@ static bool PCanUsbConnect(void) bool channelSupported; bool libInitialized = false; TPCANBaudrate baudrate = PCAN_BAUD_500K; +#if (PCANUSB_BUSOFF_AUTORECOVERY_ENABLE > 0) uint32_t iBuffer; +#endif /* Convert the baudrate to a value supported by the PCAN-Basic API. */ switch (pCanUsbSettings.baudrate) @@ -370,6 +382,7 @@ static bool PCanUsbConnect(void) } } +#if (PCANUSB_BUSOFF_AUTORECOVERY_ENABLE > 0) /* Enable the bus off auto reset. */ if (result) { @@ -381,6 +394,7 @@ static bool PCanUsbConnect(void) result = false; } } +#endif /* Configure reception acceptance filter, if it is not supposed to be fully open. */ if ( (result) && (pCanUsbSettings.mask != 0x00000000u) ) diff --git a/Host/libopenblt.dll b/Host/libopenblt.dll index 5ff3dc9fdcb3467f7ac10b4154e874398f6a7ddb..943bf8803177538aa92ea2dadcb0f946cf0d00a5 100644 GIT binary patch delta 10219 zcmb_hdt8m#*FSqJ(;yw4N+l}QQHb+A=Q;Q1oD+(YOr@gaev5IJ#$_mC1~Foh`~5x) zaS(%H2F19`jG4ht6i$SU3}eu{_Bk=>_rCwV`8@mVXRWo@Ui-V(T6^tBR&Il=+y=Ro zEpM#5&|6aTS0bVQ4M`)3q%)C7y5oa?C4t~drjRgLKzftLP)>?Sp=B>kA@$>&h@`wN zG;xr5FMleLlozw6u>^@;2J9`V#wHU?4xSC=&$0WXfK4M9;2`sje2LxC$Jk6~#3;rd z%xDYQz$pL@oW~(Hd{7=XyVcm7Wv~06!ygVl?q5}4|5+F|jXGkpEC8FC(9qG)P+lKr z_g{zaJ`m^VnPho~-R?{>*^JE+#&)TPz1N>$Z-_7U)+b?egK<5YVH3wDOJx%j{f*5` z)=cxkW{w`4PCc<{Y&q_jM;o`o<@ZYIn|(@ZsIX44400Mz8gIi1dZpM&|J1jXekvu6 z=Q{pNyX9yh4dd#Qd6phc9um6lt;HNxHfU9py(h^j@Eot>LNcL5e7|8YY|FjJb>WkI{!1unP z^hG6<`}(;RS4t#Bj*>A{ifU}^A1k4`UlhrJVSfJJ3CNxkQ9UoBdZPo%;4d!80hJhF zqo0;gxZ&5T$sf42g^rAGQ*iDn$ozXS1^%I~k;tCFnDfoj=i+>VcCfC`3}JM<4! zk|wQ%<(`Kg;PzDIB)*ETc3(1s zN*QET){PH94DljgLsCdb5)LauAELP!G4Z9ktDl|WNP zJG!g{x+p^F>k`ONq>=_utVpK$x1k;9O_$t;u3R$F!DcRq%5E3n7AzzdskaA(v8tZ9 z9cNT3dixKkR<)%r+>bEQ!#_h%=a#NZf37oR79@Apv+(RJ$6R%!b357dvvox7o@H9y zK-xt~SDb~2F1GmV(oWW?t|V`hJOyJT`{E&VDKe0j7r~22e_B`so>497#v%}-TDnay zl1S!8+?+A(rUR8oCeTNY*3V&l)L8%5g%Sy-w)mV2u?yTAB}t^#IY_ak??9FV3ZY)t zRm24Ax^kouT*0NobTttUYnGs83Bq(n0N z#59M(h-x+gb87(=qK=p(df+Dr=^jMBfzP_j$uP*kHq5f7dpM>49EZ}_ZuGn3z{RyD zGawaP-2S+kwD<>T7(bE>fl2XO=<#FV+arYxf+;=P5dn7e2qz)%q=#3g%a52zPB|4u zypxvWaVJR&FR~pEan=_n-g7+5XERPD<0N9{xbcDG_h@ulH%5+dinX4qMedmv`(Dp? zAIP4M!qO7nE6KBw;j4tUq%~L)OkR(U;C!!WdVPk#Bk6*ODoj;QaaLz&kk}U^g-dEm z^Nz#J#DQL~zW-P>u?jOATHp34^L>)DhpISgHUYH07nHGv@YHc^P}Z6e)aVQ)EU1qXW%q9^y;y;_lKCZk|% zs+@F&WvR)u!UBJ$cBShrVCoY@Cd1%90VEOT^l5|W@9!gT+P|O%<7#3*FWEWrcpp6L z(~~aQ2VMIHF?D@sde7Ty&vlr*l^3kt4zgkCD0_7;H0n2!42H@5dSnl58e$?-Eq8~Aw0Ym{wJr3+$!DAzjA4cvHf;w(S~cCc4aDI_>7Z?_TG*aZ zQ!QW$AFgM4ba)7Tx)q)d@6Xha=)nSMgq*m-xe+1My2bL>2uf(#W_bO16kV|yB1YP> z!N?F22}?(wBVWRRQECza%SRn#5jDCq=>mD97tsS7AY@E0(i>)u8A_|xL+_a_EKXws zNb@)h40h1i!Iy1j_Ildw&07bN<5tjr)m=7HJWnva}cTdv)rT9)mdZwZ~1^C{cl1;gBr&cp-UR)MFF zsVTh6zhcoxb7w;LZ-Sc+MS+^|v(@ETQpQ^Md}UeiO(JnwnZ>5T(|{c>kF(&}!bF;v z1(CVoBo-Fr8rPX(jO zvT5*o@ip3bnmxZ^;mkqq((d%#6ewBR!Trb-)E?uMt&^mW#N?ktW3ATdw$!l@y64Gh z+7uYDRYvzthnzfbf)#t7qIrEBQ{-r6VT*stvqR@PSKtfF5RWFq^Sn-U>txU_YfYxW zpk)zm!sLG!ux6xf0se4wSrYwu61Xi7qMIgJ49nLLm(3Y9NVuV*ml>7^D^_6X2{Tr8 zboZM00pgK05OtXboAX1v|z_m$p^VK%$>j)%~-$?O1Li}jaf_u8?9{xFsy8%tp9 zhGrxV=5O$2Rq6%>k-)7DE$E%m@ODEotMxX@Nk7Z+BI*J`9J1k>2>j+W8w_EzT z7mxU`4`XWfK{Cd+!fhi!vo)AZgZ^9HXyItc*y_s?+Ex|8=-Zm=wtqNV*qJHzg|X#q z9BvV}H6>)OC1LwYN}mjY%5SmK9Rk5Shp`LbPES@M>`bKp8N7IxhiBnnoVqHd31xun>C6i9J;UiQ{o&L6B34i3E4-)n ztF70F#@Ua;ll?5s_68BUx-WFx7s`&geXW>b`+P|d9NO1{V8HM5rT6>5t9>nKVIT0c zG^gA8fX32-U9>E|>~zCE9un9Oh65JgwoZK{l1*j1;KPhGDH*@TvLaLfEPytWT$%6k+Jl!&lq-0#|r6VA*}8=7ASM8 zD_E~bf&J2yHS1Rg2s?F-UWo?h(|z5?MgLb2ul>xHOwmtIhtOuxESX|8cm1>7O&^DedH z7gzlKg*HX(Cch_R+64=$7;c|o$2k)P_1WWVIwSl$66xPMIqqwifB z>b5V8VINrw`}JX9x?D+jn?Z5K(@QYdp8l^+Y#X7pl2!>)?m=y=R#v1Er#FSZ#7kUvM6=Rr* z;C>CmOspdWqJ7%_*KA>S%@$_Yf@PJ4I)b+iHNGtM-bW$q_uqZ)vb`_SQfb;O9hFwQ zueN=4YJ^9^4mGI$2yc&H&?ITwk(bs@|FJ-n`oH`?L(lxbNps|2MzMWX^T%vj377xy zqR&+<9$JWcn=j&}WUhNU?t*nq1I(57kBdL4*h1Vual?^(0_q!n?BKYO+B`(X_H2Hw zJ!^^-`=^=n5Vp-1p5Ab8Y|Wl#b^2mdPNKCsaH#{h-khi|V_&NueNq%rhQC;rl}RRk zS`<;jUKq86vFAmU%!zpGaxmuI?6VV@xruP>rdON#f<)qSFyig(6E>RT-_@{@1ztVp<}WFP!)HH&tc6^d%IjkDNFTxR*sZIVGyxFa+(=JK4FCoTsQpU%FT9x?)J*GjyJSHR- zkM%GFu)>z0an>ZHt=nY!kG{@P#Ah#H{pm^(j zCpL`(JS_3XlA+?Z7qqzJ67WXBJc(Jxe4ysj3`?Y?$Y6!{f+!eN5{*~MJta+>W-ub| z2AlTZVyQpeDrrTv3V3|mlPSfIeeLc9*T3JMxg>~1JZS+7?|6|Vu;b3#&+^)#j>MbU zKRL}!y!q(pyoi77pPObq!4DQ*$o%&*dV^;sGiwI0L1;}bbI|!HS%xmaOkNHz?k3Vd zL+x?WztowGfzhR28m}S+vW}*B?MbsF$Xyr)K;&QLH z0d;isWV-ryLR}8wAM5(N6-1N=%8FanQT9_S`+nz^`{D=d{Bo~06HuhKedC$V;0V-t z9-G?fDGI8}gJc19Rl3%w414HHa-si2uQn&;AFEu%R91FIl}oyOta1fxe#pBHMfs1G zoCwy3t;imbKJscKtD`KRDcc^2%DP2;tgIXo9)-Fd396&)TYyJx$vHTI$_62`_F~U7 zWocbeS)=HWmFd8tB1Gm=SJ}Hj2&-sM9>UlPuQryzkF`Bw+O*wJ+f8h0LpK-pSMahV zl>ca*5rH30(O&f|mCve3z17tccNs^m|nM#RXP%BRn3Su z*iX-pSnfFfNI>z%ja;!rytzf`%?1!y-8QJK0g;xVs2eKrYe=L=YZOYckKYxl!;tP| znOGe}NchrKq`7mqM*r&Wwe&Rkg@i9#MHs`m7Gv3ILO6QHdD$yM!esN11^BGSXA3^N zok@W|N0yR;l6s_M@xi)1zzL_f}LeC&B$6tc-)Ni zbz+^EKw_dc5jnX|No>K85Yp7QU`ixe>;NTnw8L2ZSh?v6ez@sh(4;$&QQvhn|5c6W zuOtE=aXOKRX)JL{B*-i16idEq;H;>SNF|RY()E~3B?WI&NGIne?Ps?9B=vZ5SIeJe zDR-ANnMe!b(nvp2uS6gPGa`v2O^`Mx(*N&=srIaw5QeJ%zaN`wx-54b@eIkA6WbYw zpA@Bw@IkMvW{@yPV885L-HJ$~mR%V~nnhZ%`wu?vS?rfN%9#A zh7iMNhGfGK!{>%MhFrrs!wy5f;h3SwaMkd;;l9B^bP^khQqfKH6n#WLF;G;CVPY4t zm)K7nElw0?iu1)hagF$`xL-Uj7K+8<03OovTB znq19I&CSgkb7ymmIn_MSJkFe9{?a_(ywtqbywkkb{G<65UIHYQm>1BEsG^}lp-58n zRa{rRP(*NJxi7gn+!F2}cY^zwyT<*8vvPlOZ@GHB3-8Vc@*#YC-pt4FJ@^!UC_jpy zz-Lb3zv370i}@A&7Je7Mk3YNZim1>i@E7@C_`Cc|K2WJpipof3g7RzSBIRo3CS|_ziSoJfZ>787E%*sWp^K0z3=)oI z3O@;FgffKZsnAd*Re2yppCLRMsyx*i)p=Eg>XquWrm;3g+e@3JovqE$Ue}gt%e4)4 zuDU>78{KlH3PiC(7n)|>PZ`d<2e`pNn%J?K~J_vuUY75Z0t2ZP!WX6Rx_ zFl;bvHS98+F$VN^~Kg=q?jOX5VwlE#53Xr^wDauzOl72(wJcU%6P_j-gwz~ z&G?&fl6j5!7eu7o{M`JOIiZwDt|2n9iXRjw6=xL>6cvg;6@9ru+;Hw|Za%k|`-_wC z4R|-+mk;7OUc-0hqxm>~0RK5Z4)L1B=kSX%`Q`j(ekY&L7w{+fpZUxDb-t9Zuaqji z(c#)DwMw(Hn{vEzhVm3`6l(*LZ#tp8PiQ-4=))j!c!>0j$5hWds^23Lcpp@kvP(AuEL z#C;JB9SxC&?zlH823KQ{G0B)}9B524jy9$nXB+1kw;C&qe;QvI-x(cD4NOf;p6J1H zQ>aNmFYaWDHuW&|Go_hEnI@Q~nZ7oyFzqxQGZmT|n5AY9vyZu@IoRCZtTr3X;pS*_ zygAuC09||>W|bM{ug#f@%&W}#<^$%3=1TKl<~M9#@$Q#uOD;|d7lntSxgt=}M!_p| ziVlh>MVum4F+ed)F;1~bv0rgVVZ}&zr*PmJa8k~L^Wj=@!CX5|;PhM=*O`mw269u- z8R5D(xoid5ol6+RRd|Rr_4)q4U9D>Zlv5 z+pRmGyR3VybJoY}v-O4g0NkZ{hMNXAQ4oiUdoVs8imt{m;}qj8<4?xtMzv{xX`JaB z(|!c~r0JUJmZ{YA&gAp~`gUf)tT%^YLjTo#!~EDR!SC@bpVU_j<;HN6GPxPtT<#kL zXdSnkJBk4P#@*sdxpK~fZ^no6k^E=;Kz;^4htK7gVS@gNFXFH8zw$}S0hop}l(Us9 zm0K|)8elB65wt?QkSvT6W(so=rR~CQ;gnD%{4IE^f>b7qfnKVZc9W#%bqa;(4o`s9T8V zWwox6-b3F)AE0lopQP`A?t8{?$siHy<7w!MXJHFG30sQ_JPk#$Bj%Uxm|;@H{)pg6 lalAN5oG#81=ZU#uUPE!UxKZ3L?#2&C1!6Wm<*-QM^gkRIBGUi> delta 10406 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%0Dq)KT^I_zC{&zazR`Sswkf8 z!u8pMteZ}O4~y>N_SgVr5mart^Y(nQ@=nD z`jz@}{r70VTB8~BU@m6C>BiZ{1;)h~SJoLf8Mhd>V|@7$Bg}E*8Pwqw%!%bPih{{Z%