From 5e01cdf666ad847947910755a369a1a2a3ecb4cb Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Thu, 16 Dec 2021 22:16:06 +0000 Subject: [PATCH] add more info to readme --- .github/media/flashing.png | Bin 0 -> 52044 bytes README.md | 109 +++++++++++++++++++++++++++++++++++-- 2 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 .github/media/flashing.png diff --git a/.github/media/flashing.png b/.github/media/flashing.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec745127cf571d0fa303961fe2e99d435b18038 GIT binary patch literal 52044 zcmdqJ2T)V(_b!V1*+8VIAkrif=^(v>N{|lHA(SXc@4Xirgf6{<^iHINUX&_?-XVlu zqy?z~0?7${zjJ5qoH_rQd+xb+=H5Nbu(OlwcfIRfME-M!H&MMU(JNCEUp%QI~o<>jk2j_Tfl>Uo)@AkU|;Hg|B&d$;kWqrgYsIi54?I?O=*`u)A56yF2!)*NPT^}ry(WkgWMFS3n_ zIa0|R1c`}$Ms-{MxqEp=M3g2C1^;{YI;imG)!EYz|I3%QNhLqVZcU6|jM8=;F-nNE zQ2?{6Df8l>j}w@(;YkUV)t1BAAdpQNDMcQrnhK~GMmY>fu#~Yfv(yYJRu5tVWUH8k zjAX;1S~^;##uex39`p0@c)QP1yjP-$FbZ@P0xJyGX#@Os_tzxxdgM$xFSp$*XtS%K zzyv52uPi4J9G2HPlFfD3vLX&jsT5`vk|(P?Tr)$WO!$D1EV5%Po0L~pnF}1oWo@~o zE<8WIFGuK?3#YlfON*eNs>6r5}sTCp>(^n&l8t=?_{HPq*XU}Q|Ejm0VKG^j+ zCvy*P`pK;r1|0!cPnc;>1Y@nGqzh&H_UzidyS~r_v2ua$Au8i)=BD)PTUcM@+D#Se zEZ%Sb@hR^Gz--+6INw&tlGa7o@`mUe!+L`}clTK_`g zd7pV`Ke;-%I!60;iS+b(Gu%&kz3>GPkPWh-Ku{{!F+OgZ^^hSss{K_lECf`n{xkDZ z_Jf?)_tzU1K@F4!B5_n@aa498p6q32jW$wjca#`K-u`EOe_}=-=TOpq$61=)0wqp9{`lkqVa$86oYN?WG_`F|a~Y*EhyG#F zdB};}otzoTZtMSn>5VAidApMm{FS!Sb?~D!jGcn3m$J2Jk`78fO10rAaOiSnet|B= zrr}^t1f|(jTo%ZRD^I99;m3vqRmlVVG= z+O5E>YPNlS?T&1|)G2L);P+Mffc&zW;jr?tMcV#9)^@eY3Ec*4o3H>h~cifqQwfppNS4 zxcBT7KtL~fDsKzi2?Bd8v&ABOc3=BuoJRHs$C5&_@*g(pIxmfCrXbp-pg1!M_|-sx zyCsCxn-RzplAsuFC~hdO&IW_9Hunfh(8!Kw1uC)ugR(%kd1`61?`dPj+9_pNz9?mq zwAm@vhTbbF6e6YIYUsKbr%lHPQZ6g*plqj9s(x;LWf(;Bx&)0Wk5bAQm{^sSa3O4hp-F8c?-LNFH2o zU;WkUmncMMWk?>VtutRX&TM0J@ZOd13vmRKr~JXGuCWL^Oc>L$+98|jpn47fC{{yR zAsbmSPxf?D8hW26sB5En_Q1h?FO)hUnnp{Kg`M{QC|4Avq=eouuCOvPDzjET_&!;( z(~zyv@gs~6WK~fOWl~h;ANrw2dNtC(jR;;G_KTvb&9AFUGFnYn=V$0ljY6rO!ZQtuA{-l+ZJ8p{j;k><1pKc10I? zPQk^+9_ZQiY6EJmpbN2A`he`bS-uR>sn_hb`Bp-QrjyBgK^ZejppHa88<-E3mS1=8 z^X@;ot>;_)sz3ll(#-|d?Htg-b{XS|0%L8$)s-S>$QyU6VqPLsP!;))@@hxde#^rQIi~^E zV5D{FFJxFl5SBC#Yncb1Q0#TpyUk%z8!DiNqVni^EeS{N-M-My>lB}Km^ne8Q{yUJ z)%wYfgRZm{=puW$^88PG6LvNmaBsCHdy5^lO`-pM{zjZLJ@+@sOM9o?_2-X!!@Xk( zW<9TbPSAfuDirLMvB4cQy2~V0eNPZNcHo4B9rX%ID!Z97IkF>5%|+7M(idgd!MZ7H zOl9|rSk;9_ivzU7o&oY@mj2!kX@@nSGr~7=^37L+PtvdCAX-nlbR!e}+D^s!V>?or zxFp4}2}KZyL&+w30FW&k2DL0A{w*&1v1M^$$TQVw8UzmQu(so3A5&@yvgAsjQUaBH zsr#c~XZlP#sfJU@hD$?B{h)8nx`?;zCk^_g)+z^g*+YsDC^W=s@eV`ypBUWlFpid{ zb9l4#Pwc;5FhD~vox4fbhCd?G-Y<)TzD&o-zc9O-P*d1Y@(E%&tf6D-uc`0<)4<6G zX_?q=jGT~Fg010zTO6I0VfWDtb}DG{>6&{B&P7z@a>Hi+5V^X#_{?4pD5NU54bQpm{lpnX|IEkuA>;d#V+Z}jBiFUHk*d_5Zwd!pT7BNE&vtzzt{f)~ z6CRZDQ$a7EEl4AXSkvS|MObCX`v(;vl_6sn>hOR#R-jM?SE-{fc%h1I^zBT3wTc3s zYH^vHTwU>ADr@`BkAiAv&@`z`h)PF(hpw3l@(*=8w~(2>Ma2#E>4ejO^yVV>)o893 z6J5lk6rq0I^gj*Q(G8^3y8cc?kj;~VUhOtKXtDf zcX;((36&X*q*ZylFDZN2;a7J_{z?1EdI24(_PX#2@c{ zc@RK(-vM_}Z;;uzRnR;GcZ7<7jYSR%20xseS05B=M4}j*f0Xl`tlpH7GjtMJqH#KX zA@_Id0>LLO4)MX9A%K{`?LzFc^?sM*Cog{1b1c`dmef9aXp20Vc1aecppK+jBF;F( z5@S4%scn&Uwm6aiLuw%jzc_4NqTFGNgL31I-KMk2ywuid&2Oz}lr-neu=5{i`}->! zdb;vt^?LTp??N)eijz3`LfP9c)H2ME8|hT_tEnp3fI_E+-MB5AK~yuCHam{8{o6+_ zK)H3fG^e)7pOOc*yvH+Ua^Meg`s1UGHXY@%_bPJp^NZ&mL~Kbdl|$4v%pOogSDMi% zZPt6UdM}u^rjBHli*)LK)3t?L&zFDYUpgV-X>jYg(Nh5rC}N*!#suc544x!SnR3tI z&CTsshnS)Pl=Ju?V|B)I4(hvVG^4f0w>nFV4K-kJf%Rzl)7JN07xt?)MP*;le#x#G z!~+0E-bKQ9G~u58V4@aixCpe+u; zVoCOJ#L>&ddc_#-=^xmS88S1pr#_Lyq&`O*o2=*WQ0ntZTNA!RS%fhFc3I0op;B1KCy8bd&p&UR5HCw-FcKDu(zp%?AAKn*R`z*(>i~w zc9mGyE4%c@HR$g^3%T;N8L8vUcDN8T24};yw-MH#+*rUMn_;A1eAuyP)$xhc%&I}< z`Vd-CGcM-GkHoO>^p?gLo{vY?xG8eOgrD4gy! z?@(I&{m>H=MWvh0gRtJ*=;8=(?I@l%PZ@^YlnNQ)iK-5PR>$D)SM3L@uM~w&Q>fPYG!I9Dv+e3Ob|2rSZ_^7tQc{8q2?r?`Z2UJXkp04k7snq+6 zY`(qnNp-Kr^nON%$bXmUBx0E3ci7)F36Cbmm$2b~tRQvF2it;o)Ui7@#F&5MC9{d&up|zqFXb zOmvMAyc;JiUiyi>EDp*#+&dJr6T5Y=qq`cMhbG1=_)ld!r?Se#fgNO?MSv4?>ZulD1>s#AFrj3q{w2cEgK8pA&lDj2A!`(L$!A2Vj6oi_2&~w>$e>P z_tD!HIyVCt=BiwKv-`UZ^Ti@sbC2Z=T{=rz`(}ZJwK^Sa)uApOV>3Q&>z&beWe^om z2c1E@^?mW4n~x=ZjV8B66RM7c%6zbqAmpFih2X=j``IbO1AmX zUCB`w{sV(BwMc9^TzVYnKTOf>v8=9rwlbgGX#+{VIN#1gVtkINKLpeaXATv~>|odQ zPwl%J=o=-qM{qIMb`a9No_eEfhMst>A_m?LUuc-5Qw7;&I)9&d-3~t@7E7rU~ogX5E)K>CNFvCqq~kZR`2d} z!R#9e@X9)GFRzHg7rb#()p{n$Ysvlg_!JMRi{hH%rwuarYl$8%K^}E00eIX<=Ky{O zKilOkVS!D6a|E8BDoy%f8p5GMM$0w<4Ri1f#Cgs@Ve#@r^fvx)x*+hGripCs*549j zYqhYO<>W##iV$-2jic(*ZCX&a5k?L-g(oV~^$ygzYsrM|?F%Sv6+r-Y5E8V%dN=B5 z9l0&tQ!6!-h5w-%1_gyewZ{E;=tSBbLK(HRf2|)t&VBu>8}UOWU54J1H@KczNVkr; zEV(UK+*j9T=@|v6NiYMnu^wFzVY}B+s(ZuH*`N=Nbdgq@w?Z67RgeAZ3b=<$itzyP zOO0B3KQYx-(pHI}6JeIpWas4F0#`y~OnnwZ_23YWk{Z8qN?t9UJY$`0j6niaLy;zE zPnx<0I;40rb;Fu%|2D3w7R=1)**pchS8+(gT|Rwu79RXu#m{kM>^6(a#c5&IvOU=O zEeMp&F;+N;_7&!3vQ`LrRhS#Nw7J%x4Kb^iV2mn+tzjOVzbXc`B-=&hMd+wD7M-5CgO79|YduDso~K{cm`sy|%9j6~;>+A@#rrzH zKN5>-0k2V%f!HX3!2z~f!L3rqY_^MdTut#5q|vL2(hN#$Oxbk4{An}K?7azphdGou z(lp5eJno$42je+waQ_%IDw%8GSNtWEZ1T<*xn4H+FQQr+i7_H+EXaP0Wy_<%vcI8F z`HsN5n7LW5lYxhvy?v5Vx@74=Oo=Roa0nRjnL^p zVGqd=(nXyubo`Qwi7&2ST6nWxbx<`n2Gn;kt4-1*JUje$Uj6-0>`@v`>j&0qWv(; zw}*@ZDw;R3#g^K-;~LbNbUlXEmRyQ{RF2%U{y&M0^FQm3WpKlI@eR%3?S#ickBe)5 zbdn#G`oKY;F|MIIQE{f?W+H8BE$+`O)n3^_3@o<%cUrNGZLJ=rPIhA>6qmN((}$nn3vatoV6kFmZ(MYM?ip3{rf_@SJ|6O zF-naks@cQ{TBFl9zhVY!t6P_-9|Rq3Jekb)EBGjEBsi-d(^y_(5!&wc3Q?C}*KkZD z^}aXf;zr5*DKoxqQrGWvGTsLnK^uU9GVCnR)L{#7LS=}oM@o}AR@0i^g?_tR!H0il z;A%7Jx}>hGer*G~l@>d}K44PC)>6|i@`k&}VE40MjE^t)36)!b~FS`ENiIT<3By+Fkipx9|9&1UC*G z$7dA9Fra(feFq}A3ukx$!(D6-2f^NT)?D8>yCKbUsqHjuTnA9-kS-F_s=4c%H5x%_ z9=m`Z04tfTb~)Mk)Itk)rn37BFj^P$+$A-mWqF&&fjTBPA5d#v*DmoXQ37}0(xnf9 zS~j=#HhIaOvWy?kuy#{caPq>(P6~Wu_xd#P=L4esdW8k<1cb^ykG}YYCg5TTra7+@ zi-Uc#fKf9O^Ju8y{*W-^oCcP^sMU3{rg?QQ-MfoXAA8W5vwVh^RAcsDkfttYNF=9o z9}ETJQKs18IFdh%2RmVm;Vi7oMdq4io;&NkDB80-wH#h^Fcr%S-$v$fH=b@5 zrTR!F7zq2G{0#8d5-x?VNK39Y;0<*Bgz%KoDKrqF!+ZYnQAhTFXf9PkHn z4EJ+fm1hbQt4URmm4$1KLCxsA{xR}NheGpM8dkEuBsF}?JEja)@rbz3EkbPnK@0g? zHZIKxmT<=+xCVXS4n;rXF2-)bhCE!eBje;G#+mJqj3zvsK=I|9!Wbl%=>gifWt;oG z6Mdd5(+;1~jR7-c^e#SUm_ia*UqM*%OcCgAA) z#1uw_5Hoz2EnD;sf_zpGPf1Z0mjsqrT`Gyu;p%u#ja)S6K12UAE-BVW<*WUJ;Z2w& zaHg(M|Ku5gu|;}m-O7Qpx}_8+beC&Kjjz)b*ZBS&S|MW)J6;$HV-VX@9GnSIYrdH8 zX4rawKe;=pP0e$Lj0nTI_f^PVsI>rgSk;E`E;NC*p6auiOqFzH7oBub;bFStm)r{4F+R7 z#vf8XGA<7LKjiZ1ud_4!5rN2$=kXnP_3*l)NEf;%MRF3_N$lmO5IKK)*{APA0w0-b*-6DxM;0u!9H!w(~QIT81g@@Za_C|~sIew7M{u)3*?sN_s1 z&l*8aceso6t5cd+mAXha3!Gc2$R5_Y`gmMak-bETgOq{-@tdPIgOynL#!cxR zy0SQ?nICap3e_#e^?O-^+%uG^l#N+O`gX^&g&Ad`V1x`sp;44Kr-;Pw|H*{zsk0xN@ z_tZWZe?R?{K7Iip>zMkSDyx*6pw#|MN`RZ3i_%;^Nz##l^Jy_V(s+BXyH-Q{CN1^F z)*Q`&u6DXC4Dzp09X~M}Goj~xAsX}0Qz9ej?@X(;l5bwWtVvWrUU`dXd8sF)NCOGrO6+%;3M2 zWqv7vc)o^^U^gB9^)s)qP~^3C=wq-=o_4bRGfECcCC9}ms$p+WJtx_{TGpGP%|I)n5qoN;ME1qDLt*1@rcK<&|eSY+_~RrFF2LDkpD~ zIz`G`O6Ow>du>o#{8?y~jH;%i&`+k#0A@R`S^ZC`rv3519JJ#tf|@imxy)ZOm)5M7 zL0Q?j+0=2A!$Fj0qf0i^I$-Nz#SZde6Yzyn?M5hy;fmPS*|+-8q?JlJ#ZtD+ETP;+ zCrVNF?AQ+aqgZRFuvm9mjw865Qbt?%jP|(b$_RdXeJ5xO>#-ZZ#5K|~7%kI#GBQ#8 zlZp)h=8&P;+To?#_AQBr68HmMyR}F z>MuY(Avi)Gn+SK@8{_5~xyHMV8Pw-&m z4vK*~-sJ`q7rRp1+O?daRK!F6-M9OR8GoFUFfy|5pyM}FV3}Crmg;Dbq(j-K3j%E{ z;H!ZqmSwJXGP5(f>_A0*Mb0v9)T?JFVrAhfLS|JQ!`Yu2$wMfOG>wd^eRlJWeAvmf z#~J?J2NW^5Wa{&J@1F|W&$83j;*x|f_R#;nH=y}OM(t{vL<{Gy#;)v;h@20^_3t$% zng5NKa+>m1NhNPz-8t~!AMO7q#`s^B*VN(9-Lx#X^|mP@NvQ z#^>l(6s|32()-XP3i|tz6W>$SqcBZ{z2YiOn&K=A!iM@2j#Vx$hd-ipgEaKxLz+Z^ zZwLf{X!<}<#?7H>3GIjC?*F|PAkB1Ow(uF?gKgRqavr~BEsZqFXv3%ht_d5-{Texg z@qJ51LDO$#Su6w3T1Z*MxyHtXwOHbFeKAQqyv% z$;^F%eLm4JEwRqxBJehro41-NSogw2fBCP8hCvTQG|$|zEyOg(?hC=Gv;3P<6S^zXM*k4z5<%Sz4rCmw`P_hgJ(@TJI{Zr_a5PhU)IHiI7 z+|~I0i8Ru)u7P6HzCGT47vCO6`5>5UHlvA|BjJ=p|5nCJ+`&$T|Z|$Y!xNCiNpcUG=XV7S7t|%*90)s+6Mw zWYl+K)1^?;+IW-XrbP1(+h_^DU!M-S0RTQvJw;@3wGUpx;{wi)o%9hPn4#lUP*EAU z6~#cSyDQLP094pbrOz=N_`Ay)TrZ_6jGO%`-T~Kq)=}U?po^|&7h>%?Gi3f zYmlmk%&%;94f?)*|c6N$C5aVh8)(y zDiv1PSt|v5S&uzVFundg%!11>+DXoVf?~dRLpoK!Bh_b#alIdVV1(Y`QE9nI6b;5i za~cb{46NlE1PEgWTb1r3GEP%j_De_8XU+~g6j~8BUhSn88JVKJ@dr~K8=3#Kr#91I zA~WGafSr#l>-`tn&QE>LP?!&iWXZV9&IA96Q3_GtHKfwI%7$MrMa^KUclWGHd37*O zXiHdFT*~YDL8{DAfE>XGJSqYS*hoOsM)C~j&vN>8v|MAy_?_x@v2n}NNkcp~A-RNj z1yvI9z@VD043g#zz;HH{oOJML-z}fo70aw$;L-2AVea?0dyE9c%*MvnD}FpDnjFjD zx;8+5pVUjVfl{Z23reo)eT}`l~XWc>pMs=u^s#nqy zZ;giBS3S*1~g-C_Dkz>iPQ0l(7U`gAS2){XhM zwxWAuGkg1uHIqfoG(2{erzo+8%#9OkRy|nPDq(ImUW5jC zaJicG$RY)}5g@bwoFH2H_e;?hph)j0TasrO8&^ef8$EFukdWu0TUc2|`ie)7MV0Ar zvXhu0d)pQlg{am0u-YM;hK5=r_Q%Jie@#1U>A<1Mr~#t*tIX6AJe70Fuj`aHpv<9CGt~lbALmnX- z#r+$G3m|D=pWaCJ@;g2BHpqGi75dw0dqj&xT1F}N$b~_=_Ib3(M#bU%RCARE(}@x# z7v}^E0!81kfsaN6NY-aU<(Ez%`CXiuqN~w;@dnN=b7_RLwBOOAqm3E;=^&8FC|bdT z%gc2MM*RUcACr23EA<)CC@}Yi{|;n(;G^5;^S32DufDz>pYAfq!|$7}NnrFlR;{`6 zQY(!OVz6$j8*fCu?JYR)3GZ^wRz&=|@3S%)D265CfGXx$B3zbIyY}nXUtj8C|s@J(hW%H(+2V@%cY;F87m<&Z}G) z0!+{s4%C}<9gDGR11UG^+`=Y4Uh6p0=m$EjRJn zX=*sAHe2$GlV2lBq5PlX4M&E`>M7$par5?3#2XIjy~V&a$TgQ3)OQvFQzH$4=yz`L zoKgHIiUq~UVGFyZh1CMA{3LMorv*}>X*UTeKJv07P(YUd*7VxW5UnH=l65@{aM5Ki z>GzYYmWhy%M1=n}0qYIHnwH(*(jR&F+iTsru~h`jbcuS0wA`GFS+Io=zbBunSE&(w ztw);lCVJxk5D{JWpuK$H4hb-blp934rl6pzJEsv7U6hh=Mj!!1y!>)CxDx_a+xnx^ z``xMjM9sNL^68BGR_pTXhIoQYh$LRNUIpf(t7y0FQp3DOe`HA+Ik&QoY~}@uzxl0C z=%^b$`9Kim=_q$ip4)I@t3%{&uD@GInb%1XH+M+_VaoGUWgZtDZvqIyI?`PMbqb1F zO*=*h{OA*YZ{wG3t7jsF^mNu)lq&)R)H5{C<>*pxC`Uno0h>Ad_G>N#EG%;Of4U4q zE0$d1e%_zu0@O=&ef~ReWK}(K$UEyQisbG6ohW;K~NaJ^B7tC+ow|L#%($hoTXfT$6fJm?$l;rT-XTFyj zH&^v^xt@p8p_z-V2JJXpaKLvA#BX= z^!F2G&TmQ|etFFiuopXBllnZ;mIF|(qtG+#ByB$6e2D6tmaK>9U&p%LAo6FunsLOJ z95@09;MRRD*S%D)j}QVf6k(x`^@gNk_1~<=C5x`@qM>TrwDW z=x9<8IDGu@<1gpR7|me4gVL7uV(v-`G}?{aJ+*@3KH75wlumBSba62w&vZZ^Fg`9i zpuFQ3F1ilfW4!2=cFovEk+>BeeCD{tF=(6Xp8WIF%)Sn5GdZB2o%)raA0U#wLgHsS?bsM zzM6>aouPhc*MpkmUhP7T%2gkf>&H~_c#i$G*N-d;TDi7RY8R+-gq5~xlEgU6{&I= zMg2J+ht)U_rFy6R6{keeW8bvs=34X^dUkfCgTo;uNs9efm4J_5PlcLJEM_jX-h6V5 zAiFAK{M&^1`r_Oc4-b#s&3SnJ+uOUxZvIK)6>umXS?VEuP}9nJQLbS1Ip;viU%GY) zi{l_7N_l+g$AMkH7r!-}$ixL~VO^{*+|c5g*dv}$j6u;(FzsX z#xT#?@;)1>7lL_J9DHr#PI{XQI$kBM`?tDX-INq|l84%ohy3JCY+#eLX`kI)88c>J zRftE+44xH@Yu_h10P}05+$wZZy{MT*N4Ofz9HRAT%U7w1R(GYFRBdN+X4UbzYb#%# zoa_6Yr%T@+^vZ-fyAYdbzJYApFFIClCWtj8+8Rac(%MxkKanKdWmWM{!dQ{l`$Z>p zr6eCc@3SP_T`s!&x>#lp9|!f1kjVoyy?33B``YdU3bxtG$>9o%Pn5e8k4}egXky*m zWyKyeM9JG%aqz(QPpGdGIkIy;B~*@<;phG#u4Ddwt_FrXj@2T|L6t3SZH|+&!5G$1 zrIzC-6g?1ZSCsJ;;)YQ!|vAFE#6twj6Sb(3qq$SAN#WDkC-pl(p-xh6DWi_kcZB9n| zy3V9eHpF=fw@5i)r^A=fb6hs7_Z`-IeM_{hU;j;VH}o_+gL2F5b9N^;6Udt}lS?e{ zGDkDEb&n$;I0LPjOCCuT`P($5{>0B1R`qo&=@YfZ>(_A1?~&Az^KrY(rQW|kBXAcUKPU1+Xnpom0x43v9 zD^9{?(MDqj*NTH!Ds3a{YaW%u+@anmBT%jknaA`*+U(9qvBf6}x~#H!T{b!CiDc#5 zM1jx#4SRR-uUcDs4eG=(%e7TCwaN^01nBT}1_-R_HNcsp2MF@QUIcjQ9A|uy>b4tw zu!bJ(ZgjF582IcTV1?V4)rT-TigdWWZ|$fYpB5Ewir1bqLR9HI0^V;ZoKp|0R#FV_ z!JhQbE-aMHr(*`5w^He5hM_V9^|vry7vol3JMjs zofFD9B>rHi{Ziwb6}X#D`h<*}>(hewg>1Pc^x|4qm$&-~dlqaOgNn>Q_o^W?Fo61TdYKGE%D*xD{nS<$@M}8KB=tf5ZC8VAwUw@ph9;|ayJBd6HGfwgz z9hxypZZ&8#TOKh=H!KPaPpFKyW3u;d<*$nL4HRKe))LV;34NVqL-$5SG05RvS?1u6K`UoA=Z=sz78n~!7hEtv~Hj; z;SriQmhv3Z6hk!uF^Lv$ohaavH1wx^)((J4P$9u(>j6Dcc zLqC@2_fB=AxR+%*NA(0M(2(;4RdKu(8c4w28^+{%-VtT7v1gZv^ztj;_Xw5w$#9>s zjVfNzp=ril9l;-=D&*}tkLf2sYwVfk+;yUtGS;@*T-BWfysm=!E_@y6&&x73C}BYn zE#;&*Z$Gcg)IN9r-0|`OjP)y+JCsZ6{pexo^gNc0kKSZ@VZJVkO09C zyi-%T>xqcY|6Edh1hp9+f2`lz{N`5O-`wSXihWo^P{LJhz$}?&O3=dQ_-)J&0%4Na z@@PuCI7(_tST$ld7gxQ;Ihqg}-gpL_*i4l;D;UKcde222kTj_ICyzN8c76O7v5sHB z$DFD37DG^n1Nv5yBN-=rA7TmoBhyt~@VtA3&*gIqKBkJz%FC=u(BgATMb+kG7hmOr z5+z$Q`yp`Vp_|1E4mnJQ3@NQ9Z?5#6tyy;n8rp1mVqJoeO+W*5^xx*qI<+UzS zt8M@Oxr->f8)9wU8rvbz-!9wspPBoOv(QRm3LpAJ~RjO4TMds_aZdu zw#1JH2w9gL%>*cOKy?l* z@%&jzhD-AP2xSHWWxcxR#93UNyH3g#a=6`__pIz!QE2m+gN^la(rQ(5LbIhBE_BGLMox#J|-j3w^K`*{AXPUHiuyAvzLhLqPJ zasv-evmsThjQ`MbV!YTnT4|1oc}Hj#O8CH|j8$@M`mdNoV4-Pviu7y}2JX+io^-@XQfuHM^e6asu}x#zT9u|o z8hHEes@7*kXJOmKkCV9_6ZDSx`9^f{wYCwEutSFAhv|v29016N)ubLxM)^p+c(^fW z-+8|@cku@BB$vXDa@Gyz(LiZSVH}_!i5@9#MCwUz;ZjGt!sS&}Gfoow{R95KI&iMl zVUBF!%R;9sIKm5k{OpfYdOL;_8*J33{|}xKSvgHR$s$;Uel2IC`=M}-P$4{_yV^vQ zo1GZd+Z}F&<5x6jZ3Du3m`3~VEIm|K;k2#r)N!2pLW{p5wvN7K501dUKgvB(aY zAOsB?wwMH7N8i&E5>JB=QaBu$O_}45y?uI{rb=p#nOAB5zN?xV4t=jZV0ON_paGHJ zs+@LMvvmgP^Q{bc9k%wB1f6n{0fnA48CUWB8rM->;W$irgWk5Gv|w}_a;li*x!dXQ zRO6Q3uS(Fnfd6HA{Jn>erJN+#8l>0}Gd%b-r%cy(GR0%*XKC z0kQR77K;fgH2k=4@KkyNie4wBB9MlG&so@vQPrCQ*nf^9G!NuxPV>%cGLBBhwesaM znzlJ}sM=eBru+Rg0E+U+ofu6tqR!^^QuKYejJYI!JFPo2$p?@8D#q<}l3QQ3t8DLn z0+-ahRnO;PtX^x#%Dx(!5lLDem;1op*?QhD@r#Xle-Hkmw3acmMocI4^<0 zSaA~~>2s;07)-QuAC2???Whp&Xl*P^=#tA_@Xh+40=5B}1S%xS$9?3EI@3j&rarvm zoZ~Nk8|7md>xS>%+kJV^CZnuL1Los0%LvXNIH(-UGdpnHQr;C8bD2+$PX99yqZn3t zPo=SkuL!c%S8bLss$7uY&ncrqpU6TL>fXD!^hO<(^=xS6iXW2I$I<<$TI z%+bqTwohzkZ}?q*K<49~`4UwZq63AXKd40N-rv$mwg(C z_F{gan^4IaMHH@9gv|c>iqsXeKS=Use7-JObxMq_QAWl!Zoi#78}>KqCCF}wxP=}ScfisrVYSB3O_)eTv?YRGGAv@8u+ z0buqo& zMC$TOh&Jh>`!O%IbM--QT58qF6T>pb0XuT}jO{g(n>F*_2 zgHvB>iRf+C3>Eyv<*qp42%NuSK?!Fkq*w3$pD%?yBY*Z{=L`$t&;fj+VEAlTZcKy z$>Vu1*_jw!EgoRPAxfHZ2p?7oNApoLRNT7$YXbI zS0cTHn9+8q*42L6az69%ib`3Dhove4y7H`*Px4SO{umCRqj+gZPhQp;-2 z`MiqF^$S`xTyvCo`+03M?sAODq-n=Ke2q+1z4ei za^qZUS@a%FAm9D*wUSqzU=%{$l2fdCNSSZ7=9ZMbPb}R?zEo<8dV<6WP|)S83v;gz zh_ovGz!m9as=1}z7nI~veDroxo1Ifojb_3a)+&RlE{*Xm5Be6s&oi5!aSla~G|H9j z`Y-+_B{%Up|CkyPHCuL{wQ1X{_nQ#-Lf+1@VtHRj$vt7IPv}}SzGe{y!F}c zHv6ugm1NqoW}NR(gL{-EzW|?eOp8&%sD9l=;nBfS`PS_ehKs0;nzizNrP5%RFP7!^ z%hnZD5U}9xls0lGJz(8Fi^Vw*Kf@X_Fn#$Jm0MT7o6FssWG^7WV7Hyd z;?~F^wrTGcNG?~CR2IN`dyf8*pu#-cByM~?(l&ExOeRO=0vz(=TC|#kjph2$8yaC$ zGtyeLbO_SmEzUXd`DP+=QNC4O8s|T1C)^M)^G=Ot{Sy%p@zt*pj1eEDZ!M8DrPpzl zfj*OLO4ZuDj#p&Eo4MF!GHm86n(67PR56q@^y6wlvc5|&~ zUeZix!|axnkJF8I5~W7N#`s4$Y=X4%K>VNHLjH_ zYivdxgL|{QwTsjtfQPj0e3g zS%cC8c7Of}6xfvA548q~*v_CUQrcPTn6j zhB-_s#+2)Nv}(?u6{3vKNuDX(#P8{Jsd!j?P-LPXR{<(`#rmJ5pGDrh2#7-+2B{Y3 z|0@3LpYpaAnf{E3=#eSWB?n!$AjwtE%oZm7jD+dSoqaFuAyCYxj+;gAKFBSOx|zZo zLIed>s(YQxgROSo*6ZfgNxVmo#TKU?1lJ0XcMBU#TKXcBj=${D;jW^BlJC)HpGdFuzDWikb_VWFJfxq+SSObC zl`soB9KNxMY5N| zoBCH3B{%H}oAX+$#An0N8BC2Sh1lD7{~LGj8P!zxHTvS?qoRnQB1ji$(xpp{Ql&SM z4g%797ecYnlqMj(New-;&>>3iy|+jw1QL3HKyo(z-*>#<&X;@6824TVV-WV(duQ#r z)|z|H-<)$TrjA&z#3-AZ+%8(#FTpSD1AMHIidx?MOM)-g69P}Ahrx1R#+Yv-N?%i+ zeR0bp_Zq(oLFN6>)>u6A^IE+(WtLv<-M#ibGr`EVsPuHzactU*MVP_a|NRebriCVu z26yU>TDjqSOu>7v=|fYT4^w^R;^d}~0yKIuc6zBA_g)CBMoqL*Ti zUjmW!J)g;|Uc83GGZ*g}1>2V1E5j_bj_ZQnOuivzGA=@*(`x2ME=tn>G3bt*N;Qz~cpXa-30HSyK_uc4zW2Chpje4}RERNGkYP~yxf*I!%w zu=nJWT{nr%zUXy@Huan5$VhUT_b*IHfAm>j{r!}R-aWvL_85rC?+!Pps5j)?b>^{I z54T|C(l5H}-tg@vx2|`EDzzT6wBJjHdWkSrU+8f|uRby^m|Qzey}0_;j?%6C3ib7y z8o!GRj*W-f?#lv7AM)e38keBC6Se3i@LGPmiA23Ir}u1EOmTKtUAT-WY4)`zB3fs@ z0#v6>aTD7G)ao|jhOEKl#rH%bn8Vf*lNeSLnAGx_n|1)ZVfsF}13gtWA9Z zv7DBkM&7kK5T9=yml?V*6aJl8Z5*_dcCVL#sVaIdj&~BWGbI~v!d~K)g*pC-u+~c!4`p!brSZ!QBE+#WE?TL9BST}nwD{)^f z3^d6UD9tr|v^Ib-VuFdPlD|b!9-ds8Yj;!MJSUAJcM>nA6~EJ02)*aPihonYCBgSi zla$WVwqmrE^Y?ax`lA9t8gLu&oe}(bw^$K9Qx>%DGwtX;ZErOxtMYqcUE4W4Lpa)w0CX7jpEJ#cwFQ-8kT_ zW6(IiKN*c)v}OG##8&mS8lXY+s(T{2TK_X8U|uLJ_W7xf{SfhcJ=p}GJ81Ep-bkty30zy$8*+_BmS87X1loqVmse z0UOZN^6dIQY@`m2{}L5Gs;a8`{N;;7;~gRyeoT%HXVA~$YCtKJ$C6@6%N863^g3az zqke9-YfcHGYd`p}2K-wt4I=`>xn(qF=DTi9AHl z6vGvCj@jKXwT88qMQB08?miHa>)_wXLS&y>H6L8)ENt>G(Jzqxr~ibNe!2X2MCana zR|ot5@S&goWELIU140HK`Y*x;1hz-}H|YoX1pn(%|35$UvESoJgFi?wbF~IiKmzC? z*!?SS@z?s<;;up3HuaG_nsBlPl*A$dP4$vT2U>9DY1Vfw%xUu%!k(gY&cm8^&#$SzODWF^b z$k1{wEu_@p!^5tkIctCWxBkKL^$vO`iihow!0O*zGBOVv^t@^`K$k+z!C?%3J$(82 zgMPm2x9&-P*!yV~4HSm;bsGcRkx0+^P1DCgyUa4AFFZs0=#G~0`sk7$s;nz2Vk4ko zIh3~i;NzKLt>Y{_h)|%GcD`;4&Jgz3%+1Y6#Zvqelf#+9XitPvqF% z-d<+}70R=*NC$F<3HU+*x0Md`ViOjF0I{)k?Rry*sH>{diF+2lEuj~-pAbd(1Gygk zi9E~8%eU^)k;_P)t;NU2#;PRowp^afgO9fM_u9#9-oK|nWHx-y%d}5R7dv(C2dB2O^XJNmK*2Q?e`x?^z=K}C{7C+knRzwC zXQ{WppM;orrqRm*_$EgGy;n>fAFo}ns;<@nGLWzsvmNdz8sT$5EQgAm^kVMskGCh! z=0O*G?Nen&Z~`6&{NL~L_VEg!X!`y$tT=f-cPw)=-QXM}90ZF1i=M4tVi7K5c}hqd zyV0ivM&K#&hr^&O;DIl3*er3c?TfR+DsHoS*X&ncZr;CtA2kil610i_{cdZf($e4G zzbMRpvRHRH@;MU|6GT0ukAPij0f&*&CT3LwMu@0Opl}wDF()2z75e>CeBs@v1A4i( z<~MiK%n6zZ3bxmdEzK*XC!|qZGI82o$@)!XTmB#1VUn3(OCkjW$@>QsKjc0%* zt9s+vK}RF930VrFf`a2_4h+|bH2+h6UDVFXDF3Lc`M@JyhS$yY`d8OzpUjcOf{Qtbdbsuxg= z0H(O>I)x0k#CIQ)kG5~jf<=m>1+A^DZZk<{s_5*YXR9H5Wp1lo0eio1$%I=ErY`y* z0_Y{Y7n*!r)?*fcCZ`Q1CM6{i4uA&>u!@z|aZ| ze4uw?=p||oY=XA3!@6P^86Q0o_B-0L?2hKqulTbK0*0Lz`CmnrAd$STC49xrJUKyf zJfowdOMFe9$SRA@Zx&8RewQSC%@rT^S6~j)C#Y$clbu;$9IC3QILy@`J%**G3$=3P zBPcV(y^3{9-d+v+7j72o!vLO`t^@Q6Fi3q*W^E*V(Ef-3YzuY?OiJ_SGWi)W4^1i1 zfq@6cJ?exc40XOM;Lc$|DI^%I&qGvJwTK;a&U3%26l@(hZY3fRVPaKyYy!O}} zx;$Nt2|8O(x==C)R4EJ~u+yHmrT?Q**Yo@=sy18%&KBoj4rW1@$AyK36%`dy;1mC& zQAIMzJt8rn=aT*oHX<2fe$Oq5>NaMrt+>o$eOk7E(j4L|^QsxQ)5TAFGU$1{SL=k&6ZtNnT8L z7}SNY-jXjVkuaRB9`>E{ukl%kGe{jVvTsZjcys7;lc=2aKfYX>yi(EIk}tvJ_Q&(1 zV3!Ef6RVx?U{?9#^p+6k3wZISstob{g-)UDgR)Dl`Pj=LxbruE&%BeHOyZ$tyQ9U% zwd3pBWT}o@6O{#A9E!(*Hbj36+lZb5I&DsI5th)?H+jH4!^{;C6_b~nP##_>TK)R>);$$LW5 zl_Qw|VJhcim{>Z5f6jh7yP+sSgIHqj2;FK8SPi@{LyU_w4Ye8Eph62DP1=XWMDvKx zF&!RV=%{|X+|kt`fO#O_l6L0~tS6G^Yvzoiuu?Ws=|PPg;+LyaaG;G#{EH(Vnk%ME zCj(N*t(R)sU(z3xg1#6+$Lu1OYFGxzU;%`hsnhb+ z;k9JEeS0aQ~LTHQFD7zmugv5Dr_wBQxB;9KAQY8t@3)N#obyeDFg0G)zHa z&R@9)1+gX7v9#>kVh-)V@Lbm3iG3j2Y6R4SS+Fe@MQm9l@6{jg-Ns!I9=nX&d-=$< z)^_fCe7nF*Vk^m(fD@dO_ae`d(sOoM?MwC~m^*HC9}pCx(It~7A`}bfWAH{IP4>Sw z(1bJ^At>*9Jzplg)QMkbqdrv93h(W8u{JejQ;^IjRf)H)u8Z;;bPNP3!wz?QMu%DC zB{M1xBI>hW)u!-mDAGn_@sBR$Gwr65-u4qzrwww@S;(G;#h;jA$Pz~m8Dgd?$J)zm zKUqCQ{Io|ou4Bng`NF1uHB6+Y`7D)3k2uyLYyZPSW<{aA_2EJgm#CvEr`UL3W{Q?z z;Hav>I~Z@2{ULZKUXb2bMi_l&dt4jb0J`n=V!7q(~{@cR>6IYrljEj;Tf-?+Tg2Jt`%5pk3oDVt|

fCpkEbu`JTS@i%(4~;T;IjFrIv%Q^-i7WspV6f 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 - Electron architecture + EdgeTX Buddy logo

@@ -20,14 +20,111 @@ > Helping you on your journey to EdgeTX -### Development +- [Use it online](https://buddy.edgetx.org/) -linux +## Development +### Prerequisits + +This application uses `node-usb` when running in electron. In order to compile the bindings +some build libraries are required dependning on platform. For MacOS and Windows, these should +already be built in. + +Linux + +```bash +$ sudo apt-get install build-essentials libudev-dev +``` + +This software is designed to run on `node@16` which can be installed with [`Fast Node Manager`](https://github.com/Schniz/fnm) + +### Commands + +Install deps + +```bash +$ yarn +``` + +Developing + +```bash +# Start electron and web environments in watch mode +$ yarn start + +# Start web environment only +$ yarn start:web + +# Storybook component environment +$ yarn storybook +``` + +Building + +```bash +# Build and pack electron app (outputs renderer assets too) +$ yarn build + +# Compile only web environment +$ yarn compile:web:production +``` + +Run tests + +```bash +$ yarn test ``` -sudo apt-get install libudev-dev + +Lint + +```bash +$ yarn lint:all + +# Or yarn lint +``` + +Format (this codebase has enforced formatting with prettier) + +```bash +$ yarn fmt ``` -#### Methods +### Structure + +The application is split into different contexts + +- **Main**: Electron Main Process - initialising the electron application, runs the backend when running in electron. Runs in a Node.JS context +- **Renderer**: React Web Application - Runs in browser or electron renderer process. Shows different UI depending on context. +- **Shared**: Multi-Context code - Designed to run in any environment. Imported by both `Main` or `Renderer` +- **Webworker**: WebWorker Context - `.bootstap` files start-up `.worker` files. Code designed only to run in WebWorker contexts. + +### Communication + +This application makes use of [`GraphQL`](https://graphql.org/) to request data across process boundary. Meaning that the `renderer` process +is always entirely separated from the GraphQL execution environment. + +[Apollo Bus Link](https://github.com/freshollie/apollo-bus-link) is used to facilitate the communication between the GraphQL execution process +in Electron or Webworker environments. + +

+ Electron architecture + Webworker architecture +

+ +#### Exceptions + +Within WebWorker contexts, there are some browser functions which cannot be invoked within WebWorker contexts +and so have to be invoked in the main process. In order to keep things in Electron and Web processes similar +a set of [Cross Boundary Communication](src/webworker/crossboundary) functions have been defined. + +## Acknowledgements + +A massive thank you to the software which makes all of this possible. Specifically: + +- [Flipper Devices](https://flipperzero.one/) for their opensource [DFU library](https://github.com/flipperdevices/webdfu) which runs on [Web USB](https://wicg.github.io/webusb/) +- [Rob Moran](https://github.com/thegecko) for their work on [`node-usb`](https://github.com/node-usb/node-usb) to support WebUSB within Node environments +- [Jimmy Wärting](https://github.com/jimmywarting) for creating a [pollyfill](https://github.com/jimmywarting/native-file-system-adapter) of web filesystem API for Node environments + +## Screenshots -- Cross compatible code. Everything in `./shared` should be able to run in any environment +Screenshot of flashing