From 63efb48203536b99be48591aad6aa3b5ecaaa9c5 Mon Sep 17 00:00:00 2001 From: Tomas Mudrunka Date: Fri, 13 Mar 2020 23:48:26 +0100 Subject: [PATCH] sigrok decoder for caliper --- plugins/sigrok-decoders/caliper/__init__.py | 25 +++ plugins/sigrok-decoders/caliper/pd.py | 149 ++++++++++++++++++ .../caliper/tests/-123.45mm.sr | Bin 0 -> 2965 bytes plugins/sigrok-decoders/caliper/tests/-1mm.sr | Bin 0 -> 2897 bytes .../sigrok-decoders/caliper/tests/0.0005in.sr | Bin 0 -> 2901 bytes .../sigrok-decoders/caliper/tests/0.5555in.sr | Bin 0 -> 2820 bytes .../sigrok-decoders/caliper/tests/0.55mm.sr | Bin 0 -> 2801 bytes .../sigrok-decoders/caliper/tests/0.5in.sr | Bin 0 -> 2859 bytes .../sigrok-decoders/caliper/tests/0.5mm.sr | Bin 0 -> 2953 bytes plugins/sigrok-decoders/caliper/tests/0in.sr | Bin 0 -> 2966 bytes plugins/sigrok-decoders/caliper/tests/0mm.sr | Bin 0 -> 3007 bytes .../sigrok-decoders/caliper/tests/100mm.sr | Bin 0 -> 2979 bytes plugins/sigrok-decoders/caliper/tests/10mm.sr | Bin 0 -> 2897 bytes .../sigrok-decoders/caliper/tests/123.45mm.sr | Bin 0 -> 2900 bytes .../sigrok-decoders/caliper/tests/55.55mm.sr | Bin 0 -> 2885 bytes plugins/sigrok-decoders/caliper/tests/5in.sr | Bin 0 -> 2907 bytes 16 files changed, 174 insertions(+) create mode 100644 plugins/sigrok-decoders/caliper/__init__.py create mode 100644 plugins/sigrok-decoders/caliper/pd.py create mode 100644 plugins/sigrok-decoders/caliper/tests/-123.45mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/-1mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0.0005in.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0.5555in.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0.55mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0.5in.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0.5mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0in.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/0mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/100mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/10mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/123.45mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/55.55mm.sr create mode 100644 plugins/sigrok-decoders/caliper/tests/5in.sr diff --git a/plugins/sigrok-decoders/caliper/__init__.py b/plugins/sigrok-decoders/caliper/__init__.py new file mode 100644 index 0000000..65620f8 --- /dev/null +++ b/plugins/sigrok-decoders/caliper/__init__.py @@ -0,0 +1,25 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2020 Tomas Mudrunka +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, see . +## + +''' +This decodes digital output of cheap generic calipers (usualy made in china) +Decoder will show measured value in milimeters or inches. +''' + +from .pd import Decoder diff --git a/plugins/sigrok-decoders/caliper/pd.py b/plugins/sigrok-decoders/caliper/pd.py new file mode 100644 index 0000000..9a9ad73 --- /dev/null +++ b/plugins/sigrok-decoders/caliper/pd.py @@ -0,0 +1,149 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2020 Tomas Mudrunka +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to deal +## in the Software without restriction, including without limitation the rights +## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +## copies of the Software, and to permit persons to whom the Software is +## furnished to do so, subject to the following conditions: +## +## The above copyright notice and this permission notice shall be included in all +## copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +## SOFTWARE. + +import sigrokdecode as srd + +class Decoder(srd.Decoder): + api_version = 3 + id = 'caliper' + name = 'Caliper' + longname = 'Digital calipers' + desc = 'Protocol of cheap generic digital calipers' + license = 'mit' + inputs = ['logic'] + outputs = [] + channels = ( + {'id': 'clk', 'name': 'CLK', 'desc': 'Serial clock line'}, + {'id': 'data', 'name': 'DATA', 'desc': 'Serial data line'}, + ) + options = ( + {'id': 'timeout_ms', 'desc': 'Timeout packet after X ms, 0 to disable', 'default': 10}, + {'id': 'unit', 'desc': 'Convert units', 'default': 'keep', 'values': ('keep', 'mm', 'inch')}, + ) + tags = ['Analog/digital', 'IC', 'Sensor'] + annotations = ( + ('measurements', 'Measurements'), + ('warning', 'Warnings'), + ) + annotation_rows = ( + ('measurements', 'Measurements', (0,)), + ('warnings', 'Warnings', (1,)), + ) + + def reset_data(self): + self.bits = 0 + self.number = 0 + self.flags = 0 + + def metadata(self, key, value): + if key == srd.SRD_CONF_SAMPLERATE: + self.samplerate = value + + def __init__(self): + self.reset() + + def reset(self): + self.ss_cmd, self.es_cmd = 0, 0 + self.reset_data() + + def start(self): + self.out_ann = self.register(srd.OUTPUT_ANN) + + #Switch bit order of variable x, which is l bit long + def bitr(self,x,l): + return int(bin(x)[2:].zfill(l)[::-1], 2) + + def decode(self): + while True: + clk, data = self.wait([{0: 'r'},{'skip': round(self.samplerate/1000)}]) + #print([clk,data]) + + #Timeout after inactivity + if(self.options['timeout_ms'] > 0): + if self.samplenum > self.es_cmd + (self.samplerate/(1000/self.options['timeout_ms'])): + if self.bits > 0: + self.put(self.ss_cmd, self.samplenum, self.out_ann, [1, ['timeout with %s bits in buffer'%(self.bits),'timeout']]) + self.reset() + + #Do nothing if there was timeout without rising clock edge + if self.matched == (False, True): + continue + + #Store position of last activity + self.es_cmd = self.samplenum + + #Store position of first bit + if self.ss_cmd == 0: + self.ss_cmd = self.samplenum + + #Shift in measured number + if self.bits < 16: + self.number = (self.number << 1) | (data & 0b1) + self.bits+=1 + continue + + #Shift in flag bits + if self.bits < 24: + self.flags = (self.flags << 1) | (data & 0b1) + self.bits+=1 + if self.bits < 24: + continue + #Hooray! We got last bit of data + self.es_cmd = self.samplenum + + #Do actual decoding + + #print(format(self.flags, '08b')); + + negative = ((self.flags & 0b00001000) >> 3) + inch = (self.flags & 0b00000001) + + number = self.bitr(self.number, 16) + + #print(format(number, '016b')) + + if negative > 0: + number = -number + + inchmm = 25.4 #how many mms in inch + + if inch: + number = number/2000 + if self.options['unit'] == 'mm': + number *= inchmm + inch = 0 + else: + number = number/100 + if self.options['unit'] == 'inch': + number = round(number/inchmm,4) + inch = 1 + + units = "in" if inch else "mm" + + measurement = (str(number)+units) + #print(measurement) + + self.put(self.ss_cmd, self.es_cmd, self.out_ann, [0, [measurement, str(number)]]) + + #Prepare for next packet + self.reset() diff --git a/plugins/sigrok-decoders/caliper/tests/-123.45mm.sr b/plugins/sigrok-decoders/caliper/tests/-123.45mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..07734292f98bce5e4190af2a9ecac7cb4b704c4a GIT binary patch literal 2965 zcmbtW3s4f+8m3ICOu5w+%k?om>}6z@hNgl&@tNLM^O44qZ{wko_&~JX+GSR6Qfrbf zDVk{-nX8GZfcEkMiRk2`P&D&_3QDL+g5st2?%lmRvom)t|I9zpt@=R5!WbI#}E zp|fT^;B(aENzNEF_L!{F;Li!vBq2N=AC1Ev^3kmNJ76_n?Uz+7x6s@a&1{w?*J=_I zei;>px{QKkR;_=2@NX^(RmRell8tL__nQU>zdW|b?2&u}InsJ(G&zlPOk~bh{7`n} zW|q&+2x5H>ej}|)W|$A$V$OE|MvPc{YwD-Py}UB8rPRrnaqmDlt?u2%^_=YZQr?7U zjJ@p4@79wJf0e=(dBX=rn8SxWAk|DD?7#J0YwH;NunqulISvA71^^lt8666-f!ItB zoF`P&Zqn^kD+1dTJJPwj{dEERFym-I;JK-7TSlY~E1`EB3u4uDS`*m4!1WG%#!;SV z_g<_{CoT6@3H$tq+Iw=$%5GR|cKt&{N$d$r3jXA~k1OA$KU9mZbsb%>T3MxtlM1iX z^oC@>P1W$C;Y5$wrY+e)wk)-wYxu0|rKz@MT6Gc<%MzdHqLK+`7lJt)h8mCwr9HAQEOc*FU&CgsCOEHYUcTBcH-Q zO$no6(XdMY9mcts%GIji)h&rr`r^)qTo@+Z;8p1mRJ~czW+;Xsv6C6g{k=i;h3hE} zHx=LN2S~Sfminb)w5~NUD@RyrwtE~C>1|p*0i8oSJ;dcjwHV#!AZNnZ!bVR*_@vX@ zKxt=YWYYfRF!@U!tL}6IE=9D+g$kAVO=)pds+(d!h?nPE+P-~7PC@Tzp4rb;^`>&b z#Dt+ItQK)d$UFlonLQ_W*s4v1HQaBQ#orsKuf(ASV;3HxXNi*nI`b5FqGPlO=M?hY zRx1^LRQVWfI&9(C96Wl` zQq#s7kg4$Gu8j0k=|@DzhRp&=+mNsgnT`qBw+mw$_vvVx%SZ_L}E>s?}AK7t+m8RW|&Cq%r~yB4b`gT$CF&@XUFl#X5<%BlrTjB}R3E;4=wf zaFu8npOM{vH*;Jm*0n&Wf@HAe?dGbJ9 z%wW8leKRu+y5y%ssINVL&{e=4fu%$d2aBs69-9Ti{T8V9OTxpTbFbQ_1&zeRmj^?m z_;!Ac{R_$C@yyAR)csg*QhiUjB^9Pz=!Gg;#1$Ud#Ik1pqUumAd|h99Taaiw%v9SJ zz{S~i!j<-RG6!PtzE5|WpCMH7T@Nx1SL|!e4na=0TQnqGa8B5{lCij}>To3_FRY^b zoNBIWN8EX2Agl}|LeuL}6-erJ>l$TTbHUNx-C4*Qm;65T`ei0Q|j zdX_x*v}Z|aG+$nwJdSCgQUuyo+Q7`~G6;T#@7VJFAh)tQvC`N}IULduGR|;_eFC>8 zztZtiwhjG4d*`_yhGj%`J=;yWKu$XhhQ4uU&8#FXJP*Rzn6@%ha}$l%;#u(8RP#J? z{Uz*9#prHkH_3td#)HD1vZD-zG6@r*$RcfDVX%YAo9&Brwz#^a;6rLOo%7(LZM3w8 zazIE=x@Y}bC$7KpwI{s ze5o)7Ymq*K+hbti#+g%%{^G)7$_SPDOv{>u>AN3F<~SJ13mYxI-8)+8!=n49lQ69y@p23CDuum?E?|SG(JyM6O>r)&DBye z0EGZyvME+`iZk>auCuJ({%Y;VqHTS5l+>cDRUWNe(@Y?b-oiWZ(}?Wm*I6Ahz>% literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/-1mm.sr b/plugins/sigrok-decoders/caliper/tests/-1mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..448405237e3a18fc09fe1946232297001d9943fe GIT binary patch literal 2897 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 Kina0=*q;FmV)PRL literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/0.5555in.sr b/plugins/sigrok-decoders/caliper/tests/0.5555in.sr new file mode 100644 index 0000000000000000000000000000000000000000..067bfd4c2d1e988de177569b0406fa2207b3be2e GIT binary patch literal 2820 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 MrAP9_rH^F)18tVRNdN!< literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/0.5in.sr b/plugins/sigrok-decoders/caliper/tests/0.5in.sr new file mode 100644 index 0000000000000000000000000000000000000000..35b17cdfe6abbaaa37ce022cedaff5f1e4f11498 GIT binary patch literal 2859 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 Pp$t$46w5EVzmWYM6VfO< literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/0in.sr b/plugins/sigrok-decoders/caliper/tests/0in.sr new file mode 100644 index 0000000000000000000000000000000000000000..1b73895681c1ec20eb3ee6b2984765a6bc7da582 GIT binary patch literal 2966 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 literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/0mm.sr b/plugins/sigrok-decoders/caliper/tests/0mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..8f90f8704e7eff8f145f5e2d7d91a8508e0ea919 GIT binary patch literal 3007 zcmbtWdo&biA8u1rF0F2EJ7(p!vJ#S9no&Nfab1_Rt}BKR){HU3U@9G2lbNDIlu|@$ zCghUK2$fA@Tf<;(L@qO9hG7hIVaNA96=R7r!{U&!i>RFY*f6b6q@h`02Tb?w=-dDFIkceR`jFHDu~;$*o^mT}Oe zu!yjvFf(k;j?P10Its-(l8fc)TMDRO1qHo6{tbYzppqSBZV;WF(RQ4!+bYbeJaPl) zWe|yec?+&yT*FhltE8#h3i)B$W!p_w-l|DYgKzbtgV5rpG4&m7`LK$f8T#i| z>9G%FMb5ZRYAf9nOq-}5w{$hDtycp5KfhPpcoS{er5sP}+_YWB??OUUbhw#?nZ?{N zJC8*Pb;z{2WH&LD3g_#B7XG(Z;E@MYQ)-Gy4SLdM160#N0gdpQuo{zmH%0_II7c) zd`G&#jrhjs*@3FqoT*bG!VcBrG5JULm0N2v*E3bZ5KBUwYJ3S z0}UBoj#6h|n|9B`x=sCTe;|HClybyHD6e$SeRhHHl;urxn{R__pH{XuoMx{43L@A4ioPb~iV;mD?ps1aAVX(AL(DilLq! zgENn~r2Az=>+Xv5)e1YxgPnHK!lz<)R}eZEJOdq|oRfp?26W}D%SkDQoo6RlyGm39 z{Im)k9^3~ffYw}ZU6}UU(O}A6u=WNXc7_#&?DT2upBo7i4ncCSiUaz59#Hc$A!(>w zq$htAMz~<768wDpd(^t=XqE;3F0ElwTE06qOh@#LwdgT264uCvYRbvA7I!^0ES-sc zY9Kb2*vP=1`5P z&~)l*9sgtKwsir<$zXmEfWWZCnM??wvlwf?3kgqrl+$cApdYZHM=yjRqHquGYg-%{ zrSr%=N%IF&(p-&{+xEllee~kA7|5&Ff@isdC=!psp?{~8Fw|k{?U_N0EGu=-Dm_y~ z8E>3)I1*8juoe$eSCEr?``pzkAGWv;cw1Qvp%KG96)}cuXK60*9^sy!laYwWke2$V zPTvVDL~H8&6_83_+j25TjZ~+Xpq8=(q2M|)dJz-iE-pa#qsEnSXqll>+f8?z1ALR> z^w?x2nwchG)ddI!8rEl=B+g{3J8z=o)i4Zq-L8>v6hoVN#lAJ71;%Hj(a<@*5W!=6 zpYgUZB{Bb$YA3{fq5g0ry0bC3klvO8Zzzt95CsboTVSvo2A%Oi^MN4*>v8wv=JC>) zBPj#4QjUo=pA27`3g;cOITeQ{G9+vE$ei8~9B8Y&FI)i7L&T&rSG!IeCt^<|3M0jS zq|6(k{i3WG>P;nub!Ul>&Wn~;Re{R9VDIiy4A@I&22fl8bE{}nI$ZlRwgWOI& zB>E^^o~A$TfM~VQ^OfNPY1v5W{`LxO*Jwv+f~~PJbE?a~%KWXIdYCtI3A!7gQ35vG zEnumnCO-+CY(94>G&kMmWsr>qk{(2JqSmyR?B2?sH!AV!XZ9ju;+OiTi#1k-`o!(x z`SJIMQ1?BUpGuSbJaMBQ*Mt!)Gou&#yYa6e0w|yhzl&Iye~@r~5}jf9u3UsV#S@)W zk(08C%gMIq1UpQ`LD9QJOaPf;3N_VbU&RxE7BiwcXCBThj5 z(f$E9(G3wXpL=yjU+x9A1cqyc?u4UzT!6kGpqAriDAdfp&*a7D=rW-qDXdL+B%1pr zhU(I}-fJVTddH9e3q(wC(%S2sHzCh1;Z^POX4iI%_&s?}{WZ8g&T6VwYPmF;w1w3} z)4aeq^1<1=>rvU|usWl2sl zqL?NMZ+k|G;3%e1!c~dM+?|%77?|`0qfyxI?gqFPjwTz+`_RK(>SrDg8BX_CyG>Tx zbA3tGR-BL4wbf6&5H=d`AaCfpD?QipxWDkscFmp5$A;7C*oVeH+sBCet`LoL3>++o z*&ZA!o};Q3hm7TGrgR;%yzdoB!fpMOOA>;TPBTz_QzWO?J?FbA*&VwRSE%K@*MA5( zU%K7P^^475g}*n#zxOs=+Nl0(i~j@qdtdw~$VgWH?vnqC`m0<06SeU>{NY`_T(>H2 PY$?b_nQT^4-dOzxpe7=7 literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/100mm.sr b/plugins/sigrok-decoders/caliper/tests/100mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..3608de31d475c2a9634ce5ba952854805d049d36 GIT binary patch literal 2979 zcmbuB3sBN~7RN2GQd+rX`F`BC)O$%YAEc!~*|mqL*+VHcElpXHv_zAOqHe7^W!8qz z?3!6AVHu?{9p6Qm$Ld z%V9AWE?$VaV3Yn@>%*SE9FWLv$&-sWf0sL85*XNc@CVbE(;LzdwmXq&iS-BBW_6O( zXM6A6@!1(3Uz3gA{NS~4Qvtxhtj^>7*pYQvlX&Tmt^=fJd+;r5I9%`s41Txgd z&c^ObU;2d?9-B1Y%h7rZ8n5)5!C4I@ea&peE%#0qcocyY(?G%oe9sZc%L|%FNt`ZR;mQo{DN*k>nd2cl)Tmvizg`CurGUXiPrQ8`BE4xzm2GhT7K zN>SNg*m*_+4sH7fqRD)RZG%9kg8OANx6HK0bY@G}WKO5LAcC<7mSJXj{en5=qZg#9 z(X49dYU}*<4c`d2(wGPs;B7iU+9wTZ`are}wx8SBhC8&_l%lWdQ`6_-TAEYRr0&O+C9=7pArgu29le{`ctbqUO)b3D`ZplKx^LhI%A z2-&{fzMzU1K(x`bcAyUFUQO9lis4Em-*|rhw#}nEU-V6IyK-vn(2kPI5eN+WGYzii z|3wAD+=_u;D}Ab46m?9w=|0$7 zp_G^shAsi?$Z&youR?v%jahM@^K*8B7?QMD_$-@xoFmj&#fa`AlxL5Faq<+tbf!^Q+ZC|t8lR)fPh8EeFBf;@_-I5S4S>+ z@2;Gk97`!oy5V_Q-ocm=S);&t0OQ$8s{zFB`FnVJPUm>MdsG)3EcXGG1%P!|yY0b? zFk-08LZ$R`mJi)myfp8un`;ntv{4@I&qlJlZWLFzeb{xbEW=Qn1OE7qXhYb`6W4VS zGOPO9%m|dL>49M*=A2=DWS7>tzv7Ru$RPgbv@DnY7*uxSWW1v2OtE`zby&~9ru7q6 z$;SQPXF)r;Hl5 z36BNUG_rT_cDXqCEmB=7Z070L?~}J55~UPK7xthAqf?#2U-bk;$i$4^jCZb&dU_rX zTK!U*pDTOV`B?}OHxoFp$ZA4ZxJQ^~D^EgPn7)W5V+~fzo)=OZT+nChEI;FjjhM-= zsc-JRL z-ffNvq*@>wqKMei0V>H7K1?W~=e{lSc}SX`sBlk%RGQihJi`&m+fzvxWGAN}F!gv- z3!#l?FANlXbep0DTQ7)=$6Mp7!A@Ry3H^+?0I9JDQkN>K4fOYQx=3bDkGoV9x{k@KEXDVfkH)2aA`R-@e2jp{ZA7gPf~ywD^^M| zRLqgp?pL$_s4UqlnuMYa_I)Z+~X4kbff+} zmhJ(xz>q~MPEvNx&*c2#viA95)LeJ%)sgt0_Vp=C`y(*y4K&JlfwbxYnsw|5XjY!& z?uF?#!1;{_&9(@8bQhbZ99H@By$`9%S|lihlV^ajXi?x~I*mF_PkOHe(tK6q;Ty%Z z-oSmqZ`)k&1)PF#G6(qel(;O^4r@#`HUMGiUmjNk@Wf9WC&(V(Wqp=Ni1}A>wMAF# z0cE2n9B@{pR~k%I$qL4=s#L!A;bNUIM&$yvFvy-pxb}h>_J7F@K0|$AYt};5S2nx9 z>#P30T>Z!T{#&%N_x(d;xm5n{g#WDivm^aO)x1>x*Pr^pG`@Z_>T2q0kCz%#Ut#|R DwX7^D literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/10mm.sr b/plugins/sigrok-decoders/caliper/tests/10mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..096284559269e4068f0b8da9c3987050ad5d7f07 GIT binary patch literal 2897 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 Mt%vGH;a9W&0&E2aSpWb4 literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/123.45mm.sr b/plugins/sigrok-decoders/caliper/tests/123.45mm.sr new file mode 100644 index 0000000000000000000000000000000000000000..ea7bbb36fffa426300b40a9ea29583aac86bee4b GIT binary patch literal 2900 zcmbuBdsGrw9>-}cEyrxj9;O9tmZm0Zrc|g@HaeviyH;2UP9d4E*u+OlfNdo+KCrZ; zQt{*?v>MCujbJYyq=gP8ngW`sq$2W0L0xipcFxW@^T!VNoZr2_bMEhZ@8|r^x%YhG z{zi*U0bd98&iLWwtPfU;^!e8?(MJL%78ij%zXPtXS`GLHuymn{aS(kwS-(rs$5MU7 zVB$`PosK*0lwN82(&aCE)!H;&O6khQ)V>WNA+Pss+gKqrBZoV0i69f1`}n{{b!wT% z4GMhAS$zF1+{(O4iFtvEC9v_(52JodZ;oY8+rKGWyLH0z=))2)Ca-Q_r71Hf_Wm0Y zf4Fhh>+O5vi9ze+M*b04|4{Yd4u7Yo)h6Em%U2}Imp)zw0PNkr0-#?2(b(_^w3Dlo ztGFjUe&~C%#m{v(<9h1zzoBq1fEmGSQc(DeLdEC`eJKF&90BdVlV1zYhrF+bkLA61 zT*Ud=+{=(q+}<(qI1$)ux2pknYc(zeION2*j;6ZC%3iGKzybVv?}t!M_w3MXR!v@Cq2@r zg(!v;-#wErVok}sM-ztHp%4Gx)b8t+$C|;~%wsX?LyrCA5aAHxw&a)HEwdtOxQ~Jl-vb=gf-cnwX6Joh8 z!R~iH%L{efhqd%9%3W&Ws4+t9`r25Ef9U!2khrsnfwB!n4odcCN~zu&5jmmXTssGf z>8p>wnXFW`R)jG-CXr1phB8+{bFG1liUM^A5#^xS4ZVoIBWmmL0r>=wrbcLwhKoO| zw)euX(HPQlN61sRcx2ZS5`(o4@g}c97Lu49-3a!hpBJ|{oQmzZzhRdDs2khvcl>NZ zgbE}4)ULyy@BciH?yGmJQsC4vVC~fesn*rNE(2iDZYxlOH&jwLS9d`5;&NX50Uuu> zzHfkJ8<10(Q$o;*w?P)6*T@3qB13Nv4qNz#a>?y#<(T5iu;rP5C|XQ8tAEPXF^;VU z4!`202nMP(hw~deVmj){!IS31J({W?`Dj<@hs1LyV2+0NHy|;?#Ulv`#cHN56yxS^ zv!JA?Qc)Wn)H9`t2T_0^PDd7V3vFiTKuo%49XM87qAbn9!|moS5i&xryMe`lli8DL zk3m=GGvt|PB*I-IJQ8AD@BmMQ0Ov~Q#;xO2VIf|KmO?kN9J5zuj~p@yGqAxanHy}( zI4HzB#@Na2I==43#H@R9pidT4e3X4n0(2~Ii7woxO?&%Nu#Q8SY7v$96s(~oMFmc8 zY-Q8%IO$&nNQazOc5Th5&Tj=JcR7xv3>Qcea*w1ei?)K`oUmDL<6gABIE#5oRBaJ<$xcOKA&(`@C@GU6iq71A7u?eW zsP4QjQ>-A@+Ia?E(>YSL)2IEZElhEJtMD!%VNB!|g%->}0$3+k-QuoK;(+@(nJ)=;7fWl7EGaI0 zRm|(Nt~!pgw|=bAB0i)P^dcQ9_h}lK>-+cJkVh)UdK1U5rj;DR5~r6v8-H6jFq&(! z=br6O+0{9zo11~S&(Re75&C1tQ70-0aicR4O={y8%-$>NDsu!9xC2pk?R<~rHRr0y z!r=2@4_FfRGu)n2F$i}OF$;}p8@Zt5*L(uKB?oiHwc_Hmz%Nwi6r&RJm;{+mzjVfV zo+_FTQ=Ps(Td=kNTP__gfl$1OC}RVmHQ-jWoM*iGJ*09lMkZkEf@D^xO?PGA_FWk2 zVHTVKU7JtIdxr66BP2wL@>H3Y9Tk1q1RoSi*%egd^@2{Xct2L<^6KsG_%9R5h^^!w zl+?uNw5W~~P60dO{qmQ*YB|sQQn0Ne$RN^Uki2P*HfAR;^v-2Aohxz{=99Q~^SP@2;U4~sc~4U5S<_al%<711tasmS z#=4lhiR*k+h>gq#Wu%Qi&kmMpJxN`Jaq?LMDO0>QSabv;dGDYVuu0*5RqA>zi5KAr zM9N6FErL>CV}1LW7i7!#+f>%{IC73p(>poa@39o+11EQ)hJ@9g>Rrb-GoIb|n`f~e z^(J=LC--L2{`rBl$-IrYN_S+jqv*!8V11Ks+@wbMQ>0A&_oj7*{Te=jefq0){k`h<7VvpF9$eVfd{bt_#&G(x(-<$8}0^Pnt z4zL+FbEcgYn+Nu7lj6;kktQ0B3J<)7JmwKy@3;=K4|(@j4$;a~wP&o|DvFQ5bL-xz$TdAcmC~kI6Xf+1 zj5oVx#`Z^(S>HlNIW=R)poYX68JqvtXUi8l{QNZlaPqV=KzaZ|t|0*>U@8D|dX_OUO~`5C9h-5j0k zA@pLFWKwH{utCZIdA`1o$R%h&N;42}EK`fU?{BrQ>&bype0F>|aU6xFF)l>dmzER` z+}l4##8((U{Bb>_ReaIyrr13x704)0x8^$|A^ABQ$t)`!Oq-pU+NP6R+BUTOP~o$S zzXbLU_qFu4dIL2EyL)^kmj~nVsqxP2d$R=Z;y+iEpkAZ{v5Z-=vsn&a{H#^< zHJdFEUim4c{e^Nulm#I;f@gUsJ&8IbC_9L3RXtS?Q?%a@?{RIS-U)i3_6!qk@YH&@ zyb&XgD?fq>z`E@E5|y8EKp%#JgIE<4S(jAZyUze2?w+ftS&p4=?H(#>{N!afti#Wh zaio=TwANv7KMz0heX!8#w#{4_WXhyj-kvL8Z>HB&c@FiQE=tT9B@#IKl3?xH#fCZR zo7N_;xj0T8@mazY-kVzr@aMPp(CN>~fA9%Z$+F-vm5~F?jWatgn-Z>faM0u}Swe zvZBMYOvvxmL>b8m5172n@SwXW+iJ1F8E)}np8MmpEsK5G_iH=NDoY*Mjq9i>FLb9B zls{(?NXxL4HSKqF6}HBsfx5aJe@JnPCyo(Z6^d_T#DMR2!kC=pMaqesEYkH%>sa$? z5jp@bBU4kX??I- z%RrnZc>}TiHaOaXdXuNp0ZZ6!!L(7FQpRZD4-nbR+oNl5RzZqe6xut|*VazlA8F-h z4p|x>lsgQ0T=;}ZU?Pv_v8J1~CaO-D&Xp!pQXc>4s>U|@_ z1>mTjI&45qBt7kZLBT`SYp78FlyrEmS$a9kZ(mUfFY-~0ZN&)1fh+h?ZHrRhO{Vlp<;JiP;7wIoNd zJl1p#HWsBo@;s4i7C|l-5zR>3boE}Ct%n^LHaU%>$5!h#hcQ{Y|Hi|%DDoEG!V=^q zLVc`>JLO{qBrn(Nm9NEQm&fWNV&-ll^J(OmYX5lTWNpW4Vg$v;k|p%rm-=!}4Af+Z zZbwI?oI8jMGN~jB`b5SA%2bRiT?p>F=J8KhTF()3G4Hz5MxAj{2ou33;32Z^#~U_+ z9aPylTivX;7GBxD>pZZF=XXAqS-z61mln81cAgYU_yzGJ4I_pk9V{46e9M~D97LcS za4J>x98qHdJKUTkbRFO=y1DN~g4op!`r33wqu~P|a0xeR1`QuJ(7+-hbNqe)MK#pf zwLd@?(R{{QD8tXJHCICe!+DT?gvKrN)Xko3G+gt{~o&K-`Ck;kL_V_udwd=k>p_bjmk?l zE^rdb7HPh5m!FwTl~kK&D}y^n?I;R2gxUg9BWI4oQ9jSpvme7A^8N=Q6Cw%ws6OVP4=ym6)i_@% literal 0 HcmV?d00001 diff --git a/plugins/sigrok-decoders/caliper/tests/5in.sr b/plugins/sigrok-decoders/caliper/tests/5in.sr new file mode 100644 index 0000000000000000000000000000000000000000..20ffa0e0ceb0f4680ac719eb7efe22430064904e GIT binary patch literal 2907 zcmbuBYg7{07RO0bQ&T5zw~tzjZ$B^Y?+N zuGa#r#ZtkXmrnbT(Kmk4lqE@HfS6_=H>C&5}o7U&kcb+@<`shC6%7u-o;kFhLshGB-43kz-$}{JO zSw0q*(M`E=n~I1$-5)fzo3x(1@Y#Js&g>(x)!S#=_HbPMUpzfs_CWjj zkG}CQKWV8A$V7&&JW=vDb8lFWzUv>kX>&YcWPY~6gu{IxBRaH~KDHSm_41yQOV5poE z{9dLJCf7hqyuSyGv5XSe@8fPK-D(=Tm6X ztg_Us(LCQ&A@liWT!9FtvI%dw^6eWu_50FWNW2_lMd^Pq(^cY-4?Pgg8}}S)n;6mbZ>(93J=7+9(Pe zqJS-r1*d#Z%jPvG^~MVE+^6DMcgY^4+15ntms@GJ>c)KuPM^_d$wm-|#H#gLE{9GP zg8clzBR}!c2c;{)dI?1#@t77i9uhseRPkJVmzGV_Z?~=LuHPc+a${g@C!DzkbzzpY%m}Xl zcggN1?$K>mJ^BuPj-8gkscE1J`w_qFnr{UkRF%X9NZ~=Jj6V?$$(mmI!tZu+`-LXj zNub{Mvg75iO$$M1LLEyT)Y>moORe!U@7T7o^v$IZW;W#*5J%S%&Cml95+O;hHg?Uf zMPy*T6>TBqr4wbGdp3~5#DU2FB8&z#U;FZ*r|-P^neEKDwYjEDG+xLk-z;(KAr)w~ zIZmH?i{_sr9vNZoDOkAJo0T*5#9LPqKCCD-*QGO%k} zDIQp&%b`*4ZB@;_lVm^ZQ|ztEWbT4f@qIhYa`(>-0Lq6|nhuYx23Rh!Cwf{zi)v6^ z^;NFBy({rWvZnp1PINFLdw)ff?F}O;pLVg2>1pI>!uaLj|#_9!Op2z|a0XgS(H~oXSukxhF-qSGOl> z15x~B=v#WEOCS*Cc<40<6o(#0Z6esIwdLu#DJES*y$JD(urt6HD=>dXu@+-ES-R4kHeu(`M>JF znj=r(aGI^wWBxz3%Gc62FwkBzZ@(WAswkFYl5)L$Yxcom}e|> zGFzN_N`W~4pP(!gxvCFroeD(t?@j6-SJ&TK>;7X|e;56|XZ=%Tsc8Rjuzywk)k*%T ZdZTFn>nnX=YU*oSs)|*ts3pI_{u?fn?