From 554283655ccb4e0e12f4ece3502f22b044499d3b Mon Sep 17 00:00:00 2001 From: Igor Misic Date: Thu, 19 May 2022 15:27:08 +0200 Subject: [PATCH] Revert "px4io: replace safety_off state with safety button event (#19558)" This reverts commit 12a81979a8e53b482f45b888faa1c8ed79d23ada. --- .../extras/cubepilot_io-v2_default.bin | Bin 39700 -> 39728 bytes .../extras/cubepilot_io-v2_default.bin | Bin 39700 -> 39728 bytes .../durandal-v1/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../pix32v5/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../mro/x21-777/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../px4/fmu-v2/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../px4/fmu-v3/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../fmu-v4pro/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../px4/fmu-v5/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../px4/fmu-v5x/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes .../px4/fmu-v6x/extras/px4_io-v2_default.bin | Bin 39920 -> 39952 bytes msg/px4io_status.msg | 2 +- src/drivers/drv_pwm_output.h | 6 + src/drivers/pca9685_pwm_out/main.cpp | 2 + src/drivers/pwm_out/PWMOut.cpp | 2 + src/drivers/px4io/px4io.cpp | 134 ++++++++++++++---- src/drivers/uavcan/uavcan_main.cpp | 2 + src/modules/commander/commander_params.c | 2 +- src/modules/commander/esc_calibration.cpp | 10 ++ src/modules/px4iofirmware/CMakeLists.txt | 2 +- src/modules/px4iofirmware/mixer.cpp | 6 +- src/modules/px4iofirmware/protocol.h | 13 +- src/modules/px4iofirmware/px4io.cpp | 10 +- src/modules/px4iofirmware/px4io.h | 6 +- src/modules/px4iofirmware/registers.c | 19 +-- .../{safety_button.cpp => safety.cpp} | 43 ++++-- 26 files changed, 190 insertions(+), 69 deletions(-) rename src/modules/px4iofirmware/{safety_button.cpp => safety.cpp} (79%) diff --git a/boards/cubepilot/cubeorange/extras/cubepilot_io-v2_default.bin b/boards/cubepilot/cubeorange/extras/cubepilot_io-v2_default.bin index c75ca85285ec0cafc4b54bea788887dbd1187089..fc9066700fbd65dc8c497a04666ced228cbc4148 100755 GIT binary patch delta 4227 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 delta 4249 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 delta 4249 zcmZ8l4OA3YmVU3Qe~Le8KoIDl-IOSZKOkyIh@kMP3B6IX2gEQOkD;V2J71js&LXiO>WZ2`}i@PvxB{^(1{I6r@;8tfF z8?Kpfr4ey`fZKq-Hah<^H^*RR&!?&_giOJ zd=17&NS*#Ae3N{oKaRh5Rz0&r%{)Hs{K5Dy7+-Ok`7^=zymM%ljDdcf^DM)7PCMi0 zPSb?#Y(^Xf(g8b*Ge1#jw7*AO;Ixxj_=G9yndJyZtZqr!7oq z;%<~=9r?{xh9DkI?;Aq=i30W*BiR*=;kcQVB7NAHH+lwn%CM z@Uf6LdJr^qFqdN)JqqGZ50VDGNcwsVNy`9{W1-Dhs&I!lY7C9-sgCfI5skaS@lRm$ z$jeAumEhxyWLA*$B!HwFV^}Kp_v*<9i{se>zm{|_o?crmHfj@YVrhfzI-l!Vkstg`WOK;-Skkz=m6d5B4Ie8gZN6=bZJih+F`B4; zngNY>f@gX0Eyy)0&)knC)=%Ywxm-_uZq7GYnm)FqaEV1{UsAj+nZIp~m)3;F*=N~9 zy?8X#tNz(4y%l=VD~)z|ePox_7=8V=$r5kJbK`Aax=aPwzA#1X(U1&T)TGErlk|eZHW1Lv!=8)y>V#o8NLAJ-QeENZXRe^4aDi?E#q^JL2jR z?`jX-%o`P=PURjPNP)`d$M(Cvc)~`gq;SMYX+8(o@FR{qy-FXdde9|KZ5xlNy30}H z0)6$c%OK3#!$^7FjihC%-tuBV*EvmzHdVO1G6HEe0AU?z#4;ruhoQJp5660-5 z>*nr>i;zhL_yVFpz*m8H0mjym3FRxXk8CW@#xIbT^6B_la--Zh>x3Ke279~^CwS%a z?o@E)U{h`CR;e5H(1p}t9qXrw>XqTkL+*({UM`Y}ddWeP)No;FV{%V=R-3Vr^=Wr@EspF~zaA{80uTjmuX!%mV*~^evx~ z^p1N0SS;{hKGl{x{0t=3J(y_<$p3X2_0Uv8X=)^*BFYkNN1U!hUleTM?YxA+5=+Gj zZx1%)Jsk-!!Z6~-=dxj>*D|+gRqDEV`x=;0jnB*_Z&Xx9TvOD7D0~kcu~8cW-Spqd z-3rU}uNAGuD8$;d1z3{CG?rMX1k_Xiw5I9(XMPt7mIiI6U z2N{*xK~5okD^vJ+fiH&;W{j1fnV?jQJUo{?Nyk<@_;+yzUxy@~#H~u25|CMiF`5hf zav)GGVk19pgZQEX-r<*jB&${}goqng<-pm!w<;SyCJC#Jcr(dfof7SU*pi>dO`l6Y z$hXO^)y7&8}=7 zXczZjzD4YP;)vQ@7zHzjg@9ZhW?JNfKMkSve{kVxPM2T) z!jESM4WtU?X6yg6%z{%EP-k_XfZC)|RA+;NO8(wnE#6m5O;M6A{3Oia0W@n(Kg{Fm zP7K|%$c>H96&z5I&M()e_;bx_gI_-9r>0BWvbOW%?m{}5+3dhtFSn?OH! z#`$ISY)s8Z*A(CxBzx_8t-+fnc;tKJ!diWV0uBaYPc##o=q-Phe82X3FxA>28d&yk z>n`F(vUdIYgkSt2Zq|@wRSTiQnbt`HGHyy_o5$oVGPM39Ml(hZ+aIW@zfEM@hU}*y zkV_j*)h7DrZQzzC1D^(t2R;ZK11&HbIMSChdI5NXuW0xXa4_gYfi=E@VKp!VtOE9X z3y1Z<9&gTQJn*O&UN7P8(k)kl2g-j33l4Y)W~?JuO5E~dpS5;ecrb2^VKN_#DStPv zi3RBe&`|#KxF!yy4A4;ik8zC#q#2;0{Q0;>3z88ul%3-m9Z0dDp?q#!69G~lVF2x%B7k-&+DUaCXlkq_ zQHV9C8hVG&B9HtBzfpk0`)YK7TYi(Yyq*$D=ytl=Lb1uQ~3cv?@QuR)#oGuvm06qs?2E;cZ?nOWqU_anI;9CImA>w8`)o<3| z`P2nnPM1`Gx*c#CKwbTV%D{Vor@@!0Z-J@%AaY?_94;gOxy>B?0LE7V{eaAlFd@(A zlRqO#Z&hH4)V|e*Z#&c9u4Lk<2{qjVQPSj*01?I@MKLj%80zT1(Pf3E8n&x-sJln#9tDDBA^J%FgJ$mv~Z z>iOJ>ceX=wyY8oDbpR>yVJ{u``sqqK7M-u`Okwj2U>kbC>DD8V?yl@(+2~5uBANnC zi#`e&^fWA*9!;C3NYkcaW&)Nw`)WgQ1f8ZT>WW5Q;2d)BIF6=AlcAQ>8#STc21!zV zrTQ8jk-hcT@rR^zcQkG$>v!klH_3(FQ}8y@w>ujzB4K-ya4yN%Q;fHhx;-B!o%9(5 z=3}qC#jlzia`)a46RB=goj}LDa>|%$GINJ%_R7V?x_1`5UGCcZT=Y%%48bU1&^~r+ zThqF!^aHuRSC4-nuDwQFPJ;I7BLFKssPP;5mR1kmSUNk8}7c wX*glwl21W*gujUTpr`J^8gXwike~3IEhAlL?uy|QHc&d zqNZX5iLaPkalr7}wS8H5t&jw?RVBik2AQeJLWww5Rn=q~=*=#2K-^xzFwbptz)Gy@X zr$})Pa2xQ@dLy8T#fz*JAwd|wYdtvRfgG>2t{)aBV`QIOKZ#t6<+9I_!eR}HUWf6A zWNXYc+)A#+9K!9^qS#Gx{M34%TY>RKtByYwh-<7}DG~E45h*SU-wK#h_Z>lQX}t@9v>T+=F3e^3eGJkH z7ZMXZNDS~Ik@O=mzdyJJi-(<|)us8>=loQmhd1gn%;D9nI1{WAJ&gEI#|=lKnGw%B zu=tV#i9@_tyzH%eqF`mD=t&?ehj{LH$?)5+>v!iUY}<08ZesDA*DU1roJG3?x1@K; zL4FAq*SNACYYFZSzN09rbgPJ&=+$mXMMCpq$_yQDDe-@-d1{UEIJPYtY~2#; zYO>6iGwsEeD*xEqSX}SbPnQdKy3nMSXg>&rVf_a}@w=$e7i$!@g_?kyLu-N#U{U34 zb}UK_s>(3GY+Pe(vMiMI;HBDM)lRpHZcw}P)x7pH*i)r?V=ET5-gb}&(Wveyn4XS!~Utfb;{1s2eFQ3Wz z*oL?liyd>u>CfbZn{YSA;l|4yv4&_9o)m2iX|~5|v1!V`_DU29TwkkL{!JQDx73U!HDtueNrsE;643Yg}?*f{ETeB z_#;&!jRBAh$c1&YazfDzl2(i^1`eUengTRa-lEN$sZE z)wSi7l@;)ZhKX!wunlwQ`3E2)(`HqarRqL9=aa5@KC(Ai3g!E5tNR4yr#ZXZlHj9! z;Mr-v@{A3aiJ^!Q-}ad8nx3HIPjg;rYqIdY=HeJxOmLHV{c~+HXa}M$?zO9g-;^`r zd+z1-*Xz&!dbKRkmfw5z-KgYrThwSy_@Y~hkf`;AHI5M+5m|HWZaPt9ShqRfj#A2c z^Ugj}tNV^2nTWAVTIHK+&li2EZ9l&c+fK`XzHSe2Ffc8J60&#pG<=G*&*tzaM4Fux zzRM$1A#sbV#(|I=q*9VLCnIF3hjxa)3RwaYuaZr3bY;JXmlz9Pc7ZqQiLOAs(iPGh z^gR*CCH=+A=kd9t_373x;jMJ-(#CRk?D@Ta$i8JqHX0la)><1R1I<;l1WHY#ZG) zmo$&;oy+4rq<(H(_;!!HZm~n=e!2`Pj_<%IYe2i=x%S|jNTKb-$V9^DafWbLqRA}{ zapm{s%$g`9nh*)rPvzax-<^mL(nW*DEj@AaCR)k7k*QnVJZvh;k^yc*6bQHjcrT!e zY?-$h_mF$@GVx>*Gk+}ZBI@~EiXJ?vOwmFVbi*aiB=BTrlZ^5@u^HLuJnHWN@Q3hP zI>>?f>XA9l*6yjOw>8)hQ_6~&ER$CEL>>CeEfvHviFD5&@$x^wo~}>lr#JYipg}o? z8%E?t8s#A0aYPt~=S3PdeGKeOl}F#h0v{w(7Q`haIVXcfrxWu@#+;s5$f>zAJ1Qg|X8cruwhSWp=5a>xaXaMyuStNnwZgZB`_Lc>^(!{5LOkw$+lbZW1kA<`HI z`$9{T7Ck-Jjquh#B+UzxxI%|c$B6&-$_16cinAR8jO<=4Bnpgp#K(#!NkHMekP6>6 z;p_S^E*+|>g}hVvG8V|m!nY*{B{kaQahARZk zC10_Hhka3tVQjIPufS>iRwT|M6^qA?Z16Fh4s7bd26Oy?1>$qHyxA)ea%1rnSTkrz zHl9WDmSkd%>|Mg)cye~hxQP7_S?cqs>8?BkxsyCy!j&D=-#d4+i_vU<7H*mSSk8Ww z9|WDL(vNM&s{J~zG{mRk_Q9Gx-k66-e9w#cx+gNlZa5?40R}iNb2Ro_D%dfvbi)f- z6;bJ`w_Mi-2jQ1+u78%Z!|rE>MjJqLv9bF=DkilQy8G_AhL5+`TdRoqfYXQQ{+0^zPHQ;I78dD@|^ zUTGEN_J(f09xhiwI8Bih5A0}T5{5qfwhL*F*l|Lw-7A%NaY{g2hA>Ar{r_2}!58NX zR5w;aol+^LvC4stzv0^DDz+H%m10vQBr`-vWd8G&aN?kQ{ z$QOr1)p4YtRiZlK4>!HR_Do?!bOI?JSyPryz+kX= znGSc5Q_Gg8{mqpsxTM`~-?^Poo+<&7-dZ9?$olMq|B+1rh5ZOtMaejeUN5eY>^H9m zP^}39dPE|Ye}#4A#`5JO2bKWKlrAw}E(8n5>P85NTN%&R^h;f&!1M(^PbAZia_Y@Q z?!T2e7!={&K2p}|rk7Hu^xbpTdt?JwQ>UcyWIdjWaAL5HUN-6F)G0N(^>A%?M8hAJG7w|j+_=G#V?~lMo!23SnD$oZ5A9QPb3N(~o9nge>bQCm{Q=jkL8TX5w zJ59n@D)CN|uyUGQ1@9}2tXXN0M}jnle7lloo_Wa6E62!xx`=F%B>Wu?KO|}IB;ZK0 z;GGt{f{a}CU&hgN8oYQFU^d9V0nP=UL7f0Pp{f#rsng>C+Mg={v>VcX9oB$GM;hXV zNL`Yur3+1UNn^a60BzxS5n89z*H2cKyr#VDZSD-qn%ZN5Eao;+S6i%&CHI(ss~}zu zhLgs6WUU=%{}qO<00%5e)tjOIuEY3yz;}SZ0fv8u6t4jm1GWQd05<_%zWCnjTG?rbyGKVQK*;>t1sZ4yTW)in^ka&$pi5%Ht@S9!-W?Qg76RdUKGU zwiU{Mpd+H$ejSe{;pGu{JQ-WAVW8Ajm5*X15BaeCxA@QGMtK6hLY|f9;de>)2d5Ka zJt~1Y?UtVP%SHv=yWhnOl~>Cu(LuNLrAIc3`GKi%OW%{w9Vxh!Oxf{j#9ZfiffF!j z*E#*`Qk$t{B)fOSU?VxTgTr^pwH-0xH$Fj%4|GV8-az}ITRKL5-O-5C$=RKGxPkQV zd}Rb*`NBd5efW}Fk(b`+lqOjXmMJoN`+5qiLsJJwPOS^B0(L_HQMJ<;k z>UATy#4&yYaZG>?V+aq?rxW8Oc>$w&B#z^fn1&cG zo^wytxu-7f{ge^UG1%CM=VSaKDaUa^iZG-{2v@pR|Gf4i;317ky>fwdKTYMY2@Xosmc9Avtlj;D0V(zE~L zV8%iI)d|#QRzGA6Qa-MrYE!T20Tk$&RZQ=e8o>?$OTea2dO+iAWQc=zo&4^ z^CX4VPQ*34Qu9+ST6=2Y>q&+#tGFOE#y-{_8Y$!cP+9q#Ra_tX7g_9YmVE>l=?o`5 zBl15oMcDBpj3aF4yW%aec04ZD*5ZoK!}dwZLc5B*Si~t#xllWqQxqM9P9V*gAf%5Z zn~SXB8FI=7WJp9%#tTqPY0mA1&M!S=ZuL*gkPHj!)dE0gFZMsM--;!A-Qq z!;%~UDFNQr<^cyEyzl(azp9ZwNdrd-Fopsm7){|QofH=*;Lpjb;xxRUoG30?_P!ZE z$i>~!7n;;bxa&x+u@j3C14k`K^Dp%gnf|B z&K`w0`_r{TZd&KN`9uKwKF2!Z=ytvRzjmV$x0}qLx{zIIT|=%+<$_uqpFP6iM)3l9 zG&LpdL&xoIr5Ktx?xnoCC3ST(=GE2JtzPdqa9|t!LqkM1JhUBi=xJ4}h-KQ&(p2;Q zrhxRhZ@;TmxT${kdQLyDJ8Ih9nG9#`u5X9y@?$naA%-JHoa1wVjiJwx6Q_s^RorP6 zo@pH1WksuFoeT68y)HffTs0%El9!RjX}T9V{`4aqLgFg{ZObTklyR0zrg@1BD?6sS z(Adhp;*WpI$>~3V6e7l6>9s(f%PI!aZ;;CAG1y9Krcc2q$=&H3-b>h$l!(1Pg&v7- zcSc9fX$JknVbSE+5z?~OuU>1)5fK%Z}KJSEIh z1Yg(L@%W$=olX6{wa<~QPY6g=GQI=VY&#|B`W&l^9Nnl?1=R9-dO&jtmBywr#esU#-4gCgk>(6zfDB8y?-xa`#-; zz7Ml+yJ%rL0O<_UzfAVc(BTSldWHd4ldCgEL{$2e4RhTJ`R+obd4D@bwn6RUr`pYn zkS4DiBO^&J$Ucore*L+c0@w+CmUqxM-MWDm}5aBOA=XC8Wr&s#6y#j zu>*J;po$zUor`_sacLHQnT($~8vjPhW^!X^z)HP6mXCq%v(%Gf&k-GLicQ%dwxM>q zZV33;3A_@@zk}4z%)zgchcn{}U-3N4Go0QYkW7L5a0+RxP{4JtrLpPSiOnj#EOonw zT80%w+ms;Rb4OW*7Dn50`x$sSr+xXoEbvKEGHb+=7d+2{MV|*7Qf#K)c-CNR>z-%~ zNZ*`C?KBJOoqDD_(gG9!4WP!3G}`94f?&PDZV)l7!(yS^U=P;kJRR{c!Z6Yd&SjBX zvtsZ#BF!p`=yxl5f&U(wU9CC<`r=drlZ8kIFFMcJj=UHedJdA$yV?K#z#F_vro*-OVY1p>F7XH&lEjJNL z?i;eLYyvis*0LoTe}{bjxv4U1RV17FI7*4`z?jCN6|(?hWQDP)IvDBa01knEFDaRm zjHi;yIg>C)+U8WoJPwR(gkmmUmgkoq21bL7itQk~NXgt}gDvoR55f#r2AZz|6@met zL5`?pD;$QMc)XzsiB@uQ?&zS40fsY!O&jT)tHUSA{kfB1hlY9Ccs^M;FAFD-)AKl- zO0LXHjuK!m=}-4bpF={zGGRk1g){vESl ziVf(ww;_t(A9n|dultdq;ekrCGr#-W_AycmFTRoSQ;FrGlLmuT+y6)d%?u3s_ zD|}>{Or_tR5oW4NZ=4ZoRMT&4wrtL4A8GM4w<2V>$y5pC=|rQ>2pbFFG_Q+puMpm_ zMz>#jY-BT6pP?swovNckn5}-b9UIOFmmWKGtMhd*vzLEje@0l5KWMMhtvbD2BAynm9z39JN!}=BvWZK&(4P{N(dgWNl65D zcQT_Q?_BIbi$8GTQBId%+TzElL7gdlsoDDfEHgK-VnCVMas+CTO1hRBH!6DAR3Y4U z8&B#)ZTNdIgFDgK1syPtD_Sr#!2%EFUd-F&Mq0mQO!k}1O1)pQ`>E-)#>@?dL3bf7 zOe)*CP>2$>N<{~qBiC(-x(o|^h^9o_vG{hYLFiKdd}9m=DxXxDV0o60HB0bkp<{CKv^kmSg-S|Gz(CW~iRHJU-H$fi{ zOncuw;75R7z&IF(0{dWo2dtsheh^q>K}o(SH-;Z^f7iog)R@A$()j_YkqrBT2VW); z6^r3_V?~a#4-BKp#R>~XBy2&ZGVdhPTy_>NNW);Td7&A1lPe1skN<}^o%c$$a-eAk zl%<}Bq^nkmQHp-olV50EP|%klG#Z1A^b7w1DPQzu5Y^gYQVeHV&6(nI+PR}R`@nEMHADX$;YM1yn_G?Z5iYGOdT1{%r>1~nxr5U+xYa@n9t z4blbBP@X!d(SmdiG?dMQnh20S0u5#3(y8YX)8uzE!nu@5`K$JTKO+qJQ!=?#p?kDAU_8@ z890wR0ek^fr3a=?j{s;V-V2~zkalKmGkPZ4lE_D!Q}ma5&}6Ulyr1KtIs73i&m*b) zWY4OXbl3cC-CE=1UIDUL)Iwd&b$-9MDTLm3l8 zO{i%#Y?H>L=34OCO18cEZrJ~w?IPS;mvS4x#s>HV@F^e-3&YLkw%i_P2-g_!P-d5H;p$?AI|~O0TTft-9vLwfx(Va z*dOS|*N}6Ya&lj8ed5_Iy&yliR}{l>+l8p?mM(pUp82zB$PXK!eV*{sOY$z{mJ($; zKJ2F}={VMzwKzDXBl2ILnUm{bg za~UYLcdCao>H+dm^(**0^00a&zD{)83h{JOzO8=b7@wYJ>Sc-bD~5;Myw$@*Dr*%- z&_P*h^(lrkKQMK&bep7YAB$&_x!YfiS_Bt7j>n+g>QOhOw^3;|IkP$gLdkAT^nUQ8i_@% diff --git a/boards/holybro/pix32v5/extras/px4_io-v2_default.bin b/boards/holybro/pix32v5/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 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 diff --git a/boards/mro/x21-777/extras/px4_io-v2_default.bin b/boards/mro/x21-777/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 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 diff --git a/boards/px4/fmu-v2/extras/px4_io-v2_default.bin b/boards/px4/fmu-v2/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 zcmZ8k3s@9Kwyx@)f#D_Ki1JdVX;Bo2C>ujUTpr`J^8gXwike~3IEhAlL?uy|QHc&d zqNZX5iLaPkalr7}wS8H5t&jw?RVBik2AQeJLWww5Rn=q~=*=#2K-^xzFwbptz)Gy@X zr$})Pa2xQ@dLy8T#fz*JAwd|wYdtvRfgG>2t{)aBV`QIOKZ#t6<+9I_!eR}HUWf6A zWNXYc+)A#+9K!9^qS#Gx{M34%TY>RKtByYwh-<7}DG~E45h*SU-wK#h_Z>lQX}t@9v>T+=F3e^3eGJkH z7ZMXZNDS~Ik@O=mzdyJJi-(<|)us8>=loQmhd1gn%;D9nI1{WAJ&gEI#|=lKnGw%B zu=tV#i9@_tyzH%eqF`mD=t&?ehj{LH$?)5+>v!iUY}<08ZesDA*DU1roJG3?x1@K; zL4FAq*SNACYYFZSzN09rbgPJ&=+$mXMMCpq$_yQDDe-@-d1{UEIJPYtY~2#; zYO>6iGwsEeD*xEqSX}SbPnQdKy3nMSXg>&rVf_a}@w=$e7i$!@g_?kyLu-N#U{U34 zb}UK_s>(3GY+Pe(vMiMI;HBDM)lRpHZcw}P)x7pH*i)r?V=ET5-gb}&(Wveyn4XS!~Utfb;{1s2eFQ3Wz z*oL?liyd>u>CfbZn{YSA;l|4yv4&_9o)m2iX|~5|v1!V`_DU29TwkkL{!JQDx73U!HDtueNrsE;643Yg}?*f{ETeB z_#;&!jRBAh$c1&YazfDzl2(i^1`eUengTRa-lEN$sZE z)wSi7l@;)ZhKX!wunlwQ`3E2)(`HqarRqL9=aa5@KC(Ai3g!E5tNR4yr#ZXZlHj9! z;Mr-v@{A3aiJ^!Q-}ad8nx3HIPjg;rYqIdY=HeJxOmLHV{c~+HXa}M$?zO9g-;^`r zd+z1-*Xz&!dbKRkmfw5z-KgYrThwSy_@Y~hkf`;AHI5M+5m|HWZaPt9ShqRfj#A2c z^Ugj}tNV^2nTWAVTIHK+&li2EZ9l&c+fK`XzHSe2Ffc8J60&#pG<=G*&*tzaM4Fux zzRM$1A#sbV#(|I=q*9VLCnIF3hjxa)3RwaYuaZr3bY;JXmlz9Pc7ZqQiLOAs(iPGh z^gR*CCH=+A=kd9t_373x;jMJ-(#CRk?D@Ta$i8JqHX0la)><1R1I<;l1WHY#ZG) zmo$&;oy+4rq<(H(_;!!HZm~n=e!2`Pj_<%IYe2i=x%S|jNTKb-$V9^DafWbLqRA}{ zapm{s%$g`9nh*)rPvzax-<^mL(nW*DEj@AaCR)k7k*QnVJZvh;k^yc*6bQHjcrT!e zY?-$h_mF$@GVx>*Gk+}ZBI@~EiXJ?vOwmFVbi*aiB=BTrlZ^5@u^HLuJnHWN@Q3hP zI>>?f>XA9l*6yjOw>8)hQ_6~&ER$CEL>>CeEfvHviFD5&@$x^wo~}>lr#JYipg}o? z8%E?t8s#A0aYPt~=S3PdeGKeOl}F#h0v{w(7Q`haIVXcfrxWu@#+;s5$f>zAJ1Qg|X8cruwhSWp=5a>xaXaMyuStNnwZgZB`_Lc>^(!{5LOkw$+lbZW1kA<`HI z`$9{T7Ck-Jjquh#B+UzxxI%|c$B6&-$_16cinAR8jO<=4Bnpgp#K(#!NkHMekP6>6 z;p_S^E*+|>g}hVvG8V|m!nY*{B{kaQahARZk zC10_Hhka3tVQjIPufS>iRwT|M6^qA?Z16Fh4s7bd26Oy?1>$qHyxA)ea%1rnSTkrz zHl9WDmSkd%>|Mg)cye~hxQP7_S?cqs>8?BkxsyCy!j&D=-#d4+i_vU<7H*mSSk8Ww z9|WDL(vNM&s{J~zG{mRk_Q9Gx-k66-e9w#cx+gNlZa5?40R}iNb2Ro_D%dfvbi)f- z6;bJ`w_Mi-2jQ1+u78%Z!|rE>MjJqLv9bF=DkilQy8G_AhL5+`TdRoqfYXQQ{+0^zPHQ;I78dD@|^ zUTGEN_J(f09xhiwI8Bih5A0}T5{5qfwhL*F*l|Lw-7A%NaY{g2hA>Ar{r_2}!58NX zR5w;aol+^LvC4stzv0^DDz+H%m10vQBr`-vWd8G&aN?kQ{ z$QOr1)p4YtRiZlK4>!HR_Do?!bOI?JSyPryz+kX= znGSc5Q_Gg8{mqpsxTM`~-?^Poo+<&7-dZ9?$olMq|B+1rh5ZOtMaejeUN5eY>^H9m zP^}39dPE|Ye}#4A#`5JO2bKWKlrAw}E(8n5>P85NTN%&R^h;f&!1M(^PbAZia_Y@Q z?!T2e7!={&K2p}|rk7Hu^xbpTdt?JwQ>UcyWIdjWaAL5HUN-6F)G0N(^>A%?M8hAJG7w|j+_=G#V?~lMo!23SnD$oZ5A9QPb3N(~o9nge>bQCm{Q=jkL8TX5w zJ59n@D)CN|uyUGQ1@9}2tXXN0M}jnle7lloo_Wa6E62!xx`=F%B>Wu?KO|}IB;ZK0 z;GGt{f{a}CU&hgN8oYQFU^d9V0nP=UL7f0Pp{f#rsng>C+Mg={v>VcX9oB$GM;hXV zNL`Yur3+1UNn^a60BzxS5n89z*H2cKyr#VDZSD-qn%ZN5Eao;+S6i%&CHI(ss~}zu zhLgs6WUU=%{}qO<00%5e)tjOIuEY3yz;}SZ0fv8u6t4jm1GWQd05<_%zWCnjTG?rbyGKVQK*;>t1sZ4yTW)in^ka&$pi5%Ht@S9!-W?Qg76RdUKGU zwiU{Mpd+H$ejSe{;pGu{JQ-WAVW8Ajm5*X15BaeCxA@QGMtK6hLY|f9;de>)2d5Ka zJt~1Y?UtVP%SHv=yWhnOl~>Cu(LuNLrAIc3`GKi%OW%{w9Vxh!Oxf{j#9ZfiffF!j z*E#*`Qk$t{B)fOSU?VxTgTr^pwH-0xH$Fj%4|GV8-az}ITRKL5-O-5C$=RKGxPkQV zd}Rb*`NBd5efW}Fk(b`+lqOjXmMJoN`+5qiLsJJwPOS^B0(L_HQMJ<;k z>UATy#4&yYaZG>?V+aq?rxW8Oc>$w&B#z^fn1&cG zo^wytxu-7f{ge^UG1%CM=VSaKDaUa^iZG-{2v@pR|Gf4i;317ky>fwdKTYMY2@Xosmc9Avtlj;D0V(zE~L zV8%iI)d|#QRzGA6Qa-MrYE!T20Tk$&RZQ=e8o>?$OTea2dO+iAWQc=zo&4^ z^CX4VPQ*34Qu9+ST6=2Y>q&+#tGFOE#y-{_8Y$!cP+9q#Ra_tX7g_9YmVE>l=?o`5 zBl15oMcDBpj3aF4yW%aec04ZD*5ZoK!}dwZLc5B*Si~t#xllWqQxqM9P9V*gAf%5Z zn~SXB8FI=7WJp9%#tTqPY0mA1&M!S=ZuL*gkPHj!)dE0gFZMsM--;!A-Qq z!;%~UDFNQr<^cyEyzl(azp9ZwNdrd-Fopsm7){|QofH=*;Lpjb;xxRUoG30?_P!ZE z$i>~!7n;;bxa&x+u@j3C14k`K^Dp%gnf|B z&K`w0`_r{TZd&KN`9uKwKF2!Z=ytvRzjmV$x0}qLx{zIIT|=%+<$_uqpFP6iM)3l9 zG&LpdL&xoIr5Ktx?xnoCC3ST(=GE2JtzPdqa9|t!LqkM1JhUBi=xJ4}h-KQ&(p2;Q zrhxRhZ@;TmxT${kdQLyDJ8Ih9nG9#`u5X9y@?$naA%-JHoa1wVjiJwx6Q_s^RorP6 zo@pH1WksuFoeT68y)HffTs0%El9!RjX}T9V{`4aqLgFg{ZObTklyR0zrg@1BD?6sS z(Adhp;*WpI$>~3V6e7l6>9s(f%PI!aZ;;CAG1y9Krcc2q$=&H3-b>h$l!(1Pg&v7- zcSc9fX$JknVbSE+5z?~OuU>1)5fK%Z}KJSEIh z1Yg(L@%W$=olX6{wa<~QPY6g=GQI=VY&#|B`W&l^9Nnl?1=R9-dO&jtmBywr#esU#-4gCgk>(6zfDB8y?-xa`#-; zz7Ml+yJ%rL0O<_UzfAVc(BTSldWHd4ldCgEL{$2e4RhTJ`R+obd4D@bwn6RUr`pYn zkS4DiBO^&J$Ucore*L+c0@w+CmUqxM-MWDm}5aBOA=XC8Wr&s#6y#j zu>*J;po$zUor`_sacLHQnT($~8vjPhW^!X^z)HP6mXCq%v(%Gf&k-GLicQ%dwxM>q zZV33;3A_@@zk}4z%)zgchcn{}U-3N4Go0QYkW7L5a0+RxP{4JtrLpPSiOnj#EOonw zT80%w+ms;Rb4OW*7Dn50`x$sSr+xXoEbvKEGHb+=7d+2{MV|*7Qf#K)c-CNR>z-%~ zNZ*`C?KBJOoqDD_(gG9!4WP!3G}`94f?&PDZV)l7!(yS^U=P;kJRR{c!Z6Yd&SjBX zvtsZ#BF!p`=yxl5f&U(wU9CC<`r=drlZ8kIFFMcJj=UHedJdA$yV?K#z#F_vro*-OVY1p>F7XH&lEjJNL z?i;eLYyvis*0LoTe}{bjxv4U1RV17FI7*4`z?jCN6|(?hWQDP)IvDBa01knEFDaRm zjHi;yIg>C)+U8WoJPwR(gkmmUmgkoq21bL7itQk~NXgt}gDvoR55f#r2AZz|6@met zL5`?pD;$QMc)XzsiB@uQ?&zS40fsY!O&jT)tHUSA{kfB1hlY9Ccs^M;FAFD-)AKl- zO0LXHjuK!m=}-4bpF={zGGRk1g){vESl ziVf(ww;_t(A9n|dultdq;ekrCGr#-W_AycmFTRoSQ;FrGlLmuT+y6)d%?u3s_ zD|}>{Or_tR5oW4NZ=4ZoRMT&4wrtL4A8GM4w<2V>$y5pC=|rQ>2pbFFG_Q+puMpm_ zMz>#jY-BT6pP?swovNckn5}-b9UIOFmmWKGtMhd*vzLEje@0l5KWMMhtvbD2BAynm9z39JN!}=BvWZK&(4P{N(dgWNl65D zcQT_Q?_BIbi$8GTQBId%+TzElL7gdlsoDDfEHgK-VnCVMas+CTO1hRBH!6DAR3Y4U z8&B#)ZTNdIgFDgK1syPtD_Sr#!2%EFUd-F&Mq0mQO!k}1O1)pQ`>E-)#>@?dL3bf7 zOe)*CP>2$>N<{~qBiC(-x(o|^h^9o_vG{hYLFiKdd}9m=DxXxDV0o60HB0bkp<{CKv^kmSg-S|Gz(CW~iRHJU-H$fi{ zOncuw;75R7z&IF(0{dWo2dtsheh^q>K}o(SH-;Z^f7iog)R@A$()j_YkqrBT2VW); z6^r3_V?~a#4-BKp#R>~XBy2&ZGVdhPTy_>NNW);Td7&A1lPe1skN<}^o%c$$a-eAk zl%<}Bq^nkmQHp-olV50EP|%klG#Z1A^b7w1DPQzu5Y^gYQVeHV&6(nI+PR}R`@nEMHADX$;YM1yn_G?Z5iYGOdT1{%r>1~nxr5U+xYa@n9t z4blbBP@X!d(SmdiG?dMQnh20S0u5#3(y8YX)8uzE!nu@5`K$JTKO+qJQ!=?#p?kDAU_8@ z890wR0ek^fr3a=?j{s;V-V2~zkalKmGkPZ4lE_D!Q}ma5&}6Ulyr1KtIs73i&m*b) zWY4OXbl3cC-CE=1UIDUL)Iwd&b$-9MDTLm3l8 zO{i%#Y?H>L=34OCO18cEZrJ~w?IPS;mvS4x#s>HV@F^e-3&YLkw%i_P2-g_!P-d5H;p$?AI|~O0TTft-9vLwfx(Va z*dOS|*N}6Ya&lj8ed5_Iy&yliR}{l>+l8p?mM(pUp82zB$PXK!eV*{sOY$z{mJ($; zKJ2F}={VMzwKzDXBl2ILnUm{bg za~UYLcdCao>H+dm^(**0^00a&zD{)83h{JOzO8=b7@wYJ>Sc-bD~5;Myw$@*Dr*%- z&_P*h^(lrkKQMK&bep7YAB$&_x!YfiS_Bt7j>n+g>QOhOw^3;|IkP$gLdkAT^nUQ8i_@% diff --git a/boards/px4/fmu-v3/extras/px4_io-v2_default.bin b/boards/px4/fmu-v3/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 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 diff --git a/boards/px4/fmu-v4pro/extras/px4_io-v2_default.bin b/boards/px4/fmu-v4pro/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 zcmZ8k3s@9Kwyx@)f#D_Ki1JdVX;Bo2C>ujUTpr`J^8gXwike~3IEhAlL?uy|QHc&d zqNZX5iLaPkalr7}wS8H5t&jw?RVBik2AQeJLWww5Rn=q~=*=#2K-^xzFwbptz)Gy@X zr$})Pa2xQ@dLy8T#fz*JAwd|wYdtvRfgG>2t{)aBV`QIOKZ#t6<+9I_!eR}HUWf6A zWNXYc+)A#+9K!9^qS#Gx{M34%TY>RKtByYwh-<7}DG~E45h*SU-wK#h_Z>lQX}t@9v>T+=F3e^3eGJkH z7ZMXZNDS~Ik@O=mzdyJJi-(<|)us8>=loQmhd1gn%;D9nI1{WAJ&gEI#|=lKnGw%B zu=tV#i9@_tyzH%eqF`mD=t&?ehj{LH$?)5+>v!iUY}<08ZesDA*DU1roJG3?x1@K; zL4FAq*SNACYYFZSzN09rbgPJ&=+$mXMMCpq$_yQDDe-@-d1{UEIJPYtY~2#; zYO>6iGwsEeD*xEqSX}SbPnQdKy3nMSXg>&rVf_a}@w=$e7i$!@g_?kyLu-N#U{U34 zb}UK_s>(3GY+Pe(vMiMI;HBDM)lRpHZcw}P)x7pH*i)r?V=ET5-gb}&(Wveyn4XS!~Utfb;{1s2eFQ3Wz z*oL?liyd>u>CfbZn{YSA;l|4yv4&_9o)m2iX|~5|v1!V`_DU29TwkkL{!JQDx73U!HDtueNrsE;643Yg}?*f{ETeB z_#;&!jRBAh$c1&YazfDzl2(i^1`eUengTRa-lEN$sZE z)wSi7l@;)ZhKX!wunlwQ`3E2)(`HqarRqL9=aa5@KC(Ai3g!E5tNR4yr#ZXZlHj9! z;Mr-v@{A3aiJ^!Q-}ad8nx3HIPjg;rYqIdY=HeJxOmLHV{c~+HXa}M$?zO9g-;^`r zd+z1-*Xz&!dbKRkmfw5z-KgYrThwSy_@Y~hkf`;AHI5M+5m|HWZaPt9ShqRfj#A2c z^Ugj}tNV^2nTWAVTIHK+&li2EZ9l&c+fK`XzHSe2Ffc8J60&#pG<=G*&*tzaM4Fux zzRM$1A#sbV#(|I=q*9VLCnIF3hjxa)3RwaYuaZr3bY;JXmlz9Pc7ZqQiLOAs(iPGh z^gR*CCH=+A=kd9t_373x;jMJ-(#CRk?D@Ta$i8JqHX0la)><1R1I<;l1WHY#ZG) zmo$&;oy+4rq<(H(_;!!HZm~n=e!2`Pj_<%IYe2i=x%S|jNTKb-$V9^DafWbLqRA}{ zapm{s%$g`9nh*)rPvzax-<^mL(nW*DEj@AaCR)k7k*QnVJZvh;k^yc*6bQHjcrT!e zY?-$h_mF$@GVx>*Gk+}ZBI@~EiXJ?vOwmFVbi*aiB=BTrlZ^5@u^HLuJnHWN@Q3hP zI>>?f>XA9l*6yjOw>8)hQ_6~&ER$CEL>>CeEfvHviFD5&@$x^wo~}>lr#JYipg}o? z8%E?t8s#A0aYPt~=S3PdeGKeOl}F#h0v{w(7Q`haIVXcfrxWu@#+;s5$f>zAJ1Qg|X8cruwhSWp=5a>xaXaMyuStNnwZgZB`_Lc>^(!{5LOkw$+lbZW1kA<`HI z`$9{T7Ck-Jjquh#B+UzxxI%|c$B6&-$_16cinAR8jO<=4Bnpgp#K(#!NkHMekP6>6 z;p_S^E*+|>g}hVvG8V|m!nY*{B{kaQahARZk zC10_Hhka3tVQjIPufS>iRwT|M6^qA?Z16Fh4s7bd26Oy?1>$qHyxA)ea%1rnSTkrz zHl9WDmSkd%>|Mg)cye~hxQP7_S?cqs>8?BkxsyCy!j&D=-#d4+i_vU<7H*mSSk8Ww z9|WDL(vNM&s{J~zG{mRk_Q9Gx-k66-e9w#cx+gNlZa5?40R}iNb2Ro_D%dfvbi)f- z6;bJ`w_Mi-2jQ1+u78%Z!|rE>MjJqLv9bF=DkilQy8G_AhL5+`TdRoqfYXQQ{+0^zPHQ;I78dD@|^ zUTGEN_J(f09xhiwI8Bih5A0}T5{5qfwhL*F*l|Lw-7A%NaY{g2hA>Ar{r_2}!58NX zR5w;aol+^LvC4stzv0^DDz+H%m10vQBr`-vWd8G&aN?kQ{ z$QOr1)p4YtRiZlK4>!HR_Do?!bOI?JSyPryz+kX= znGSc5Q_Gg8{mqpsxTM`~-?^Poo+<&7-dZ9?$olMq|B+1rh5ZOtMaejeUN5eY>^H9m zP^}39dPE|Ye}#4A#`5JO2bKWKlrAw}E(8n5>P85NTN%&R^h;f&!1M(^PbAZia_Y@Q z?!T2e7!={&K2p}|rk7Hu^xbpTdt?JwQ>UcyWIdjWaAL5HUN-6F)G0N(^>A%?M8hAJG7w|j+_=G#V?~lMo!23SnD$oZ5A9QPb3N(~o9nge>bQCm{Q=jkL8TX5w zJ59n@D)CN|uyUGQ1@9}2tXXN0M}jnle7lloo_Wa6E62!xx`=F%B>Wu?KO|}IB;ZK0 z;GGt{f{a}CU&hgN8oYQFU^d9V0nP=UL7f0Pp{f#rsng>C+Mg={v>VcX9oB$GM;hXV zNL`Yur3+1UNn^a60BzxS5n89z*H2cKyr#VDZSD-qn%ZN5Eao;+S6i%&CHI(ss~}zu zhLgs6WUU=%{}qO<00%5e)tjOIuEY3yz;}SZ0fv8u6t4jm1GWQd05<_%zWCnjTG?rbyGKVQK*;>t1sZ4yTW)in^ka&$pi5%Ht@S9!-W?Qg76RdUKGU zwiU{Mpd+H$ejSe{;pGu{JQ-WAVW8Ajm5*X15BaeCxA@QGMtK6hLY|f9;de>)2d5Ka zJt~1Y?UtVP%SHv=yWhnOl~>Cu(LuNLrAIc3`GKi%OW%{w9Vxh!Oxf{j#9ZfiffF!j z*E#*`Qk$t{B)fOSU?VxTgTr^pwH-0xH$Fj%4|GV8-az}ITRKL5-O-5C$=RKGxPkQV zd}Rb*`NBd5efW}Fk(b`+lqOjXmMJoN`+5qiLsJJwPOS^B0(L_HQMJ<;k z>UATy#4&yYaZG>?V+aq?rxW8Oc>$w&B#z^fn1&cG zo^wytxu-7f{ge^UG1%CM=VSaKDaUa^iZG-{2v@pR|Gf4i;317ky>fwdKTYMY2@Xosmc9Avtlj;D0V(zE~L zV8%iI)d|#QRzGA6Qa-MrYE!T20Tk$&RZQ=e8o>?$OTea2dO+iAWQc=zo&4^ z^CX4VPQ*34Qu9+ST6=2Y>q&+#tGFOE#y-{_8Y$!cP+9q#Ra_tX7g_9YmVE>l=?o`5 zBl15oMcDBpj3aF4yW%aec04ZD*5ZoK!}dwZLc5B*Si~t#xllWqQxqM9P9V*gAf%5Z zn~SXB8FI=7WJp9%#tTqPY0mA1&M!S=ZuL*gkPHj!)dE0gFZMsM--;!A-Qq z!;%~UDFNQr<^cyEyzl(azp9ZwNdrd-Fopsm7){|QofH=*;Lpjb;xxRUoG30?_P!ZE z$i>~!7n;;bxa&x+u@j3C14k`K^Dp%gnf|B z&K`w0`_r{TZd&KN`9uKwKF2!Z=ytvRzjmV$x0}qLx{zIIT|=%+<$_uqpFP6iM)3l9 zG&LpdL&xoIr5Ktx?xnoCC3ST(=GE2JtzPdqa9|t!LqkM1JhUBi=xJ4}h-KQ&(p2;Q zrhxRhZ@;TmxT${kdQLyDJ8Ih9nG9#`u5X9y@?$naA%-JHoa1wVjiJwx6Q_s^RorP6 zo@pH1WksuFoeT68y)HffTs0%El9!RjX}T9V{`4aqLgFg{ZObTklyR0zrg@1BD?6sS z(Adhp;*WpI$>~3V6e7l6>9s(f%PI!aZ;;CAG1y9Krcc2q$=&H3-b>h$l!(1Pg&v7- zcSc9fX$JknVbSE+5z?~OuU>1)5fK%Z}KJSEIh z1Yg(L@%W$=olX6{wa<~QPY6g=GQI=VY&#|B`W&l^9Nnl?1=R9-dO&jtmBywr#esU#-4gCgk>(6zfDB8y?-xa`#-; zz7Ml+yJ%rL0O<_UzfAVc(BTSldWHd4ldCgEL{$2e4RhTJ`R+obd4D@bwn6RUr`pYn zkS4DiBO^&J$Ucore*L+c0@w+CmUqxM-MWDm}5aBOA=XC8Wr&s#6y#j zu>*J;po$zUor`_sacLHQnT($~8vjPhW^!X^z)HP6mXCq%v(%Gf&k-GLicQ%dwxM>q zZV33;3A_@@zk}4z%)zgchcn{}U-3N4Go0QYkW7L5a0+RxP{4JtrLpPSiOnj#EOonw zT80%w+ms;Rb4OW*7Dn50`x$sSr+xXoEbvKEGHb+=7d+2{MV|*7Qf#K)c-CNR>z-%~ zNZ*`C?KBJOoqDD_(gG9!4WP!3G}`94f?&PDZV)l7!(yS^U=P;kJRR{c!Z6Yd&SjBX zvtsZ#BF!p`=yxl5f&U(wU9CC<`r=drlZ8kIFFMcJj=UHedJdA$yV?K#z#F_vro*-OVY1p>F7XH&lEjJNL z?i;eLYyvis*0LoTe}{bjxv4U1RV17FI7*4`z?jCN6|(?hWQDP)IvDBa01knEFDaRm zjHi;yIg>C)+U8WoJPwR(gkmmUmgkoq21bL7itQk~NXgt}gDvoR55f#r2AZz|6@met zL5`?pD;$QMc)XzsiB@uQ?&zS40fsY!O&jT)tHUSA{kfB1hlY9Ccs^M;FAFD-)AKl- zO0LXHjuK!m=}-4bpF={zGGRk1g){vESl ziVf(ww;_t(A9n|dultdq;ekrCGr#-W_AycmFTRoSQ;FrGlLmuT+y6)d%?u3s_ zD|}>{Or_tR5oW4NZ=4ZoRMT&4wrtL4A8GM4w<2V>$y5pC=|rQ>2pbFFG_Q+puMpm_ zMz>#jY-BT6pP?swovNckn5}-b9UIOFmmWKGtMhd*vzLEje@0l5KWMMhtvbD2BAynm9z39JN!}=BvWZK&(4P{N(dgWNl65D zcQT_Q?_BIbi$8GTQBId%+TzElL7gdlsoDDfEHgK-VnCVMas+CTO1hRBH!6DAR3Y4U z8&B#)ZTNdIgFDgK1syPtD_Sr#!2%EFUd-F&Mq0mQO!k}1O1)pQ`>E-)#>@?dL3bf7 zOe)*CP>2$>N<{~qBiC(-x(o|^h^9o_vG{hYLFiKdd}9m=DxXxDV0o60HB0bkp<{CKv^kmSg-S|Gz(CW~iRHJU-H$fi{ zOncuw;75R7z&IF(0{dWo2dtsheh^q>K}o(SH-;Z^f7iog)R@A$()j_YkqrBT2VW); z6^r3_V?~a#4-BKp#R>~XBy2&ZGVdhPTy_>NNW);Td7&A1lPe1skN<}^o%c$$a-eAk zl%<}Bq^nkmQHp-olV50EP|%klG#Z1A^b7w1DPQzu5Y^gYQVeHV&6(nI+PR}R`@nEMHADX$;YM1yn_G?Z5iYGOdT1{%r>1~nxr5U+xYa@n9t z4blbBP@X!d(SmdiG?dMQnh20S0u5#3(y8YX)8uzE!nu@5`K$JTKO+qJQ!=?#p?kDAU_8@ z890wR0ek^fr3a=?j{s;V-V2~zkalKmGkPZ4lE_D!Q}ma5&}6Ulyr1KtIs73i&m*b) zWY4OXbl3cC-CE=1UIDUL)Iwd&b$-9MDTLm3l8 zO{i%#Y?H>L=34OCO18cEZrJ~w?IPS;mvS4x#s>HV@F^e-3&YLkw%i_P2-g_!P-d5H;p$?AI|~O0TTft-9vLwfx(Va z*dOS|*N}6Ya&lj8ed5_Iy&yliR}{l>+l8p?mM(pUp82zB$PXK!eV*{sOY$z{mJ($; zKJ2F}={VMzwKzDXBl2ILnUm{bg za~UYLcdCao>H+dm^(**0^00a&zD{)83h{JOzO8=b7@wYJ>Sc-bD~5;Myw$@*Dr*%- z&_P*h^(lrkKQMK&bep7YAB$&_x!YfiS_Bt7j>n+g>QOhOw^3;|IkP$gLdkAT^nUQ8i_@% diff --git a/boards/px4/fmu-v5/extras/px4_io-v2_default.bin b/boards/px4/fmu-v5/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 zcmZ8k3s@9Kwyx@)f#D_Ki1JdVX;Bo2C>ujUTpr`J^8gXwike~3IEhAlL?uy|QHc&d zqNZX5iLaPkalr7}wS8H5t&jw?RVBik2AQeJLWww5Rn=q~=*=#2K-^xzFwbptz)Gy@X zr$})Pa2xQ@dLy8T#fz*JAwd|wYdtvRfgG>2t{)aBV`QIOKZ#t6<+9I_!eR}HUWf6A zWNXYc+)A#+9K!9^qS#Gx{M34%TY>RKtByYwh-<7}DG~E45h*SU-wK#h_Z>lQX}t@9v>T+=F3e^3eGJkH z7ZMXZNDS~Ik@O=mzdyJJi-(<|)us8>=loQmhd1gn%;D9nI1{WAJ&gEI#|=lKnGw%B zu=tV#i9@_tyzH%eqF`mD=t&?ehj{LH$?)5+>v!iUY}<08ZesDA*DU1roJG3?x1@K; zL4FAq*SNACYYFZSzN09rbgPJ&=+$mXMMCpq$_yQDDe-@-d1{UEIJPYtY~2#; zYO>6iGwsEeD*xEqSX}SbPnQdKy3nMSXg>&rVf_a}@w=$e7i$!@g_?kyLu-N#U{U34 zb}UK_s>(3GY+Pe(vMiMI;HBDM)lRpHZcw}P)x7pH*i)r?V=ET5-gb}&(Wveyn4XS!~Utfb;{1s2eFQ3Wz z*oL?liyd>u>CfbZn{YSA;l|4yv4&_9o)m2iX|~5|v1!V`_DU29TwkkL{!JQDx73U!HDtueNrsE;643Yg}?*f{ETeB z_#;&!jRBAh$c1&YazfDzl2(i^1`eUengTRa-lEN$sZE z)wSi7l@;)ZhKX!wunlwQ`3E2)(`HqarRqL9=aa5@KC(Ai3g!E5tNR4yr#ZXZlHj9! z;Mr-v@{A3aiJ^!Q-}ad8nx3HIPjg;rYqIdY=HeJxOmLHV{c~+HXa}M$?zO9g-;^`r zd+z1-*Xz&!dbKRkmfw5z-KgYrThwSy_@Y~hkf`;AHI5M+5m|HWZaPt9ShqRfj#A2c z^Ugj}tNV^2nTWAVTIHK+&li2EZ9l&c+fK`XzHSe2Ffc8J60&#pG<=G*&*tzaM4Fux zzRM$1A#sbV#(|I=q*9VLCnIF3hjxa)3RwaYuaZr3bY;JXmlz9Pc7ZqQiLOAs(iPGh z^gR*CCH=+A=kd9t_373x;jMJ-(#CRk?D@Ta$i8JqHX0la)><1R1I<;l1WHY#ZG) zmo$&;oy+4rq<(H(_;!!HZm~n=e!2`Pj_<%IYe2i=x%S|jNTKb-$V9^DafWbLqRA}{ zapm{s%$g`9nh*)rPvzax-<^mL(nW*DEj@AaCR)k7k*QnVJZvh;k^yc*6bQHjcrT!e zY?-$h_mF$@GVx>*Gk+}ZBI@~EiXJ?vOwmFVbi*aiB=BTrlZ^5@u^HLuJnHWN@Q3hP zI>>?f>XA9l*6yjOw>8)hQ_6~&ER$CEL>>CeEfvHviFD5&@$x^wo~}>lr#JYipg}o? z8%E?t8s#A0aYPt~=S3PdeGKeOl}F#h0v{w(7Q`haIVXcfrxWu@#+;s5$f>zAJ1Qg|X8cruwhSWp=5a>xaXaMyuStNnwZgZB`_Lc>^(!{5LOkw$+lbZW1kA<`HI z`$9{T7Ck-Jjquh#B+UzxxI%|c$B6&-$_16cinAR8jO<=4Bnpgp#K(#!NkHMekP6>6 z;p_S^E*+|>g}hVvG8V|m!nY*{B{kaQahARZk zC10_Hhka3tVQjIPufS>iRwT|M6^qA?Z16Fh4s7bd26Oy?1>$qHyxA)ea%1rnSTkrz zHl9WDmSkd%>|Mg)cye~hxQP7_S?cqs>8?BkxsyCy!j&D=-#d4+i_vU<7H*mSSk8Ww z9|WDL(vNM&s{J~zG{mRk_Q9Gx-k66-e9w#cx+gNlZa5?40R}iNb2Ro_D%dfvbi)f- z6;bJ`w_Mi-2jQ1+u78%Z!|rE>MjJqLv9bF=DkilQy8G_AhL5+`TdRoqfYXQQ{+0^zPHQ;I78dD@|^ zUTGEN_J(f09xhiwI8Bih5A0}T5{5qfwhL*F*l|Lw-7A%NaY{g2hA>Ar{r_2}!58NX zR5w;aol+^LvC4stzv0^DDz+H%m10vQBr`-vWd8G&aN?kQ{ z$QOr1)p4YtRiZlK4>!HR_Do?!bOI?JSyPryz+kX= znGSc5Q_Gg8{mqpsxTM`~-?^Poo+<&7-dZ9?$olMq|B+1rh5ZOtMaejeUN5eY>^H9m zP^}39dPE|Ye}#4A#`5JO2bKWKlrAw}E(8n5>P85NTN%&R^h;f&!1M(^PbAZia_Y@Q z?!T2e7!={&K2p}|rk7Hu^xbpTdt?JwQ>UcyWIdjWaAL5HUN-6F)G0N(^>A%?M8hAJG7w|j+_=G#V?~lMo!23SnD$oZ5A9QPb3N(~o9nge>bQCm{Q=jkL8TX5w zJ59n@D)CN|uyUGQ1@9}2tXXN0M}jnle7lloo_Wa6E62!xx`=F%B>Wu?KO|}IB;ZK0 z;GGt{f{a}CU&hgN8oYQFU^d9V0nP=UL7f0Pp{f#rsng>C+Mg={v>VcX9oB$GM;hXV zNL`Yur3+1UNn^a60BzxS5n89z*H2cKyr#VDZSD-qn%ZN5Eao;+S6i%&CHI(ss~}zu zhLgs6WUU=%{}qO<00%5e)tjOIuEY3yz;}SZ0fv8u6t4jm1GWQd05<_%zWCnjTG?rbyGKVQK*;>t1sZ4yTW)in^ka&$pi5%Ht@S9!-W?Qg76RdUKGU zwiU{Mpd+H$ejSe{;pGu{JQ-WAVW8Ajm5*X15BaeCxA@QGMtK6hLY|f9;de>)2d5Ka zJt~1Y?UtVP%SHv=yWhnOl~>Cu(LuNLrAIc3`GKi%OW%{w9Vxh!Oxf{j#9ZfiffF!j z*E#*`Qk$t{B)fOSU?VxTgTr^pwH-0xH$Fj%4|GV8-az}ITRKL5-O-5C$=RKGxPkQV zd}Rb*`NBd5efW}Fk(b`+lqOjXmMJoN`+5qiLsJJwPOS^B0(L_HQMJ<;k z>UATy#4&yYaZG>?V+aq?rxW8Oc>$w&B#z^fn1&cG zo^wytxu-7f{ge^UG1%CM=VSaKDaUa^iZG-{2v@pR|Gf4i;317ky>fwdKTYMY2@Xosmc9Avtlj;D0V(zE~L zV8%iI)d|#QRzGA6Qa-MrYE!T20Tk$&RZQ=e8o>?$OTea2dO+iAWQc=zo&4^ z^CX4VPQ*34Qu9+ST6=2Y>q&+#tGFOE#y-{_8Y$!cP+9q#Ra_tX7g_9YmVE>l=?o`5 zBl15oMcDBpj3aF4yW%aec04ZD*5ZoK!}dwZLc5B*Si~t#xllWqQxqM9P9V*gAf%5Z zn~SXB8FI=7WJp9%#tTqPY0mA1&M!S=ZuL*gkPHj!)dE0gFZMsM--;!A-Qq z!;%~UDFNQr<^cyEyzl(azp9ZwNdrd-Fopsm7){|QofH=*;Lpjb;xxRUoG30?_P!ZE z$i>~!7n;;bxa&x+u@j3C14k`K^Dp%gnf|B z&K`w0`_r{TZd&KN`9uKwKF2!Z=ytvRzjmV$x0}qLx{zIIT|=%+<$_uqpFP6iM)3l9 zG&LpdL&xoIr5Ktx?xnoCC3ST(=GE2JtzPdqa9|t!LqkM1JhUBi=xJ4}h-KQ&(p2;Q zrhxRhZ@;TmxT${kdQLyDJ8Ih9nG9#`u5X9y@?$naA%-JHoa1wVjiJwx6Q_s^RorP6 zo@pH1WksuFoeT68y)HffTs0%El9!RjX}T9V{`4aqLgFg{ZObTklyR0zrg@1BD?6sS z(Adhp;*WpI$>~3V6e7l6>9s(f%PI!aZ;;CAG1y9Krcc2q$=&H3-b>h$l!(1Pg&v7- zcSc9fX$JknVbSE+5z?~OuU>1)5fK%Z}KJSEIh z1Yg(L@%W$=olX6{wa<~QPY6g=GQI=VY&#|B`W&l^9Nnl?1=R9-dO&jtmBywr#esU#-4gCgk>(6zfDB8y?-xa`#-; zz7Ml+yJ%rL0O<_UzfAVc(BTSldWHd4ldCgEL{$2e4RhTJ`R+obd4D@bwn6RUr`pYn zkS4DiBO^&J$Ucore*L+c0@w+CmUqxM-MWDm}5aBOA=XC8Wr&s#6y#j zu>*J;po$zUor`_sacLHQnT($~8vjPhW^!X^z)HP6mXCq%v(%Gf&k-GLicQ%dwxM>q zZV33;3A_@@zk}4z%)zgchcn{}U-3N4Go0QYkW7L5a0+RxP{4JtrLpPSiOnj#EOonw zT80%w+ms;Rb4OW*7Dn50`x$sSr+xXoEbvKEGHb+=7d+2{MV|*7Qf#K)c-CNR>z-%~ zNZ*`C?KBJOoqDD_(gG9!4WP!3G}`94f?&PDZV)l7!(yS^U=P;kJRR{c!Z6Yd&SjBX zvtsZ#BF!p`=yxl5f&U(wU9CC<`r=drlZ8kIFFMcJj=UHedJdA$yV?K#z#F_vro*-OVY1p>F7XH&lEjJNL z?i;eLYyvis*0LoTe}{bjxv4U1RV17FI7*4`z?jCN6|(?hWQDP)IvDBa01knEFDaRm zjHi;yIg>C)+U8WoJPwR(gkmmUmgkoq21bL7itQk~NXgt}gDvoR55f#r2AZz|6@met zL5`?pD;$QMc)XzsiB@uQ?&zS40fsY!O&jT)tHUSA{kfB1hlY9Ccs^M;FAFD-)AKl- zO0LXHjuK!m=}-4bpF={zGGRk1g){vESl ziVf(ww;_t(A9n|dultdq;ekrCGr#-W_AycmFTRoSQ;FrGlLmuT+y6)d%?u3s_ zD|}>{Or_tR5oW4NZ=4ZoRMT&4wrtL4A8GM4w<2V>$y5pC=|rQ>2pbFFG_Q+puMpm_ zMz>#jY-BT6pP?swovNckn5}-b9UIOFmmWKGtMhd*vzLEje@0l5KWMMhtvbD2BAynm9z39JN!}=BvWZK&(4P{N(dgWNl65D zcQT_Q?_BIbi$8GTQBId%+TzElL7gdlsoDDfEHgK-VnCVMas+CTO1hRBH!6DAR3Y4U z8&B#)ZTNdIgFDgK1syPtD_Sr#!2%EFUd-F&Mq0mQO!k}1O1)pQ`>E-)#>@?dL3bf7 zOe)*CP>2$>N<{~qBiC(-x(o|^h^9o_vG{hYLFiKdd}9m=DxXxDV0o60HB0bkp<{CKv^kmSg-S|Gz(CW~iRHJU-H$fi{ zOncuw;75R7z&IF(0{dWo2dtsheh^q>K}o(SH-;Z^f7iog)R@A$()j_YkqrBT2VW); z6^r3_V?~a#4-BKp#R>~XBy2&ZGVdhPTy_>NNW);Td7&A1lPe1skN<}^o%c$$a-eAk zl%<}Bq^nkmQHp-olV50EP|%klG#Z1A^b7w1DPQzu5Y^gYQVeHV&6(nI+PR}R`@nEMHADX$;YM1yn_G?Z5iYGOdT1{%r>1~nxr5U+xYa@n9t z4blbBP@X!d(SmdiG?dMQnh20S0u5#3(y8YX)8uzE!nu@5`K$JTKO+qJQ!=?#p?kDAU_8@ z890wR0ek^fr3a=?j{s;V-V2~zkalKmGkPZ4lE_D!Q}ma5&}6Ulyr1KtIs73i&m*b) zWY4OXbl3cC-CE=1UIDUL)Iwd&b$-9MDTLm3l8 zO{i%#Y?H>L=34OCO18cEZrJ~w?IPS;mvS4x#s>HV@F^e-3&YLkw%i_P2-g_!P-d5H;p$?AI|~O0TTft-9vLwfx(Va z*dOS|*N}6Ya&lj8ed5_Iy&yliR}{l>+l8p?mM(pUp82zB$PXK!eV*{sOY$z{mJ($; zKJ2F}={VMzwKzDXBl2ILnUm{bg za~UYLcdCao>H+dm^(**0^00a&zD{)83h{JOzO8=b7@wYJ>Sc-bD~5;Myw$@*Dr*%- z&_P*h^(lrkKQMK&bep7YAB$&_x!YfiS_Bt7j>n+g>QOhOw^3;|IkP$gLdkAT^nUQ8i_@% diff --git a/boards/px4/fmu-v5x/extras/px4_io-v2_default.bin b/boards/px4/fmu-v5x/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 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 diff --git a/boards/px4/fmu-v6x/extras/px4_io-v2_default.bin b/boards/px4/fmu-v6x/extras/px4_io-v2_default.bin index 47e85b6bd08c4d3d9b31d298e01285e1ee28e44c..25a00e2357d781ece9c0d41447c3f4a52c6d19f6 100755 GIT binary patch delta 4572 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 diff --git a/msg/px4io_status.msg b/msg/px4io_status.msg index 295c8fba66..df072e71c2 100644 --- a/msg/px4io_status.msg +++ b/msg/px4io_status.msg @@ -19,7 +19,7 @@ bool status_rc_ppm bool status_rc_sbus bool status_rc_st24 bool status_rc_sumd -bool status_safety_button_event # px4io safety button was pressed for longer than 1 second +bool status_safety_off # PX4IO alarms (PX4IO_P_STATUS_ALARMS) bool alarm_pwm_error diff --git a/src/drivers/drv_pwm_output.h b/src/drivers/drv_pwm_output.h index 43721f9cb0..87fc629f6f 100644 --- a/src/drivers/drv_pwm_output.h +++ b/src/drivers/drv_pwm_output.h @@ -188,6 +188,12 @@ typedef uint16_t servo_position_t; /** get the maximum PWM value the output will send */ #define PWM_SERVO_GET_MAX_PWM _PX4_IOC(_PWM_SERVO_BASE, 19) +/** force safety switch off (to disable use of safety switch) */ +#define PWM_SERVO_SET_FORCE_SAFETY_OFF _PX4_IOC(_PWM_SERVO_BASE, 25) + +/** force safety switch on (to enable use of safety switch) */ +#define PWM_SERVO_SET_FORCE_SAFETY_ON _PX4_IOC(_PWM_SERVO_BASE, 28) + /* * * diff --git a/src/drivers/pca9685_pwm_out/main.cpp b/src/drivers/pca9685_pwm_out/main.cpp index c748d526e7..7e230fc567 100644 --- a/src/drivers/pca9685_pwm_out/main.cpp +++ b/src/drivers/pca9685_pwm_out/main.cpp @@ -492,7 +492,9 @@ int PCA9685Wrapper::ioctl(cdev::file_t *filep, int cmd, unsigned long arg) break; case PWM_SERVO_SET_ARM_OK: + case PWM_SERVO_SET_FORCE_SAFETY_OFF: case PWM_SERVO_CLEAR_ARM_OK: + case PWM_SERVO_SET_FORCE_SAFETY_ON: case PWM_SERVO_ARM: case PWM_SERVO_DISARM: break; diff --git a/src/drivers/pwm_out/PWMOut.cpp b/src/drivers/pwm_out/PWMOut.cpp index f32f579597..25b94c70d5 100644 --- a/src/drivers/pwm_out/PWMOut.cpp +++ b/src/drivers/pwm_out/PWMOut.cpp @@ -717,6 +717,8 @@ int PWMOut::pwm_ioctl(device::file_t *filp, int cmd, unsigned long arg) case PWM_SERVO_SET_ARM_OK: case PWM_SERVO_CLEAR_ARM_OK: + case PWM_SERVO_SET_FORCE_SAFETY_OFF: + case PWM_SERVO_SET_FORCE_SAFETY_ON: break; case PWM_SERVO_DISARM: diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index bfcb3227da..ceb34bc1cd 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -74,7 +74,6 @@ #include #include #include -#include #include #include @@ -197,8 +196,7 @@ private: uint16_t _last_written_arming_c{0}; ///< the last written arming state reg uORB::Subscription _t_actuator_armed{ORB_ID(actuator_armed)}; ///< system armed control topic - uORB::Subscription _t_vehicle_command{ORB_ID(vehicle_command)}; ///< vehicle command topic - uORB::Subscription _t_vehicle_status{ORB_ID(vehicle_status)}; ///< vehicle status topic + uORB::Subscription _t_vehicle_command{ORB_ID(vehicle_command)}; ///< vehicle command topic uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; @@ -445,14 +443,15 @@ int PX4IO::init() // the startup script to be able to load a new IO // firmware + // If IO has already safety off it won't accept going into bootloader mode, + // therefore we need to set safety on first. + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_ON, PX4IO_FORCE_SAFETY_MAGIC); + // Now the reboot into bootloader mode should succeed. io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_REBOOT_BL, PX4IO_REBOOT_BL_MAGIC); return -1; } - /* Set safety_off to false when FMU boot*/ - io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_SAFETY_OFF, 0); - if (_max_rc_input > input_rc_s::RC_INPUT_MAX_CHANNELS) { _max_rc_input = input_rc_s::RC_INPUT_MAX_CHANNELS; } @@ -477,6 +476,14 @@ int PX4IO::init() return ret; } + /* set safety to off if circuit breaker enabled */ + if (circuit_breaker_enabled("CBRK_IO_SAFETY", CBRK_IO_SAFETY_KEY)) { + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_OFF, PX4IO_FORCE_SAFETY_MAGIC); + + } else { + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_ON, PX4IO_FORCE_SAFETY_MAGIC); + } + /* try to claim the generic PWM output device node as well - it's OK if we fail at this */ if (_param_sys_hitl.get() <= 0 && _param_sys_use_io.get() == 1) { _class_instance = register_class_devname(PWM_OUTPUT_BASE_DEVICE_PATH); @@ -614,6 +621,11 @@ void PX4IO::Run() update_params(); + /* Check if the IO safety circuit breaker has been updated */ + bool circuit_breaker_io_safety_enabled = circuit_breaker_enabled("CBRK_IO_SAFETY", CBRK_IO_SAFETY_KEY); + /* Bypass IO safety switch logic by setting FORCE_SAFETY_OFF */ + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_OFF, circuit_breaker_io_safety_enabled); + /* Check if the flight termination circuit breaker has been updated */ bool disable_flighttermination = circuit_breaker_enabled("CBRK_FLIGHTTERM", CBRK_FLIGHTTERM_KEY); /* Tell IO that it can terminate the flight if FMU is not responding or if a failure has been reported by the FailureDetector logic */ @@ -962,12 +974,15 @@ int PX4IO::io_handle_status(uint16_t status) */ /* check for IO reset - force it back to armed if necessary */ - if (!(status & PX4IO_P_STATUS_FLAGS_ARM_SYNC)) { + if (_status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF && !(status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) + && !(status & PX4IO_P_STATUS_FLAGS_ARM_SYNC)) { /* set the arming flag */ - ret = io_reg_modify(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_FLAGS, 0, PX4IO_P_STATUS_FLAGS_ARM_SYNC); + ret = io_reg_modify(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_FLAGS, 0, + PX4IO_P_STATUS_FLAGS_SAFETY_OFF | PX4IO_P_STATUS_FLAGS_ARM_SYNC); /* set new status */ _status = status; + _status &= PX4IO_P_STATUS_FLAGS_SAFETY_OFF; } else if (!(_status & PX4IO_P_STATUS_FLAGS_ARM_SYNC)) { @@ -984,26 +999,18 @@ int PX4IO::io_handle_status(uint16_t status) } /** - * Get and handle the safety button status + * Get and handle the safety status */ - const bool safety_button_pressed = status & PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT; + const bool safety_off = status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF; - if (safety_button_pressed) { - io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_SAFETY_BUTTON_ACK, 0); + /* px4io board will change safety_off from false to true and stay like that until the vehicle is rebooted + * where safety will change back to false. Here we are triggering the safety button event once. + * TODO: change px4io firmware to act on the event. This will enable the "force safety on disarming" feature. */ + if (_previous_safety_off != safety_off) { _button_publisher.safetyButtonTriggerEvent(); } - /** - * Inform PX4IO board about safety_off state for LED control - */ - vehicle_status_s vehicle_status; - - if (_t_vehicle_status.update(&vehicle_status)) { - if (_previous_safety_off != vehicle_status.safety_off) { - io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_SAFETY_OFF, vehicle_status.safety_off); - _previous_safety_off = vehicle_status.safety_off; - } - } + _previous_safety_off = safety_off; return ret; } @@ -1026,17 +1033,37 @@ int PX4IO::dsm_bind_ioctl(int dsmMode) return -EINVAL; } + // Check if safety was off + bool safety_off = (_status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF); + int ret = -1; + + // Put safety on + if (safety_off) { + // re-enable safety + ret = io_reg_modify(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_FLAGS, PX4IO_P_STATUS_FLAGS_SAFETY_OFF, 0); + + // set new status + _status &= ~(PX4IO_P_STATUS_FLAGS_SAFETY_OFF); + } + PX4_INFO("Binding DSM%s RX", (dsmMode == DSM2_BIND_PULSES) ? "2" : ((dsmMode == DSMX_BIND_PULSES) ? "-X" : "-X8")); - int ret = OK; - ret |= io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_power_down); + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_power_down); px4_usleep(500000); - ret |= io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_set_rx_out); - ret |= io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_power_up); + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_set_rx_out); + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_power_up); px4_usleep(72000); - ret |= io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_send_pulses | (dsmMode << 4)); + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_send_pulses | (dsmMode << 4)); px4_usleep(50000); - ret |= io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_reinit_uart); + io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_DSM, dsm_bind_reinit_uart); + ret = OK; + + // Put safety back off + if (safety_off) { + ret = io_reg_modify(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_FLAGS, 0, + PX4IO_P_STATUS_FLAGS_SAFETY_OFF); + _status |= PX4IO_P_STATUS_FLAGS_SAFETY_OFF; + } if (ret != OK) { PX4_INFO("Binding DSM failed"); @@ -1106,7 +1133,7 @@ int PX4IO::io_get_status() status.status_arm_sync = STATUS_FLAGS & PX4IO_P_STATUS_FLAGS_ARM_SYNC; status.status_init_ok = STATUS_FLAGS & PX4IO_P_STATUS_FLAGS_INIT_OK; status.status_failsafe = STATUS_FLAGS & PX4IO_P_STATUS_FLAGS_FAILSAFE; - status.status_safety_button_event = STATUS_FLAGS & PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT; + status.status_safety_off = STATUS_FLAGS & PX4IO_P_STATUS_FLAGS_SAFETY_OFF; // PX4IO_P_STATUS_ALARMS status.alarm_rc_lost = STATUS_ALARMS & PX4IO_P_STATUS_ALARMS_RC_LOST; @@ -1617,6 +1644,18 @@ int PX4IO::ioctl(file *filep, int cmd, unsigned long arg) *(unsigned *)arg = _max_actuators; break; + case PWM_SERVO_SET_FORCE_SAFETY_OFF: + PX4_DEBUG("PWM_SERVO_SET_FORCE_SAFETY_OFF"); + /* force safety swith off */ + ret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_OFF, PX4IO_FORCE_SAFETY_MAGIC); + break; + + case PWM_SERVO_SET_FORCE_SAFETY_ON: + PX4_DEBUG("PWM_SERVO_SET_FORCE_SAFETY_ON"); + /* force safety switch on */ + ret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_ON, PX4IO_FORCE_SAFETY_MAGIC); + break; + case DSM_BIND_START: /* bind a DSM receiver */ ret = dsm_bind_ioctl(arg); @@ -1686,6 +1725,16 @@ int PX4IO::ioctl(file *filep, int cmd, unsigned long arg) } + // re-enable safety + ret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FORCE_SAFETY_ON, PX4IO_FORCE_SAFETY_MAGIC); + + if (ret != PX4_OK) { + PX4_WARN("IO refused to re-enable safety"); + } + + // set new status + _status &= ~(PX4IO_P_STATUS_FLAGS_SAFETY_OFF); + /* reboot into bootloader - arg must be PX4IO_REBOOT_BL_MAGIC */ usleep(1); ret = io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_REBOOT_BL, arg); @@ -2009,6 +2058,29 @@ int PX4IO::custom_command(int argc, char *argv[]) return 1; } + + if (!strcmp(verb, "safety_off")) { + int ret = get_instance()->ioctl(NULL, PWM_SERVO_SET_FORCE_SAFETY_OFF, 0); + + if (ret != OK) { + PX4_ERR("failed to disable safety (%i)", ret); + return 1; + } + + return 0; + } + + if (!strcmp(verb, "safety_on")) { + int ret = get_instance()->ioctl(NULL, PWM_SERVO_SET_FORCE_SAFETY_ON, 0); + + if (ret != OK) { + PX4_ERR("failed to enable safety (%i)", ret); + return 1; + } + + return 0; + } + if (!strcmp(verb, "debug")) { if (argc <= 1) { PX4_ERR("usage: px4io debug LEVEL"); @@ -2090,6 +2162,8 @@ Output driver communicating with the IO co-processor. PRINT_MODULE_USAGE_ARG("", "Firmware file", false); PRINT_MODULE_USAGE_COMMAND_DESCR("update", "Update IO firmware"); PRINT_MODULE_USAGE_ARG("", "Firmware file", true); + PRINT_MODULE_USAGE_COMMAND_DESCR("safety_off", "Turn off safety (force)"); + PRINT_MODULE_USAGE_COMMAND_DESCR("safety_on", "Turn on safety (force)"); PRINT_MODULE_USAGE_COMMAND_DESCR("debug", "set IO debug level"); PRINT_MODULE_USAGE_ARG("", "0=disabled, 9=max verbosity", false); PRINT_MODULE_USAGE_COMMAND_DESCR("bind", "DSM bind"); diff --git a/src/drivers/uavcan/uavcan_main.cpp b/src/drivers/uavcan/uavcan_main.cpp index cc87e8e070..e1bfc231b0 100644 --- a/src/drivers/uavcan/uavcan_main.cpp +++ b/src/drivers/uavcan/uavcan_main.cpp @@ -951,6 +951,8 @@ UavcanNode::ioctl(file *filp, int cmd, unsigned long arg) switch (cmd) { case PWM_SERVO_SET_ARM_OK: case PWM_SERVO_CLEAR_ARM_OK: + case PWM_SERVO_SET_FORCE_SAFETY_OFF: + // these are no-ops, as no safety switch break; case MIXERIOCRESET: diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index c22c489987..f1bb34c84c 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -927,7 +927,7 @@ PARAM_DEFINE_INT32(COM_PREARM_MODE, 0); /** * Enable force safety * - * Force safety when the vehicle disarms + * Force safety when the vehicle disarms. Not supported when safety button used over PX4IO board. * * @boolean * @group Commander diff --git a/src/modules/commander/esc_calibration.cpp b/src/modules/commander/esc_calibration.cpp index 865017ac27..1f43cc6a4d 100644 --- a/src/modules/commander/esc_calibration.cpp +++ b/src/modules/commander/esc_calibration.cpp @@ -187,6 +187,13 @@ static int do_esc_calibration_ioctl(orb_advert_t *mavlink_log_pub) goto Out; } + /* tell IO to switch off safety without using the safety switch */ + if (px4_ioctl(fd, PWM_SERVO_SET_FORCE_SAFETY_OFF, 0) != PX4_OK) { + calibration_log_critical(mavlink_log_pub, CAL_QGC_FAILED_MSG, "Unable to force safety off"); + return_code = PX4_ERROR; + goto Out; + } + calibration_log_info(mavlink_log_pub, "[cal] Connect battery now"); timeout_start = hrt_absolute_time(); @@ -226,6 +233,9 @@ static int do_esc_calibration_ioctl(orb_advert_t *mavlink_log_pub) Out: if (fd != -1) { + if (px4_ioctl(fd, PWM_SERVO_SET_FORCE_SAFETY_ON, 0) != PX4_OK) { + calibration_log_info(mavlink_log_pub, CAL_QGC_FAILED_MSG, "Safety switch still off"); + } if (px4_ioctl(fd, PWM_SERVO_DISARM, 0) != PX4_OK) { calibration_log_info(mavlink_log_pub, CAL_QGC_FAILED_MSG, "Servos still armed"); diff --git a/src/modules/px4iofirmware/CMakeLists.txt b/src/modules/px4iofirmware/CMakeLists.txt index 3df90ffdac..6e4bcdee66 100644 --- a/src/modules/px4iofirmware/CMakeLists.txt +++ b/src/modules/px4iofirmware/CMakeLists.txt @@ -39,7 +39,7 @@ add_library(px4iofirmware mixer.cpp px4io.cpp registers.c - safety_button.cpp + safety.cpp serial.cpp ) diff --git a/src/modules/px4iofirmware/mixer.cpp b/src/modules/px4iofirmware/mixer.cpp index 9fc40dcbde..2e0e5bb14f 100644 --- a/src/modules/px4iofirmware/mixer.cpp +++ b/src/modules/px4iofirmware/mixer.cpp @@ -134,11 +134,13 @@ mixer_tick() * FMU or from the mixer. * */ - should_arm = (r_status_flags & PX4IO_P_STATUS_FLAGS_INIT_OK) /* IO initialised without error */ + should_arm = (r_status_flags & PX4IO_P_STATUS_FLAGS_INIT_OK) /* IO initialised without error */ + && (r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) /* and IO is armed */ && (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED) /* and FMU is armed */ ; - should_arm_nothrottle = ((r_status_flags & PX4IO_P_STATUS_FLAGS_INIT_OK) /* IO initialised without error */ + should_arm_nothrottle = ((r_status_flags & PX4IO_P_STATUS_FLAGS_INIT_OK) /* IO initialised without error */ + && (r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) /* and IO is armed */ && ((r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_PREARMED) /* and FMU is prearmed */ || (r_status_flags & PX4IO_P_STATUS_FLAGS_RAW_PWM) /* or direct PWM is set */ )); diff --git a/src/modules/px4iofirmware/protocol.h b/src/modules/px4iofirmware/protocol.h index a0389d78b4..73c82dae9d 100644 --- a/src/modules/px4iofirmware/protocol.h +++ b/src/modules/px4iofirmware/protocol.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2017 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -114,7 +114,6 @@ #define PX4IO_P_STATUS_FLAGS_FMU_INITIALIZED (1 << 11) /* FMU was initialized and OK once */ #define PX4IO_P_STATUS_FLAGS_RC_ST24 (1 << 12) /* ST24 input is valid */ #define PX4IO_P_STATUS_FLAGS_RC_SUMD (1 << 13) /* SUMD input is valid */ -#define PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT (1 << 14) /* px4io safety button was pressed for longer than 1 second */ #define PX4IO_P_STATUS_ALARMS 3 /* alarm flags - alarms latch, write 1 to a bit to clear it */ #define PX4IO_P_STATUS_ALARMS_RC_LOST (1 << 0) /* timed out waiting for RC input */ @@ -185,8 +184,12 @@ enum { /* DSM bind states */ #define PX4IO_P_SETUP_CRC 11 /* get CRC of IO firmware */ /* storage space of 12 occupied by CRC */ -#define PX4IO_P_SETUP_SAFETY_BUTTON_ACK 14 /**< ACK from FMU when it gets safety button pressed status */ -#define PX4IO_P_SETUP_SAFETY_OFF 15 /**< FMU inform PX4IO about safety_off for LED indication*/ +#define PX4IO_P_SETUP_FORCE_SAFETY_OFF 12 /* force safety switch into + 'armed' (PWM enabled) state - this is a non-data write and + hence index 12 can safely be used. */ + +#define PX4IO_P_SETUP_FORCE_SAFETY_ON 14 /* force safety switch into 'disarmed' (PWM disabled state) */ +#define PX4IO_FORCE_SAFETY_MAGIC 22027 /* required argument for force safety (random) */ #define PX4IO_P_SETUP_SBUS_RATE 16 /**< frame rate of SBUS1 output in Hz */ #define PX4IO_P_SETUP_THERMAL 17 /**< thermal management */ #define PX4IO_P_SETUP_ENABLE_FLIGHTTERMINATION 18 /**< flight termination; false if the circuit breaker (CBRK_FLIGHTTERM) is set */ @@ -209,7 +212,7 @@ enum { /* DSM bind states */ #define PX4IO_PAGE_TEST 127 #define PX4IO_P_TEST_LED 0 /**< set the amber LED on/off */ -/* PWM disarmed values that are active */ +/* PWM disarmed values that are active, even when SAFETY_SAFE */ #define PX4IO_PAGE_DISARMED_PWM 109 /* 0..CONFIG_ACTUATOR_COUNT-1 */ /** diff --git a/src/modules/px4iofirmware/px4io.cpp b/src/modules/px4iofirmware/px4io.cpp index 69527d7bf2..74f6637f46 100644 --- a/src/modules/px4iofirmware/px4io.cpp +++ b/src/modules/px4iofirmware/px4io.cpp @@ -154,7 +154,8 @@ show_debug_messages(void) static void update_mem_usage(void) { - if (/* FMU is armed */ (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED)) { + if (/* IO armed */ (r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) + /* and FMU is armed */ && (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED)) { return; } @@ -182,7 +183,8 @@ ring_blink(void) { #if defined(LED_GREEN) - if (/* FMU is armed */ (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED)) { + if (/* IO armed */ (r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) + /* and FMU is armed */ && (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED)) { LED_GREEN(true); return; } @@ -312,8 +314,8 @@ extern "C" __EXPORT int user_start(int argc, char *argv[]) ENABLE_SBUS_OUT(false); #endif - /* start the safety button handler */ - safety_button_init(); + /* start the safety switch handler */ + safety_init(); /* initialise the control inputs */ controls_init(); diff --git a/src/modules/px4iofirmware/px4io.h b/src/modules/px4iofirmware/px4io.h index 99cba83e67..c8872c8aa0 100644 --- a/src/modules/px4iofirmware/px4io.h +++ b/src/modules/px4iofirmware/px4io.h @@ -131,6 +131,8 @@ extern struct sys_state_s system_state; # define ADC_VSERVO 4 # define ADC_RSSI 5 +#define BUTTON_SAFETY px4_arch_gpioread(GPIO_BTN_SAFETY) + #define PX4_CRITICAL_SECTION(cmd) { irqstate_t flags = px4_enter_critical_section(); cmd; px4_leave_critical_section(flags); } void atomic_modify_or(volatile uint16_t *target, uint16_t modification); @@ -143,9 +145,9 @@ void atomic_modify_and(volatile uint16_t *target, uint16_t modification); extern void mixer_tick(void); /** - * Safety button/LED. + * Safety switch/LED. */ -extern void safety_button_init(void); +extern void safety_init(void); extern void failsafe_led_init(void); /** diff --git a/src/modules/px4iofirmware/registers.c b/src/modules/px4iofirmware/registers.c index 1bf9b98763..dfe0a6f8ec 100644 --- a/src/modules/px4iofirmware/registers.c +++ b/src/modules/px4iofirmware/registers.c @@ -413,7 +413,7 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value) break; case PX4IO_P_SETUP_REBOOT_BL: - if (r_status_flags & PX4IO_P_STATUS_FLAGS_OUTPUTS_ARMED) { + if (r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) { // don't allow reboot while armed break; } @@ -433,19 +433,22 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value) dsm_bind(value & 0x0f, (value >> 4) & 0xF); break; - case PX4IO_P_SETUP_SAFETY_BUTTON_ACK: - // clear safety button pressed flag so it can be used again - r_status_flags &= ~PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT; + case PX4IO_P_SETUP_FORCE_SAFETY_ON: + if (value == PX4IO_FORCE_SAFETY_MAGIC) { + r_status_flags &= ~PX4IO_P_STATUS_FLAGS_SAFETY_OFF; - break; + } else { + return -1; + } - case PX4IO_P_SETUP_SAFETY_OFF: + break; - if (value) { + case PX4IO_P_SETUP_FORCE_SAFETY_OFF: + if (value == PX4IO_FORCE_SAFETY_MAGIC) { r_status_flags |= PX4IO_P_STATUS_FLAGS_SAFETY_OFF; } else { - r_status_flags &= ~PX4IO_P_STATUS_FLAGS_SAFETY_OFF; + return -1; } break; diff --git a/src/modules/px4iofirmware/safety_button.cpp b/src/modules/px4iofirmware/safety.cpp similarity index 79% rename from src/modules/px4iofirmware/safety_button.cpp rename to src/modules/px4iofirmware/safety.cpp index 6d4672d5f2..1a5eedb7d7 100644 --- a/src/modules/px4iofirmware/safety_button.cpp +++ b/src/modules/px4iofirmware/safety.cpp @@ -32,7 +32,7 @@ ****************************************************************************/ /** - * @file safety_button.cpp + * @file safety.cpp * Safety button logic. * * @author Lorenz Meier @@ -46,7 +46,7 @@ #include "px4io.h" -static struct hrt_call safety_button_call; +static struct hrt_call arming_call; static struct hrt_call failsafe_call; /* @@ -59,23 +59,30 @@ static unsigned counter = 0; * Define the various LED flash sequences for each system state. */ #define LED_PATTERN_FMU_OK_TO_ARM 0x0003 /**< slow blinking */ -#define LED_PATTERN_FMU_REFUSE_TO_ARM 0x5555 /**< fast blinking */ +#define LED_PATTERN_FMU_REFUSE_TO_ARM 0x5555 /**< fast blinking */ #define LED_PATTERN_IO_ARMED 0x5050 /**< long off, then double blink */ #define LED_PATTERN_FMU_ARMED 0x5500 /**< long off, then quad blink */ #define LED_PATTERN_IO_FMU_ARMED 0xffff /**< constantly on */ static unsigned blink_counter = 0; -#define SAFETY_SWITCH_THRESHOLD 10 +/* + * IMPORTANT: The arming state machine critically + * depends on using the same threshold + * for arming and disarming. Since disarming + * is quite deadly for the system, a similar + * length can be justified. + */ +#define ARM_COUNTER_THRESHOLD 10 -static void safety_button_check(void *arg); +static void safety_check_button(void *arg); static void failsafe_blink(void *arg); void -safety_button_init(void) +safety_init(void) { /* arrange for the button handler to be called at 10Hz */ - hrt_call_every(&safety_button_call, 1000, 100000, safety_button_check, NULL); + hrt_call_every(&arming_call, 1000, 100000, safety_check_button, NULL); } void @@ -86,20 +93,26 @@ failsafe_led_init(void) } static void -safety_button_check(void *arg) +safety_check_button(void *arg) { - const bool safety_button_pressed = px4_arch_gpioread(GPIO_BTN_SAFETY); + const bool safety_button_pressed = BUTTON_SAFETY; - /* Keep safety button pressed for one second to trigger safety button event. - * The logic to prevent turning on safety again is in the commander. + /* Keep safety button pressed for one second to turn off safety + * + * Note that safety cannot be turned on again by button because a button + * hardware problem could accidentally disable it in flight. */ + if (safety_button_pressed && !(r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) && + (r_setup_arming & PX4IO_P_SETUP_ARMING_IO_ARM_OK)) { - if (safety_button_pressed && !(r_status_flags & PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT)) { + if (counter <= ARM_COUNTER_THRESHOLD) { + counter++; - counter++; + } - if (counter >= SAFETY_SWITCH_THRESHOLD) { - atomic_modify_or(&r_status_flags, PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT); + if (counter == ARM_COUNTER_THRESHOLD) { + // switch safety off -> ready to arm state + atomic_modify_or(&r_status_flags, PX4IO_P_STATUS_FLAGS_SAFETY_OFF); } } else {