From f45f4fe41367411dc6c1433f863692fc004a3d2c Mon Sep 17 00:00:00 2001 From: lwvmobile <59371473+lwvmobile@users.noreply.github.com> Date: Tue, 9 Aug 2022 18:10:13 -0400 Subject: [PATCH] NCurses Menu --NCurses Menu (no more tedious CLI options) --Save/Read Capture Bin (WIP!) --Read OP25 Capture Bin (WIP!) --Per Call WAV saving on DMR Stereo --Revampled Data Header and 1/2, 3/4 Data LRRP --Dump LRRP Data to text file, import into QGIS --Included QGIS Map File with layers set up --DMR CACH and Burst FEC --No more Port Audio or OSS...ever. --Switch to 8Khz/1Ch for most decode types due to crisper sound ---DMR Stereo remains at 24/2, will look into revampint upsampe for cleaner sound --- cmake/FindLibPortAudio.cmake | 90 +++ dsd-fme.png | Bin 72624 -> 216836 bytes dsd-fme2.png | Bin 181175 -> 157123 bytes include/dsd.h | 164 +++-- include/nxdn_const.h | 2 +- src/dmr_bs.c | 145 ++-- src/dmr_data.c | 114 ++- src/dmr_ms.c | 143 ++-- src/dmr_process_voice.c | 30 +- src/dmr_sync.c | 741 ++++++++++++------- src/dmr_voice.c | 4 +- src/dsd_audio.c | 156 ++-- src/dsd_dibit.c | 31 +- src/dsd_file.c | 179 +++-- src/dsd_frame.c | 24 + src/dsd_frame_sync.c | 66 ++ src/dsd_main.c | 440 ++++++----- src/dsd_mbe.c | 111 ++- src/dsd_ncurses.c | 1338 +++++++++++++++++++++++++++++++--- src/dsd_reset.c | 6 +- src/dsd_symbol.c | 87 ++- src/fec.c | 3 +- src/nxdn_data.c | 5 +- src/nxdn_lib.c | 736 +++++++++++++++++-- src/nxdn_voice.c | 9 +- src/p25_p2.c | 30 + src/p25p1_hdu.c | 16 +- src/p25p1_ldu1.c | 7 +- src/p25p1_ldu2.c | 54 +- src/rtl_sdr_fm.cpp | 24 +- 30 files changed, 3601 insertions(+), 1154 deletions(-) create mode 100644 cmake/FindLibPortAudio.cmake create mode 100644 src/p25_p2.c diff --git a/cmake/FindLibPortAudio.cmake b/cmake/FindLibPortAudio.cmake new file mode 100644 index 0000000..67c43e9 --- /dev/null +++ b/cmake/FindLibPortAudio.cmake @@ -0,0 +1,90 @@ +# - Try to find Portaudio +# Once done this will define +# +# PORTAUDIO_FOUND - system has Portaudio +# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory +# PORTAUDIO_LIBRARIES - Link these to use Portaudio +# PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio +# PORTAUDIO_VERSION - Portaudio version +# +# Copyright (c) 2006 Andreas Schneider +# +# Redistribution and use is allowed according to the terms of the New BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + # in cache already + set(PORTAUDIO_FOUND TRUE) +else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + if (NOT WIN32) + include(FindPkgConfig) + pkg_check_modules(PORTAUDIO2 portaudio-2.0) + endif (NOT WIN32) + + find_path (PORTAUDIO_INCLUDE_DIRS + NAMES + portaudio.h + PATHS + ${PORTAUDIO2_INCLUDEDIR} + /usr/include + /usr/local/include + /opt/local/include + /sw/include + ) + if (NOT PORTAUDIO_INCLUDE_DIRS) + set (PORTAUDIO_INCLUDE_DIRS + ${PORTAUDIO2_INCLUDE_DIRS} + ) + list (APPEND PORTAUDIO_INCLUDE_DIRS ${PORTAUDIO2_INCLUDEDIR}) + endif (NOT PORTAUDIO_INCLUDE_DIRS) + + find_library (PORTAUDIO_LIBRARIES + NAMES + portaudio + PATHS + ${PORTAUDIO2_LIBDIR} + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + if (NOT PORTAUDIO_LIBRARIES) + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES "${PORTAUDIO2_LIBDIR}/lib${PORTAUDIO2_LIBRARIES}.dylib") + else (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES + ${PORTAUDIO2_LIBRARIES} + ) + endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + endif (NOT PORTAUDIO_LIBRARIES) + + if (PORTAUDIO2_VERSION) + set(PORTAUDIO_VERSION + ${PORTAUDIO2_VERSION} + ) + else (PORTAUDIO2_VERSION) + set(PORTAUDIO_VERSION + 18 + ) + endif (PORTAUDIO2_VERSION) + + if (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + set(PORTAUDIO_FOUND TRUE) + endif (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + + if (PORTAUDIO_FOUND) + if (NOT Portaudio_FIND_QUIETLY) + message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}") + endif (NOT Portaudio_FIND_QUIETLY) + else (PORTAUDIO_FOUND) + if (Portaudio_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Portaudio") + endif (Portaudio_FIND_REQUIRED) + endif (PORTAUDIO_FOUND) + + # show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view + mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES) + +endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) diff --git a/dsd-fme.png b/dsd-fme.png index d45c8d47a59d5e3358552a94d28be5209a310a10..d76473af9cc8558179ca3d17cd99cffce22dacef 100644 GIT binary patch literal 216836 zcmV(rK<>YZP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+NHf|(&f0WW%*yD$RUVgKO9n|%xVTT{9230BW{y7 zU**e;uyFVI{4^2?Z0rpJ(6#^H|L42@$N%^rp|o^gDc4qdDL4P5p87NRL%Vn2~}SGS8xD|h9;%tzGoZ|C2J zRlk_Ry5D>9?;Cn}*sd?6u)+vm*yr~*yj)^>_VrZ$@I3Dm&ktLyPk-L%{w4nn-&5Jc z#m+wQJ=>n*^Y^uc^R@kcuk&q+x%FEb<@cmiTd=~hxfB*d-_cgME*;Up>Itx30A2DEQ_TT^g zZ|qw5vun@UDPLIs-Zg$&>t7!cgp=%^v0=}Z0y|#a0u1_b&+ZmddfYkp?CuXdXaX-!gXyjkQ{A`&&w1J=AwUPX>L%8m~Y-->_>7t4tjHVQ2cs&GuMAnI(J| z7BNc`W9K{TihQ84>iM3##Qwc;W@FCyuhtF|s8@YsTP)erM()p(fFW>utPlcUoB6@s z(M@h;&gC0hV$u1WI=S=jd{nvDb-pRBnidN_F|a+;z*s{cp(kvxRse2?UMqpCO0>AZ zh-?1q<(&`m3db%nLqo6dxb2Gj71lApCS+pe z{^rI=`^bJzoZrQ3zVWO#_r%_@`DOMrxw`Lp2|Q2B>xCA8E^)Ex!Nvc=%3pg@=xj{8 zk7HcpUZU&*T(Fcp!kBw>m;!GAuh#qZlJ<)$wl4y>p|KPRWWiW>yW{J->n1?L4;R-^ z^P|r#drO8#8)JKN?yXd4^&7rX_56Fc7=XI*vFZh*f)rh4jvm+-?iORLySx}N zTfTPeZ(}20RuY662ZP?cG6pio1XUlL8JEq84@wsw1J<$5y8@3Oi|=|^m=`jHg99TA zSB&2idtu3U#TbEt(V$gx>zE*KE*GAhRs>)YqM>zAu555G^|@FLd?NvRFR1_F68OUX zei>g{(f}YjV-r|gPFH!r4G=m#xqZ;RoiNP3GDtjdCbny2FyLe1#z%aJ6<-+MFh+@0 zbb>{?$GjrThNVX7df<1jnJoova909M_#!@&GKL}2-m?|12%}wuv$s?%F07V`v=ew+ zx4_QZYRh}2SLnw~*)c*Ci&DcT^z;|Ut6U}Fwqi6G*2}ki4Zr+g{tqS?amzCAJ|;d~ z-u>YjHy&147WO86TiVNd;d$5q#&E+Y0$wt@u*zby8;{rDGA@V%Yi{9P&mf2`p$TxQ z+Im@oP#+i8P{9U`Fdr~)SV|sODj!>t4n~KO2*h}AdDmpaz+V5lwPzEHr0E6E2?zACJgyH@k!Rmn?l*Ft znf2GYQv1r<0|Wz620p>|31Q9GyNrZwlp$!=0aCu<-902UEuxd_<0_Fe731ShzR1q3 z4qG5}1W3u9_UstyzUyX5ShH2I2CO0)GYv;i`sCCD(`9?X9s$-X=%3-;aQPS@GNggv zJMk1~2pg7Iv*!k62(WvN>y4};asBx~vl7{?`^9)!v1h!PK4$*h4d%uN3U)w8dIdc; zy0TFcMyT1o-lr?wfczio?}}f>Z_C)c64v@$Q51Z@5dH=eCxBrN1=H^O1tjIF_gb

J0Y}W`YevGCo5IfE-Dv;>i+8=USx5^YJv!*L7PJI< zoPYvW;t6w9z(EjV@1vm%{o7&faEMJ91*)L-7}ws|GWgj$Jk)&3O6>}}pI9GWNJ8laJ`x>MLFz%p-xX4qN8q|0+7|jp zU-8H5m*&Dkme%)#hAvsU8y>VUy!x`# zZ*CK5(gEm;(1m9OqCS7u19yXP0B!nSFX4ZEcXNpf%mcLk0${(;=)_QN7iRauk{TC( z72Y)T9e2?(2C!AA-f9s(5T^>BSkvzqYaQpUv>rimZ3 ztp%%S23?>Z9cnNDDu|QFs@gidsT=rVulRGhJABK4isWUrk)kHFFqIpp%&Z>hIF3J~ zFJCn5Dg`@WWqufU4?X?-tI5t-m1Z4M!qE6rzuDh_{FI zVt2&6Hr%L%dLq8`8wcbYpb6IpdO=1WEr`I0rxW-xbK$=e#>{<#z%V0%M^KP*$C!^g8z4F61%M*& zCwl|eOjRubh{KFjV2v<<0*l1=)mQ_y<()dP#lo+Y2uE;i{^g!v!9d9B`$&)0``Ja% z9`>I*I* zPVWtbehc2(c;CyXOm5?fN>GU6Qrdviuu)>s0Cv%~vRhci?Ay?>zPRziShC@QxB}LF z1Zrh^xXef3hq-di;oNnGQ?3db0XYzJcmgg2RabKlG!CA)-?c2 zXa>;v@VmZWSSQYeYhiy)Ii{BG>`9h~-R4^=J1nn-@gbc%a{Zlf`T4X&h(Vl!M*!PY zFi*(E4;T6DpD@o{FM1z$f)y^9yt#scdt5j@a)iKyWJwUf-pz|5qj8Kv;93>Ai!RvG zxDdg+tfxYG<;5j zVZumItzWr7a$+CBiscNq2C_}mJb7?MU?f6CPK!q^FcwRy{bemNL#(SNRP)h<@mjBm z^1%mG;0Th8z8~N_b^u`9=CR*zaP_?H^E3ka4ei`-1cWm&Bm|_^EPqlO1mp68W#|kD zVe@{8QAFHG9D=ofW>8Ax8!H+#p$Rjq!G;aZ>K^U8+^Dlp7=)RkZUDR^0E(stg3lMR z;2)%Eo)|YgzB%a@A%`Cs+wZH6NBn#PptPH=f8L5xrx;>w*Ft>w3^H*YCm* zQ^a9>Vng4a_9gEf%p>Gt+`3~nol$@w{Np9&C36u(iAU}Q7r0vf+%Xnr5~Tcm2n;vn zvi!?moFD(z3wuQev!jH9*l&y^d>2v1%n(t22h}Log;^4o`2W2+yb}oSMx~M;@QsUw zYoELOb8luSOFi4q-J!b@Rf@v5WlKm*rbi^@(Fg8&2!F#}X-#r(A!}YSbSH#!?!eSu!lUBb7 zHrOPz*)WU$`4NSX3CqD8KYZ)(2^2_L&@${ZBeozB+`IYqR|;C-y#O?4dQHRoi!v@Pmz#GzjMtuZ?y}<_hYr@-LV=pq-B*Vl}Ft-*6&e+#@6tssVrH z%eX*Hk&uZ4a7Cdu{r~=uItXI!b5Crxd9RYZ^!=B1FC%(%Tu&kL5YD+jz?47+@&Y;l z=t5Mpb%$fzXaittn$BOZj9?1{oHvUu#kcVpCF&)^FT7N^Sn;xaSJ3;9Nn$0MQ< zXa={J9V>*M(QwTm8DG!pd0|Oyp+s2-7=inYBYzi{odw>4uM@IySl|Pz?nrHf)yA;@ zu^Tr5@q=hD02Ecs=MaI2-GolUkt!#|NL1#kF*6ozdiF7i$hE=a2<_PQOYAA8;i7cw zZl*iCi<#dHBfTJb?D35cq8Q)zJ?c7wj$UL6?z(7PY{KLPw4;|q5)z~}YMa)3ii>5^_C{vN+Z$}(G zfJh}&gS_zH(I50W>;~L`weAeff`H<}xaMmr>GmM;Y3qVM;w4gl47EO4?g+Cf2R54t z`Apo$j~lo&l9??&`+=k1+%*fk^t<$4M6bk)`fXx@OQ~wPTjj!HH@;9|x3=kX^%Eci z!XW5i&Ai}g=*EKqmpYzUghFh003@KR3%!dGM(mh7f)nR=LYxWW9gS%qZWY;Ahz3YD zZXLQ@uEi~5pPfzKaCr=kOTizLR%bE^!LC(wP$mu{R{|PaCJ1IISzjSTlrteaPPepk zMeG6UoNY!l+z$${v{-vV_?p4!6XS>GB>wu-iRw9~L@xxhviM-v#Z!`sL?Yld+ z;DHcpFu^f=?ZH8(YS*)jP``ivmVf;coEXuOiLf^u!JqA$nD8|y5$dR>0NVi@P(=OS zrgfm6%S~lH1Gsh@&dldQ;80EPhqCDJV#zkP30@LI`vdbwOW!ZIVy>>tzrI#Nb-wto zuZ6|pH|Kb4@qynV9O}pqk)ez5_WFPP_J6$l`oDYoKi+-)-@W}G@4o(b-Y%`-k9#eE zY`p9OCSTRvGojm&vg5rFF+`fjWH$CmNPuD=UU;JoQSq>W^U=t)lP~!@iTZE9d*n0l zi+2rz=d^If)Dau}K|7!igagyO*aXT2#PHYzu?Z=B-+|RWk7Yv*R^ z4CD{W4qSgRMdH&7hwKDbE+Uu;?qhmZ6Fu-)s%l{FLFK(Ic|i66J_&kYpoO-)71aly zfBcTCd(K~Ggr>Z#oYcf*24v~I%?sU`8-|vcQ-J*LjEzAF&2r%6%} z@4;uY1P>0D6LJNj#Wxay;3scF;I5I|13JCn8hZWCCKez;nBRSEq6yTH|A2$p%uz+c zDE8A3&lPwD^KXRbvw2ZBoxt~T2NA-Hm?sKW7~y*@b1CxCWR9)E&AO#aE+qV-4z$10 z3mf_+?iI&G%rZ8C^&l3(7K6Kx3B{9lfk zQVA(5qkiC)PrBkGng%FSK%JMu;#lN!6HLCt=9)RReV=6MSBfXkEc>%DQH!vMlcu`I zMUafhi~tgggjEc`8D z4P&J{u`7rX>m&)=I}mqVXj8Fpr*9l?lyU@WWl_D(i~Gb{T1q$@;*Pa!@UH?j3J|&G zF{ol0=JR^yBq<$G%!Yqi6){sYx|MaI;9;`Xlw?$?yIQ2+ka8eDX#>xP3$vgoSt3eq z=mbK{-Se%w{|EsPT=W_jWb&(`;)u5iS_@Uj8ScQYt>=Lig~jFF&qw%0x2AfO)W*l8 z;AUslBCPdeCIkOu-BHarcKTJ}H5d-u18!{IU~nmT4ay=Dir<(}x5=|GE{%=3Fk8H$ zuo@V90-GAbG1qVSWyMoA@P~cF0^I_3?}cvg8SyXytrl*P)-}Z!G)m%cD#4g7#oVTc z$PZlD0t#yyCjJVdSYk0$?JIUTH8kZJsQr<-B1lg3ocs-i$O|E~0?E_{H<&S!jX))I zgei}za6PEZSYf<`-Z!V3Em4Wjg%b|qy&7}CXL#2t=(3YW{MZ|8>G70fydD?>gRD2P z1oO??sn+XLm5CW@;7JKyj09%#w~D@+p|lO!$(fa%s=Qa6-QJMY*; z7z6eG;5HyjqNZ84cjSjr3ppL+z#a_gFV#&jUNUX+8rQ3=i zC_Q?Vk2KEaU_rTCf%P3i!6o}DA=tlWbqZqaIz09rKz5iI{cLheV)$lmk?e;p`)Pa$9T% zj-29DRl_6B=PKkrAO*nqz(|BVh9VxZLy!ox3uwG>p6_8RZgZnBoF+^1WHJE#e7UB) zfpE{1cWcW+3Uu#7%!2L*Nkn~2j4dmo))Lv`Qjekt2oe1u#+qz

ym*#$>p2sE6f# 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 z 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

#M+#IfIJ8*klqt@4KN|VQc};G;rq5<* z@%FX8odq|xyFuDuN*$9bQhCA}@swwG0kw6Cu+B0suTHH5FUb>z8P`YUN5gwxt7TQa zdDs1hhalK0dn}*1Wy?49+8EiU9u$=eb|@fu9a)>{dA||y+s{2ykb1`)udmS6VKVQK zEHMkwR@kusseYrH_O^YInCpJF@c<)GL(N8**7aYT{&yeJsUsJJBz{31MaMXWGNfKK zA~N}x(Ylx?n?Ga*-b-sDSfrPP4V!e?yE0|FSo{Cyss(BGse)_0a}_SUwy@XQHM)&Q zppX?cjKY6O9X=CqGn@m&Ka>vq3ikhr^+Eif(nJ3@1@$?)$AQb6oyjoC7xj_l5K#X8 zSUyar$4ZIF_V$)GwdNnII5LN4?^@J{gcbk$F?osF$oSEfvz1p0nwXf#!~=oD>$8BI zK*{P2+pft``)|3=3MQ=)8$W>j{nppkEQ%og@cy510Fk-%=iUP75ZGMA5ZJ5#jK93M UJDB|SX<+~YPgg&ebxsLQ009x`xBvhE diff --git a/dsd-fme2.png b/dsd-fme2.png index 6ea3e53d1ca7872817c4af7ca8e055c7a22dd73d..85a88b933c1112495ea80696489946c412b9dbd9 100644 GIT binary patch literal 157123 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 literal 181175 zcmdqJ1#Bc;wyl|Fm)R~eQ<<5e%*@Pem$}T$TxMow<}x#tnVFfHnI`}4+xPYK+1Kf#6yjbPGicMxZ7Ws1yN%QQyfAej(jXqlS9!#6?PXGCmZL*R}d3O8VDH4eEqx* zTF>OY9b=x9KIj?Cx-{fE zSit;Ul86v0O7b7`NCz7whs2(m_C8GmlHPtZO1@ARvgT258U%5kemB_wtIg`ZN43eB zIaGCzrY$=)*iB>#%i1GVF`nv=9w>#NSuyMZNdFmXY>TY= zQjLxY0GJ&0EYj%en>ffwxQ8rKQIFf`qK&yCS~>uAn_CV_)e>ie2Ez7x(_a6W;rJvn z0)O?J{x1)c->zP9sr7xzjua!uPAS`2sbiX58m_UEB0ZQgt2i;Lq9!$FP9mY5t7J!4 zU^}MI^Y)s-en`%_i{QG`$}f{kUaT)(B4C*kl@sAD&CUg8uZCiH9-F_x^G_gM-^B)HM8BC^K2qt9qBfmZ$k08SCMNC)B7(l#!BEQwd{L03Ptq-Hkqbx zv*yJCkJP}G&rNWiQkk+Ck+c8+IO0Vc_qc<)HEH=A<%=)QI&ed;?A?DR_q^k7wN80D$%eQ`aZiMAOCgCW2Rgyze%_ulM4a2eH%vmTr`Fuypi|2nzjj zT)5}?)LB$8VK%S^$d_dhU(bb6i2@Z#Gc+VHCY~+^M|A@FoUM63c3Z>r zVf^=OyIoi8CmfS)3S(OO#YX~rJ5gRA!F9At${v)?-S^~8eg+l-OH=>C8eu~az(w1@ z=^{}?Q8oRQ>7+|4&!&i&T=paVk0bk)MF+p2qT>hQ);$;$zUAT+4OizfE&!mrLyf0o z+ZL=f!Q~GP(eO=+Jay%r zk`{2b#=Y#u*!0D$F9qDUIhVR^x`v2$U)y0)jZKTMM!}HJ+c#&hsu3f*K{r-{9*7w$ zIX~;+(E&MZkD@9vhG#fsLn}cVhkU{GqznN(OzIIF`&5lM-7;R#rgh2)CmH&af?X)PcuL=fO`<)q49G8(O4Sq<{qXTQs!tyM9NI$4Lhtp{%IP zkDObKO`HbQmX&b?&Pd0ipkFlYV-+4mg*#g=8_eQ`I@(`Fb0Gm@Hd>)aUgPUBAE1ho z7iLrHSJuSoO_iqO`dZmeCx3O)l;<;~jwf<5s(E9R=`u2nmP5z1?vE8B1Ss!083$&# zo|)OkC!WgfLQpd6@%dQpY%xHC*&5-V+fp98fnzb+^6u>^8Gw<14b#oRcZ)vYgA50; zqLRfczA~Pseje0XHNaq%q>S^Sq^K&2<+7?A{Lx-FF#SWIZ=0RitQoy2Y1MwC*Nf#LJ08h*AW?SXaFZjJ3_*}x0Ns~xni(sly37{# z-U9{rhMmh%L#jgJc3kPkR5zB$ZTPrvAAaI_&-o@#1J;8p(t`9cNm8-S_;3AkD4Jrx z00v|D)vQ;W9&8XlgaT-w!pibu+_SxZrHQ^r{uqmyF+_(l>U8gO95Ct%p5Jk{c4O=V zho`l|Be@;6oX}l2NjPxgjT-g zv=6fAU71slSB0vEevy+fv;WXPTBfX{*6X@LgU%YtYgV$%;(2@(A!fU`+^(nV&gXoe z%XGlM(tAE$PIMsS_c;Urpsl#GJYKGSP|=<;-z)hxKD_Za9oypSFvU50{9Gh1UL1z9 zWLt}yy5lXcXpmTXzO-LnNfLTGUj?}$8AKS22@AJu(;CUo37K+2kvO*d1Jzq@*_2mU zO4TP%ok|B_>T^DZK1Vup*+$;)Fy(+hGzMpP{uQ7q@Z$$E6ac_rvRiq7G`Y+4gPO8= zyUVp&tg2OSOsGb0J_ZyJQ&|KkvC@;Do*}DeVVOdTSpLQ5d>6{=$Z|u{f;>%Z5$Zik z+x2_NVlPCc$@0g~BB@Xfxc2*2CnKr=&-`>!UEmGQsFu1aNn1}N#nXHtnHd)2onDF| zQecHkIAS9#N0O>MNS1CAj{DF=<|jFnV6*X}w$B|UzQgy%W{%_5S44E|N}|}-!A>Gn zs72$qx@g$9GgamM`@OP zTvk`DXg5y=TZu;LkL$a5Maaa(?K+S%${G@WcX0RM)JP>PWCyqEVy^}W2qqeGyW%yj z*?~1w*w`H*1F8<+tIpE33G8X>%U+oVp%w`A%Qj+;Jm@H>ct4KwyXbLwpJRL`O7Ix^ z*l;yBs11`xAIi5SO0S7{tE6Px**D$Ig1*23^gX@f6JlbX+MAKL7Y@kCN&lw(x%$x7 z4*b>rp;IS&KPN{gK&kGS?GR}^1(HHEg+q=M6m$2yL*;RB_o_tLaR3E{j?kh6Y2hF; zqPXdPhsAFs#cfU~1uHSK+UVg z_#<6MwMvs~()(u4EuG%@@%?zD4yp@IRhei{S=e<+OP%u*Jv`H4=lZo>JUX=33STnA zN59{7F;R#S02s1uybb&{=vO;l>8E8stIKlrN+(!FPEzAe&k79y)bx=@DOE>#$I#p~ zp#DfwBa5lBwb$B zk<0el0j+Hea#ZCjv9Tuh^2Ru*A~-mxXKcn%p#aH<6KjgkN%WrfvC1~iUG~F=MYbYC z5SbwmgBiC!>%F?t&WJo$FHBO?gLmtYrTfh*$h9Dey^FB+Y{WI}^BSrwF^d8t`8X5w z*C_}N0EjE?b*6s*THXOvK=`8+a(w%m<9=Xbq9>GC2?_&qZ=QszY?PNi;4%AxqlD^Y z7^eqIPorfAR0z{Gu$ zZiN-i^!-adMGH!6HI}NNK{eaJDoQKAh&L2em2>cl3mq-k<%>pQv${W|F4oT(J>-i4 zS1e}yT(QEK3T79D;Y+JZEE)uV>k5GyWri8#NQ+D{!(!V@#Xf>wk(7XSTU+_}M!rtWm>c=wfmP)1y&)TBti4IpPHl|6=j z|7s}+l%Xb(hB9(&c2z`;4zpllU=}vIP_485R1YS{7_LAV!X%P3Oh#InX3pZE{0s8; z$kMFh%&rV>`!0m)yu3XBL4LphiZb+5braeKGHZ}dh8nmGhwHKFnhs($h9dwlVc!fv zK}(Z(#w`hksNK@@CF~mZEypu|8rEJ4xdWuAqdwHzZg|7T=JNR6XEQ6d<06uYr9c9cP%?%0RR?*!W*_(w+ql?Szj2=JW!)C;K6q4q zSn%B%ct!DbO zOB-piZ>c$JZ~eS#NCPe>s?^B1`Fl&9=hZ&V{qXYHu7Kh;ac4@bD3vEGlX>?FzCp6xgy9V>s(;qXKpQNFj7X4+h zpmzDZ=7ppDijGST%QBRp*4<$^(`qKF?%b2yX~eCL!UE4!j>Wp z#8i>Q+{&84GIPsP1I85#bwIh<@$qqObA$;>5ClNqRQH)==Dh44`?0d(u4n@x{ky6W ze&xgH*HN19`j$gl+0$}5P#l}+T@Ny{W8deBEA@=7In8dBhWqNi7Ys(!uHl`q=dw`I zHdXis9>HhV8N3n;4t$KZ*ZIUu{DuXI+G}1E$v#!b1|z3k-(zc_Gh3$J_;Tpn&Fv;; zqbescLG>m-?R(7pF}U9LOBpKse2Sf6=hqLq^u7GVRTSJh?siZ{Jv z|Es1nvdXw^cg=JLIrn5?s4!7SJ4`PvpG~ow?hPdXpva1M$s(qfUp;?^hNC7InCH^0 zJ)~B^_J%*C&cmE|7th3fbF|f<<9Q|rG`t5uM1ut1cbC57)$x3S``Q^namOsK^ z-ti9p?(WV#nnl5H{xuq(FYTqUtgP&p^dUet_tJ)a9p61zn=}L3Q*0XN^R_mCB&>R@ zmBd~hI3s*+hrU_bugl+2bm!64%T9WJ;{41i0+xF&IsDZD&M|krtL>)R+NmFr{9E{BrpJk+&@i4%?<^ICVOY9 zGM0Dz}z1rb8U!@kl1x-ou2m#Hp{qV1Pu^|nAOeGw=`!B9ssM^;wBG+nO#|W8d+% zr!tMfl-d8YY%H>?!N=LhyolCZACmTY*L$XIMv^JAKW`45ugk~qdW-D=u@^PlknMEb zfO^_f$o-TUGa|&v-9Lh#t4ay}k4m@yLId@-ca8(sLFXzPXRyem^#S;|=60tV%69q*-HVO%A+ z>N`QE((>4k>0yGe4_~U?Evg5dQLq-<8fH(0tClbbz0q8zPq7Qy{|VIElD zNcR4z=K7NR%G(&EjB7`iuBEjR6SD9P_0(k7TT^pun@h1@X)}ES^Qfp;Ip?oVPah{5Ukn0>Md_iM(7a}>H)!9&$QTknVQQ8ylvTAB z19*@-PX$a8R$WL56y)VQITb6oC}2R2QzB1_WpKN8*Qky@;<&S0KXcedd|+j-@Ar3m z=LrD-wYhtJ#Gp&}m~5T>c7^<$oE%3WAXPxmXz);9a_5mWn5!jt6m>kmwoAAK6?HOD zZP@F}g6$|HESJ0?0OZm+1eVxyt`d z?i3|y{(sku5OAjxd{_fp*iTygxl6TxEcPS%^Uueow(gMl;;k+pH|_A@I)rTB`Nfo$ zL3~yp8ko;r0ZDMcG=G5rSqK4e?e;Faq(g<3No7%M~56m9gLmlmR0)Z zzVXI{N2CzpEs|T|)rGj3#6neYJC9%b4MV8Nz@b-GaqK@>YrQYn_Y7zmrj7`Y3V9vf zFy~hD#vRe1H+%@0By7@Y1!)^RhzELW{S%+fO@{q1_-s-L6g)aTLtRS|DbF9v#6%M{ z)u50j?0y?#;{gx#^uL6tgO;hHl~q zv$I~Lx85|rsbcx9Azc;Ta^ZRT_n2Q{=dGP$?~t#&xc29l0>M0yWRGfurnL1QZDBs^ z@^7a}VajoPqZgvX-(9GY20Z<0i#PQ*kw$NmUn*(Tx%A zV5(hCB@>7{qQ@&LCE&YTkK3XFP~*gz`Wj&e%vLsh>zSAWM9Qfp@7CD_#E_V+{nd!- z&dyN%zWct?d=~rPUnkZ1`Jclgo9a=Qy0tphBrq;j4pqW0GwYNm6Vnw3iBkFC+%Gz7 z33X0v9b_zY(#_;+X6vYZjIe@wC#g>#sPd=?`PAiPBpJ6G zOr~k4YhCDxUUwcB>e|Z(WuMv=vwlCldmDN6hN4Gj-5NKs;oG_o5y!9Hf}Dh>6Q28K zKMLy7yh(j1;Z(3c3k#uxCDaN_#|N)IhwHsP)Ix*OGc{&0V@8`&#Bc6Fw{{|r*i;VT zDg?V)n9k!rYl@$C?0A9(54`sGS{H2Euhu+C4X&9Bio)<6LG)3We&-5yv) z%P&(zy3Sgke(ZIiqI1JD*eRaVre{f@&1R;vXHbB}F1`jtrpTqQ~_54usp zuADsRfbGhPCyC&EFUN0s&IIeKy8ja*+hyew%rck!zTr}YPfgN(aBNB^i(|uu8=OlW zM`^9ZTK)y#+dqwVCZi)vezO*dImWiUA4U&bem#C@5xJ1s)sc-|IY%GRH=6X;w2ttz zar=yS7J89Dkuop(zXr2bPKtDL#0?m#2>%{1uZ-bh&Niq`a?idUT)Hdg>#Gp$9pw+s zZoXzX!N2w-^HDqT*<0qXr$%WZw_E1x@nV!4uy{Tkbnqf44V4^YNRl#F3tLeH2A&EG zP3_lLAA-Wl%$|oj4x^EJ|CVE{yE;>L0>WmGYIpg*Z6?J>IK`nPDs~eImcz}mJhF4# zk|h+hfWamc5au!FcoBGAvZ-OaMxUhVou)Jj^h6E|I=@KT=VGh9g9cO3Q-u{<(!doU^G{M)fS%gTMMk%`-C(XQbSmaYotQ7*&xJy-u=& zD$=?zEIRzl?`gW&_9h%ta-sBQVLQm6bq#;H zb(%~QR8K?Zgj?kEka`gP69pz4#DontA0WVoEK~sTt;dbVO_!0BvB6}W)vf3xTn}O& z!49Jv-?71i{uc^7lJ>6@*n<8)DDby?UXkvyvK=HzW)VsC=FKG2gfwotl}h7a85h!- z;U2ydegHqPnxMFpn{ZwsNYT}lGn%n*AnC}E5s^YTU8&&1dHG!t)%$}@4M=C7%~M?a zhiIya`A?FVleyp&V;A+1?00JOdt_9r_#!b1#ysEODnkSM2;sUT?dtmq3l5Qg{ONv< ziI)q4kANd>lV=CuEPH^HVl2p~NK2j%R+xUI4>o2R8|N6ZeTwUAO5g=8D5rjPa0<>u z_WAAqTG5_)n=1TnZ-p*ke9gzQ@d5wdW8Wja?gvCnp7}RyXeNpB5ZAU;yehVKD}QwL za=rF_)zS@vEkmj!p9ziZeho%{Oz%zI_blS8XLZf_oO`m;_A}FP(-cVExeoEo**k_x z`jGE#T5G)U)xT{<=~^&B3R7o}G8Ysc)X&bHMiuJS^bZHT9F*2%g3G(JYRxhCV z?3Rh+cVb>`{#2q-HS$$rs$<#S^?LkTawruSFF*)F6C3@2;_h8-1F?Z1Dm8b(Pq3JL zGKhP^mBT!~@G%rjeQXs9m0?QLM6cg_HBd1LPmX$*%qz@XiD8~?fXJOaf=(ZfspqBE z!#O9iq=oEZ5Vhwpgi1pM7ikH?1wb1;xK{do>i#|+uTr~60;|oDT%M5F6^g481TIRbsRA`N}wtQC(j8a)sebot}5?D%uU%qQvLAy%uz%bQ-zRwt>lGc zlu0cA7pXo3l4^i?}hZ%f36}P&Ds6%;9~Igzw^a}(ZCBQd>=raN#MX<^qLawa=cVBxOrv6n zE;4p7I?C&_1C)vJi)oIp3pmy>GRhy*zzTN z|G3HURJ%%*){(FCg~5$!`9m7eLI1WRVzPWNlkf`5rLtTGMfNO%A}>z6Uv# zf&c}~Z7%CG&ADEq7%gPCc0>~Li|%!yMc3kVtFJ6$FMJy`4WIPHth-)tzdN+UI&UJ2 zNf5__rG{Mi+59c{*iBWV+|1~(Yt-0M3xV+$iPTdxAuEoY&m=M@xmC33)x#J!_^q)g zw%0qVmXfr)LR0vZv!&34^dQtgX_=*2jRD%b0c?~t?(KedVQud>_#;QF`T!bM2!1Pw zy09d++`?SHU;1NgZ?*Yyca8b61jSWC^&y&hoA#sCG>wuoRg0|Y6(Jq@=fKSxnQoW!+)L#FHC%e3=LzbH}PD&p&YoR@4; z_y59gI!il^E^_gV9z?g1>TuXNji#1^p?r%GUpLx};q%u?PTk4irfchY8G$rghvpes*0 z$FBYEp;F4&Nnf&H!}34?-LqnGdPAVhKl^g`JBZh`8=;hm0KRj3-`k(lg@RQxvYqak zldqp;W=sK(IMX4vmJab>Q3@s(&mWiQ4$_k`fG6A5Nz1}rU*%tF1oyBOfG8^o-R-O%(r-=lBvDYXA8%s*P=@ZmUn+U(Yq)S+n-NnPo#bDo+ z{S?hu%f@{HvE_@c#x24wXXb+#lH=W8AW$^r}g^yKh zv3~m{!h$W$&Oa}>MpLUubKjID(%B$};>5!O6G1BS%fZC&4Iy30Qic6!?n4B>$y@d2 zo_dHe;?s59skRUaPL9%nFb8Yu_bkdQt(3yMG2;Pi$%y3%jvLvHrpVLUHY5O z*#;tle)s}_ZHqRbkKt$Y(__HGrR*i_TdxQbxIdw~=MUSVZ^}U^c6HPc`hll#-}1y)Y<#Gj z1_a;+)3%t?V?SAi#+(jAS4^;D83oJX7VF}@6Kd>PQUY(k(u6vTwp8grlR$EE#ezep z@~1)FGVR_flg}!64<_7}J%l;GZzdYvDvR5)-!n;g7VqmH2tzB_;|g#2%{AedH@Yz$ zzOiw0BU|<|c~FjT(bnVw)bDwpE4-tEbznT`#4FOcVFi3qsA>C4LEGCc95}1Bd58WU z*qfd0|7;F$mW?%utqaa$=61P_qbFdLx=WOHmmsiN>eVWLr#W=E4WFSqJ-C@w!O6*s zX4vR5-|pIP+%v5U1O*u7T9-y;Hv3%3d{kEizkF2X2lpSJ3IPCt(>H|?3c6GuY6BKO zfTP79004pRjnc|z-x6AXCuO_*VgnQN+1Tdi1P^a}c2edpp+LTjY86WxyMjoKqhWw7 zklzD2iqI^02?KrWvu-h8+w;v=OG_o7bas<`?!FJexc?hU^OIG#3}+)@e7h`V92p&yYkk8e)&_S8#0Dh0f)ugBH>JD1PqHt zyDKEc`)=Vi>OI0wH7ivac;u#Yd#aa~704f#Agn@-fkxvm7rBeBU9bBaH*LjC-48t+ zwdnS<)KW8;zxxw4u!9&GtuBXu){U@)8p#=eHFv7rt@Fmhyybw~ds;5fs2efm9JRpQ zRuBs-8*D$0zwg2XsHKG^s3L9YDOD8W3{tDpTDdNRuY2{Cj~Nb|hZHoH00;a&)0~-j zadjxRqK?9R*;L(M4uzoFYLY7fg}&4sVgaM!Wv>zzwk-MOSzwsnUO3*!CEL<-vNvXY z+wqjbV@$^8NH0ABk1G|2n)G5aLP2Ta7e>ChCN|J5pevz`Mr)-4C@AUS3AEAD{f8-m z@3@91V!=0k5wtpF4XJKL4DOpyQBu;AQy4^?CrLE^lM1xdq8m_OC#>?FM$qDTN->w& zO;sTXBzbnN)m@-Orn0M{$6WskS9I@EZ{{S30N_hFX94c(%;vSEi~u`uA~WSuzx|z? zziba64x10ze6I}P=eB9X!^KC`)C6x$MUs_Kp`AK43IXGPflR{Yd*mqz`8001w`PrpJM9M}@9BxPRa2Wia~_Gg@1(@~dxA^QzWejGSfgA^18Ww0wIgtl6q1ZEwQ*EKr`cZ3Og6XS>(UrQ;P=1>cVPq#SdknkD5PfN2_*Il~`!``R}%n8|Tzqr2;r^nS)b<&NQ{XCi$1-&{S z31@eK59wsM?<<9%+puZ%j&A9*r9LJooyys!Qe0GGfx+l8a1Z?{&7Y!__X@QcG>AD%a9uj761{Edr{#orrv7=bZG zs`Mf2Yr^l?tZTU|F-)_eLi9tFB91Z<5Kv)lIc$5gu}>V|YHJHmgeeY=VkwwF0m2zA z?tTKgf^mNo)G{`<6aqpL)g1MrGGD2}mpumBuWy>X z3zM2oec=x?I9M_o;Q9MyVv)-Ks@* zjW!I*)WmQ>g#@th%1wZN%{YV!hF>teSROZX`iP$C7*VPZGwdZ2lu_UIfy?|qz1p-gH zcf!7j^?t_+wv`D-Lo@ZrM&DCj6>&OmE(M$$bLzJmixo`^^@v7n^lmCmcXxLhy8KjO z0}#Mcs@g}0W1B_CfEP7&M`=?ZS@e90So!T1QeGejm5%0-vrk{kF#u%Wu!*3W+g@y%EUB-dg6?i;fm+@hvbXJfN&rBC1=ogoRF$Y+`7t$HRTi|!rEN=0wYXJ? zAItambKAhtduAw4qsIcrYGX{k_n}QX+G)GgLMJ%?(DlY|UZvG~7++ASE7GDm{j#!j zFJsB5YTQ4kcg2*tlvPybV~%mVDevCTi&lj$W5NT!`dw1E@A~jM+X`PNYPh(ve*$ma z{3p7+^#0$SpU+B~6Lg~&7mJN~y(hW|%GU8$X+6_#1phDo&Lk(=q|lBOY2mF}VER|} zOx_jOeymvmMwuWL?F{tJE-d!z=oL`5EpMXW0gFrZMHl!gx_2OU;P{=Tf(MXzxAbV1G`mNSOJR_by_@sKQ3QD=O^GT+1**_t6J^o zM8YI>rMoM9yHB|Rd|NL^rpP}%M~KPS=M^wW0g1%TE%5xXwVU9-w!$Jt$_2{cH&SDpAbc9;w3H)=X%SN6?cU6HLWi zHZqZ)OeI%HyL=QSDZv8-^2OL+-d(>-C@wT6iiZU!f|tU5_x9Gx80=$!&*rYiaU!p9 z+APUF^XB?}t{_;z<@!0Dy_xa&(4JaD-U8;2bYaP}5R&$s_x|e?dv8JXl^L&qO}}?c zV+9vlj-~E(*~qxMY4BZfbuNFVVHzI=XvAz3(*>?N4r-WD`G>G+y~l;0n$x)J7_8~> zMgOd806nH}z4y!bEY9D{96bL6N7z9SAOWoLM8(VIKnn)p%;nzt*{SO4lSX#xr%pz7 ze|^}Tr!1_a`X`?5lUIjz#vId_C>dM7Rle7~QX4)2k;quiH=i{*cQs9kqFVKYm7T*! zIU4-6fe(R{9i=go4$hz7(rmvmq3Gpqo2oUv0?I z<`uCL()_`FT!MM6lpW@CsVBt_mD!jz9B&2#y^O#K>KBbb0692SF0X9+R$A&n$4a;! z(FMJ*$_04mil}-yJAap3Z@ly1*c-8`1LJOp4C+7)uhTU2+*;W>B}&4mPHCl8UPN#A zXK8p0g!X!Y{=nC=#-*o-IjadQCF?{1A%NGkUiM3qrvqY+lH`+!%%Tkep|=3qsPlQO z?=6olgt4dVgiA{c`lkc|bdZSGZG20Io?TAib7(qkf+>Cuuej}OPcMB$$yE=Z=D)(0 z8YFKvseBa|qpp3&or|X=9+M=fzf8Ecw(0$}HU^?wn~E{1_GjkJ*#J-!36mw~p1V{# zLW*4@u(}{!wG>;g@JI&BxWzuOjQI~os`L46g}8K8dtVtgzI?X83S|>pN}Wk2OQ8?x zMRyI}-u>U^PW_Zkk1LM{F3WVKkr zuC=rs`8A=j+oVlN1J91<>3pjV|A%Ocm)H#`M4=Wx)g}G|Wy;@65ey2MV`tm>g%P2?u z>zol`wW`G^Be))RH=wb^@)Wp0^II9pHE#?igLGA5RK7hUK|qLbra&Ne$Vu_OA^OK; zzh-;VJ)?@SO`Sc{0emCse<!%ob}r=k#2bfOP8Ap!!A$7_+JXHf|0)nV_h2Z9`!3^()JnxHUop2G@Fubs{Gok zY_oUA`)j3c!6u0&8VfVu+yiW8Wauxekz(3q6&%l-|Ba?gQ}&brsh939t(!Vc@)N7A zTC}U$EQh&t-i;AsF$&d6@1wE}+MiH*juRl6JT;CYvA|(rLlfd!Ywq>9y{5du0qm@L ztKt8v<$eoK~u#jFi}e=3OatT@0tN0D`vjv|#UHF$n9N!RWP@ z#pCD1$9Du>8jJ4q@eS|pQ{>q1hCT3ETIwMsQhP}d7q(q$6Y2diNpkcn&CUr31#Me5 zv%VtZ+Za(9qr}K?;}v9)3;yOX35|!nl?eB?ZJNI9^)))J%Oo6L2f3-T#k$i#5ndmq_my8$39nLPd_3=#Xy)$jYNW23QPXRX=EZn%+%zDEF&ymaBCreje>iWP zdim<*`@sk&bD15>WEYaFn+M`mbKBsivGuvhaI@ihy@(IOlq;VN`a~tZw-6`OFcxnw#70mUW zk`yKl%y9HutFad~YwDqmhMVN7vq{Q4hd@OF?hDXNx2=Qs}Bjr2F zJ8XG_^v``(=l)8wiREc}FjXbcdr$b^3`^`e%2|)anN4)5h{&vP%GZ9wfsD2p2Q^7C zB@4%Hm)^n#HGMV3qV+BhHB<=AKR{Vpit||!wbu0@i@6vJ==3;u59LX?GWqhqPDwZ- z4yW|sW6_9a*rTn&Zx!iKm{QdqgW)ubFdaQ6mq~UWsYk1TYE+@`KXSP(pbnW?xqf9n z{iE)uSjc-nDX2QW3ESWCzKutx#!wdx%Oh~>$3iQb_N6i(GhB~3B_ReaE((-;+v56_ zS=C36V!CskGIlSTgm-385NC7La7a$gS{*{H#51A9G-7_6eT=GWxl&QqWBFZFbj11t zwVY{~J9|E%eo^wozJl4oESWHs;h#*f|6Ua0+xDA+?idQcXgC{3`JWevu-ES~Xv|wR z>XoV((9we+7Dn;>%K;5e^|3EpznP@GE6S)4a#@rL0)t+y+(b)TcJtOXotGTNh%<5D z@)5uRz)HaX=40A$ z8!FHOYfgvKKEjsHCFK8o2W+0|$A95~=@kb3s{@wB8ULZ*qF;2uAAPR4ch~AX_4~6Y z>gvI|TMP0Ng!OzPK=B-lPdbjuij$lTmNNNxM%m4W#GV)(u>M&3s5jI%?w*Fdgm^~D|J$J| zHzC3t5PyLDe=q%@@c-xZLq@@7-NS!3{m_;AQ}7x8m@Bm4j$;RGd%i(ydPX_Xpd?Wm z1CR>Ly9GK!KeSzi+-xvs{JLfG$Kmc1C?{n49Re&x|I^7)OiY*<&(-lCYxP@sfB=F! zK`9|H_?{H2CnK@!BOx&ozBn9Y+PtKrrnMXD@Ji7rb*DDb0h88*l>Tn5YAyC6rXhCC znc;?v6h`#69gE@n#Gv716EDs>+v(5W;Io(ol|p}xDxu2?erq1>-Hg>ZSTFo>wkHhK zavr}I%idueGzt%ouWI|$&z;6bDfKwR5wx?_8Q^<`e#|=k-uW!CrPOmk;9DcUQ>s^0 zkgyO(Rp&4J+%XX8k}|X!?jLf?;~Z7h@{m6ZS*=ABO#rFO+32>(vtfY!Kdct18g3r6@O$>x=&!J5cE2yy=_~4|+u%-Rq?-s6#7M>x|r*U5|$D8mq4M4#FnAw}8 z-$+S$>8*vE8(N0H{7n*^tX6r}z%Dn&8~03YeLNjJ{xS@$JBDFW7~wgR5!|Dh9yr^3 zZOa#;E9W@F7eW}x#s7%2fX!&QRj1JeD!WbyD6ht5R%O)aa0qfsN}0GSH!MeBnE>Oa z&P&pR8~X}!zullr7$7^~1$0EvE=eVExLAXozu=YP&?Up_WB!82`1GE7SwHsj(`$zI z=SKn$H%%3ybJJUx5?!JW`L+8p4|Z$wS}ZYr_G4g-va4-)+WVy<$TE8HZvGrQ`$$JMBQP!tf+aiAgNKcK5lboCn^X1Kob($5&> z*`^1h91^HAZaD4B!vO$H8Ry?~x9#+QI#_Nct<__|zjcQH&A!->f(K3m&#ppu=gRX5 zNW(p8AyW4fzZ9He%No}$|5QEJ(1I^6Po(|H))wTcbl(XT?{T>46J2w0@@UUP`WAI9J#+}9%H;OK4_q)0W)Gq z(K>`~B zq5{hDvf7a|t`iff@iQ}o+I;`NlWhRK^yT8yS2C)rc_e~1J4dJ~Y9u3^k87>kc_M_* z)f)UO%`kVgY^pn}7`+^g4_qmcfZ8#p9O3eknTt6ID^sN=Jr!{THJKn@Ju#gOEZ%@1 zj70Xp`&m4}7c1S*9Im&gM7rUEc=jg67m?~j|Zbj&x?W-EIZ|wBT=_*{_1XKTXZ@Fhh0ev=6(GSBQOjaPOv&=gz=T_-es?I_Mh&*BH zf`JmDaTD-0MW)OWbzqG4bC6HesOQG*7JW$-0;-U@HFk2sE3yBK$7sWKTSZhcR&%2Y zj4i`qXG(ib>T^}_lmNK%du`z?wPfkp!*uYwiA{r6BNayE-cMyN>$PP})*mO=E-equ zU(jJnZp3$Q_h=Y;+^lT`*atPoGPw)(jYm#ZcTsu`eKKna(`2V8c={Tpws<9Wpyr{D9SHD@g z0Z2t&VR7-`4pW*0DmuV7(``Rmys3P_a;@q2Ou9Sw&l~kfxB3-&IhwXB-%27IFHt@x zye&_yw-t6y##{O9M(@b}!<=!sZ-|pOG5E{__AVuxfiorbYrkPo^4L8mew~LyW4+Sf zPJ9S(jnaX0#O>;0cvTsh!)4Sv#;?w`<`_4*l4q=fT<+m@Xz+aFEWZ*G0V|q(B5=9H zR>bpEe^SB+#tdGEE~isZ$$7r$f%^EYt1c#kD85b|zI2wHKjta7SNEeT%)>#!;f%Ze zzST|>N1YihCtSO^bxu3{mJJFZRGGb&b#P>T(Uj4vwYwLla1S00@)WTUf-BfQwh1QD zuFB@z!f7KHd7@sh2KhHw`VXe6jMyf>oLu#z_*XRbj?bg({8Bw&NWo&r5n&7U<->XQ zJlADNq&KwN1-0XvkARya?`fohn>aWzwl#S&oG@C4mz#>NaB=tk-aIur`}We@0@&LF z1#`z0qR(p-Ssr^uOeJZpJQQw0$4>Ec+DW)cQ|n>y8gv-o&AKoEjuc~2mG(c zcKl$tRILBBf7kAEc=kH1(C+scD|N+3(Ys;&K{4VY$u2<(F%au{^-ebCG7zpiorH4R zsmtV;?g#?--REo)=!_ruMniKxl1fYWg!<@OE0J__b~Mq(4EiZ8k-qmRCrKHk&tP_U zB-%v~P2S*Wjc`s(TIFKd(b0TwxK_kHA!r0-kjp2@+S+nP)2A@IA1`h{(ks!#eWoiB z_ulyMARf!Vn30pJ~ghXYp7}6S_sES3B z-o_M(1>`dBFhcCGQI-|GY*Ia)8RAZQayzfTTZU6hG}${9EF zE4F0RFrJT$Ku0euB0NrN%gpWm4tiV}Zgy%aa7SmVtylcs6dz_$3I~L|{#|WC*=%Jk zCsT=s`3_X+sWe>AM!me-Dst!dOR~hf?oH0_nL}u=pns}&E|_=u$bh))Y(%d0uS_#0|_*Pr&Y|b8Xj6*;e~L&>+#jO?E+Q zu8T0SlhGSGo$yionX@h~Fw(XD3Pa#f-=f%jj6D+0q;l4W$NVc4g$YysQ9{Xs3+(2P z1zG9T3%;z*NePZQHggw(V3Zwr$&H#kOtRPVV`=@AuvA+u!Z(d;jbC z=Xut%&)IwJb=I6?j5(J3-!{Xgcf1sB`Gx*pGpAunHdjrkHw>`YwxPy9k!j!`a>u3u zx?aWe>ec68;ZqfS+O1F>0#}It2QX8Y_WuSmYss!atm;UUdPLNT@R-#*{*E7}#oZ%R ztEi^wXrK~pTA*|%CSqRcTiXDG*Ga|CK`p9B^id0r`k=i!Mp!f&g5Qmb3i#S7wT|s2 z=5mdd&-xBtmd{*KVI50bIO~oNG!nNrcqc;6%Gc^FJ(U0(4T6QLK6s96if8seq4z5S zU2N5Es@UxUaWhp_2xR7GbkOQ!#B7dgHGE_2Jy(Wp0DROBWF9GA~= zflDGwoX@puRqn^hUdr3wJl=;ZeKWK4+_$c_2lBpktejs!cHkk75TmVcxAp{vv{_|M!#uO7Z~w%M&Q;C_^^^+Zbei4Mm)q^=avWa81Cr=()K* zs;RC)vj^Pz<76GSY*_z6YPjuoFWQweoOjJnO8JSe#&&KiabHbqzb9BTHcYX0UWI;&+%pI}JrjT4z{S7kgl8Sy zVnYQT8eT}(RLYJXNEAHwjtVRsUdLa1znY^*SNMu7;&!`K%O!C5)aA>`rl*1#wmqJ@ zo2G5O>qJ|iRQwFU@xFI^^~|oX(&u}=H7&dpv$1aAnzN_!ceTDBJ2GI22%6gLSR(I5 z!esdn3^h7TEP)M-vEzZlY|D6j(EgQc-o_J4+v?vh_eg1imX%os)L7YFslZ#XYm1&{ z2|%wX9t={49=>a-%ok*Wp=#wBTt6>T{|a(9sVnIj1Lx$Je4Jv`d{;#t$U_pFAg!q- z{c4C@?|76Z*hq!+ep-D%@}$Up5ftXSYIYht6C$qhGnL8h6qmM~ zcnkWuflp~tBlayEu~>URve2>W*=~+Dfhlnr{5R}65$64ylnSXH#j+vSPFS^)laM>h z{}V6OX%WevFM>DfvWfZPnd2zRRL{^~P}_P=OXt;zH3jj|X*~I(qGfL#lAMk;C7Ne# z>u_@;&qt@zRd4@di<-}rju=2`DuvNnJSdT%WE|(pTTW?St+Hk;*p4J&qu$CdYT1{b zqCq|gEm$V^Q6Hmn_asOI=r5$OxqehhKFF{PpjoA__A=mzrPpA5=HUBU@ZHpswvVn>VvE zo2L-1RZ}h~fpP&q5sB5kjN0>9@&57yyKE6v^09q<+kxL$F?Bg*n&M_+yCVr&a&D>C zbSGRymNmJVg^McD=9JH+Gl4}2mbe4M&==^@uoz6MN)e!pSMk(Az>0+KW$YR~7tv6q z&T9xLH-Ewe8|V*^gc^m=G@4P};zdBo%p5M8sQJ>$k-|`BJiz zHYpYV`BS!|p6YL-$)v*B=GJ-VD|fjtL1NNTcf0R%dDJOHK2!IgA3aa79Oi6NZgnTZ z`tU@$;Ir;;y$1zvjn~@~>?1;SI$_5eNoaNxq36T!Gx}Np@Y&`5gi8Yr)+n|Ew}x^-BaOV5htfG z3#=5Af%$3oxbu?6R1U(E^_kULYKfSC4z18d@`a`AvEp04>AEV7LA$C(5=HMXgQ7HF z3J4GYe`ZS7;w^e~zak*O9F4wDI)(zRNx!L?8E5r=`c)=#Kf~u`*V5S*qVKKz#QJv1 ziW7lO!Ltg8%PEsZ(7H`C$faM|9v4*M@m!>E{lDTsHkm^HdJ2Zd_Gf3Nroh{PA7MGG% z0iABA+hW1~I0_G}_I0c6t%rqxE=xo2b+R(H-Pzv#%g?W6(Kt{6w`jBYo*Q>ISA}BX zB+tW;@5JPYoEB>Rwj=fEbA<45_8F|07}JQ_d2VP5MfPzz+c2JwMJ*uJQREHIpcuvm2bf#D8VH zAG6%^2VNM@I`(DOJXGC~yV7lCjTduyz&fBNm(tmvjM*A0e6qg>I!IP$$sWh!0Qk)c zG!a03ja%#PDCZnVv>EKs{WpOm;P!ZM);vNcUHn*nyuT(GzW&J7|4&%hNdM zX0;)k$S?pvCyQb!YEU!4N}J8qjXK?Se;i;>G#ef{t1Sa@`fJxhpkOGp@kuXW*06SL zS2yf>&K;e1`w*`pv|h8aZgSH>u|Ng0JXbAg`}z?Anp&elKuYVygNwG`Xy=WO1cshU z(7^7bNWfgw+^1Yq#*!G8FA+H%jHbi77<`(6q8iDDrFP-;yZCu`Amr@+FJn%(qL0zU zniF&z1`u_w_KC(1eCUxv($pnB&{O_;2n}6Y5Wg1iWmx{vPi_j#n_y=cNbr_`Px%Lo zbinxB&|25Nf}8*AaB%Cxi8-;)EB&IKwSSRlS$YK)O0#U1)8|}Eg~dXVxKDb?FZU)_ z!7C$WUO{QkYQEa8yLRhMEd#2>@w0$?cejS;^xvCR>e8C=)NL6<$cQOx?^{WnK|akVlfeRx-=&(2 zCtPpN`{FzE)C;eiDrL+=HDEQTS{>Vuvh{FBm!PJRnGQeu`kL1~6@DWW=xuTCoNetX zTj1(z)G}aS-M!S)P|NH4%dec_qJ38o8rR0&pw>r(CD9R@o=>JF4+d#7DE3d z4UIb+qWeNaVqbW;|D?tNSTk_u$h}mWKaDESLIsAbe}3!?;eh5mzdz<&nb_dXPM!0k z;RE!ewK^-bW@ZpS!~1?JPbdCLR7dr=T{A;?fA<2Jo!a~cY$^gk$GLy`Ov3wg;hqSs z@6z(^w^S&4;^)$jkB@(sTJouPt-zG`aDQF!FOt$GEwQ##Bcr>0?z(do0RWz=%)4@7 zD)!!C=f-WP(p&bWK|laJ#LIH*sBSc|fC72Eeu~re0qW3desmK9} zNXBH98%1rZqeMw)Ao1q5@J1O?Rm+S-vUJ6l&w)ID13e#jw((nom%f`}MJCFlp@RVA zWfaO3DdRv_{duf$SU&9@*9_(azz3OGa8~!}xw)E16{E;3$EO(D(H`ZI6mqPWm2;(t zF^S8;=0{hd*$XY;+$fWY`MIr^RYY^lw_t}!UKut8p#ApPb11@A85(9nWA~bp4xC8xBX-@P2yzM{3Ixqg}Fcyt8w4X@hDznSQjSa%nIAvf@&$ zah%xAjflNjZaV@F13>Ud4EB0k1*xV9?8G3Di|`pNuaNTB8YPuCDI80gE!Cql(LXK} zW7%BvpL{G@RBO4rhQ^KxgoXnC=+733gGz49s?O?mgC-l{y5nxMJYsi`zR=qZbA-qzZR|f(RtPbjs zCt2TUT0eSk)>i}&xY^q3cxl}%-W9{=OIpQ!Y0{UED<3EkAtpFH%VKxYkJL#Z~|M14F{r4S@_o8XwRYAsHzBvB60l(FyYOmh*J7c@38 z+n0(cm{%bcTs#i~E^19a*CuI&X0u7ltw(JcQAQw#oaD4y^yk9Hu6#z?+|B0NE(k*{ znz~#NV5DG#U%MLGkN`&sc6LFeW8nPZnCsHd9WRBRlYE}ee}>APefTyHFh0%Z{F5n1 zfA<;?12p4$=|u!+(dX$4LmUEQ_@&3?0bokXd&b|RI%Jgsg9=jh{Xwg!tFt;01brTC ztxHTWWGGwjEOnjC7hnM3gw!N}AJnfD0g{-KwI`NmOIk0#Xvp=xhme{;yOkmUegv>` zC}Y9yJ0x1G2G*72U|8W?lmb@Kr|->3h>e_oJ4&+uGS;~O_A_vdO-p2DK+CbR-VRFYd4<$`=(2#=rmZw!%8X z=BvwiJ->S$W?zUXDMaVYkc4_7VJ^Pq4B1_jrPXL0EJpkI&uHddL_wkApFfDiqLN4-*n7H%P6;~*p?+|f~#jf^cP z3z?Ar$}$r@zr&J66uf6=mJC4;+L&9O`Uc3MkoLNLo{6*`doq1|HD9V2d`pc6G2+;H zLw|0tX1WgcWWAdVgp^@8RC@uB9_u?{ZDK(qRj|~uR8}0cT$BZU_IfF7gyBZ^_%;1@ zu}6OCv+-;>?)+^E-4}t#nv0=fvRD{2Bgf#71&s^=CJa+BByt&A9a1CD0?8T$R-#@w z04ywRewkjzP?@Xz;6M`7Ux8H7**CO7861Eb&Wqnvt@5=N^Hcx@08GWB5*6*C)zyUb zu9boVeoZ<-#-O4gd=pB?5>%%pz&JciL$)^_ENA1M>*DQndhr(kE_hK@$gl`kN=2CJ z$*Ki3@PT?MNNDn#%+nNb?xRsXHHUyH*GhJc)4RK>Qkv5$C`1@3M`49Ybe}M!DkXC> z%oE_;bc~TyWM(R3hhgV3-zz0QCt&L9r%JOr_|8qawt@qC@pvsebQFaX236I{BE^=P z&R;P?=WQIjE+@J@-pis2!7CYvPqiQs&VKXinw`8oX^NSQm%3gh37cp}ZYT^2nJ=tj zs@O@6mKhAzfAQFFS-m&Z8V-4)2V_Juxai2nJ`>5V8Z0mKz9#!L9yZ_bUx-<6(5Jn= z_n$1Wz{>c0+QdN&xX*xXw8nNUcfL0K>OZVBrFsFUkChDZ0JWbI5B1#KId-YF!r(x#Qk;$V7_Zn-b6x?cwQASh`OW727b*IjEV z%vQ~rx+uV&j(;+dHSGj!x|Nk8z36wpJAKD*_C6D*`H(%KN%EQe6v< z&QZgS8Q#%^(5kWmb<$B23Rw5^E7A3Q>WkMp|1N?QFGPFKAv;2h_iT;3OmTD{XB{4{ zKsO9UxPQ8_l-M3_9QRjf!|BhN&%cw#AJ_8XmMy;ptIP1%4Mx9R8*9pjj#tQhQNkR- z{^a0$NKj}`GW%>7LTA9|3zPEB9_zz-^Lp8Xzkm^9-K^SyCJ(EI&{=c0TJ!MGy{@LS z^u%}KN6}kxw3^r;MZaWp!SBo_V{WwFs7=3Jtn;2>$(zp7BkrkxdQ(4N@`470gj(W% zDJ+`MbOy=l(U;>RwK?tnHZqhHg7tU3N{(zM$6ITCbX&e1k~zaHg8g{O4!xZYu4a@X zaWc)m>N2DBdSR3?R#%X&w7RgeveI<2H_4Gsw()NJeg_1>!&(eTDU_nWZl5}++UdR| zwy@q+f6X18O`LHSx=1rjjZ*f{tX$H>V>_5>t1rm@-7vHfCx^`5#g=Pt@AIG;77~v3 zeZ;<0vI>B#p-!wpP0r>6D+`Hn&-L+47JKOY>&f8b(T{ql37q5v^I-yA|1KNDfjv%4HLBa?!7k?a#vtg%h1FP|eH0@K>%Eb~$LI;gKTtQhV56Nw;9 zolT-2MRYHAR9+$PgIQT_o9TA1%{x77V!@qd$lYqpS6cOZe7U18@$awpq(L^Steb6& z1@vq}XXhImS>kT$(hy#Hv>tt*>>d)aO*|*NsOvAeOb0;M#Hd`>OFI)|D1N+{&n;Cy zUFm+g_TP#*%LkZ^W%1wyRA*sUwG0Z_nq%OdAj~a#2S@*+M8sN~I67Nk8sD<|?x9$Y zbEbn8G|j$Q`O5w9)9!P{@247K?`0?Zv4TgbI2o;k_w&+{js;C6K~ubJ=MmZ0PO7P>IBMzyxEE)HQ(&HP7jvAOH{Yx#qb91 zDs{4hBl4i^SM!2!hA27!pyC3(TPMOJJ#`9o#K?d5z8Jk(_OayPD+hi(zAC13^H_yx zBV=NI4Qb?}l~u)&to*MQ(#Qt{oC;+=JDi3+BX_GjL1HL->xi5`y0a=9R^w4KVM$re zuHDJ9 z=X)P*RsB?9T4a<$;Y`gPrA9#X@_47tTUKD&6QR7;tArBqZ{SP&uQLL^oH&10s#72W zhi0fV^w%bt+sx_@eoni-94Mxyyb&76xGum1X#zc1ka4aa-EXzH>i_9$m|$I(KXvW^ z9yMSxfz#S={ANCtLv;b4?V{BlaiF{)NvT{-m$8WV!0xhgH`P~lM@FwvM$qry`0lWf z$y?TamId=#!dRe{#5?@b613geG{=1=kMtnL1Ryvh>q~0A869#ugtnl$XS<>L)iHSoFhAC&9=Xf#Z`55^Mc zjKVDkIKSQ0ra0=CHD$bTGSLBx_Mt`MLf(zl!%^4XR+ z*o~VHG2D8rl1w|ix#oX(r4*&`sI4tO%uB?RKN5it=on)^ZI1xrq65j8XxSna2=McNjR;WW%blKEMChX6nFPTs5$UI60d`8KA^>z%fw_jl1v`Fzqu*1x7G=AvcJoaazL0PD}?kbKyQ zYVfLL%|6Yj@i8&V1fKPlhgLV>!K`H0s*bjYUvvnnT&lBGCzjErdf$ZdkY}Y!>E^Sj zY}TI#MPoc%?~6|q5nH3P-dkGU$TREUyUfMI9GJCo-O5W$sZ?@zBW%%zi5VEKbYU2Mm5q? z{p&boRy=3|>Aq^V#O}5o`rE$hl;rAK3?$rrdN(?mxENV+7Cwcf zV{3s9#>2xb{&$n^qc~9u$57Q_uzd4@TtTmv_fJ(CnTZnSpn05;i8(efe{3(U zz6`$FI2ep+g1nnA`>oNsht|&q*SE^aP4eD%lIX~A%H1j9Du-Of)YeSA=y$ zFEEmQ8O%1a&AHRohDj}5bqpQ3qWLuJX{dqe;GRa0l$!Q%6~+M6%aCbfmCHPw0ng`j zCsX{WE#9-c9!{{$)!{;SI_XbFqUH(oj_cD?cQHk?$IDG6v`V;8%r5qOr)A3ig$jr^A7NM_fY#jY`-!-kd%siHP&e_k;X7qsk-0cUph)%M4RVdbX^QrzpDGM0oKALBea01$Fp zL*w}6rBa9jr639mn|surqoyhcZ_Rjp&c(LpQiZu=Xn$*lyV<p*7wv-H1}UHpkMx!&<|SHH@6xZ=*I*0Q9)tbvYD_=Z*4jup=o$r|PNu z`XA6u-*e!2V`wUe^58AluA+p!?88D$_%}4Ic&42f@;+6Ir_%k|$6H5|2dyu18Ou`s ze2OQcelQ7qH1Vy*2(``z(5SEpsQIh6xZ0QBMj2d|8x;DF&9TryTm4lD|Kc%y@D2Bv zw^gzr`S>V7y710j+!(Vs{;JZ|AoeWrIaQcUSsGlL_0Nf2(2QbvFi73MiB1%v&i}eJ z!sN3kOkO;}$lt0Wu^)|9aCtbskMuuu4ecGXJhbji`k6Cru|RvsYg9A$Ms<`Q2nZ?M zno1XQ$m+jtgL_h;qU-nQ9ii4;?LownCG=*n^kbJ!!~Y8f1FhP9$FDY?lQ2@&NedMz z3ZajwXPl8oO@*eQ*;_f4kZoWfND6)cN>gW6Zi^2UHYsbQa)j%wgGG55hy~k}NuJxm2^FGGDkzeyz*ENHDI`%gZTBsh`JXZxF2(kr`iT0_ZR#N3qw zdv8ZR@o~h+SJ=<>`dz6xWnyPsO{@I8;swmVv#t^F9}}%iw#rPn`u8hRsTKN$ua*nE zSP1X)EkANkeg8WWO-c|H5Lpp>x)psIbm;mpQ-i1Jn;_9_V_FmZ{G^O2M+P)mHt64K zy90p){BrYU>6H0Qm4V!Cd=Z!S>dsnVJblu;L}77OI2BYIA)*K~Z~7*g?qW?q!=Un= z|EkMt$?87)0A`AWz?x@mo>>I3$dJkt1`-_-m$;xQWua$vB8^Ykf#+B1Diqrvj!mzc~N#+TcUFop4W zhF{qO@4Wf_vu-a}Pcuj2$RKwYPh-8(JT#x2>5`9Bb{p--(SGk@87SLH>yGSlE~ZQM zmnQF9xcQy$3tJ{Rt&-mEZ1UD%-n;!XOrax?d_p}D1X53z#SK8}DW~xXNIi8vDN8Qg z*#Ex~PhY$7Qe@E>4ECFCdo!321BnZkfPSCe*kHn~_KtN_c8lfb0f9iUrj6F_jWr;5 za3p-G!|b?Qg6TUrVjSE3{Py~ef~}QqbtIPoHl6+_8>E^Z3yKo$q;l zYTRPlV={A%=j;7OenP71p+BPa>$)aID=qu=csryc6PfG-uNZ3(Aqf?`KGla;k0L(2 zb*0+oJbfwNngBv&TSE-2dp&;BTT0!-W4;#EaDAfe-xLl^5V&mR`ddg72JUq6yXrO1 z!Y)1m3X#LxQ!u_Mn&a)>q%FLM#067<-hd`bFJ7~UMsr@i-s{ws^XcsaRZlP*ou*^1 z0h7#sqj3xjZS&K96Qn*}9o=8wU9cO4Xsve!<0yNJ!2gTGS&`MvSH;(5%DKOtDTk0r zZjqE6cSMDSgm|Utif#{tMic!j@-`Q;7%?nrBO|(0i_!ms0*Mm(hXPqSqisZnq=O?OW$vN~X&RVnGh*YJ)S2zr2mzkb` zBt2XoyAx0N{H8g8ALG-bg`R7*pI$FTev@vrTw8sc-U4Iv_D<;bI`3~L&R+n(<>(*B zW9@i2s=74P|DsN;+QFL>q;jMkmB0ah|0j?qOZTVoxz!6NB1=-j8x|uKORM$Wum>6H zbq}FMmZ1R!=H|kY%2z(%0RHQ%3QXM{g9l*XGTJ}gVbQvGZY>a(pWQj1=RWXbc@ih= z9b6rSfSxkWS6laNXjQ9tdN~&Y6}CW>lsVwla+v%eCz$mZa{jNzomE(4{t8Xbbfmymhy`8o zmHKHYt9g>EUP$;dm(Fs6QJZR+E~<1@^pIk zIO}docVqj;;v)h7s%()?LYx;dvNHB`Ci-VAdcT-zi#qW?t2AG!l?4_NSP~GfvGX)! zg=DX{&>f%f^+VTVGj=eM-?|h_jb7;+w@89Uu^WGGC8Cw>%bF`hK zoZp+eM`4$XiSbu!y{-E#wb?aR55wAt7y&9?WBuTKX^lc(@8R>F2FxKqU~4 z7RnEB(_ijfYGk{ofJV;d_Hi;?yZuP*^jT#&i+}m}udIRs7brjEf1wrLvh9(~%$+$E zj5?%ZHQk(DDpm1Orf6{~GWuN?_*@s^D|NP0r@{Vg+T!!sKb@tKv3(yY&M9S9)On3n zzx$51?bO52H%48L9W2#%u3yFt3G%DNz4W8EOWhVT}|)H+l+Is-p!dVQ8;ra ztYM=@s{B&=GCL{-lYl^D#+Bg@8NRIpBmk7>bH$B|1fl|#mQE=vp3Yj`nW4Et`@~Bd z+t=w$IcE}5!(c>-EiQirxV?v)OL1MlE6P^-Ti&TbyAZ}_H+Yg~X@`C`p2|E8eD7E#2@XWusZ1_|J| zo06%^VW;!R;bMzJZ&%Aki&*Y(9w+BHlT}4{dn#M_GOG7@aAxbp6;0srMuGGO6K$4f zaSVGqp1C-f!tbtdp+#gYjo@Ei6tz`hHO zco|RCvbZK|w~Q@&-}|IZ&v!Ww*^Fw9J&G)a2zvTNf=_K;8P@9EQ343as=VLDG}0UI zu{gbZDtyF`XG0<5A}L{6pf)@8SU0oWtd3Uq^vCekKEfI$a{ebcd*L8Ok!q6*D=RBa z8#|MHkyJD9Mu0m|`z@kfi%p>IpKbSCUWi3)&#aGE)Jn}2t8al$v8LD%mX5}}W3Z%k!q$^z?)ex{){0`$U zS9mqOR{f@<^D)M=E=N`B8t(>!A>0qG9AI}wEw(59eLwSBe~$MEjo3tr#*2FD+r5L^ zVDWS=$(KT!I5Fl-^u3Vff~z*5@(|HF`f4cILUQSq7I2(oEe>zZ4*t{=dECdd6HD_qesrCfEf7afQzoe)rqYdUXn= zQISH8sp?POV$TN)=nbmt=}L5SckNo~(J8qfd=GQt=#^D8G{3C7pDzsN*T%i7#L19R ziupQQoa@ABz97A~vz!9YA4IFuPDFun$Ru%_sYV4-@LK2&(%5yqZTUpTu)P>m^1gT& z2*uQp`1E%YHw9DYd<9P*Z2vOopK$I`olUkk1jRq^QfEC)!=4vjWm)P4a9h}jixgAGuezV}*o@GM3rKi3zO6W2;d6!uwVf94(w3bQ-yAslGq>j`H~Hf z5MYp-*w4U{oW3mhv>5N80@PX4O)nt)(npC0PDQ{OtBr_)nxR|!Cvx%uxya{-^8+jq zRQX#6-xVnubYWcGIXYo?gp0XBVfF8#R6#|xl1^8W@T|(4d1IZ}7&DRJ)YxwP-n`#%esPC}mw9icYR8z5;v+adBR* zMx1RDQGfMTXX^ojCyh2+GKZV+di->seAbaKx`dOVqK7u~FaSXJ?zG25@?hal;z;F| z_544$sB<8*(kV>iQ5ZH`S1n?}=EnQM=vrjEcg8;7?*e+3D)~G8I}z;|B(K1N8+c9ee@7Z65Q6=80MXa~Em}J} zd{mSpYhBrOY_X#s$N-fw7Ee;-FgX-TRb}9Gxl`9#zaOm>Xxo_eBT#*L`DVbV zRQ;}U72`ptsB)kMuL6(8OjQ{Hrr@SDBb+XTL5*+enkQI#9bGGre3 z98aA7CTo;W-W+pb25%t){H8Jgc&`1h?W-vU$tL%BE!ww8s~GHbRBxYbn&V7wP4h32 z#<^=_Cu!uIkFgS(-l#%YZIPgjw?+iW4=3V8J&OpQG%7c~iX7kn=BfBtO<`wJ&@LOM zL|WaNtR+x5-AlL`#9q-GA3 zfK0-vKSr^qB85ENK)h`dLjf#|Ihx5obfjmLcmaL|(l+XEc@a1H8Se}VZrU>{gtNVY zEDkluN}oG+L9^5J#?S521_ZZ4MJNk9yi!ce!*tb~m4CDoJ@ z5_N{q_#O+52a<89`ZZ`Y_PjD>jPawo)sRGoS;7BYNWRzJS2rUih}v8C;W6~D;PIZz zRld^-vSqSv+OsR6rORWDswm2sS4Aa+Niqg>#aW4$d}>bPLj$BaMX$%c+%>D(DiSGZ z%JlQ6Wx6oVnAe4GDY~9zO9lONptBfKNr9>o^DO3~RDZW7miq0x#|^3xW&?_uzZBbSo@`e1jZM}^u-&Z>uc?x6h0)&A4nk~n=0HzNU9Z596&y}MWepJ=cvrd~) zYI6@z5~`;bf9uNemK9bApblGEevI(hpsw=WMneiR!VcJRDMXP(stbhnQ^Pb^5l#-x zGC60)3kE8#tl`^t&}PHc9Bj%(ABLMP>e^=1;$Xio=)t@Sfgq59k%I4{Yk*pR67*NL zck(rQ`HJgjAi@a&^W-=aIm1gC0W%Cx2kkNuPprTFBjd=4yfTT(a8G{4#oxn@$89vL z(yN#ZvPMOL@~|F6P|-dN*r=4*-n{O>+Y`sCQPENusNS61BBuvFEJ=mJGU|Gge!Fdm8h6U?K3%m&?#e>9#6XYeisbp*AwYj;J=&uZA6xi5mG6-Sn;; zpR#q98^^k*h+svO<2VwcuwC;vz1pO$U4e_s5643G+#I-<3efuc74F}a=6`l(V_@*B z94&bT5xoCs3kiY%&Nno06aD{aB%bL(W70yDL4cK^DN~SPAQvvD5&k8Xhbf~Oc60{^ z?9MK@0D8Ze6i@k5FU)@Xg-p|Fy_96l7wQnERC4%-?{fp8u|}f?6NHmimBVVRiF!2V z64bD?8N^urQfE)(L4%f=gX(^=xj}V!yPVnm+X(5)m*qP6!OD&};C(XlVa-YZ-tG4n zI;82k1UgQW+dFX|J#y*)UcAXgGx>o+BB?(iCaFyjjP~OPM5}6~HlGzw<+s!^{K7Dl zG(u;HS|de-+7zu=b`*v}0zUu(LHypgX2Wgm&7CtrkIEsDvJXg=W7k(^5)}EtoJS{J z5Bm;_A4+Hm-AU|lSC*--DcPg~R$A&lGh6F8AV0qW`1AFZwJ8+=7WyxR=%k+t<{5vD z5ORu`fpgjat6fk&Kvv|0*+L6GodIqX9Uj~m=)RC9Pc4v2J*$fky!ZJM+^`&J&Xi^| z`@dku1j3kV??k!xl8OT+j{M`LixkGc^vd@O;=pR5Ykoyt+BU~YSp7J#)FLGMXU%^y zm!*OR5YZm)l^GT3v6bt0W`6VdPPaAItrEh93_DU&uRA}b9FyTn(~YPYKm-6+78bU* ze>M!@0Be{WXyhM8btjcnHUuZ;UkpJ@CB&Fa0vk6*lvv36Cis&ZU6au@P@*A7HZP2L*45j0H{(DZlb4- zosSv7L?fC-9%(|1n8<is?_q_07XqrZ?>U^IlBo3>We6;i-XPY;6vfHd|wxmp^f zV671Gw){90!WN}tW5!jFhC3YZRgBy^fQD&>^mmtL3ghs11ea`Z4rj=rKtuxM#OyGl z)H^pmIx29tOpXnK=;svqIVvN2^VCK9XStA$(r!LU_L`a3moTBAjgtIC)UMbE8)Q`Z z(91N@g8A7H93~k!B}w&3DKUkb%%ly*rP<)2c8doI0S8X&{Z_jQM5vSYLFan%cBE|o z*&?$8$>^1S#@s-tA@>V?o6$*$Q8t_lWep*Ul9nxOZt!a^#*;>sIEiRyVk&d*WT zq{gv4(wJOvOn%E%IDFzqNgCZ(7S*EKS3wjIH==ZB{4s9v@vO`>2)tdykibA&De;h9 zwJZ0^AOz@rK>(nkJp8+kde$H$;P04G;4c=Nm{Mk%D^)@e07m*I=sw+i(~DWMwQxfd zl{Sgg7&=v0*i~y2&e|0Bqs;*p&`Ne5e6DSy7J_R{ zO!e_$y6DF<(}VsRDZWgDUGXt*Ll?92qMSBA0R0>X_Kan&u8x*q?eGo!!~3c3c_b5j z66P1R4HEp?+%#*$5V4$1)~bJNOy$hNjmht*CcpK)sJ*Mc`OFD*FK0d6cR1PQDzDE@TS&$uyl z$_dnkk2m!CCA}I^MUyS}oi4VpK&hw1T`^)OCB@xXZPLA$J*(VgA|W-`U966oF=nB? z3auLeJm2}YrbhWhT97t;Dj@-pKje97vu@GJ`8BpTl2$d1Lp|!0Un2CdW1-DJ4;=yd zP|XnMHEoz^&sdcf?Sl#*c^yT!bD)@q7&Px>> zW(*6_ud2W^L1Fqyh%_9x2Q8@keV+SRIUey(d9XuAMl+9;q9_0m`^o(TA9%4JwdmN1 zAkn%%5TD_TjHORUY@vT@{+j^G`x+43vk)EHypuZO)p@5(Od&nGMr0y)Y_P-kclHNq z0H}tAq=us5kMAj!6Gdg#$W2jiTmVA4Enmj3!n)jCz^}{EQ){C3fS^a%ELoAGAczu0g{3SL3s2hKn+2!5ikJJ+2Xt zHgw-Hs!}9Bgzx@Uhllq~So``L;lGDTZ_lH(8~5g%^1Df}k)S;+L7ak-pfyxm1NFo# zJ((hcsKUcUmM#-EN2)AFgnhg=WdkP?Xcu9)@+51S33=(B3riT%NPutQh$#prhYb;+ zUzBe*0mbs$KYQmt;l-O~XA2D+@J~nx5&UoKoc}?U0^D}~*?Ed$O#b5{5={T|5-RS? z{5W4OX;+x^wqMVab@u^&BKGUxod|C6jIQCfcHV1KS$^U$^UUs4bU^RzqF#o6g6$Ks z2KNffsi(AEfvwutWSW(am$v(^u`*cyOB~lajn@F{M^@;q?LjSQ?` zuU$W5YR&yedAk6g+tQxoz6ogKRh2RXu->jpNJJ+Q$y!0!wkd-yxZg}ABDcGI89_sZ zmp`)YBVi{D*Eom*0W9ioNNEJtG;~l9AKq4_>Y_zzp!_3jF+z1FiPStTt2AE}#p-G^ z{Rb^?Jfpvp?qXQ_z6k1k{o!(v5VacYiAw`CN11hY?C4-@jg`{GOkV#sm+)fT^5gAB z+{}wsjv5t>Y~#yOHd(ZC>-A3xL&s6mI?BHNyX0H`SHnijroLY|B4vCy?R!j@h0kl5 ztz)(wGgx|>M^USUK#j{@<|3p!PWO51*RS%EE+-bA6269$T-O)MwD=m&oYX{4ue!>`2;ja=dE+uAAo%3I9ZK9zu^9;Wra@eN&>}04a0j|4~>cg(iiPiDrt?b zIgN^6AcZ&h;Hrw?2)Jb8p7 zx;~$Trc(H}9E5)#vY2!>t*gP06I+eZCqIn?qVE^ziKy*INiN~_U+hLyhN z{yu^OOg#0q>TfEx3#n+0)Xba(KW|cF+31KD_ux0Um`dLde`h}p*dIUI=zg?o?^8ZmV^W6`vLoZ>)c*O$wXj)^xls>sW$h#&&wa3-5~ z_D>O@RGVWjY9yX_UdsyU%7sG!cK^WpFtOGjy#OZ6AlC{Oq{EWiXWeXgsjP);OQY^W?((c^N3n<)0_JHuU4?#499Oq6-rNLw6MO3 zadNZm2SW&qun&yq&JBxDJ*_{Iw88Pj=L5dsSo9A68D3k$w0imO|-TUTG2=Q*{acVj1oa<+9La})jh_*gwaj0JB5`s@ zGNpOnZ!LE=2P#Lo!dk1t5}|43Z2L*mJZN4CE)JV`?0cLOEWyZ3Q4TBOvmIuN8D=Yb zi)zulDT?Nzo3>b{8hXWgZ=FByJc4s{79UYz)qG3rnT;6ydF^b2NbEi7BE1-2uVj;M z@>M++vdA#z#XXE4{+k3S&Is<6SVi@I3S0`{Oe6WAjx?Cq@wQQ1`j zv`aT}*TUW1-6`Cya46i}-QAtS-QAtSt#EfQ+@Wy4Sv}piduHx8ap%WG%qD_}JozI7 z&OST$UhjI>BSKizd~1bvPh<98obOgNz*FT#Ex);_jvnsv{qq||w?HPujAXF^^rV_3 znyxOZ-C45=NQfHkP}*yJpZryARvZQ>QHrmi9l@vv>cAP#hI;i+IU~>b%(5=D?f#)0v3G56?MqoV zozL@K%xyfe4RfCB<88h`tW?2SxX|;5P6KkYQ{B9^upHoYr}Jf^aDgO1g@)<_`Eh5k zfS_4I6Q5~g_#F=~TZshu=C5U_VPPcSu}&D@EXy}_0Ob%LU&u`MLtUlbm$aKrj{Vzm z{tyRCE_Kg8{5muQCYK}Mv&IZF{Q`lRhLg^DNIx)jy+6BRN3mm;E@X}nM)+cN|7`fp zm`rgg%j|ur(#EJat?mBSUT!jv36JSlsweM})AsxM^_!D2K7K()Xfbv@+r8dl$61w` zV)$!|OUs4q0;!NcTngJ8D@}yvLAOMgjFRNhn93^2$ z4d`csOEaL5M1xyrTGz%wwDB~5FOheY@A1BA?r06%eP6uecsAp}4^J)QUj{P2Dw3*r zQo4=2kL{+iJqi=i#B;lnM{zhxdS0*;t{Q$1E_G{m9@&QPpOsnagcIoeRNCS2kd9L* z(gHSo<|Nc`1Z$8{pnZ!dd2Igx&MF-zW^gg)$xBI#`5J^G@)8=5FqF+gDvmZ zYGv;r?9|h^A!ePF)y?}j6VobJS?Y#-}XYjhIr1{p5Y`a6I$+A6WijJn~$A zO6p9tQ#hQ*?}BWP9A8LnyE|yDr}D%55aupcSD?I;LIe;s%~7^~JA8fSInRH7)*2!3 zrMcHCpjHO4JX#wQO@CzG4tHq}4bYI=!fa?a+b z;7rN%a%Ssh`_=xo-(sO-FL#0$<|JRhs=|hsDah4weI|)9z#o$`lAV-!#Sk}jI(r+| zT*uS7p9|$=NZg{P1k{Dep_yoIZ*c9EQTU{O#l(S8?CInu9HG4v($b)2wVI}x9XIt{ zMfBnft&F| zt2PcHWzt1CHH1iQN(G)zi|=a9mda#3aw>Iv>%94HEHs3~C0)z88r#pC99Q)9=vId= z!Y_P$T5pqI?bPWgsz+7J`sQX>=Trl~$)%Z^!X_K6JG_-ZY~FrkqpGnN2SBEVf;gvB z`!A?Xz{_ChOzlNLPuP6e$>59htUDhK2r5?{i3VvEA(8gUH0|;l><$4Y+cn#TFm3~+bRY|8I$12%@2_tYgkW%@5=*? zv5>weo)1qcb$3@eS(`m)tply!Abuo@j^6L3`oY0uoqBruVIcbdH`CNola~pNMX<1_ z?dQj}5h949x3AZX8!IQ$iJ2==6q0}4NVV=#_3<(E=a2z9&9QWybQLWBvke=xuWvWt z#LO;87yS$5_+72MD^3y1)bud8*s5ohcL|=Vi|^f1Xr8%eil)H`W$VCM) zubL+n#ogg|VL0@~UNg`Q_sjd?4HU4%WB-n~{8%b4fo(>}j!qS22@`3Izlm-$L?8$q zv;KLLYY$B2kSgGdJWH`?dAIe3W}Nlb1OsaTC#Fu4c@m94PScfq8r$%)00$Ubi5CL< zRk59n5H6r2BpjzUetZE?N3bL<*(&SMnxM!;`HwcWLb1q8s9R&Bl%^`Xz4a69^mn}w zT*qw;oPo2&3`!Bl74*ohSwL}v8 z;Zd3noEKFD)eMJq#Y}NRbiyKtrHKth);D&jpULAWL^&MiG^8_4SD{9fmM)j!&Ey=;E--H49qWn+qSpaW z5l!rZ^0TAnXdT}w@YX(%2pL>x(JM4D6D4=3@``L?;wn?qCQ%_be97?fBw91w$2LFr zY6j)Yp*2jSF2>96?b;0*1SY<-!GZ`@Q+ez&Uj3OBF{m$EzAjIF#aH~%I>l;-Te=r# zm+03rSSAZgXE#!AYLAs#hbVk}C|T>2_To_R0OZ#M5Fd}_Alho+bcv@F7u-`_BJZO= zK&5J&Gm$-6sKsn#x|=J+v9l5~^K}W-fZ9T%L4ysUbE<7k|4i_17tW7&QaF3F`4VV| zwbOQr3r+P~c;E@Fqy~SP{9-F8j;m~u-jMz5n+11n((S`A>^ko48)h(DK1{K2y2FJt z8Vf1aT`f832L0)bA&TpjFMfF1nOnt%W8^|6=a=%XF0X|R%#Dqww`caV=7)1T5pK#9 zYoCIVZ06&HRhc=n$3IP*NoES3h&*Ag%RvCG-%8Vqn)~BaLMtuvao=F@`}?Sk2BMnZ)bPaH$X|pmB#;6TL-u8 zu2QYeE^KiuQOYR>$3mbG&D|Ee-R5q6Beeb39<~CshdtEGHo7eS%N~~b4|^E=Uwhap z0FbXPqDzH(X{&wd^s&xF4M6_c+RD&f?SA$=AErdkG3rO3wsk=!xr_CJt+Rz`VsF-d?}FuxC?U*VGWbWM;$lQU|EVaI4RJ9Ci3I>A*Sc>Xnq zouATOMQ>Uuqv2cxQFV4X_CIK_e%hF&5}!;bE^-`jVn^-=8Ff%HY}8o{9k}%vZ}K%+ zY(B(`vTN({hKCeGkof5RheHfBZwTI&!h7p&j{hjPtD|pkk*A07$`RhL$)ax@?cl3H zJqmzc${?+PC>72!?VD)3up|+MDV2W!b;V5sxP)$LxvAC>712{ppB+VAXdDe)dKLKs*|*wiHb`-%pp9YI>MJ zk77(M5o#T!ly>r~$o$b)#t;9_vy0nk7(lOPTmz_ym`R2FQ#Pn})!Gi|&@>!>o(^F4QMWk5heuo1edK{7v|Cv&nuWuW`@v~nGGFMF}J`*?|YorYi6TwL)o$Etn8gpc@ z#E``;Wm&TIFdsz^`G9?X_Gf?QzbTW*pYy15IMhyOY`spDe&JGuIpW}fuTSgVgBiWG z4g6$L?H-dTL!;4)F(#^~hB?DM9;h-s#k3&<Ta}P?4$x*jnfkYmb;Vd2~VsG!w9b z%1ljvX_wkj4|zvd6Z5;=b159%t(*Syp#x+D#@Y&oudfMzqS0>@F99jrQox%-D{?m} zD+U$mmCv3$|KrWQ*ulX>OO)#2*RDA*Zbme#%QSztbI>@wu!d`{u3jX3Qwh~!Z|Pls z8P%8nd!Jh1Mi%i&Az1u}GZb!Hd4cdHkP+D2i0hw>E(2r);-B~SnKGqrtk6xR>pd%c zt$OH3zdd4XszrdAQgP9X&HN+@+w@y{lNxLFJy>de^p80t5adF739FpnaJeO@MDAfD^3wNDLIs^YbGTDheoBx zZD=dMg3qe$cVRATL{OCbh};Genm-X|QMf<vUl6w#ud?UY2B3XGO@6>iAv0I zmf(-Wr9nhX=W!bp?EC`}XkBU3Z-nu~Rre{U=pvXPIbCVE0_>DjJYvdPq|Ko4+K_mX zwgj`GZqLj@hQ5y|KLNwQe$4R%!mjw!QB%$u0N7ccyR{;w565s#6_)_`GZo^!o_ObB ze&g){-qiiEF%0+kAz)(Uh%78@C9`(p^n67lk|B>Y+2Xuw9`~*ii`V(sqLFA)$I^o8 zCB}YQIJ{=U3hLwfmftg+JV7q086Pzi>n}&-GMY+7{i92hjwKv?Gal+Dn_qvmKZR=j;Y=U>DX=Lg;p(n)udb*5%y60BVv!uA|`9*H6c^J0vr(*WQioove0wznAA2Wr1h*0WYIs=bIq9XDL56G)It6QgXi7I-7U@ z=Cys ztP7yXy+}CGpDTmKE!V0}u1oJMw_{}r+o^{Xk^7glzkici6E6E^k%;=N(^S3fs8O|>Q0WXX!s9}wj* zJg%2V?pJltHa)zInfH{nw`=C{zg=i5_JDXm2IH#)Lf!0JetT92b!kj+V!mG2KxY0| z%_GJdH^nua>}lut!=2Ga9T+}ng(l~xJ}=dt<&n2}o+hJK?Lt=Ljn3v*Wy}G)_B{#? zbRp4B`VVSyIe5gzda93F!eQqXtpIq8?TS3Kw-dUv+qR@E5YZQg;0a$J_ogaodSTxw zWP>rrLImXk)Ei8ZYc>1iy-R{mTFx_)FnT`4#hei>$`7J5e-s&n#r~<1SI0IOX zPY55Awv!hXvG5S9^U3x;Zpa6CRsnfnurr+@q)N9n^ z#te}UWN>+GN>Y^-)^o!5H1q2Gnh;=; zZop|fF&j(&v)KvakKfH3BR;)mRv7790~)!}X%On?$IemuvnG9UIDZk7V*8IHvR$u8 z(S026ux5O8m_P1L11D2^TfkHS@LfoE?sR9xNp|rn9?T^5`LRPL>Z>o0(U|XfjRbH2 zfX~j>#qC0?kqHX0jeb;ML%HJsNF)R>y=XbLAo5_FUl4M5>eA|%O~$pHw6F| z6pWT!owj#&L5S5P+|Cd(mp-lQg1tDQIhr{){*1)K5f8jyA>HzF+P@ppt1j0d4;$u; zvY^@Z{L2gQQ8`c(g3#k`GV|EDP`p7y-BSs=>Bvg~XxT^~Biq(ysHNbVPuKl$cxJD* zMr>?9)R~(k3{D_WiI;?(cZD4`Uh3YddQ@@61CVGZB1R^h z)yaTN8(-+HTuv3>R zAbYC>R$@Rd0N#rtNWL7w`A{K47rIS`z|?DytYv}9Wfn|qZF7Il1~b;r zR)1&_m@99!%T5Y>ct|ngvWz($`xadk6v0Guu~~_p^>>ZF1oPyY-U`~W@}#b(gZ?V| ziSi#^;emm3{3{^_-KEBiA4q|UETHnnzjVcv;MvRqcmYJT{2?1FL|$M1nW=qnds9pZ z`1;QXZp(j1a5JI-Q^o&zS@^%coczgVd27pdBbKwd{>QIXOtAjb@cHGZnXgXX)#Lp2 zeRCrpI|N0vmg}34fz0}=6JkT`IPrV=x?S-P<+Q4$jE!T~N(sx+x3AQ&j-kMZ)CFFJ z1if4oyY3^nxd*BkZKD|$F_p*Q;h^5Q;F&JS3Zq0|P^B2~*m^t;KK*tb8HLtmZ! z;5`?#P~6cK!)pzh-fLRwmg(@BnUuzB2eESNs6*IQ4orpS=Nd2-9IAhUmLMrXl88^+ z)Y8kqK5bkRKWgNJ;O$#?J)X%I35(V6>GWb)(l;8(eV|uHJ{1v)yFh0uL^OsIG5O`W zsXBM|_eCS_n-03zL@$H=~cJ0g=12Cr>7Xi_Kj`prz^c!0&4=x<4lJ(k^YF0Ke7UfuO zB_F*ai|{MF`}G4F2EAi;{(g}DxQ>POOX0nEK@_sX&oH~ETUeH)fs#c`v(Q`}Ug@s) zBOfXlUNJSU%9uN#UT8LHzSU`nGp8#~Tz62C_iKJYFKfMrp|Sn5D)$kJkD^Id<5Tg+ zQ9}4g#=^$qwqJf)WNTKVOYSrniOF3* zZeU#pQ zdJJzJ_IA^>A?~EKuO^vYA}nTvSr?9fAb`**K)+4#ZV9i#H@FBBFiE%2M*7lbRYw6) ztsFcpmqT)Kx8A3rp7XY6XJ|IxQ5yrU-D&W`?w?Hr0Do4iOWi7^s>#Tp*L$4ljqxO@ z+M6*U=^m0RXzXEglZgyG{@uy;1XVS8=seNLW8`Xm{IzQM}A!swx?@ zGb&u$`BWZe_;y#E8yPs~^CC?`jV+NK0|7KuY3;>U_r%jOb0O9n%@;qJA4Z26656}^sW~ONVpyW3HfP=e#omgZ)u61k z#P~(h@8RRD6aPg@CpiL03&i)h*EzPTY)Q{LLDFNaHD}L>Yr=^aDb@RXWGNV zAYN*hP`Zg6JVzn1;MmCI_lCo|?#(!}{@hf~xs~&!jGrsx+i}UZSRwbS5R&7b4=km` z(nj^9$wh?{!dljR-MM6*EUzZRR;-kz#902gSLgmRlisBzL{Pe7x*+%*Y#hlK!ae}& z^J5?0;plcQl771XJt1-2-Yj9PF%9{&Yr4+*3LRx^%{dQk5Ak_=t(DDTr0kxkb=#9 zOIDV~d>^U&P@Eh=34a&pdleG`0o*l+o_=th;xtUFicgE1KkjyU-L)kj?;Fy71A3~b za`HbOloq@MfM3n)em!#qhYtz2c47yKzn!FnnIp9@0u7?A?RvG~n*l@5Vtjyw;j2HI zaGzaP^B3RE!<$2jXkabU;o0Vx35=`sLz7b*+0yc@I3|qw?~p2!TAXOdvDN06$d9p+ zvRfX2?8TUQpQ)in2u>n;AO7aU&=TA91@jYTiwWjTA6FkEl1kiL!40_ZKHttMxu4rm znN!+a2?XeOX>@cPrYj1q@^R7+jx8LlxefFK-s{_(90(ZfZJ`%^WoGXMjH@614dv*c-%Y637Q@kEz*WFDTuhlNb zXNLu4fuX|MBXHpq;69l+T)cEr*ZF0!2i&^+KK{pWq|)WM)I8#EaZ{Q*O9nEWOsbdu z0C%bHKkVVQ_MKps212e{;dVx3u|kMbliBW?lO==_@*c^)wT>hpL)VI#OQ=hT1mvqd zv;(MQ*DFbzWbC&^1!~R($4!#+h}vKpvz*}y3nD#$mfQL)V;MtWck`&~x3%YmM8)X- zmH-|M37youCGlbwoVn;@R2Oo;@!Fq12TdoA7X$8LIpz=c=^(aT z-(POn`<9K2gTB*_VjDG+b_dLGbliW6O9<5IoP4xRtm(Tb2#jEcePaCj4SQyUF$A|on;9(Yn zRONQH0Zj`FGen6fQca)%V}?eR6kNQq&W;Te9;gbT#cp>*RUIv^f(7N1->=5KO4vhm z5o#|w`(XkQATzC$l4^1hV&x^>|Lk1dhRFxROk=x%n(l`N(Z29+?RMWw8#`(Vm*tMk z?b(Ida<|RFLjvk5bjc|xC`^*sNZ&%=k_Z1W_J6)0YPu~Md10G$$y3+mbQ2J9N?{|e zqOl;5B!ulD-TvUE&2F44&V8GO8sEl!_f#}e&(|fT zfB`1!rv1nF7CZS1n3rD?$l!rQ8Xebs(kJVVmQV(@Bx_TGHT6``@RF&8tJD+e>K<-M zjeD}oVrQ{KCw6fjH`9+P!i%YT1a+%Ei>D^H_@$F+Jb@^bIA95ivDq;{&^E4Nx}+6 z68B;x(4>6T4`x3bm*%+>;kb}+S7mXcbfm&TQ*K)&V`G7-DPQ5%6!l#AzjrCpH`w`t z-a=u+?IU!ShK?x#05RcdG;#HRP~BLGqN_9W1d=H%M*(We6dpgii$=x7QY2xl`E?0XxW4v^}t99Pw!mmzC2OBDR)DWyxrTBe_+MH zQ^?<2C7*^hX91>5+4c?DjdbQr5bmO9Jbu`$L==;%Xk!ZTbnqZ&ZY+GD0)SHdVdWXB zion{RRmGJvv;j)a#DJXcg$~)6veKA%+|HT#g(}Vs7(p(&*WQNg*@C~QKm}1dnIhY0 zQevBCyCiUmrN7Tw(H%)-5lO*YJM7#8kk(Bx(G;$cQ5}^;Fg#=NVD2buoMQfMXK|SW zkQgz0#O+=Hs-vXb_Fw7r4L+soy%?1oZC~p@gwQwrEGGKjSc2JBe&+rxkJih*?ZCmp zlHyWRLKj~hD8x+ipx7J93`f2FV+UoNR-<86TYlAG?`dRipMm!!p6{tCMeXa1vQD!) zHo?7*?_Ug%t^s|JLM6kmzm#(?b#i898PEjNj+K63gC}_kC^RWMMfy~2l-Hk%y#NAR z9bYX=>A?t{qcMuhd(GQXf!kdb@~rh^ra{A(SW2?#PMDAJqVE7IK>oKfZ}!B1!4k46 zyF8@EjPg%x(ts@8QsjS&;MK@h{HEY3S-Hy}?TwDtBK)=^S-DCMj`^Kev{FBCAr6#h z)KSZ6_awWk2QrWo+k{KeMuJp>GqdS_JMwe%A0*b0Me#0l7>O&!N1hwxEn>tLrjroBZHe=SL3Hs&x z*ht!!RNy{uykT;me>5H{pmwq(Ms2)25Y)|X>_Hvv=0Jf*Rs)qr|Nno|IP4+Qzm)N1 zy@knowcA4kJFlFVhRwEM`xQKJlG93W{S)Q+`eo{(e=E+v#jQ?h+~6E#MMHn9Q-j!E zkKr<>nk_$dObRB_v^$FmJ(JxPi=Os#oq}cysz(yU&JfI@elo%2T>j>EVi6=}k?IEw z{=cI3={Q@NGup%dMItmfWfm{U)o6Z~wKCylp+#g?se>6EZZq-_RQ6jv2wndKW!~Kxb7#vFYLU?HtHmDr1zGA$(=I znZ6`R!b=>pa#%BDOeS0GM}136OHThji0t)U`{4|W5EgJ7mL%Tkp~ExJ03}!JG@%q3`f!5dH5etM{eVn|xlD}DI$37NfD;HHa{j?M_yI5Y4;#t*pOf5; zn{r*4Z%K3)CkYpBW)Sb`83K!+xeF{A8N2Zgdl~ONyeV{P@d8m~$zO-Nv^yUSncq@) zZ4Lht0oQ-$ew!QIVZx32{rO@b8&-|}OaG=CR=O{DisaLhgl81{YtfbPuk+mBtoa!DJ(b=P`uFR!E&qJ6y~t*jRGr5# z{WS;V0rpT=<}-2OX^BV;zwgO}y43lV$vx8UI_ly#B+zmGJtqx${>&kxfi60_2_K5w zG^b<0UK$)d6Bic3kC`-xuY{Wm^!)!A|^TmWyf9z`3=<-vhP<23VOS= zDZAwRhq|FH)Hf&^A0W)SN*mVGV#FereH+fqDH6}-D*h$u!UMi;cIHzR0nf5XPWenhY}q~9cr^`P>G?= zwG?h0S%BOAUgy8k zr9@TtCV#3?UHzWIYf8j`x@2J<5DoV*7D)u%f0=XpbUBlHuS&>fb@U^xby0;PQ}>bK zp}&K<>&3Sdsi@kv$F~>d(_ncZRPWvES3cPAJY>0I1IKU|K6#HV)$@JnDO#^FiED`wX{Bs z$CJ*gLa3ak*9;n2;b#a5fKl8lQRzHXfXZMU$=fgH26m!h&&B^7m7kXSpT1bXH z!f4yVM)L8$4Yj|Yv1GnZzj*ld8VQdF-y^9;Y*&(*6|sM;%!w_N0hxd>f_nEHR6ezV zP@ZpT^nTe|icZ^ppCN`cTaHspJ_1PL$+K{F(EU5YqCO-&eCCxZ$z4M<$ewX z0j~DDEpzts*_7oWgAE`>yaTH#^J_GSbr8T~!GEQD0>NP}>qZHBh!QTfRnaeh<~#v_ zsVYsDht5-d8#TO*+GY1c-5gm@a()azy}H`lf(WzkO9SU?tUx8>*27oheb@U^b)Qy( z_i%g;zs%)ks;(vGN?{xUJHN1|=9EtXeU6AEbj{DA$T-rSNr_!1Syk8}yYjsz0FVh- z64_OrdMuRwiafw=%FB0sfO5YK2aMCa!?4CL8>PCP{tXjZ{AQaArftjBIPz9M(rUpr zI{yDHYpxSysHcmb(p97WFSJ>M!``&oPRFU3-5&jsAW!s6*!)2}?v&@Ht7wVA*5#1K zZ`*}U>^#{gPm9F7950yH^=re0ht^vck1IIXytm%v*1MgvI5fmxJds%(1zp~Ig=z6` ztEFUD(aC%>^k6!VC*bLU8@$)rkJg+Kv*HV!f<$^%i>ZcVx;9lAg)Q6sHB|JVkycC) z)<0i4!U!6^7bWeTf6|$eSu-os(^{}?24$?n%CAz>pQXYS33`3rZz8@IF^rjaBhU6d zvM1gD*)gX>)=HtGKY;Qf@Y1ipH+EGa zuE0UMP?Ae+a*&%vrL1sY-VKqJvcJiJp9+&LO;&920~EV9%G%%vFPBKVoPBSaME-p{ z${7ThBHL!5y+>8`^V8|LVpD1UdCtpqce7 zyDbIqm9bge?AHUZ!t5M(bOR;EM%OJ8!K@~~ou(EHQ92Le@0^W9m@OhdUKE>sLA9tG z|51Q@u<$#oroS2tWy~=JghlsfpB(>`VA*$RP32_P9S5!pHB9KZ5fD$OD9MWu7*Ft` z@&uB~$8u0L5wNfsEeprFelR~z>B^oxdGlIc>u&l8DVS$@Bv1gb7%c1MWf(iYl{e8q z0hu`)Pk69r%Ao0_v3)thx;s6NYhmqbC8v9Sa3vwl8QuR<0a|3j@0C7}>|*i`kxz!t zk2+_#ck@m*o3zTvs+-BpjnD_!a5sbcZh6Sd4#9m*^9T00F26qC8uJuP-$>$Wom%Xk zjU#jETHwf{_Yel(OcSC^n}G{2S$9p+sA*w;NO$#6pDwFPKS?#fL)G|Yq_W2HROZ6~ z`oS*kvj%x`LFc%>Yr?F;PDV+dS|=H)_Cv6GPm|mC7^O+GodhKl3V#)`dT@M7Bpjl4`8kChBsqbf<)d% zxdY08J?4!VA6_RV>b$z{n%eq8)oorvS`=V0&e2fVl_FntEe;Oo5KNCV5Lh*l)PomC z;T6fb2Q1g#*{*RQ2h8mFZyOz6u8w}M7KpxhT22yX@L-*(1f&oo4fD0GnyIga3Vsok z#)f+)yo4CU`?Si=G+2=n;x?G~fTNr%T;ii31$+enChBr+vwgjv%#Ny`Wxp)%^>Kc5 z-}IRtdIVe+8+b9%T>3w+<92t-V>FeeuS_tRamd&?P*>X7&1Pg=2etw=W9lq52!Q{! zoJAZgCl@cy>uxsweItWeolVPF2?_u=18HH$=S{J&zx(^N|6NKJ0=H$Rv+-Ht1W$MD zNgYg(C2nwS>ldOzG4FPcvJtH~ac`W9TBosu4GCE}6*^AMyN2Sa-Y7u*}+H>2x z5?)^4NF#tvd_Bau)R|JHK;8Ix19%c6WHmqw&C;05OWZ%D)i*+L!Y?8VqxO5-JvmAJ zmlr^I1x6dvCjFNj^qcz?f6q2k;A=)e{=XJ0&Rbg^Ov2C?$A=ZrJV6ZSeJ&swH+ zzdhMrFs3EM2k{tcnD#kV!ePfm`iOLt+{Nd0@CMX!D~sY@t=I-NtI=Q7 zc9=FBft=6Z1MlsXxhhoLVdk26k?r-Jw_sk4Gz0l>8Tx#4;-}smI=Z+i8r!DD%uD}H z%P*jNY)wtg?R6b}zd|H9Vn3gz8@O%~A@ADQd4v)&K=WdOX^{WD9{%P{cKRNDAI_kp z{-^bAY+S}V5k}4<@}Xq^-*WgCGd&Au@_uyv8p`M4z9`;Tb8@6O#+ThsM^Qt3l4BHR zve%uAW*#1z$fPO6rF^^)ii%4@A?27!`tpD=n{|qs*4B%NW+Mrf@+sW;H~T_8((eTQ z6;@V{BF>YgRs79nTFS>`*K6IhS;#B;b?q4JCoiiz=8ymYP-uLG6Vn&Bv1wJ-71_hKQPl_Y*Q?m{yGC7g`>iOov+kpU*$CO*hyyDp2&O~2S zxz_^zdFXAS-?8%xy0Hk|?UeI(lTh+CZ13mS_Mf?-sV7y?wfO`3{9O>ryb7`Z?B_nT2oG!Jy?vC-3Jq5#`t2ibkXV_Q!wnvQmvP^NP!6 z_-zu?3Ci2=`J|@@UfCrzL;ZbaeRgd4qLu4>V-IP&JL*pk$<|^15EQto!XFKGP%wah z^kJJ^i2yvRC6MR`So?>1e}(!F^#*+nfwUZM>bOlIIL%uNOdvB>?@?3^2neu+`TKa&!7D~IweO!hFha>LZArVy9=U4z z{R&PLT}YH123(OB#Sqj!S|8*z`077#&sLR{Kjbkz=|r0{SwKgwOUq<+9bWNvbMK@ZLP)*3_1{9Ppnr0Sl3RvMh4vM(;V&@J&nrGQ=#nl)QsS5g0Xz|2+P)2M zZGB{}Mses?y&cxJc?lwZxl+FuwxW{AXBR`nqxliR%%SIQKK>RO73+uY2x9z|%>NK+ zvZ1T;^=oL9?|0b=KF2egWdS376;n!eP{3DN_g`?fws#Rahz)2WiY2A8dtu62dkkuce6#56-v$Hk^oc=~S@0Y=YA@3gZvo_1a^{&1udGkaprmD|CLSLILD z*HcB`+&=oYr;DdIIjA`Iki&O10*{klA4$Z|-#WUziSTvs!*yo=qm;k~h%bcnBlg~U zsnE1*`{HY_0Yv*|&+bnVuC-ogwpRmWh=c*Zs3SWl;Mdm7Q7h2q#)?VfLpk8TQp%_- z&Xer7FwmoWelvAJz`FLRzNo|u-kSTUMv%u1I;t=5{Y={;`vCs)glk0r$HwzvGDi;j zbQTQ(jrdn50*(ksUpuhmdhH6p06gvMM?2Tg{DQDZ3wbtywy5(E^nfMn5jb*T zXJSgUuPUI4ZU~cLq_~wGj^jijKRnn*{KceGzoe_YZL)heJhQ`wegrB|U5t)=N4B`A z8z|wEoBOx%KwV>eXTAc?(aFi_c1u-i;(OxPqI8B9dy6F}m_q1&$r!1U+q2&}zp~7L zwebI;x-svS`|J!_O0&Bm9!88Y@5V>$u_bq{S2Cvl4E;m+pfUlTjDy_32h1mJQTDwc z27Kps5mRts&voJ%8=Vrfd0=<`hlGgZaC7Q!-nW%2bNL+vP*@J`==B=Wxr@!KO8rXEg#*O!&xz%$P zh&(rY0p*~reVkhm(z$@+Xvzb;IUXkA-Rb4WUmX~mLLEC232WIHYGk9JhX}aw35Y~HD9bWRKC5;z>L(Dl61B(@tJgy&lQwPCa?((#$BWIoP-x!g;AFiusKU)kx* zC9bYu@ePI%^GX##_*^UShl#kEL)^EtpD^Kzx^0FZZy^uO#C_=%m*Wn%di!;+(;0$N z&r7xceW|58QH2d$>HroN+xy20Cm~h^Ro|Mp;c%Ou)g%AxM2Iyq&Lec-iJ7 zK?OpBR)8H(+!QkPSn_4K$;bnw(O(IMjZzlP8;JJvkG5%+bDt=fn}XX;YRaAoVqqQA zaQW&pNHv>o1I=lTrb}1kF?1)4;rd2rQ%;UW#x_R+FR#hawNrhk$50sowCTQSdHT{9 zLCp4F&K*MokWG_~1hbLuge`$z_&CAeHCI8A8nDP{Pt&A?4A@Pr9z3*M9)x5iB8oiM z5ZNgCq)p>=+C8Jqzb$8UjBN(ueMumuMb-Z8yZ*}P*EhQ7v>#1*pbx2u2&!s=4tu`Q zCA+LuxF<^)(lW_K+jb+;eEz!>syaU_wjZfdYG!fJ5IRExPzl7SkRj$SN|!hQ02}Ay zexe?_^*U$GAxW!q+ZIWWI1@qaA6G>s-tN~aGt0hvIqvYTaLKN(C1hqGTH9}JOBFQk zw_jEV8bSAuqU*P?F9qA_c=&sMW<VT`K8;ap&%P5YO2jfB z_?LGRiL)Tk_)w-EE3bmqtthp}E*x#yWi}i>N4%@qhsG0B&0n>(k=L}-+{al-U9bRu zwh7AiiN$3CeO9LfV3t{4n$6`AoQeekHS%fFHX^@kkE`eQeVb0Xj}^p87b?uK<5v_sg3?k=SckEkrrEdLLej>lTpQ(?%fKfHxBF_~?9B8YZYheV$g0v> zx1(IXVM-G>a79NCZh>0Y;b|GF1ps{#3c4Z8Y+JzSww#*k&@+EvcEftJ)ybjt*Zq4j0tmK1SeG)Le9Iu4sq+G(YL*(ZUZ zHC_QrF6#)|g5m#6XTrlyczNr}S!CuMVVi7A)y zMw{v9RV?}V*jg;A)O}L}5xdaH)H~i4K1Tk9+mT7*$G(d$F2c8;@?tK0(%}ms=lp*L zDxJEaY$-0KPXdX8p;qLXO3Vb$-iGcGrL_xh(-G(J_&i!@1E6*zQV<2*Yfm3v()_f- zT+dyBYCyDCtE=Cs;S;^v#$X9axOwZ4U~y4Ip8*HP(C7U?8lpCBeBW> zw?tNd$?cH%)mo&u6xDLE|J^zk`T&rPq#sK6zUTWVvjGP-XaLyOWxOHSZL9(H8n))# zgUWEUNQ^t`__r58vufl_>Nk5*&Il<6t!rU@o3X|h%353)2p2YvFrgX-Nw_sWEiH>= zz3m(#PYBSXIZdP~+jIjOwVHZhDIk3nN?b|}jPqTVTe;hd6HqtcRyupE`D(2)JFWUP z!HaX^`l@#LFnO81agD3#rGH;r7x6cOdwA1_!w45#;tjGr*!KrW3QW!!P2jtO07l9r z#ESOeaMdHjKbBgncoYXdzjJO12%VRVKmb4{VW&^di)$4f(4S1Q8s;V4y3q;Tp^EES zO)Uvgf>pl*3j~Nw8?D*;G?&F1S(D%9ebmEr;F`PbS2vszFoc}p=7`T>(MRr3-uauh zxTI8whb$IN({xg$p7ekHKeWA7P+jesu02Vx;1+_ry99Ta;3T*Pg1b8e4esvl?(PuW z-GaNj@4@%2UaNO^@7_}X{~pY$NpS#$j4__;x$Yb0kgi7fb`U5YelQ+hv^c@$<|gPl z*t2NWoq9-zkFz?3?999ISAW5(KTLxFP4%5FcH8UhIf2>s-s1rh6ZTNgtTMsYAl> z;-{4Bv_T6!R&-LW#{n6Q&#Jd)Aj4|5=uszYqmrY%SQH)L0<=Fp{%r+QW5vSIuQbyw z&(tw4{On#sR8PX>k467W7u^zd=>%n!35=w2=Rzu#4)>B?sd%%XJhF(%V7&BcG39Hu zow~HZz3lk$J}L-wed{D{9Js*#=MY0IVcj*2v8Zh9IBa(mulCY2x;$I)iu7M_ZaWk; zCJgv)rr0$<07ZUC{&@Ogt{x&6?;vtz`AtsnE~rxuwpp_0%=)$Ikc`(~v}qK>(tpKy zwt$I1ex%i*!1el%>`t~i@Ub24U+Avf1rQqi8Ll!a8didpLcG0+ye=0Fuhn*l^kCu7 zL~qP?UeS?sDb`cR2Hod!d^$5Iz`rRr!H&*S6K#m0lu|tGIX2@{v!jGgepIm+;jpjz z)UJ_G>&H=B^+{e%t_iA{VfZ%YsP|O>Nm8^U5N@HEBIxH1jTIC~KQ})D8(ZJ<4gb9z zH{Q0Z_aJ~ez8!7a|1-Y#kI#Oiffwnb=BuG(ZNIBs)n88Q_Q-FvX|&UChs$BFo;|SI z+8pBY^E!ZjurNLfGhFtPb!W~gvx|-r^@vTX zfy8V&$1vNl~M8FvQigt}Kx<<`_35vqtJr zY0sKfaXVz9u-h|uPb~ohoB5iDjp4IuQ?Wu=3(9yn_wW)cCG36c{k*ZHi5AD+&%!Ew z4mv~90+IOv?dP>q|`f@l=zUk#I*fDL& zo$q-(hU400XbT!o+g}A4KU#7a9`dF`2@mf1v4QLA5@zv6YU9<69BSq2pbG&2?ht8F zo;Tv9>x--fy+tUu=bagX>d5a&g9CQWgiJy6c8xpx_0=?Gm~&C3n;}-$0R2&3_NDDD zSYY}D@?DbbmUc|bK}Q*aj5vWaRF^R=-g5g@!_851F#ILt#OplRbHVy@AIaz`YN^Yr zEB%A0yR$KH3vW2P+^UkTlKc_s_K+p5F`hhHOCtQ3gQva8U$gXSAP|Rau#<8j%8EUC|5e(n8vOd4=; zw)%_?Jxdp2D6wA(k$+SH0*yGcnH)xMXiaR3iTA->j&4+JG|yGIgHDn!V~;G%9y1|(y8jGk{apHo+=kCuYIJRn}4(1oa6pkVG>6_$bXxsLvP@m*g zN16Ehg4r4h`|qJ7`nl!)BmUy}2mYE&CFT47kACG=&Lc}sP7o8)vf{1DqVOa>Gi}x; zMo%HZb%Z)PbmSVeDJn+1FDEMZLcqqt9(2g$1+h9@wWTV2mDQ^@hCj7UgEUJUmoJv{ zYTEYh7TC`X{Ve(gz-+PR2z`RF=&Y(A6O={rJX;Qm^4hlW{X4jao*ey*xE(V4Z>S_) zG|B%3jA+&&Tpm(AhoGz5QmK?5etXrRZO2TCyq*{FeZ8~>|K2Wp<{>W!0=3daHt~fu z`5)QFPE;c=x;vfX@z9ZSHqHmdkcSpl8y2*?qg|%~ckl-{YvnZsjqY1d>hg^_cSlhI z6VU`1eZOxYOM2yC83Hj;c!0Wii+EPCFkrHXYNrUtnL^)!54{kT4+RZ~ROIvXZiOoADNSWlk( z4jaJ5g|!L192oKp=xm~K_4MnnEXhG_3El=CFRg7ap+-_OEL*kplkBrZZ$f8-Tsxw z_$x!KCqfBwZk)qhO7e$8kE*QtcXCpsZu<6v^HlADJ3VVs(t){_w%SPx*}%`dEqIc) z7bF`%tcGLbagkq3hAG1WnC1GI+GZ6(U5&T71zyZP{0}vM3je&}*Fg)LH zbF(L6pKB8j-JQp3^2UqTYu%OE2`f5vY-vp5{S+=qg zY47J+uGb2blKBFCeW~K|bUaQArJU3W0x8WDZvo5CAyEdtYZ2*D34fgw=;H^6UKZhz1q?Kkauu3j7=>+V`QLXcan@cw249mY+H*f(0XzyHYzHo(yx|BtM`Ql%7m*J)~ zFz?<^ZW}qk*zSB=UD-NfpR%85(zAY8($jjnY|WLs-j0VdbI`7JS#aw&X5O)EOW^wR zI3)Y}{3AiK-xvgHIp|*vQ)0Df@73MK^Sry!jJZWSXGNstB`9!->MugZ0D<&B_nR|a z>&j`Ex^C1xT^WAWT@#^@MgyNc$o~L5963zK1ghCHzUGNPsUg4|79)wT5l4+~1C3@? z%r}d4$|j2q8Wz~3a_jZdNFkjdUhOM5Xe-g;) z$4j?o$c0qP6@#+y2{m26ETZ17-0P8X=p3GZR-HnDkzAV$Mk!p{1g4D&}r8KeG%r4jr#zjr!Z??H%_U^sYxYRCT?L@d%;OHF{)i)^KX#G9! zai}+9Fu|Qnc9Y_kM}QALik= zyG{$#g#P{u7u*53;2gwcWuGjFfGCNEBln5S%-G`NEiX9O@e0^1;U385ed8^b474Ep z8k6gMyB8BcVP2P3J_c_iP#1KSJNv^#n8)0AdEPHA&!BZ(=B`tB0V?h|1pQb$ zE5nV*MV-iA59fn%v3oKJLnYbU$^9fx@(~%(8YAi)MUB{W^F(?k%`{W482n|b#iI3y zs)eK9mABP_MM#Bka(Lg~lL#qKqgf0ze>b{#3FiBA;_}F?_YPz=n_a@MDxYY!w$ED8 zTLe!hSK=ura;uG1&Cm`<2+w*-Zb`K{x7$(%2`P#a_U)^m{LR^3uYTIV-8orSPs`I1 z7-k;z?4s#GGfm1W2387LKR5~E-^2N@%E#aQ|L5VnaKr5FzwHA2YfwM^uR(oaF6f_w z`j!Kyi~#lc^tdDx>+f@oRe`SVvu;&mZvQzdi1HH%hW|fh1?6kNTtRcR$`CG3wg}dR zjTl`zs1we*3`5g!@RdK?8gBmya9IxH;LG0F5_DWsj-q0N8O+ZpCs9!DiQ(V&e-0stD+MU!R9?~-@M-1|jBe-q`0~rdNFzc~>y|Ko~ne)T} z*_6OM*ZL;O&;Jx9`bSvPhIn@$0%1{8Dba`j!{Ioy)PFx5x0w6aaQtXcoX+NO$+bh& zHXJ`Cz!eXPq7L9hAi>6F6)4lX`@)UI3avXAs7Z}*yw{uPho;SGgO#V5$5Y9!o&hDQ zgzku)kQf|>1#>M=dA5GFkz}@(W9Ne*hfS0&U0bAI1?3k%b7iIbwell&e8mQiDyfyj zkpr^>jvXIt=!^q za#RY0k^AMQT5-{z5m|l2F_?&S<~|q0hS#mCy{o4S6DC0{7RT<{UK3SU`VTU9{4PUd zYYurm?KEX3TSn?qnso!VqIzc+>fWfMsb2q!M4X=V3*g`4e~836c!1%@>Ut_W4qSDi zS6jI?F=N!6GCKQh-6FO$miI-Uu)U3{tNh9HW|XTeaLfEpb+RZb3bY8nK;-vMIwfJG zUK^^c{Iuio?vux{xSBre|qEK|vOivsb+1k5`uR@l8TQ=m784so%t&TotxDoqm+{KvO6&3w`>o zP+PK$83k9eQZUY-fgo!b(F`06B|HS(QO0W6pN7$UsZnQRFdUVs?8UU7qjmoEp zuX00w7)&p|kG--M%*?{*v+q8Tn~biNy;%-1TW|yy^qpuo&8_dZRT1@f;gH2%JxDL4 zh#+NW4W zOdz19>Cb(ukgd7;0w46I44M^(KYtGqtM#iQg$H;Y zuGc+_e)nKW6)7GJMZB_RG|x>ky;0x7kNvj#dxxPgeY2jW*+pSikLwrCt%amZYC^C( za#UG^H2HBu^h;ydN>9l^aC^&aW^JN)-k0LpSYWy&(DTRu0@X)ooN*{cJ2!59~|LxI4UwkN%=+BI-w z;jgi92f}L70>;$r0ofcOpO%icjFl-Um?E?D+;%feV1jVQZ%oKOlyN7Go(x{hmE2i2p&!#}!3_m@P#O zZsqZQ_R}@~wCMdSMERc!Z{+YA0uV@>`|6Kl&|j0%<6zNHKtGsNl4Hqj{p0`W8&FO# zbwPyqR7IL)3rG%6NEK998O<@DbruE_kaKMW+U`0gv4-V?o!NH2IIyn6maatQ1!YvxJ4$|)~~ zO$nPj_L%F2@N^HSnR%k;3}Q|BfoU~ow&&UT?L2%J_j>7Uv$mQB2xdV@aNHBH5SlXd zB;TI^!wgw);>k@I)Mtq^6iw4u)>c1&f{Bb~&N;nru-8Ek{7n<&1@BM$%uGR9pY^j> zcN&dk?XG*GB3G+oVG+Z@wd!NWie+bIg>pKj6heU3K9O{k3Y<}9a$1VAu6*}%5z|eKOYr-~^Fw02bNoQ;K0pNq?t z%dspOVRpRd4@B4uKKzeE6okGK#|ctGou zur4qREqbb{Q2YXA1j>jKj!IUd#E1s$gFJLaRUA=ikFMD3>?;wDP0{=9%3#?r)PeW& zcAf1%QpV<1LchATBN-p$b`|9xn*9h7sLiTi*&4H>l@GdWA%o1_(%f>k6w}Kb1-^ed zh<$&et6Ofz5z7Jo)qXdu$piN;rD7jE+{4E~&)uq;hm+{pQ@9WURyg&Sw`3O>8&NDh z#24{w#zP`)^2)pNKFc z?s^5V-A>}5b2uljw*7)KLkN9Tchgo=rtW}BL`6(A@5V;fz2=tUArDr}XvhfYgBt+WLN)2)VZ2 zl?zIvFiE*pPVDiIpDU8AH{y;GmxGB@P0q}K*;>M7jf-+Z$dQGFh0x`|1PLDwX$>f0`<91AlSRO z-P|+4u4eajL60dh`laB&7#QgFs3UafCKRCst;r1l&w)DDQXgFv$tQj?6(eUC?j&=c z_pX0awz+c=x-xXRo&Jsnk#h;&tKg=5+@VA*Yf&9?_C)DN=7CAn`1JAC%Ex&$mAP4F zdm1^UG=L*fPu)9)I!b(Sl8S#ycWhH^2~KhBNb@|%gu!MZ4mEQ2uCk20N^JxOW9Y}H z=M_vaW;UJzg~~!Clj$}eV|;f`ITDMob3#kvLRj zhu?n!^I>yg*TQDyJ`|4oL{#=qP&XSa?5VksGvq2q+*Ojp%sZ3!n*y6L%kJmTRCwvJ zRgK}2bzl8BzGQPsijk6<~0;HLt*F)6yGRF*~r4DPiq;Ra&QbzaZY3!fc8Nn&^$nL(zcvO&?~0 zihL95?H10(8SC2iag@v+v6RSgVS59Tt(tsS!laSre;P*Fn^#6oRmo8 zm&|s3aer>90cS!+nTaCxrPApCz{e!~CL7AwZ_5rJsD7kQ zj~XLM;%EHvT_TO^bjK+BXQ>zk*QYh-lp;@qLofnL5$n2D#;;1VuPKWrj?*?gw}~rF zZB!Fw4ob^dFov8`?WyI7&K}vqY>dy2tvd|(bfoXbB}y~l_O*U}^*6iZydntq@2#g| z?CbmCy^uf7RcHqy;F)WM%2QC7Jb;vSh%=)9t#dQ8(ezZU=&KGzgtkosq0eNP+bk-@ zFIVYXMMnRYEu&WQcecy}WaJ_&>UE&FIs7-ZQ$>i9JTin#mP!2_Ki4vM(c-3U0kc9b zvqr+767Vk~_<-R+AD-dP&OKx9DyJq->oZa?>anqFL8)as-=W((P!ZqD@|m@{lAHRW ztNfW1Thzk+8`xxBGWS?+xPR7*w;U?M5v)bU?UQ}Z-oVk^*ji$9!xdmS$SIR+*er^9 zr{FlHSJ~`ULwG%L|i&L6T!Vd3}Wrk zqiT28h}o-sbBA2>tNC6YsUd&OcqNmNi<$*C?X$%K1o#rpsNvsfw;`WMJNlL`lam%*O%k=38h`J^G8X9QPT>Z#xSH$6 zXW+NW*_095pK-Dqd1j3;)M0I8?hP;|&)0N0}Sm##NGQ*;kc1ipZb5nJ-_= zsr6E+#uc&^5?)N7So2GsxL%5VDK32-1H{vAli zY)*?0z0$F@*pYS0ZZMNe`L*$(*JHyN&>J}1Zle=4Wh zw55vZ*(_79wjg(p{E1Nj*ju@@b4v5%%)%D<>dXQF$!zOd>+P_>Dk6W#O0Uk*Z&Mu& z*~5u@o)rFh-;H|XJSJVdb(pk(P+d@f-lj#$-&alF_rleBv>`KQo@jURdkq1{1I2uY z)xcDN_>UrrOqnXqFUA{oXWMTp>C891w!ntgfmxm%nWU@P?nUV#HHgn>9t20)mZ3&E zkV~h7D*Z(>hrox@^+|AE_mE~b^iSW)oy#qAdot~Wp2S!wBq>xmlRk{z2edp93j2I+ zV;AA4J9wT{Txn%JcI%gPTO$m2-(0)HJfR={=Vj`ybbBLV&00xXFil)oqqgKa{Cc(< zX?Q&DhC=(VN@=5(?;g}p(XlNT-rXGMD-nbA%dNf-43j;PRb$i0rFwqM_4aFL5`Cgn6p4J0D!vDmOD-gC2R0!G6mN};(i zX@?qo1@UL@F$xQ0^W~J=1&u6CZRR_P%rlgn?FwqExsHgbKlA7gWau4d$yBZold+||W$?eN9aHFjXpzSzM#vW+Vco7kw8pKFvs zXaMt5`x9!v2nd9asa+Wd^$8;k;T1=j_*suKCPxHG$sM&AtT6MvxhsXmmxU=eaF85P zYA771f+hZs?v+;t`l#>tEm*~><7eEy=&Fg!&biaQJnwg57kU#D4||I)Pdw*T zqEA=IdcFF&=#sPmK;vc)!m31}@`HspSAz($nJFK4J`W+HJ>~Fn`Tg zUh$J$oWg64zJg}Pg23_!7W1G8av(UH8cJo2A79Rd6zR(N4=lX3LVasuTIr`DcWB|LTh|xaDY0RyPB!nFXk+#}efaeX4KW^;| zQ#ZCQ&Ny$xEDRy^VVH%uT%VRJ2||Qu<23Z?O>8(br}T%VSMHb@glp4tH@`NQ7Bx?| zR6%PSV!PfxGtL_a;CbBL^*GvH0$hNVp};I>H_PLV3vkc4e_iP&$eaa!@)?v|*CMHB znncrTRPRh-rTgZ=vc-&)MOS1|9&6#YW|iq8e(n!!+Fr4Nn^QT(Yj@$%93fCIRO z5&$BccLi}=l&gDDWBl)r8pu*$L8nF7^Bwch{iP)ZvFP@boqjw~PyJca2bP30Q=vm?~enYp@uYMD|dh3RGMcQ|x-$ z=!Mr37joCDeiIrdRdqD8=rX=4a=r--_PU3nEeDYA3m&^V1IS`j*p0P5Wh(4?s{3&i!_P=q>m;d1PduG{h9F_j4?3#6<36U7O}%1TeyGEIwjn8ki;`*-!c9$xnBX9|xHuKO{KVG5 z060n(5I(ZhLj%LWc~GHZwGDh9N!|n>06V1}gbB1N*nA~Q)yBO1dhl1P0(G@wRCE`j z?7`g89j2$B=W{(93`L8qKFq%qqd+J2q+rof4E_ z0u>H~nUGqJGjb^kE+untClo^orGpMu`Na1U3zIEt0=Tf=xSIG1Q%n%3GjD8{n2Y4q z!BhIJy81;~hBSx8mIWDA8#59pk!RQeN9`yq;E!4T#s=LQ>2G9rNY;w9`?1YgIiF?F z*q2+KA%gy|i-U!(5}o>-N5+p}pj82T8u81(C<@T35bvLcNSoV!b=jzPSTkqoaa#u~ zD6U+N-D7T+;V1%IU&x|AYzIhs)j>$_ZJ8&2ZpawH_tuc|Y3WKyMY4VfTCHb`3IZ&f|f^)}Swe zgZ+v>=%QCftPr8jklr@oOJSiU(5i4@sZ%pr0>NxBY*PZ=7M*v{hQs#w4YK($2b1`t zPO_uqZ9FV|tP9HpA$RqZ=*Hc^@{KJF%JA& zFCOuf$PNDC(%$sY2PfiS95udP#APjXn%#qvGrjD`a`7wD>Sk!ZLT^=sruN76_&cus zhcDVd?nhD_@k$=%-c?0$y=-kh|j7ZlVOP($_|)=j%ha$nSptPml*Z?G?D?BKWU4556S8d0^M_+9D=Gs^x#e z!d1VQ*}h7sGpan>ZK>KNwDy~vY=m7mg!q;RM+TqSEKqy>SWA5dShLH_hDbqM0A ze7XW-!+)D6Zo_1f_uSs>7vAM(s&qG*k7?<05i(<99ULGDaT-$Ra zXsfD0PZE81v!1ncjd!9Bmy= zP8;DBo$+J2L7SENR}`PFZj75*JjNLOwqk{cD`Qiq;d!K_Db5k=>g&cvw+;SDJHx$^ zK+a5e{&P+HsjHW7ke)xg8Bk&SFDECgcrWwIr$v#a$i@N*66(Zhk>txlG znA1jnm8FJPz_T0obT6?qY8VYvFF%AArM*=Bk+5ZZC2^STEB@o`#=X7uny>9p?P({6 z69*OVfCpP*DLn@pDQf`EHqaGz~WWMvf>PTY7V?AQYShj^o- z>3RMtT>E;QYjq(s5l0EEI90(9s{|J3%3V+FX%kZjrWD&}RF+*!W#jaINgGI{`*^m=A19lecsyu;l8pR)*)sxCk^lZXfc%9!xXvo=s zT7`d4tscFYSCj9ej?<|732E`R3%(c^ zJJ4XH6)m{>b-}EkbZLmt!H`bHWn`8t$U>m0XM}Ks(OuXR@mMJo?VGrVT9?x$wZaGd zD^;C2|2QMf0tP46m9ZM2;~vjx7uuOEaDFOs)Uc8>9s;LTN`={50znf$phEKyOg*dSVXEV>JMiOV{or;)rrwcoW&bU z#WmS|CF2v#mm^=%XhBcP(`rtg+X3{3*$ySo9IHhXm$M~8IG*2OR}Vk8AYg*j_y;Xd zIU>3G`VHOk7sA@L2`)-f+to>NIdLc-o!$qbQK@yvse$dQ!=Ffygf3f|Fxs8&s%tkH zpx(YRw|Ec1igHhS|D#ud`LA9DbM1fhDmZ!s$1@owU(JG_=8hS>yuKq+L*;v*UA9(b z!hj3X_|HsFa1`iOsOu;i9x8}wyL;{``8`q)(e~D>z&qcV*&i;c{p1NP=#J-f*Ld{} z?VexJ5Qt%#RE(xz0si*_7Q|nt4R`Gk4D@%fSqwhB?qw|_4R056@P0Qki2<9^$2`9~+Pb;t9qG=nOI!_(-SB zog|QxPY0ynEm7(~9=Q<1#S$LdD+`o&!_8m&YvMA9X!XE_4EWNrDFzqPAY_yAtq(rP zKXm!tQG(61#OaR1v5i^AWSC%~N53>+TxXVq4df|%gz#3IMcn;+zkw5iy7Kt6ENGgbBmG_Q5MA#B zfy_eVZ}-N!`Edy2NKaqa;g%r8VGRX6$86`G;^4O2hw}-&nS#L7OA%b`N=~U?Q->xG znq}46nHjw28O-j5zHQu6{l+v7;kmm!8rl%BKI@*6{<*7)Ijx%Wu%Wi`8w@`eb|F#~OAydj|9I zm(r3<8mk5LV0`{JHuuYQ^e~ZZ&nr~#cP{&D#B))wE&w^pB(bizDFon~*@|uC%wuAtq zB?_~SIsyg|99(f)t4!lU%W@sxDY`%e;=5*fr8?TQ0F!`@l}~Hs8|SK&$&UqSc0e-5 zS3q#svU|dfzIM6gr$H*w#Gpq} zz_tzJ)ByvjO_eKsCGBa+9SVyGsl1lnt@yq)S78ETTethrjGN3`5jls7e!0pmy^n2v zSb5B^RUp#aDig^9!K8Xq@H5rgC;<>0@LnD9@(1fWjv|elZM}$;PAGkp?7rK z@1+r(r8NsU-qRIOom(XggS9j_;@sXGoEC1LuH z_7x$B;Nk*$F`!#TL>mzv*y1-}s3=j|p!OB7(94|6HOLmOY2z;{%4o*}Xlo8Wos z6y?VcV={K1qEXjZj+0MSx?r!S)o+7;MSEZot3QZ)f8P3m_9i$Cw#A%V3oF#qIki(z zfV^bl#EQD5Cf$Q5uD# z{1;DxgD#D!v85iwB-`6VzLqZOr{i(9Zj~rX_oR6<99YN60gPK$ENxsUPdO|A@FZD= z*xAr~?Gs2*T~D>0)wg1Wzeo}Zg*OomYoEjMwcdLaca7s=S}{u}i^lcz;$qi8EDhVc z6LQ8~bj((scIW*uSf!KK`i!vui6W)l|5`Wjwh_2njM-amD;p)d170BaWz(yzZSWAV zRd1%Z+@BT7fPk!iudCfO7+!|FhoakMN=5D#2Q3NOl7A5-$XAQ=#WCB(9M!{jR6tcY zihEBba6@=T`GI_n<|d(TPf8S(T(>>B`meK;rn28)2+Zntvohu=f$)Kju<) zY2-z+hEsfz7`yZ>R(?68X&a` z6DQy}sNK&&P8F;?rn%+K61$M_oUdJcp&PEn|7>+0O2v`9|L@34nXm*@qf!KOpMjzo zOKlxD{r*u*dB4Hfy|#Y=JYdv)5YlqWPZ>4-uJC2mH~j)jMnS>b;I22G+ml0{;YvqJ zKw#rXdb*jNngS6EV!7|Q2KO%P7;o1~esj2)8_w0&ntLb$nkcKSTi5}SnV5?ZF0pr7 zo1#r2=qiH*lTvG;LPd1X8+DVXF2B3SGhm@+&6=reXYw=JQXwbhv}AmK_vuf-fKvs9 z(c$hKEU)$UQf(U3K*TLi_*7tVa;}IQ+)TOAn_;VC+fbGWy8EHN!@jASF8k78b0DLy zu{;I!nzCxk{?%zz{KG%EOXWcK<3@H*OhW`}8Xx|HPOHVOpe+WdgUUS_13&$&B?E6= z*^s=q|Lu?)e5)N)Qw=}XN4w_q>v({C@KT`GW!G1v{QOIpYyfw!s`GCoqc|SgLx(0x zL6J%kxyTa+&i@d6qNI?Vxs_^zJm;{*r!252gOh2VyFZfsTe4Upx&+vQGkYB>&k#XlfesS4dhL(!WTo@QhRJL)gExzobtd7SGVVuXfK3LN(^(~@rXSWLN&+5H2 zU=PRT(;HbB#%tGda(H!Aj}4mwft-FIw~eyioIL7POd;?*ot+1s?(LZ4shR1>Er^ea zJOf|qZ>OTif~Eig#!%Y8 z!TT{WJ363R0WH;T+PYa~wP)KVxqxlUV+p(y1MbhI$e0(1jhHG=_vi_i8ETu){l*WG zWR*6jeapjK?|tr-dqcQxL;O;a4$E7!f*+y_MS?4^{IamXiTae<-LsH`YTjMou4R%KS-@S>U7bv!mtVA6d6+O4LhE(B zZj2R!)DmS=FT1Pku{5n}kIIU#WkG_Sk=Xtee+@QV+Wq|EzM89_JKx*`CS1K%Uk-Z_ zBXipiU!AqDY3&F$b`xQR_YcXUsD8e7^LgcIR4(xuh$&@*HwgtDjh;P&PHJ9mZGQO? z3B1M*N+rGkmSQGm)Rdi2Tywq&*#`;{k6ZtsaxNt1{iqNm@WyF4jGZHhDQB%)1GbQ+ z*r-y_MoYL?FK@)U#O5*~toLv`OTSK)I&S{7iXPL{$W~Fs(9y%ze*n_GuiQ#ZUc=5g)7e^2oAb zsm+5v0R&1}0b$FF2et7WdEp*#mv?WO?X>%L}p60sr;jb`n`YO@!e6f{MA{< zf^gdYcxE18IUFVb92-HWv7ctLN@gh|+mZ=_Lye%htMM1*pH_bBSI}D7J$jqcmn_2o zJ;-sQBeO| zY>?p8^>qNbe0MUNnjhElQl%Q6|$m?`KPG(0jsw1`l{|ahdn>rNz9XJU*Trapj zj)m^pbl!oKL`DMy1fGa2x5_uO;do&PXGg*0AlY^&{s|kSl-aa11hX24+WR!8ut~dr z#3Q!zgx9$5w}G-KQ>5zJ=zG>Q2cuiN<)IGjky$_|t?`Z?d1{d-L4TgSqSvjQZ>Hg9WlL9(8Cp6uz;71O(%~pQB#4FhlSOF=V3}5Ua!WY{EPtP3GZ}i%eK%VXdhIEMbD0}{HQ%e8TKIs!zayi zYnW?_a3uHVzCPOa5Slzr_6FnzS(VD^ysOcq{K)`Ah~J}_dbeUK9R*pxr;j$6UNr6jkG*`u+B-%%P!v4T>0f&(L%1JkuX_w zGa}QRS1ql72#(;Zn!LQc$d3yU{psL~sa9sc&?piDL~DMe*o%YCZihFlqD3IClBkIm z?^u8vTk5==18XU|rO|Jv%d^ID+2~2UVuY`I_DG#BlM1rY20+om(eH>)v2I>5P`Fpx z_=nh7Wwsl$hb}(yLvBi#WcN7kS$BUIEg1DJ6m&rNFM#FSxJaqjr~pL^H{2v;71Th{ z0%A}SNfgYcIOAPfwn5WouVxLYm}fz(%*p}q=z4F=#U#juAn1;s=CVGohUiu$o6;5~&62L3@<2Sz?{;v-`O_PO7(Q78Zo07>-$9L(a|pS}n^+&d%V$A1hO6fSQHV`-I*gtsj#bOeKZE zV>1mYl32;z88O>A;H8)pg`Wq@EX9yo-~Ei>m<&216ak%@VD9aj-Qjbi$4IOcD0a5zYDP&e#|~P_ zBQX>d6*KshDYKbS?P9<@av@TSFTzb&K;V9-hUtH>_trsmwfmRn!QDN$B)Ge~2X_b_ zAh^4`1-AqZ?iSoFxCM6z?(ROD_q})S@7I01r>AFns%C1QKTe%Poua6{&pzyDeb-ta zzuY3&JX`ig$~ZQMp5or$ZCSS7O0UA!iLd%+@C=N&=TZpZptD{85nBi=iUJ?G)c$4q zt@^|oN=;=E!KP8c?GB!Wp7ElSQHPA@_Ks@^1+0{XF<1Fv;})TYj5Al{fegqRM0ofY zj9md<>%tF87A5)rYF^=OzeTeDcgm!HFwxF5@jdK6*s%F>2Eo}>EnMpS|A;O`umq(E z6vh9O#LxzYAk^Tc_>zWNpkKZn>7~qR^2+`6dQW-ty8R&X0lMYn#%VI4y@J7xN3Y>g z7X|0(n*XQjWyc=XqFu5{r*2L5E0jjBV5aM|?b|VA0;tE3(&=*k;Sf83lCbpqYGF;< z!$}C*m_tv2x`0J1YWsT}CC=?!@`Jy~))wNvr+^LNH*qqSNHT*!L)lkEnW6G82KKn@ zP=lN=c5GJM?-0|wnK%Z8EV`l2b<+#R#5@47uq>OdL_Ax(Ac;FejW9dbl0MG^xiaQEMOWCF>lknpA|HU7DuM4UTLhd*6> z+VCvI^DcVW^9Z4;4Sn%;61Yu1V!^Y_78y*%b>+me($%VRw$_3de<)}+H~T&VA5@)b zQcv4?BNLYKx{!&G0f+9Oc&>Xbid)N{6z}ep?gWq**rqSt=7$vk4OgyoNCAPj&dCoN zL?cbnWS$hj{Jm=1)Pgw)2ybjre$o<@(NAQxNz^B5x!dB3b*sX zE6}4U^JpGZ@55E41$^i)ALr2X!^SO*6lGS$GjCnkun(RHZIIMD$-;z0(RQTwPTfyZ z*W&$KWA54VW*&pe)nWK~W^a>T$4tzxS18NZ@Nk8#aOn0EFnQ;5Mv=Zj|>DDee`Hj z&UyR82w0+cqR=&C{B7KY=M(#Fg)CH%#lz{V9=apF_)A=4I-B_E z9PYQD8^|jG=N1Unh8&4=%$b6eD;0^P?YyFgJ1S}vtRDDZ*E7W*Dc|0=ca6)ldn-4W zdF>xE)<%s;xlDZ~YwIy45Z9%&LQ9)l(pUwQ(6LtH#5`B<{1-|o)Q<&PTAz{3A`IwB z&Y94~gGl1`!-?FecjF9%w*qHamb}J+A17X8cBGnY;A*6&r|<(^o?9PVjP)}b%cdCgohhKk8?bx<5x`s*R7H7Mc|^VR$c zdNTWC>hTIP7g{#3W(>A|(o>R^pBw8ce6CC7W=bArcxYh-H?{Fl%r{aYoi6f*nG#6n z+Q)mD!dfrO^TDhSnfxBDkKJmnCWK5}YRqDAkP7^Qqu4GC1soZicEa*(bQRMPm$V6V z0Kss>JqGjk_1y~-by zHb>=uBN+ZAvPx0*bHC`0gz1=7XsgG6afh7Y+$L~V)SNxV7%;dPqt!`omj0AD=|vhp zb?*9c_HYHFTF5}ouvJRRdW8GH4+``}u0vZX3H36WftQH7Z;nUH=%m-*Cy!3QR}#J`}uG%n|JL zp}vx*0ZM4bolpIX6BBEjyAm?q zFCwsf^R8=Tcs;^gpY?|o=avQgKBBc>frf#qN|#+WIE;73m5yDC5Y)d3YHJtHyXgj) zD9SpbNwbftV5P<3qFAqNYyMI?zO<^P{i_+Oq; zpo8oR`-AYIg4x`9wbB5A%C{L>3ybE5;Iu^E{Ex6?W@ltr>3%3nv;&D!h>C|J0~Cf6PaOUya0851 z(m!7Gq98xI<)}W9YqPPR1y9z$S0KSv#m;pH31&cjV}lcoAE+5r9Cms%qX^_p0eh{+ z3x|KLn1zluT$MV+5iHU;YlMy%KIg7CN6MGEIYb|2s#ZvI?j!hRcBaFs%`T^|O!qW{ zj<2#N6}Y=!!lj2bT42={-@%*mkTS`u=tzblSmNGf)!EMcu6!MfG}oK-13csCRRMT) zb*`Lv(W?KYdVUS4=R_R@6Xg5hugUrjh85mq)f}>`tBGIJ-*=+uw|jlLCtNFnF2;v< z=$p5S@b>)-iA+)(5E=^j*g6p7G(*E4C=eIU%njLq3!(TF{dXYdt?{zzVsH$%2Mm>WBNq|V8*kG!X;+i~!ITd4}aBkEf z6BWRnr&Glw)NLM|X%g(}r6H$CHmU~3(5UL7l7;v=X51e86V}F-qSzs7MU{3U20ePo zi_UNw@+;w=fg6k|n8}V=(|(-#Hq``e{8gPiu1> z@s;uQmp#B?knGba+wOu2$?XyBpOJdignw_27NoZJ%R_X?($}~7OrqqC!|(&m)k)C242t~- z5GsfDaka+>K4 z9?w*aVHA$&xiIw^7*Ch_`qrVJEL=uH%(>BN^Vx=6&Y!c+rjH(-9|oJ<`ZlP&p%}2& z53P((+XbO{f&K{;;;g%9n>Q2#G;~tb)u(BcHxxr*b4-aRF2ytt@HexW6t)*(w95u* z%ZeLVXAk1?8eG914;4L18+9c6FFy=Hv7C8{?K(7llAn;4By5P>mixre5bhy*@^_(8 zb_}56K{nzkF(Vo8o_^z|dfl&K^ct)H+h=UjUz!)9_9i|t#y#1tr_qdhD>PaU#1H?S z<5zUKs$%7&#<>p>w#C#;9Dj2rU85D9cDtvkJA*R%N^&zO#19SKMD8>k$@-$kX3Ux*#(V**f>x46g z4r9SJ-C=REUYwa0@>&|t1Ka(R=S|O3s16Sx5mp_N?&vcUFTCs0rgRMl zOV9W;|MP4L#*DDZ^YHgE#J+dirWSDV%XheJZZ^M{mAtc-qm;KNmV>*D#Nl)!MY@g} z-9Qo+k~Q;p4sZ5TmfLR)!3dZRF2_GF!AJaYf&d{(*i%@6luZU(Ss@nv4r%|EX-VIyIC9U6^W9JxJ}zO|j>*b5t*=kzLbUnj*)N4f0#X_f(8@=J22XbAPMkridt{VBWT1_%WpJ|fP7UvL$S=G4n=zJ}Atpbc9Y>rQ zk5f@G6*J?b=^w`$C|SZf#AVZ{Qn;psoQ+SNh3stLIqi+ji_&KY0%m4!8HR0jrn}mo z>3C#mq!* z6JI9BcP+}N^g8ZWmKb13b=z!E8>;{32dUf_M`nA84N%s1JOMUCgD}2%&o%%_cpP`IcS| z`JEdfkdouol4)#^sN(rbdS~P-v!mUfKjwC1Mzk`a)wtdcQ;M?6S~_dT)>`M63@rrH zk#F0YXkL_ZGv3@bH>HR!x6-TjO zr&8MQoqmjbB~yR@dyiAd$rQhP0lAYC!COy&KP8xuM_SSd4jL}17B)~NQF{EIG`jg6NG8vhL3}n-)kdUr<(A$Vg#iysbjl#4wL6&=QgP#FBgH-k#o`DnR z#bd+S{!Tf|IlVUIgrU?s#ej$o?v9FiyQgh7xRsZAtJsY37C+u*4Rec5$g?{lpCjLO zmM=+wk5Jme=k&M~b<-nH*=XR;;Zi{{VcX5MTCxIjE2G)_Jt zk7W%K6+SiJit8Yp=dSwGou~so?hD-2#HOZWElXc2!}szAao zZ5$$#Ic?KYRE>>B+L!ioieJ7Jg_o8Rfdz9XI(_ZOv0?Gv8EG>6uv-RzA2hO_{pb3X z`@O$Q$W8Zu?0VLMUBk)E58juhK(+TXC}RE$8zZvLrrcxKHI;cSPHoTgrH9GxS&1-1TiRzR~0! z1w)@f*v_x>)+$l<$p(d`ZWD?S#p8zS)Ox8Dm0weMqUndA?FSXe8?fFi7j}AEy{&Wg zd3h3%Q;PS507JLpaZK1Z&rBZfj2um2= z#G%*c9k)M~Y~xeLKLoO6O(|JdqLZ2vYE)fseL*&+`{AF7FEcK)* z{G&MPgo}=lwmC$`Xc43Q)1l-chvXXof|qz8*q2NCkln2@|&86hr% zHIMba5Pza+8=x{Y1g|Qd^IZw*ZR#kfz^Z5ZO0-hl%a~Sa$*Dm}yZU7EOX2+ufM9rj zRys(#pkc`vEtpL*<>zVotcm{!W0>ko9r}C_mgLq(`g|St(R9nhdxAHi!VEG2uVGMA zm9;E9cf35W`yEZB9HknzDWo+X`F$T-X~-0aZF|hlqhUl zXq&|*_zuCzw8M(tZMA7O7M=O&#hhtgftwr%Hz{B5 z&r4hg8-D>HeA?5rl_iapEhFP?AGlI$t7Wg=?c0-n=qUN#YZ@!~;gp#1NyL*Ch_W_! z0uc#w+oit0A`*^`HAP!MDg(siky_)5_;7r3=GRYNvCJ-5C0p3>CE3VcUG|Zki? z;7nFyq!q{f09G)d*6AiB%;*93H4}O5Go@ARQ*97l0cRe%0A90^8;plY9S;QPM|)ek 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

M&`xHhpO>`OJyqSbvkN4=!Ty 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 #include #include -#ifdef SOLARIS -#include -#endif -#if defined(BSD) && !defined(__APPLE__) -#include -#endif + #include #include #include @@ -54,29 +49,16 @@ #include //PULSE AUDIO #include //PULSE AUDIO -//#include //PUlSE AUDIO #define SAMPLE_RATE_IN 48000 //48000 #define SAMPLE_RATE_OUT 8000 //8000, -#ifdef USE_PORTAUDIO -#include "portaudio.h" -#define PA_FRAMES_PER_BUFFER 64 -//Buffer needs to be large enough to prevent input buffer overruns while DSD is doing other struff (like outputting voice) -//else you get skipped samples which result in incomplete/erronous decodes and a mountain of error messages. -#define PA_LATENCY_IN 0.500 -//Buffer needs to be large enough to prevent output buffer underruns while DSD is doing other stuff (like decoding input) -//else you get choppy audio and in 'extreme' cases errors. -//Buffer also needs to be as small as possible so we don't have a lot of audio delay. -#define PA_LATENCY_OUT 0.100 -#endif - #ifdef USE_RTLSDR #include #endif -//look into making this not required by doing ifdef, make new c file for methods, and CLI case option for ncurses terminal -#include //move this stuff to dsd.h -#include //move this stuff to dsd.h + +#include +#include static volatile int exitflag; @@ -153,18 +135,6 @@ typedef struct uint8_t NextIVComputed[8]; } NxdnElementsContent_t; - -enum -{ - MODE_UNENCRYPTED, - MODE_BASIC_PRIVACY, - MODE_ENHANCED_PRIVACY_ARC4, - MODE_ENHANCED_PRIVACY_AES256, - MODE_HYTERA_BASIC_40_BIT, - MODE_HYTERA_BASIC_128_BIT, - MODE_HYTERA_BASIC_256_BIT -}; - //Read Solomon (12,9) constant #define RS_12_9_DATASIZE 9 #define RS_12_9_CHECKSUMSIZE 3 @@ -281,9 +251,7 @@ typedef struct int audio_in_fd; SNDFILE *audio_in_file; SF_INFO *audio_in_file_info; -#ifdef USE_PORTAUDIO - PaStream* audio_in_pa_stream; -#endif + uint32_t rtlsdr_center_freq; int rtlsdr_ppm_error; //was int, changed to float int audio_in_type; // 0 for device, 1 for file, 2 for portaudio, 3 for rtlsdr @@ -291,9 +259,7 @@ typedef struct int audio_out_fd; SNDFILE *audio_out_file; SF_INFO *audio_out_file_info; -#ifdef USE_PORTAUDIO - PaStream* audio_out_pa_stream; -#endif + int audio_out_type; // 0 for device, 1 for file, 2 for portaudio int split; int playoffset; @@ -302,11 +268,19 @@ typedef struct char mbe_out_file[1024]; char mbe_out_path[1024]; FILE *mbe_out_f; + FILE *symbol_out_f; float audio_gain; float audio_gainR; int audio_out; + int dmr_stereo_wav; char wav_out_file[1024]; + char wav_out_fileR[1024]; + char wav_out_file_raw[1024]; + char symbol_out_file[1024]; + short int symbol_out; SNDFILE *wav_out_f; + SNDFILE *wav_out_fR; + SNDFILE *wav_out_raw; //int wav_out_fd; int serial_baud; char serial_dev[1024]; @@ -315,6 +289,7 @@ typedef struct int frame_dstar; int frame_x2tdma; int frame_p25p1; + int frame_p25p2; int frame_nxdn48; int frame_nxdn96; int frame_dmr; @@ -338,17 +313,16 @@ typedef struct int rtl_volume_multiplier; int rtl_udp_port; int rtl_bandwidth; + int rtl_started; int monitor_input_audio; int pulse_raw_rate_in; int pulse_raw_rate_out; int pulse_digi_rate_in; int pulse_digi_rate_out; - //int pulse_digi_rate_outR; int pulse_raw_in_channels; int pulse_raw_out_channels; int pulse_digi_in_channels; int pulse_digi_out_channels; - //int pulse_digi_out_channelsR; int pulse_flush; pa_simple *pulse_raw_dev_in; pa_simple *pulse_raw_dev_out; @@ -356,23 +330,26 @@ typedef struct pa_simple *pulse_digi_dev_out; pa_simple *pulse_digi_dev_outR; int use_ncurses_terminal; + int ncurses_compact; + int ncurses_history; int reset_state; int payload; char output_name[1024]; - int EncryptionMode; - unsigned int dPMR_curr_frame_is_encrypted; int dPMR_next_part_of_superframe; int inverted_dpmr; int frame_dpmr; // short int dmr_stereo; + short int lrrp_file_output; // int frame_ysf; - int inverted_ysf; //not sure if ysf comes in inverted or not, but signal could if IQ flipped - short int aggressive_framesync; //set to 1 for more aggressive framesync, 0 for less aggressive + int inverted_ysf; + short int aggressive_framesync; + + FILE *symbolfile; } dsd_opts; @@ -380,8 +357,8 @@ typedef struct { int *dibit_buf; int *dibit_buf_p; - int *dmr_payload_buf; //try loading up a small amount to buffer, 144 or 288? - int *dmr_payload_p; //position for payload buffer + int *dmr_payload_buf; + int *dmr_payload_p; int repeat; short *audio_out_buf; short *audio_out_buf_p; @@ -415,13 +392,15 @@ typedef struct int maxbuf[1024]; int minbuf[1024]; int midx; - char err_str[64]; //actual error errorbars - char err_buf[64]; //make copy of err_str for comparison, only have string print when strcmp is different?? + char err_str[64]; + char err_buf[64]; char err_strR[64]; char err_bufR[64]; char fsubtype[16]; char ftype[16]; int symbolcnt; + int symbolc; + int rf_mod; int numflips; int lastsynctype; @@ -473,12 +452,12 @@ typedef struct int payload_mfid; int payload_mfidR; int payload_mi; - int payload_miR; //check to see if anything tied to this still functions appropriately - uint64_t payload_miP; - int payload_lsfr; - int payload_lsfrR; + int payload_miR; + unsigned long long int payload_miN; + unsigned long long int payload_miP; + int p25vc; unsigned long long int K; - int M; + int menuopen; unsigned int debug_audio_errors; unsigned int debug_audio_errorsR; @@ -506,7 +485,8 @@ typedef struct unsigned int nxdn_key; char nxdn_call_type[1024]; char dmr_callsign[2][6][99]; //plenty of room in case of overflow; - char dmr_lrrp[2][6][9999]; + char dmr_lrrp[2][6][9999]; //memory hog + unsigned long long int dmr_lrrp_source[2]; NxdnSacchRawPart_t NxdnSacchRawPart[4]; NxdnFacch1RawPart_t NxdnFacch1RawPart[2]; @@ -539,16 +519,21 @@ typedef struct TimeSlotVoiceSuperFrame_t TS2SuperFrame; char dmr_branding[25]; - uint8_t dmr_12_rate_sf[2][60]; //going five frames deep by 12 bytes //[slot][value] - uint8_t dmr_34_rate_sf[2][64]; //going four frames deep by 16 bytes //[slot][value] - int dmr_stereo_payload[144]; //load up 144 dibit buffer for every single DMR TDMA frame - //uint8_t dmr_stereo_payload[144]; //load up 144 dibit buffer for every single DMR TDMA frame + uint8_t dmr_12_rate_sf[2][84]; //going seven blocks deep by 12 bytes //[slot][value] + uint8_t dmr_34_rate_sf[2][96]; //going six blocks deep by 16 bytes //[slot][value] + int dmr_stereo_payload[144]; //load up 144 dibit buffer for every single DMR TDMA frame + uint8_t data_header_blocks[2]; //collect number of blocks to follow from data header per slot + uint8_t data_header_padding[2]; //collect number of padding octets in last block per slot + uint8_t data_header_format[2]; //collect format of data header (conf or unconf) per slot + uint8_t data_header_sap[2]; //collect sap info per slot + uint8_t data_block_counter[2]; //counter for number of data blocks collected + uint8_t data_p_head[2]; //flag for dmr proprietary header to follow dPMRVoiceFS2Frame_t dPMRVoiceFS2Frame; //These flags are used to known the DMR frame - //printing format (hex or binary) + //printing format (hex or binary) int printDMRRawVoiceFrameHex; int printDMRRawVoiceFrameBin; int printDMRRawDataFrameHex; @@ -557,7 +542,7 @@ typedef struct int printDMRAmbeVoiceSampleBin; //These flags are used to known the dPMR frame - //orinting format (hex or binary) + //orinting format (hex or binary) int printdPMRRawVoiceFrameHex; int printdPMRRawVoiceFrameBin; int printdPMRRawDataFrameHex; @@ -574,9 +559,8 @@ typedef struct short int dmr_ms_mode; unsigned int dmrburstL; unsigned int dmrburstR; - int dropL; - int dropR; unsigned long long int R; + // int block_count; //dstar header for ncurses unsigned char dstarradioheader[41]; @@ -604,6 +588,21 @@ typedef struct #define INV_P25P1_SYNC "333331331133111131311111" #define P25P1_SYNC "111113113311333313133333" +//preliminary P2 sync + +// static const uint64_t P25P2_FRAME_SYNC_MAGIC = 0x575D57F7FFLL; // 40 bits +// static const uint64_t P25P2_FRAME_SYNC_REV_P = 0x575D57F7FFLL ^ 0xAAAAAAAAAALL; +#define P25P2_SYNC "11131131111333133333" +#define INV_P25P2_SYNC "33313313333111311111" +// static const uint64_t P25P2_FRAME_SYNC_MASK = 0xFFFFFFFFFFLL; //wonder what the mask was for if its all F +// +// static const uint64_t P25P2_FRAME_SYNC_N1200 = 0x0104015155LL; +//#define P25P2_SYNC_N "" +// static const uint64_t P25P2_FRAME_SYNC_X2400 = 0xa8a2a8d800LL; +//#define P25P2_SYNC_X "" +// static const uint64_t P25P2_FRAME_SYNC_P1200 = 0xfefbfeaeaaLL; +//#define P25P2_SYNC_P "" + #define X2TDMA_BS_VOICE_SYNC "113131333331313331113311" #define X2TDMA_BS_DATA_SYNC "331313111113131113331133" #define X2TDMA_MS_DATA_SYNC "313113333111111133333313" @@ -628,9 +627,8 @@ typedef struct #define DMR_MS_DATA_SYNC "311131133313133331131113" #define DMR_MS_VOICE_SYNC "133313311131311113313331" -//inversion testing on MS -//#define DMR_MS_DATA_SYNC "133313311131311113313331" -//#define DMR_MS_VOICE_SYNC "311131133313133331131113" +//Testing NXDN FSW again +#define NXDN_FSW "3131331131" #define DMR_RC_DATA_SYNC "131331111133133133311313" @@ -670,7 +668,10 @@ void processAudio (dsd_opts * opts, dsd_state * state); void processAudioR (dsd_opts * opts, dsd_state * state); void openPulseInput (dsd_opts * opts); //not sure if we need to just pass opts, or opts and state yet void openPulseOutput (dsd_opts * opts); //not sure if we need to just pass opts, or opts and state yet +void closePulseInput (dsd_opts * opts); +void closePulseOutput (dsd_opts * opts); void writeSynthesizedVoice (dsd_opts * opts, dsd_state * state); +void writeSynthesizedVoiceR (dsd_opts * opts, dsd_state * state); void playSynthesizedVoice (dsd_opts * opts, dsd_state * state); void playSynthesizedVoiceR (dsd_opts * opts, dsd_state * state); void openAudioOutDevice (dsd_opts * opts, int speed); @@ -690,7 +691,17 @@ void openMbeInFile (dsd_opts * opts, dsd_state * state); void closeMbeOutFile (dsd_opts * opts, dsd_state * state); void openMbeOutFile (dsd_opts * opts, dsd_state * state); void openWavOutFile (dsd_opts * opts, dsd_state * state); +void openWavOutFileL (dsd_opts * opts, dsd_state * state); +void openWavOutFileR (dsd_opts * opts, dsd_state * state); +void openWavOutFileRaw (dsd_opts * opts, dsd_state * state); +void openSymbolOutFile (dsd_opts * opts, dsd_state * state); +void closeSymbolOutFile (dsd_opts * opts, dsd_state * state); +void writeSymbolOutFile (dsd_opts * opts, dsd_state * state); +void writeRawSample (dsd_opts * opts, dsd_state * state, short sample); void closeWavOutFile (dsd_opts * opts, dsd_state * state); +void closeWavOutFileL (dsd_opts * opts, dsd_state * state); +void closeWavOutFileR (dsd_opts * opts, dsd_state * state); +void closeWavOutFileRaw (dsd_opts * opts, dsd_state * state); void printFrameInfo (dsd_opts * opts, dsd_state * state); void processFrame (dsd_opts * opts, dsd_state * state); void printFrameSync (dsd_opts * opts, dsd_state * state, char *frametype, int offset, char *modulation); @@ -724,22 +735,20 @@ void processX2TDMAdata (dsd_opts * opts, dsd_state * state); void processX2TDMAvoice (dsd_opts * opts, dsd_state * state); void processDSTAR_HD (dsd_opts * opts, dsd_state * state); void processYSF(dsd_opts * opts, dsd_state * state); //YSF +void processP2(dsd_opts * opts, dsd_state * state); //P2 short dmr_filter(short sample); short nxdn_filter(short sample); - int strncmperr(const char *s1, const char *s2, size_t size, int MaxErr); /* Global functions */ //also borrowed uint32_t ConvertBitIntoBytes(uint8_t * BufferIn, uint32_t BitLength); uint32_t ConvertAsciiToByte(uint8_t AsciiMsbByte, uint8_t AsciiLsbByte, uint8_t * OutputByte); void Convert49BitSampleInto7Bytes(char * InputBit, char * OutputByte); void Convert7BytesInto49BitSample(char * InputByte, char * OutputBit); -// -//ifdef ncurses -void ncursesOpen (); + +void ncursesOpen (dsd_opts * opts, dsd_state * state); void ncursesPrinter (dsd_opts * opts, dsd_state * state); void ncursesClose (); -//endif ncurses /* NXDN frame decoding functions */ void ProcessNXDNFrame(dsd_opts * opts, dsd_state * state, uint8_t Inverted); @@ -763,7 +772,7 @@ uint8_t NXDN_decode_LICH(uint8_t InputLich[8], uint8_t * Option, uint8_t * Direction, uint8_t * CompleteLichBinaryFormat, - uint8_t Inverted); + uint8_t Inverted); uint8_t NXDN_SACCH_raw_part_decode(uint8_t * Input, uint8_t * Output); void NXDN_SACCH_Full_decode(dsd_opts * opts, dsd_state * state); uint8_t NXDN_FACCH1_decode(uint8_t * Input, uint8_t * Output); @@ -778,12 +787,11 @@ char * NXDN_Cipher_Type_To_Str(uint8_t CipherType); uint16_t CRC15BitNXDN(uint8_t * BufferIn, uint32_t BitLength); uint16_t CRC12BitNXDN(uint8_t * BufferIn, uint32_t BitLength); uint8_t CRC6BitNXDN(uint8_t * BufferIn, uint32_t BitLength); -void ScrambledNXDNVoiceBit(int * LfsrValue, char * BufferIn, char * BufferOut, int NbOfBitToScramble); - void dPMRVoiceFrameProcess(dsd_opts * opts, dsd_state * state); void printdPMRAmbeVoiceSample(dsd_opts * opts, dsd_state * state); void printdPMRRawVoiceFrame (dsd_opts * opts, dsd_state * state); + //dPMR functions void ScrambledPMRBit(uint32_t * LfsrValue, uint8_t * BufferIn, uint8_t * BufferOut, uint32_t NbOfBitToScramble); void DeInterleave6x12DPmrBit(uint8_t * BufferIn, uint8_t * BufferOut); @@ -827,9 +835,9 @@ void ProcessMBCData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8 void ProcessMBChData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_t syncdata[48], uint8_t SlotType[20]); void ProcessWTFData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_t syncdata[48], uint8_t SlotType[20]); void ProcessUnifiedData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_t syncdata[48], uint8_t SlotType[20]); + //LFSR code courtesy of https://github.com/mattames/LFSR/ int LFSR(dsd_state * state); -int LFSRP(dsd_state * state); void Hamming_7_4_init(); void Hamming_7_4_encode(unsigned char *origBits, unsigned char *encodedBits); @@ -876,7 +884,7 @@ extern "C" { #endif void open_rtlsdr_stream(dsd_opts *opts); void cleanup_rtlsdr_stream(); -void get_rtlsdr_sample(int16_t *sample); +void get_rtlsdr_sample(int16_t *sample, dsd_opts * opts, dsd_state * state); void rtlsdr_sighandler(); //TRELLIS @@ -890,8 +898,6 @@ void CDMRTrellisPointsToDibits(const unsigned char* points, signed char* dibits) void CDMRTrellisBitsToTribits(const unsigned char* payload, unsigned char* tribits); bool CDMRTrellisDecode(const unsigned char* data, unsigned char* payload); - - #ifdef __cplusplus } #endif diff --git a/include/nxdn_const.h b/include/nxdn_const.h index 8b34ccf..85a5896 100644 --- a/include/nxdn_const.h +++ b/include/nxdn_const.h @@ -76,7 +76,7 @@ extern const int DSDNXDN_UDCH_m_PunctureList[58]; */ const char nxdnpr[145] = { 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1 }; //const unsigned char nxdnpr2[384] = -const unsigned char nxdnpr2[182] = //is this a problem, should it be 384/2 for dibits? +const unsigned char nxdnpr2[182] = //generated from default in manual with the x^9+x^4+1 poly? { 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, diff --git a/src/dmr_bs.c b/src/dmr_bs.c index 886ac7b..f68d95e 100644 --- a/src/dmr_bs.c +++ b/src/dmr_bs.c @@ -10,13 +10,11 @@ void dmrBS (dsd_opts * opts, dsd_state * state) char ambe_fr[4][24] = {0}; char ambe_fr2[4][24] = {0}; char ambe_fr3[4][24] = {0}; - char t_ambe_fr[4][24] = {9}; - char t_ambe_fr2[4][24] = {9}; - char t_ambe_fr3[4][24] = {9}; + const int *w, *x, *y, *z; char sync[25] = {0}; char syncdata[48] = {0}; - char cachdata[13] = {0}; + //char cachdata[13] = {0}; int mutecurrentslot; int msMode; char cc[4]; @@ -29,6 +27,11 @@ void dmrBS (dsd_opts * opts, dsd_state * state) unsigned short int vc1; unsigned short int vc2; + //cach fec + char cachdata[25] = {0}; //increased from 24 to 25 to see if this fixes ubuntu 32 bug + int cachInterleave[24] = {0, 7, 8, 9, 1, 10, 11, 12, 2, 13, 14, 15, 3, 16, 4, 17, 18, 19, 5, 20, 21, 22, 6, 23}; + + //add time to mirror printFrameSync time_t now; char * getTime(void) //get pretty hh:mm:ss timestamp @@ -67,17 +70,34 @@ void dmrBS (dsd_opts * opts, dsd_state * state) for(i = 0; i < 12; i++) { dibit = getDibit(opts, state); - cachdata[i] = dibit; state->dmr_stereo_payload[i] = dibit; - //fprintf (stderr, "D%X ", dibit); - //fprintf (stderr, "P%X ", state->dmr_stereo_payload[i]); - if(i == 2) - { - state->currentslot = (1 & (dibit >> 1)); - internalslot = (1 & (dibit >> 1)); - } + + cachdata[cachInterleave[(i*2)]] = (1 & (dibit >> 1)); // bit 1 + cachdata[cachInterleave[(i*2)+1]] = (1 & dibit); // bit 0 } + cachdata[25] = 0; //setting to see if this fixes ubuntu 32 bit bug + + //decode and correct cach and compare + int cach_okay = 69; + if ( Hamming_7_4_decode (cachdata) ) //see if we need to de-interleave this...probably do. + { + cach_okay = 1; + } + if (cach_okay == 1) + { + //fprintf (stderr, "CACH Okay "); + } + if (cach_okay != 1) + { + //fprintf (stderr, "CACH FEC Error %d", cach_okay); + } + + state->currentslot = cachdata[1]; + internalslot = cachdata[1]; + + //this cach fec seems to work quite well, really helps on shaky signals + //Setup for first AMBE Frame //Interleave Schedule w = rW; @@ -140,19 +160,24 @@ void dmrBS (dsd_opts * opts, dsd_state * state) //short int l = 0; //do I still use this? // signaling data or sync + long long int late_entry_pi[24] = {0}; + short int m = 0; for(i = 0; i < 24; i++) { dibit = getDibit(opts, state); state->dmr_stereo_payload[i+66] = dibit; syncdata[(2*i)] = (1 & (dibit >> 1)); // bit 1 - syncdata[(2*i)+1] = (1 & dibit); // bit 0 + syncdata[(2*i)+1] = (1 & dibit); // bit 0 sync[i] = (dibit | 1) + 48; - if (i < 4 || i > 19) // + if (i < 4 || i > 19) { - EmbeddedSignalling[2*i] = (1 & (dibit >> 1)); // bit 1 - EmbeddedSignalling[2*i+1] = (1 & dibit); // bit 0 + // fprintf(stderr, "\n EMB = "); + EmbeddedSignalling[(2*i)] = (1 & (dibit >> 1)); // bit 1 + //fprintf (stderr, "%02b", dibit); + EmbeddedSignalling[(2*i)+1] = (1 & dibit); // bit 0 + } //Used for ProcessVoiceBurstSync @@ -168,6 +193,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) state->TS2SuperFrame.TimeSlotRawVoiceFrame[vc2-1].Sync[i*2] = (1 & (dibit >> 1)); // bit 1 state->TS2SuperFrame.TimeSlotRawVoiceFrame[vc2-1].Sync[i*2+1] = (1 & dibit); // bit 0 } + } sync[24] = 0; @@ -194,9 +220,20 @@ void dmrBS (dsd_opts * opts, dsd_state * state) state->LCSS = (unsigned int)((EmbeddedSignalling[5] << 1) + EmbeddedSignalling[6]); state->LCSS_ok = EmbeddedSignallingOk; - } - else skipcount++; + for (i = 0; i < 8; i++) + { + //fprintf (stderr, " %b", EmbeddedSignalling[i]); + } + } + //else skipcount++; + else + { + for (i = 0; i < 8; i++) + { + //fprintf (stderr, " %b", EmbeddedSignalling[i]); + } + } //Continue Second AMBE Frame, 18 after Sync or EmbeddedSignalling for(i = 0; i < 18; i++) { @@ -248,15 +285,27 @@ void dmrBS (dsd_opts * opts, dsd_state * state) if (internalslot == 0) { vc1 = 1; - state->dropL = 256; } if (internalslot == 1) { vc2 = 1; - state->dropR = 256; } } + // if( strcmp (sync, DMR_DIRECT_MODE_TS1_DATA_SYNC) == 0) + // { + // fprintf (stderr,"%s ", getTime()); + // fprintf (stderr, " Sync: DMR TDMA Direct Mode TS 1 \n"); + // goto SKIP; + // } + // + // if( strcmp (sync, DMR_DIRECT_MODE_TS2_DATA_SYNC) == 0) + // { + // fprintf (stderr,"%s ", getTime()); + // fprintf (stderr, " Sync: DMR TDMA Direct Mode TS 2 \n"); + // goto SKIP; + // } + //check for sync pattern here after collected the rest of the payload, decide what to do with it if ( strcmp (sync, DMR_BS_DATA_SYNC) == 0 ) { @@ -273,7 +322,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) else fprintf (stderr,"Sync: -DMR "); //constantly reset the vc counter to 1 each data frame in anticipation of new voice frame vc1 = 1; - //state->dropL = 256; + } if (internalslot == 1) { @@ -287,7 +336,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) else fprintf (stderr,"Sync: -DMR "); //constantly reset the vc counter to 1 each data frame in anticipation of new voice frame vc2 = 1; - //state->dropR = 256; + } processDMRdata (opts, state); skipcount++; //after 2 data frames, drop back to getFrameSync and process subsequent data with processDMRdata @@ -304,6 +353,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) //only play voice on no data sync if (strcmp (sync, DMR_BS_DATA_SYNC) != 0) { + if (EmbeddedSignallingOk == 0) { //goto END; @@ -314,7 +364,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) if (internalslot == 0) { state->dmrburstL = 16; //use 16 for Voice? - //fprintf (stderr,"Sync: +DMR [slot1] slot2 | Color Code=%02d | DMRSTEREO | VC%d \n", state->dmr_color_code, vc1); + if (opts->inverted_dmr == 0) { fprintf (stderr,"Sync: +DMR [SLOT1] slot2 | | DMRSTEREO | VC%d ",vc1); @@ -324,11 +374,6 @@ void dmrBS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - //the condition below should be swapped to vc6 and not on vc1, placement after processMbeFrame - if (vc1 == 1 && state->payload_algid != 0 && opts->payload == 1) - { - //LFSR(state); //placement here causes issues when second slot becomes active as well - } fprintf (stderr, "\n"); } else @@ -340,11 +385,6 @@ void dmrBS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - //the condition below should be swapped to vc6 and not on vc1, placement after processMbeFrame - if (vc1 == 1 && state->payload_algid != 0 && opts->payload == 1) - { - //LFSR(state); //placement here causes issues when second slot becomes active as well - } fprintf (stderr, "\n"); } } @@ -361,11 +401,6 @@ void dmrBS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - //the condition below should be swapped to vc6 and not on vc1, placement after processMbeFrame - if (vc2 == 1 && state->payload_algidR != 0 && opts->payload == 1) - { - //LFSR(state); - } fprintf (stderr, "\n"); } else @@ -377,11 +412,6 @@ void dmrBS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - //the condition below should be swapped to vc6 and not on vc1, placement after processMbeFrame - if (vc2 == 1 && state->payload_algidR != 0 && opts->payload == 1) - { - //LFSR(state); - } fprintf (stderr, "\n"); } } @@ -403,29 +433,31 @@ void dmrBS (dsd_opts * opts, dsd_state * state) processMbeFrame (opts, state, NULL, ambe_fr2, NULL); processMbeFrame (opts, state, NULL, ambe_fr3, NULL); - //We only want to run LFSR after processing VC6 frames and before rolling - //back to VC1, otherwise we will incur an unwanted LFSR if voice becomes active - //in both slots while in this loop if (internalslot == 0 && vc1 == 6) { - state->dropL = 256; - if (state->payload_algid != 0 ) //&& opts->payload == 1 + + if (state->payload_algid >= 0x21) { - LFSR(state); + //running this as state->payload_mi > 0 apparently causes some problem, don't know why + if (state->payload_mi != 0 && state->payload_algid >= 0x21) + { + LFSR(state); + } fprintf (stderr, "\n"); } - } if (internalslot == 1 && vc2 == 6) { - state->dropR = 256; - if (state->payload_algidR != 0 ) //&& opts->payload == 1 + + if (state->payload_algidR >= 0x21) { - LFSR(state); + if (state->payload_miR != 0 && state->payload_algidR == 0x21) + { + LFSR(state); //re-enable this one after testing Late Entry MI + } fprintf (stderr, "\n"); } - } if (internalslot == 0) @@ -436,6 +468,7 @@ void dmrBS (dsd_opts * opts, dsd_state * state) { vc2++; } + } // recalibrate center/umid/lmid, not sure this helps or does anything particularly in this case @@ -677,10 +710,6 @@ void dmrBSBootstrap (dsd_opts * opts, dsd_state * state) fprintf (stderr, "\n"); } - //these ambe_fr values are set correctly now! - //reset drop values since we don't know which slot (because I'm too lazy to write that part) - state->dropL = 256; - state->dropR = 256; processMbeFrame (opts, state, NULL, ambe_fr, NULL); processMbeFrame (opts, state, NULL, ambe_fr2, NULL); processMbeFrame (opts, state, NULL, ambe_fr3, NULL); diff --git a/src/dmr_data.c b/src/dmr_data.c index f8429c1..9e98f27 100644 --- a/src/dmr_data.c +++ b/src/dmr_data.c @@ -25,14 +25,17 @@ processDMRdata (dsd_opts * opts, dsd_state * state) int *dibit_p; char sync[25]; char syncdata[48]; - char cachdata[13] = {0}; + char cachdata[25] = {0}; //increased from 24 to 25 to see if this fixes ubuntu 32 bug char cc[5] = {0}; char ccAscii[5] = {0}; char bursttype[5]; unsigned int burst; char info[196]; - char SlotType[20]; + // char SlotType[20]; //was char, but I don't think FEC brings back good values when usign that + unsigned char SlotType[20]; //was char, but I don't think FEC brings back good values when usign that unsigned int SlotTypeOk; + int cachInterleave[24] = {0, 7, 8, 9, 1, 10, 11, 12, 2, 13, 14, 15, 3, 16, 4, 17, 18, 19, 5, 20, 21, 22, 6, 23}; + /* Remove warning compiler */ //UNUSED_VARIABLE(cachdata[0]); @@ -57,7 +60,7 @@ processDMRdata (dsd_opts * opts, dsd_state * state) dibit_p = state->dmr_payload_p - 90; } - // CACH + // CACH, why aren't we running any FEC on this? for (i = 0; i < 12; i++) { dibit = *dibit_p; @@ -71,31 +74,72 @@ processDMRdata (dsd_opts * opts, dsd_state * state) dibit = (int)state->dmr_stereo_payload[i]; } //fprintf(stderr, "%X", dibit); - cachdata[i] = dibit; + //cachdata[i] = dibit; + + cachdata[cachInterleave[(i*2)]] = (1 & (dibit >> 1)); // bit 1 + cachdata[cachInterleave[(i*2)+1]] = (1 & dibit); // bit 0 + // cachdata[(i*2)] = (1 & (dibit >> 1)); // bit 1 + // cachdata[(i*2)+1] = (1 & dibit); // bit 0 + if (i == 2) { /* Change the current slot only if we are in relayed mode (not in direct mode) */ - if(state->directmode == 0) state->currentslot = (1 & (dibit >> 1)); // bit 1 - - if (state->currentslot == 0 && state->dmr_ms_mode == 0) - { - state->slot1light[0] = '['; - state->slot1light[6] = ']'; - state->slot2light[0] = ' '; - state->slot2light[6] = ' '; - } - //else - if (state->currentslot == 1 && state->dmr_ms_mode == 0) - { - state->slot2light[0] = '['; - state->slot2light[6] = ']'; - state->slot1light[0] = ' '; - state->slot1light[6] = ' '; - } + // if(state->directmode == 0) state->currentslot = (1 & (dibit >> 1)); //move this until after cach fec performed + // + // if (state->currentslot == 0 && state->dmr_ms_mode == 0) + // { + // state->slot1light[0] = '['; + // state->slot1light[6] = ']'; + // state->slot2light[0] = ' '; + // state->slot2light[6] = ' '; + // } + // //else + // if (state->currentslot == 1 && state->dmr_ms_mode == 0) + // { + // state->slot2light[0] = '['; + // state->slot2light[6] = ']'; + // state->slot1light[0] = ' '; + // state->slot1light[6] = ' '; + // } } } - cachdata[12] = 0; + //cachdata[12] = 0; + cachdata[25] = 0; //setting to see if this fixes ubuntu 32 bit bug + //decode and correct cach and compare + int cach_okay = 69; + if ( Hamming_7_4_decode (cachdata) ) //is now de-interleaved appropriately + { + cach_okay = 1; + } + if (cach_okay == 1) + { + //fprintf (stderr, "CACH Okay "); + } + if (cach_okay != 1) + { + //fprintf (stderr, "CACH FEC Error %d", cach_okay); + goto END; + } + + state->currentslot = cachdata[1]; //still bit 2, or somewhere else? is it 8? 1? TC? + + if (state->currentslot == 0 && state->dmr_ms_mode == 0) + { + state->slot1light[0] = '['; + state->slot1light[6] = ']'; + state->slot2light[0] = ' '; + state->slot2light[6] = ' '; + } + //else + if (state->currentslot == 1 && state->dmr_ms_mode == 0) + { + state->slot2light[0] = '['; + state->slot2light[6] = ']'; + state->slot1light[0] = ' '; + state->slot1light[6] = ' '; + } + //end correct cach and set slot #ifdef DMR_DUMP k = 0; @@ -232,7 +276,7 @@ processDMRdata (dsd_opts * opts, dsd_state * state) syncdata[(2*i)+1] = (1 & dibit); // bit 0 sync[i] = (dibit | 1) + 48; } - sync[24] = 0; + sync[24] = 0; //why? #ifdef DMR_DUMP k = 0; @@ -296,8 +340,18 @@ processDMRdata (dsd_opts * opts, dsd_state * state) } /* Check and correct the SlotType (apply Golay(20,8) FEC check) */ - if(Golay_20_8_decode((unsigned char *)SlotType)) SlotTypeOk = 1; - else SlotTypeOk = 0; + //pretty sure this isn't working correcty, does not apply corrected bits, due to cast type mismatching + // if(Golay_20_8_decode((unsigned char *)SlotType)) SlotTypeOk = 1; + if( Golay_20_8_decode(SlotType) ) + { + SlotTypeOk = 1; + //fprintf (stderr, "Slot Okay "); + } + else + { + SlotTypeOk = 0; + goto END; + } /* Slot Type parity checked => Fill the color code */ //state->color_code = (unsigned int)((cc[0] << 3) + (cc[1] << 2) + (cc[2] << 1) + cc[3]); @@ -536,5 +590,13 @@ processDMRdata (dsd_opts * opts, dsd_state * state) { fprintf(stderr, "\n"); } - //JUMP: + END: + if (SlotTypeOk == 0 || cach_okay == 0) + { + fprintf (stderr, "%s", KRED); + fprintf (stderr, " **CACH or Burst Type FEC ERR - SKIPPING** "); + fprintf (stderr, "%s", KNRM); + fprintf (stderr, "\n"); + } + } /* End processDMRdata() */ diff --git a/src/dmr_ms.c b/src/dmr_ms.c index bdb5609..10e93c8 100644 --- a/src/dmr_ms.c +++ b/src/dmr_ms.c @@ -33,6 +33,7 @@ void dmrMS (dsd_opts * opts, dsd_state * state) char redundancyB[36]; unsigned short int vc1; unsigned short int vc2; + //add time to mirror printFrameSync time_t now; char * getTime(void) //get pretty hh:mm:ss timestamp @@ -60,12 +61,15 @@ void dmrMS (dsd_opts * opts, dsd_state * state) short int skipcount = 0; //Hardset variables for MS - state->currentslot = 0; + state->currentslot = 0; //0 internalslot = 0; activeslot = 0; //Run Loop while the getting is good while (loop == 1) { + + short int m = 0; + state->dmrburstL = 16; //Use 16 for Voice? // No CACH in MS Mode? for(i = 0; i < 12; i++) @@ -258,17 +262,9 @@ void dmrMS (dsd_opts * opts, dsd_state * state) y++; z++; - //end early to allow next sync without skipping a voice superframe - //only use if only doing 6 VC and nothing else, otherwise, will lose sync - if (vc1 == 6 && i == 30) - { - //i = 36; - } } - //if ( (strcmp (sync, DMR_MS_VOICE_SYNC) == 0) ) - //fixed to compensate for inverted signal if ( ((strcmp (sync, DMR_MS_VOICE_SYNC) == 0) && opts->inverted_dmr == 0) || ((strcmp (sync, DMR_MS_DATA_SYNC) == 0) && opts->inverted_dmr == 1) ) @@ -276,29 +272,18 @@ void dmrMS (dsd_opts * opts, dsd_state * state) if (internalslot == 0) { vc1 = 1; - state->dropL = 256; fprintf (stderr, "MS Slot 1 Voice Sync \n"); - //activeslot = 0; - } + if (internalslot == 1) { vc2 = 1; - state->dropR = 256; - //fprintf (stderr, "MS Slot 2 Voice Sync \n"); - //activeslot = 1; } + state->dmr_ms_mode = 1; //set to 1 here?? } state->dmr_ms_mode = 1; //set to 1 here? - //testing to see if we need to do something to get MS mode working properly, - //get proper sync, skip frames, etc. - if (state->dmr_ms_mode == 1 ) //&& vc1 < 7 - { - //do something - //fprintf (stderr, "MS MODE "); - } //don't know if we will catch an RC sync in here or not, should be on VC6 if it occurs if ( (strcmp (rcsync, DMR_RC_DATA_SYNC) == 0) || (strcmp (sync, DMR_RC_DATA_SYNC) == 0) ) //should be in same position as sync @@ -370,9 +355,6 @@ void dmrMS (dsd_opts * opts, dsd_state * state) goto END; } - //if( (strcmp (sync, DMR_MS_DATA_SYNC) != 0) && internalslot == activeslot && vc1 < 7) - //only play voice no MS Data Sync and vc1 below 6 (no voice resync) - //fixed to compensate for inverted signal if( ( ( ((strcmp (sync, DMR_MS_DATA_SYNC) != 0) && opts->inverted_dmr == 0) || ((strcmp (sync, DMR_MS_VOICE_SYNC) != 0) && opts->inverted_dmr == 1) ) ) && internalslot == activeslot && vc1 < 7) @@ -390,10 +372,6 @@ void dmrMS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - if (vc1 == 6 && state->payload_algid != 0 && opts->payload == 1) - { - LFSR(state); - } fprintf (stderr, "\n"); } @@ -406,67 +384,32 @@ void dmrMS (dsd_opts * opts, dsd_state * state) fprintf(stderr, " BPK %lld", state->K); fprintf (stderr, "%s", KNRM); } - if (vc1 == 6 && state->payload_algid != 0 && opts->payload == 1) - { - LFSR(state); - } fprintf (stderr, "\n"); } - if (internalslot == 1 && opts->inverted_dmr == 0) - { - fprintf (stderr,"Sync: +DMR MS MODE | Color Code=%02d | DMRSTEREO | VC%d ", state->color_code, vc2); - if (state->K > 0 && state->dmr_so & 0x40 && state->payload_keyid == 0) - { - fprintf (stderr, "%s", KYEL); - fprintf(stderr, " BPK %lld", state->K); - fprintf (stderr, "%s", KNRM); - } - if (vc2 == 6 && state->payload_algidR != 0 && opts->payload == 1) - { - LFSR(state); - } - fprintf (stderr, "\n"); - } - if (internalslot == 1 && opts->inverted_dmr == 1) - { - fprintf (stderr,"Sync: -DMR MS MODE | Color Code=%02d | DMRSTEREO | VC%d ", state->color_code, vc2); - if (state->K > 0 && state->dmr_so & 0x40 && state->payload_keyid == 0) - { - fprintf (stderr, "%s", KYEL); - fprintf(stderr, " BPK %lld", state->K); - fprintf (stderr, "%s", KNRM); - } - if (vc2 == 6 && state->payload_algidR != 0 && opts->payload == 1) - { - LFSR(state); - } - fprintf (stderr, "\n"); - } + if (internalslot == 0 && vc1 == 6) //presumably when full (and no sync issues) { //process voice burst ProcessVoiceBurstSync(opts, state); fprintf (stderr, "\n"); } - if (internalslot == 1 && vc2 == 6) //presumably when full (and no sync issues) - { - //process voice burst - //ProcessVoiceBurstSync(opts, state); - //fprintf (stderr, "\n"); - } + state->dmr_ms_mode == 1; processMbeFrame (opts, state, NULL, ambe_fr, NULL); processMbeFrame (opts, state, NULL, ambe_fr2, NULL); processMbeFrame (opts, state, NULL, ambe_fr3, NULL); - if (internalslot == 0) + + //need to seperate the algs here so we don't run LFSR on 22 and so on + if (vc1 == 6 && state->payload_algid >= 21) { - //vc1++; - } - if (internalslot == 1) - { - vc2++; - } + //state->currentslot = 0; + if (state->payload_mi != 0 && state->payload_algid >= 0x21) + { + LFSR(state); + } + fprintf (stderr, "\n"); + } } vc1++; //6 seems optimal for MS, allows to quickly exit and resync if wonky or something @@ -692,13 +635,13 @@ void dmrMSBootstrap (dsd_opts * opts, dsd_state * state) } fprintf (stderr, "\n"); } - //reset drop values since we don't know which slot (because I'm too lazy to write that part) - state->dropL = 256; - state->dropR = 256; + state->dmr_ms_mode = 1; + processMbeFrame (opts, state, NULL, ambe_fr, NULL); processMbeFrame (opts, state, NULL, ambe_fr2, NULL); processMbeFrame (opts, state, NULL, ambe_fr3, NULL); + skipDibit (opts, state, 144); //skip to next TDMA slot dmrMS (opts, state); //bootstrap into full TDMA frame @@ -706,11 +649,17 @@ void dmrMSBootstrap (dsd_opts * opts, dsd_state * state) void dmrMSData (dsd_opts * opts, dsd_state * state) { - int i; + int i, b, c; int dibit; int *dibit_p; unsigned int burst; + unsigned char MSCach[24] = {0}; //12 dibits = 24 bits + unsigned char MSSync[48] = {0}; //24 dibits = 48 bits + unsigned char MSSlot[20] = {0}; //10 dibits = 20 bits + unsigned char MSBurst[5] = {0}; + int cachInterleave[24] = {0, 7, 8, 9, 1, 10, 11, 12, 2, 13, 14, 15, 3, 16, 4, 17, 18, 19, 5, 20, 21, 22, 6, 23}; + //int cachInterleave[24] = {0,} //add time to mirror sync time_t now; char * getTime(void) //get pretty hh:mm:ss timestamp @@ -727,7 +676,8 @@ void dmrMSData (dsd_opts * opts, dsd_state * state) return curr; } - + b = 0; + c = 0; //CACH + First Half Payload + Sync = 12 + 54 + 24 //dibit_p = state->dibit_buf_p - 90; dibit_p = state->dmr_payload_p - 90; @@ -740,14 +690,42 @@ void dmrMSData (dsd_opts * opts, dsd_state * state) dibit = (dibit ^ 2); } state->dmr_stereo_payload[i] = dibit; + //load cach + if (i < 12) + { + MSCach[cachInterleave[(i*2)]] = (1 & (dibit >> 1)); // bit 1 + MSCach[cachInterleave[(i*2)+1]] = (1 & dibit); // bit 0 + } + //load slot, first half + if (i > 60 && i < 66) + { + MSSlot[(b*2)] = (1 & (dibit >> 1)); // bit 1 + MSSlot[(b*2)+1] = (1 & dibit); // bit + b++; + } + //load sync + if (i > 66) + { + MSSync[(c*2)] = (1 & (dibit >> 1)); // bit 1 + MSSync[(c*2)+1] = (1 & dibit); // bit 0 + c++; + } } for (i = 0; i < 54; i++) { dibit = getDibit(opts, state); state->dmr_stereo_payload[i+90] = dibit; + //load slot, second half + if (i < 6) + { + MSSlot[(b*2)] = (1 & (dibit >> 1)); // bit 1 + MSSlot[(b*2)+1] = (1 & dibit); // bit + b++; + } } + //hide behind payload due to errs in data in MS mode if (opts->payload == 1) { @@ -775,9 +753,6 @@ void dmrMSData (dsd_opts * opts, dsd_state * state) state->dmr_stereo = 0; state->dmr_ms_mode = 0; - //reset drop values since we don't know which slot (because I'm too lazy to write that part) - state->dropL = 256; - state->dropR = 256; //get potential first half payload dibits and store them in the payload for the next repitition, MS voice or data. skipDibit (opts, state, 144); diff --git a/src/dmr_process_voice.c b/src/dmr_process_voice.c index 909f11d..a6ed0f8 100644 --- a/src/dmr_process_voice.c +++ b/src/dmr_process_voice.c @@ -19,10 +19,6 @@ #include "dmr_const.h" #include "p25p1_check_hdu.h" -// -//A -// - void ProcessDMR (dsd_opts * opts, dsd_state * state) { uint32_t i, j; @@ -40,7 +36,6 @@ void ProcessDMR (dsd_opts * opts, dsd_state * state) TSVoiceSupFrameL = &state->TS1SuperFrame; TSVoiceSupFrameR = &state->TS2SuperFrame; -// int BP[256] = { 0x0000, 0x1F00, 0xE300, 0xFC00, 0x2503, 0x3A03, 0xC603, 0xD903, 0x4A05, 0x5505, 0xA905, 0xB605, 0x6F06, 0x7006, 0x8C06, 0x9306, @@ -75,9 +70,8 @@ int BP[256] = { 0x0BF0, 0x14F0, 0xE8F0, 0xF7F0, 0x2EF3, 0x31F3, 0xCDF3, 0xD2F3, 0x41F5, 0x5EF5, 0xA2F5, 0xBDF5, 0x64F6, 0x7BF6, 0x87F6, 0x98F6 //255 }; -// -//H -// + + if (state->currentslot == 0 && state->K > 0 && state->dmr_so & 0x40 && state->payload_keyid == 0) { fprintf (stderr, "%s", KYEL); @@ -85,12 +79,12 @@ if (state->currentslot == 0 && state->K > 0 && state->dmr_so & 0x40 && state->pa fprintf (stderr, "%s", KNRM); k = BP[state->K]; k = ( ((k & 0xFF0F) << 32 ) + (k << 16) + k ); - + for(Frame = 0; Frame < 6; Frame++) { for(i = 0; i < 3; i++) { - for(j = 0; j < 49; j++) + for(j = 0; j < 48; j++) { x = ( ((k << j) & 0x800000000000) >> 47 ); TSVoiceSupFrameL->TimeSlotAmbeVoiceFrame[Frame].AmbeBit[i][j] ^= x; @@ -111,7 +105,7 @@ if (state->currentslot == 1 && state->K > 0 && state->dmr_soR & 0x40 && state->p { for(i = 0; i < 3; i++) { - for(j = 0; j < 49; j++) + for(j = 0; j < 48; j++) { x = ( ((k << j) & 0x800000000000) >> 47 ); TSVoiceSupFrameR->TimeSlotAmbeVoiceFrame[Frame].AmbeBit[i][j] ^= x; @@ -119,15 +113,10 @@ if (state->currentslot == 1 && state->K > 0 && state->dmr_soR & 0x40 && state->p } } } -// -//B -// + if (state->currentslot == 0) { - if (opts->payload == 1 && state->R == 0) - { - fprintf(stderr, "\n"); //line break for AMBE printer - } + for(Frame = 0; Frame < 6; Frame++) //6 { /* 1 DMR frame contains 3 AMBE voice samples */ @@ -172,10 +161,7 @@ if (state->currentslot == 0) if (state->currentslot == 1) { - if (opts->payload == 1) - { - fprintf(stderr, "\n"); //line break for AMBE printer - } + for(Frame = 0; Frame < 6; Frame++) { /* 1 DMR frame contains 3 AMBE voice samples */ diff --git a/src/dmr_sync.c b/src/dmr_sync.c index 7a85988..662eb26 100644 --- a/src/dmr_sync.c +++ b/src/dmr_sync.c @@ -17,10 +17,35 @@ #include "dsd.h" -//#define PRINT_PI_HEADER_BYTES -//#define PRINT_VOICE_LC_HEADER_BYTES -//#define PRINT_TERMINAISON_LC_BYTES -//#define PRINT_VOICE_BURST_BYTES + +//time_t now; +char * getTimeL(void) //get pretty hh:mm:ss timestamp +{ + time_t t = time(NULL); + + char * curr; + char * stamp = asctime(localtime( & t)); + + curr = strtok(stamp, " "); + curr = strtok(NULL, " "); + curr = strtok(NULL, " "); + curr = strtok(NULL, " "); + + return curr; +} + +//getDate has a bug that affects writing to file using fopen 32-bit Ubuntu OS, need to look into +char * getDateL(void) { + char datename[99]; //increased to 99 to fix 32-bit Ubuntu when fopen file printing to lrrp.txt + char * curr2; + struct tm * to; + time_t t; + t = time(NULL); + to = localtime( & t); + strftime(datename, sizeof(datename), "%Y/%m/%d", to); + curr2 = strtok(datename, " "); + return curr2; +} //Need to work in a way to seperate data bursts on seperate slots, having data pouring into both slots simultaneously //Need to make seperate superframe arrays for each @@ -88,25 +113,7 @@ void Process34Data(dsd_opts * opts, dsd_state * state, unsigned char tdibits[98] unsigned char TrellisReturn[18]; //CDMRTrellisDecode(tdibits, TrellisReturn); //figure out how this works!! CDMRTrellisDecode(tdibits_reverse, TrellisReturn); //NEEDS REVERSE DIBITS! - if (opts->payload == 1) - { - fprintf (stderr,"%s", KCYN); - fprintf (stderr, "\nFull 3/4 Rate Trellis Payload\n "); - for (i = 0; i < 18; i++) - { - fprintf (stderr, "[%02X]", TrellisReturn[i]); - } - fprintf (stderr, "\n Hex to Ascii - "); - for (i = 0; i < 18; i++) - { - if (TrellisReturn[i] <= 0x7E && TrellisReturn[i] >=0x20) - { - fprintf (stderr, "%c", TrellisReturn[i]); - } - else fprintf (stderr, "."); - } - fprintf (stderr,"%s", KNRM); //change back to normal - } + /* Extract the BPTC 196,96 DMR data */ //IrrecoverableErrors = BPTC_196x96_Extract_Data(DeInteleavedData, DmrDataBit, R); // @@ -142,12 +149,21 @@ void Process34Data(dsd_opts * opts, dsd_state * state, unsigned char tdibits[98] } */ /* Convert the 96 bit of voice LC Header data into 12 bytes */ - k = 0; + + //define our block and padding values + uint8_t blocks = state->data_header_blocks[slot] - 1; //subtract 1 for the relevant value in the calc below + uint8_t padding = state->data_header_padding[slot]; + + //shift data in the superframe up a block + k = 0; //is this still used? for(i = 0; i < 16; i++) //16, or 18? seems to have two extra bytes in front currently { - state->dmr_34_rate_sf[slot][i] = state->dmr_34_rate_sf[slot][i+16]; //shift middle to left 12 to load up new round - state->dmr_34_rate_sf[slot][i+16] = state->dmr_34_rate_sf[slot][i+32]; //shift far right middle to left middle 12, going four frames deep; + state->dmr_34_rate_sf[slot][i] = state->dmr_34_rate_sf[slot][i+16]; + state->dmr_34_rate_sf[slot][i+16] = state->dmr_34_rate_sf[slot][i+32]; state->dmr_34_rate_sf[slot][i+32] = state->dmr_34_rate_sf[slot][i+48]; + state->dmr_34_rate_sf[slot][i+48] = state->dmr_34_rate_sf[slot][i+64]; + state->dmr_34_rate_sf[slot][i+64] = state->dmr_34_rate_sf[slot][i+80]; + DmrDataByte[i] = 0; for(j = 0; j < 8; j++) { @@ -156,95 +172,70 @@ void Process34Data(dsd_opts * opts, dsd_state * state, unsigned char tdibits[98] DmrDataByte[i] = DmrDataByte[i] | (DmrDataBit[k] & 0x01); k++; } - //state->dmr_34_rate_sf[i+36] = ~DmrDataByte[i]; //copy byte to right hand side of shift frame - //state->dmr_34_rate_sf[i+36] = ~TrellisReturn[i]& 0xFF; - state->dmr_34_rate_sf[slot][i+48] = TrellisReturn[i+2]; //plus two to skip the first two bytes - } - if (opts->payload == 2) - { - fprintf (stderr, "%s",KGRN); - fprintf (stderr, "\n Rate 3/4 Superframe - Slot [%d]\n ",slot+1); - for (i = 0; i < (16*4); i++) - { - fprintf (stderr, "[%02X]", state->dmr_34_rate_sf[slot][i]); - if (i == 15 || i == 31 || i == 47) - { - fprintf (stderr, "\n "); //line break and two spaces after each 16 bytes - } - } - fprintf (stderr, "%s ", KNRM); - } - //fprintf (stderr, "%s ", KNRM); - /* Fill the CRC extracted (before Reed-Solomon (12,9) FEC correction) */ - CRCExtracted = 0; - //for(i = 0; i < 24; i++) - for(i = 0; i < 16; i++) - { - //CRCExtracted = CRCExtracted << 1; - //CRCExtracted = CRCExtracted | (uint32_t)(DmrDataBit[i + 72] & 1); - //CRCExtracted = CRCExtracted | (uint32_t)(DmrDataBit[i + 80] & 1); //80-96 for PI header + + //state->dmr_34_rate_sf[slot][i+48] = TrellisReturn[i+2]; //plus two to skip the first two bytes + state->dmr_34_rate_sf[slot][i+(blocks*16)] = TrellisReturn[i+2]; //plus two to skip the first two bytes } - //Look into whether or not we need to run these CRC checks for this header information - //and see if its applied the same or differently - /* Apply the CRC mask (see DMR standard B.3.12 Data Type CRC Mask) */ - //CRCExtracted = CRCExtracted ^ 0x969696; //does this mask get applied here though for PI? - //CRCExtracted = CRCExtracted ^ 0x6969; - - /* Check/correct the full link control data and compute the Reed-Solomon (12,9) CRC */ - //CRCCorrect = ComputeAndCorrectFullLinkControlCrc(DmrDataByte, &CRCComputed, 0x969696); - //CRCCorrect = ComputeAndCorrectFullLinkControlCrc(DmrDataByte, &CRCComputed, 0x6969); - - // - /* Convert corrected 12 bytes into 96 bits */ - - - //Headers and Addresses - - /* - if ( (state->dmr_34_rate_sf[0] & 0x3F) == 0x05) //0x3F?? or == 0x05 - { - fprintf (stderr, "\n IP4 Header"); - } - - if ( (state->dmr_34_rate_sf[0] & 0x3F) == 0x0C) - { - fprintf (stderr, "\n Source: "); - fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_34_rate_sf[0] & 0x3F), state->dmr_34_rate_sf[1], state->dmr_34_rate_sf[2], state->dmr_34_rate_sf[3]); //strip first two bits off 1st byte - fprintf (stderr, " [%08d]", (state->dmr_34_rate_sf[1] <<16 ) + (state->dmr_34_rate_sf[2] << 8) + state->dmr_34_rate_sf[3] ); - fprintf (stderr, " - Port %05d", (state->dmr_34_rate_sf[8] << 8) + state->dmr_34_rate_sf[9]); - fprintf (stderr, "\n Destination:"); - fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_34_rate_sf[4] & 0x3F), state->dmr_34_rate_sf[5], state->dmr_34_rate_sf[6], state->dmr_34_rate_sf[7]); //strip first two bits off 4th byte?? - fprintf (stderr, " [%08d]", (state->dmr_34_rate_sf[5] <<16 ) + (state->dmr_34_rate_sf[6] << 8) + state->dmr_34_rate_sf[7] ); - fprintf (stderr, " - Port %05d", (state->dmr_34_rate_sf[10] << 8) + state->dmr_34_rate_sf[11]); - } - */ - //temp hide behind payload until working better - if (opts->payload == 1) - { + //Start Polling the 3/4 Rate Super Frame for Data when byte 0 contains values //LRRP + int message_legnth = 0; if ( (state->dmr_34_rate_sf[slot][0] & 0x7F) == 0x45) //Start LRRP now { - //sprintf ( state->dmr_lrrp[state->currentslot][0], "LRRP - "); - fprintf (stderr, "%s ", KMAG); - //fprintf (stderr, "\n IP4 Header"); //Not sure this is accurate info IP4 Header? - //fprintf (stderr, "\n Data Blocks [%d]", state->dmr_34_rate_sf[5]); - for (short i = 1; i < 60; i++) //find way to get padding so we only go as deep as we need to! changed from 64 to 60 to skip the CRC Bytes for confirmed data + //test opening a file with fopen and dumping the LRRP data into it. + //just going to use the same code from EDACS-FM + + //find user home directory and append directory and filename. + FILE * pFile; //put this outside of the if statement? + if (opts->lrrp_file_output == 1) { - /* + char * filename = "/lrrp.txt"; + char * home_dir = getenv("HOME"); + char * filepath = malloc(strlen(home_dir) + strlen(filename) + 1); + strncpy (filepath, home_dir, strlen(home_dir) + 1); + strncat (filepath, filename, strlen(filename) + 1); + //end find user home directory and append directory and filename + + pFile = fopen (filepath, "a"); + + //hard code filename override for those wanting to use other software + //pFile = fopen("DSDPlus.LRRP", "a"); + + + fprintf (pFile, "%s\t %s\t", getDateL(), getTimeL()); //current timestamp, may find a way to only add this IF no included timestamp in LRRP data? + fprintf (pFile, "%08lld\t", state->dmr_lrrp_source[state->currentslot]); //source address from data header + } + + + fprintf (stderr, "%s ", KMAG); + + //go to number of octets minus padding and crc, confirmed data may need a second rule to skip Serial Numbers and Block CRCs + //for (short i = 12; i < ( ((blocks+1)*12) - (padding+4) ); i++) + for (short i = 12; i < ( ((blocks+1)*16) - (padding+4) ); i++) + { + if ( state->dmr_34_rate_sf[slot][i] == 0x0C) //Source and Destination info { - fprintf (stderr, "\n Source:"); + fprintf (stderr, "\n Source: "); fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_34_rate_sf[slot][i+0] & 0x3F), state->dmr_34_rate_sf[slot][i+1], state->dmr_34_rate_sf[slot][i+2], state->dmr_34_rate_sf[slot][i+3]); //strip first two bits off 1st byte fprintf (stderr, " [%08d]", (state->dmr_34_rate_sf[slot][i+1] <<16 ) + (state->dmr_34_rate_sf[slot][i+2] << 8) + state->dmr_34_rate_sf[slot][i+3] ); - fprintf (stderr, " - Port %05d", (state->dmr_34_rate_sf[slot][i+8] << 8) + state->dmr_34_rate_sf[slot][i+9]); - fprintf (stderr, "\n Destination:"); + fprintf (stderr, " - Port %05d ", (state->dmr_34_rate_sf[slot][i+8] << 8) + state->dmr_34_rate_sf[slot][i+9]); + fprintf (stderr, "\n Destination: "); fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_34_rate_sf[slot][i+4] & 0x3F), state->dmr_34_rate_sf[slot][i+5], state->dmr_34_rate_sf[slot][6], state->dmr_34_rate_sf[slot][i+7]); //strip first two bits off 4th byte?? fprintf (stderr, " [%08d]", (state->dmr_34_rate_sf[slot][i+5] <<16 ) + (state->dmr_34_rate_sf[slot][i+6] << 8) + state->dmr_34_rate_sf[slot][i+7] ); fprintf (stderr, " - Port %05d", (state->dmr_34_rate_sf[slot][i+10] << 8) + state->dmr_34_rate_sf[slot][i+11]); + + i = i + 12; //skip 12 bytes here so we don't accidentally trip another flag with data in these bytes } - */ - if ( state->dmr_34_rate_sf[slot][i] == 0x34 ) //timestamp + + if (state->dmr_34_rate_sf[slot][i] == 0x0D) //This should lock on to the second 0x0D value hopefully and tell us the message legnth + { + message_legnth = state->dmr_34_rate_sf[slot][i+1]; + fprintf (stderr, "\n Message Legnth: %02d", message_legnth); + i = i + 2; //skip 2 bytes here so we don't accidentally trip another flag with data in these bytes + } + + if ( state->dmr_34_rate_sf[slot][i] == 0x34 && message_legnth > 27 ) //timestamp, seems to need legnth of 28 { fprintf (stderr, "\n LRRP - Timestamp: "); fprintf (stderr, "%4d.", (state->dmr_34_rate_sf[slot][i+1] << 6) + (state->dmr_34_rate_sf[slot][i+2] >> 2) ); //4 digit year @@ -252,15 +243,22 @@ void Process34Data(dsd_opts * opts, dsd_state * state, unsigned char tdibits[98] fprintf (stderr, "%02d", ( (state->dmr_34_rate_sf[slot][i+3] & 0x30) >> 1) + ((state->dmr_34_rate_sf[slot][i+3] & 0x0E) >> 1) ); //2 digit day fprintf (stderr, " %02d:",( (state->dmr_34_rate_sf[slot][i+3] & 0x01) << 4) + ((state->dmr_34_rate_sf[slot][i+4] & 0xF0) >> 4) ); //2 digit hour fprintf (stderr, "%02d:",( (state->dmr_34_rate_sf[slot][i+4] & 0x0F) << 2) + ((state->dmr_34_rate_sf[slot][i+5] & 0xC0) >> 6) ); //2 digit minute - fprintf (stderr, "%02d", ( (state->dmr_34_rate_sf[slot][i+5] & 0x3F) << 0) ); //2 digit second + fprintf (stderr, "%02d", ( (state->dmr_34_rate_sf[slot][i+5] & 0x3F) << 0) ); //2 digit second + + i = i + 6; //skip 6 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_34_rate_sf[slot][i] == 0x51 ) //lattitude and longitude + + if ( state->dmr_34_rate_sf[slot][i] == 0x51 && message_legnth > 13) //lattitude and longitude, message_lenght > 13? { fprintf (stderr, "\n LRRP -"); fprintf (stderr, " Lat: "); if (state->dmr_34_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? { fprintf (stderr, "-"); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "-"); + } } long int lrrplat; long int lrrplon; @@ -269,63 +267,113 @@ void Process34Data(dsd_opts * opts, dsd_state * state, unsigned char tdibits[98] lrrplat = ( ( ((state->dmr_34_rate_sf[slot][i+1] & 0x7F ) << 24 ) + (state->dmr_34_rate_sf[slot][i+2] << 16) + (state->dmr_34_rate_sf[slot][i+3] << 8) + state->dmr_34_rate_sf[slot][i+4]) * 1 ); lrrplon = ( ( (state->dmr_34_rate_sf[slot][i+5] << 24 ) + (state->dmr_34_rate_sf[slot][i+6] << 16) + (state->dmr_34_rate_sf[slot][i+7] << 8) + state->dmr_34_rate_sf[slot][i+8]) * 1 ); fprintf (stderr, "%.5lf ", ((double)lrrplat) * lat_unit); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.5lf\t", ((double)lrrplat) * lat_unit); + } fprintf (stderr, " Lon: "); if (state->dmr_34_rate_sf[slot][i+5] & 0x80) //first bit indicates a sign, or hemisphere? { //fprintf (stderr, "-"); } fprintf (stderr, "%.5lf", (lrrplon * lon_unit) ); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.5lf\t", (lrrplon * lon_unit) ); + } if (state->dmr_34_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? { sprintf ( state->dmr_lrrp[state->currentslot][3], "Lat: -%.5lf Lon: %.5lf ", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); } - else sprintf ( state->dmr_lrrp[state->currentslot][3], "Lat: %.5lf Lon: %.5lf ", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); - //print for easy copy/paste into browser? + else sprintf ( state->dmr_lrrp[state->currentslot][3], "Lat: %.5lf Lon: %.5lf ", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); //print for easy copy/paste into browser? //fprintf (stderr, " ("); if (state->dmr_34_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? { fprintf (stderr, " (-%.5lf, %.5lf)", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); - //fprintf (stderr, " -"); } else fprintf (stderr, " (%.5lf, %.5lf)", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); + + i = i + 9 + 2; //skip 9 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_34_rate_sf[slot][i] == 0x6C ) + if ( state->dmr_34_rate_sf[slot][i] == 0x6C && message_legnth > 13) { - //either Plus is wrong, or I'm wrong on higher velocities exceeding 0xFF. + //either Plus is wrong, or I'm wrong on higher velocities exceeding 0xFF. double check double values? //fprintf (stderr, "\n LRRP - Vi %02X Vf %02X Velocity Units (hex)", state->dmr_34_rate_sf[i+1], state->dmr_34_rate_sf[i+2]); double velocity = ( ((double)( (state->dmr_34_rate_sf[slot][i+1] ) + state->dmr_34_rate_sf[slot][i+2] )) / ( (double)128)); - //fprintf (stderr, "\n LRRP - %.4lf Meters Per Second", velocity); - fprintf (stderr, "\n LRRP - %.4lf m/s %.4lf km/h %.4lf mph", velocity, (3.6 * velocity), (2.2369 * velocity) ); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.3lf\t ", (velocity * 3.6) ); + } + fprintf (stderr, "\n LRRP - Velocity: %.4lf m/s %.4lf km/h %.4lf mph", velocity, (3.6 * velocity), (2.2369 * velocity) ); sprintf ( state->dmr_lrrp[state->currentslot][4], "Vel: %.4lf kph ", (3.6 * velocity)); + + i = i + 3; //skip 3 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_34_rate_sf[slot][i] == 0x56 ) + if ( state->dmr_34_rate_sf[slot][i] == 0x56 && message_legnth > 13) { //check for appropriate terminology here - Heading, bearing, course, or track? - fprintf (stderr, "\n LRRP - Direction %d Degrees", state->dmr_34_rate_sf[slot][i+1] * 2); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%d\t", state->dmr_34_rate_sf[slot][i+1] * 2); + } + fprintf (stderr, "\n LRRP - Track: %d Degrees", state->dmr_34_rate_sf[slot][i+1] * 2); sprintf ( state->dmr_lrrp[state->currentslot][5], "Dir: %d Deg ", state->dmr_34_rate_sf[slot][i+1] * 2); + + //i = ((blocks+1)*12); //skip to end of loop here so we don't accidentally trip another flag with data in these bytes + i = 99; + } + //try for a Control ACK at the very end if nothing else pops, flag still unknown + if ( (state->dmr_34_rate_sf[slot][i] == 0x36 || state->dmr_34_rate_sf[slot][i] == 0x37) && message_legnth > 6 ) + { + fprintf (stderr, "\n LRRP - Control ACK "); } } + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "\n"); + fclose (pFile); + } } - }//end payload fprintf (stderr, "%s ", KNRM); + //Full - if (opts->payload == 2) + if (opts->payload == 1) { - fprintf (stderr, "\nFull 3/4 Rate Payload DmrDataByte (reverse)\n "); + fprintf (stderr,"%s", KCYN); + fprintf (stderr, "\n Full 3/4 Rate Trellis Payload - Slot [%d]\n ", slot+1); + for (i = 0; i < 18; i++) //16, or 18? + { + fprintf (stderr, "[%02X]", TrellisReturn[i]); + } + fprintf (stderr, "\n Hex to Ascii - "); for (i = 0; i < 18; i++) { - fprintf (stderr, "[%02X]", DmrDataByte[i]); - } - - fprintf (stderr, "\nFull 3/4 Rate Payload DmrDataByte (reverse inverted)\n "); - for (i = 0; i < 18; i++) - { - fprintf (stderr, "[%02X]", ~DmrDataByte[i] & 0xFF); + if (TrellisReturn[i] <= 0x7E && TrellisReturn[i] >=0x20) + { + fprintf (stderr, "%c", TrellisReturn[i]); + } + else fprintf (stderr, "."); } + fprintf (stderr,"%s", KNRM); //change back to normal } - + //Full Super Frame - Debug Output + if (opts->payload == 1 && state->data_block_counter[state->currentslot] == state->data_header_blocks[state->currentslot]) + { + fprintf (stderr, "%s",KGRN); + fprintf (stderr, "\n Rate 3/4 Superframe - Slot [%d]\n ",slot+1); + for (i = 0; i < (16*4); i++) //16, or 18? + { + fprintf (stderr, "[%02X]", state->dmr_34_rate_sf[slot][i]); + if (i == 15 || i == 31 || i == 47 || i == 63 || i == 79) + { + fprintf (stderr, "\n "); //line break and two spaces after each 16 bytes + } + } + fprintf (stderr, "%s ", KNRM); + } + state->data_block_counter[state->currentslot]++; //increment block counter } //This is Data Header, why did I name it Data Data @@ -334,13 +382,14 @@ void ProcessDataData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint short int slot = 0; slot = (short int)state->currentslot; + //see if we still need this portion if we are going to use the data block info //clear out the 3/4 rate data superframe so we don't repeat old info - for (short int i = 0; i < (16*4); i++) + for (short int i = 0; i < (16*6); i++) { state->dmr_34_rate_sf[slot][i] = 0; } //clear out the 1/2 rate data superframe so we don't repeat old info - for (short int i = 0; i < (12*3); i++) + for (short int i = 0; i < (12*5); i++) //12*5 = 60 { state->dmr_12_rate_sf[slot][i] = 0; } @@ -446,32 +495,172 @@ void ProcessDataData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint } else {}//fprintf (stderr, ("\n(Data CRC Fail, FEC Fail)")); - // + //collect relevant data header info, figure out format, and grab appropriate info from it + if (state->data_p_head[state->currentslot] == 0) + { + fprintf (stderr, "%s ", KGRN); + state->data_block_counter[state->currentslot] = 1; //reset block counter to 1 + state->data_header_format[state->currentslot] = DmrDataByte[0]; //collect the entire byte, we can check group or individual, response requested as well on this + state->data_header_sap[state->currentslot] = (DmrDataByte[1] & 0xF0) >> 4; //SAP is IP(4) or other + + // state->data_header_padding[state->currentslot] = DmrDataByte[1] & 0xF; //number of padding octets on last block + // state->data_header_blocks[state->currentslot] = DmrDataByte[8] & 0x7F; //number of blocks to follow, most useful for when to poll the super array for data + // fprintf (stderr, "\n Unconfirmed Data Header: Format %02X - SAP %02X - Block Count %02X - Padding Octets %02X", + // state->data_header_format[state->currentslot], state->data_header_sap[state->currentslot], + // state->data_header_blocks[state->currentslot], state->data_header_padding[state->currentslot] ); + + if ( (state->data_header_format[state->currentslot] & 0xF) == 0x2) + { + state->data_header_padding[state->currentslot] = DmrDataByte[1] & 0xF; //number of padding octets on last block + state->data_header_blocks[state->currentslot] = DmrDataByte[8] & 0x7F; //number of blocks to follow, most useful for when to poll the super array for data + fprintf (stderr, "\n Unconfirmed Data Header: DPF %01X - SAP %02X - Block Count %02X - Padding Octets %02X", + state->data_header_format[state->currentslot] & 0xF, state->data_header_sap[state->currentslot], + state->data_header_blocks[state->currentslot], state->data_header_padding[state->currentslot] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF) == 0x3) + { + state->data_header_padding[state->currentslot] = DmrDataByte[1] & 0xF; //number of padding octets on last block + state->data_header_blocks[state->currentslot] = DmrDataByte[8] & 0x7F; //number of blocks to follow, most useful for when to poll the super array for data + fprintf (stderr, "\n Confirmed Data Header: DPF %01X - SAP %02X - Block Count %02X - Padding Octets %02X", + state->data_header_format[state->currentslot] & 0xF, state->data_header_sap[state->currentslot], + state->data_header_blocks[state->currentslot], state->data_header_padding[state->currentslot] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF) == 0xD) //DD_HEAD + { + state->data_header_padding[state->currentslot] = DmrDataByte[7] & 0xF; + state->data_header_blocks[state->currentslot] = ( (DmrDataByte[0] & 0x30) | ((DmrDataByte[1] & 0xF) >> 0) ); //what a pain MSB | LSB + fprintf (stderr, "\n Short Data - Defined: DPF %01X - SAP %02X - Appended Blocks %02X - Padding Bits %02X", + state->data_header_format[state->currentslot] & 0xF, state->data_header_sap[state->currentslot], + state->data_header_blocks[state->currentslot], state->data_header_padding[state->currentslot] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF) == 0xE) //SP_HEAD or R_HEAD + { + state->data_header_padding[state->currentslot] = DmrDataByte[7] & 0xF; + state->data_header_blocks[state->currentslot] = ( (DmrDataByte[0] & 0x30) | ((DmrDataByte[1] & 0xF) >> 0) ); //what a pain MSB | LSB + fprintf (stderr, "\n Short Data - Raw or Precoded: DPF %01X - SAP %02X - Appended Blocks %02X - Padding Bits %02X", + state->data_header_format[state->currentslot] & 0xF, state->data_header_sap[state->currentslot], + state->data_header_blocks[state->currentslot], state->data_header_padding[state->currentslot] ); + } + + + } + + //sanity check to prevent random crash in 1/2 rate and 3/4 rate data + //we want to assign extra large block sizes to a max of 7 so we don't overload the 1/2 or 3/4 array + if (state->data_header_blocks[state->currentslot] > 7) + { + state->data_header_blocks[state->currentslot] = 7; //currently 1/2 only supports a max of 7 blocks per slot + } + + + //set source here so we can reference it in our text dump + state->dmr_lrrp_source[state->currentslot] = (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7]; + fprintf (stderr, "%s ", KNRM); + //end collecting data header info + fprintf (stderr, "%s ", KMAG); - if (DmrDataByte[0] == 0x43) + if (state->data_header_sap[state->currentslot] == 0x4 && state->data_p_head[state->currentslot] == 0) //4 is IP data { - fprintf (stderr, "\n IP4 Source IP:"); - fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not - fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] << 8) + DmrDataByte[4] ); - fprintf (stderr, " Destination IP:"); - fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not - fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] <<8 ) + DmrDataByte[7] ); + fprintf (stderr, "\n IP4 Data - Source: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7] ); + fprintf (stderr, " Destination: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4] ); + + //part below should probably be inside of above if condition + if (1 == 1) //already setting by current slot, no need for checking first + { + sprintf ( state->dmr_lrrp[state->currentslot][1], "SRC [%d] DST [%d] ", + ( (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7]), + ( (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4]) ); + } + } - if (1 == 1) //already setting by current slot, no need for checking first + + if (state->data_header_sap[state->currentslot] == 0x5 && state->data_p_head[state->currentslot] == 0) //5 is ARP Address Resolution Protocol { - sprintf ( state->dmr_lrrp[state->currentslot][1], "SRC [%d] TGT [%d] ", - ( (DmrDataByte[2] <<16 ) + (DmrDataByte[3] << 8) + DmrDataByte[4]), - ( (DmrDataByte[5] <<16 ) + (DmrDataByte[6] <<8 ) + DmrDataByte[7]) ); + fprintf (stderr, "\n ARP - Address Resolution Protocol "); } - if (DmrDataByte[0] == 0x01) + + if ( (state->data_header_format[state->currentslot] & 0xF ) == 0xD && state->data_p_head[state->currentslot] == 0) //5 is ARP Address Resolution Protocol { - fprintf (stderr, "\n LRRP Control ACK - "); + fprintf (stderr, "\n Short Data - Defined - Source: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7] ); + fprintf (stderr, " Destination: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF) == 0xE && state->data_p_head[state->currentslot] == 0) //5 is ARP Address Resolution Protocol + { + fprintf (stderr, "\n Short Data - Raw or Status/Precoded - Source: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7] ); + fprintf (stderr, " Destination: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF ) == 0x1 && state->data_p_head[state->currentslot] == 0) //5 is ARP Address Resolution Protocol + { + fprintf (stderr, "\n Response Packet - Source: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7] ); + fprintf (stderr, " Destination: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4] ); + } + + if ( (state->data_header_format[state->currentslot] & 0xF ) == 0x0 && state->data_p_head[state->currentslot] == 0) //5 is ARP Address Resolution Protocol + { + fprintf (stderr, "\n Unified Data Transport - Source: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[0] & 0x3F), DmrDataByte[1], DmrDataByte[2], DmrDataByte[3]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] << 8) + DmrDataByte[7] ); + fprintf (stderr, " Destination: "); + //fprintf (stderr, " %d.%d.%d.%d", (DmrDataByte[4] & 0x3F), DmrDataByte[5], DmrDataByte[6], DmrDataByte[7]); //not sure if these are right or not + fprintf (stderr, "[%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] <<8 ) + DmrDataByte[4] ); + } + + if ( (state->data_header_format[state->currentslot] & 0x40) == 0x40 && state->data_p_head[state->currentslot] == 0) //check response req bit + { + fprintf (stderr, "\n Response Requested - "); fprintf (stderr, " Source:"); - fprintf (stderr, " %d", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] << 8) + DmrDataByte[4] ); + fprintf (stderr, " [%d]", (DmrDataByte[2] <<16 ) + (DmrDataByte[3] << 8) + DmrDataByte[4] ); fprintf (stderr, " Destination:"); - fprintf (stderr, " %d", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] <<8 ) + DmrDataByte[7] ); + fprintf (stderr, " [%d]", (DmrDataByte[5] <<16 ) + (DmrDataByte[6] <<8 ) + DmrDataByte[7] ); + } + + //if proprietary header was flagged by the last data header, then process data differently + //maybe we could add the data header bytes found here into the 12 rate and/or 34 rate superframe + if (state->data_p_head[state->currentslot] == 1) + { + fprintf (stderr, "\n Proprietary Data Header: SAP %01X - Format %01X - MFID %02X", + (DmrDataByte[0] & 0xF0) >> 4, DmrDataByte[0] & 0xF, DmrDataByte[1] ); + + state->data_p_head[state->currentslot] = 0; + state->data_header_sap[state->currentslot] = 0; //reset this to zero so we don't trip the condition below + state->data_block_counter[state->currentslot]++; //increment the counter since this counts against the data blocks + //shim the databytes into the approprate 12 Rate Super Frame + uint8_t blocks = state->data_header_blocks[state->currentslot] - 1; + for(i = 0; i < 12; i++) + { + state->dmr_12_rate_sf[slot][i+(blocks*12)] = DmrDataByte[i]; + } + } + + //only set this flag after everything else is processed + if (state->data_header_sap[state->currentslot] == 0x9 && state->data_p_head[state->currentslot] == 0) //9 is Proprietary Packet data + { + fprintf (stderr, "\n Proprietary Packet Data Incoming "); + state->data_p_head[state->currentslot] = 1; //flag that next data header will be a proprietary data header } fprintf (stderr, "%s ", KNRM); + //Full if (opts->payload == 1) { @@ -484,6 +673,7 @@ void ProcessDataData(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint fprintf (stderr, "%s", KNRM); } + } void Process1Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_t syncdata[48], uint8_t SlotType[20]) @@ -1015,14 +1205,19 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ /* Fill the reserved bit (R(0)-R(2) of the BPTC(196,96) block) */ BPTCReservedBits = (R[0] & 0x01) | ((R[1] << 1) & 0x02) | ((R[2] << 2) & 0x08); - /* Convert the 96 bit of voice LC Header data into 12 bytes */ + //define our block and padding values + uint8_t blocks = state->data_header_blocks[slot] - 1; //subtract 1 for the relevant value in the calc below + uint8_t padding = state->data_header_padding[slot]; + //shift data in the superframe up a block k = 0; for(i = 0; i < 12; i++) { - state->dmr_12_rate_sf[slot][i] = state->dmr_12_rate_sf[slot][i+12]; //shift middle 12 to leftmost 12 to load up new round - state->dmr_12_rate_sf[slot][i+12] = state->dmr_12_rate_sf[slot][i+24]; //shift middle right 12 to middle left 12, going four frames deep; - state->dmr_12_rate_sf[slot][i+24] = state->dmr_12_rate_sf[slot][i+36]; //shift far right 12 to middle right 12, going four frames deep; - state->dmr_12_rate_sf[slot][i+36] = state->dmr_12_rate_sf[slot][i+48]; + state->dmr_12_rate_sf[slot][i] = state->dmr_12_rate_sf[slot][i+12]; //shift block 2 to block 1 + state->dmr_12_rate_sf[slot][i+12] = state->dmr_12_rate_sf[slot][i+24]; //shift block 3 to block 2 + state->dmr_12_rate_sf[slot][i+24] = state->dmr_12_rate_sf[slot][i+36]; //shift block 4 to block 3 + state->dmr_12_rate_sf[slot][i+36] = state->dmr_12_rate_sf[slot][i+48]; //shift block 5 to block 4 + state->dmr_12_rate_sf[slot][i+48] = state->dmr_12_rate_sf[slot][i+60]; //shift block 6 to block 5 + state->dmr_12_rate_sf[slot][i+60] = state->dmr_12_rate_sf[slot][i+72]; //shift block 7 to block 6 DmrDataByte[i] = 0; for(j = 0; j < 8; j++) { @@ -1030,22 +1225,9 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ DmrDataByte[i] = DmrDataByte[i] | (DmrDataBit[k] & 0x01); k++; } - state->dmr_12_rate_sf[slot][i+48] = DmrDataByte[i]; //copy byte to right hand side of shift frame - } - - if (opts->payload == 2) - { - fprintf (stderr, "%s",KGRN); - fprintf (stderr, "\n Rate 1/2 Superframe - Slot [%d]\n ",slot+1); - for (i = 0; i < (12*5); i++) - { - fprintf (stderr, "[%02X]", state->dmr_12_rate_sf[slot][i]); - if (i == 11 || i == 23 || i == 35 || i == 47) //line break and two spaces after each 16 bytes - { - fprintf (stderr, "\n "); - } - } - fprintf (stderr, "%s ", KNRM); + //state->dmr_12_rate_sf[slot][i+48] = DmrDataByte[i]; //copy byte to right hand side of shift frame + //start loading new superframe at appropriate block count determined by the data header + state->dmr_12_rate_sf[slot][i+(blocks*12)] = DmrDataByte[i]; //if 3 blocks, then start at position 36; 4 blocks at 48, 5 at } /* Fill the CRC extracted (before Reed-Solomon (12,9) FEC correction) */ @@ -1096,111 +1278,65 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ DmrDataBit[j + 6] = (DmrDataByte[i] >> 1) & 0x01; DmrDataBit[j + 7] = (DmrDataByte[i] >> 0) & 0x01; } - //Headers Source Destination - //Start Source Destination early in case not enough 1/2 data frames - if ( (state->dmr_12_rate_sf[slot][36] & 0x7F) == 0x45 ) - { - fprintf (stderr, "%s ", KMAG); - //fprintf (stderr, "\n IP4 Header"); //Not sure this is accurate info IP4 Header? - //fprintf (stderr, "\n Data Blocks [%d]", state->dmr_34_rate_sf[5]); - for (short i = 36; i < 60; i++) //find way to get padding so we only go as deep as we need to! - { - if ( state->dmr_12_rate_sf[slot][i] == 0x0C) //Source and Destination info - { - fprintf (stderr, "\n Source:"); - fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_12_rate_sf[slot][i+0] & 0x3F), state->dmr_12_rate_sf[slot][i+1], state->dmr_12_rate_sf[slot][i+2], state->dmr_12_rate_sf[slot][i+3]); //strip first two bits off 1st byte - fprintf (stderr, " [%08d]", (state->dmr_12_rate_sf[slot][i+1] <<16 ) + (state->dmr_12_rate_sf[slot][i+2] << 8) + state->dmr_12_rate_sf[slot][i+3] ); - fprintf (stderr, " - Port %05d", (state->dmr_12_rate_sf[slot][i+8] << 8) + state->dmr_12_rate_sf[slot][i+9]); - fprintf (stderr, "\n Destination:"); - fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_12_rate_sf[slot][i+4] & 0x3F), state->dmr_12_rate_sf[slot][i+5], state->dmr_12_rate_sf[slot][6], state->dmr_12_rate_sf[slot][i+7]); //strip first two bits off 4th byte?? - fprintf (stderr, " [%08d]", (state->dmr_12_rate_sf[slot][i+5] <<16 ) + (state->dmr_12_rate_sf[slot][i+6] << 8) + state->dmr_12_rate_sf[slot][i+7] ); - fprintf (stderr, " - Port %05d", (state->dmr_12_rate_sf[slot][i+10] << 8) + state->dmr_12_rate_sf[slot][i+11]); - } - } - fprintf (stderr, "%s ", KNRM); - } - /* - //Jurek lrrp, 0x41 is probably a different header type or something, or I need to look at the data header packet PDU first. - if ( (state->dmr_12_rate_sf[slot][36] & 0x7F) == 0x41) //Start LRRP now - { - sprintf ( state->dmr_lrrp[state->currentslot][0], "LRRP - "); - fprintf (stderr, "%s ", KMAG); - for (short i = 36; i < 60; i++) //find way to get padding so we only go as deep as we need to! - { - if ( state->dmr_12_rate_sf[slot][i] == 0x51 ) //lattitude and longitude - { - fprintf (stderr, "\n LRRP -"); - fprintf (stderr, " Lat: "); - if (state->dmr_12_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? - { - fprintf (stderr, "-"); - } - long int lrrplat; - long int lrrplon; - double lat_unit = (double)180/(double)4294967295; - double lon_unit = (double)360/(double)4294967295; - lrrplat = ( ( ((state->dmr_12_rate_sf[slot][i+1] & 0x7F ) << 24 ) + (state->dmr_12_rate_sf[slot][i+2] << 16) + (state->dmr_12_rate_sf[slot][i+3] << 8) + state->dmr_12_rate_sf[slot][i+4]) * 1 ); - lrrplon = ( ( (state->dmr_12_rate_sf[slot][i+5] << 24 ) + (state->dmr_12_rate_sf[slot][i+6] << 16) + (state->dmr_12_rate_sf[slot][i+7] << 8) + state->dmr_12_rate_sf[slot][i+8]) * 1 ); - fprintf (stderr, "%.5lf ", ((double)lrrplat) * lat_unit); - fprintf (stderr, " Lon: "); - if (state->dmr_12_rate_sf[slot][i+5] & 0x80) //first bit indicates a sign, or hemisphere? - { - //fprintf (stderr, "-"); - } - fprintf (stderr, "%.5lf", (lrrplon * lon_unit) ); - sprintf ( state->dmr_lrrp[state->currentslot][3], "Lat: %.5lf Lon: %.5lf ", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); - //print for easy copy/paste into browser? - //fprintf (stderr, " ("); - if (state->dmr_12_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? - { - fprintf (stderr, "-"); - } - fprintf (stderr, "%.5lf, %.5lf)", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); - } - - if ( state->dmr_12_rate_sf[slot][i] == 0x6C ) - { - //either Plus is wrong, or I'm wrong on higher velocities exceeding 0xFF. - //fprintf (stderr, "\n LRRP - Vi %02X Vf %02X Velocity Units (hex)", state->dmr_34_rate_sf[i+1], state->dmr_34_rate_sf[i+2]); - double velocity = ( ((double)( (state->dmr_12_rate_sf[slot][i+1] ) + state->dmr_12_rate_sf[slot][i+2] )) / ( (double)128)); - //fprintf (stderr, "\n LRRP - %.4lf Meters Per Second", velocity); - fprintf (stderr, "\n LRRP - %.4lf m/s %.4lf km/h %.4lf mph", velocity, (3.6 * velocity), (2.2369 * velocity) ); - sprintf ( state->dmr_lrrp[state->currentslot][4], "Vel: %.4lf kph ", (3.6 * velocity)); - } - if ( state->dmr_12_rate_sf[slot][i] == 0x56 ) - { - //check for appropriate terminology here - Heading, bearing, course, or track? - fprintf (stderr, "\n LRRP - Direction %d Degrees", state->dmr_12_rate_sf[slot][i+1] * 2); - sprintf ( state->dmr_lrrp[state->currentslot][5], "Dir: %d Deg ", state->dmr_12_rate_sf[slot][i+1] * 2); - } - } - } - //end Jurek lrrp - */ + //Start Polling the 1/2 Rate Super Frame for Data when byte 0 contains values //LRRP + int message_legnth = 0; if ( (state->dmr_12_rate_sf[slot][0] & 0x7F) == 0x45) //Start LRRP now { - //sprintf ( state->dmr_lrrp[state->currentslot][0], "LRRP - "); - fprintf (stderr, "%s ", KMAG); - //fprintf (stderr, "\n IP4 Header"); //Not sure this is accurate info IP4 Header? - //fprintf (stderr, "\n Data Blocks [%d]", state->dmr_34_rate_sf[5]); - for (short i = 1; i < 56; i++) //find way to get padding so we only go as deep as we need to! changed from 60 to 56 to skip the CRC bytes + //test opening a file with fopen and dumping the LRRP data into it. + //just going to use the same code from EDACS-FM + + //find user home directory and append directory and filename. + FILE * pFile; //put this outside of the if statement? + if (opts->lrrp_file_output == 1) { - /* + char * filename = "/lrrp.txt"; + char * home_dir = getenv("HOME"); + char * filepath = malloc(strlen(home_dir) + strlen(filename) + 1); + strncpy (filepath, home_dir, strlen(home_dir) + 1); + strncat (filepath, filename, strlen(filename) + 1); + //end find user home directory and append directory and filename + + pFile = fopen (filepath, "a"); + + //hard code filename override for those wanting to use other software + //pFile = fopen("DSDPlus.LRRP", "a"); + + + fprintf (pFile, "%s\t %s\t", getDateL(), getTimeL()); //current timestamp, may find a way to only add this IF no included timestamp in LRRP data? + fprintf (pFile, "%08lld\t", state->dmr_lrrp_source[state->currentslot]); //source address from data header + } + + + fprintf (stderr, "%s ", KMAG); + + //go to number of octets minus padding and crc, confirmed data may need a second rule to skip Serial Numbers and Block CRCs + for (short i = 12; i < ( ((blocks+1)*12) - (padding+4) ); i++) + { + if ( state->dmr_12_rate_sf[slot][i] == 0x0C) //Source and Destination info { - fprintf (stderr, "\n Source:"); + fprintf (stderr, "\n Source: "); fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_12_rate_sf[slot][i+0] & 0x3F), state->dmr_12_rate_sf[slot][i+1], state->dmr_12_rate_sf[slot][i+2], state->dmr_12_rate_sf[slot][i+3]); //strip first two bits off 1st byte fprintf (stderr, " [%08d]", (state->dmr_12_rate_sf[slot][i+1] <<16 ) + (state->dmr_12_rate_sf[slot][i+2] << 8) + state->dmr_12_rate_sf[slot][i+3] ); - fprintf (stderr, " - Port %05d", (state->dmr_12_rate_sf[slot][i+8] << 8) + state->dmr_12_rate_sf[slot][i+9]); - fprintf (stderr, "\n Destination:"); + fprintf (stderr, " - Port %05d ", (state->dmr_12_rate_sf[slot][i+8] << 8) + state->dmr_12_rate_sf[slot][i+9]); + fprintf (stderr, "\n Destination: "); fprintf (stderr, " %03d.%03d.%03d.%03d", (state->dmr_12_rate_sf[slot][i+4] & 0x3F), state->dmr_12_rate_sf[slot][i+5], state->dmr_12_rate_sf[slot][6], state->dmr_12_rate_sf[slot][i+7]); //strip first two bits off 4th byte?? fprintf (stderr, " [%08d]", (state->dmr_12_rate_sf[slot][i+5] <<16 ) + (state->dmr_12_rate_sf[slot][i+6] << 8) + state->dmr_12_rate_sf[slot][i+7] ); fprintf (stderr, " - Port %05d", (state->dmr_12_rate_sf[slot][i+10] << 8) + state->dmr_12_rate_sf[slot][i+11]); + + i = i + 12; //skip 12 bytes here so we don't accidentally trip another flag with data in these bytes } - */ - if ( state->dmr_12_rate_sf[slot][i] == 0x34 ) //timestamp + + if (state->dmr_12_rate_sf[slot][i] == 0x0D) //This should lock on to the second 0x0D value hopefully and tell us the message legnth + { + message_legnth = state->dmr_12_rate_sf[slot][i+1]; + fprintf (stderr, "\n Message Legnth: %02d", message_legnth); + i = i + 2; //skip 2 bytes here so we don't accidentally trip another flag with data in these bytes + } + + if ( state->dmr_12_rate_sf[slot][i] == 0x34 && message_legnth > 27 ) //timestamp, seems to need legnth of 28 { fprintf (stderr, "\n LRRP - Timestamp: "); fprintf (stderr, "%4d.", (state->dmr_12_rate_sf[slot][i+1] << 6) + (state->dmr_12_rate_sf[slot][i+2] >> 2) ); //4 digit year @@ -1208,15 +1344,22 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ fprintf (stderr, "%02d", ( (state->dmr_12_rate_sf[slot][i+3] & 0x30) >> 1) + ((state->dmr_12_rate_sf[slot][i+3] & 0x0E) >> 1) ); //2 digit day fprintf (stderr, " %02d:",( (state->dmr_12_rate_sf[slot][i+3] & 0x01) << 4) + ((state->dmr_12_rate_sf[slot][i+4] & 0xF0) >> 4) ); //2 digit hour fprintf (stderr, "%02d:",( (state->dmr_12_rate_sf[slot][i+4] & 0x0F) << 2) + ((state->dmr_12_rate_sf[slot][i+5] & 0xC0) >> 6) ); //2 digit minute - fprintf (stderr, "%02d", ( (state->dmr_12_rate_sf[slot][i+5] & 0x3F) << 0) ); //2 digit second + fprintf (stderr, "%02d", ( (state->dmr_12_rate_sf[slot][i+5] & 0x3F) << 0) ); //2 digit second + + i = i + 6; //skip 6 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_12_rate_sf[slot][i] == 0x51 ) //lattitude and longitude + + if ( state->dmr_12_rate_sf[slot][i] == 0x51 && message_legnth > 13) //lattitude and longitude, message_lenght > 13? { fprintf (stderr, "\n LRRP -"); fprintf (stderr, " Lat: "); if (state->dmr_12_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? { fprintf (stderr, "-"); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "-"); + } } long int lrrplat; long int lrrplon; @@ -1225,12 +1368,20 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ lrrplat = ( ( ((state->dmr_12_rate_sf[slot][i+1] & 0x7F ) << 24 ) + (state->dmr_12_rate_sf[slot][i+2] << 16) + (state->dmr_12_rate_sf[slot][i+3] << 8) + state->dmr_12_rate_sf[slot][i+4]) * 1 ); lrrplon = ( ( (state->dmr_12_rate_sf[slot][i+5] << 24 ) + (state->dmr_12_rate_sf[slot][i+6] << 16) + (state->dmr_12_rate_sf[slot][i+7] << 8) + state->dmr_12_rate_sf[slot][i+8]) * 1 ); fprintf (stderr, "%.5lf ", ((double)lrrplat) * lat_unit); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.5lf\t", ((double)lrrplat) * lat_unit); + } fprintf (stderr, " Lon: "); if (state->dmr_12_rate_sf[slot][i+5] & 0x80) //first bit indicates a sign, or hemisphere? { //fprintf (stderr, "-"); } fprintf (stderr, "%.5lf", (lrrplon * lon_unit) ); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.5lf\t", (lrrplon * lon_unit) ); + } if (state->dmr_12_rate_sf[slot][i+1] & 0x80) //first bit indicates a sign, or hemisphere? { sprintf ( state->dmr_lrrp[state->currentslot][3], "Lat: -%.5lf Lon: %.5lf ", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); @@ -1242,24 +1393,47 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ fprintf (stderr, " (-%.5lf, %.5lf)", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); } else fprintf (stderr, " (%.5lf, %.5lf)", ((double)lrrplat) * lat_unit , (lrrplon * lon_unit) ); + + i = i + 9 + 2; //skip 9 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_12_rate_sf[slot][i] == 0x6C ) + if ( state->dmr_12_rate_sf[slot][i] == 0x6C && message_legnth > 13) { - //either Plus is wrong, or I'm wrong on higher velocities exceeding 0xFF. + //either Plus is wrong, or I'm wrong on higher velocities exceeding 0xFF. double check double values? //fprintf (stderr, "\n LRRP - Vi %02X Vf %02X Velocity Units (hex)", state->dmr_34_rate_sf[i+1], state->dmr_34_rate_sf[i+2]); double velocity = ( ((double)( (state->dmr_12_rate_sf[slot][i+1] ) + state->dmr_12_rate_sf[slot][i+2] )) / ( (double)128)); - //fprintf (stderr, "\n LRRP - %.4lf Meters Per Second", velocity); - fprintf (stderr, "\n LRRP - %.4lf m/s %.4lf km/h %.4lf mph", velocity, (3.6 * velocity), (2.2369 * velocity) ); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%.3lf\t ", (velocity * 3.6) ); + } + fprintf (stderr, "\n LRRP - Velocity: %.4lf m/s %.4lf km/h %.4lf mph", velocity, (3.6 * velocity), (2.2369 * velocity) ); sprintf ( state->dmr_lrrp[state->currentslot][4], "Vel: %.4lf kph ", (3.6 * velocity)); + + i = i + 3; //skip 3 bytes here so we don't accidentally trip another flag with data in these bytes } - if ( state->dmr_12_rate_sf[slot][i] == 0x56 ) + if ( state->dmr_12_rate_sf[slot][i] == 0x56 && message_legnth > 13) { //check for appropriate terminology here - Heading, bearing, course, or track? - fprintf (stderr, "\n LRRP - Direction %d Degrees", state->dmr_12_rate_sf[slot][i+1] * 2); + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "%d\t", state->dmr_12_rate_sf[slot][i+1] * 2); + } + fprintf (stderr, "\n LRRP - Track: %d Degrees", state->dmr_12_rate_sf[slot][i+1] * 2); sprintf ( state->dmr_lrrp[state->currentslot][5], "Dir: %d Deg ", state->dmr_12_rate_sf[slot][i+1] * 2); + + i = ((blocks+1)*12); //skip to end of loop here so we don't accidentally trip another flag with data in these bytes } + //try for a Control ACK at the very end if nothing else pops, flag still unknown + if ( (state->dmr_12_rate_sf[slot][i] == 0x36 || state->dmr_12_rate_sf[slot][i] == 0x37) && message_legnth > 6 ) + { + fprintf (stderr, "\n LRRP - Control ACK "); + } + } + if (opts->lrrp_file_output == 1) + { + fprintf (pFile, "\n"); + fclose (pFile); } } fprintf (stderr, "%s ", KNRM); @@ -1284,6 +1458,22 @@ void Process12Data(dsd_opts * opts, dsd_state * state, uint8_t info[196], uint8_ } fprintf (stderr,"%s", KNRM); } + //Full Super Frame - Debug Output + if (opts->payload == 1 && state->data_block_counter[state->currentslot] == state->data_header_blocks[state->currentslot]) + { + fprintf (stderr, "%s",KGRN); + fprintf (stderr, "\n Rate 1/2 Superframe - Slot [%d]\n ",slot+1); + for (i = 0; i < ((blocks+1)*12); i++) //only print as many as we have blocks + { + fprintf (stderr, "[%02X]", state->dmr_12_rate_sf[slot][i]); + if (i == 11 || i == 23 || i == 35 || i == 47 || i == 59 || i == 71) //line break and two spaces after each 16 bytes + { + fprintf (stderr, "\n "); + } + } + fprintf (stderr, "%s ", KNRM); + } + state->data_block_counter[state->currentslot]++; //increment block counter } @@ -1681,6 +1871,7 @@ void ProcessDmrPIHeader(dsd_opts * opts, dsd_state * state, uint8_t info[196], u state->payload_algid = DmrDataByte[0]; state->payload_keyid = DmrDataByte[2]; state->payload_mi = ( ((DmrDataByte[3]) << 24) + ((DmrDataByte[4]) << 16) + ((DmrDataByte[5]) << 8) + (DmrDataByte[6]) ); + //state->payload_mi = 0; //testing for late entry, remove later if (state->payload_algid < 0x26) //have it always print? only if a good value, was 1 == 1 { fprintf (stderr, "%s ", KYEL); @@ -1701,6 +1892,7 @@ void ProcessDmrPIHeader(dsd_opts * opts, dsd_state * state, uint8_t info[196], u state->payload_algidR = DmrDataByte[0]; state->payload_keyidR = DmrDataByte[2]; state->payload_miR = ( ((DmrDataByte[3]) << 24) + ((DmrDataByte[4]) << 16) + ((DmrDataByte[5]) << 8) + (DmrDataByte[6]) ); + //state->payload_miR = 0; //testing for late entry, remove later if (state->payload_algidR < 0x26) //have it always print? only if a good value, was 1 == 1 { fprintf (stderr, "%s ", KYEL); @@ -1871,8 +2063,9 @@ void ProcessDmrVoiceLcHeader(dsd_opts * opts, dsd_state * state, uint8_t info[19 } } /* Print the destination ID (TG) and the source ID */ - fprintf (stderr, "%s ", KGRN); - fprintf(stderr, "\n TGT=%u SRC=%u ", TSVoiceSupFrame->FullLC.GroupAddress, TSVoiceSupFrame->FullLC.SourceAddress); + fprintf (stderr, "%s \n", KGRN); + fprintf (stderr, " Slot %d ", state->currentslot+1); + fprintf(stderr, " TGT=%u SRC=%u ", TSVoiceSupFrame->FullLC.GroupAddress, TSVoiceSupFrame->FullLC.SourceAddress); //fprintf(stderr, "FID=0x%02X ", TSVoiceSupFrame->FullLC.FeatureSetID); //state->lasttg = TSVoiceSupFrame->FullLC.GroupAddress; //state->lastsrc = TSVoiceSupFrame->FullLC.SourceAddress; @@ -1884,17 +2077,12 @@ void ProcessDmrVoiceLcHeader(dsd_opts * opts, dsd_state * state, uint8_t info[19 if(TSVoiceSupFrame->FullLC.ServiceOptions & 0x80) fprintf(stderr, "Emergency "); if(TSVoiceSupFrame->FullLC.ServiceOptions & 0x40) { - /* By default select the basic privacy (BP), if the encryption mode is EP ARC4 or AES256 - * a PI Header will be sent with the encryption mode and DSD will upgrade automatically - * the new encryption mode */ - opts->EncryptionMode = MODE_BASIC_PRIVACY; fprintf (stderr, "%s ", KRED); fprintf(stderr, "Encrypted "); //fprintf (stderr, "%s ", KNRM); } else { - opts->EncryptionMode = MODE_UNENCRYPTED; fprintf (stderr, "%s ", KGRN); fprintf(stderr, "Clear/Unencrypted "); //fprintf (stderr, "%s ", KNRM); @@ -2093,21 +2281,20 @@ void ProcessDmrTerminaisonLC(dsd_opts * opts, dsd_state * state, uint8_t info[19 //fprintf(stderr, "FID=0x%02X ", TSVoiceSupFrame->FullLC.FeatureSetID); //reset alg, keys, mi during a TLC call termination EVENT so we aren't stuck on an old value, PI header will proceed a new call if BP isn't used - //assuming the TLC frame comes on the same slot as the call it was terminating? not sure? if (state->currentslot == 0) { - //state->payload_algid = 0; //try disablign all of these? - //state->payload_keyid = 0; + state->payload_algid = 0; + state->payload_keyid = 0; //state->payload_mfid = 0; - //state->payload_mi = 0; //let's try disabling this for a bit + state->payload_mi = 0; } if (state->currentslot == 1) { - //state->payload_algidR = 0; //try disablign all of these? - //state->payload_keyidR = 0; + state->payload_algidR = 0; + state->payload_keyidR = 0; //state->payload_mfid = 0; - //state->payload_miR = 0; ////let's try disabling this for a bit + state->payload_miR = 0; } @@ -2552,6 +2739,8 @@ void ProcessVoiceBurstSync(dsd_opts * opts, dsd_state * state) { fprintf (stderr, "[%02X]", LC_DataBytes[i]); //amateur DMR hams seem to use this area to send callsigns and names using 04,05,06,07 opcodes } + // fprintf(stderr, "\n"); + // fprintf(stderr, "CRC extracted = 0x%04X - CRC computed = 0x%04X - ", CRCExtracted, CRCComputed); fprintf (stderr, "%s", KNRM); diff --git a/src/dmr_voice.c b/src/dmr_voice.c index 3e5170a..db0fd24 100644 --- a/src/dmr_voice.c +++ b/src/dmr_voice.c @@ -646,8 +646,8 @@ void processDMRvoice (dsd_opts * opts, dsd_state * state) ProcessDMR(opts, state); //LFSR if required, change condition? - if ( (state->currentslot == 0 && state->payload_algid != 0 ) || //&& opts->payload == 1 - (state->currentslot == 1 && state->payload_algidR != 0 ) ) //&& opts->payload == 1 + if ( (state->currentslot == 0 && state->payload_algid == 0x21 ) || //&& opts->payload == 1 + (state->currentslot == 1 && state->payload_algidR == 0x21 ) ) //&& opts->payload == 1 { LFSR(state); } diff --git a/src/dsd_audio.c b/src/dsd_audio.c index fc0c08b..73df689 100644 --- a/src/dsd_audio.c +++ b/src/dsd_audio.c @@ -22,6 +22,20 @@ pa_sample_spec tt; pa_sample_spec zz; pa_sample_spec cc; +void closePulseOutput (dsd_opts * opts) +{ + pa_simple_free (opts->pulse_digi_dev_out); + if (opts->dmr_stereo == 1) + { + pa_simple_free (opts->pulse_digi_dev_outR); + } +} + +void closePulseInput (dsd_opts * opts) +{ + pa_simple_free (opts->pulse_digi_dev_in); +} + void openPulseOutput(dsd_opts * opts) { @@ -35,7 +49,7 @@ void openPulseOutput(dsd_opts * opts) if (opts->monitor_input_audio == 1) { - opts->pulse_raw_dev_out = pa_simple_new(NULL, "DSD-FME", PA_STREAM_PLAYBACK, NULL, "Raw Audio Out", &ss, NULL, NULL, NULL); + opts->pulse_raw_dev_out = pa_simple_new(NULL, "DSD-FME3", PA_STREAM_PLAYBACK, NULL, "Raw Audio Out", &ss, NULL, NULL, NULL); } //tt @@ -47,10 +61,11 @@ void openPulseOutput(dsd_opts * opts) opts->pulse_digi_dev_out = pa_simple_new(NULL, "DSD-FME", PA_STREAM_PLAYBACK, NULL, opts->output_name, &tt, left, NULL, NULL); } + if (opts->dmr_stereo == 1) { - opts->pulse_digi_dev_out = pa_simple_new(NULL, "DSD-FME1", PA_STREAM_PLAYBACK, NULL, "DMR/MOTOTRBO SLOT 1", &tt, left, NULL, NULL); - opts->pulse_digi_dev_outR = pa_simple_new(NULL, "DSD-FME2", PA_STREAM_PLAYBACK, NULL, "DMR/MOTOTRBO SLOT 2", &tt, right, NULL, NULL); + opts->pulse_digi_dev_out = pa_simple_new(NULL, "DSD-FME1", PA_STREAM_PLAYBACK, NULL, "DMR SLOT 1", &tt, left, NULL, NULL); + opts->pulse_digi_dev_outR = pa_simple_new(NULL, "DSD-FME2", PA_STREAM_PLAYBACK, NULL, "DMR SLOT 2", &tt, right, NULL, NULL); } } @@ -348,8 +363,7 @@ processAudioR (dsd_opts * opts, dsd_state * state) } } -void -writeSynthesizedVoice (dsd_opts * opts, dsd_state * state) +void writeSynthesizedVoice (dsd_opts * opts, dsd_state * state) { int n; short aout_buf[160]; @@ -377,6 +391,50 @@ writeSynthesizedVoice (dsd_opts * opts, dsd_state * state) } +void writeSynthesizedVoiceR (dsd_opts * opts, dsd_state * state) +{ + int n; + short aout_buf[160]; + short *aout_buf_p; + + aout_buf_p = aout_buf; + state->audio_out_temp_buf_pR = state->audio_out_temp_bufR; + + for (n = 0; n < 160; n++) + { + if (*state->audio_out_temp_buf_pR > (float) 32767) + { + *state->audio_out_temp_buf_pR = (float) 32767; + } + else if (*state->audio_out_temp_buf_pR < (float) -32768) + { + *state->audio_out_temp_buf_pR = (float) -32768; + } + *aout_buf_p = (short) *state->audio_out_temp_buf_pR; + aout_buf_p++; + state->audio_out_temp_buf_pR++; + } + + sf_write_short(opts->wav_out_fR, aout_buf, 160); + +} + +void writeRawSample (dsd_opts * opts, dsd_state * state, short sample) +{ + int n; + short aout_buf[160]; + short *aout_buf_p; + + //sf_write_short(opts->wav_out_raw, aout_buf, 160); + + //only write if actual audio, truncate silence + if (sample != 0) + { + sf_write_short(opts->wav_out_raw, &sample, 2); //2 to match pulseaudio input sample read + } + +} + void playSynthesizedVoice (dsd_opts * opts, dsd_state * state) { @@ -396,22 +454,6 @@ playSynthesizedVoice (dsd_opts * opts, dsd_state * state) state->audio_out_idx = 0; } - //most likely don't need this seperation anymore with L and R, just push it out without any condional checks - /* - if(state->currentslot == 0 && opts->audio_in_type != 3 && opts->dmr_stereo == 1) - { - pa_simple_write(opts->pulse_digi_dev_out, (state->audio_out_buf_p - state->audio_out_idx), (state->audio_out_idx * 2), NULL); //Yay! It works. - state->audio_out_idx = 0; - } - - //if input type is rtl dongle or no dmr stereo...do I need it this way still? - if (opts->audio_in_type == 3 || opts->dmr_stereo == 0) - { - pa_simple_write(opts->pulse_digi_dev_out, (state->audio_out_buf_p - state->audio_out_idx), (state->audio_out_idx * 2), NULL); //Yay! It works. - state->audio_out_idx = 0; - } - */ - } @@ -443,14 +485,6 @@ playSynthesizedVoiceR (dsd_opts * opts, dsd_state * state) pa_simple_write(opts->pulse_digi_dev_outR, (state->audio_out_buf_pR - state->audio_out_idxR), (state->audio_out_idxR * 2), NULL); //Yay! It works. state->audio_out_idxR = 0; } - /* - //most likely don't need this seperation anymore with L and R, just push it out without any condional checks - if(opts->dmr_stereo == 1) //state->currentslot == 1 && opts->audio_in_type != 3 && opts->dmr_stereo == 1 - { - pa_simple_write(opts->pulse_digi_dev_outR, (state->audio_out_buf_pR - state->audio_out_idxR), (state->audio_out_idxR * 2), NULL); //Yay! It works. - state->audio_out_idxR = 0; - } - */ } @@ -467,17 +501,13 @@ playSynthesizedVoiceR (dsd_opts * opts, dsd_state * state) void openAudioOutDevice (dsd_opts * opts, int speed) { + //converted to handle any calls to use portaudio if(strncmp(opts->audio_out_dev, "pa:", 3) == 0) { - opts->audio_out_type = 2; -#ifdef USE_PORTAUDIO - int err = getPADevice(opts->audio_out_dev, 0, &opts->audio_out_pa_stream); - if(err != 0) - exit(err); -#else - fprintf (stderr,"Error, Portaudio support not compiled.\n"); - exit(1); -#endif + opts->audio_out_type = 0; + fprintf (stderr,"Error, Port Audio is not supported by FME!\n"); + fprintf (stderr,"Using Pulse Audio Output Stream Instead! \n"); + sprintf (opts->audio_out_dev, "pulse"); } if(strncmp(opts->audio_in_dev, "pulse", 5) == 0) { @@ -522,25 +552,13 @@ openAudioInDevice (dsd_opts * opts) exit(1); //had this one disabled, re-enabling it now } } + //converted to handle any calls to use portaudio else if(strncmp(opts->audio_in_dev, "pa:", 2) == 0) { - opts->audio_in_type = 2; -#ifdef USE_PORTAUDIO - int err = getPADevice(opts->audio_in_dev, 1, &opts->audio_in_pa_stream); - if(err != 0) - exit(err); - - if (opts->split == 0) - { - int err = getPADevice(opts->audio_in_dev, 0, &opts->audio_out_pa_stream); - if(err != 0) - exit(err); - } - -#else - fprintf (stderr,"Error, Portaudio support not compiled.\n"); - exit(1); -#endif + opts->audio_in_type = 0; + fprintf (stderr,"Error, Port Audio is not supported by FME!\n"); + fprintf (stderr,"Using Pulse Audio Input Stream Instead! \n"); + sprintf (opts->audio_in_dev, "pulse"); } else if(strncmp(opts->audio_in_dev, "rtl", 3) == 0) { @@ -550,28 +568,32 @@ openAudioInDevice (dsd_opts * opts) { opts->audio_in_type = 0; } + //convert from opening wav files to OP25 symbol capture files since opening wav files is busted else { - struct stat stat_buf; - if (stat(opts->audio_in_dev, &stat_buf) != 0) + struct stat stat_buf; + if (stat(opts->audio_in_dev, &stat_buf) != 0) { fprintf (stderr,"Error, couldn't open %s\n", opts->audio_in_dev); exit(1); } - if (S_ISREG(stat_buf.st_mode)) + if (S_ISREG(stat_buf.st_mode)) { // is this a regular file? then process with libsndfile. //opts->pulse_digi_rate_out = 8000; //this for wav files input? - opts->audio_in_type = 1; - opts->audio_in_file_info = calloc(1, sizeof(SF_INFO)); - opts->audio_in_file_info->channels = 1; - opts->audio_in_file = sf_open(opts->audio_in_dev, SFM_READ, opts->audio_in_file_info); + // opts->audio_in_type = 1; + // opts->audio_in_file_info = calloc(1, sizeof(SF_INFO)); + // opts->audio_in_file_info->channels = 1; + // opts->audio_in_file = sf_open(opts->audio_in_dev, SFM_READ, opts->audio_in_file_info); + // + // if(opts->audio_in_file == NULL) + // { + // fprintf (stderr,"Error, couldn't open file %s\n", opts->audio_in_dev); + // exit(1); + // } - if(opts->audio_in_file == NULL) - { - fprintf (stderr,"Error, couldn't open file %s\n", opts->audio_in_dev); - exit(1); - } + opts->symbolfile = fopen(opts->audio_in_dev, "r"); + opts->audio_in_type = 4; //symbol capture bin files } else { diff --git a/src/dsd_dibit.c b/src/dsd_dibit.c index 1ef3820..bd4b261 100644 --- a/src/dsd_dibit.c +++ b/src/dsd_dibit.c @@ -376,6 +376,7 @@ static int digitize (dsd_opts* opts, dsd_state* state, int symbol) *state->dmr_payload_p = dibit; state->dmr_payload_p++; //dmr buffer end + return dibit; } } @@ -386,6 +387,19 @@ get_dibit_and_analog_signal (dsd_opts* opts, dsd_state* state, int* out_analog_s int symbol; int dibit; + // if (opts->audio_in_type == 4 && opts->frame_provoice == 1) // + // { + // //skip processing symbol as dibit and use it as is + // if (state->symbolc == 0) + // { + // symbol = 1; + // } + // if (state->symbolc == 1) + // { + // symbol = 3; + // } + // } + #ifdef TRACE_DSD unsigned int l, r; #endif @@ -402,7 +416,7 @@ get_dibit_and_analog_signal (dsd_opts* opts, dsd_state* state, int* out_analog_s r = state->debug_sample_index; #endif - // + state->sbuf[state->sidx] = symbol; if (out_analog_signal != NULL) @@ -414,6 +428,21 @@ get_dibit_and_analog_signal (dsd_opts* opts, dsd_state* state, int* out_analog_s dibit = digitize (opts, state, symbol); + //don't think this is quite right still, but should work, don't know why it doesn't + if (opts->audio_in_type == 4 && opts->frame_provoice == 1) // + { + //skip processing symbol as dibit and use it as is + dibit = state->symbolc; + } + + //symbol/dibit file capture/writing + //need this bit here to capture dibits once sync starts + if (opts->symbol_out == 1) + { + //fprintf (stderr, "%d", dibit); + fputc (dibit, opts->symbol_out_f); + } + #ifdef TRACE_DSD { float left, right; diff --git a/src/dsd_file.c b/src/dsd_file.c index 104b033..eb5c691 100644 --- a/src/dsd_file.c +++ b/src/dsd_file.c @@ -146,7 +146,7 @@ PrintAMBEData (dsd_opts * opts, dsd_state * state, char *ambe_d) //For DMR Stere err = (unsigned char) state->errs2; k = 0; - if (opts->dmr_stereo == 0) + if (opts->dmr_stereo == 0) //was 0, switched while working out des { fprintf (stderr, "\n"); } @@ -179,9 +179,9 @@ PrintAMBEData (dsd_opts * opts, dsd_state * state, char *ambe_d) //For DMR Stere } else fprintf(stderr, " err = [%X] [%X] ", state->errsR, state->errs2R); b = ambe_d[48]; - if (opts->dmr_stereo == 1) + if (opts->dmr_stereo == 1) //need to fix the printouts again { - fprintf (stderr, "\n"); + fprintf (stderr, "\n"); //temp disable while I work on DES } } @@ -460,74 +460,113 @@ openWavOutFile (dsd_opts * opts, dsd_state * state) // state->wav_out_bytes = 0; } +void openWavOutFileL (dsd_opts * opts, dsd_state * state) +{ -void -closeWavOutFile (dsd_opts * opts, dsd_state * state) + SF_INFO info; + info.samplerate = 8000; //8000 + info.channels = 1; + info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE; + //opts->wav_out_f = sf_open (opts->wav_out_file, SFM_WRITE, &info); + opts->wav_out_f = sf_open (opts->wav_out_file, SFM_RDWR, &info); //RDWR will append to file instead of overwrite file + + if (opts->wav_out_f == NULL) + { + fprintf (stderr,"Error - could not open wav output file %s\n", opts->wav_out_file); + return; + } + +// state->wav_out_bytes = 0; + +} + +void openWavOutFileR (dsd_opts * opts, dsd_state * state) +{ + + SF_INFO info; + info.samplerate = 8000; //8000 + info.channels = 1; + info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE; + //opts->wav_out_f = sf_open (opts->wav_out_file, SFM_WRITE, &info); + opts->wav_out_fR = sf_open (opts->wav_out_fileR, SFM_RDWR, &info); //RDWR will append to file instead of overwrite file + + if (opts->wav_out_f == NULL) + { + fprintf (stderr,"Error - could not open wav output file %s\n", opts->wav_out_fileR); + return; + } + +// state->wav_out_bytes = 0; + +} + +void openWavOutFileRaw (dsd_opts * opts, dsd_state * state) +{ + + SF_INFO info; + info.samplerate = 48000; //8000 + info.channels = 1; + info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE; + //opts->wav_out_f = sf_open (opts->wav_out_file, SFM_WRITE, &info); + //opts->wav_out_f = sf_open (opts->wav_out_file, SFM_RDWR, &info); //RDWR will append to file instead of overwrite file + opts->wav_out_raw = sf_open (opts->wav_out_file_raw, SFM_RDWR, &info); + if (opts->wav_out_raw == NULL) + { + fprintf (stderr,"Error - could not open raw wav output file %s\n", opts->wav_out_file_raw); + return; + } + +// state->wav_out_bytes = 0; + +} + +void closeWavOutFile (dsd_opts * opts, dsd_state * state) { sf_close(opts->wav_out_f); - -/* - int length; - - if (opts->wav_out_f != NULL) - { - rewind (opts->wav_out_f); - length = state->wav_out_bytes; - - fprintf (stderr,opts->wav_out_f, "RIFF"); - // total length - fputc (((36 + length) & 0xff), opts->≈≈); - fputc ((((36 + length) >> 8) & 0xff), opts->wav_out_f); - fputc ((((36 + length) >> 16) & 0xff), opts->wav_out_f); - fputc ((((36 + length) >> 24) & 0xff), opts->wav_out_f); - - fprintf (stderr,opts->wav_out_f, "WAVE"); - fprintf (stderr,opts->wav_out_f, "fmt "); - - // length of format chunk - fputc (16, opts->wav_out_f); - fputc (0, opts->wav_out_f); - fputc (0, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // always 0x1 - fputc (1, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // channels - fputc (1, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // sample rate - fputc (64, opts->wav_out_f); - fputc (31, opts->wav_out_f); - fputc (0, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // bytes per second - fputc (128, opts->wav_out_f); - fputc (62, opts->wav_out_f); - fputc (0, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // block align - fputc (2, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // bits/sample - fputc (16, opts->wav_out_f); - fputc (0, opts->wav_out_f); - - // data chunk header - fprintf (stderr,opts->wav_out_f, "data"); - - // length of data - fputc ((length & 0xff), opts->wav_out_f); - fputc (((length >> 8) & 0xff), opts->wav_out_f); - fputc (((length >> 16) & 0xff), opts->wav_out_f); - fputc (((length >> 24) & 0xff), opts->wav_out_f); - - fflush (opts->wav_out_f); - } - */ +} + +void closeWavOutFileL (dsd_opts * opts, dsd_state * state) +{ + sf_close(opts->wav_out_f); +} + +void closeWavOutFileR (dsd_opts * opts, dsd_state * state) +{ + sf_close(opts->wav_out_fR); +} + +void closeWavOutFileRaw (dsd_opts * opts, dsd_state * state) +{ + sf_close(opts->wav_out_raw); +} + +void openSymbolOutFile (dsd_opts * opts, dsd_state * state) +{ + //Do something + opts->symbol_out_f = fopen (opts->symbol_out_file, "w"); +} + +void writeSymbolOutFile (dsd_opts * opts, dsd_state * state) +{ + //Do something + +} + +void closeSymbolOutFile (dsd_opts * opts, dsd_state * state) +{ + //Do something + if (opts->symbol_out == 1) + { + if (opts->symbol_out_file != NULL) //check first, or issuing a second fclose will crash the SOFTWARE + { + fclose(opts->symbol_out_f); //free(): double free detected in tcache 2 (this is a new one) happens when closing more than once + //noCarrier(opts, state); //free(): double free detected in tcache 2 (this is a new one) + } + + opts->symbol_out = 0; //set flag to 1 + //sprintf (opts->symbol_out_file, "fme-capture.bin"); //use fme for the symbol bin ext + //openSymbolOutFile (opts, state); + + } + } diff --git a/src/dsd_frame.c b/src/dsd_frame.c index d48dd63..b5c910c 100644 --- a/src/dsd_frame.c +++ b/src/dsd_frame.c @@ -105,6 +105,7 @@ processFrame (dsd_opts * opts, dsd_state * state) } sprintf (state->fsubtype, " VOICE "); processNXDNVoice (opts, state); + //ProcessNXDNFrame (opts, state, 0); return; } else if ((state->synctype == 16) || (state->synctype == 17)) //NXDN Data @@ -128,6 +129,7 @@ processFrame (dsd_opts * opts, dsd_state * state) } sprintf (state->fsubtype, " DATA "); processNXDNData (opts, state); + //ProcessNXDNFrame (opts, state, 0); return; } else if ((state->synctype == 6) || (state->synctype == 7)) @@ -233,6 +235,7 @@ processFrame (dsd_opts * opts, dsd_state * state) if (opts->dmr_stereo == 1) { dmrMSData (opts, state); + } } else @@ -243,6 +246,7 @@ processFrame (dsd_opts * opts, dsd_state * state) state->err_str[0] = 0; sprintf (state->slot1light, " slot1 "); sprintf (state->slot2light, " slot2 "); + state->payload_miP = 0; //zero out when switching back to data sync processDMRdata (opts, state); } //switch dmr_stereo to 0 when handling BS data frame syncs with processDMRdata @@ -251,6 +255,7 @@ processFrame (dsd_opts * opts, dsd_state * state) state->dmr_stereo = 0; //set the state to zero for handling pure data frames sprintf (state->slot1light, " slot1 "); sprintf (state->slot2light, " slot2 "); + state->payload_miP = 0; //zero out when switching back to data sync processDMRdata (opts, state); } } @@ -314,6 +319,19 @@ processFrame (dsd_opts * opts, dsd_state * state) processYSF(opts, state); return; } + //P25 P2 + else if ((state->synctype == 35) || (state->synctype == 36)) + { + //Do stuff + //fprintf(stderr, "YSF Sync! \n"); + if ((opts->mbe_out_dir[0] != 0) && (opts->mbe_out_f == NULL)) + { + //openMbeOutFile (opts, state); + } + //sprintf(state->fsubtype, " VOICE "); + processP2(opts, state); + return; + } //dPMR else if ((state->synctype == 20) || (state->synctype == 24)) { @@ -481,6 +499,12 @@ processFrame (dsd_opts * opts, dsd_state * state) state->lastp25type = 1; sprintf (state->fsubtype, " LDU1 "); state->numtdulc = 0; + if (state->payload_algid == 0x81) + { + fprintf (stderr, "\n"); + //LFSRP (state); //HERE HERE best placement? + } + processLDU1 (opts, state); } else if (strcmp (duid, "22") == 0) diff --git a/src/dsd_frame_sync.c b/src/dsd_frame_sync.c index c8fceb8..1d018dc 100644 --- a/src/dsd_frame_sync.c +++ b/src/dsd_frame_sync.c @@ -144,12 +144,15 @@ getFrameSync (dsd_opts * opts, dsd_state * state) * 32 = DMR MS Voice * 33 = DMR MS Data * 34 = DMR RC Data + * 35 = +P25 P2 + * 36 = -P25 P2 */ int i, j, t, o, dibit, sync, symbol, synctest_pos, lastt; char synctest[25]; char synctest12[13]; //dPMR + char synctest10[11]; char synctest18[19]; char synctest32[33]; char synctest20[21]; //YSF @@ -269,6 +272,22 @@ getFrameSync (dsd_opts * opts, dsd_state * state) dibit = 51; // '3' } + //this is needed to capture dibits and convert them to appropriate format for a symbol bin + if (opts->symbol_out == 1 && symbol != 0) //is 0 a valid symbol from dsd? //&& symbol != 0 + { + int csymbol = 0; + if (dibit == 49) + { + csymbol = 1; //1 + } + if (dibit == 51) + { + csymbol = 3; //3 + } + //fprintf (stderr, "%d", dibit); + fputc (csymbol, opts->symbol_out_f); + } + //digitize test for storing dibits in buffer correctly for dmr recovery if (state->dmr_payload_p > state->dmr_payload_buf + 900000) @@ -597,6 +616,52 @@ getFrameSync (dsd_opts * opts, dsd_state * state) } } //end YSF sync + //P25 P2 sync + strncpy(synctest20, (synctest_p - 19), 20); //double check make sure this is right + if(opts->frame_p25p2 == 1) //(opts->frame_ysf == 1 + { + if (0 == 0) //opts->inverted_ysf == 0 + { + if (strcmp(synctest20, P25P2_SYNC) == 0) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + fprintf (stderr, "\n+P25-P2 Sync"); + opts->inverted_ysf = 0; //should we set this here? + state->lastsynctype = 30; + if ( opts->monitor_input_audio == 1) + { + + pa_simple_flush(opts->pulse_raw_dev_out, NULL); + } + return (35); + } + } + } + if(opts->frame_p25p2 == 1) //(opts->frame_p25p2 == 1 + { + if (0 == 0) //inverted p25 + { + if (strcmp(synctest20, INV_P25P2_SYNC) == 0) + { + state->carrier = 1; + state->offset = synctest_pos; + state->max = ((state->max) + lmax) / 2; + state->min = ((state->min) + lmin) / 2; + fprintf (stderr, "\n-P25-P2 Sync"); + opts->inverted_ysf = 1; //should we set this here? + state->lastsynctype = 31; + if ( opts->monitor_input_audio == 1) + { + + pa_simple_flush(opts->pulse_raw_dev_out, NULL); + } + return (36); + } + } + } //dPMR sync strncpy(synctest, (synctest_p - 23), 24); strncpy(synctest12, (synctest_p - 11), 12); @@ -1093,6 +1158,7 @@ getFrameSync (dsd_opts * opts, dsd_state * state) } } + if ((opts->frame_nxdn96 == 1) || (opts->frame_nxdn48 == 1)) { strncpy (synctest18, (synctest_p - 17), 18); diff --git a/src/dsd_main.c b/src/dsd_main.c index 0498309..8363c04 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -43,20 +43,19 @@ int pretty_colors() #include "p25p1_heuristics.h" #include "pa_devs.h" -short int butt = 1; +short int butt = 0; char * FM_banner[9] = { - " 2022 Dove Award Winner CTRL + C twice to exit", + " ", " ██████╗ ██████╗██████╗    ███████╗███╗ ███╗███████╗", " ██╔══██╗██╔════╝██╔══██╗   ██╔════╝████╗ ████║██╔════╝", " ██║ ██║╚█████╗ ██║ ██║   █████╗ ██╔████╔██║█████╗ ", " ██║ ██║ ╚═══██╗██║ ██║   ██╔══╝ ██║╚██╔╝██║██╔══╝ ", " ██████╔╝██████╔╝██████╔╝   ██║ ██║ ╚═╝ ██║███████╗", " ╚═════╝ ╚═════╝ ╚═════╝    ╚═╝ ╚═╝ ╚═╝╚══════╝", - "https://github.com/lwvmobile/dsd-fme/tree/pulseaudio " + " https://github.com/lwvmobile/dsd-fme/tree/pulseaudio " }; - int comp (const void *a, const void *b) { @@ -74,6 +73,7 @@ struct stat st = {0}; void noCarrier (dsd_opts * opts, dsd_state * state) { + // state->testcounter = 0; state->dibit_buf_p = state->dibit_buf + 200; memset (state->dibit_buf, 0, sizeof (int) * 200); //dmr buffer @@ -133,8 +133,6 @@ noCarrier (dsd_opts * opts, dsd_state * state) mbe_initMbeParms (state->cur_mp2, state->prev_mp2, state->prev_mp_enhanced2); state->dmr_ms_mode = 0; - state->dropL = 256; //drop it like its hot - state->dropR = 256; //drop it like its hot //not sure if desirable here or not just yet, may need to disable a few of these state->payload_mi = 0; @@ -145,12 +143,46 @@ noCarrier (dsd_opts * opts, dsd_state * state) state->payload_algidR = 0; state->payload_keyid = 0; state->payload_keyidR = 0; - //just for a test - if (state->M == 0) + + state->payload_miN = 0; + state->p25vc = 0; + state->payload_miP = 0; + + //initialize dmr data header source + state->dmr_lrrp_source[0] = 0; + state->dmr_lrrp_source[1] = 0; + + //initialize 12 rate superframe + for (short i = 0; i < 84; i++) { - state->K = 0; + state->dmr_12_rate_sf[0][i] = 0; + state->dmr_12_rate_sf[1][i] = 0; } + //initialize 34 rate superframe + for (short i = 0; i < 96; i++) + { + state->dmr_34_rate_sf[0][i] = 0; + state->dmr_34_rate_sf[1][i] = 0; + } + + //initialize data header bits + state->data_header_blocks[0] = 1; //initialize with 1, otherwise we may end up segfaulting when no/bad data header + state->data_header_blocks[1] = 1; //when trying to fill the superframe and 0-1 blocks give us an overflow + state->data_header_padding[0] = 0; + state->data_header_padding[1] = 0; + state->data_header_format[0] = 0; + state->data_header_format[1] = 0; + state->data_header_sap[0] = 0; + state->data_header_sap[1] = 0; + state->data_block_counter[0] = 0; + state->data_block_counter[1] = 0; + state->data_p_head[0] = 0; + state->data_p_head[1] = 0; + + state->dmr_so = 0; + state->dmr_soR = 0; + } void @@ -172,15 +204,15 @@ initOpts (dsd_opts * opts) //sprintf (opts->audio_in_dev, "/dev/audio"); sprintf (opts->audio_in_dev, "pulse"); opts->audio_in_fd = -1; -#ifdef USE_PORTAUDIO - opts->audio_in_pa_stream = NULL; -#endif +// #ifdef USE_PORTAUDIO +// opts->audio_in_pa_stream = NULL; +// #endif //sprintf (opts->audio_out_dev, "/dev/audio"); sprintf (opts->audio_out_dev, "pulse"); opts->audio_out_fd = -1; -#ifdef USE_PORTAUDIO - opts->audio_out_pa_stream = NULL; -#endif +// #ifdef USE_PORTAUDIO +// opts->audio_out_pa_stream = NULL; +// #endif opts->split = 0; opts->playoffset = 0; opts->playoffsetR = 0; @@ -192,7 +224,16 @@ initOpts (dsd_opts * opts) opts->audio_gainR = 0; opts->audio_out = 1; opts->wav_out_file[0] = 0; + opts->wav_out_fileR[0] = 0; + opts->wav_out_file_raw[0] = 0; + opts->symbol_out_file[0] = 0; + opts->symbol_out_f = NULL; + opts->symbol_out = 0; opts->wav_out_f = NULL; + opts->wav_out_fR = NULL; + opts->wav_out_raw = NULL; + + opts->dmr_stereo_wav = 0; //flag for per call dmr stereo wav recordings //opts->wav_out_fd = -1; opts->serial_baud = 115200; sprintf (opts->serial_dev, "/dev/ttyUSB0"); @@ -200,6 +241,7 @@ initOpts (dsd_opts * opts) opts->frame_dstar = 1; opts->frame_x2tdma = 1; opts->frame_p25p1 = 1; + opts->frame_p25p2 = 0; opts->frame_nxdn48 = 0; opts->frame_nxdn96 = 0; opts->frame_dmr = 1; @@ -225,10 +267,11 @@ initOpts (dsd_opts * opts) opts->rtl_udp_port = 6020; //set UDP port for RTL remote opts->rtl_bandwidth = 12; //changed recommended default to 12, 24 for ProVoice opts->rtlsdr_ppm_error = 0; //initialize ppm with 0 value; bug reported by N. + opts->rtl_started = 0; opts->pulse_raw_rate_in = 48000; - opts->pulse_raw_rate_out = 48000; //doing tests with 2 channels at 24000 for 48000 audio default in pulse + opts->pulse_raw_rate_out = 48000; // opts->pulse_digi_rate_in = 48000; - opts->pulse_digi_rate_out = 48000; //need to copy this to rtl type in and change rate out to 8000 + opts->pulse_digi_rate_out = 8000; // reverted to 8/1, crisper sound, dmr stereo will switch to 24/2 opts->pulse_raw_in_channels = 1; opts->pulse_raw_out_channels = 1; opts->pulse_digi_in_channels = 1; //2 @@ -237,9 +280,9 @@ initOpts (dsd_opts * opts) sprintf (opts->output_name, "Auto Detect"); opts->pulse_flush = 1; //set 0 to flush, 1 for flushed opts->use_ncurses_terminal = 0; + opts->ncurses_compact = 0; + opts->ncurses_history = 1; opts->payload = 0; - - opts->EncryptionMode = MODE_UNENCRYPTED; opts->inverted_dpmr = 0; opts->dmr_stereo = 0; opts->aggressive_framesync = 1; //more aggressive to combat wonk wonk voice decoding @@ -247,6 +290,8 @@ initOpts (dsd_opts * opts) opts->audio_in_type = 0; //this was never initialized, causes issues on rPI 64 (bullseye) if not initialized opts->audio_out_type = 0; //this was never initialized, causes issues on rPI 64 (bullseye) if not initialized + opts->lrrp_file_output = 0; + } @@ -255,6 +300,7 @@ initState (dsd_state * state) { int i, j; + // state->testcounter = 0; state->last_dibit = 0; state->dibit_buf = malloc (sizeof (int) * 1000000); state->dibit_buf_p = state->dibit_buf + 200; @@ -313,6 +359,7 @@ initState (dsd_state * state) sprintf (state->fsubtype, " "); sprintf (state->ftype, " "); state->symbolcnt = 0; + state->symbolc = 0; // state->rf_mod = 0; state->numflips = 0; state->lastsynctype = -1; @@ -377,6 +424,7 @@ initState (dsd_state * state) state->nxdn_cipher_type = 0; state->nxdn_key = 0; sprintf (state->nxdn_call_type, " "); + state->payload_miN = 0; state->dpmr_color_code = -1; state->dpmr_caller_id = 0; @@ -419,7 +467,7 @@ initState (dsd_state * state) state->K = 0; state->R = 0; - state->M = 0; + state->dmr_stereo = 0; state->dmrburstL = 17; //initialize at higher value than possible state->dmrburstR = 17; //17 in char array is set for ERR @@ -429,11 +477,46 @@ initState (dsd_state * state) state->dmr_fidR = 0; state->dmr_ms_mode = 0; - state->dropL = 256; //drop it like its hot - state->dropR = 256; //drop it like its hot + state->p25vc = 0; + + state->payload_miP = 0; memset(state->dstarradioheader, 0, 41); + //initialize dmr data header source + state->dmr_lrrp_source[0] = 0; + state->dmr_lrrp_source[1] = 0; + + //initialize 12 rate superframe + for (short i = 0; i < 84; i++) + { + state->dmr_12_rate_sf[0][i] = 0; + state->dmr_12_rate_sf[1][i] = 0; + } + + //initialize 34 rate superframe + for (short i = 0; i < 96; i++) + { + state->dmr_34_rate_sf[0][i] = 0; + state->dmr_34_rate_sf[1][i] = 0; + } + + //initialize data header bits + state->data_header_blocks[0] = 1; //initialize with 1, otherwise we may end up segfaulting when no/bad data header + state->data_header_blocks[1] = 1; //when trying to fill the superframe and 0-1 blocks give us an overflow + state->data_header_padding[0] = 0; + state->data_header_padding[1] = 0; + state->data_header_format[0] = 0; + state->data_header_format[1] = 0; + state->data_header_sap[0] = 0; + state->data_header_sap[1] = 0; + state->data_block_counter[0] = 0; + state->data_block_counter[1] = 0; + state->data_p_head[0] = 0; + state->data_p_head[1] = 0; + + state->menuopen = 0; //is the ncurses menu open, if so, don't process frame sync + #ifdef TRACE_DSD state->debug_sample_index = 0; state->debug_label_file = NULL; @@ -447,14 +530,15 @@ initState (dsd_state * state) void usage () { - //printf ( "Github Build Version: %s \n", GIT_TAG); - //printf ( "2022 Dove Award Recipient"); //Thanks, Scott + printf ("\n"); - printf ("Usage: dsd [options] Live scanner mode\n"); - printf (" or: dsd [options] -r Read/Play saved mbe data from file(s)\n"); - printf (" or: dsd -h Show help\n"); + printf ("Usage: dsd-fme [options] Live scanner mode\n"); + printf (" or: dsd-fme [options] -r Read/Play saved mbe data from file(s)\n"); + printf (" or: dsd-fme -h Show help\n"); printf ("\n"); printf ("Display Options:\n"); + printf (" -N Use NCurses Terminal\n"); + printf (" -use with 2> log.txt at end of command\n"); printf (" -e Show Frame Info and errorbars (default)\n"); printf (" -pe Show P25 encryption sync bits\n"); printf (" -pl Show P25 link control bits\n"); @@ -474,7 +558,7 @@ usage () printf (" -g Audio output gain (default = 0 = auto, disable = -1)\n"); printf (" -w Output synthesized speech to a .wav file\n"); //printf (" -a Display port audio devices\n"); - printf (" -W Monitor Source Audio When No Sync Detected (WIP!)\n"); + //printf (" -W Monitor Source Audio When No Sync Detected (WIP!)\n"); printf ("\n"); printf ("RTL-SDR options:\n"); printf (" -c RTL-SDR Frequency\n"); @@ -495,43 +579,38 @@ usage () printf (" -fa Auto-detect frame type (default)\n"); printf (" -f1 Decode only P25 Phase 1\n"); printf (" -fd Decode only D-STAR\n"); - printf (" -fr Decode only DMR/MOTOTRBO\n"); + printf (" -fr Decode only DMR\n"); printf (" -fx Decode only X2-TDMA\n"); printf (" -fi Decode only NXDN48* (6.25 kHz) / IDAS*\n"); printf (" -fn Decode only NXDN96* (12.5 kHz)\n"); printf (" -fp Decode only ProVoice*\n"); printf (" -fm Decode only dPMR*\n"); - printf (" -l Disable DMR/MOTOTRBO and NXDN input filtering\n"); - printf (" -ma Auto-select modulation optimizations (default)\n"); - printf (" -mc Use only C4FM modulation optimizations\n"); - printf (" -mg Use only GFSK modulation optimizations\n"); - printf (" -mq Use only QPSK modulation optimizations\n"); + printf (" -l Disable DMR and NXDN input filtering\n"); printf (" -pu Unmute Encrypted P25\n"); printf (" -u Unvoiced speech quality (default=3)\n"); printf (" -xx Expect non-inverted X2-TDMA signal\n"); - printf (" -xr Expect inverted DMR/MOTOTRBO signal\n"); + printf (" -xr Expect inverted DMR signal\n"); printf (" -xd Expect inverted ICOM dPMR signal\n"); //still need to do this printf ("\n"); printf (" * denotes frame types that cannot be auto-detected.\n"); printf ("\n"); - printf ("Advanced decoder options:\n"); - printf (" -A QPSK modulation auto detection threshold (default=26)\n"); + printf ("Advanced Decoder options:\n"); + // printf (" -A QPSK modulation auto detection threshold (default=26)\n"); printf (" -S Symbol buffer size for QPSK decision point tracking\n"); printf (" (default=36)\n"); printf (" -M Min/Max buffer size for QPSK decision point tracking\n"); printf (" (default=15)\n"); - printf (" -n Reset P25 Heuristics and initState variables on mixed signal decoding\n"); - printf (" Helps when decoding mixed signal types (P25P1) at same time\n"); - printf (" (WiP! May Cause Slow Memory Leak or System Hang - Experimental)\n"); + // printf (" -n Reset P25 Heuristics and initState variables on mixed signal decoding\n"); + // printf (" Helps when decoding mixed signal types (P25P1) at same time\n"); + // printf (" (WiP! May Cause Slow Memory Leak or System Hang - Experimental)\n"); printf (" -T Enable DMR TDMA Stereo Voice (Two Slot Dual Voices)\n"); printf (" This feature will open two streams for slot 1 voice and slot 2 voice\n"); printf (" May Cause Skipping or sync issues if bad signal/errors\n"); printf (" -F Enable DMR TDMA Stereo Passive Frame Sync\n"); printf (" This feature will attempt to resync less often due to excessive voice errors\n"); printf (" Use if skipping occurs, but may cause wonky audio due to loss of good sync\n"); - printf (" -Z Log MBE Payload to console\n"); + printf (" -Z Log MBE/Frame Payloads to console\n"); printf ("\n"); - printf ("Report bugs to: https://github.com/lwvmobile/dsd-fme/issues \n"); exit (0); } @@ -539,8 +618,6 @@ void liveScanner (dsd_opts * opts, dsd_state * state) { -//still need this section mostly due the the crackling on the rtl dongle when upsampled -//probably need to dig a little deeper, maybe inlvl releated? if (opts->audio_in_type == 1) { opts->pulse_digi_rate_out = 8000; //revert to 8K/1 for STDIN input, sometimes crackles when upsampling @@ -557,19 +634,6 @@ if (opts->audio_in_type == 1) } -#ifdef USE_PORTAUDIO - if(opts->audio_in_type == 2) - { - PaError err = Pa_StartStream( opts->audio_in_pa_stream ); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while starting the portaudio input stream\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - return; - } - } -#endif #ifdef USE_RTLSDR if(opts->audio_in_type == 3) { @@ -588,28 +652,38 @@ if (opts->audio_in_type == 1) opts->pulse_raw_out_channels = 1; open_rtlsdr_stream(opts); + opts->rtl_started = 1; //set here so ncurses terminal doesn't attempt to open it again } #endif + +if (opts->use_ncurses_terminal == 1) +{ + ncursesOpen(opts, state); +} + if (opts->audio_in_type == 0) { openPulseInput(opts); } + if (opts->audio_out_type == 0) { openPulseOutput(opts); } - while (1) { noCarrier (opts, state); + if (state->menuopen == 0) + { + state->synctype = getFrameSync (opts, state); + // recalibrate center/umid/lmid + state->center = ((state->max) + (state->min)) / 2; + state->umid = (((state->max) - state->center) * 5 / 8) + state->center; + state->lmid = (((state->min) - state->center) * 5 / 8) + state->center; + } - state->synctype = getFrameSync (opts, state); - // recalibrate center/umid/lmid - state->center = ((state->max) + (state->min)) / 2; - state->umid = (((state->max) - state->center) * 5 / 8) + state->center; - state->lmid = (((state->min) - state->center) * 5 / 8) + state->center; while (state->synctype != -1) @@ -620,16 +694,24 @@ if (opts->audio_out_type == 0) state->debug_prefix = 'S'; #endif - state->synctype = getFrameSync (opts, state); + // state->synctype = getFrameSync (opts, state); #ifdef TRACE_DSD state->debug_prefix = '\0'; #endif - // recalibrate center/umid/lmid - state->center = ((state->max) + (state->min)) / 2; - state->umid = (((state->max) - state->center) * 5 / 8) + state->center; - state->lmid = (((state->min) - state->center) * 5 / 8) + state->center; + // // recalibrate center/umid/lmid + // state->center = ((state->max) + (state->min)) / 2; + // state->umid = (((state->max) - state->center) * 5 / 8) + state->center; + // state->lmid = (((state->min) - state->center) * 5 / 8) + state->center; + if (state->menuopen == 0) + { + state->synctype = getFrameSync (opts, state); + // recalibrate center/umid/lmid + state->center = ((state->max) + (state->min)) / 2; + state->umid = (((state->max) - state->center) * 5 / 8) + state->center; + state->lmid = (((state->min) - state->center) * 5 / 8) + state->center; + } } } } @@ -639,59 +721,33 @@ cleanupAndExit (dsd_opts * opts, dsd_state * state) { noCarrier (opts, state); if (opts->wav_out_f != NULL) - { - closeWavOutFile (opts, state); - } - -#ifdef USE_PORTAUDIO - if((opts->audio_in_type == 2) || (opts->audio_out_type == 2)) - { - fprintf (stderr,"Terminating portaudio.\n"); - PaError err = paNoError; - if(opts->audio_in_pa_stream != NULL) - { - err = Pa_CloseStream( opts->audio_in_pa_stream ); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while closing the portaudio input stream\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - } - } - if(opts->audio_out_pa_stream != NULL) - { - err = Pa_IsStreamActive( opts->audio_out_pa_stream ); - if(err == 1) - err = Pa_StopStream( opts->audio_out_pa_stream ); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while closing the portaudio output stream\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - } - err = Pa_CloseStream( opts->audio_out_pa_stream ); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while closing the portaudio output stream\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - } - } - err = Pa_Terminate(); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while terminating portaudio\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - } - } -#endif + { + closeWavOutFile (opts, state); + } + if (opts->wav_out_raw != NULL) + { + closeWavOutFileRaw (opts, state); + } + if (opts->dmr_stereo_wav == 1) + { + closeWavOutFileL (opts, state); + closeWavOutFileR (opts, state); + } + if (opts->symbol_out == 1) + { + closeSymbolOutFile (opts, state); + } + if (opts->mbe_out_f != NULL) + { + closeMbeOutFile (opts, state); + } #ifdef USE_RTLSDR if(opts->audio_in_type == 3) { // TODO: cleanup demod threads - cleanup_rtlsdr_stream(); + //temp disable to see if this corrects issues with closing + //cleanup_rtlsdr_stream(); } #endif @@ -775,15 +831,15 @@ main (int argc, char **argv) char versionstr[25]; mbe_printVersion (versionstr); - - for (short int i = 0; i < 7; i++) { - fprintf (stderr,"%s%s \n", FM_banner[i], KCYN); //cyan/blue text + fprintf (stderr," Digital Speech Decoder: Florida Man Edition\n"); + for (short int i = 1; i < 7; i++) { + //fprintf (stderr,"%s%s \n", FM_banner[i], KGRN); //cyan/blue text + fprintf (stderr,"%s\n", FM_banner[i]); //cyan/blue tex } - fprintf (stderr,"%s", KNRM); //change back to normal - fprintf (stderr, "%s \n", FM_banner[7]); - fprintf (stderr,"Digital Speech Decoder: Florida Man Edition\n"); + //fprintf (stderr,"%s", KNRM); //change back to normal + fprintf (stderr, "Github Build Version: %s \n", GIT_TAG); - fprintf (stderr,"mbelib version %s\n", versionstr); + fprintf (stderr,"MBElib version %s\n", versionstr); initOpts (&opts); initState (&state); @@ -793,7 +849,7 @@ main (int argc, char **argv) exitflag = 0; signal (SIGINT, sigfun); - while ((c = getopt (argc, argv, "haep:P:qstv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:NWrlZTF")) != -1) + while ((c = getopt (argc, argv, "haep:P:qstv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:NQWrlZTF")) != -1) { opterr = 0; switch (c) @@ -802,7 +858,7 @@ main (int argc, char **argv) usage (); exit (0); case 'a': - printPortAudioDevices(); + //printPortAudioDevices(); exit(0); case 'e': opts.errorbars = 1; @@ -832,7 +888,8 @@ main (int argc, char **argv) } break; case 'P': - sscanf (optarg, "%i", &opts.rtlsdr_ppm_error); + //can't handle negative numbers? + //sscanf (optarg, "%d", &opts.rtlsdr_ppm_error); break; case 'q': opts.errorbars = 0; @@ -858,17 +915,12 @@ main (int argc, char **argv) case 'K': sscanf (optarg, "%lld", &state.K); - state.M = 1; if (state.K > 256) { state.K = 256; } break; - case 'R': - sscanf (optarg, "%lld", &state.R); - break; - case 'G': //Set rtl device gain sscanf (optarg, "%d", &opts.rtl_gain_value); //multiple value by ten to make it consitent with the way rtl_fm really works break; @@ -877,11 +929,11 @@ main (int argc, char **argv) sscanf (optarg, "%d", &opts.rtl_squelch_level); //set squelch by user to prevent false positives on NXDN and others break; - case 'V': //Set rtl squelch level + case 'V': //Set rtl voltage level sscanf (optarg, "%d", &opts.rtl_volume_multiplier); //set 'volume' multiplier for rtl-sdr samples break; - case 'U': //Set rtl squelch level + case 'U': //Set rtl udp remote port sscanf (optarg, "%d", &opts.rtl_udp_port); //set udp port number for RTL remote break; @@ -893,23 +945,20 @@ main (int argc, char **argv) sscanf (optarg, "%d", &opts.rtl_bandwidth); break; - case 'W': //monitor_input_audio if no sync - opts.monitor_input_audio = 1; - fprintf (stderr, "%s", KRED); - fprintf (stderr,"Monitoring Source Audio when carrier present and No Sync Detected.\n"); - fprintf (stderr," - May cause Pulse Audio Server to crash on some systems.\n"); - fprintf (stderr, "%s", KNRM); - break; - case 'N': opts.use_ncurses_terminal = 1; fprintf (stderr,"Enabling NCurses Terminal.\n"); - fprintf (stderr," - may need to issue 'reset' command in terminal after use\n"); + //fprintf (stderr," - may need to issue 'reset' command in terminal after use\n"); break; case 'Z': opts.payload = 1; - fprintf (stderr,"Logging MBE Payload to console\n"); + fprintf (stderr,"Logging Frame Payload to console\n"); + break; + + case 'Q': + opts.lrrp_file_output = 1; + fprintf (stderr,"Logging LRRP data to ~/lrrp.txt \n"); break; case 'T': @@ -917,16 +966,18 @@ main (int argc, char **argv) state.dmr_stereo = 1; //this values toggles on and off depending on voice or data handling opts.pulse_digi_rate_out = 24000; opts.pulse_digi_out_channels = 2; - fprintf (stderr, "%s", KRED); + sprintf (opts.output_name, "DMR STEREO"); + fprintf (stderr, "%s", KYEL); fprintf (stderr,"DMR Stereo Sync and Functionality Enabled.\n"); - fprintf (stderr,"DMR Stereo will disable WAV and MBE file saving!\n"); + fprintf (stderr,"DMR Stereo will disable MBE file saving!\n"); + fprintf (stderr,"DMR Stereo per call WAV file can be enabled in the NCurses Terminal!\n"); fprintf (stderr,"Also consider using -F if playback is too choppy!\n"); fprintf (stderr, "%s", KNRM); break; case 'F': opts.aggressive_framesync = 0; - fprintf (stderr, "%s", KRED); + fprintf (stderr, "%s", KYEL); fprintf (stderr,"DMR Stereo Aggressive Resync Disabled!\n"); fprintf (stderr, "%s", KNRM); break; @@ -984,32 +1035,28 @@ main (int argc, char **argv) state.aout_gainR = opts.audio_gain; } break; - case 'n': - opts.reset_state = 1; - fprintf (stderr, "%s", KRED); - fprintf (stderr,"Enabling Automatic Reset of P25 states\n"); - //fprintf (stderr," -Helps with multiple signal type decoding\n"); - //fprintf (stderr," -(WiP! May cause slow memory leak)\n"); - fprintf (stderr," -(Disabled until memory leak issues can be resolved!)\n"); - fprintf (stderr, "%s", KNRM); - break; + case 'w': strncpy(opts.wav_out_file, optarg, 1023); opts.wav_out_file[1023] = '\0'; - fprintf (stderr,"Writing + Appending audio to file %s\n", opts.wav_out_file); + fprintf (stderr,"Writing + Appending decoded audio to file %s\n", opts.wav_out_file); openWavOutFile (&opts, &state); break; + case 'B': sscanf (optarg, "%d", &opts.serial_baud); break; + case 'C': strncpy(opts.serial_dev, optarg, 1023); opts.serial_dev[1023] = '\0'; break; - //case 'R': - // sscanf (optarg, "%d", &opts.resume); - // fprintf (stderr,"Enabling scan resume after %i TDULC frames\n", opts.resume); - // break; + + case 'R': + sscanf (optarg, "%d", &opts.resume); + fprintf (stderr,"Enabling scan resume after %i TDULC frames\n", opts.resume); + break; + case 'f': if (optarg[0] == 'a') { @@ -1017,7 +1064,7 @@ main (int argc, char **argv) opts.frame_x2tdma = 1; opts.frame_p25p1 = 1; opts.frame_nxdn48 = 0; - opts.frame_nxdn96 = 0; //causes false positives, leave on 0 + opts.frame_nxdn96 = 0; opts.frame_dmr = 1; opts.frame_dpmr = 0; opts.frame_provoice = 0; @@ -1033,6 +1080,7 @@ main (int argc, char **argv) opts.frame_dmr = 0; opts.frame_dpmr = 0; opts.frame_provoice = 0; + state.rf_mod = 0; sprintf (opts.output_name, "D-STAR"); fprintf (stderr,"Decoding only D-STAR frames.\n"); } @@ -1104,7 +1152,6 @@ main (int argc, char **argv) opts.mod_gfsk = 0; state.rf_mod = 0; sprintf (opts.output_name, "NXDN48"); - //opts.symboltiming = 2400; //NXDN48 uses 2400 symbol rate fprintf (stderr,"Setting symbol rate to 2400 / second\n"); fprintf (stderr,"Decoding only NXDN 4800 baud frames.\n"); } @@ -1113,23 +1160,44 @@ main (int argc, char **argv) opts.frame_dstar = 0; opts.frame_x2tdma = 0; opts.frame_p25p1 = 0; + opts.frame_p25p2 = 0; opts.frame_nxdn48 = 0; opts.frame_nxdn96 = 0; opts.frame_dmr = 0; opts.frame_dpmr = 0; opts.frame_provoice = 0; opts.frame_ysf = 1; - state.samplesPerSymbol = 10; - //state.symbolCenter = 10; + state.samplesPerSymbol = 20; //10 + state.symbolCenter = 10; opts.mod_c4fm = 1; opts.mod_qpsk = 0; opts.mod_gfsk = 0; state.rf_mod = 0; sprintf (opts.output_name, "YSF"); - //opts.symboltiming = 2400; //NXDN48 uses 2400 symbol rate fprintf (stderr,"Setting symbol rate to 2400 / second\n"); fprintf (stderr,"Decoding only YSF frames.\nNot working yet!\n"); } + else if (optarg[0] == '2') + { + opts.frame_dstar = 0; + opts.frame_x2tdma = 0; + opts.frame_p25p1 = 0; + opts.frame_p25p2 = 1; + opts.frame_nxdn48 = 0; + opts.frame_nxdn96 = 0; + opts.frame_dmr = 0; + opts.frame_dpmr = 0; + opts.frame_provoice = 0; + opts.frame_ysf = 0; + state.samplesPerSymbol = 20; //10 + state.symbolCenter = 10; + opts.mod_c4fm = 0; + opts.mod_qpsk = 1; + opts.mod_gfsk = 0; + state.rf_mod = 0; + sprintf (opts.output_name, "P25-P2"); + fprintf (stderr,"Decoding P25-P2 frames.\nNot working yet!\n"); + } else if (optarg[0] == 'n') { opts.frame_dstar = 0; @@ -1161,9 +1229,9 @@ main (int argc, char **argv) opts.mod_qpsk = 0; opts.mod_gfsk = 0; // state.rf_mod = 0; // - sprintf (opts.output_name, "DMR/MOTOTRBO"); + sprintf (opts.output_name, "DMR LEH"); //fprintf(stderr, "Notice: DMR cannot autodetect polarity. \n Use -xr option if Inverted Signal expected.\n"); - fprintf (stderr,"Decoding only DMR/MOTOTRBO frames.\n"); + fprintf (stderr,"Decoding only DMR frames.\n"); } else if (optarg[0] == 'm') { @@ -1242,7 +1310,7 @@ main (int argc, char **argv) else if (optarg[0] == 'r') { opts.inverted_dmr = 1; - fprintf (stderr,"Expecting inverted DMR/MOTOTRBO signals.\n"); + fprintf (stderr,"Expecting inverted DMR signals.\n"); } else if (optarg[0] == 'd') { @@ -1253,7 +1321,6 @@ main (int argc, char **argv) case 'A': sscanf (optarg, "%i", &opts.mod_threshold); fprintf (stderr,"Setting C4FM/QPSK auto detection threshold to %i\n", opts.mod_threshold); - break; case 'S': sscanf (optarg, "%i", &opts.ssize); if (opts.ssize > 128) @@ -1294,11 +1361,6 @@ main (int argc, char **argv) } } - if (opts.use_ncurses_terminal == 1) - { - ncursesOpen(); - } - if (opts.resume > 0) { openSerial (&opts, &state); @@ -1314,23 +1376,7 @@ main (int argc, char **argv) opts.audio_out_type == 0; } -#ifdef USE_PORTAUDIO - if((strncmp(opts.audio_in_dev, "pa:", 3) == 0) - || (strncmp(opts.audio_out_dev, "pa:", 3) == 0)) - { - fprintf (stderr,"Initializing portaudio.\n"); - PaError err = Pa_Initialize(); - if( err != paNoError ) - { - //fprintf (stderr, "An error occured while initializing portaudio\n" ); - //fprintf (stderr, "Error number: %d\n", err ); - //fprintf (stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - exit(err); - } - } -#endif - - if (opts.playfiles == 1) + if (opts.playfiles == 1) { opts.split = 1; opts.playoffset = 0; @@ -1345,7 +1391,7 @@ main (int argc, char **argv) openAudioOutDevice (&opts, SAMPLE_RATE_OUT); } } - else if (strcmp (opts.audio_in_dev, opts.audio_out_dev) != 0) + else if (strcmp (opts.audio_in_dev, opts.audio_out_dev) != 0) { opts.split = 1; opts.playoffset = 0; @@ -1368,16 +1414,15 @@ main (int argc, char **argv) else { opts.split = 0; - opts.playoffset = 25; // 38 - opts.playoffsetR = 25; // 38 + opts.playoffset = 25; + opts.playoffsetR = 25; opts.delay = 0; - openAudioInDevice (&opts); //disabled all four instances of openAudio devices, in and out for now + openAudioInDevice (&opts); opts.audio_out_fd = opts.audio_in_fd; } if (opts.playfiles == 1) { - //need set to 8000/1 for amb/imb playback, upsampling seems to cause random crackling opts.pulse_digi_rate_out = 8000; opts.pulse_digi_out_channels = 1; openPulseOutput(&opts); //need to open it up for output @@ -1389,9 +1434,6 @@ main (int argc, char **argv) liveScanner (&opts, &state); } - if (opts.use_ncurses_terminal == 1){ - //ncursesClose (); - } cleanupAndExit (&opts, &state); return (0); diff --git a/src/dsd_mbe.c b/src/dsd_mbe.c index 16cc63b..a0eb63f 100644 --- a/src/dsd_mbe.c +++ b/src/dsd_mbe.c @@ -17,10 +17,6 @@ #include "dsd.h" -// -//C -// - void playMbeFiles (dsd_opts * opts, dsd_state * state, int argc, char **argv) { @@ -117,8 +113,7 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a }; // - - int i; + int i; char imbe_d[88]; char ambe_d[49]; char ambe_d_str[50]; @@ -141,20 +136,44 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a { // 0 +P25p1 // 1 -P25p1 + state->errs = mbe_eccImbe7200x4400C0 (imbe_fr); + state->errs2 = state->errs; + mbe_demodulateImbe7200x4400Data (imbe_fr); + state->errs2 += mbe_eccImbe7200x4400Data (imbe_fr, imbe_d); - mbe_processImbe7200x4400Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, imbe_fr, imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + + + mbe_processImbe4400Dataf (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, + imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + + //mbe_processImbe7200x4400Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, imbe_fr, imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); if (opts->payload == 1) { PrintIMBEData (opts, state, imbe_d); } + + //increment vc counter by one. + state->p25vc++; + if (opts->mbe_out_f != NULL) { saveImbe4400Data (opts, state, imbe_d); } } - else if ((state->synctype == 14) || (state->synctype == 15)) + else if ((state->synctype == 14) || (state->synctype == 15)) //pV Sync { - mbe_processImbe7100x4400Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, imbe7100_fr, imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + + state->errs = mbe_eccImbe7100x4400C0 (imbe7100_fr); + state->errs2 = state->errs; + mbe_demodulateImbe7100x4400Data (imbe7100_fr); + state->errs2 += mbe_eccImbe7100x4400Data (imbe7100_fr, imbe_d); + mbe_convertImbe7100to7200(imbe_d); //needs extra conversion step apparently + + mbe_processImbe4400Dataf (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, + imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + + //below line the old way of doing this + // mbe_processImbe7100x4400Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, imbe7100_fr, imbe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); if (opts->payload == 1) { PrintIMBEData (opts, state, imbe_d); @@ -176,6 +195,28 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a saveAmbe2450Data (opts, state, ambe_d); } } + else if ((state->synctype == 8) || (state->synctype == 9)) + { + state->errs = mbe_eccAmbe3600x2450C0 (ambe_fr); + state->errs2 = state->errs; + mbe_demodulateAmbe3600x2450Data (ambe_fr); + state->errs2 += mbe_eccAmbe3600x2450Data (ambe_fr, ambe_d); + + + mbe_processAmbe2450Dataf (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, + ambe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + + if (opts->payload == 1) + { + PrintAMBEData (opts, state, ambe_d); + } + + if (opts->mbe_out_f != NULL) + { + saveAmbe2450Data (opts, state, ambe_d); + } + + } else { //stereo slots and slot 0 (left slot) @@ -186,28 +227,27 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a state->errs2 = state->errs; mbe_demodulateAmbe3600x2450Data (ambe_fr); state->errs2 += mbe_eccAmbe3600x2450Data (ambe_fr, ambe_d); - // - //F - // + + // if (state->K > 0 && state->dmr_so & 0x40 && state->payload_keyid == 0) // { k = BP[state->K]; k = ( ((k & 0xFF0F) << 32 ) + (k << 16) + k ); - for (short int j = 0; j < 49; j++) + for (short int j = 0; j < 48; j++) //49 { x = ( ((k << j) & 0x800000000000) >> 47 ); ambe_d[j] ^= x; } } - // - //D - // - mbe_processAmbe2450Dataf (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, - ambe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + if (1 == 1) //still not quite right //state->payload_algid == 0 || state->K != 0 + { + mbe_processAmbe2450Dataf (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, + ambe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); + } //old method for this step below //mbe_processAmbe3600x2450Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, ambe_fr, ambe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); - if (opts->payload == 1) + if (opts->payload == 1) // && state->R == 0 this is why slot 1 didn't primt abme, probably had it set during testing { PrintAMBEData (opts, state, ambe_d); } @@ -220,24 +260,23 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a state->errs2R = state->errsR; mbe_demodulateAmbe3600x2450Data (ambe_fr); state->errs2R += mbe_eccAmbe3600x2450Data (ambe_fr, ambe_d); - // - //G - // + + //BP Handling, Slot 2 if (state->K > 0 && state->dmr_soR & 0x40 && state->payload_keyidR == 0) // { k = BP[state->K]; k = ( ((k & 0xFF0F) << 32 ) + (k << 16) + k ); - for (short int j = 0; j < 49; j++) + for (short int j = 0; j < 48; j++) { x = ( ((k << j) & 0x800000000000) >> 47 ); ambe_d[j] ^= x; } } - // - //E - // - mbe_processAmbe2450Dataf (state->audio_out_temp_bufR, &state->errsR, &state->errs2R, state->err_strR, - ambe_d, state->cur_mp2, state->prev_mp2, state->prev_mp_enhanced2, opts->uvquality); + if (1 == 1) //state->payload_algidR == 0 || state->K != 0 + { + mbe_processAmbe2450Dataf (state->audio_out_temp_bufR, &state->errsR, &state->errs2R, state->err_strR, + ambe_d, state->cur_mp2, state->prev_mp2, state->prev_mp_enhanced2, opts->uvquality); + } //old method for this step below //mbe_processAmbe3600x2450Framef (state->audio_out_temp_bufR, &state->errsR, &state->errs2R, state->err_strR, ambe_fr, ambe_d, state->cur_mp2, state->prev_mp2, state->prev_mp_enhanced2, opts->uvquality); @@ -246,7 +285,7 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a PrintAMBEData (opts, state, ambe_d); } } - //if using older DMR method, dPMR, or NXDN + //if using ??? if (opts->dmr_stereo == 0) { mbe_processAmbe3600x2450Framef (state->audio_out_temp_buf, &state->errs, &state->errs2, state->err_str, ambe_fr, ambe_d, state->cur_mp, state->prev_mp, state->prev_mp_enhanced, opts->uvquality); @@ -294,4 +333,18 @@ processMbeFrame (dsd_opts * opts, dsd_state * state, char imbe_fr[8][23], char a writeSynthesizedVoice (opts, state); } + //per call can only be used when ncurses terminal is active since we use its call history matrix for when to record + if (opts->use_ncurses_terminal == 1 && opts->dmr_stereo_wav == 1 && opts->dmr_stereo == 1 && state->currentslot == 0) + { + //write wav to per call on left channel Slot 1 + writeSynthesizedVoice (opts, state); + } + //per call can only be used when ncurses terminal is active since we use its call history matrix for when to record + if (opts->use_ncurses_terminal == 1 && opts->dmr_stereo_wav == 1 && opts->dmr_stereo == 1 && state->currentslot == 1) + { + //write wav to per call on right channel Slot 2 + writeSynthesizedVoiceR (opts, state); + } + + } diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index d8b691a..622200f 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -1,12 +1,12 @@ /*------------------------------------------------------------------------------- * dsd_ncurses.c - * A dsd ncurses terminal printer + * A dsd ncurses terminal printer with menu system * * ASCII art generated by: * https://fsymbols.com/generators/carty/ * * LWVMOBILE - * 2022-02 DSD-FME Florida Man Edition + * 2022-08 DSD-FME Florida Man Edition *-----------------------------------------------------------------------------*/ /* * Copyright (C) 2010 DSD Author @@ -28,8 +28,26 @@ #include "dsd.h" #include "git_ver.h" +//UDP Remote +#include +// #include +#include + +#define BSIZE 999 +#define UDP_BUFLEN 5 //maximum UDP buffer length +#define SRV_IP "127.0.0.1" //IP +#define UDP_PORT 6020 //UDP port + +int handle; //for UDP +unsigned short udp_port = UDP_PORT; +char data[UDP_BUFLEN] = {0}; +struct sockaddr_in address; + +uint32_t temp_freq = -1; +// + int reset = 0; -char c; //getch key + int tg; int tgR; int tgn; @@ -43,19 +61,21 @@ int dcc = -1; int i = 0; char versionstr[25]; unsigned long long int call_matrix[33][6]; - +//current news story for tagline +//https://www.vice.com/en/article/epzzdk/florida-man-arrested-trying-to-warn-space-force-base-of-alien-dragon-war char * FM_bannerN[9] = { - " 2022 Dove Award Winner CTRL + C twice to exit", - " ██████╗ ██████╗██████╗    ███████╗███╗ ███╗███████╗", - " ██╔══██╗██╔════╝██╔══██╗   ██╔════╝████╗ ████║██╔════╝", - " ██║ ██║╚█████╗ ██║ ██║   █████╗ ██╔████╔██║█████╗ ", - " ██║ ██║ ╚═══██╗██║ ██║   ██╔══╝ ██║╚██╔╝██║██╔══╝ ", - " ██████╔╝██████╔╝██████╔╝   ██║ ██║ ╚═╝ ██║███████╗", - " ╚═════╝ ╚═════╝ ╚═════╝    ╚═╝ ╚═╝ ╚═╝╚══════╝", - "https://github.com/lwvmobile/dsd-fme/tree/pulseaudio " + " ESC or Arrow Keys For Menu ", + " ██████╗ ██████╗██████╗    ███████╗███╗ ███╗███████╗ 'Florida Man steals", + " ██╔══██╗██╔════╝██╔══██╗   ██╔════╝████╗ ████║██╔════╝ Truck; Drives to ", + " ██║ ██║╚█████╗ ██║ ██║   █████╗ ██╔████╔██║█████╗ Space Force to warn", + " ██║ ██║ ╚═══██╗██║ ██║   ██╔══╝ ██║╚██╔╝██║██╔══╝ warn of war between", + " ██████╔╝██████╔╝██████╔╝   ██║ ██║ ╚═╝ ██║███████╗ Aliens and Chinese ", + " ╚═════╝ ╚═════╝ ╚═════╝    ╚═╝ ╚═╝ ╚═╝╚══════╝ Dragons' - FM News ", + " ", + " " }; -char * SyncTypes[36] = { +char * SyncTypes[38] = { "+P25P1", "-P25P1", "+X2TDMA DATA", @@ -90,7 +110,9 @@ char * SyncTypes[36] = { "-YSF", "DMR MS VOICE", "DMR MS DATA", - "DMR RC DATA" + "DMR RC DATA", + "+P25-P2", + "-P25-P2" }; char * DMRBusrtTypes[18] = { @@ -115,6 +137,18 @@ char * DMRBusrtTypes[18] = { }; +char * getDateN(void) { + char datename[99]; //bug in 32-bit Ubuntu when using date in filename, date is garbage text + char * curr2; + struct tm * to; + time_t t; + t = time(NULL); + to = localtime( & t); + strftime(datename, sizeof(datename), "%Y-%m-%d", to); + curr2 = strtok(datename, " "); + return curr2; +} + time_t nowN; char * getTimeN(void) //get pretty hh:mm:ss timestamp { @@ -131,8 +165,127 @@ char * getTimeN(void) //get pretty hh:mm:ss timestamp return curr; } -void ncursesOpen () +//testing a few things, going to put this into ncursesMenu +#define WIDTH 36 +#define HEIGHT 23 + +int startx = 0; +int starty = 0; + +char *choicesc[] = { + "Return", + "Save Decoded Audio WAV (NO DMR STEREO!)", + "Save Signal to Symbol Capture Bin", + "Toggle Muting ENC P25 Traffic ", + "Per Call WAV REC (DMR Stereo/MS)", + "Setup and Start RTL Input ", + "Pulse Audio 48kHz Output", + "Pulse Audio 8kHz Output (NO DMR STEREO!)", + "Reset States and Heuristics", + "Toggle NCurses Compact Mode", + "Toggle NCurses Call History", + "Stop All Decoded WAV Saving", + "Read OP25/FME Symbol Capture Bin", + "Replay Last Symbol Capture Bin", + "Stop & Close Symbol Capture Bin Playback", + "Stop & Close Symbol Capture Bin Saving", + "Retune RTL Dongle", + "Resume Decoding" + }; + +char *choices[] = { + "Resume Decoding", + "Decode Auto**", + "Decode ProVoice", + "Decode D-STAR*", + "Decode P25-P1*", + "Decode DMR (STEREO BS/MS)", + "Decode DMR* (LEH)", //better name + "Decode dPMR", + "Decode NXDN48", + "Decode NXDN96", + "Decode X2-TDMA*", + "Toggle Signal Inversion", + " ", //spacer + "Reset Call History", + "Enable Payloads to Console", + "Disable Payloads to Console", + "Input & Output Options", + "Enable LRRP to ~/lrrp.txt", + "Exit DSD-FME", + // "Test" + }; + + +int n_choices = sizeof(choices) / sizeof(char *); +// int n_choicesb = sizeof(choicesb) / sizeof(char *); +int n_choicesc = sizeof(choicesc) / sizeof(char *); + +void print_menu(WINDOW *menu_win, int highlight) { + int x, y, i; + + x = 2; + y = 2; + box(menu_win, 0, 0); + for(i = 0; i < n_choices; ++i) + { if(highlight == i + 1) /* High light the present choice */ + { wattron(menu_win, A_REVERSE); + mvwprintw(menu_win, y, x, "%s", choices[i]); + wattroff(menu_win, A_REVERSE); + } + else + mvwprintw(menu_win, y, x, "%s", choices[i]); + ++y; + } + wrefresh(menu_win); +} + +// void print_menub(WINDOW *menu_win, int highlight) +// { +// int x, y, i; +// +// x = 2; +// y = 2; +// box(menu_win, 0, 0); +// for(i = 0; i < n_choicesb; ++i) +// { if(highlight == i + 1) /* High light the present choice */ +// { wattron(menu_win, A_REVERSE); +// mvwprintw(menu_win, y, x, "%s", choicesb[i]); +// wattroff(menu_win, A_REVERSE); +// } +// else +// mvwprintw(menu_win, y, x, "%s", choicesb[i]); +// ++y; +// } +// wrefresh(menu_win); +// } + +void print_menuc(WINDOW *menu_win, int highlight) +{ + int x, y, i; + + x = 2; + y = 2; + box(menu_win, 0, 0); + for(i = 0; i < n_choicesc; ++i) + { if(highlight == i + 1) /* High light the present choice */ + { wattron(menu_win, A_REVERSE); + mvwprintw(menu_win, y, x, "%s", choicesc[i]); + wattroff(menu_win, A_REVERSE); + } + else + mvwprintw(menu_win, y, x, "%s", choicesc[i]); + ++y; + } + wrefresh(menu_win); +} + +//end Testing + +void ncursesOpen (dsd_opts * opts, dsd_state * state) +{ + // state->menuopen = 1; //flag the menu is open, stop processing getFrameSync mbe_printVersion (versionstr); setlocale(LC_ALL, ""); initscr(); //Initialize NCURSES screen window @@ -142,33 +295,909 @@ void ncursesOpen () init_pair(3, COLOR_GREEN, COLOR_BLACK); //Green for Active Calls init_pair(4, COLOR_CYAN, COLOR_BLACK); //Cyan for Site Extra and Patches init_pair(5, COLOR_MAGENTA, COLOR_BLACK); //Magenta for no frame sync/signal + init_pair(6, COLOR_WHITE, COLOR_BLACK); //White Card Color Scheme noecho(); cbreak(); } +//ncursesMenu +void ncursesMenu (dsd_opts * opts, dsd_state * state) +{ + // state->menuopen = 1; //flag the menu is open, stop processing getFrameSync + closePulseOutput (opts); + + if (opts->audio_in_type == 0) //close pulse input if it is the specified input method + { + closePulseInput(opts); + } + + if (opts->audio_in_type == 3) + { + //function hangs, figure out why I can't release/stop the dongle + //cleanup_rtlsdr_stream(); //close down the rtl dongle + //rtlsdr_sighandler(); + } + + state->payload_keyid = 0; + state->payload_keyidR = 0; + + //zero out to fix call history 'scrolling' bug when changing decoding types + state->nxdn_last_tg = 0; + state->nxdn_last_ran = 0; + state->nxdn_last_rid = 0; + + WINDOW *menu_win; + WINDOW *test_win; + WINDOW *entry_win; + WINDOW *info_win; + int highlight = 1; + int highlightb = 1; + int highlightc = 1; + int choice = 0; + int choiceb = 0; + int choicec = 0; + int c; + int d; + int e; + + startx = 2; + starty = 1; + + menu_win = newwin(HEIGHT, WIDTH, starty, startx); + keypad(menu_win, TRUE); + mvprintw(0, 0, " Use arrow keys to go up and down, Press ENTER to select a choice."); + refresh(); + print_menu(menu_win, highlight); + while(1) + { c = wgetch(menu_win); + switch(c) + { case KEY_UP: + if(highlight == 1) + highlight = n_choices; + else + --highlight; + break; + case KEY_DOWN: + if(highlight == n_choices) + highlight = 1; + else + ++highlight; + break; + case 10: + choice = highlight; + break; + default: + //mvprintw(24, 0, "Character pressed is = %3d Hopefully it can be printed as '%c'", c, c); + refresh(); + break; + } + + print_menu(menu_win, highlight); + + //test print info boxes on side of certain options + if (highlight == 2) + { + info_win = newwin(6, WIDTH+18, starty, startx+20); + box (info_win, 0, 0); + mvwprintw(info_win, 2, 2, " Auto Decoding can only detect the following:."); + mvwprintw(info_win, 3, 2, " P25-P1, D-STAR, DMR LEH, and X2-TDMA"); + wrefresh(info_win); + } + + //Input Output Options + if (choice == 17) + { + //test making a new window while other window is open + test_win = newwin(HEIGHT-1, WIDTH+9, starty+5, startx+5); + keypad(menu_win, FALSE); + keypad(test_win, TRUE); + mvprintw(0, 0, "Input & Output Options "); + refresh(); + print_menuc(test_win, highlightc); + while(1) + { e = wgetch(test_win); + switch(e) + { case KEY_UP: + if(highlightc == 1) + highlightc = n_choicesc; + else + --highlightc; + break; + case KEY_DOWN: + if(highlightc == n_choicesc) + highlightc = 1; + else + ++highlightc; + break; + case 10: + choicec = highlightc; + break; + default: + //mvprintw(24, 0, "Character pressed is = %3d Hopefully it can be printed as '%c'", c, c); + refresh(); + break; + } + print_menuc(test_win, highlightc); + if (choicec == 2) + { + sprintf (opts->wav_out_file, "%s %s DSD-FME-DECODED.wav", getDateN(), getTimeN()); + openWavOutFile (opts, state); + } + if (choicec == 3) + { + //read in filename for symbol capture bin + entry_win = newwin(6, WIDTH+16, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter FME Symbol Capture Bin Filename"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%s", &opts->symbol_out_file); + noecho(); + + if (opts->symbol_out_file != NULL) + { + opts->symbol_out = 1; //set flag to 1 + openSymbolOutFile (opts, state); + } + + } + if (choicec == 4) + { + //still disabled until a fix is found + if (opts->unmute_encrypted_p25 == 0) + { + opts->unmute_encrypted_p25 = 1; + } + else opts->unmute_encrypted_p25 = 0; + } + if (choicec == 5) + { + opts->dmr_stereo_wav = 1; + //catch all in case of no file name set, won't crash or something + sprintf (opts->wav_out_file, "DSD-FME-SLOT1.wav"); + //sprintf (opts->wav_out_file, "%s %s S1 - CC %d - TG %d - RD %d.wav", getDateN(), getTimeN(), dcc, tg, rd); + sprintf (opts->wav_out_fileR, "DSD-FME-SLOT2.wav"); + //sprintf (opts->wav_out_fileR, "%s %s S2 - CC %d - TG %d - RD %d.wav", getDateN(), getTimeN(), dcc, tg, rd); + openWavOutFileL (opts, state); //testing for now, will want to move to per call later + openWavOutFileR (opts, state); //testing for now, will want to move to per call later + + } + + if (choicec == 6) + { + int confirm = 0; + + #ifdef USE_RTLSDR + + //could also benefit from having some control aside from UDP remote + //BUG: When squelch enabled, all processing halts, no more ncursesprinter until squelch broken + //make another submenu to control these values if tests go well + + entry_win = newwin(6, WIDTH+6, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter RTL Device Index Number"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_dev_index); + noecho(); + + //this is NOT scanning (or printing) in the variable for some reason...why? + entry_win = newwin(6, WIDTH+6, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter RTL Device PPM Error"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtlsdr_ppm_error); + noecho(); + //opts->rtlsdr_ppm_error = -1; //hard set override for testing + + //apparently, scanning in an lld nukes later box entries for some reason + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter Frequency in Hz (851.8 MHz is 851800000 Hz) "); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtlsdr_center_freq); //ld, or lld? + noecho(); + + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter VFO Bandwidth (6, 8, 12, 16, 24, 48)"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_bandwidth); + noecho(); + + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter RTL Gain Value (0-49) (0 = Auto Gain)"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_gain_value); + noecho(); + + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter RTL UDP Remote Port (Default = 6020)"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_udp_port); + noecho(); + if (opts->rtl_udp_port == 0) + { + opts->rtl_udp_port = 6020; + } + + entry_win = newwin(8, WIDTH+22, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter RTL Device Squelch Level or Enter 0"); + mvwprintw(entry_win, 3, 2, " WARNING! Renders Terminal Unresponsive When No Signal!"); + mvwprintw(entry_win, 4, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_squelch_level); + noecho(); + + entry_win = newwin(17, WIDTH+20, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Starting RTL Input. Cannot Release/Stop Until Exit."); + mvwprintw(entry_win, 4, 2, " RTL Frequency: %d Hz", opts->rtlsdr_center_freq); + mvwprintw(entry_win, 5, 2, " RTL Device Index Number: %d", opts->rtl_dev_index); + mvwprintw(entry_win, 6, 2, " RTL Device VFO Bandwidth: %d kHz", opts->rtl_bandwidth); + mvwprintw(entry_win, 7, 2, " RTL Device Gain: %d", opts->rtl_gain_value); + mvwprintw(entry_win, 8, 2, " RTL Device UDP Port: %d", opts->rtl_udp_port); + mvwprintw(entry_win, 9, 2, " RTL Device PPM: %d", opts->rtlsdr_ppm_error); + mvwprintw(entry_win, 10, 2, " RTL Device Squelch: %d", opts->rtl_squelch_level); + mvwprintw(entry_win, 12, 2, " Are You Sure?"); + mvwprintw(entry_win, 13, 2, " 1 = Yes, 2 = No "); + mvwprintw(entry_win, 14, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &confirm); + noecho(); + + refresh(); + // opts->rtlsdr_center_freq = 851800000; //test with pV LCN 2 + //opts->rtl_gain_value = 46; + //opts->rtl_dev_index = 1; + // opts->rtl_bandwidth = 24; //12 or 24. + //opts->rtlsdr_ppm_error = -1; + //opts->rtl_udp_port = 6020; + //fprintf (stderr, "Confirm = %d", confirm); + + //works well, but can't release dongle later, so its a one way trip until exit + if (confirm == 1) + { + opts->audio_in_type = 3; //RTL input, only set this on confirm + //open_rtlsdr_stream(opts); //may move to outside of this box so we return to the normal ncurses term first + choicec = 18; //exit to decoder screen only if confirmed, otherwise, just go back + } + + // if (confirm != 1) + // { + // opts->audio_in_type = 0; + // } + + #endif + + } + + if (choicec == 7) + { + if (opts->dmr_stereo == 0) + { + opts->pulse_digi_rate_out = 48000; + //fprintf (stderr, "Rate Out set to 48kHz\n"); + } + if (opts->dmr_stereo == 1) + { + opts->pulse_digi_rate_out = 24000; + //fprintf (stderr, "Rate Out set to 24kHz\n"); + } + + } + + if (choicec == 8) + { + if (opts->dmr_stereo == 0) + { + opts->pulse_digi_rate_out = 8000; + //fprintf (stderr, "Rate Out set to 8kHz\n"); + } + + if (opts->dmr_stereo == 1) + { + opts->pulse_digi_rate_out = 24000; //always force 24kHz with DMR Stereo + //fprintf (stderr, "Rate Out set to 16kHz\n"); + } + } + + if (choicec == 9) + { + resetState (state); //use sparingly, may cause memory leak + } + + if (choicec == 10) + { + if (opts->ncurses_compact == 0) + { + opts->ncurses_compact = 1; + } + else opts->ncurses_compact = 0; + + } + + if (choicec == 11) + { + if (opts->ncurses_history == 0) + { + opts->ncurses_history = 1; + } + else opts->ncurses_history = 0; + } + + if (choicec == 12) + { + //flesh out all closewavs and sprint "" wav filenames + closeWavOutFile (opts, state); + closeWavOutFileL (opts, state); + closeWavOutFileR (opts, state); + //closeWavOutFileRaw (opts, state); + sprintf (opts->wav_out_file, ""); + sprintf (opts->wav_out_fileR, ""); + opts->dmr_stereo_wav = 0; + } + + if (choicec == 13) //lucky number 13 for OP25 Symbol Capture Bin Files + { + //read in filename for symbol capture bin + entry_win = newwin(6, WIDTH+16, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter OP25 Symbol Capture Bin Filename"); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%s", &opts->audio_in_dev); + noecho(); + //do the thing with the thing + struct stat stat_buf; + if (stat(opts->audio_in_dev, &stat_buf) != 0) + { + fprintf (stderr,"Error, couldn't open %s\n", opts->audio_in_dev); + //exit(1); + goto SKIP; + } + if (S_ISREG(stat_buf.st_mode)) + { + //state->symbolfile = fopen("adp_fdma.bin", "r"); + opts->symbolfile = fopen(opts->audio_in_dev, "r"); + opts->audio_in_type = 4; //symbol capture bin files + } + SKIP: + choicec = 18; + } + + if (choicec == 14) //replay last file + { + struct stat stat_buf; + if (stat(opts->audio_in_dev, &stat_buf) != 0) + { + fprintf (stderr,"Error, couldn't open %s\n", opts->audio_in_dev); + //exit(1); + goto SKIPR; + } + if (S_ISREG(stat_buf.st_mode)) + { + opts->symbolfile = fopen(opts->audio_in_dev, "r"); + opts->audio_in_type = 4; //symbol capture bin files + } + SKIPR: + choicec = 18; //exit + } + + if (choicec == 15) //stop/close last file PLAYBACK + { + if (opts->symbolfile != NULL) + { + if (opts->audio_in_type == 4) //check first, or issuing a second fclose will crash the SOFTWARE + { + fclose(opts->symbolfile); //free(): double free detected in tcache 2 (this is a new one) happens when closing more than once + + } + + } + opts->audio_in_type = 0; //set after closing to prevent above crash condition + + choicec = 18; //exit + } + + if (choicec == 16) //stop/close last file RECORDING + { + if (opts->symbol_out == 1) + { + if (opts->symbol_out_file != NULL) //check first, or issuing a second fclose will crash the SOFTWARE + { + fclose(opts->symbol_out_f); //free(): double free detected in tcache 2 (this is a new one) happens when closing more than once + sprintf (opts->audio_in_dev, opts->symbol_out_file); //swap output bin filename to input for quick replay + } + + opts->symbol_out = 0; //set flag to 1 + + } + choicec = 18; //exit + } + + if (choicec == 17) //RTL UDP Retune + { + //read in new rtl frequency + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " Enter Frequency in Hz (851.8 MHz is 851800000 Hz) "); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtlsdr_center_freq); //ld, or lld? + noecho(); + //do the thing with the thing + data[0] = 0; + data[1] = opts->rtlsdr_center_freq & 0xFF; + data[2] = (opts->rtlsdr_center_freq >> 8) & 0xFF; + data[3] = (opts->rtlsdr_center_freq >> 16) & 0xFF; + data[4] = (opts->rtlsdr_center_freq >> 24) & 0xFF; + + temp_freq = opts->rtlsdr_center_freq; + + choicec = 18; + } + + if (choicec != 0 && choicec != 18 ) //return to last menu + { + //return + choice = 0; + choicec = 0; + //highlightb = 1; + //highlight = 1; + keypad(test_win, FALSE); + keypad(menu_win, TRUE); + delwin(test_win); + print_menu(menu_win, highlight); + //wrefresh(menu_win); + break; + } + if (choicec == 18) //exit both menus + { + //exit + choice = 1; + choicec = 0; + //highlightb = 0; + //highlight = 0; + keypad(test_win, FALSE); + keypad(menu_win, TRUE); + delwin(test_win); + print_menu(menu_win, highlight); + //wrefresh(menu_win); + break; + } + } + clrtoeol(); //clear to end of line? + refresh(); + //endwin(); //causes quick blink in and out of ncursesprinter, not required + } + + //Burger King + if (choice == 13) + { + state->payload_keyid = 0; + state->payload_keyidR = 0; + state->K = 0; + + entry_win = newwin(6, WIDTH+6, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " "); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &state->K); + noecho(); + if (state->K > 255) + { + state->K = 255; + } + break; + } + + if (choice == 2) + { + //setup Auto parameters--default ones + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + sprintf (opts->output_name, "Auto Detect"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 1; + opts->frame_x2tdma = 1; + opts->frame_p25p1 = 1; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 1; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + opts->unmute_encrypted_p25 = 0; + break; //break? + + } + if (choice == 3) + { + //ProVoice Specifics + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 5; + state->symbolCenter = 2; + sprintf (opts->output_name, "ProVoice"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 1; + opts->mod_c4fm = 0; + opts->mod_qpsk = 0; + opts->mod_gfsk = 1; + state->rf_mod = 2; + break; + } + if (choice == 4) + { + //DSTAR + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + sprintf (opts->output_name, "D-STAR"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 1; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + // state->rf_mod = 2; + opts->unmute_encrypted_p25 = 0; + break; + } + if (choice == 5) + { + //P25 P1 + resetState (state); //use sparingly, may cause memory leak + opts->frame_p25p1 = 1; + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + state->rf_mod = 0; + sprintf (opts->output_name, "P25P1"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + //opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + // state->rf_mod = 0; + opts->unmute_encrypted_p25 = 0; + break; + } + + if (choice == 6) + { + //DMR Stereo + resetState (state); //use sparingly, seems to cause issue when switching back to other formats + opts->frame_dmr = 1; + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + state->rf_mod = 0; + sprintf (opts->output_name, "DMR STEREO"); + opts->dmr_stereo = 1; //this value is the end user option + state->dmr_stereo = 1; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 24000; + opts->pulse_digi_out_channels = 2; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + //opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + break; + } + if (choice == 7) + { + //set legacy DMR settings + resetState (state); //use sparingly, seems to cause issue when switching back to other formats + opts->frame_dmr = 1; + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + state->rf_mod = 0; + sprintf (opts->output_name, "DMR LEH"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + //opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + break; + } + if (choice == 8) + { + //dPMR + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 20; + state->symbolCenter = 10; + sprintf (opts->output_name, "dPMR"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 1; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + opts->unmute_encrypted_p25 = 0; + break; + } + if (choice == 9) + { + //NXDN48 + resetState (state); //use sparingly, may cause memory leak + opts->frame_nxdn48 = 1; + state->samplesPerSymbol = 20; + state->symbolCenter = 10; + state->rf_mod = 0; + sprintf (opts->output_name, "NXDN48"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 1; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->unmute_encrypted_p25 = 0; + // opts->mod_qpsk = 0; + // opts->mod_gfsk = 0; + // state->rf_mod = 0; + } + if (choice == 10) + { + //NXDN96 + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + sprintf (opts->output_name, "NXDN96"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 0; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 1; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + opts->unmute_encrypted_p25 = 0; + } + if (choice == 11) + { + //Decode X2-TDMA + //NXDN96 + resetState (state); //use sparingly, may cause memory leak + state->samplesPerSymbol = 10; + state->symbolCenter = 4; + sprintf (opts->output_name, "X2-TDMA"); + opts->dmr_stereo = 0; //this value is the end user option + state->dmr_stereo = 0; //this values toggles on and off depending on voice or data handling + opts->pulse_digi_rate_out = 8000; + opts->pulse_digi_out_channels = 1; + opts->frame_dstar = 0; + opts->frame_x2tdma = 1; + opts->frame_p25p1 = 0; + opts->frame_nxdn48 = 0; + opts->frame_nxdn96 = 0; + opts->frame_dmr = 0; + opts->frame_dpmr = 0; + opts->frame_provoice = 0; + opts->mod_c4fm = 1; + opts->mod_qpsk = 0; + opts->mod_gfsk = 0; + state->rf_mod = 0; + opts->unmute_encrypted_p25 = 0; + } + if (choice == 12) + { + //Set all signal for inversion or uninversion + if (opts->inverted_dmr == 0) + { + opts->inverted_dmr = 1; + opts->inverted_dpmr = 1; + opts->inverted_x2tdma = 1; + opts->inverted_ysf = 1; + } + else + { + opts->inverted_dmr = 0; + opts->inverted_dpmr = 0; + opts->inverted_x2tdma = 0; + opts->inverted_ysf = 0; + } + + } + if (choice == 14) //reset call history (usually if janky output when switching modes) + { + for (short int k = 0; k < 9; k++) + { + call_matrix[k][0] = 0; + call_matrix[k][1] = 0; + call_matrix[k][2] = 0; + call_matrix[k][3] = 0; + call_matrix[k][4] = 0; + call_matrix[k][5] = 0; + } + } + + if (choice == 15) //turn on payload printing + { + opts->payload = 1; + fprintf(stderr, "Payload on\n"); + } + if (choice == 16) //turn off payload printing + { + opts->payload = 0; + fprintf(stderr, "Payload Off\n"); + } + if (choice == 18) + { + opts->lrrp_file_output = 1; + fprintf(stderr, "LRRP to text\n"); + } + if (choice == 19) + { + ncursesClose(); + //cleanup_rtlsdr_stream(); + cleanupAndExit (opts, state); + } + + if(choice != 0 && choice != 20) /* User did a choice come out of the infinite loop */ + break; + + } + + clrtoeol(); //clear to end of line? + refresh(); + state->menuopen = 0; //flag the menu is closed, resume processing getFrameSync + + //reopen pulse output with new parameters + openPulseOutput (opts); + + if (opts->audio_in_type == 0) //reopen pulse input if it is the specified input method + { + openPulseInput(opts); + } + + if (opts->audio_in_type == 3) //open rtl input if it is the specified input method + { + ncursesPrinter (opts, state); //run one rep to clear menu boxes out + if (opts->rtl_started == 0) + { + opts->rtl_started = 1; //set here so ncurses terminal doesn't attempt to open it again + open_rtlsdr_stream(opts); + } + + } + + +} +//end Ncurses Menu + void ncursesPrinter (dsd_opts * opts, dsd_state * state) { - int level; - level = 0; //start each cycle with 0 + int level = 0; + int c = 0; + + if (opts->audio_in_type != 1) //can't run getch/menues when using STDIN - + { + timeout(0); + c = getch(); + } + + //testing sending UDP commands to the socket inside of rtl_sdr_fm.cpp + //this works, but we will want to make an init func open one time, and have sendto here + if (temp_freq == opts->rtlsdr_center_freq) + { + handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + memset((char * ) & address, 0, sizeof(address)); + address.sin_family = AF_INET; + address.sin_addr.s_addr = inet_addr(SRV_IP); //address of host + address.sin_port = htons(udp_port); + sendto(handle, data, UDP_BUFLEN, 0, (const struct sockaddr * ) & address, sizeof(struct sockaddr_in)); + + temp_freq = -1; + } //Variable reset/set section //carrier reset if (state->carrier == 0) //reset these to 0 when no carrier { - state->payload_algid = 0; - state->payload_keyid = 0; - state->payload_keyidR = 0; - state->payload_algidR = 0; - //state->payload_mfid = 0; - //state->payload_mi = 0; - //state->payload_miR = 0; - - state->nxdn_key = 0; - state->nxdn_cipher_type = 0; - //memset(state->dstarradioheader, 0, 41); sprintf(state->dmr_branding, " "); } @@ -252,13 +1281,16 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (state->dmrburstL == 16 && state->lasttg > 0) //state->currentslot == 0 && { tg = state->lasttg; + } if (state->dmrburstR == 16 && state->lastsrcR > 0) //state->currentslot == 1 && { tgR = state->lasttgR; + } opts->p25enc = 0; + } //P25 @@ -362,6 +1394,15 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) call_matrix[9][4] = dcc; call_matrix[9][5] = time(NULL); + //open wav file if enabled and both rd and tg are not 0 + if (opts->dmr_stereo_wav == 1 && rd != 0 && tg != 0) + { + //close old first, assign name based on time and radio, open wav file + closeWavOutFileL (opts, state); + sprintf (opts->wav_out_file, "%s MS - CC %d - TG %d - RD %d.wav", getTimeN(), dcc, tg, rd); + openWavOutFileL (opts, state); //testing for now, will want to move to per call later + } + } //DMR BS Slot 1 - matrix 0-4 @@ -385,6 +1426,16 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) call_matrix[4][4] = dcc; call_matrix[4][5] = time(NULL); + //open wav file if enabled and both rd and tg are not 0 + if (opts->dmr_stereo_wav == 1 && rd != 0 && tg != 0) + { + //close old first, assign name based on time and radio, open wav file + closeWavOutFileL (opts, state); + + sprintf (opts->wav_out_file, "%s S1 - CC %d - TG %d - RD %d.wav", getTimeN(), dcc, tg, rd); + openWavOutFileL (opts, state); //testing for now, will want to move to per call later + } + } //DMR BS Slot 2 - matrix 5-9 @@ -408,6 +1459,15 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) call_matrix[9][4] = dcc; call_matrix[9][5] = time(NULL); + //open wav file if enabled and both rdR and tgR are not 0 + if (opts->dmr_stereo_wav == 1 && rdR != 0 && tgR != 0) + { + //close old first, assign name based on time and radio, open wav file + closeWavOutFileR (opts, state); + sprintf (opts->wav_out_fileR, "%s S2 - CC %d - TG %d - RD %d.wav", getTimeN(), dcc, tgR, rdR); + openWavOutFileR (opts, state); //testing for now, will want to move to per call later + } + } //P25 @@ -434,29 +1494,41 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) //Start Printing Section erase(); - printw ("%s \n", FM_bannerN[0]); //top line in white - attron(COLOR_PAIR(4)); - for (short int i = 1; i < 7; i++) //following lines in cyan + if (opts->ncurses_compact == 1) { - printw("%s \n", FM_bannerN[i]); + printw ("------------------------------------------------------------------------------\n"); + printw ("| Digital Speech Decoder: Florida Man Edition %s \n", GIT_TAG); } - attroff(COLOR_PAIR(4)); - printw ("--Build Info------------------------------------------------------------------\n"); - printw ("| %s \n", FM_bannerN[7]); //http link - printw ("| Digital Speech Decoder: Florida Man Edition\n"); - printw ("| Github Build Version: %s \n", GIT_TAG); - printw ("| mbelib version %s\n", versionstr); - //printw ("| Press CTRL+C twice to exit\n"); - printw ("------------------------------------------------------------------------------\n"); - attron(COLOR_PAIR(4)); + if (opts->ncurses_compact == 0) + { + attron(COLOR_PAIR(6)); //6 + for (short int i = 0; i < 7; i++) + { + printw("%s \n", FM_bannerN[i]); + } + attroff(COLOR_PAIR(6)); //6 + printw ("--Build Info------------------------------------------------------------------\n"); + printw ("| https://github.com/lwvmobile/dsd-fme/tree/pulseaudio\n"); //http link + printw ("| Digital Speech Decoder: Florida Man Edition\n"); + printw ("| Github Build Version: %s \n", GIT_TAG); + printw ("| MBElib version %s\n", versionstr); + printw ("------------------------------------------------------------------------------\n"); + attron(COLOR_PAIR(4)); + } + printw ("--Input Output----------------------------------------------------------------\n"); if (opts->audio_in_type == 0) { - printw ("| Pulse Audio Input: [%i] kHz [%i] Channel\n", opts->pulse_digi_rate_in/1000, opts->pulse_digi_in_channels); + printw ("| Pulse Audio Input: [%2i] kHz [%i] Channel\n", opts->pulse_digi_rate_in/1000, opts->pulse_digi_in_channels); + } + if (opts->audio_in_type == 4) + { + printw ("| Symbol Capture Input: %s \n", opts->audio_in_dev); } if (opts->audio_in_type == 1) { - printw ("| STDIN Standard Input: - \n"); + printw ("| STDIN Standard Input: - Menu Disabled when using STDIN!\n"); + // printw ("| NCURSES Menu Disabled when using STDIN! - Use CTRL + C to Close. \n"); } if (opts->audio_in_type == 3) { @@ -469,7 +1541,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) } if (opts->audio_out_type == 0) { - printw ("| Pulse Audio Output: [%i] kHz [%i] Channel\n", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels); + printw ("| Pulse Audio Output: [%2i] kHz [%i] Channel\n", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels); } if (opts->monitor_input_audio == 1) { @@ -479,15 +1551,30 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { printw ("| Writing MBE data files to directory %s\n", opts->mbe_out_dir); } + if (opts->wav_out_file_raw[0] != 0 && opts->audio_in_type == 0) + { + printw ("| Appending Raw Sig Audio WAV to file %s\n", opts->wav_out_file_raw); + } + if (opts->symbol_out_file[0] != 0 && opts->symbol_out == 1) + { + printw ("| Writing Symbol Capture to Bin File: %s\n", opts->symbol_out_file); + } if (opts->wav_out_file[0] != 0 && opts->dmr_stereo == 0) { - printw ("| Appending Audio WAV to file %s\n", opts->wav_out_file); + printw ("| Writing Decoded Audio to WAV File: %s\n", opts->wav_out_file); } + if (opts->dmr_stereo_wav == 1) //opts->wav_out_file[0] != 0 && + { + printw ("| Per Call WAV S1 - %s\n", opts->wav_out_file); + printw ("| Per Call WAV S2 - %s\n", opts->wav_out_fileR); + } + printw ("------------------------------------------------------------------------------\n"); attroff(COLOR_PAIR(4)); - if (state->carrier == 1){ //figure out method that will tell me when is active and when not active, maybe carrier but this doesn't print anyways unless activity + if (state->carrier == 1) + { attron(COLOR_PAIR(3)); level = (int) state->max / 164; //only update on carrier present reset = 1; @@ -540,7 +1627,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { printw ("| RAN: [%2d] ", rn); printw ("TID: [%4d] ", tgn); - printw ("RID: [%4d] \n| ALG: [0x%02X] KEY [0x%02X] ", src, state->nxdn_cipher_type, state->nxdn_key); + printw ("RID: [%4d] \n| ALG: [0x%02X] KEY: [0x%02X] ", src, state->nxdn_cipher_type, state->nxdn_key); if (state->carrier == 1) { printw("%s ", state->nxdn_call_type); @@ -548,21 +1635,21 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (state->nxdn_cipher_type == 0x1 && state->carrier == 1) { attron(COLOR_PAIR(2)); - printw ("Scrambler Encryption "); + printw ("Scrambler "); attroff(COLOR_PAIR(2)); attron(COLOR_PAIR(3)); } if (state->nxdn_cipher_type == 0x2 && state->carrier == 1) { attron(COLOR_PAIR(2)); - printw ("DES Encryption "); + printw ("DES-OFB "); attroff(COLOR_PAIR(2)); attron(COLOR_PAIR(3)); } if (state->nxdn_cipher_type == 0x3 && state->carrier == 1) { attron(COLOR_PAIR(2)); - printw ("AES Encryption "); + printw ("AES-256 "); attroff(COLOR_PAIR(2)); attron(COLOR_PAIR(3)); } @@ -573,24 +1660,38 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) attroff(COLOR_PAIR(2)); attron(COLOR_PAIR(3)); } - //printw("%s ", state->nxdn_call_type); printw("\n"); } //P25 if (lls == 0 || lls == 1) { - printw("| TID:[%8i] RID:[%8i] ", tg, rd); + // printw("| TID:[%8i] RID:[%8i] ", tg, rd); + printw("| TID:[%8i] RID:[%8i] ", state->lasttg, state->lastsrc); + printw(" MFID:[0x%02X] ", state->payload_mfid); printw("NAC: [0x%3X] \n", nc); printw("| ALG:[0x%02X] ", state->payload_algid); - printw(" KEY:[0x%04X] ", state->payload_keyid); - printw(" MFID: [0x%02X] ", state->payload_mfid); //no way of knowing if this is accurate info yet - if (state->payload_algid != 0x80 && state->payload_algid != 0x0 && state->carrier == 1) + printw(" KID:[0x%04X] ", state->payload_keyid); + printw(" MI:[0x%016llX] ", state->payload_miP); + + if (state->payload_algid != 0x80 && state->payload_algid != 0x0 && state->carrier == 1 && state->R == 0) { attron(COLOR_PAIR(2)); printw("**ENC**"); attroff(COLOR_PAIR(2)); attron(COLOR_PAIR(3)); + if (state->payload_algid == 0xAA) + { + attron(COLOR_PAIR(1)); + printw(" ADP/RC4"); + attron(COLOR_PAIR(3)); + } + if (state->payload_algid == 0x81) + { + attron(COLOR_PAIR(1)); + printw(" DES-OFB"); + attron(COLOR_PAIR(3)); + } } printw("\n"); } @@ -627,7 +1728,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) //printw ("| | "); //10 spaces printw ("| V XTRA | "); //10 spaces //Burger King - if(state->dmrburstL == 16 && state->payload_mi == 0 && (state->dmr_so & 0xCF) == 0x40) //4F or CF mask? & 0xCF currently + if(state->dmrburstL == 16 && state->payload_algid == 0 && (state->dmr_so & 0xCF) == 0x40) //4F or CF mask? & 0xCF currently { attron(COLOR_PAIR(5)); printw (" **BP** "); @@ -635,15 +1736,15 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) attron(COLOR_PAIR(3)); } //Point - if(state->dmrburstL == 16 && state->payload_mi == 0 && state->K > 0 && (state->dmr_so & 0xCF) == 0x40) + if(state->dmrburstL == 16 && state->payload_algid == 0 && state->K > 0 && (state->dmr_so & 0xCF) == 0x40) { attron(COLOR_PAIR(1)); printw ("BPK [%3lld] ", state->K); attroff(COLOR_PAIR(1)); attron(COLOR_PAIR(3)); } - //ALG, KeyID, MI - if(state->dmrburstL == 16 && state->payload_keyid > 0 && (state->dmr_so & 0xCF) == 0x40) + //ALG, KeyID, MI //was key_id + if(state->dmrburstL == 16 && state->payload_algid > 0 && (state->dmr_so & 0xCF) == 0x40) { attron(COLOR_PAIR(1)); printw ("ALG: [0x%02X] KEY: [0x%02X] MI: [0x%08X]", state->payload_algid, state->payload_keyid, state->payload_mi); @@ -651,7 +1752,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) attron(COLOR_PAIR(3)); } - if(state->dmrburstL == 16 && state->dmr_so == 0x40) //0100 0000 + if(state->dmrburstL == 16 && state->dmr_so == 0x40 && state->R == 0) //0100 0000 { attron(COLOR_PAIR(2)); printw (" **ENC** "); @@ -728,7 +1829,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) printw ("| V XTRA | "); //10 spaces //Burger King 2 - if(state->dmrburstR == 16 && state->payload_miR == 0 && (state->dmr_soR & 0xCF) == 0x40) //4F or CF mask? + if(state->dmrburstR == 16 && state->payload_algidR == 0 && (state->dmr_soR & 0xCF) == 0x40) //4F or CF mask? { attron(COLOR_PAIR(5)); printw (" **BP** "); @@ -736,15 +1837,15 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) attron(COLOR_PAIR(3)); } //Point 2 - if(state->dmrburstR == 16 && state->payload_miR == 0 && state->K > 0 && (state->dmr_soR & 0xCF) == 0x40) + if(state->dmrburstR == 16 && state->payload_algidR == 0 && state->K > 0 && (state->dmr_soR & 0xCF) == 0x40) { attron(COLOR_PAIR(1)); printw ("BPK [%3lld] ", state->K); attroff(COLOR_PAIR(1)); attron(COLOR_PAIR(3)); } - //ALG, KeyID, MI 2 - if(state->dmrburstR == 16 && state->payload_keyidR > 0 && (state->dmr_soR & 0xCF) == 0x40) + //ALG, KeyID, MI 2 //was keyidR + if(state->dmrburstR == 16 && state->payload_algidR > 0 && (state->dmr_soR & 0xCF) == 0x40) { attron(COLOR_PAIR(1)); printw ("ALG: [0x%02X] KEY: [0x%02X] MI: [0x%08X]", state->payload_algidR, state->payload_keyidR, state->payload_miR); @@ -752,7 +1853,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) attron(COLOR_PAIR(3)); } //Call Types, may switch to the more robust version later? - if(state->dmrburstR == 16 && state->dmr_soR == 0x40) //0100 0000 + if(state->dmrburstR == 16 && state->dmr_soR == 0x40 && state->R == 0) //0100 0000 { attron(COLOR_PAIR(2)); printw (" **ENC** "); @@ -829,65 +1930,72 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (state->carrier == 1){ //same as above attroff(COLOR_PAIR(3)); } - - attron(COLOR_PAIR(4)); //cyan for history - printw ("--Call History----------------------------------------------------------------\n"); - for (short int j = 0; j < 10; j++) + //only print call history if enabled + if (opts->ncurses_history == 1) { - //only print if a valid time was assinged to the matrix - if ( ((time(NULL) - call_matrix[9-j][5]) < 9999) ) + attron(COLOR_PAIR(4)); //cyan for history + printw ("--Call History----------------------------------------------------------------\n"); + for (short int j = 0; j < 10; j++) { - printw ("| %s ", SyncTypes[call_matrix[9-j][0]]); - if (lls == 8 || lls == 9 || lls == 16 || lls == 17) + //only print if a valid time was assinged to the matrix + if ( ((time(NULL) - call_matrix[9-j][5]) < 9999) ) { - printw ("RAN [%2lld] ", call_matrix[9-j][1]); - printw ("TG [%4lld] ", call_matrix[9-j][4]); - printw ("RID [%4lld] ", call_matrix[9-j][2]); + printw ("| %s ", SyncTypes[call_matrix[9-j][0]]); + if (lls == 8 || lls == 9 || lls == 16 || lls == 17) + { + printw ("RAN [%2lld] ", call_matrix[9-j][1]); + printw ("TG [%4lld] ", call_matrix[9-j][4]); + printw ("RID [%4lld] ", call_matrix[9-j][2]); + } + //dPMR + if (lls == 20 || lls == 21 || lls == 22 || lls == 23 ||lls == 24 || lls == 25 || lls == 26 || lls == 27) + { + printw ("TGT [%8lld] ", call_matrix[9-j][1]); + printw ("SRC [%8lld] ", call_matrix[9-j][2]); + printw ("DCC [%2lld] ", call_matrix[9-j][4]); + } + //P25P1 Voice and Data + if (call_matrix[9-j][0] == 0 || call_matrix[9-j][0] == 1) + { + printw ("TID [%8lld] ", call_matrix[9-j][1]); + printw ("RID [%8lld] ", call_matrix[9-j][2]); + printw ("NAC [0x%03llX] ", call_matrix[9-j][4]); + } + //DMR BS Types + if (call_matrix[9-j][0] == 12 || call_matrix[9-j][0] == 13 || call_matrix[9-j][0] == 10 || call_matrix[9-j][0] == 11 ) + { + printw ("S[%d] ", call_matrix[9-j][3]); + printw ("TGT [%8lld] ", call_matrix[9-j][1]); + printw ("SRC [%8lld] ", call_matrix[9-j][2]); + printw ("DCC [%02lld] ", call_matrix[9-j][4]); + } + //DMR MS Types + if (call_matrix[9-j][0] == 32 || call_matrix[9-j][0] == 33 || call_matrix[9-j][0] == 34 ) + { + //printw ("S[%d] ", call_matrix[9-j][3]); + printw ("TGT [%8lld] ", call_matrix[9-j][1]); + printw ("SRC [%8lld] ", call_matrix[9-j][2]); + printw ("DCC [%02lld] ", call_matrix[9-j][4]); + } + printw ("%lld secs ago\n", time(NULL) - call_matrix[9-j][5]); } - //dPMR - if (lls == 20 || lls == 21 || lls == 22 || lls == 23 ||lls == 24 || lls == 25 || lls == 26 || lls == 27) - { - printw ("TGT [%8lld] ", call_matrix[9-j][1]); - printw ("SRC [%8lld] ", call_matrix[9-j][2]); - printw ("DCC [%2lld] ", call_matrix[9-j][4]); - } - //P25P1 Voice and Data - if (call_matrix[9-j][0] == 0 || call_matrix[9-j][0] == 1) - { - printw ("TID [%8lld] ", call_matrix[9-j][1]); - printw ("RID [%8lld] ", call_matrix[9-j][2]); - printw ("NAC [0x%03llX] ", call_matrix[9-j][4]); - } - //DMR BS Types - if (call_matrix[9-j][0] == 12 || call_matrix[9-j][0] == 13 || call_matrix[9-j][0] == 10 || call_matrix[9-j][0] == 11 ) - { - printw ("S[%d] ", call_matrix[9-j][3]); - printw ("TGT [%8lld] ", call_matrix[9-j][1]); - printw ("SRC [%8lld] ", call_matrix[9-j][2]); - printw ("DCC [%02lld] ", call_matrix[9-j][4]); - } - //DMR MS Types - if (call_matrix[9-j][0] == 32 || call_matrix[9-j][0] == 33 || call_matrix[9-j][0] == 34 ) - { - //printw ("S[%d] ", call_matrix[9-j][3]); - printw ("TGT [%8lld] ", call_matrix[9-j][1]); - printw ("SRC [%8lld] ", call_matrix[9-j][2]); - printw ("DCC [%02lld] ", call_matrix[9-j][4]); - } - printw ("%lld secs ago\n", time(NULL) - call_matrix[9-j][5]); - } - } //end Call History - //fence bottom - printw ("------------------------------------------------------------------------------\n"); - attroff(COLOR_PAIR(4)); //cyan for history - + } //end Call History + //fence bottom + printw ("------------------------------------------------------------------------------\n"); + attroff(COLOR_PAIR(4)); //cyan for history + } refresh(); + if (c == 27) //esc key + { + ncursesMenu (opts, state); //just a quick test + } + } //end ncursesPrinter void ncursesClose () { endwin(); - printf("Press CTRL+C again to close. Thanks.\n"); - printf("Run 'reset' in your terminal to clean up if necessary."); + //printf("Press CTRL+C again to close. Thanks.\n"); + //printf("Run 'reset' in your terminal to clean up if necessary.\n"); } diff --git a/src/dsd_reset.c b/src/dsd_reset.c index ab6165d..a1d9bfd 100644 --- a/src/dsd_reset.c +++ b/src/dsd_reset.c @@ -8,9 +8,9 @@ resetState (dsd_state * state) int i, j; - state->dibit_buf = malloc (sizeof (int) * 1000000); - state->dibit_buf_p = state->dibit_buf + 200; - memset (state->dibit_buf, 0, sizeof (int) * 200); + // state->dibit_buf = malloc (sizeof (int) * 1000000); + // state->dibit_buf_p = state->dibit_buf + 200; + // memset (state->dibit_buf, 0, sizeof (int) * 200); state->repeat = 0; //not sure yet //state->audio_out_buf = malloc (sizeof (short) * 1000000); //memset (state->audio_out_buf, 0, 100 * sizeof (short)); diff --git a/src/dsd_symbol.c b/src/dsd_symbol.c index 2af17e0..39016ba 100644 --- a/src/dsd_symbol.c +++ b/src/dsd_symbol.c @@ -26,6 +26,7 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) sum = 0; count = 0; + sample = 0; //init sample with a value of 0...see if this was causing issues with raw audio monitoring for (i = 0; i < state->samplesPerSymbol; i++) //right HERE { @@ -81,15 +82,22 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) } // Read the new sample from the input - if(opts->audio_in_type == 0) + if(opts->audio_in_type == 0) // && state->menuopen == 0 still not quite working { pa_simple_read(opts->pulse_digi_dev_in, &sample, 2, NULL ); //look into how processAudio handles playback, not sure if latency issues, or garbage sample values crash pulse when written - if (opts->monitor_input_audio == 1 && state->lastsynctype == -1 && sample < 32767 && sample > -32767) + // if (opts->monitor_input_audio == 1 && state->lastsynctype == -1 && sample < 32767 && sample > -32767) + if (opts->monitor_input_audio == 1 && state->lastsynctype == -1 && sample != 0) { state->pulse_raw_out_buffer = sample; //steal raw out buffer sample here? pa_simple_write(opts->pulse_raw_dev_out, (void*)&state->pulse_raw_out_buffer, 2, NULL); } + //playback is wrong, depends on samples_per_symbol, maybe make a buffer and store first? + //making buffer might also fix raw audio monitoring as well + if (opts->wav_out_file_raw[0] != 0) //if set for recording sample raw files + { + //writeRawSample (opts, state, sample); + } } else if (opts->audio_in_type == 1) { @@ -122,7 +130,8 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) { #ifdef USE_RTLSDR // TODO: need to read demodulated stream here - get_rtlsdr_sample(&sample); + // get_rtlsdr_sample(&sample); + get_rtlsdr_sample(&sample, opts, state); if (opts->monitor_input_audio == 1 && state->lastsynctype == -1 && sample < 32767 && sample > -32767) { state->pulse_raw_out_buffer = sample; //steal raw out buffer sample here? @@ -131,6 +140,11 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) #endif } + // //test reading symbol bin files + // else if (opts->audio_in_type == 4) + // { + // //use fopen and read in a sample, check boatbod op25 for clues + // } #ifdef TRACE_DSD state->debug_sample_index++; @@ -338,6 +352,73 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) } #endif + //read op25/fme symbol bin files + if (opts->audio_in_type == 4) + { + //use fopen and read in a symbol, check op25 for clues + if(opts->symbolfile == NULL) + { + fprintf(stderr, "Error Opening File %s\n", opts->symbolfile); + return(-1); + } + + state->symbolc = fgetc(opts->symbolfile); + //fprintf(stderr, "%d", state->symbolc); + if( feof(opts->symbolfile) ) + { + opts->audio_in_type = 0; //switch to pulse after playback, ncurses terminal can initiate replay if wanted + fclose(opts->symbolfile); + openPulseInput(opts); + } + + //flipping these to 'positive' produces terrible results in P25 P1, and I tried flopping it every way I could + //positive polarity works fine with DMR, but not P25, so may look at reading and storing based on frame type? + if (opts->frame_p25p1 == 1) //use inverted polarity for reading P25, but not DMR (or others?) + { + if (state->symbolc == 0) + { + symbol = -1; //-1 + } + if (state->symbolc == 1) + { + symbol = -3; //-3 + } + if (state->symbolc == 2) + { + symbol = 1; //1 + } + if (state->symbolc == 3) + { + symbol = 3; //3 + } + } + else if (opts->frame_provoice == 1) //syncs fine, but issues with dibit reading + { + //provoice has issue where sync is okay, but decode isn't working after sync + //symbol = state->symbolc; + } + else + { + if (state->symbolc == 0) + { + symbol = 1; //-1 + } + if (state->symbolc == 1) + { + symbol = 3; //-3 + } + if (state->symbolc == 2) + { + symbol = -1; //1 + } + if (state->symbolc == 3) + { + symbol = -3; //3 + } + } + + } + state->symbolcnt++; return (symbol); diff --git a/src/fec.c b/src/fec.c index 6180f2d..cfb95f5 100644 --- a/src/fec.c +++ b/src/fec.c @@ -1224,10 +1224,11 @@ void Golay_24_12_encode(unsigned char *origBits, unsigned char *encodedBits) encodedBits[j] += origBits[i] * Golay_24_12_m_G[24*i + j]; } } - + // fprintf (stderr, "\n Inside Golay - Encoded Bits = "); //disable later on for (i = 0; i < 24; i++) { encodedBits[i] %= 2; + // fprintf (stderr, "%b", encodedBits[i]); //disable later on } } diff --git a/src/nxdn_data.c b/src/nxdn_data.c index 3dc93e2..87d2bf3 100644 --- a/src/nxdn_data.c +++ b/src/nxdn_data.c @@ -1,9 +1,6 @@ #include "dsd.h" #include "nxdn_const.h" -//don't know why this doesn't work right in LEH, need to figure that out for him -//works just fien when ripped from his and into mine -//must be some random thing, I'll look at his when I have a chance void processNXDNData (dsd_opts * opts, dsd_state * state) { int i, dibit = 0; @@ -24,7 +21,7 @@ void processNXDNData (dsd_opts * opts, dsd_state * state) } /* Start pseudo-random NXDN sequence after - * LITCH = 16 bit = 8 dibit + * LICH = 16 bit = 8 dibit * ==> Index 8 */ pr = (unsigned char *)(&nxdnpr2[8]); for (i = 0; i < 30; i++) diff --git a/src/nxdn_lib.c b/src/nxdn_lib.c index 22c8c75..fdd6ef5 100644 --- a/src/nxdn_lib.c +++ b/src/nxdn_lib.c @@ -60,13 +60,13 @@ } /* End ConvertBitIntoBytes() */ -uint8_t NXDN_decode_LICH(uint8_t InputLich[8], - uint8_t * RFChannelType, - uint8_t * FunctionnalChannelType, - uint8_t * Option, - uint8_t * Direction, - uint8_t * CompleteLichBinaryFormat, - uint8_t Inverted) + uint8_t NXDN_decode_LICH(uint8_t InputLich[8], + uint8_t * RFChannelType, + uint8_t * FunctionnalChannelType, + uint8_t * Option, + uint8_t * Direction, + uint8_t * CompleteLichBinaryFormat, + uint8_t Inverted) { uint8_t GoodParity = 0; uint32_t i; @@ -294,6 +294,7 @@ void NXDN_SACCH_Full_decode(dsd_opts * opts, dsd_state * state) /* Check CRC */ if(state->NxdnSacchRawPart[i].CrcIsGood == 0) CrcCorrect = 0; + //fprintf(stderr, "\n SAACH P# %1d - %05X", i, state->NxdnSacchRawPart[i].Data); } /* Decodes the element content */ @@ -553,7 +554,7 @@ void NXDN_Elements_Content_decode(dsd_opts * opts, dsd_state * state, uint32_t i; uint8_t MessageType; uint64_t CurrentIV = 0; - + unsigned long long int FullMessage = 0; /* Get the "Message Type" field */ MessageType = (ElementsContent[2] & 1) << 5; MessageType |= (ElementsContent[3] & 1) << 4; @@ -562,6 +563,8 @@ void NXDN_Elements_Content_decode(dsd_opts * opts, dsd_state * state, MessageType |= (ElementsContent[6] & 1) << 1; MessageType |= (ElementsContent[7] & 1) << 0; + //fprintf(stderr, "\nMessage Type = %X ", MessageType); + /* Save the "F1" and "F2" flags */ state->NxdnElementsContent.F1 = ElementsContent[0]; state->NxdnElementsContent.F2 = ElementsContent[1]; @@ -569,7 +572,16 @@ void NXDN_Elements_Content_decode(dsd_opts * opts, dsd_state * state, /* Save the "Message Type" field */ state->NxdnElementsContent.MessageType = MessageType; - //fprintf(stderr, "Message Type = 0x%02X ", MessageType & 0xFF); + //fprintf(stderr, "\n Message Type = 0x%02X ", MessageType & 0xFF); + + //Dump the Message into a HEX value for vieweing + //FullMessage = (unsigned long long int)ConvertBitIntoBytes(&Message[0], 64); + for (short int i = 0; i < 64; i++) + { + FullMessage = FullMessage << 1; + FullMessage |= ElementsContent[i]; + } + //fprintf(stderr, "\nFull Message = %016llX ", FullMessage); /* Decode the right "Message Type" */ switch(MessageType) @@ -666,6 +678,7 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message) uint8_t KeyID = 0; uint8_t DuplexMode[32] = {0}; uint8_t TransmissionMode[32] = {0}; + unsigned long long int FullMessage = 0; //UNUSED_VARIABLE(opts); //UNUSED_VARIABLE(state); @@ -712,14 +725,14 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message) if(CCOption & 0x40) fprintf(stderr, "Visitor "); if(CCOption & 0x20) fprintf(stderr, "Priority Paging "); - /* On an AES or DES encrypted frame one IV is used on two - * superframe. - * The first superframe contains a VCALL message inside - * the SACCH and the second superframe contains the next IV - * to use. - * - * Set the correct part of encrypted frame flag. - */ + //Dump the Message into a HEX value for vieweing + //FullMessage = (unsigned long long int)ConvertBitIntoBytes(&Message[0], 64); + // for (short int i = 0; i < 64; i++) + // { + // FullMessage = FullMessage << 1; + // FullMessage |= Message[i]; + // } + if((CipherType == 2) || (CipherType == 3)) { state->NxdnElementsContent.PartOfCurrentEncryptedFrame = 1; @@ -742,11 +755,17 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message) NXDN_Voice_Call_Option_To_Str(VoiceCallOption, DuplexMode, TransmissionMode); fprintf(stderr, "%s %s - ", DuplexMode, TransmissionMode); + /* Print Source ID and Destination ID (Talk Group or Unit ID) */ + //fprintf (stderr, "%s", KGRN); + fprintf(stderr, "Src=%u - Dst/TG=%u ", SourceUnitID & 0xFFFF, DestinationID & 0xFFFF); + fprintf (stderr, "%s", KNRM); + //state->nxdn_key = (KeyID & 0xFF); //state->nxdn_cipher_type = CipherType; /* Print the "Cipher Type" */ if(CipherType != 0) { + fprintf (stderr, "\n %s", KYEL); fprintf(stderr, "%s - ", NXDN_Cipher_Type_To_Str(CipherType)); //state->nxdn_cipher_type = CipherType; } @@ -754,17 +773,19 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message) /* Print the Key ID */ if(CipherType != 0) { - fprintf (stderr, "%s", KYEL); + fprintf(stderr, "Key ID %u - ", KeyID & 0xFF); - fprintf (stderr, "%s", KNRM); + //fprintf (stderr, "%s", KNRM); //state->nxdn_key = (KeyID & 0xFF); } - /* Print Source ID and Destination ID (Talk Group or Unit ID) */ - - fprintf(stderr, "Src=%u - Dst/TG=%u ", SourceUnitID & 0xFFFF, DestinationID & 0xFFFF); - fprintf (stderr, "%s", KNRM); - + //print scrambler key value if manually inserted + if (state->nxdn_cipher_type == 0x01 && state->R > 0) //scrambler + { + fprintf (stderr, "%s", KYEL); + fprintf(stderr, "Value: 0x%04llX", state->R); //use R and not miN + fprintf (stderr, "%s", KNRM); + } if(state->NxdnElementsContent.VCallCrcIsGood) { @@ -784,7 +805,7 @@ void NXDN_decode_VCALL(dsd_opts * opts, dsd_state * state, uint8_t * Message) fprintf(stderr, "(CRC ERR) "); fprintf (stderr, "%s", KNRM); } - + //fprintf(stderr, "\nFull Message = %016llX ", FullMessage); } /* End NXDN_decode_VCALL() */ @@ -815,21 +836,15 @@ void NXDN_decode_VCALL_IV(dsd_opts * opts, dsd_state * state, uint8_t * Message) * * Message[8..71] contains : The 64 bits IV */ - + state->payload_miN = 0; //zero out /* Extract the IV from the VCALL_IV message */ for(i = 0; i < 8; i++) { state->NxdnElementsContent.IV[i] = (uint8_t)ConvertBitIntoBytes(&Message[(i + 1) * 8], 8); + //let's load this mother fucker up then lol + state->payload_miN = state->payload_miN << 8 | state->NxdnElementsContent.IV[i]; } - /* On an AES or DES encrypted frame one IV is used on two - * superframe. - * The first superframe contains a VCALL message inside - * the SACCH and the second superframe contains the next IV - * to use. - * - * Set the correct part of encrypted frame flag. - */ state->NxdnElementsContent.PartOfCurrentEncryptedFrame = 2; state->NxdnElementsContent.PartOfNextEncryptedFrame = 1; @@ -1012,35 +1027,640 @@ uint8_t CRC6BitNXDN(uint8_t * BufferIn, uint32_t BitLength) return CRC; } /* End CRC6BitNXDN() */ - -/* Scrambler used for NXDN transmission (different of the - * voice encryption scrambler), see NXDN Part1-A Common Air Interface chapter - * 4.6 for the polynomial description. - * It is a X^9 + X^4 + 1 polynomial used as pseudo-random generator */ -void ScrambledNXDNVoiceBit(int * LfsrValue, char * BufferIn, char * BufferOut, int NbOfBitToScramble) +//NXDN IDLE +void ProcessNXDNIdleData (dsd_opts * opts, dsd_state * state, uint8_t Inverted) { - uint32_t i; - uint32_t LFSR; - uint8_t bit; + int i, dibit = 0; + unsigned char sacch_raw[72] = {0}; + unsigned char sacch_decoded[32] = {0}; /* 26 bit + 6 bit CRC */ + unsigned char *pr; + uint8_t CrcIsGood = 0; + uint8_t StructureField = 0; + uint8_t RAN = 0; + uint8_t PartOfFrame = 0; - /* Load the initial LFSR value - * LFSR = 0x0E4 at starting value */ - LFSR = (uint32_t)*LfsrValue; - - for(i = 0; i < (uint32_t)NbOfBitToScramble; i++) + if (opts->errorbars == 1) { - /* Bit 0 of LFSR is used to scramble data */ - BufferOut[i] = (BufferIn[i] ^ (LFSR & 1)) & 1; - - /* Compute bit = X^0 + X^4 */ - bit = ((LFSR & 1) ^ ((LFSR >> 4) & 1)) & 1; - - /* Insert bit on the 9th bit (X^9) */ - LFSR = ((LFSR >> 1) & 0xFF) | ((bit << 8) & 0x100); + fprintf(stderr, "DATA - "); } - *LfsrValue = (int)LFSR; -} /* End ScrambledNXDNVoiceBit() */ + /* Start pseudo-random NXDN sequence after + * LICH = 16 bit = 8 dibit + * ==> Index 8 */ + pr = (unsigned char *)(&nxdnpr[8]); + for (i = 0; i < 30; i++) + { + dibit = getDibit (opts, state); + + /* Store and de-interleave directly SACCH bits */ + sacch_raw[(2*i)] = ((*pr) & 1) ^ (1 & (dibit >> 1)); // bit 1 + sacch_raw[(2*i)+1] = (1 & dibit); // bit 0 + pr++; +#ifdef NXDN_DUMP + fprintf(stderr, "%c", dibit + 48); +#endif + } +#ifdef NXDN_DUMP + fprintf(stderr, " "); +#endif + + + /* Decode the SACCH fields */ + CrcIsGood = NXDN_SACCH_raw_part_decode(sacch_raw, sacch_decoded); + StructureField = (sacch_decoded[0]<<1 | sacch_decoded[1]<<0) & 0x03; /* Compute the Structure Field (remove 2 first bits of the SR Information in the SACCH) */ + RAN = (sacch_decoded[2]<<5 | sacch_decoded[3]<<4 | sacch_decoded[4]<<3 | sacch_decoded[5]<<2 | sacch_decoded[6]<<1 | sacch_decoded[7]<<0) & 0x3F; /* Compute the RAN (6 last bits of the SR Information in the SACCH) */ + + /* Compute the Part of Frame according to the structure field */ + if (StructureField == 3) PartOfFrame = 0; + else if(StructureField == 2) PartOfFrame = 1; + else if(StructureField == 1) PartOfFrame = 2; + else if(StructureField == 0) PartOfFrame = 3; + else PartOfFrame = 0; /* Normally we should never go here */ + + /* Fill the SACCH structure */ + state->NxdnSacchRawPart[PartOfFrame].CrcIsGood = CrcIsGood; + state->NxdnSacchRawPart[PartOfFrame].StructureField = StructureField; + state->NxdnSacchRawPart[PartOfFrame].RAN = RAN; + memcpy(state->NxdnSacchRawPart[PartOfFrame].Data, &sacch_decoded[8], 18); /* Copy the 18 bits of SACCH content */ + + fprintf(stderr, "RAN=%02d - Part %d/4 ", RAN, PartOfFrame + 1); + if(CrcIsGood) fprintf(stderr, " (OK) - "); + else fprintf(stderr, "(CRC ERR) - "); + + + /* This frame is an idle frame */ + fprintf(stderr, "Idle"); + + + /* Decode the SACCH only when all 4 voice frame + * SACCH spare parts have been received */ + if(PartOfFrame == 3) + { + /* Decode the entire SACCH content */ + NXDN_SACCH_Full_decode(opts, state); + } + + for (i = 0; i < 144; i++) + { + dibit = getDibit (opts, state); +#ifdef NXDN_DUMP + fprintf(stderr, "%c", dibit + 48); +#endif + } + + if (opts->errorbars == 1) + { + fprintf(stderr, "\n"); + } + + /* Reset the SACCH CRCs when all 4 voice frame + * SACCH spare parts have been received */ + if(PartOfFrame == 3) + { + /* Reset all CRCs of the SACCH */ + for(i = 0; i < 4; i++) state->NxdnSacchRawPart[i].CrcIsGood = 0; + } +} /* End ProcessNXDNIdleData() */ + +void ProcessNXDNFacch1Data (dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + int i, j, dibit = 0; + unsigned char sacch_raw[72] = {0}; + unsigned char sacch_decoded[32] = {0}; /* 26 bits + 6 bits CRC */ + unsigned char facch1_raw[144] = {0}; + unsigned char facch1_decoded[96] = {0}; /* 80 bits + 12 bits CRC + 4 bits "Tail" (set to "0") */ + unsigned char *pr; + uint8_t CrcIsGood = 0; + uint8_t StructureField = 0; + uint8_t RAN = 0; + uint8_t PartOfFrame = 0; + uint8_t Facch1CrcIsGood = 0; + + if (opts->errorbars == 1) + { + fprintf(stderr, "DATA - "); + } + + /* Start pseudo-random NXDN sequence after + * LITCH = 16 bit = 8 dibit + * ==> Index 8 */ + pr = (unsigned char *)(&nxdnpr[8]); + for (i = 0; i < 30; i++) + { + dibit = getDibit (opts, state); + + /* Store and de-interleave directly SACCH bits */ + sacch_raw[(2*i)] = ((*pr) & 1) ^ (1 & (dibit >> 1)); // bit 1 + sacch_raw[(2*i)+1] = (1 & dibit); // bit 0 + pr++; +#ifdef NXDN_DUMP + fprintf(stderr, "%c", dibit + 48); +#endif + } +#ifdef NXDN_DUMP + fprintf(stderr, " "); +#endif + + + /* Decode the SACCH fields */ + CrcIsGood = NXDN_SACCH_raw_part_decode(sacch_raw, sacch_decoded); + StructureField = (sacch_decoded[0]<<1 | sacch_decoded[1]<<0) & 0x03; /* Compute the Structure Field (remove 2 first bits of the SR Information in the SACCH) */ + RAN = (sacch_decoded[2]<<5 | sacch_decoded[3]<<4 | sacch_decoded[4]<<3 | sacch_decoded[5]<<2 | sacch_decoded[6]<<1 | sacch_decoded[7]<<0) & 0x3F; /* Compute the RAN (6 last bits of the SR Information in the SACCH) */ + + /* Compute the Part of Frame according to the structure field */ + if (StructureField == 3) PartOfFrame = 0; + else if(StructureField == 2) PartOfFrame = 1; + else if(StructureField == 1) PartOfFrame = 2; + else if(StructureField == 0) PartOfFrame = 3; + else PartOfFrame = 0; /* Normally we should never go here */ + + /* Fill the SACCH structure */ + state->NxdnSacchRawPart[PartOfFrame].CrcIsGood = CrcIsGood; + state->NxdnSacchRawPart[PartOfFrame].StructureField = StructureField; + state->NxdnSacchRawPart[PartOfFrame].RAN = RAN; + memcpy(state->NxdnSacchRawPart[PartOfFrame].Data, &sacch_decoded[8], 18); /* Copy the 18 bits of SACCH content */ + + fprintf(stderr, "RAN=%02d - Part %d/4 ", RAN, PartOfFrame + 1); + if(CrcIsGood) fprintf(stderr, " (OK) - "); + else fprintf(stderr, "(CRC ERR) - "); + + + /* This frame is an FACCH1 frame */ + fprintf(stderr, "FACCH1 - "); + + + /* Decode the SACCH only when all 4 voice frame + * SACCH spare parts have been received */ + if(PartOfFrame == 3) + { + /* Decode the entire SACCH content */ + //NXDN_SACCH_Full_decode(opts, state); + } + + /* Start pseudo-random NXDN sequence after + * LITCH = 16 bit = 8 dibit + + * SACCH = 60 bit = 30 dibit + * = 76 bit = 38 dibit + * ==> Index 38 */ + pr = (unsigned char *)(&nxdnpr[38]); + + /* The frame contains 2 * 144 bits = 2 * 72 dibit */ + for(j = 0; j < 2; j++) + { + for (i = 0; i < 72; i++) + { + dibit = getDibit (opts, state); + + /* Store and FACCH1 bits */ + facch1_raw[(2*i)] = ((*pr) & 1) ^ (1 & (dibit >> 1)); // bit 1 + facch1_raw[(2*i)+1] = (1 & dibit); // bit 0 + pr++; + +#ifdef NXDN_DUMP + fprintf(stderr, "%c", dibit + 48); +#endif + } /* End for (i = 0; i < 72; i++) */ + + /* Extract the FACCH1 content */ + Facch1CrcIsGood = NXDN_FACCH1_decode(facch1_raw, facch1_decoded); + + state->NxdnFacch1RawPart[j].CrcIsGood = Facch1CrcIsGood; + memcpy(state->NxdnFacch1RawPart[j].Data, facch1_decoded, 80); + + if(Facch1CrcIsGood) fprintf(stderr, "FACCH1 CRC %d is good - ", j + 1); + else fprintf(stderr, "FACCH1 CRC %d is bad - ", j + 1); + } /* End for(j = 0; j < 2; j++) */ + + if (opts->errorbars == 1) + { + fprintf(stderr, "\n"); + } + + /* Reset the SACCH CRCs when all 4 voice frame + * SACCH spare parts have been received */ + if(PartOfFrame == 3) + { + /* Reset all CRCs of the SACCH */ + for(i = 0; i < 4; i++) state->NxdnSacchRawPart[i].CrcIsGood = 0; + } +} /* End ProcessNXDNFacch1Data() */ + +void ProcessNXDNUdchData (dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + int i, dibit = 0; + unsigned char facch2_raw[348] = {0}; + unsigned char facch2_decoded[203] = {0}; /* 184 bits + 15 bits CRC + 4 bits "Tail" (set to "0") */ + unsigned char *pr; + uint8_t Facch2CrcIsGood = 0; + uint8_t StructureField = 0; + uint8_t RAN = 0; + + if (opts->errorbars == 1) + { + fprintf(stderr, "DATA - "); + } + + /* Start pseudo-random NXDN sequence after + * LITCH = 16 bit = 8 dibit + * ==> Index 8 */ + pr = (unsigned char *)(&nxdnpr[8]); + for (i = 0; i < 174; i++) + { + dibit = getDibit (opts, state); + + /* Store and de-interleave directly SACCH bits */ + facch2_raw[(2*i)] = ((*pr) & 1) ^ (1 & (dibit >> 1)); // bit 1 + facch2_raw[(2*i)+1] = (1 & dibit); // bit 0 + pr++; +#ifdef NXDN_DUMP + fprintf(stderr, "%c", dibit + 48); +#endif + } +#ifdef NXDN_DUMP + fprintf(stderr, " "); +#endif + + /* Extract the UDCH/FACCH2 content */ + Facch2CrcIsGood = NXDN_UDCH_decode(facch2_raw, facch2_decoded); + + state->NxdnFacch2RawPart.CrcIsGood = Facch2CrcIsGood; + memcpy(state->NxdnFacch2RawPart.Data, facch2_decoded, 184); + + StructureField = (facch2_decoded[0]<<1 | facch2_decoded[1]<<0) & 0x03; /* Compute the Structure Field (remove 2 first bits of the SR Information in the FACCH2) */ + RAN = (facch2_decoded[2]<<5 | facch2_decoded[3]<<4 | facch2_decoded[4]<<3 | facch2_decoded[5]<<2 | facch2_decoded[6]<<1 | facch2_decoded[7]<<0) & 0x3F; /* Compute the RAN (6 last bits of the SR Information in the FACCH2) */ + + fprintf(stderr, "RAN=%02d ", RAN); + if(Facch2CrcIsGood) fprintf(stderr, " (OK) - "); + else fprintf(stderr, "(CRC ERR) - "); + + /* This frame is an FACCH2 frame */ + fprintf(stderr, "FACCH2 - "); + + if(Facch2CrcIsGood) fprintf(stderr, "UDCH/FACCH2 CRC is good - "); + else fprintf(stderr, "UDCH/FACCH2 CRC is bad - "); + + if (opts->errorbars == 1) + { + fprintf(stderr, "\n"); + } +} /* End ProcessNXDNUdchData() */ + +void ProcessNXDNFrame(dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + /* Switch to the correct type of frame */ + switch(state->NxdnLich.RFChannelType) + { + /* RCCH */ + case 0: + { + ProcessNxdnRCCHFrame(opts, state, Inverted); + break; + } /* End case 0 */ + + /* RTCH */ + case 1: + { + ProcessNxdnRTCHFrame(opts, state, Inverted); + break; + } /* End case 1 */ + + /* RDCH */ + case 2: + { + ProcessNxdnRDCHFrame(opts, state, Inverted); + break; + } /* End case 2 */ + + /* RTCH_C (Composite Control Channel) */ + case 3: + { + ProcessNxdnRTCH_C_Frame(opts, state, Inverted); + break; + } /* End case 3 */ + + default: + { + fprintf(stderr, "- Unknown NXDN Frame type\n"); + + /* Unknown frame type, simply skip the entire frame + * 384 bits - 20 bits Frame Sync Word - 16 bits LICH = 348 bits = 174 dibit + * Preserve 24 bits (12 dibit) => 174 - 12 = 162 dibit */ + skipDibit(opts, state, ((384 - 20 - 16) / 2) - 12); + break; + } /* End default */ + } /* End switch(state->NxdnLich.RFChannelType) */ +} /* End NxdnDecodeFrame() */ + +void ProcessNxdnRCCHFrame(dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + uint8_t SkipEntireFrameFlag = 0; + + /* Remove compiler warning */ + // UNUSED_VARIABLE(Inverted); + + sprintf(state->fsubtype, " RCCH "); + + switch(state->NxdnLich.CompleteLich) + { + case 0b0011000: + { + fprintf(stderr, "- RCCH - CCCH Transmission using Short CAC\n"); + SkipEntireFrameFlag = 1; + break; + } + case 0b0001000: + { + fprintf(stderr, "- RCCH - UPCH or CCCH Transmission using Long CAC\n"); + SkipEntireFrameFlag = 1; + break; + } + case 0b0000001: + { + fprintf(stderr, "- RCCH - CAC Transmission\n"); + SkipEntireFrameFlag = 1; + break; + } + case 0b0000011: + { + fprintf(stderr, "- RCCH - CAC Transmission which has not to be received\n"); + SkipEntireFrameFlag = 1; + break; + } + case 0b0000101: + { + fprintf(stderr, "- RCCH - CAC Transmission which can be received arbitrary\n"); + SkipEntireFrameFlag = 1; + break; + } + case 0b0011001: + { + fprintf(stderr, "- RCCH - IDAS\n"); + SkipEntireFrameFlag = 1; + break; + } + default: + { + fprintf(stderr, "- RCCH - Unknown RCCH Frame\n"); + SkipEntireFrameFlag = 1; + break; + } /* End default */ + } /* switch(state->NxdnLich.CompleteLich) */ + + if(SkipEntireFrameFlag) + { + /* Unknown frame type or frame not implemented yet, simply skip the entire frame + * 384 bits - 20 bits Frame Sync Word - 16 bits LICH = 348 bits = 174 dibit + * Preserve 24 bits (12 dibit) => 174 - 12 = 162 dibit */ + skipDibit(opts, state, ((384 - 20 - 16) / 2) - 12); + } + +} /* End ProcessNxdnRCCHFrame() */ + +void ProcessNxdnRDCHFrame(dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + uint8_t SkipEntireFrameFlag = 0; + + /* Remove compiler warning */ + // UNUSED_VARIABLE(Inverted); + + switch(state->NxdnLich.CompleteLich) + { + /* Voice frame */ + case 0b1010110: /* Voice call transmission : Superframe SACCH, VCH Only */ + case 0b1010100: /* Voice call transmission : Superframe SACCH, first half VCH & last half FACCH1 */ + case 0b1010010: /* Voice call transmission : Superframe SACCH, first half FACCH1 & last half VCH */ + case 0b1010111: /* Voice call transmission : Superframe SACCH, VCH Only */ + case 0b1010101: /* Voice call transmission : Superframe SACCH, first half VCH & last half FACCH1 */ + case 0b1010011: /* Voice call transmission : Superframe SACCH, first half FACCH1 & last half VCH */ + { + fprintf(stderr, "- RDCH - "); + processNXDNVoice(opts, state); + break; + } + + case 0b1010000: /* Voice call transmission : Superframe SACCH, two FACCH1s */ + case 0b1010001: /* Voice call transmission : Superframe SACCH, two FACCH1s */ + { + fprintf(stderr, "- RDCH - "); + processNXDNData(opts, state); + break; + } + + case 0b1011000: /* Voice call transmission : Superframe SACCH, Idle State */ + case 0b1011001: /* Voice call transmission : Superframe SACCH, Idle State */ + { + fprintf(stderr, "- RDCH - "); + ProcessNXDNIdleData(opts, state, Inverted); + break; + } + + case 0b1000000: /* Voice call transmission : Non-superframe SACCH, two FACCH1s */ + case 0b1000001: /* Voice call transmission : Non-superframe SACCH, two FACCH1s */ + { + //fprintf(stderr, "- RDCH - Non-superframe SACCH with two FACCH1s\n"); + fprintf(stderr, "- RDCH - "); + ProcessNXDNFacch1Data(opts, state, Inverted); + break; + } + + case 0b1001110: /* UDCH Transmission */ + case 0b1001111: /* UDCH Transmission */ + { + fprintf(stderr, "- RDCH - UDCH Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + + case 0b1001000: /* FACCH2 Transmission */ + case 0b1001001: /* FACCH2 Transmission */ + { + fprintf(stderr, "- RDCH - FACCH2 Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + + default: + { + fprintf(stderr, "- RDCH - Unknown RDCH Frame\n"); + SkipEntireFrameFlag = 1; + break; + } /* End default */ + } /* End switch(state->NxdnLich.CompleteLich) */ + + if(SkipEntireFrameFlag) + { + /* Unknown frame type or frame not implemented yet, simply skip the entire frame + * 384 bits - 20 bits Frame Sync Word - 16 bits LICH = 348 bits = 174 dibit + * Preserve 8 bits (4 dibit) => 174 - 4 = 170 dibit */ + skipDibit(opts, state, ((384 - 20 - 16) / 2) - 4); + } +} /* End ProcessNxdnRDCHFrame() */ + +void ProcessNxdnRTCH_C_Frame(dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + uint8_t SkipEntireFrameFlag = 0; + + /* Remove compiler warning */ + // UNUSED_VARIABLE(Inverted); + + switch(state->NxdnLich.CompleteLich) + { + /* Voice frame */ + case 0b1110111: /* Voice call transmission : Superframe SACCH, VCH Only */ + case 0b1110101: /* Voice call transmission : Superframe SACCH, first half VCH & last half FACCH1 */ + case 0b1110011: /* Voice call transmission : Superframe SACCH, first half FACCH1 & last half VCH */ + { + fprintf(stderr, "- RTCH_C - "); + processNXDNVoice(opts, state); + break; + } + + case 0b1110001: /* Voice call transmission : Superframe SACCH, two FACCH1s */ + { + fprintf(stderr, "- RTCH_C - "); + processNXDNData(opts, state); + break; + } + + case 0b1111001: /* Voice call transmission : Superframe SACCH, Idle State */ + { + fprintf(stderr, "- RTCH_C - "); + ProcessNXDNIdleData(opts, state, Inverted); + break; + } + + case 0b1100001: /* Voice call transmission : Non-superframe SACCH, two FACCH1s */ + { + //fprintf(stderr, "- RTCH_C - Non-superframe SACCH with two FACCH1s\n"); + fprintf(stderr, "- RTCH_C - "); + ProcessNXDNFacch1Data(opts, state, Inverted); + break; + } + + case 0b1101111: /* UDCH Transmission */ + { + fprintf(stderr, "- RTCH_C - UDCH Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + + case 0b1101001: /* FACCH2 Transmission */ + { + fprintf(stderr, "- RTCH_C - FACCH2 Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + + default: + { + fprintf(stderr, "- RTCH_C - Unknown RTCH_C Frame\n"); + SkipEntireFrameFlag = 1; + break; + } /* End default */ + } /* End switch(state->NxdnLich.CompleteLich) */ + + if(SkipEntireFrameFlag) + { + /* Unknown frame type or frame not implemented yet, simply skip the entire frame + * 384 bits - 20 bits Frame Sync Word - 16 bits LICH = 348 bits = 174 dibit + * Preserve 8 bits (4 dibit) => 174 - 4 = 170 dibit */ + skipDibit(opts, state, ((384 - 20 - 16) / 2) - 4); + } +} + + + +/* + * @brief : This function decodes an NXDN RTCH frame + * + * @param opts : Options + * + * @param state : State + * + * @param Inverted : 1 = Inverted frame ; 0 = Normal frame + * + * @return None + * + */ +void ProcessNxdnRTCHFrame(dsd_opts * opts, dsd_state * state, uint8_t Inverted) +{ + uint8_t SkipEntireFrameFlag = 0; + + /* Remove compiler warning */ + // UNUSED_VARIABLE(Inverted); + + switch(state->NxdnLich.CompleteLich) + { + /* Voice frame */ + case 0b0110110: /* Voice call transmission : Superframe SACCH, VCH Only */ + case 0b0110100: /* Voice call transmission : Superframe SACCH, first half VCH & last half FACCH1 */ + case 0b0110010: /* Voice call transmission : Superframe SACCH, first half FACCH1 & last half VCH */ + case 0b0110111: /* Voice call transmission : Superframe SACCH, VCH Only */ + case 0b0110101: /* Voice call transmission : Superframe SACCH, first half VCH & last half FACCH1 */ + case 0b0110011: /* Voice call transmission : Superframe SACCH, first half FACCH1 & last half VCH */ + { + fprintf(stderr, "- RTCH - "); + processNXDNVoice(opts, state); + break; + } + + case 0b0110000: /* Voice call transmission : Superframe SACCH, two FACCH1s */ + case 0b0110001: /* Voice call transmission : Superframe SACCH, two FACCH1s */ + { + fprintf(stderr, "- RTCH - "); + processNXDNData(opts, state); + break; + } + + case 0b0111000: /* Voice call transmission : Superframe SACCH, Idle State */ + case 0b0111001: /* Voice call transmission : Superframe SACCH, Idle State */ + { + fprintf(stderr, "- RTCH - "); + ProcessNXDNIdleData(opts, state, Inverted); + break; + } + + case 0b0100000: /* Voice call transmission : Non-superframe SACCH, two FACCH1s */ + case 0b0100001: /* Voice call transmission : Non-superframe SACCH, two FACCH1s */ + { + //fprintf(stderr, "- RTCH - Non-superframe SACCH with two FACCH1s\n"); + fprintf(stderr, "- RDCH - "); + ProcessNXDNFacch1Data(opts, state, Inverted); + break; + } + + case 0b0101110: /* UDCH Transmission */ + case 0b0101111: /* UDCH Transmission */ + { + fprintf(stderr, "- RTCH - UDCH Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + + case 0b0101000: /* FACCH2 Transmission */ + case 0b0101001: /* FACCH2 Transmission */ + { + fprintf(stderr, "- RTCH - FACCH2 Transmission - "); + ProcessNXDNUdchData(opts, state, Inverted); + break; + } + default: + { + fprintf(stderr, "- RTCH - Unknown RTCH Frame\n"); + SkipEntireFrameFlag = 1; + break; + } /* End default */ + } /* End switch(state->NxdnLich.CompleteLich) */ + + if(SkipEntireFrameFlag) + { + /* Unknown frame type or frame not implemented yet, simply skip the entire frame + * 384 bits - 20 bits Frame Sync Word - 16 bits LICH = 348 bits = 174 dibit + * Preserve 8 bits (4 dibit) => 174 - 4 = 170 dibit */ + skipDibit(opts, state, ((384 - 20 - 16) / 2) - 4); + } +} /* End ProcessNxdnRTCHFrame() */ + diff --git a/src/nxdn_voice.c b/src/nxdn_voice.c index 9aa6fb2..ffc454e 100644 --- a/src/nxdn_voice.c +++ b/src/nxdn_voice.c @@ -1,9 +1,6 @@ #include "dsd.h" #include "nxdn_const.h" -//don't know why this doesn't work right in LEH, need to figure that out for him -//works just fien when ripped from his and into mine -//must be some random thing, I'll look at his when I have a chance void processNXDNVoice (dsd_opts * opts, dsd_state * state) { int i, j, dibit; @@ -143,11 +140,12 @@ void processNXDNVoice (dsd_opts * opts, dsd_state * state) y++; z++; } - if (opts->payload == 1 && opts->dmr_stereo == 1) + if (opts->payload == 1) { - fprintf(stderr, "\n"); + //fprintf(stderr, "\n"); } processMbeFrame (opts, state, NULL, ambe_fr, NULL); + state->p25vc++; //increment counter by one here? } /* End for (j = 0; j < 4; j++) */ @@ -162,5 +160,6 @@ void processNXDNVoice (dsd_opts * opts, dsd_state * state) { /* Reset all CRCs of the SACCH */ for(i = 0; i < 4; i++) state->NxdnSacchRawPart[i].CrcIsGood = 0; + } } /* End processNXDNVoice() */ diff --git a/src/p25_p2.c b/src/p25_p2.c new file mode 100644 index 0000000..46dcf23 --- /dev/null +++ b/src/p25_p2.c @@ -0,0 +1,30 @@ +/*------------------------------------------------------------------------------- + * p25_p2.c + * Phase 2 TDMA Voice handling + * + * LWVMOBILE + * 2022-08 DSD-FME Florida Man Edition + *-----------------------------------------------------------------------------*/ + /* + * Copyright (C) 2010 DSD Author + * GPG Key ID: 0x3F1D7FD0 (74EF 430D F7F2 0A48 FCE6 F630 FAA2 635D 3F1D 7FD0) + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +#include "dsd.h" + +void processP2(dsd_opts * opts, dsd_state * state) +{ + //Do Something + fprintf (stderr, " Future Development\n"); //obligatory +} diff --git a/src/p25p1_hdu.c b/src/p25p1_hdu.c index 1bdd2c7..36d0b4f 100644 --- a/src/p25p1_hdu.c +++ b/src/p25p1_hdu.c @@ -467,12 +467,24 @@ processHDU(dsd_opts* opts, dsd_state* state) mihex1 = (unsigned long long int)ConvertBitIntoBytes(&mi[0], 32); mihex2 = (unsigned long long int)ConvertBitIntoBytes(&mi[32], 32); mihex3 = (unsigned long long int)ConvertBitIntoBytes(&mi[64], 8); + //only use 64 MSB, trailing 8 bits aren't used, so no mihex3 + state->payload_miP = (mihex1 << 32) | (mihex2); } - if (1 == 1) //print on payload == 1 + //set vc counter to 0 + state->p25vc = 0; + + if (state->payload_algid != 0x80) //print on payload == 1 { fprintf (stderr, "%s", KYEL); - fprintf (stderr, " HDU ALG ID: 0x%02X KEY ID: 0x%02X MI: 0x%08llX%08llX%02llX MFID: 0x%02X \n", algidhex, kidhex, mihex1, mihex2, mihex3, state->payload_mfid); + fprintf (stderr, " HDU ALG ID: 0x%02X KEY ID: 0x%02X MI: 0x%08llX%08llX%02llX MFID: 0x%02X", algidhex, kidhex, mihex1, mihex2, mihex3, state->payload_mfid); + fprintf (stderr, "%s", KNRM); + } + + if (state->payload_algid != 0x80) //print on payload == 1 + { + fprintf (stderr, "%s", KRED); + fprintf (stderr, " ENC \n"); fprintf (stderr, "%s", KNRM); } diff --git a/src/p25p1_ldu1.c b/src/p25p1_ldu1.c index 2c6fe5f..f309fc6 100644 --- a/src/p25p1_ldu1.c +++ b/src/p25p1_ldu1.c @@ -65,7 +65,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '1'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 2 read_and_correct_hex_word (opts, state, &(hex_data[11][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[10][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -78,7 +77,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '2'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 3 read_and_correct_hex_word (opts, state, &(hex_data[ 7][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[ 6][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -91,7 +89,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '3'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 4 read_and_correct_hex_word (opts, state, &(hex_data[ 3][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[ 2][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -104,7 +101,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '4'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 5 read_and_correct_hex_word (opts, state, &(hex_parity[11][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_parity[10][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -117,7 +113,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '5'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 6 read_and_correct_hex_word (opts, state, &(hex_parity[ 7][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_parity[ 6][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -130,7 +125,6 @@ processLDU1 (dsd_opts* opts, dsd_state* state) state->debug_prefix_2 = '6'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 7 read_and_correct_hex_word (opts, state, &(hex_parity[ 3][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_parity[ 2][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -174,6 +168,7 @@ processLDU1 (dsd_opts* opts, dsd_state* state) { lsd2[i] = lsd[i] + '0'; } + //skip two octets since LSD is part of the encryption portion // TODO: error correction of the LSD bytes... // TODO: do something useful with the LSD bytes... diff --git a/src/p25p1_ldu2.c b/src/p25p1_ldu2.c index 3611cb3..5ff8e3d 100644 --- a/src/p25p1_ldu2.c +++ b/src/p25p1_ldu2.c @@ -49,6 +49,8 @@ processLDU2 (dsd_opts * opts, dsd_state * state) // so we start counter at 36-14-1 = 21 status_count = 21; + state->p25vc = 9; + if (opts->errorbars == 1) { //fprintf (stderr, "e:"); @@ -65,7 +67,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '1'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 2 read_and_correct_hex_word (opts, state, &(hex_data[15][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[14][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -78,7 +79,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '2'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 3 read_and_correct_hex_word (opts, state, &(hex_data[11][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[10][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -91,7 +91,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '3'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 4 read_and_correct_hex_word (opts, state, &(hex_data[ 7][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[ 6][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -104,7 +103,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '4'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 5 read_and_correct_hex_word (opts, state, &(hex_data[ 3][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_data[ 2][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -117,7 +115,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '5'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 6 read_and_correct_hex_word (opts, state, &(hex_parity[ 7][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_parity[ 6][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -130,7 +127,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '6'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 7 read_and_correct_hex_word (opts, state, &(hex_parity[ 3][0]), &status_count, analog_signal_array, &analog_signal_index); read_and_correct_hex_word (opts, state, &(hex_parity[ 2][0]), &status_count, analog_signal_array, &analog_signal_index); @@ -143,7 +139,6 @@ processLDU2 (dsd_opts * opts, dsd_state * state) state->debug_prefix_2 = '7'; #endif process_IMBE (opts, state, &status_count); - // Read data after IMBE 8: LSD (low speed data) { char lsd[8]; @@ -174,6 +169,7 @@ processLDU2 (dsd_opts * opts, dsd_state * state) { lsd2[i] = lsd[i] + '0'; } + //skip two octets since LSD is part of the encryption portion // TODO: error correction of the LSD bytes... // TODO: do something useful with the LSD bytes... @@ -185,6 +181,9 @@ processLDU2 (dsd_opts * opts, dsd_state * state) #endif process_IMBE (opts, state, &status_count); + //set vc counter to 0 + state->p25vc = 0; + if (opts->errorbars == 1) { fprintf (stderr, "\n"); @@ -373,48 +372,23 @@ processLDU2 (dsd_opts * opts, dsd_state * state) mihex1 = (unsigned long long int)ConvertBitIntoBytes(&mi[0], 32); mihex2 = (unsigned long long int)ConvertBitIntoBytes(&mi[32], 32); mihex3 = (unsigned long long int)ConvertBitIntoBytes(&mi[64], 8); - //need to check this for accuracy, may be incorrect, MI may also be incorrect, I have 72, but LFSR shows 64 - state->payload_miP = (mihex1 << 40) | (mihex2 << 8) | mihex3; + //only use 64 MSB, trailing 8 bits aren't used, so no mihex3 + state->payload_miP = (mihex1 << 32) | (mihex2); } - if (1 == 1) //print on payload == 1 + if (state->payload_algid != 0x80) //print on payload == 1 { fprintf (stderr, "%s", KYEL); - fprintf (stderr, " LDU2 ALG ID: 0x%02X KEY ID: 0x%02X MI: 0x%08llX%08llX%02llX\n", algidhex, kidhex, mihex1, mihex2, mihex3); + fprintf (stderr, " LDU2 ALG ID: 0x%02X KEY ID: 0x%02X MI: 0x%08llX%08llX%02llX", algidhex, kidhex, mihex1, mihex2, mihex3); fprintf (stderr, "%s", KNRM); } - if (opts->payload == 1) - { - //LFSRP(state); - } - //why am I doing this part below again? - if (opts->payload == 0) - { - algidhex = strtol (algid, NULL, 2); - kidhex = strtol (kid, NULL, 2); - } -} -//needs some work to make mi value fit in there since its a 72 bit value, need to check this over -//LFSR code courtesy of https://github.com/mattames/LFSR/ -int LFSRP(dsd_state * state) -{ - uint64_t lfsr = 0; - lfsr = state->payload_miP; - uint8_t cnt = 0; - - for(cnt=0;cnt<32;cnt++) + if (state->payload_algid != 0x80) //print on payload == 1 { - // Polynomial is C(x) = x^64 + x^62 + x^46 + x^38 + x^27 + x^15 + 1 - uint64_t bit = ((lfsr >> 63) ^ (lfsr >> 61) ^ (lfsr >> 45) ^ (lfsr >> 37) ^ (lfsr >> 26) ^ (lfsr >> 14)) & 0x1; - lfsr = (lfsr << 1) | (bit); + fprintf (stderr, "%s", KRED); + fprintf (stderr, " ENC \n"); + fprintf (stderr, "%s", KNRM); } - fprintf (stderr, "%s", KYEL); - fprintf (stderr, " LDU2 ALG ID: 0x%02X KEY ID: 0x%02X", state->payload_algid, state->payload_keyid); - fprintf(stderr, " Next MI: 0x%016llX \n", lfsr); - fprintf (stderr, "%s", KNRM); - state->payload_miP = lfsr; - } diff --git a/src/rtl_sdr_fm.cpp b/src/rtl_sdr_fm.cpp index 75fb919..f024eea 100644 --- a/src/rtl_sdr_fm.cpp +++ b/src/rtl_sdr_fm.cpp @@ -954,8 +954,10 @@ static void *socket_thread_fn(void *arg) { new_freq = chars_to_int(buffer); dongle.freq = new_freq; // //opts->rtlsdr_center_freq = new_freq; //or dongle.freq, this should update the freq displayed in ncurses terminal hopefully and not do anything naughty + optimal_settings(new_freq, demod.rate_in); rtlsdr_set_center_freq(dongle.dev, dongle.freq); + //verbose_set_frequency (dongle.dev, new_freq); //fprintf (stderr, "Tuning to: %d [Hz] (central freq: %d [Hz])\n", new_freq, new_freq + freq_offset); fprintf (stderr, "Tuning to: %d [Hz] \n", new_freq); } @@ -1042,8 +1044,8 @@ static void *socket_thread_fn(void *arg) { void rtlsdr_sighandler() { - fprintf (stderr, "Signal caught, exiting!\n"); - fprintf (stderr, "Press CTRL + C again to close. Thanks. \n"); //Kindly remind user to double tap CTRL + C + //fprintf (stderr, "Signal caught, exiting!\n"); + //fprintf (stderr, "Press CTRL + C again to close. Thanks. \n"); //Kindly remind user to double tap CTRL + C rtlsdr_cancel_async(dongle.dev); //cleanup_rtlsdr_stream(); //thank the wraith for this one...if it works...didn't work @@ -1070,6 +1072,7 @@ void open_rtlsdr_stream(dsd_opts *opts) if (opts->rtlsdr_ppm_error > 0 || opts->rtlsdr_ppm_error < 0) { //this way will adjust PPM based on negative values as well dongle.ppm_error = opts->rtlsdr_ppm_error; + fprintf (stderr, "Setting RTL PPM Error Set to %d\n", opts->rtlsdr_ppm_error); } if (opts->audio_in_type == 3) { @@ -1152,6 +1155,8 @@ void cleanup_rtlsdr_stream() safe_cond_signal(&output.ready, &output.ready_m); safe_cond_signal(&controller.hop, &controller.hop_m); pthread_join(controller.thread, NULL); + //add socket thread + //pthread_join(socket_freq, NULL); //dongle_cleanup(&dongle); demod_cleanup(&demod); @@ -1162,16 +1167,29 @@ void cleanup_rtlsdr_stream() } -void get_rtlsdr_sample(int16_t *sample) +//void get_rtlsdr_sample(int16_t *sample) +void get_rtlsdr_sample(int16_t *sample, dsd_opts * opts, dsd_state * state) { if (output.queue.empty()) { + if (opts->use_ncurses_terminal == 1) + { + //ncursesPrinter(opts, state); + //printw ("\n\n\n HELP I'M LOCKED!\n"); + } safe_cond_wait(&output.ready, &output.ready_m); + //goto END; } + pthread_rwlock_wrlock(&output.rw); //*sample = output.queue.front(); *sample = output.queue.front() * volume_multiplier; //try multiplying by numbers here for 'gain' output.queue.pop(); pthread_rwlock_unlock(&output.rw); + // END: + // if (1 == 2) + // { + // fprintf (stderr, "This is a dumb thing to fix"); + // } }