From c13b5d064cc2e0685e0cdb5a7cb689c14e7ef3ce Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 17 May 2016 23:43:13 +0200 Subject: [PATCH] [Taranis] S6R script splitted into 3 pages, bitmaps added, calibration added (still no answer from X6R) --- .../sdcard/taranis/{TEMPLATES => S6R}/S6R.lua | 183 ++++++++++++++---- radio/sdcard/taranis/S6R/back.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/delta.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/down.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/forward.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/horz-r.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/horz.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/left.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/plane.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/right.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/up.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/vert-r.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/vert.bmp | Bin 0 -> 1144 bytes radio/sdcard/taranis/S6R/vtail.bmp | Bin 0 -> 1144 bytes 14 files changed, 146 insertions(+), 37 deletions(-) rename radio/sdcard/taranis/{TEMPLATES => S6R}/S6R.lua (56%) create mode 100644 radio/sdcard/taranis/S6R/back.bmp create mode 100644 radio/sdcard/taranis/S6R/delta.bmp create mode 100644 radio/sdcard/taranis/S6R/down.bmp create mode 100644 radio/sdcard/taranis/S6R/forward.bmp create mode 100644 radio/sdcard/taranis/S6R/horz-r.bmp create mode 100644 radio/sdcard/taranis/S6R/horz.bmp create mode 100644 radio/sdcard/taranis/S6R/left.bmp create mode 100644 radio/sdcard/taranis/S6R/plane.bmp create mode 100644 radio/sdcard/taranis/S6R/right.bmp create mode 100644 radio/sdcard/taranis/S6R/up.bmp create mode 100644 radio/sdcard/taranis/S6R/vert-r.bmp create mode 100644 radio/sdcard/taranis/S6R/vert.bmp create mode 100644 radio/sdcard/taranis/S6R/vtail.bmp diff --git a/radio/sdcard/taranis/TEMPLATES/S6R.lua b/radio/sdcard/taranis/S6R/S6R.lua similarity index 56% rename from radio/sdcard/taranis/TEMPLATES/S6R.lua rename to radio/sdcard/taranis/S6R/S6R.lua index 48711c90e..5c2e4b0d6 100644 --- a/radio/sdcard/taranis/TEMPLATES/S6R.lua +++ b/radio/sdcard/taranis/S6R/S6R.lua @@ -4,15 +4,21 @@ local COMBO = 1 local COLUMN_2 = 150 local edit = false +local page = 1 local current = 1 local refreshState = 0 local refreshIndex = 0 local pageOffset = 0 +local calibrationStep = 1 +local pages = { } -local fields = { +local configFields = { + {"Wing type:", COMBO, 0x80, nil, { "Normal", "Delta", "VTail" } }, + {"Mounting type:", COMBO, 0x81, nil, { "Horz", "Horz rev.", "Vert", "Vert rev." } }, +} + +local settingsFields = { {"S6R functions:", COMBO, 0x9C, nil, { "Disable", "Enable" } }, - {"Wing type:", COMBO, 0x80, nil, { "REA", "DELTA", "VTAIL" } }, - {"Mounting type:", COMBO, 0x81, nil, { "Reverse", "Level rev.", "Upright", "Upright rev." } }, {"AIL direction:", COMBO, 0x82, nil, { "Normal", "Invers" }, { 255, 0 } }, {"ELE direction:", COMBO, 0x83, nil, { "Normal", "Invers" }, { 255, 0 } }, {"RUD direction:", COMBO, 0x84, nil, { "Normal", "Invers" }, { 255, 0 } }, @@ -33,7 +39,12 @@ local fields = { {"RUD upright angle offset:", VALUE, 0x96, nil, -20, 20, "%", 0x6C}, {"AIL crab angle offset:", VALUE, 0x97, nil, -20, 20, "%", 0x6C}, {"RUD crab angle offset:", VALUE, 0x99, nil, -20, 20, "%", 0x6C}, - -- {"Calib Accel. position:", COMBO, 0x9D, nil, { "Up", "Down", "Left", "Right", "Forward", "Back" } }, +} + +local calibrationFields = { + {"X:", VALUE, 0x9E, 0, -100, 100, "%"}, + {"Y:", VALUE, 0x9F, 0, -100, 100, "%"}, + {"Z:", VALUE, 0xA0, 0, -100, 100, "%"} } -- Change display attribute to current field @@ -51,6 +62,13 @@ local function addField(step) end end +-- Select the next or previous page +local function selectPage(step) + page = 1 + ((page + step - 1 + #pages) % #pages) + refreshIndex = 0 + calibrationStep = 1 +end + -- Select the next or previous editable field local function selectField(step) current = 1 + ((current + step - 1 + #fields) % #fields) @@ -62,15 +80,15 @@ local function selectField(step) end local function drawProgressBar() - local width = (160 * refreshIndex) / #fields - lcd.drawRectangle(48, 0, 164, 8) - lcd.drawFilledRectangle(50, 2, width, 4); + local width = (140 * refreshIndex) / #fields + lcd.drawRectangle(30, 1, 144, 6) + lcd.drawFilledRectangle(32, 3, width, 2); end -- Redraw the current page -local function redrawPage() +local function redrawFieldsPage() lcd.clear() - lcd.drawScreenTitle("S6R", 0, 0) + lcd.drawScreenTitle("S6R", page, #pages) if refreshIndex < #fields then drawProgressBar() @@ -78,9 +96,12 @@ local function redrawPage() for index = 1, 7, 1 do field = fields[pageOffset+index] + if field == nil then + break + end + attr = current == (pageOffset+index) and ((edit == true and BLINK or 0) + INVERS) or 0 - -- display label lcd.drawText(0, 1+8*index, field[1]) if field[4] == nil then @@ -107,11 +128,16 @@ local function refreshNext() telemetryPopTimeout = getTime() + 80 -- normal delay is 500ms end end - else + elseif refreshState == 1 then field = fields[refreshIndex + 1] physicalId, primId, dataId, value = telemetryPop() if physicalId == 0x1A and primId == 0x32 and dataId == 0x0C30 and value % 256 == field[3] then value = math.floor(value / 256) + if field[3] >= 0x9E and field[3] <= 0xA0 then + b1 = value % 256 + b2 = math.floor(value / 256) + value = toInt16(b1*256 + b2) + end if field[2] == COMBO and #field == 6 then for index = 1, #(field[6]), 1 do if value == field[6][index] then @@ -128,9 +154,24 @@ local function refreshNext() elseif getTime() > telemetryPopTimeout then refreshState = 0 end + elseif refreshState == 2 then + physicalId, primId, dataId, value = telemetryPop() + if physicalId == 0x1A and primId == 0x32 and dataId == 0x0C30 and value % 256 == 0x9D then + refreshState = 0 + calibrationStep = calibrationStep + 1 + end end end +local function telemetryWrite(field, value) + telemetryPush(0x1A, 0x31, 0x0C30, field + value*256) +end + +local function calibrationStart() + refreshState = 2 + telemetryWrite(0x9D, calibrationStep) +end + local function updateField(field) value = field[4] if field[2] == COMBO and #field == 6 then @@ -138,12 +179,97 @@ local function updateField(field) elseif field[2] == VALUE and #field == 8 then value = value + field[8] - field[5] end - telemetryPush(0x1A, 0x31, 0x0C30, field[3] + value*256) + telemetryWrite(field[3], value) +end + +-- Main +local function runFieldsPage(event) + if event == EVT_EXIT_BREAK then -- exit script + return 2 + elseif event == EVT_ENTER_BREAK then -- toggle editing/selecting current field + if fields[current][4] ~= nil then + edit = not edit + if edit == false then + updateField(fields[current]) + end + end + elseif edit then + if event == EVT_PLUS_FIRST or event == EVT_PLUS_REPT then + addField(1) + elseif event == EVT_MINUS_FIRST or event == EVT_MINUS_REPT then + addField(-1) + end + else + if event == EVT_MINUS_FIRST then + selectField(1) + elseif event == EVT_PLUS_FIRST then + selectField(-1) + end + end + redrawFieldsPage() + return 0 +end + +local wingBitmaps = { "plane.bmp", "delta.bmp", "vtail.bmp" } +local mountBitmaps = { "horz.bmp", "horz-r.bmp", "vert.bmp", "vert-r.bmp" } + +local function runConfigPage(event) + fields = configFields + result = runFieldsPage(event) + if fields[1][4] ~= nil then + lcd.drawPixmap(20, 28, wingBitmaps[1 + fields[1][4]]) + end + if fields[2][4] ~= nil then + lcd.drawPixmap(128, 28, mountBitmaps[1 + fields[2][4]]) + end + return result +end + +local function runSettingsPage(event) + fields = settingsFields + return runFieldsPage(event) +end + +local calibrationPositions = { "up", "down", "left", "right", "forward", "back" } + +local function runCalibrationPage(event) + fields = calibrationFields + if refreshIndex == #fields then + -- refreshIndex = 0 + end + lcd.clear() + lcd.drawScreenTitle("S6R", page, #pages) + local position = calibrationPositions[calibrationStep] + lcd.drawText(0, 9, "Turn the receiver " .. position, 0) + lcd.drawPixmap(10, 19, position .. ".bmp") + for index = 1, 3, 1 do + field = fields[pageOffset+index] + lcd.drawText(80, 12+10*index, field[1], 0) + lcd.drawNumber(90, 12+10*index, field[4]/10, LEFT+PREC2) + end + + attr = refreshState == 2 and 0 or INVERS + lcd.drawText(0, 56, "Press [Enter] when ready", attr) + if refreshState == 0 and event == EVT_ENTER_BREAK then + calibrationStart() + elseif event == EVT_EXIT_BREAK then + if calibrationStep > 1 then + calibrationStep = 1 + else + return 2 + end + end + return 0 end -- Init local function init() current, edit, refreshState, refreshIndex = 1, false, 0, 0 + pages = { + runConfigPage, + runSettingsPage, + runCalibrationPage + } end -- Main @@ -151,33 +277,16 @@ local function run(event) if event == nil then error("Cannot be run as a model script!") return 2 - elseif event == EVT_EXIT_BREAK then -- exit script - return 2 - elseif event == EVT_ENTER_BREAK then -- toggle editing/selecting current field - if fields[current][4] ~= nil then - edit = not edit - if edit == false then - updateField(fields[current]) - end - end - redrawPage() - elseif edit then - if event == EVT_PLUS_FIRST or event == EVT_PLUS_REPT then - addField(1) - elseif event == EVT_MINUS_FIRST or event == EVT_MINUS_REPT then - addField(-1) - end - redrawPage() - else - if event == EVT_MINUS_FIRST then - selectField(1) - elseif event == EVT_PLUS_FIRST then - selectField(-1) - end - redrawPage() + elseif event == EVT_PAGE_BREAK then + selectPage(1) + elseif event == EVT_PAGE_LONG then + selectPage(-1) end + + result = pages[page](event) refreshNext() - return 0 + + return result end return { init=init, run=run } diff --git a/radio/sdcard/taranis/S6R/back.bmp b/radio/sdcard/taranis/S6R/back.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3d83cbc5ff2bc84a16021807cd0443f39cf3dfa1 GIT binary patch literal 1144 zcmb7@zi-n(6vw~kq|gcp`Ao&aV(b)UbaS4VQpf28Qb94Sg$5TfP$_K_PgPqfD6k-e z1Vn(u1SlO5QbiUfnjr%-Qb7Cx1j+&`mBO?0(>NVC>G^#3x$nF8bnjUgy*PqVq;HZe zO{S7Dbb&;Za-wUrJs6yGXqpBg1Z>-e<2Z0#7o}1Ol}ZKGY8ACw4fT2*&1Ms=RtxQR z8=X$axBnjpmzDcRt6o|ZviW`dfj{N5e%wr)AICo}$=$4&NUcN;?9C2RW2*MoWBVB|G^XsEU|q1+Cp%W z%@P+w|NGNxX-s~wC_?701F=Gwe+AbdsgUkHh%L?c{Ez5A#+5v9ZhNZn25~pa-*W~? z`8nKtE8R&)`HPr*1F`(2sl8tl+x8fq;1(vzTPKS@rPA6M&ZG>E%Z15r1{EX4e?1)k zmYERdH zi5rM#GxKS-`@9_WZ!wZp=h!K2`2JnYHDL!VM@@Rgdp6`MQ*>cxeO->G<-0qdhmih$7k%WA Z+V!4(38CKN@KMh3c8=(|af1FH@D~ycN$3Co literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/delta.bmp b/radio/sdcard/taranis/S6R/delta.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1d43f69b3290204f00210263349e1eff502bcd04 GIT binary patch literal 1144 zcmaKpO=uHQ5XYb5&C^x_6(W&<)T;)ic(5YTqF6yCW^1j7qMKGMMbJd7D2*m;(Ylv@ z5Cs?G;hZ9BCaCI|v^yWPy=@i4E~%X~f`lO&0SLLny0GK4bG63A0R!vtkg^ZTY()T6Z?ANm?VQSBXE~n5dV?S?*{j^Ogs z-tK3vO0U}AXg89uKY~l*sN<@ua$xeqQlno_!am~uS%*kmJp4b;$=|U&y)MtFhOE4> zr%V`h;Q9uxDZ5w=275Mu%B?3(VV~WyW1eI+7+6pd3jl_&*Xgo=W<@|J_>$xp%KAB= z-(_>XN2GN$DNT|rOZPRD@Dq6b$mWO{fzNkn(&*Epfj4~F3QRhHrmDQaU**qG;e2hB z>UC)jTO3q*fO+I@F@UeNQRp`wpsbcGl;ZJFG;>xTFzu^WqgVK0-b-M(q z7hhPtPQ#WN3(spAmlbt(oaECOe~)d99-M}ySKAVi@y@eE8T$uib&((d literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/down.bmp b/radio/sdcard/taranis/S6R/down.bmp new file mode 100644 index 0000000000000000000000000000000000000000..97f9105ac5c1222e7eea179b0d412fa416b07671 GIT binary patch literal 1144 zcmb7?JxIeq6vy9H1;HhE5nP)~1;NGK1sq&T4O9ogq8%N&ba8XA4ld$SP!OR@M+cYA zbt+gK+=@;r9ZCoH?taG0S96!Pq7Pmk?|%RPyLXV>*3mThaVWk^BC{gXA`t{2B?_4f zQXCHhV+@p1;GBcwI8ZDWpom9U6@Wv|26bbUM)M^L*fzdg$QH9Db+Ai26QcNu^@<@GYq85{3T*uCA&5=ESWcDjFG*=xlUvM ztAeSP%B*wQeIo30X6(O=xM%jm0wV1nauQKd zEtrq}C%!+N9g2)p%u9m%i%A3cg2GiZXLPe4^X;UWX3k>jx(PEk^KBWsPx8H-n#T$i z&3!CjboC*LB>^+fN2xfu@h334aXS{f?zIrGMP+SOSu@T2qk5!vwSBe!QwQ(^fYqPC literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/forward.bmp b/radio/sdcard/taranis/S6R/forward.bmp new file mode 100644 index 0000000000000000000000000000000000000000..df769aef2dec6178a757f0bddd9017e1de3779b3 GIT binary patch literal 1144 zcmb7@PiqrF7{;I34Xyv6GaGt{m+nq_5HD`B0ig(P>e`%yKuj+lOwmM&mx44atzZwK zrWHgAfh2n9No)K9%2vNX`w4`I2Tva2QAEr7Zc@#pD&ot|&hGr?edgKsWoNJ4jiDb^ zx}Txp(lBW-41h+HadI$d`Bw-bAf<%kIPg3V#bObaN(H{}qh7D0)oP*B=^zLK?CmdxoX#8g!)MRG$uQ>+|lYFuG?LY4Lc85oV2#%>E{L{@o z)w5}u>AE<=50!!O1ryNbZn!G{T8MJB@^YjN#>ZZk^XHWOC0Z}yLGz)FxRvH2=8o#q zYiMW8%cSs;la!IBU1)3~Hxl%|gUYFg4!>+u;z- zbRIKqiu&z07p4?{Heef>Y}%yebE;ipr);Y{X~U2lx>h3pmpEq}ntDDl1IIs}9p8p; zX6gIa{gRq*Vk{_aZeCc-N0nt_vgnyACx4l(S1(RKeT=vyG3uYC>XX0K(%bEc#0Tc{ z6nNr!J+J1Q&>OraPVKFMI?MQE!D1>;@>s)t^ySzVm^4z6g-lA-mz-^^=}`gos^yaZ z=288KO~+?SOi(h{so<(URm3S|f|YAjpBy>Ru6iT-oNLeSrI#%_Iajd+bl)HGPoAHU z@L{lM79;xf{XZ$4PmheNJX#p?!P7)Ij3E=kkd90XX0K_)&-)wg-QD*+ Vg@)m4`o$^Q!JF>q5%A9!;0MPpL6ZOg literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/horz-r.bmp b/radio/sdcard/taranis/S6R/horz-r.bmp new file mode 100644 index 0000000000000000000000000000000000000000..93ffdb0fc51acc1dbeb78a52066a3a1f4e2cf7f5 GIT binary patch literal 1144 zcmaiyyNeT16vod)!NS6vyTw{8Z03dqaSL^BP^@;15o|cx9yRA|! z=vFE0vH&wXU>%o6dyxsUVvzH{$9>Ng%A2NREYJj1!k zS>X)8f)Y>Sq)jeofrucb1f>)-8VzVRo6u^tpxtgmr_+IMw+p>q5BmK+3QM#23XH6=s$+O_Ju$B3d*s$Nx5Y0jtgr+`&d zURtZO-v)oYB*!KHDJ-Z(!t>u57gfeAfUr9Evn=DnP$Ll1`FV<+U-xzq!Ms27L-X*i zw-a0lyx;Jww-c;+{)_$gV)OP&-5q-VGbr{}QSGUxMBk3|me+G;7AALmUtZN-y_)lje3(Q38OZnx3tbkOVd(C_!*`#uJP0fxgN#^W)x z)@J-aep51?rgiTZQaj%*kmpmG0}r>7?T_o9cCz)aX&AdAIMW|)=-IE8bp3(35bOzG z-mK`!NRK{Gl79OT4##9>SHo~T(t7P~%=bu5y*=Thr*%mG-ycVOPbEAjDK;MIv)d13 z6E;nAhWuPPf%&h(IE7714R9Omkry7W7KDe}8LWVUo|+ffm&*lN zY#i8n{yeIJ^-Q%GOgJAWu|{KT9dT>SJYMYF_*O+ujJ(C-GU5hPV3(Lv7Fy2yV)=!= z{dqlkAe^Q5*4;+jAXP7%xbC5`_0BY)$rL|jy|jJ!YHf8yA!F$%^2g=a;H3a)yi~p` z7u-CjTK}Ol)h#QxTiph7{C3k=&rCz54jaqeog&MZk1|*XtOu?+Pl_JOz*d%W_g4hY x%`%H~Z!h3T;QZXI;>u(W*80?(z_{2ul8Zpi>m3PBa9Qt2@a_KGlP^yK{{SoCim(6x literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/left.bmp b/radio/sdcard/taranis/S6R/left.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8cc811fd1ea6133c8ed563542cc7d476145762f8 GIT binary patch literal 1144 zcma*mze~eF6bJC{*^0l-B^4Z#Ml0e{Y_8BvsV8(1ry{xtTDleyS~u5j9VLVRK%jqs z6r3FUC)m-^E?QdzIbU0F@k1KqE63k%6&?YQeX-*^m3M_Ny|TB z+ctdPM-T+iTBBSpqgt(^(P*IAY$6OpL{WrJr-N>{i(apXe!mZ6%sBrYU;aruuK101 zlsbK6ORlAG=woV3!Kacmz=p;6P>&sO86W-OLoF&vDY44*4|U?jHP#jHsASLGC*Ebr za?QgEJ74DEiS{z@$QonEc>eg-0_P(o&-Pj-v&hX?at%Th7I@Dja_RLL-=zI*&GY>` z*_tTL@t(8>CeQiDh~P~x(<8;qWoCT literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/plane.bmp b/radio/sdcard/taranis/S6R/plane.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f5ad4bdd1a87e4dde22b65f766efab39a1e2a14e GIT binary patch literal 1144 zcmaKqO=uHQ5XYaTH&2NNbCe1aD&is3-b6|y5mCt@Jt$au$ZlBHaotN!y&%PejWYo8; z{mayi{ew17;=>%B8)1F1jo);864OWPta6vc(C?1|o4#LqA0A3wQEO8PBAaX7-qARU z#{EdFKkns;J`}K-RSW6pRjxe2aoVrkR%H2(P@y_Wyc$po^3yCpRCe+6Majpfab|(f z;wEtzQvnt^R~F_}(8@w9MmfK>gdj>3AgAiBw#fU4zX{T1Fe(9~*IX$>U`1}~ifpRt z#Gvs@+j#ZiCDX&PGWQ$93x|a+9t|W6!>k)V{WZ;hBfio*XZnBpnluA2pBM0x#7?my zJxA^vBlabo-eKg`$y~2-t#<1Tb%z1|Rm5U31Z~b+=b#pkFNvn9;bWq+vlA_E|NR6M z-EQacCO)$+Y^QBxy_^In+C%muOM{L?UUTvU`pE~-;4JpUcP1>Fk@YWTROsGJ4J>&~d4hU5Q4`2tyf uf#t_I$=2AC2UCFiuchm)sD3U_$bK$8`wu0%=AYe#B60?H=i_RfGxi5S(~T7X literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/right.bmp b/radio/sdcard/taranis/S6R/right.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5fd52d47572523d68df7861a10c3a1f28ebd30c3 GIT binary patch literal 1144 zcmajfKTE?v7zXg?(k|j~cWKqJZJNPN%Q?AJYZeD7D1~krq=8OuMqIjSaS@#CB(7N; z9g6q?Ecyj3{RGy*Do#DG28u)8c<|=W{qA`Q2bbF3Nfy83*j!glZJ8>XVu-;qH+wNI zGd&+tN;r-Kr4&5RL!;3^5CjOr5Z!JUyX;9z$zAtNEDL+7I)W zgojTdn0qlwka+4)lxzuWlUVSrMA5cOGE4Y}68mLG<|&^jA>EBiIYZ=)gXL-}&CO<( ztd#t0Pg6X{r0GECn}sj!u=nHz=KBJh`x_XM-r`#4@It%A9G7yle=U|rImHjS=DT=I z?r-wool7^>wYG6b=FgkMs|^FCNhb7FXBaH?>}+2fV`s$j>P;CH=#6KZEO7#6r1JsB=1wb2^+@K zceihSrTOUq7xsfVe$h9@f>+R9ygk}=jul9;7DIaYxkzKTSLU4dqm8U}rhwc|5(htM zE~S+J^88x+&CL_Q#r+W+cx8p=K0g0!c}c85Ss$hJ_NSaB!Kv$a=5*vfj^R*1{K)sU phd6hTf`g#13m{|gaqpqLuXA7~&3h>L%_eyd1>YW|cAmZn`~@N!+Gzj) literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/vert-r.bmp b/radio/sdcard/taranis/S6R/vert-r.bmp new file mode 100644 index 0000000000000000000000000000000000000000..763409ec4d18814b643b8cc9b48e2a093ec9b389 GIT binary patch literal 1144 zcmaizJ4*vW5XUDXSXg+QMhii2V?B|kEmH_5R%z7JO00~20P$L}kV|h9 zEVL4d_z5CL5QIn`f{!BJID40P#~LmJv%BnX=RdQrh2`CTaBYX$N%A@JaqP<3KmL@xfvcYtS@BskGEbya^Ga46%V+bW3*Sg_=5a?I>%xJl zRDVOU%(u?sR|B~{@=(1qe*OxgxX*G<;bkYxr7wN)yFZ~GDLiIt?|CaU#^nio; z|8enur~Um)JjxW}f%E+)J+dhMbgt>EhPiiS7wUezV_T<(=AKn3l=^i71U+;(r A;{X5v literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/vert.bmp b/radio/sdcard/taranis/S6R/vert.bmp new file mode 100644 index 0000000000000000000000000000000000000000..629803b7eec5d83d0470088b6c4cd2ca9299b8e1 GIT binary patch literal 1144 zcmaizPe>F|9LK-UwK_yJZz>W}oSj*rKUR~w9YmsKoh^c_Slqfwl1X(C53Y7fp<3;t znc&u?WD7B(5(;TOXi#8mb?MS!qYVNNv1(8!o!9Tp?$m6D`tAJo&AjjL_j&L4doz)i z-by&uL;pL;!{iz{Ls6)pLETt%n*ME^bLhH`U@!>FvJj8Q(b3U?L?VG?GKo|wg{i42 zWHK3KvsvVFITQ*72qC2Z-@a4G^0Ft+UWgs+d*@DMlv>g^yN|-22?Gk_M;|T8xy9`- z`#t$^Vc3|C6#fmKzvSDi>18Czjsh;_Z<~hgi~9%qKcIb zwq3{zv1h*!t5*prjg4}m8v#QV^IQm<_W$){Nj=i5IWe4DtpVHvk;7e}@p0RZp3a-_b*sb=L_@mMmY*v>q^{udP#e`P@d`M<-WueN zZu@JC`cO)iu7foPh_BO0ie-5M6S6qU?=ztrt?gK!mi#lPEz+H~%P3l(^JueQR!((F zenXL8Z0?8&HKLI=2{l+puLQ-F_U}-J6)??b`<}c;Q@ak1&U2wM9V|1ysU`9>O`Vl| zE26tPZBGmX2huf7!Pyb`VgbLz|E(XI+xtSjH;Ub7iOHH zQoQ^D6CYwVLYdUCB@&QT>Sg?H6PKo0nAXLyZiDipA?oiR>yip8%x%x0%l5=>tA_J_xGPZp@qSIN;g~$(az3z+YIKdZ zz<7n5Ok*2RNt5N~(NB34B5R7m*gB6Mc67#7T@Qw$iNQM$vpMIZD8+mn9~`Hz{dQ*d M?Wck#@87q;FYiGs_y7O^ literal 0 HcmV?d00001 diff --git a/radio/sdcard/taranis/S6R/vtail.bmp b/radio/sdcard/taranis/S6R/vtail.bmp new file mode 100644 index 0000000000000000000000000000000000000000..23af562e93d93efe756b5c8093eacb3af1112847 GIT binary patch literal 1144 zcmZXSUr19?9LG=5TTd4F7BsQ)r6(WE7fG8#?tNKH)*sjsgmPN$P}cXty(5Qrp6#P9c$Kp;SZ z!5|5T!z31qk$5~#(&;n-0JZ>hi2qVi8_s1WtuS3hc?&Bk@tTYVX zXKa_VB)_>z7k=A{~h!xWO@emAUF6%K6-=V*15dQ?*7uCqMA{O?$J~Q~=F8 zYNZ}_zbrK0H8bJ+=EVo*N$TOMPhCxzhPD3?_%%_=jF+Nn`DI-d-U3K30C>WDJsnZX zoV6*^2gCdj^Zzv0o!HC4m~t(c1FUgg+vc=!fJ^v&jNBj_AnTs!;K%ZIv)YJ6mK8X5 z{OqWT52-Tbjog(sXH!maz7J0e{z{DZzkSMIcQR0F?HM0QEYkLh3Qyi>m~QOz7z4g@ zC7<|as^4B9=L+NFYBH0|Xzosc(1q`_wgS;x@ZVATjRAm^M6ZVdZrk|ktL@<)qfzLfJYrAh?Pu12?6TsaBItz(H#r&-7 s@-r2_%(Kksh2$(tY(XDFYRGhoJ8I*Gcd5@ZKC4!?NA<_$!z2*$4?^~XmjD0& literal 0 HcmV?d00001