From 1a3568fca7547341a1f4a2efbcb0d1b5f9c841c5 Mon Sep 17 00:00:00 2001 From: serifpersia Date: Tue, 24 Jun 2025 21:31:23 +0200 Subject: [PATCH] feat: working playback alsa kernel driver alsa kernel driver: playback works with glitches yet to be solved --- .gitignore | 1 - README.md | 10 + latest_alsa_kernel_driver/us144mk2.ko | Bin 0 -> 402280 bytes src & scripts/tascam_fifo_streamer.c | 92 ++-- src & scripts/tascam_streamer | Bin 0 -> 22192 bytes src & scripts/us144mk2.c | 741 ++++++++++++++++++++++++++ 6 files changed, 792 insertions(+), 52 deletions(-) create mode 100644 latest_alsa_kernel_driver/us144mk2.ko create mode 100644 src & scripts/tascam_streamer create mode 100644 src & scripts/us144mk2.c diff --git a/.gitignore b/.gitignore index c6127b3..2dc55b0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ # Object files *.o -*.ko *.obj *.elf diff --git a/README.md b/README.md index 53d453c..9291f79 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,16 @@ Current feat: - Vendor Specific Config & Initialization, - Working Playback with glitches due to missing feedback clock resync(maybe) +- migrated working playback(with some glitches still) to kernel ALSA driver + - To compile and run it follow these steps: + - Blacklist us122l driver in order to be able to use this custom driver + - Get your linux headers via your package manager + - cd to driver directory & run sudo insmod us144mk2.ko + - Under sound setting you should see TASCAM US144MKII device + - the device should produce audio playback with glitches + - The release alsa custom driver might not work on newer kernel versions currently its been written on + debian 12 6.1 kernel. You might need to compile kernel with `make` and sudo insmod it. + To run need pulseaudio and libusb, to compile you need dev packages like gcc to compile the src c code. debian: diff --git a/latest_alsa_kernel_driver/us144mk2.ko b/latest_alsa_kernel_driver/us144mk2.ko new file mode 100644 index 0000000000000000000000000000000000000000..437b32414351fbc77a4117fdf1ac6dd85bb757a4 GIT binary patch literal 402280 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%0Do!YKzevTI}gnVziI2MvheL~wZGc% z(pE36;HT|8u?IYHGUXW#?>tdH1-^fbd@;OCbNL4NvGMXf@HIAGoq%Vw{(Bid*{-AB zgKw&@{4e2qY~GKUUiW*w1X=q`0RJwA;?l$KSbgP#e{JovEWBJ@<*5x%XV+Ugz>{rI ze1G^uYj0!WJG(1>HoTqnua)rc8Y_Mq{L*UqA$W}j@^kQpv*p*}2S&=Dz`x5Xe+yq4 zRUX~?hu6zJTOTBYCmgQ$tniZ+3Z(OAWwg%`4ZcMZPB#*N4DWY&J(z^~bPW3-IgkJrm+ z>t9LXNf#&Fw_-F9bMda_`pUk6Y*8N`2k=kiHDZEfEd1m-U8z&3G?~YY`ApAihd2@IXTlaQ` zuUxJ80q|mWUN#Ya)Y{uT_-UmH*aqKi*NgVU@66HzPQv~Dfj_|)LUOTlm1c)JF^y_4d1z^~doQahXO_v2|{^LTT3kRAVEc=t_u{9$;7`0}&x?TzKX z(Cs+y!*|)d_5vO}T6wbDc;?6dy|vrfa4(1D@Kp8n5#+<+Q>M$O!UyD%FM)qCNFE0Fd1^mAtF2p3!FN?x zo}b~%$I0)(r`UQdvK?2<&tc)G7US$ZA|ZUEwV(8KEC0OkuWa2=8h*Wkj;98EMMZft z_*y+rY4ZQbGZ{w%t@BHZ6+QX5_%ys>=#YYyMu zM&23j?|&Nr_xHbzg`W*np5^dG*51B>U$S}g96YF_@?3?N36ej6Z`vS#2~XWt9*{@3 zUT%vMYC8_RNF;emcn|CE<>9%lpLT`&I5r6WTV3TJ2cK%=)hzf+%fAdB)Kz&l!TT;4f@GO#q*3{Wlr>)Bxp4 z1FvrDvCQ!8wp{=|rK<9jg}1Ti(+VEkOYz;{9zO|wqn6_5!~Ok!tKfk)o@|4A`#A^? zEvo!y;Qsl|EAamD6n`H+VVeAJc+Z;h$oX{Z^*F)iO@Cjr`y?C3;v>GTwe$4wnmLrW zB;4OWRuw+d)}@W$#}+A%Ul;V_85I7X&woP^->0yA0=!yt`C52+>qk4`{{F_}@ZDLI z=Q_N2CHW)x!v*qJ@VdeBh_*iU=jG#YJh+d;Y2b5;DNj+jxBrUp6>}Be7M>|c-UEKf z=Eos$|2)M6xWA8L4t#~p3uoZ|e#I+rZzuQQ{=IF_;eMVK+s*^LJa^gpHU-?j2Ot|f z%*wMc+&>>w58k7t%B>YVrmfSu!B=Ke{9t%*+dc%ZGFI_t;5lvlxdoq|N%1e?{`s#6 z1$DodPc=JVO$M*ERdJc&{{5?;fBpP_f1c;LjaOyiA7d%5CcK~Zm*()4Hm`Sv54Z7Z z0Q_K(@(07CO_9%om$LKOP`K}R8+^w` z@N%AI<5(K_sIrRB314j2&C0-g)l+;8xPOka89b}?w@z@MAN#}ob7a%u{`to*;1m1m zcs9VVT6_Kq?w@Zu3SVDcc`m{u)t6s~?<*;P1o!-};N`5GBiTIT_0rg`+r)<-pP>9{ z;2o`B=YrqruK40`FVD(wFVD7cFV9}^GIpLg41Ut)!HMvUt93l{;64wA!k4X8{8qS+ z=a=Aq{rWk4_&nwL2>0upv5M$^FMmJIK2ieC<|Y3s4Q@I^N79EW>3N3`+S%O{3i|A`NOZ{uVdc)Zv;o}6&+ z7scU8=PSN4d{Y;B19%JT*KOf{R#bdXc*XScVQ{anN$|JUZx_I0*f_ifK5B;YUx4R| zCBF{$a(D#aX6^qKe1i46h_=4)dhv3I2XB~4`%Mj>86?jEA8W5qm4>&m&M@~*2AL_@8vTM{=B{NEQTMMDPISVG)le;?(OOb+{^PEeBcJ< zxeBjaMg9Q(B8B`VJhSyT|6x8ahjs%LpR%}a-KQ_mb~gC5cJjjT!@=_M@PF+5p$_~~ zLdCa&C+;Kf4)^al9SZk;G!cHt)??e@5qm5DE%=Ph@~7}iQRQ#ozOIf^Lic;QHMRbe z2;R)r&*|ZDt^MSI`*>Rk-o&=+!5>7?add`%$RQs9Uv2CBVE8Iq2QGqFsGvM+;hyIJ zyy-y2pMrb*ukgm!U!KA{&sCn+@Zz>UjBM*5FaPrs6`u>9cd5K2JdyQ_s_?}&k2Hc` zsiQpY;M3d4{d>9mc)Hm9I|lLoeUTyXh*po&;ER(f{~Y-0IPz8SHZ~uY&aYibm{d@WM&8zMB@LF@^ zY2Ycw$#cSM50V#yzg{M<48NaPUKj5BZ3Xx9nr?8vK0F>?rGxU%h9|Xk+H!bL8;8T- z{(Xac;f<|-9f#+${{B6@`A8klE%-R=Cr{z=vMT-!yl!`S6g$uMddzC)DGA|4Y`^K? zG41t^-0*+t_gnjX4S#R* zLX^rnE-wdv-7pc{-=AC)KBB)K-w{5vfxJJw!bEup+~03M3qCZ3;+Mny`~5bS_ z*YF#;TpJ(G|61e}KX(ssJag?V3e7&t3Ys1$RRD4T#oAL5) z@BwS(L*TJv$V1?F*30L?hc}b2f+rd(-wuCZ*Ut~ZSG7?5S@`6Nw4^a@DG#a zuizD|A4Rh9*z4t&*osd8|H{sf(!n2DJIMpTSx!k2VS?F z@`u86+q|$Ho@j>R55xU))92xZ`YHYfe8(pFQ@CF*eFuMM{USyUJ-+}rZFZj34nEfA-~RAkcAP`uCzI(zL+45rWbLsrWFVI-t7=FdZt5)y~)~iXJrw?7we~w2o?woA z0(?mZ`BZoYYoD{>(QRB^1fSnXc{ac+_LOghceDB8OL*;8ivJp3+ScJm;Lof*oPeiI zqC98ep@H%r;14#+@4)BglRtu2vGvs-@R}C?H~f>epLg(S1C`%@7t!0>RV)9fwROMy zW2@iT@J@E#ln|b=nI4}U9@plbwD1MCzRe78Z~ZqXyx=tDF97e|MP44B(fVms__wz1 zuMNLx_1h30GDG>B!w*D~w}pRi^I#|Vkh+TR0gp35-Vc5{mwX8P2b(WO!FShJ{CIdQ zTmMgi_pteB7W|gYBMacw?EG;le5sA|tKji7>3BB4r;L(sh3{P<{}Mi;wES!M1zU$7 zf!EEW_!IE0R{m$}2t@qy|c3mYJyo$BYIPh*ZJ|u!ST&lb&;EOuT)4^-ndNK?A{2ImQfpv{3Se%%{y=5Vb8yE8AF~1{(UKVCU{V6c@B69Z~yQRYqu5Q3#}Zg!%q)V{(A7Pv*fMe z2W)=q4j)xf@jkzK`Bb)b=>)|4@7>ISN3?oh0Z(DqgPy^EUZVZxwd*&&U;p0AQt(~2 z?rjghGg*21(Cs?gNO)T-=PB@uE0kv;JVIjm8u+Xt@*VI;dF6-Tduqzhz=uVXUxBBx zc6<+B-PQ^II~87TpVleQN5n_6b{NYZ=ke)n9!w4&QCWGiz#}x07lcnwDlZ4$v_)PE zp1|s*Ioz-3bcR1}qC5lO<>$zk!&}FaZ-tMtcK9WHOIF2y4IgOhq9gF>*%f~R9>1;p z9DIIZ`3rbi>vz#@p7(n3&-)~S`}@W-!u@?&`QZNj;icgT#^`ve!{3^BfS0uPKO6qi z%4a$J>jKKZ8GhQv+uiVV)_;$|d)jrROYmQ9-nj|So?iQX3Xfs^=ndSzwW1n!@M>j-aV^Ugr{X=_)*;kgni|5*5@ zzVexHKmKL#Ue+Eq!Tobdd*J1*9>0bA`)@D7i`jhV=W|{!LsRNFpCG=ejY|pa*5eP9 zQ+!%@Uc2s{3-0evC=U0}FE@Y}v-!+_FU9w}ZKn3y6Y+=be0&((Kes*|e$mF~C2;TW zU%|WEczYCntFVse0zBR(`3?B$GV&+z%T48P;6tLyquP4G%i)||w@D0NZ|Aca;KOX( z$P2HvQTa>3lUqBe29F^j3Sc$1vUa|*uJ=D`c_-v=rFCwLJ%U%m!EY}eUdz*B`PkADx7 z*SmjzNNk(8-KY9_DEzCD%99QLM|ybyc()qzvheP~-(}E!LOKKh8It&{oa8;s3rds-Yrxfv88VPIG@;g zK|FY)(uzwBzq>)66Yjs0QVc%5zTzvv$9I?4hrh6Sst^2(jkhD={(0M}aR2@X|9rnc z-*)Y^-*t%3mqGp|{M2yyH}oj-^YBDg?$_X}N-6#!{I-oJf5T_ZS9}Cpm-+G6t|yNR zUvJ}2DtPjgiq8)Jr?WGZ$y>qweI4E4ajahqh7Y#$#|iL3 zw!WDQ|JK&AE8*{E>3Fuldssd0hcC1C{3Cpjt*d{7dprLVe#*`VKfssSI3KIEj?3$@ z$~tYQfN!&TrwBZTwX2Hol{J*7KHPuTsV)3Ndd2sGS6U+X_uKk$&a-|u1@ZnnP>bLn z$19J2kG|*e--r4V@dK>gABFqxJza!nvGMjM{8D7?_bJ?e@98bvfA1-pt+V_%^CVQB zB=D@(Uoyc*=2UzEc%Ag}a`28F_a&rzhd%IC*Zb&a+Y z!1r2zPY1tKTJeS8(W1&L!b9`PtHTe?k=KQ136nR0`|pNyfQQ=n-xvPZ!jmlx_}|}r z_;#BwR>MQ>ICsFCPXAw;fWz=@W8~-I)9gCob@*W$e;&i{6jGiy@Y^o`X$jiYG+xS@<{+F#cTEZ8XQ=V?{es-QR1U}y8!4PQ(9QCwwx06(s%Z6|82)^s z;xobvmz3v+XS4CYEc}J76KcUPhA2-9_}qB%uJD|8{y7+4I*Q^a!0W7%&xOw_D-VT_ z86w{XKafIx5Z=nx4`<+q6&~;l{Np0s@c^E5t^99zMVl8Q+B(AP%fAOIK76aqFKOY? zY&$o+v-Rte@bqzYJk{a1t^YQI$FcLc&hXY&&V%4xmnr{vxc{E`9QYb*&nw~eZJgN( zzhM3S0KAITm%nc5<(b;ni&qfu-|KQ8?!Qa>628R7jR-aldH(k{zQuzdvGJ`S-1C%% zCvU8Bs{y}h?Y|j(T_weLhEKM2_(1sfQi>l3_j;KPUpr6nE8zb7qr2eg#w*@G7w+Zb z-y?bv@fi{;{wDlitKX;afUb&v3m>0L9?j~<_xr%ct0eGUmM0UugvA$t`+BS#yx}_S zw=R5NX?a`tMC)ID;Bl)eehhqWhLnmts^S_3cO89`F(h$ zt@6L=vE|7->(fPY(8o)>;ER9+Y!VB=;<_)p~(Umo5ssk|=SzXz!!+<#|n zC_JOBe-^-FTluVoe_{P)ANIo!oUIR= z!Tt9vI>E;c(0=>FKUw*Yf&2P-I^6rqI(VS9hp*wsLbcy-;l&oq&%^zDgs;FyY*hSj z@Rz~zr|{4O^0)Bg%jHpRobdAZ_xU7(`{xGJ!@r)QJcZ!?d%^zu1D?PC3dL7Ny#F3< zeR$N!if;+`-^1+$A8P%y54@qR_eR3|RZ{*b@Thjayb!*fnd=Fhl8Ec}D5SFgfb1}o1a_>PA1SMbDj zPdDv27hy2kzriEBLdaI==33ug9VA zTefbW4F4*(@+^j*w(I2m?E1Ht!>Z|u9}Qp9UOo-JZ?=3d{DJj{lkl?U=i$HCP@W&* z#J|zp65K=e;?!;+{gKc@IAJ^{Tu$Wf}U3#o8P=V{rk#N z!r$bza)a--^RlAwd8rg%2|l)ryaBw7&&%+T7>ZvA_i<(o+~@D;d^tM}kOezqK-~FIN%8mKYiwQp9KJZ0 z;y=Pu<&!5Es9Qh&F}1Xv7Vh(7F1SD6;_%pUm8UZNZc}*!__Sg2w(x{DPTqv?FQoXV z@HDICZ{X+0$)gO?tv}!4)^0PvFV#_8J9t|=Z|x2D_uG$vd%vCx|JBaR;tu}r@$^ow z?No5j0-1&Jf-Dah|k1 zh2aAWD6T%ds+c?w?Z*u>R`L ztA@3o1n}3k4o?P8XY0>2@XJ}W-%Rk?<~iXn?Rr`jxVMug@cy=b?g;nK)Afh@{1Oa* z-B8Cl6CSu+z6^eHm3%+^?@;+Ecr&}s{4+evUe~w>FSky4Ucj%$lSdt{Td%K7c6}@( zJeyr-$PdpEq{o+q4=gNi2j93*-W%?}Uo!&k-v>Gw?!Pav4qhgz@^6RVuR!Q3{5P0MzI{ta^ zD%M|C!7p@G{C2q4?;*I??^(Fl?^Sq|p346a?(Opx+}o%BzL}SQBO5mo*!iD(_Y}&X z4qm0WJP&+_m0KzJg&vBp0k5`2-VE;L+!^lWJP^Lr+UGcUP3zaQ;r=^hE8t6Q+}Hxo zol(cRAHK@U=QO-fpyIE<{dwJo`}2AU_kI__>c{KloUKFR!8hjDe$&8x9LNRtai9d; z$APNw*PWEV34D*OpE|<*`SyqV^9_a{oT&UW;a>jB;HjG`J`BFV)~oyAK{n5R2Y+Ja zc^RI=#^<|me_qew{=7cH5866Aj;*u29y8l@w$$*7k@dWC!hOHR;lAH0@T4~HG=h71 zwui^7to`&9I0Y~A&E z|9uJ16QQxZ7~->cl$U`o$|SD{&)8O89p2E&tuDNOZ^bu(zpg9q0&lfd-V5HWrF;N9 zzpayp!RusK{1|vHTjzwpuiAV%4PGaa^2~uxw)u1se7c?2tbkXjsyy4^<0i|$f>*Wk z&HeBU3J>@O-qhkx!uMOhy9G~b>&biYG}bPkz=Qf|$A7`6#Fqa9KW^*W_wf0Z6d%#v zpX=>2(60AJho^|D__**|J>`kv>nuJcJaDSwGr)UJlNW$zs3k83Z))q_GVnHW6kid( zva7r?eC$ejOL##WPujsJw^w`@_@UYIUhqF`9v=XYFhudg;3aJw9s}=Y>$4E}30tR4 zgTL6U{Bz(RtbZ+n*SGOxIee6zzpsIJwd*{a;4e35zdPX5I>-;f1MPg|3_Q23Z?3@o zd&%#?{W|jt_!S#(Kf&v@)A7Wfpj&VM9qMa41>Eyzh5L1@vT*->+1hZwe%li6udfZF z57Y6Chx>JdmGEjA6~7hUIk)@(+^=t(hWqQ+SKv)sD9?Sk*Vo_htxXgkDMYtk&K;*~ zJ0ZN(a(RAuYr76s4t{Bi;_JXeBgk9BpV;`*6CPsg{1Naxi3t?+x)%}K75q+yANJHNPY_LzxQ(s z{=N01r*MD&##{LKD#{;al5V|Tn%MZ02>wF`#btoUvvDjR{9-}Hmw~5GEw2f0WAjUM zc+?=pcY*u+jRwIBSbG}}zm`vV=DjFN z`|usME`15FvQ&8@*m}_G%YWZ19=ysIicbT-y-uDBe#6$`CE!0=eN~13Wb@+~cn{m} zZ1}h!?RNouuC4!;!fRN+UIhmj5%~G3@)K~IMgq>lEB90U_wd{{ zk6eMjvvt%hc&p^f^9=5vJ9r28&oxB1>l|M1ZBr>vQus}4Z<*o#y^sarlkI$}JbdnS z<*y09X5)4XcvD-SbcH7zt2{&CC+&P;B0NGx#V>$wvvGSZJgA=Hzl4uoBtHhPW##id zJnk~Z--geye)=c8;wHs^gvYhplnhZX>ui~=7N2He*gQsaFuL`ffUfvWwCrsW2 z-nYAa2z;OUB>3H6#V>;Y8z|oZ|80hRFT7-Ufqecu0S~Su{}Dcah5R@8zs2Q$!t+@< ze1Pwas`ywo-h>}Uc)jP(Ax{bK)>EDXp5ErQ;_%VdPO8G+mr=O=^ACJLRe2<97he8{&EvyI z+PWkS{P05M$qDal@%}z&&p&^w;wvHE-+x&jJ}r~eIqV)I4Bnabzov(WY%A3oO3`!d6S%BjZ(!cU6> z>cIW?7hA!fZqWm}!}Hj@;IDJ~ab~vj`elf3-avUa!M(rifuFK*`&)SP&dPHM{>0kV zP56Nrihly1wpRWc-p1N_0Y+rs@kt0&ygvxdP-4O9M!@P;;z&x3bwuJ|qR5>4gD;ai8wzlSfk_1hcxosNo+ zGF!J^{@zZ~!SiobTyA(*Ydd6 z5A)&P9#+AT@r~f~2Fu&Qy&ikR z{WwR!z28lSzfGk43+Q(K_%+1`C{s`{<sdgcEJZ?#e$ zd7f^)9Hz$Ab`rQ>S4s!3GeYsz;q@!ao5Ca5_4H2gc{VQ$fUmdlc^v$e#m|Eu4$*%7 z`!oD`^|5hvCF0-Oc(@M!D2wv=>&c#{XEOOA#5cC}>bLNY);>?eLv38W2ybfF>wbpc z8L9o=gLe@Jynt^jY?9_$8aibHSt3R-O`Yf1hDB_>0zxZvd|t zPu>CE$i|Is@acB`(g*(9=D|Vm{Tq~j1bnoekB@~vw)3A!@JW_uCfu)ot%Ntvto^Qo z9}cgG&wu`V*IqBvtiS9+{5?C)Z{d$@ygChUX6^hUe4zE~pW#a*>Ui$Kw-k`SfM>P+ z1}xD1e*B&6`aoRx8Edz>;P-p#@#Wx!Z5>!0p4Hlke~!oZTf)}2{{CY3lBJY?1oHfo zT^<7OR#!d??ypCD0WV%b@f+bwYsq)R?~Rdv3vWF{ehKd1FLV=Lca-8k!u`B8mYwH$ zIr!(YGr%7dRh~ldxAwg1!~OHu!{N~qDbFN$^ThHcaG&4zz;k3!{4w}`YyUUkmu>uc z1V3o)=WqC7d;eI3McR*-&rTaR;=+H4thiM08qwt0;XQN7i@*z1l~;hrswA%qe`ot` z1+SA+@!jBitsf16m$mU^0zBnp<(UKDV($}J0l#e5?RUceDXTn(;X|#R--Z94K=Ci& z{etBIcHZpu@{g@6;=;4r_2<;^sI8PICw!mPOL6#=CW@~D?_m9_5xlRBGwtEct$zE$ z`&)gDhR?5|{Z5CUiZ2g^ceLlV4gPmI#UF$(?kGP4zh%ey3%u+Xihlr)Z0+-Jcq8jC z5$$naU(b3gPkeY6Ylms!O|ATM!y{XJD+wR4PWh|B*LRRNfe*0PH9Ep~g>=6>ZK2SzOB1Sy7l@B8m{g5@EI%QY2it%o#%${vUO=m z_`<2mQw?6h%D)NxNFT*_gb%QG)gK_{;`L= z68xTxhYjG#ZJpz<$NKSnimE()5kG36d<^`kwey+qNUIgU0-hpBz7^iaj`JWqo%NTq z@HFX_=Ni0gDfwggTr1}{@Zj-^k7oVG%i(Eqc~ZEq|FXajc2Rs`_{n_oitz49Pp>u`FDw{?Idu2|3_x{nb?Xi1kW~DUJ<^-=EVl^XeAWi4*tgwdF4>u`f>gn zQQHmR8xzXg!mH(%_k?e-@q8G(P6x$@!k621js5WdcRsjEkMrXUZLIB7@QrKaMc^-+ z$t%FC_<0|EL#X0g!?%}~cZa{4BOd~<7)w3@etVRB4!pdrOIN`C_0Y|5|6Zx%@HG{b z{~i2jS9vrW&%8W6Ph$Ax!ix9T=RLkwCV4)@`*n}%aL>~U{=N0iI87iLz_v=)v;r_n& z?eP6gmFFP5mW{J#;CbsQ{uaEXt#6;g)74k}Yq(!0Pq9|_dpVc1ajXG6LYU&(!p9et z4}(vzdYJ`}-cs>P;oV2dcf!B0{D&bTTl2w&wAbhf2&m0e5ZRhE;;XW=chx_%|Fu0G0d*OHN z_|L$XTKm5O?{4$OJ$RB%dS1`rv1`je!td6Q$6BvjFVE=KFS5WtOjcY$c%cw^AiVq> zd2P6l8!g~%0u?_U?!T{a6yC_zsTbg7vMJAXc;{a7NAOrSAH9NK&Z_u`8+7aC^U3xb z4_?>WRciP*Rxdf>{(Gy%;JdSEf0f`DZQa-aKEuZUws8Mls-Ex<>6L#N+_qjtSwJG_XEdk5kEI><%1|6b$`xc|=PWB5C3=l{TWWz+HJ*r;27 zUW?*ryAa%eZ?QJ~FIzu1h5PT^wSynBdh8ANau^9OTt&w-1wO#q&qDaEO^ROw|E{Kd z2mFwxLok) z)((rqhuZjA8Se96LwHj={vf!|N4?>;hkB8@0JVp7Zzzf*8un7LM?ROpAf4AmKc)7{Se-u8<`r}3T!|($9{C5+c z$@+!AkJ!sOpQl>jt~vc`eTgxS!Yj2(NAJ_BQ-$+wbr2cGiF1 z!8_Z$A8nhC*Xw0KKW!(5Z|o`00Ke5po)`Yf=F?K}M&lJ<4ZeG(ya{|$MR^DKx25HM z;W?~bje>8pem50f&U_L4PF&?*3r}n7sGaaBcK&`C{#Q=rISaqsR(=(p&Bm*T@aJ}& z;T62PwW~xS|{@DH|L9S>h?>#I5N;kJHQ3GW=J{9ECX?Rww= z_~>DZKMijYUU8rQuE0xYl^5NiTd&`4LE5eaZ*A+72JjQP6(0nDkzC#zJ~x7VBz&j6 zZZZ`<*v9|G@C&_^XFWWU^_Q>UBi1SY82mwY`6alQPwSn!-^=H6C2jYBXS8}82LHW; z;wQnUrI#;&$4?<&1AinA*a;74sXLCq2U|Nl5BJwuufzAXR-VW39~R4B!$-G}N7*ZMkZ6|=o3X-RT=N>4}1D|U1 zZz=fL5XC3lty|ykmo^`zhkJj?3onyUk1q|M5Jg@C-X_0%EBt*b`Cj<>MDi2xm=)wd z!k4a>{|290UH&J0vW?px;77YFKGq)Hdik8Ta!vuy5KD2{;6)b7i@>YJkynIg%ptE2 zFJtx97XIaQ#rJ|=Y$zWAFIP`K1@6BOy$Bx1+VeVirVYyTCA`1QzenMnA}anOd_fWU zd-z$aug-gQznA}0TfbG>_h0{RmbTx*quIC``1OC|k6Jy}hNrdps}uZyl|z4cEt_Aa z!He7TS`7bS>)sRal2-3Oz;7kiasLX>KS}-!p2W)k9sKoR#Yf)%-*SjrMcZ-V4HL*y z!!Ou8n-iWYhT@CEYb2LffiGGrZv@X%T;3jjd4aqy+zvBfH2lx9ik}Ym-`iRO&usJQ zM)-Rh-}b=wS5yAu@Wx-re}HezAioViZ|&y~crmNr_wZFVe#ShYeBLjL7S(og_*&~P zS>a7APhog!I}fS=FJ=zAfYf;ER{b$HLp#x@#6ZLn_5DhbOjj-V9G> z<#q)A!us!N_`h}?=0|w?6x#1i_;#Cjp2Ge0(`X0vIIox1HZNp?w;ijv0`N}b-QoX^(gTLVo79z0gg3N#WIp_KKgDl_ud;D1}1mcKfDxp`A~KYL!C;Qsl>0r0C^ zwBNDtk2bE(f;Voh_~r1|OXZv4Yi(Tm8eVys;!nc=nlHZ$?^Hs57aqyl$#eKko3B5? z@7wjXIER(b>t$*(ZKr~-w|dC|Kb}hQ#o#4uUaJi6+*R@2;O9c+L*U0p%R}H_XO+)` z54CmaDtI0%pY8C=c07mRrIslFS$L0y@~iMdS>zAl1#La~3LctR@sW<`*2_PgtrM2Q zhgtb=g!}K^?}q#5+>gQi{UMj&KXue`T!Y`W@#G=g^S^>uwRRihoBuv9Uk@aM`|)Ri z$DF6fmxWKZaib=@{U*hChUX41*w23hzxm%yfR}SNo7cv{JI7btYr+D;5_G((;d zp3BDD{P3c-9%}-RR6}_>!ZYNQ_lL*LArFT8`g|t*_d<$a20xur9tKZ8Oui4krH=eN zc=VO>pWrKPoWBE4Y2)5sbQ^y@!qa9@{@BNK>-FNlgOw7V&-z7n__!5%d{KCZyz)x$ zJvPoafVZ%A9t0m{<85#F^*+i!5+1*xd@B67wUfp0MadPv9^SRF{403&)$%Lw_I5u0 z0De2N;@`oaO_0a>`rZGImE-(Wri zUZI@w zY2i_t%Y)zpYs-7V{r$Sb;d%Wy;azOrpAY{tiSn<42ga3ega2aZM+e~hZ2mn3uM}N* zF2m3I_yF$}OYwif>-3g?f+vb6k9|(JUcX*GDd2uQS>b;Ch2Y(LC~qL#fA6v({EUsa z9pL@9Do;1~_tE5i;5$;w2f;TDl#hh(u=C}q@Cm<(&e_&n`KHk>t zP2u-!JnRgwyjl5!;lIU@&xCt9hrzwRPQf2qJNX&z?ff3x+vf|o*JHp19haA9lOS!! zh5r>OPXqVKjgu4Le*AOcd*W!nq43>B<=f!bM#>Mu$5{EFftR##?=`%T z%_C7RDxa56ynfnF43BQ@JR|&vFvaJGzaJ(q3;#Y?UJJf|guDg(c^-LJcs|QB82-Al z;wQqR)sioS53zOZdU#M3#qWU^&L=+(-;zuI1KdAnejC2Iy5j$Ur!(@a{=0*P;XSOqRe(>Pt^D=iLrclq!u@xkd&8%ND1Ib-SuFWf zc;1@oMRa?$AmT%!b zY<(W>vi9%g=D$Of1irq3;xfalO_mpg`}d3m!u|VT>%d#u^_*7le#Ml(JKVqbbtv4w z_jMxN+xdL>KQ^AMhNsG}{qBJGwRU?LejtY8&%xI;l3#B}mf_wXKO3ZCV0Ij z^1W~`hZFGQ^%Vaj{F=45_wex+AM+PI&dc**Wo;*idwpevZx2>{VR-hW@(S?l!T zWB7|%^4DTm8UB51o{(`}ee8fWKa>_$Tn^cHQ6&+~?D%*Y!B> zFV#wFJ2AXaetAatS0VEJ@Kn}+%ffdrQhY6V5$o42;Qg#Wc7^-zJq?Dpuz7g`{P%9! z?_79aTPK9Vhgf-TgZ~?>Ja^!EtUW)2zqfW3^@bkj<=n%LGd(m0Ff!EKW z_z<|iUwR%qS1QG?f|r^q-ww}RRDKwKBv5`H{#_aQ4R}mz4^QF#e(ZPfiAoa?*!B62)bM*BvP@3jfqtJ`ElzgM0%#rj29Y!dn+n{P%Fbj`u5kXjaAl4j-Oa z{x3Yftv_S@s{6eh##($b_@}mt%L4y-fV>cVk{wTZdTYhkgZE!9Zv*$^?+L$W=U>C& ze*BZ+Uo=$yh42DP;*?*6ZbH z3vD-pr?%st1NZN>TL~}MUwO8|gX7B&z+YJZx(a`8^V$P=>h{X>H$25ud6YZ4_2;Fn zfPh%=NOnG+0B%n=pvK+*=84@(+b!XBZ2iy$03lx72e%$8qAK+g#Qv5IQ^EMvdf^RIT_yX|VKwA`!FQ*W{{w$w zbmn9S*@t$tIJvR*0c64~Z>hieoGgdx{;UU&;Q^J3><4F(y!>$))g;y`H{pP0I zI-wx^)H1~vho7)6XJ@8)E&JV&%+j;9Tc$-Mde+oV{SbhOs-`d+x@N}gWe+|CI z=C9lE+14H&z^_<4e+Cb=^OP6xmKC($H}DH~JRjjdS-C~NugCc~aL&fznDA<;6&D{K zZd#(cSkwNjb z;OQ&L8^Dv-lQ)A;8!m4H9~36<2;Z|#-W^`h#^Jv3Xtr(~4DS>}c}Bv|d?6nP&r?`F z8Gb*hd?tK~&4csd`>p(!zz5m*6AIsC`PakGP1b(5z|V}8?}CqMAm0Z+WaH0ac*gmP zKMt>D*A>se-`VkBf_E>kJU_$BCzIcRXX+=v1CMU)=Mg-63&sBdA30S1H#~JN`8#-8 ztKWbJy5IZz2pfN*!oRZlE;f9<9v+Yo{w9g;NDdE*B2NpCZv8zAyz2(V7lEIuAuk25 zX6yg*@Z)wo)!&5NilWpD72mad<9nVO3k_GZ9a6fNd2=8L?o8axOJ@0}4 zUP}3Yh9}G-zYF*Hzum&S7W#x(WP`BPrynK?wdpA^ER(N|GSBt{`vGOks&tUtl z2p^kI`Rl<4S-)-#k33NE-QlY`$%nxG`=CSMW8*1)F5K&JCA@2T#UFux8CiZ2{_iCD zW%yHDH(rP5+oJg2;Q!h>_948}1jWCG`*Fs5r2D;o{r9O;!!N~BTn@OGLs59ib&78S zpEXI|0lt2&yf3_XX8CCN!7B3UaQ{BfCGes)9&UtJw0UO_ytd72$KlnioPU6aZq@Pp z3ST}|{tUihfcz7D&_a3a$GY`;nG#joDd9iZ`XoDilC9s0!s}*Ko=Wg#o8|T4OKe(z4=bnmyzs|1E|r4Mwsl~2cmZ4g zH-ksD`DGydmL2CfxL@a-4fogISHS&!P+Q=`?fLG9w_TyT+Gim;i0>_YCA4`SS@*Kc=lZK-0&`T9jqkW`*k(=%gM^q1ip8?yd!*QN%;VH zGJC$`;4@|^eh$3sN_i-JO_2ON++R1p0S{}W_-F7vHot#>7pkxL`+JiWaR7zqE%&R=T7Gh|bqmhk8{o)3agwCfDx;dyc@&uqBAzP22`II-fx-~+9` z_QFSWQ~YuGkdE^2;Xm4ZdJDcgRPj&Y-e2CpFWLD*l;8C@ua_tNwVeIxR&zno&K5uS-ujr}c z`3hdb=JBKOlr|1ufLF+)JlEk3L*Ty$JShzSCYSP@fJd7p{}bN4hWtJJ zfz7{3|I+<_oQdrCGr{NBd18LJe?N9vc(6U+T5x|qKy$di?%x@{xt@-10Q|vxc`$r? zdigx~MjKC7!Tojf?Qnnn`VhQLnDU>654LsqRrspKihl^NTuS~5e#4$ur02Td>m|hY zn*e^^#)oup|J|27|JT}GM^|-xZv($TDO%i$JH>;0gS!>iq5*;gOCW^;!7XTUiWRrw z1PY%Mvl`N8%kegU~&FRUfkee6#1vvEwG!{l9Y z{+=hFnb*YMBtN^__%re?y^Vh$*LCoV=jP|ykNSR+4CMNLlDy=9qQA`VR%`-EZSHAkCrCy`&p{4k$9cVQF1ntVta<6-0lab0$hT;GR$ zjy$ZQ$#awZ0M_5<$mQKdQ$@Mz= zGWml*6MvUH1lJeQ^l=zgM7~y#=DRwo?v_h`QX&XH^E~$ z-^!_uZLH@M#rMr&;;&GAdc&SK6kj=&`9Yl5=CkHcg7|E3J>D+Z4;P?#gnLR*{CmV# zvf`6TaBTC8+7zD@@tw(6;JEsduZIsM*Yj=;c{r{MmXl9!YU;C@e998zzmk{2_&-j* z6#aFX{0=7WJLI1iGx=YT*TeYtyfHu5_Wupz=L_;XsDFC$RaggWktbhj@~$ASh4$YJ zm+>I|6(V0ak6jd>I-T*u6z@U&9f~iF_2PvUFUQv2r189?_i$9t?YsftnjE9pCXleX9`AzH-{w06Z-^8c<*L>D?DF3bbJ{Nh1 zVaCgo>;IEonLHHz+mw85F_Wh+d9$p>r<3=YXM8pJ_ldB@wMa=Q0{SZ55~zO@{CJNo+R(gXRYTt^j9wO+CP}M z%H->28XrjBdA9M%_ftHYz=(qD31;W(}jE}rd!d7`wB)aR!8){~3;I=m2^^Ott-gM-^D!UA_eXpsir4X3*K+B{TxjQpthq(cFrca=V%8dAeFI`M*P+9^?bz zf#eh5!Q|uML*ZJV8)%0g$&;a;;Z`20XG+xbqKiMIJVlWIm5Zl~Z4&ByI~VoLNIn~$ z3$FFo{Dob-4&_;gJPpX#z?)H?C75S=ST6G?E-O7jmdl|IN4t$6pA4TuehK~~`JeDL zaGeitg*t^ek8M`GOuA5kgGB~LD_N9D*fz$;oVd2}CA$8yQj z67dblo5I_X2g5s&_ks6>Yx_(>`wXz+<@{=o_%W7CedfR?kk5k8p!^Gwf1wpG`L#Yj zTQ2!mBF|>>!P~8Q41iJb))6zY9+X*Zi}QKf8$g`eY_j_TK=N9U}*Tt_m-S2AbC=~3zY6h3EtmKVsQ+zpJ+AlUO%R{-bJH*KQS!e*{;Y6aFQUpi zKXe}Xt#~OnJ=TTF6tC+`J)Vz2xWN2gwh@k6JGC^NX159?vz)rJiZAFZz@G3;12jB@d>3&r{2#9p20^ z1^jEdx zw?KXBQhvQ2>0r6kXO5}1r-$WIp9QGr_m)fiJ;YCgYdx!mIzMzCKU(o}NLdA)$5x8h z^Kn19?z>J}F2_3(#}!Gg`|8V<1D_-*7 zbpFZX7t1AoEZpqeL;eBf?x*|@kUx?<8vc~>q(uIgBE(m-T-y0H;v2YlUl$+j;&UyR`d}IHEOqe+xXv5h&^`yq zyTBt|^8D`NFDOqi^1LP=0FQ@;(*6xW`($(Rl5lBWIo>G5SEP8neCKIsxr~!>D7Oju z78supOn83#`!}RPmtII=y>}LdA=Y&1kV81{?+`sT)aHxxr96w$uGbg zS}yId(fKEj?k+xz{Im)8%ysdf;adO0XrCP}e%;0IyLkLBOhWl6^T{&QCo6d_lv|Lz z7QC$GavtqOo(7i3>>Cl^(sGH%%aon~%cY6sIr0d$T;kIs&ouH1@HOPx@4s3uxoaZ+ zqUDlb+xed560dn;B{5HwaVYzTcWayv&Lf`XG9H4FKa=HhUcAEi$wqz$p4)PJe^tbC z$x{UlRD!$$yc&5=crEhI@CKGkx!;X*J~)q-a5)?~W*B;@uj^nLnx%A5e!J_az?+A7HuU(fd5ZEtfo}5kH#zH~0k0C68VY&a_ZtacFSdmtU`T?!lmwVTzcK=ORm?g^(>d;x{2}G&T?u0u4uPT zxPx#W+B`@nn2GDF8NC% z|0&BQzuw2YV!7nk`}Wt!Ga>&?%O%gKVCRGLcx<`kDTDau!$SJL;3ha>>&g@#)E1!n0T|d0rK8J~)qjmP?+Vh%ZFm9bVdU z$x|SeWO0szyj@r0&B>?YK2>M(A94QnC!dA&VmNu7DJK6kxU{OwCyy{5R$1{fPMX5k zTQ2q2ak9g5X@_Ar-reMb;d?EYJUUK}TP}H4BK|b_a`<`6C6A7iD9a_!4#eLg-wwZT zx#ZDt^3rn2a|H2k$PdHcSuS~WoW#c)JapV%L40EJOYk(7OCB93UyNh zE_n(fKAJo~{Db9^N5@I>RR7JB;yO+;lj}IiPp;#nEV+)8n&di8TEKOjY`{3_ORnQ* zu#3;J@=H5>jpO~1ygYn4c~kgm^2YEjaINQP)HB?Qm+{;U~W_)W{D+{GyOZ@AP`_l(Y$p4h2P|7!hf;Pu3`mfP_;Ew}fdg)EnSU=Y?3U(015 zcpCL-V!1TgF!;AFJ{Yd^-Y6XJF!B-baV~kLyZCC#GYfgvlh1(fpgg-!|9w`xwEtPt zyq-wQrQg>e&js=o@F>cE7~|?M7mt_56r}C5A9)gy?}eu#KL<}o9tqC`*Ku+I_3?G_ zS}xv&^4~%J?&P=N{ax}5aq$_H=MD1AA%6v5M0q07k2}c!#_>jy7sC1S*vc>SplTrVU{>)nr;lQ=(g9!bdK!&6!=dGvM6%$Cb|3q^c(^6%mK;o85| zq)_Kk!ityrXOB^jr<&!GU;kgHTI45@zmZG+Hdefy-`{e{e;s*xk^cb?w(`sTQwsGQ z;o{3E&r{@CMgADR$tBM&7r#h(V&nJPu9AD;cPy87z^~_9P zTaH^ZF)dNXa*59wqt5lZRtW=8)OCQkwPCGQBYLf!)2n0zg~Ir)5e8_Vtap^N2G&(E>QcPD?3JiRTKJo%O%ebKF$Z{vEFjYGaJ8Dx`})eJj`;*Q$dnAk8rr27nLy2AEx+9 z%S`+UiqDPsE0#-_uf#lm%gQ6;LD%IMmP`Hjqn@wH_rhc01t3|k?K}xBmpqY(PeOhg z{v}+FSL)eCP6FqV!-|*u7cp*&S}yr-AWup1>u_K4XYeZIPvG?|x65s9xs;m#6IMI& zc<^rIU&4Emr-k>0YdiEnJB+YgUYgqO{FBFQ%cW^5AbyFJU+S;#E8b|i)ITrE-AbMZ z9!_2wzL&ft{3u-Ouk|@+#oP6{VY$?&2J+k{uLgfi-VFYnyb1grTKQg&uZieC0_}jNxl<4mplyq6P)X_&c*jro@2;!nEVL*H2GEdIr7W!>u{}) zo{#sfc+lDTb4{_T&d52 z=Y{KfogU-1jO8)&4C+&Xd^Ef|`D}P?@|o}^aIH@!T#tNf#mo3Ci24LrF7;V~JpIU* z!3UFv!H1D=gO4LW0}mxX0iR~MUC%|9OFjQW{8I9J@O9+>!Z(ut4c`XWcFT=+J7l?> zN4O04T(n%4v}ZamSuXMGoPY92n)$zRBJt^Qp5`Gx46kgtTz6E2H?Z73uUlF!`OhJK z0C_ZgqUAALZCoGCw_Nfh!RtQZqfS;@P@%ULevmPS3RSuT0>K4*K&CB8l4yIU^tbC7?u}2rya)Hgf45xX zmm~jc%cb2SzZ6gx2oxU za2|f-dS9_Gx&GbJ@#K$Mn>;hgzxdAhdUD_V#&^QysHILZZRdR6NAc;#oA{FykKymR zNb&1BnE0C%FLRA z*BQ%^>+6O!$n|x=Cgl3Mo*%isuGg1bU)LK#uCMD&B-hvV=8)^_dI!kIRy6H%3@)uI zebNx??@fx=`%aH6m;J*RX#Z#A3E;0RmvOG+*^~3Xev~}95&s!^PIv;i*0VS2na+xr z{9ko(J~)qT6dyBZIbMe1^?hzN$zNmM_=fVtBzHdeQ@rLGNL~sz$mWs{4mFv!lfNi$ z{4n{s9L8^wpPy)4|B#EG7rzG@&xAK%tLK%*b{=KPvlTSnoE&e5@N^^BzcVnB{C0hl zX9l^(Zy-z>zkdN$W;;)jgl})bmcu1~!{wCKv@pAt+4rTmQUlfzZlZ(82 z597tiN2W7gm0Vv}YDDh$m5J{_zQ@OS0J-KFOs@a`&Uo@@+&7*_u6b6GuUc=)-AS(P zbBJ8uhk1_tBu=oKbJOn$Jr$rDI^8RK~x`NS$Fekr+*hmGU~`k44|@;K9tA0=-* z#rQ??&Q*=yBG>;H;01Xo&i7b(z1v6YnS@;HnSosElaE~ger7##&F@F9`TLSXE0ec_*C7vuHy{s& zw;(?SZ$o|p?nj;{wP`nh@;?yYkGv$_e?EY`I6MTd?ba@l$v=tWt08_Gx&A+N^C{0d zwEuD!kDxrQkpBRA3-}50p71l|-Qic^dR$tcXczzB;u#D4H{N9Ye2@HD$p^vnl83?z zl23pagKItaq1~ET@v;T{1^3@NST6PX5qbQ`=fMNW*TegfuZ0gL-vb{;z8gM{{1iNt z`~-X^c@%su`8D`bxVF!b_-1^rx8kLJ^nHN4EtmFrhCC7EPvA$$W66`8#|iQeh`$Ke z`fNpgZdmbBpD6U#Q_CfFGUR_ro&^4mJS#j_LGN*x8J-BP^+}8y9I35%sn1i?C#U6- zqA>D&MP3kIgxnWig1iFU7q0cu-=nN$#Y=r+F3O!xEi9K5^^vCyd0n_4`L}R?@;31P zaIKI2-rNu?Uh0z!`@m4kB}FgfnM&RRK9_t5d;$4j_)56eC!t)xI*(0OywoQv>JwqP zqzFZx1LPCnC&+(MnR( z@}2OcaIMcq)aOepUg}d3_4&$jNpTc;3XuN>FF}3$3r#&vMDH?Nior$$uB|-O1x&9vf}BkpA7p`Ibu_U&J3JZwJ3^ zxzH-~*FTm^p4o^m;NyKAJWZW{^4My*?!{Sw-zzvYtWCgPWqzlTRyF7?4>tLL=k zlE(-8%n#&s;OUG0cU&<|iTk4YESEgGU#(`j#D9hOrj|>*{$6JfxKvy2kJXhA&Z9T^ z4LP};$3XHW)r=2z@o|>R)*)K=)s{<<4|ke8(=E^Fkp7Wc@`XRQS#I;P5js7L!KC~OCFBQkT*skJ@H@1^JdE#@CW3ylOm* zd>O{!e)4;pO#CVG^I^uXk{^6w{4RM3jGwpU1+JL*geAQD{oDoPS;#fMAo+v4CcX@L zGvu#MzW+B9-Cm4d@y+f zw8I$ks7oe(26;5jm!HTR9yjqD$&>$Xd=Gg7)aMHMLCiDv$wy*7d_z7N>rT8<-tAul z^+`kC5cSVR-WB7vIQbg1e--kIXUuUmB7cSTq62wpjFUd(gHM?}A>;!vZ%id$`pm>H zBHx1f>SywDJ4}2y`IsBVkCShIYWymB>^;W+BHw^<@;7;rn;d^9}h0jE8t-y!+)H)|WKoZ*g3?$P-|^6(m+rK2@Q-bR%H)AK9~+VD|0Dh_ z`R;?Jo;}D19W@?I-Uj1jGlOMvme~|ol?297FrkLjL-Vy=MmqU{Ka}x zZa4DuXwM+>>xdsguJxHpJ_+M?0r|h!_pTui!+NoUJOKN;VHK!-FwZO_*ZLeK?}7FG zBKd60&$q}IV_kkmz5@P%T*qOtuf6NJ5c&I)uS1>@}eJnfk0D_rZLAl3ep#Ay0yO-XU*>b^ir-VYT=dkZuNInYtnRVo;alhgh z@`UgUq7;A+L=*9mz*v zz34-p64#qU$*-c_Ldo^Kn@9cy_HV1mPaHDsvz`1~tZN6zzu#-(Bgy~4elm)DIOg-m zB#S39m!4p4(n!d^7Ob~u1vmaqdBg@~NRZOI2>KI}=}6!jlWULEZ`fxH05?OgH>=S+Q8k^Ap89!7o= z*Byt*%OlTu^7m-BTjawru3nHo)cL%scfahx^>uRclxUx<1*-_5$1U7 zkyqVnya)N0xGoq(p8lzcA5VS<$2*5S9PP7`{3+J)?d0b${tuF8K|RlrmxkXY55s!* zg1i#u|2WmW+yBlDb6hFOPvN+7kdH-w6(bMD{<#YIQ}kD3@&PAJxt+*ooiW~@yfnt` zNb-Y-|ABlk%3Vr+5Aj>b|BW)`?kBGVKT95p^YkY9PF#xEGjBy@D zJ`2~mhsd*Ie4Zy?4ZlU69`oS~^5hslv1@p@{{?t*^84uDtmMbBju$4ck9p&3@&ubq zztwPHTiVB?o*HaD9*<= zf5n;+5Pd*j*4_A15c@JFgw<1r7{kA{(ne`@5FnJ}k z&sg%i*iX(PZ-MK<<>V)^j%+0_iv0V@-(ua2BySO6>Uo2F<Y&mj&)U!7EmuR<^@zDNX)bZ|@{fN&-2o^Rz2@NB98p_!uXn$@`-IGstIR|GAWW1mrj$< zMmt|8-;CpWOdcQm)pz7OFdh=u^X`|V7@rx)BkrSL$Sb3smB=4p9dAf}{=CW4j{Gk2 z2arF*d_IKy9ri7u z4C~it^}X9a4ExxW2?|bq~*gu4l4?+GP z$x}p`{Oib*qn&q=|A}?yDEV}>^JVfb*jL;q{|)2nAM!VkOnu@v^zN6>P|pnH2T>m% z@)6ii)+RrKd7uS(H0Gr)ez8L*} zlDsY6-|{>8j=iQm{~|Araq@u(40+8F-<!`7x~HQRLeGkI6mQ4<~Hy-OjZzZ>J}3h<46L z{(8R|pJmC%A2wc_T-TjeN%LFkasuMP3l|#!~XT*l%wlpNe|^O0MmH zg1pRgb6i)+3*$V!Pu>dkd`;dK=V{s&-tGSm^IKN(RJiWQOWp_LwkY{N)TbQzPdiNg ztCBy&zNj8~k|!p<8Mz%E9DsFh5KrkAv&MY2*Vj4o{Gm z$388RT;DhHJNa9z@At@8VLpi_*Z050Zt2~R`u?|MEVlgY~*KJN7O9 zRx^(Frm z=f!aHu^7)|$*W@BoJ2kwyhwKL?Uu`XXDe~o!HntTZ6u~@CW z`|D4~xjAzc5CAlLVGFC-7edbEZ-2=_h0$P52$>VJSdBibiXTkrNsgneB)^4aLG z0_4YVzo;~M37pr}$j@M2YD_*H_aEAkKfpTMlRO;f`yleF+syHfCC_)x_zd#)n9rAx z2VfoFN`5xVlJd5%-2-A0q^`Zb+=DE6`I$nRiX-bp?N`}V`+ z6VPAh$a6)Q`rIJTi*@G-c`59R{v|Ja!{mwI&bwbUe`@l|djE=iJ?0r7@>4i3Dv(!4 zd>!&{u->&G*Y@-y*Y+GnuI)LA-2V@AymQG5V0^A155x8E7IIyuBFMkSx_N?J=jW&7 zB{2SzxA$)Uf@e%UGn4E6uKeU$&(h?2->f=$u4t3LF?sX7#@mxW!TqJNo_}oZ73wgrHTVj5@NIn<)gj?j=&e=P7w`aN==D2*w%j0~hK%NWzUYk9_4Vyb#9uKjfJ(-r{xg z?#C*qPb%`)&rSPeBX5K8S&sY=u2X7~Z-X}_pNe&`Bl!qicl0Lr!~Spx`E2adCXyG$ zerzuJ$McAM1CIAH`5yGkZSq{$KmSXf5c7Hb&fe{O5a(BF^4Qpy79f9!b|^!xc^ZQufseRLcU$+CGz}e=egu5elz1Ff_w_v{}g#S+}Hh`yfX6NC!hAxEDJuE?{4JOS=&9VE|<{E_5&_L}-!C+~}K`-nUP=IyuS>(P%1 zx_I}O#-}0I{Y(yW{rxN-@;R6vDvA&mSh&`<6Gz+o63Plh;8z|4V)c*U|C2dH0w8{g%|^r=FR1$WC4z$5oho z8`_~fd1ma}Ymv`=Z1OiFA9v1pC-OSz$3Eoev2G3_Z;17J0(rZ;CjV^m8)(mERg9O_end^e7(Hu)6Pr#X2Zyv`CperTI%|3Tz+u%1pO--Xv% z7Ld2ZzG4meLByXUUxD_#L7o!(fhXjFXwNJ?yxUX%&R9wEV zlI#1X29OU#`-G5RL;WX{>;2dt$@Tp|XUQL9y?8(#iFNRA@^dIRaZm5|(f6mNA-|4s zm5W^8A6|xB|9)Bx@{zc{Zc3gF^JiyrAM8WEBhQWNnz7_TmrcLSB=3dm-=*ZQ_nP=k z)dhV3E{KJBXM21f?R)(dmH&CtiK1yJ7T<@CD(oOpXABWZqLZS z!FlcJ?cM%*zdb4We5`kw$pdixTaY{m`?2!m$Mt+6zlibHiu^asC;sFOux|_|Z-wjb zvE+IkH;a5c?r$t7zmN9WO1=vHxSzZq&fiG#)fk62$ir}6(B}0QCLUjk$)Ct>c5J72I{kwyej6~ zgXHUw{}}liypD5*ye!tKi{$NazvvHgfAr%`^0jE6`{b`M|2!c-jrrsi`C82XpZE3d z_tw~7B_CTuu`N*fB9g2|O#e7(a{AbMPHOO~j z9M&VRkL#?)>5SC*wNt0Qm;= z`!Vvaxc~lVlzrg*jxc$7(yIB}- ziOBb&ACr?m{@Ju!TJmpE&rIYw(T_REYvMXOFZmhVA1h4WeXA+A1o=9gzvaj?V1B4X zei_GAgZ$oZlfNGMPZ%eS$&+CnZ%O_S=8bmbqi`Pik>|oZ+=D#vW>cTOe~SA#^T``OGxc9WuKz*xO7c8dFV>U)j`L*; z`75l0JIPyMKKYeAD$3O7AbD}L&oT1**k7F?UypHhk-R9z$sgovF>Y^?KZV~XFN^c{ z3HfhWN21BsVSoFUyer1f7yZ4@_X?N?Qj+(?zVS=)b69t>kVoPELoV_!F;4Q6uib0f zzbJX-2;)`ApJE=aMLrbm(|~+ll*!YSyvS4It;wt6JPjZpfb%qv{5INu5P7YaCVvR| zub7|5kk>{1L&-B>pEI4j6z0jfJCmPB|Mn%<-)9_3o&oJMk^BOV zcP{xdTu-ea*Z0G0CD-@4?IXW{*HccBpN%r@{|EUxTqiyvU;Ws`zaT$~_ux@52*Z1iaCNCCg>QkOvUr(<^UJK)-8F>+e~_9q8Tu$#6d;CAprz12~<76fIdX&4B{LD2I zzn8q(E#oK2%fYXb-@tlzk30hX7)?G8`=XS=-u-nO^L7sMnpltWlJCX-wlH}l=CKmw z8?bJcBOiuxE0Nd7eyIle8SGo?ktfCYX-wW1^KcJx{X1I0w)6FZn&R&k6FaxPG}z{sQ}=+vEW+O#bKON6s3L_nmkDeueRwio7kxPk!?9*gupe zuZ8P^YUK0LUyaCr#r2>+xz=X@xz=YSx#piou6b6HYo4v-{kNlE$cx}U!%6atr%e29 z@^?6{=j25&KYSohhVwnmAn$%z9AWb3AkTsER+c;;_UARoM`8VKLcSdR)q}hZ_ALX+ z*I*ouB%g(GK7~9v*5&!+H?gj5BEOCO%t`VfwDWWFcGy3EAU}Y5CLZkFo`2$gMSAj~ zSQm1W@5lL4l>9N)>)PbaQEoHx?HE5D$=gJm{tX~siTQ98`L|Ifej0gi+%H;49*%Wt zE%^kDhn?i3F&<8khrBf9UM3I6IJrZvuRFgW*T3r+>wE8hsf+U^33+?8TLyC7SCk+> zjee;@o)Yt6L-NBL%yG3PpN%}-$!B2R9!S0wK8pMy_J`BRD`8z*Nd7m*`6lu&ai4Y% z`G^Qp|6}C!(7%_-_3xM7A@7HI{ss9W^t)$>cYiIyz9loc{vFi(RgnS9s$8X8&Mw$Epw2$)j<9coq5C znmX-wm!uuJ1c-O@8dW$?s3D*JY#0wcUOo*LGV%-U;ot zkzD_-`yTRcXrJTc1yIi`G?OKzEVNJ$=qJlV;2Z!z&c z#^4Y+ZtjUtv5{ zAm4?3LLKs9*pIa&AB}o;CC`QXFhS(U&<-QXCt<#wMxGh-`6BYxxV~6V-X8m+UF2V3 zJRc#?hU2dMtl{4MH5TOIbsxy}_f5VS;oXn={|ICtKXBgEKQFmI#z`siqSz0& zBG){f$$Mjb_9L%?{cs3*O`I>2$roV0`jNZ}&c`+6+AllEt6|@GhBnEDJP*Wb^Y zNUnbucOm({ttQVev^U>bzssArSGV%duO}XjGSEK!Nl4n0? z;tP@M|EExz{35RFE0gR0J5ZOr&r6fP8M%Li@%H4&uzqzX*T1VDNUncZe<*oV%md@d z_3!G>CXbER@0O6Sx@hXTmV6x6&28kdu#TJ~uZZ}|HR43 zsTj{`$me0+%SC<|^FU$p))*&c$o=n|`cxs`j`OPt`Bm&2TamwbhJGh+g?8&o?vHx* zCvSrFWf*xDtX~t!D`Foqn>;hxZ7KPC%s(5*>tcVnoBR>h*(2mru&!MoUx@ScCix*8 z*HiLFIPcz(U&lI4LLPb zPlx@Qy{TT1d&gGZys?YC8TMmG$m`;I`4agE#NQ@AvdN5- z=j8hTe|;c7h;f^Kymvo##=bo#`4<>(MaVN^eEO1K#rUa9uJ2=MNgfns>feQ2uSfcm z>+hY-CO?REa1Hq@%uD;pb$@%BTwmY(gS-RI>!;)q*#9J);N6~^;AzSA_mp#zcgFZH zN}dPvb47B^U!S}o`lStd5YE%?$3s1<~>^0-(1Nn8#&v7St=h=t;O+& zasRLkc}^T}b@H89UmBCY!SS{ye~*3OH1ct1hvnookY_Ww&Xd2A>-_eBJPrE&4Y}rt zJK4LP!>}%=AlG?23;FpQrXLHCFUI^+ja+~4xDolb!zRzSVcH=#c^&Lqijn)E-5QYpvd83^ zLOx})@gK?c{a35W^}OCrz7^L6<)?ceS7p?{7P;o>L#}@xeh9g~Z+QZ_?#G^xr^EUC zmi!XNPl6x3>$x2Ba5nNp*e8@D&w_sMNd5=b(_!T4(Eg$1`hMDVgA8V5@$3C_b`6#q=U-AmL-!hndGF}fI zN3Q#>ndCYz{Y0+w(gyNan6Gw|7s2(;5pqA=A8S3+yWQ?$zt@v|9`<$p$opcS988`J z_rZpezeN7geLwaIa$S$El8?gv=RWyh^!sb_2;ApPJbJjrr#ad1IW9FUVV9e8!&b-EMs_4`d}jveC3pLGlu)e>w6+IKSGFkHdKD0hiKa zJO9#|^q!#$ynrf8+Jgn^t@xCpeL5E>EmE-tE@q zfywj*Tz)F??+kmgSl$9ApDIwE9oTo(vf?EVZrgaeQoIlDw**@8Nv-_TDgFfJ$%R(D zaEBpA^tn^Oo>gNx#SwZihLpRgt_=}7k@~;4S781PpyAAJSq8XcxLhlctIC0PksyW zb;uK=9a@oRgZq=0fDa;1kA9j#UI4y~ycm2pd3X4G@<4cdj7M#^q@OI=y(0`*W7s_gek7o{f2z-O(QneZI-z=9rA@Ez4+wpPYnEp!(>&cX+;TfUf?U_5hvayhhbMM?lTh39ynNw2Qjtf)i(4-B!R4c;zU5LM+;;N# zlWV(u=i=kZqnupwnCs%JU3{mDA0h99SqExx}wT{A0`Q__&xCrJfRh5%C2rm-sfQe`U)h z-UstkQ_Jo6ZkF5mCzD@BxtlDv^Bl5V@@V{H7mts5T94}%@@IGPvMyf7#oM@eFBcCX z*ZFysi|=&tqb`2c#UGNdl*V%&|GIeMFU-%i-84Rvix+ZnU-INAx0#Fkk&j0F02d!k zJ`DXk+r`(C??U_m^1~?iyo=u@zkv9^T|7$?@Aj-{zV+m{T*kRRCRr}2>*EJ2Ew|&( zST6Au5g+B^&n%Zbr4Szn7dbj#sb{fV@`vDjuVcC7>45Rn$#Oe>qUCn{I?E+~CGuah z+>Vcz%v4y%XL9+W^T=em9Y54^$^QcRcUx}9&%p(fw!?TF*8$7zdY*OhKgqkGp3hzU zo#nEG;_}*)FohhQSx2N?&6D26^O09Txn*3uri(Xs@h;?Tkbi)Sk8|-kF22Uae{u2S zF8;fVKPK;i`hRfogeha1KV}`5eu*&OdcL$=`bG1UaPjIc-pq2TN*|23ZZ00|;^WBY zAkQ2ZUrC+`^TG}n-*36JLmD|joJXYPQh&|!z{TIXc#>2x>0;Vh+Or|f(>&yD;pHut zatC35(%Ho)k?%wNY4Rr6zkZeazxvquOQrF4jjv9w^=VDM4(0Z8@gXig$;B6tYkhup z@n2p1w2R+x@#o}2&~CBQdbf{ya`LT+&*tJjEG;#-(tB`QS(5cVUSHfI*X!$d$@Tg!l>BeR z&$8S;-X)exXmN~_wU*oQ+8%OT;<`?qq4-W%7jBU2dhv{0*M(T9ujbeJU#~mWb)L^g z@j9RD{Z5V7dAkzD>-_u;xz58K$o0N@Ul$+l;?rDw3Ax@^-($Tr3 zmoI-nKVBlwEKhPC_sI47;thFC#K%WIX-^5!eR2lNB~6y-e2qKtyKzyH%T<85lo^W2Pl@rQ{jbOSC43geXNAuv*VnNY zlb1yNa`GDRHRO%p8_4y#X)AdT#OuCB>#wiR;_Xl$$LC+lEU&)`qV^>w&t^2C^I{vl5R|3ID_uKO;ne_?n6 zoUiKT;YrA=!Bdid15ZcZ8J>we5T2cU7(5U8M7Zt)wVt!#MJRp|yd?Q*cscT|@QUQS z;nm2G!fTW3KC=P2zK-97{2}tRB#(xFOCINQ)3Ke%6T`car-t_;&j{Cjy|!l__&|y; z1;?K+`glIpfaA{qeDwNo{94{eZv)5M_CI=OxW4Z|>(d85lj<`ZK977Vd=dG4_%iaJ z;JQE8ayP+$ruaQ@UH3Hp2z&>{pMi&yUxM!=kAfd2e*`~H9t}T3{tkYDJTC74TqREq zk0Q?ozfE2M{ug;E_!II<@R#Iu;D3`hg}*0n4UdC;fwq4~czp6+@Gr>w!BdbAhNmST z1J~;#Eq4k$8^zCp=O+IVo}c_DxDWX%cnR{2@UrCLa9{GnaDCsA*8dE=7RCP#uTOp( z-kAIayao9?xW3M;|ANYNWF9Ux}?hAiGUK9R?ydnG@ zc}sX~?Dw@ko#64v^?fIa$p;`lIr&g{8uHQb4CGVcS;-f`bCIuu=OfqmuM{RfhWO&- zk?=C)zr(*KzYDKI{t8}`JgzjX^QcFj1m1`|GrT#u4_xnK$+vQSS{knRThuGTyHK85 z@E+t%;C;wj!-L2>!v~QE!iSL$gO4Jg0v}I47e1N%C-@KK8{l)u_rVvC>-&U$B9B76 z-WQZ_rJbL^`TmmgqnJl&TtCTnK~jdqsPq0i?4#9nf4PBtG4>h9F%N0Hz7BXB<%^@J zm=fMvj+8N8FoUUp#A7QK10CRcTy^pOAwTkdaDVbC@LuGn;C;yx;&s>{@~ZIf$iIUR zA>RfcPW}u&n!E^JV3|U$@3Waf9*Fq4+%(mpl@Fh+N;tbBz2Y;!l&uPGZK>dGh%1E99x+*U2-(Z;|JN-zTpCe@tEv{(`&( z{0(_$_&f4ocx*Yzorj(mqu}w#L*a?ZXTg(`FM+2a-vG}*9tO`!egvM2T;KnckNgVa z3zOf37bkxVFGKzo{xx}Gyg#W5c}93m@_g`m8a}y z-;m<7;``1n@!hO=dtdjxOMHkGFZ;}j_3Ta zeci{tPi4o~wBn^cx^LItPvZInTk%pKeSd|%uE_C=t@xP!#rLV?8|T6C>EK#_eLqHd zm-vcSynLzG7oA<=yIJw}b;S2B@gY{c9Iw6)P=6nd>t7LrUhA*F$EUwX#_{_4n8Zs_ zA$a~(nkN zV4#11Q`MO2{Ri#*`*_;58{pTkzklxlCp6~AQXamHshRbC%+XliOFQ)R59rZ5pp##r zz;6Ei+c^~p>gnex)Up4^bbcL!y0$a5>m2iShmIZl`3=z0V#qnvp8ovUAN3nJsx>~h2*TLfX@|u%?Ygc_lr0#g4+@wf3Lo_W1lKNKJK^MbEc%0 zSo=}U`Q}sQKdo-c*Y`0<`7)1i`SSjXPnDks<^PWB7AGv`!R0q~^i$<`t6|FTh6a=J zB_)?1;Mk|ikAwFGiIkH23Q~T zqds5D*XOUs^ZEF7^R`%@h|gK+`%TXGl8c|e7z0;-FJGUga0GXdKrx%J@kuQ@;a)bszyWuBDNRO4d? ze*R_WC!eanr?q+Fr4;6=GJaAy|G55-9Q#!HS@W9bMaV*KJ+fL~%a`w*fAV~)rY8z- zh)za7$m+z}k2lUYpQ`_*Ugn7nallf48IoN8_|DHiRsPeGrWB1g-~IP|{XUNK{WG5`zv3s#m$i<||H`F&eFM7g1NC?->KFK& z!=?NdDBqs{ieZ^8Wcxm48pm$Novm&-01$<^4LGQ_4z`=tX!-g%!sYo1@CH_&rE!$`wFwx7a%=gFUH|C-56$7huv zIuB|8!p=W#e<_>y4i0%D@|zi{CN_YwKa#yBKVSBAJa;+diC@}iaoYdzu}b%R>iOML Nnfm`rPoQr-{|D`MF~k4> literal 0 HcmV?d00001 diff --git a/src & scripts/tascam_fifo_streamer.c b/src & scripts/tascam_fifo_streamer.c index 4578f68..8d8c1e2 100644 --- a/src & scripts/tascam_fifo_streamer.c +++ b/src & scripts/tascam_fifo_streamer.c @@ -1,6 +1,9 @@ - // MIT License Copyright (c) 2025 serifpersia - +// +// Simple, non-synchronized playback driver. +// This version is a clean base, modified only to provide a ~1.0ms +// transfer buffer size for 48kHz and 96kHz sample rates. + #include #include #include @@ -22,7 +25,6 @@ // --- USB Request Types --- #define RT_H2D_CLASS_EP 0x22 -#define RT_D2H_CLASS_EP 0xa2 #define RT_H2D_VENDOR_DEV 0x40 #define RT_D2H_VENDOR_DEV 0xc0 @@ -36,11 +38,8 @@ #define BYTES_PER_SAMPLE 3 #define DEVICE_CHANNELS 4 #define DEVICE_FRAME_SIZE (DEVICE_CHANNELS * BYTES_PER_SAMPLE) // 12 bytes - #define PIPE_CHANNELS 2 #define PIPE_FRAME_SIZE (PIPE_CHANNELS * BYTES_PER_SAMPLE) // 6 bytes - -#define ISO_PACKETS_PER_TRANSFER 8 #define NUM_ISO_TRANSFERS 8 #define USB_TIMEOUT 1000 @@ -56,7 +55,6 @@ int perform_initialization_sequence(libusb_device_handle *handle, int rate); static void LIBUSB_CALL iso_playback_callback(struct libusb_transfer *transfer); static void LIBUSB_CALL feedback_callback(struct libusb_transfer *transfer); -// --- Signal Handler --- void sigint_handler(int signum) { if (is_running) { printf("\nCtrl+C detected, stopping...\n"); @@ -64,7 +62,6 @@ void sigint_handler(int signum) { } } -// --- Main Program --- int main(int argc, char *argv[]) { libusb_device_handle *handle = NULL; struct libusb_transfer *playback_transfers[NUM_ISO_TRANSFERS] = {0}; @@ -86,18 +83,22 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Error: Missing required arguments.\n"); print_usage(argv[0]); return 1; } - if (sample_rate != 44100 && sample_rate != 48000 && sample_rate != 88200 && sample_rate != 96000) { - fprintf(stderr, "Error: Sample rate %d is not supported.\n", sample_rate); return 1; + if (sample_rate != 48000 && sample_rate != 96000) { + fprintf(stderr, "Error: Sample rate %d is not supported. Use 48000 or 96000.\n", sample_rate); return 1; } - const int frames_per_packet_playback = (sample_rate > 48000) ? 12 : 6; - const int playback_packet_size = frames_per_packet_playback * DEVICE_FRAME_SIZE; - const int playback_transfer_size = playback_packet_size * ISO_PACKETS_PER_TRANSFER; + // --- DYNAMIC BUFFER CALCULATION FOR 1.0ms LATENCY --- + const int frames_per_transfer = sample_rate / 1000; // 48 for 48k, 96 for 96k + const int playback_transfer_size = frames_per_transfer * DEVICE_FRAME_SIZE; + const int num_iso_packets = 8; // A reasonable default + const int playback_packet_size = playback_transfer_size / num_iso_packets; + + // The feedback endpoint size is fixed and small const int feedback_packet_size = 3; - const int feedback_transfer_size = feedback_packet_size * ISO_PACKETS_PER_TRANSFER; + const int feedback_transfer_size = feedback_packet_size * num_iso_packets; printf("Initializing TASCAM US-144 MKII for %d Hz...\n", sample_rate); - printf(" Playback Pipe: %s (using Iso EP 0x%02x)\n", playback_pipe_path, EP_AUDIO_OUT); + printf("Using transfer size of %d bytes (%d frames) for ~1.0ms latency.\n", playback_transfer_size, frames_per_transfer); signal(SIGINT, sigint_handler); if (libusb_init(NULL) < 0) return 1; @@ -120,18 +121,18 @@ int main(int argc, char *argv[]) { if (state.playback_fifo_fd < 0) { perror("Opening playback FIFO failed"); r = 1; goto cleanup; } char drain_buf[1024]; while (read(state.playback_fifo_fd, drain_buf, sizeof(drain_buf)) > 0); - printf("Starting playback stream (EP 0x%02x) and feedback stream (EP 0x%02x)...\n", EP_AUDIO_OUT, EP_PLAYBACK_FEEDBACK); + printf("Starting playback and feedback streams...\n"); for (int i = 0; i < NUM_ISO_TRANSFERS; i++) { - playback_transfers[i] = libusb_alloc_transfer(ISO_PACKETS_PER_TRANSFER); - unsigned char *buf = malloc(playback_transfer_size); - memset(buf, 0, playback_transfer_size); - libusb_fill_iso_transfer(playback_transfers[i], handle, EP_AUDIO_OUT, buf, playback_transfer_size, ISO_PACKETS_PER_TRANSFER, iso_playback_callback, &state, USB_TIMEOUT); + playback_transfers[i] = libusb_alloc_transfer(num_iso_packets); + unsigned char *buf_p = malloc(playback_transfer_size); + memset(buf_p, 0, playback_transfer_size); + libusb_fill_iso_transfer(playback_transfers[i], handle, EP_AUDIO_OUT, buf_p, playback_transfer_size, num_iso_packets, iso_playback_callback, &state, USB_TIMEOUT); libusb_set_iso_packet_lengths(playback_transfers[i], playback_packet_size); libusb_submit_transfer(playback_transfers[i]); - feedback_transfers[i] = libusb_alloc_transfer(ISO_PACKETS_PER_TRANSFER); - buf = malloc(feedback_transfer_size); - libusb_fill_iso_transfer(feedback_transfers[i], handle, EP_PLAYBACK_FEEDBACK, buf, feedback_transfer_size, ISO_PACKETS_PER_TRANSFER, feedback_callback, NULL, USB_TIMEOUT); + feedback_transfers[i] = libusb_alloc_transfer(num_iso_packets); + unsigned char *buf_f = malloc(feedback_transfer_size); + libusb_fill_iso_transfer(feedback_transfers[i], handle, EP_PLAYBACK_FEEDBACK, buf_f, feedback_transfer_size, num_iso_packets, feedback_callback, NULL, USB_TIMEOUT); libusb_set_iso_packet_lengths(feedback_transfers[i], feedback_packet_size); libusb_submit_transfer(feedback_transfers[i]); } @@ -170,14 +171,16 @@ cleanup: void print_usage(const char *prog_name) { fprintf(stderr, "Usage: %s -r --playback-pipe \n", prog_name); - fprintf(stderr, " -r : Set sample rate. Supported: 44100, 48000, 88200, 96000.\n"); + fprintf(stderr, " -r : Set sample rate. Supported: 48000, 96000.\n"); fprintf(stderr, " --playback-pipe : Path to the named pipe for audio playback.\n"); } static void LIBUSB_CALL feedback_callback(struct libusb_transfer *transfer) { if (!is_running) return; if (transfer->status == LIBUSB_TRANSFER_COMPLETED) { - if (is_running) libusb_submit_transfer(transfer); + if (is_running) { + libusb_submit_transfer(transfer); + } } } @@ -192,30 +195,30 @@ static void LIBUSB_CALL iso_playback_callback(struct libusb_transfer *transfer) struct stream_state *state = transfer->user_data; int total_frames = transfer->length / DEVICE_FRAME_SIZE; int bytes_to_read_from_fifo = total_frames * PIPE_FRAME_SIZE; - unsigned char source_buf[bytes_to_read_from_fifo]; + + // Use a static buffer to avoid malloc/free in the callback + static unsigned char source_buf[8192]; + if (bytes_to_read_from_fifo > sizeof(source_buf)) { + bytes_to_read_from_fifo = sizeof(source_buf); + } ssize_t n = read(state->playback_fifo_fd, source_buf, bytes_to_read_from_fifo); unsigned char *device_buf = transfer->buffer; + memset(device_buf, 0, transfer->length); + if (n > 0) { int frames_read = n / PIPE_FRAME_SIZE; unsigned char *src = source_buf; for (int i = 0; i < frames_read; i++) { memcpy(device_buf, src, PIPE_FRAME_SIZE); - memset(device_buf + PIPE_FRAME_SIZE, 0, PIPE_FRAME_SIZE); device_buf += DEVICE_FRAME_SIZE; src += PIPE_FRAME_SIZE; } - if (n < bytes_to_read_from_fifo) { - memset(device_buf, 0, transfer->length - (frames_read * DEVICE_FRAME_SIZE)); - } - } else { - memset(transfer->buffer, 0, transfer->length); } - - if (is_running && libusb_submit_transfer(transfer) < 0) { - fprintf(stderr, "Error resubmitting playback transfer\n"); - is_running = false; + + if (is_running) { + libusb_submit_transfer(transfer); } } @@ -225,21 +228,18 @@ int perform_initialization_sequence(libusb_device_handle *handle, int rate) { uint16_t rate_vendor_wValue; switch(rate) { - case 44100: memcpy(rate_data, (unsigned char[]){0x44, 0xac, 0x00}, 3); rate_vendor_wValue = 0x1000; break; case 48000: memcpy(rate_data, (unsigned char[]){0x80, 0xbb, 0x00}, 3); rate_vendor_wValue = 0x1002; break; - case 88200: memcpy(rate_data, (unsigned char[]){0x88, 0x58, 0x01}, 3); rate_vendor_wValue = 0x1008; break; case 96000: memcpy(rate_data, (unsigned char[]){0x00, 0x77, 0x01}, 3); rate_vendor_wValue = 0x100a; break; default: fprintf(stderr, "Invalid sample rate for initialization.\n"); return -1; } - printf("\n--- STARTING DEVICE CONFIGURATION (per Spec v5.0) ---\n"); + printf("\n--- STARTING DEVICE CONFIGURATION ---\n"); #define CHECK(desc, call) \ r = (call); \ if (r < 0) { fprintf(stderr, " [FAIL] %s: %s\n", desc, libusb_error_name(r)); return -1; } \ else { printf(" [OK] %s (returned %d)\n", desc, r); } - printf(" [INFO] Step 1: Set Interfaces (already done in main, re-verifying)\n"); r = libusb_set_configuration(handle, 1); if (r < 0 && r != LIBUSB_ERROR_BUSY) { fprintf(stderr, " [FAIL] Set Configuration 1: %s\n", libusb_error_name(r)); return -1; } for (int i=0; i<=1; i++) { @@ -248,27 +248,17 @@ int perform_initialization_sequence(libusb_device_handle *handle, int rate) { r = libusb_set_interface_alt_setting(handle, i, 1); if (r < 0) { fprintf(stderr, " [FAIL] Set Alt Setting on Intf %d: %s\n", i, libusb_error_name(r)); return -1; } } - printf(" [OK] Step 1: Interfaces set and claimed.\n"); + printf(" [OK] Interfaces set and claimed.\n"); - printf("\n-- Step 2: Initial Handshake --\n"); CHECK("Status Check", libusb_control_transfer(handle, RT_D2H_VENDOR_DEV, VENDOR_REQ_MODE_CONTROL, 0x0000, 0x0000, buf, 1, USB_TIMEOUT)); - - printf("\n-- Step 3: Set Initial Mode --\n"); CHECK("Set Initial Mode", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_MODE_CONTROL, 0x0010, 0x0000, NULL, 0, USB_TIMEOUT)); - - printf("\n-- Step 4: Set Sample Rate to %d Hz --\n", rate); - // We still set the capture rate, as the device expects it as part of the sequence. CHECK("Set Rate on Capture EP (0x86)", libusb_control_transfer(handle, RT_H2D_CLASS_EP, UAC_SET_CUR, UAC_SAMPLING_FREQ_CONTROL, 0x86, rate_data, 3, USB_TIMEOUT)); CHECK("Set Rate on Playback EP (0x02)", libusb_control_transfer(handle, RT_H2D_CLASS_EP, UAC_SET_CUR, UAC_SAMPLING_FREQ_CONTROL, EP_AUDIO_OUT, rate_data, 3, USB_TIMEOUT)); - - printf("\n-- Step 5: Configure Internal Registers --\n"); CHECK("Reg Write 1 (0x0d04)", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_REGISTER_WRITE, 0x0d04, 0x0101, NULL, 0, USB_TIMEOUT)); CHECK("Reg Write 2 (0x0e00)", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_REGISTER_WRITE, 0x0e00, 0x0101, NULL, 0, USB_TIMEOUT)); CHECK("Reg Write 3 (0x0f00)", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_REGISTER_WRITE, 0x0f00, 0x0101, NULL, 0, USB_TIMEOUT)); CHECK("Reg Write 4 (Rate-Dep)", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_REGISTER_WRITE, rate_vendor_wValue, 0x0101, NULL, 0, USB_TIMEOUT)); CHECK("Reg Write 5 (0x110b)", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_REGISTER_WRITE, 0x110b, 0x0101, NULL, 0, USB_TIMEOUT)); - - printf("\n-- Step 6: Enable Streaming --\n"); CHECK("Enable Streaming", libusb_control_transfer(handle, RT_H2D_VENDOR_DEV, VENDOR_REQ_MODE_CONTROL, 0x0030, 0x0000, NULL, 0, USB_TIMEOUT)); printf("\n--- CONFIGURATION COMPLETE ---\n\n"); diff --git a/src & scripts/tascam_streamer b/src & scripts/tascam_streamer new file mode 100644 index 0000000000000000000000000000000000000000..88b43755bdb735e0e806fe34f738cbec5a6fa697 GIT binary patch literal 22192 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 + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +MODULE_AUTHOR("serifpersia"); +MODULE_DESCRIPTION("ALSA Driver for TASCAM US-144MKII"); +MODULE_LICENSE("GPL"); +MODULE_VERSION("1.0"); + +#define DRIVER_NAME "us144mkii" + +// --- Device and Endpoint Configuration --- +#define TASCAM_VID 0x0644 +#define TASCAM_PID 0x8020 + +#define EP_AUDIO_OUT 0x02 +#define EP_PLAYBACK_FEEDBACK 0x81 +#define EP_CAPTURE_DATA 0x86 + +// --- USB Request Types --- +#define RT_H2D_CLASS_EP 0x22 +#define RT_H2D_VENDOR_DEV 0x40 +#define RT_D2H_VENDOR_DEV 0xc0 + +// --- UAC / Vendor Requests --- +#define UAC_SET_CUR 0x01 +#define UAC_SAMPLING_FREQ_CONTROL 0x0100 +#define VENDOR_REQ_REGISTER_WRITE 65 +#define VENDOR_REQ_MODE_CONTROL 73 + +// --- Streaming Configuration --- +#define NUM_PLAYBACK_URBS 8 +#define NUM_FEEDBACK_URBS 4 +#define NUM_ISO_PACKETS 8 + +#define BYTES_PER_SAMPLE 3 +#define DEVICE_CHANNELS 4 +#define PLAYBACK_BYTES_PER_FRAME (DEVICE_CHANNELS * BYTES_PER_SAMPLE) + +#define FEEDBACK_BYTES_PER_PACKET 3 +#define MAX_SUPPORTED_RATE 96000 +#define USB_CTRL_TIMEOUT_MS 1000 + +static struct usb_driver tascam_alsa_driver; + +struct tascam_card { + struct usb_device *dev; + struct usb_interface *iface0; + struct usb_interface *iface1; + struct snd_card *card; + struct snd_pcm *pcm; + + struct snd_pcm_substream *playback_substream; + struct urb *playback_urbs[NUM_PLAYBACK_URBS]; + size_t playback_urb_alloc_size; + int p_iso_packet_size; + + struct urb *feedback_urbs[NUM_FEEDBACK_URBS]; + size_t feedback_urb_alloc_size; + int f_iso_packet_size; + + spinlock_t playback_lock; + atomic_t playback_active; + atomic_t feedback_active; + snd_pcm_uframes_t playback_pos; +}; + +// --- Forward Declarations --- +static int tascam_pcm_open(struct snd_pcm_substream *substream); +static int tascam_pcm_close(struct snd_pcm_substream *substream); +static int tascam_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params); +static int tascam_pcm_hw_free(struct snd_pcm_substream *substream); +static int tascam_pcm_prepare(struct snd_pcm_substream *substream); +static int tascam_pcm_trigger(struct snd_pcm_substream *substream, int cmd); +static snd_pcm_uframes_t tascam_pcm_pointer(struct snd_pcm_substream *substream); + +static void playback_urb_complete(struct urb *urb); +static void feedback_urb_complete(struct urb *urb); +static int us144mkii_configure_device_for_rate(struct tascam_card *tascam, int rate); + + +static const struct snd_pcm_hardware tascam_pcm_hw = { + .info = (SNDRV_PCM_INFO_MMAP | + SNDRV_PCM_INFO_INTERLEAVED | + SNDRV_PCM_INFO_BLOCK_TRANSFER | + SNDRV_PCM_INFO_MMAP_VALID | + SNDRV_PCM_INFO_PAUSE | + SNDRV_PCM_INFO_RESUME), + .formats = SNDRV_PCM_FMTBIT_S24_3LE, + .rates = (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000), + .rate_min = 44100, + .rate_max = 96000, + .channels_min = DEVICE_CHANNELS, + .channels_max = DEVICE_CHANNELS, + .buffer_bytes_max = 256 * 1024, + .period_bytes_min = 256, + .period_bytes_max = 64 * 1024, + .periods_min = 2, + .periods_max = 1024, +}; + +static struct snd_pcm_ops tascam_playback_ops = { + .open = tascam_pcm_open, + .close = tascam_pcm_close, + .ioctl = snd_pcm_lib_ioctl, + .hw_params = tascam_pcm_hw_params, + .hw_free = tascam_pcm_hw_free, + .prepare = tascam_pcm_prepare, + .trigger = tascam_pcm_trigger, + .pointer = tascam_pcm_pointer, +}; + +static int tascam_capture_open_stub(struct snd_pcm_substream *substream) { return -ENODEV; } +static int tascam_capture_close_stub(struct snd_pcm_substream *substream) { return 0; } +static struct snd_pcm_ops tascam_capture_ops = { + .open = tascam_capture_open_stub, + .close = tascam_capture_close_stub, +}; + +static void tascam_card_private_free(struct snd_card *card) +{ + struct tascam_card *tascam = card->private_data; + if (tascam && tascam->dev) { + usb_put_dev(tascam->dev); + tascam->dev = NULL; + } +} + +static int us144mkii_configure_device_for_rate(struct tascam_card *tascam, int rate) +{ + struct usb_device *dev = tascam->dev; + u8 *rate_payload_buf; + u16 rate_vendor_wValue; + int err = 0; + + static const u8 payload_44100[] = {0x44, 0xac, 0x00}; + static const u8 payload_48000[] = {0x80, 0xbb, 0x00}; + static const u8 payload_88200[] = {0x88, 0x58, 0x01}; + static const u8 payload_96000[] = {0x00, 0x77, 0x01}; + const u8 *current_payload_src; + + dev_info(&dev->dev, "Configuring device for rate %d Hz\n", rate); + + rate_payload_buf = kmalloc(3, GFP_KERNEL); + if (!rate_payload_buf) return -ENOMEM; + + switch (rate) { + case 44100: current_payload_src = payload_44100; rate_vendor_wValue = 0x1000; break; + case 48000: current_payload_src = payload_48000; rate_vendor_wValue = 0x1002; break; + case 88200: current_payload_src = payload_88200; rate_vendor_wValue = 0x1008; break; + case 96000: current_payload_src = payload_96000; rate_vendor_wValue = 0x100a; break; + default: + dev_err(&dev->dev, "Unsupported sample rate %d for configuration\n", rate); + kfree(rate_payload_buf); + return -EINVAL; + } + + memcpy(rate_payload_buf, current_payload_src, 3); + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_MODE_CONTROL, RT_H2D_VENDOR_DEV, 0x0010, 0x0000, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Set Initial Mode (0x0010) failed: %d\n", err); goto cleanup_buf; } + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR, RT_H2D_CLASS_EP, UAC_SAMPLING_FREQ_CONTROL, EP_CAPTURE_DATA, rate_payload_buf, 3, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Set Rate on Capture EP (0x%02x) failed: %d\n", EP_CAPTURE_DATA, err); goto cleanup_buf; } + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR, RT_H2D_CLASS_EP, UAC_SAMPLING_FREQ_CONTROL, EP_AUDIO_OUT, rate_payload_buf, 3, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Set Rate on Playback EP (0x%02x) failed: %d\n", EP_AUDIO_OUT, err); goto cleanup_buf; } + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_REGISTER_WRITE, RT_H2D_VENDOR_DEV, 0x0d04, 0x0101, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Reg Write 0x0d04 failed: %d\n", err); goto cleanup_buf; } + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_REGISTER_WRITE, RT_H2D_VENDOR_DEV, 0x0e00, 0x0101, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Reg Write 0x0e00 failed: %d\n", err); goto cleanup_buf; } + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_REGISTER_WRITE, RT_H2D_VENDOR_DEV, 0x0f00, 0x0101, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Reg Write 0x0f00 failed: %d\n", err); goto cleanup_buf; } + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_REGISTER_WRITE, RT_H2D_VENDOR_DEV, rate_vendor_wValue, 0x0101, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Rate-Dep Reg Write (0x%04x) failed: %d\n", rate_vendor_wValue, err); goto cleanup_buf; } + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_REGISTER_WRITE, RT_H2D_VENDOR_DEV, 0x110b, 0x0101, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Reg Write 0x110b failed: %d\n", err); goto cleanup_buf; } + + err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), VENDOR_REQ_MODE_CONTROL, RT_H2D_VENDOR_DEV, 0x0030, 0x0000, NULL, 0, USB_CTRL_TIMEOUT_MS); + if (err < 0) { dev_err(&dev->dev, "Enable Streaming (0x0030) failed: %d\n", err); goto cleanup_buf; } + + dev_info(&dev->dev, "Device configuration for rate %d Hz completed.\n", rate); + +cleanup_buf: + kfree(rate_payload_buf); + return err; +} + + +static int tascam_probe(struct usb_interface *intf, const struct usb_device_id *id) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct tascam_card *tascam; + struct snd_card *card; + struct snd_pcm *pcm; + int err; + u8 *handshake_buf; + + if (intf->cur_altsetting->desc.bInterfaceNumber != 0) + return -ENODEV; + + err = snd_card_new(&intf->dev, -1, "US144MKII", THIS_MODULE, + sizeof(struct tascam_card), &card); + if (err < 0) { + dev_err(&intf->dev, "Failed to create snd_card: %d\n", err); + return err; + } + + tascam = card->private_data; + tascam->card = card; + tascam->dev = usb_get_dev(dev); + tascam->iface0 = intf; + card->private_free = tascam_card_private_free; + usb_set_intfdata(intf, tascam); + spin_lock_init(&tascam->playback_lock); + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + + strscpy(card->driver, DRIVER_NAME, sizeof(card->driver)); + strscpy(card->shortname, "TASCAM US-144MKII", sizeof(card->shortname)); + snprintf(card->longname, sizeof(card->longname), "%s (VID:%04X PID:%04X) at %s IF%d", + "TASCAM US-144MKII", + le16_to_cpu(dev->descriptor.idVendor), + le16_to_cpu(dev->descriptor.idProduct), + dev->bus->bus_name, + intf->cur_altsetting->desc.bInterfaceNumber); + + tascam->iface1 = usb_ifnum_to_if(dev, 1); + if (!tascam->iface1) { + dev_err(&intf->dev, "Interface 1 not found.\n"); + err = -ENODEV; + goto free_card_obj; + } + err = usb_driver_claim_interface(&tascam_alsa_driver, tascam->iface1, tascam); + if (err < 0) { + dev_err(&intf->dev, "Could not claim interface 1: %d\n", err); + tascam->iface1 = NULL; + goto free_card_obj; + } + + err = usb_set_interface(dev, 0, 1); + if (err < 0) { dev_err(&intf->dev, "Set Alt Setting on Intf 0 failed: %d\n", err); goto release_iface1_and_free_card; } + err = usb_set_interface(dev, 1, 1); + if (err < 0) { dev_err(&intf->dev, "Set Alt Setting on Intf 1 failed: %d\n", err); goto release_iface1_and_free_card; } + dev_info(&intf->dev, "Interfaces 0 and 1 set to altsetting 1.\n"); + + handshake_buf = kmalloc(1, GFP_KERNEL); + if (!handshake_buf) { err = -ENOMEM; goto release_iface1_and_free_card; } + err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), VENDOR_REQ_MODE_CONTROL, + RT_D2H_VENDOR_DEV, 0x0000, 0x0000, + handshake_buf, 1, USB_CTRL_TIMEOUT_MS); + if (err < 0) { + dev_warn(&intf->dev, "Handshake read failed: %d (continuing)\n", err); + } else if (err == 1 && handshake_buf[0] == 0x12) { + dev_info(&intf->dev, "Handshake successful (response 0x12).\n"); + } else { + dev_warn(&intf->dev, "Handshake: expected 0x12, got 0x%02x (len %d) (continuing)\n", handshake_buf[0], err); + } + kfree(handshake_buf); + handshake_buf = NULL; + + err = us144mkii_configure_device_for_rate(tascam, 48000); + if (err < 0) { + dev_err(&intf->dev, "Initial device configuration for 48kHz failed: %d\n", err); + goto release_iface1_and_free_card; + } + + err = snd_pcm_new(card, "US144MKII PCM", 0, 1, 1, &pcm); + if (err < 0) { + dev_err(&intf->dev, "Failed to create snd_pcm: %d\n", err); + goto release_iface1_and_free_card; + } + tascam->pcm = pcm; + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &tascam_playback_ops); + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &tascam_capture_ops); + pcm->private_data = tascam; + strscpy(pcm->name, "US-144MKII Audio", sizeof(pcm->name)); + + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS, + usb_ifnum_to_if(dev,0)->dev.parent, + 64 * 1024, + tascam_pcm_hw.buffer_bytes_max); + + err = snd_card_register(card); + if (err < 0) { + dev_err(&intf->dev, "Failed to register snd_card: %d\n", err); + goto release_iface1_and_free_card; + } + + dev_info(&intf->dev, "%s: TASCAM US-144MKII ALSA driver initialized.\n", card->longname); + return 0; + +release_iface1_and_free_card: + if (tascam->iface1) { + usb_driver_release_interface(&tascam_alsa_driver, tascam->iface1); + tascam->iface1 = NULL; + } +free_card_obj: + snd_card_free(card); + return err; +} + +static void tascam_disconnect(struct usb_interface *intf) +{ + struct tascam_card *tascam = usb_get_intfdata(intf); + + if (!tascam) { + dev_warn(&intf->dev, "Disconnect called on interface with no private data.\n"); + return; + } + + if (intf == tascam->iface0) { + dev_info(&intf->dev, "Disconnecting TASCAM US-144MKII (iface0)...\n"); + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + + snd_card_disconnect(tascam->card); + + if (tascam->iface1) { + dev_info(&intf->dev, "Releasing claimed interface 1.\n"); + usb_driver_release_interface(&tascam_alsa_driver, tascam->iface1); + tascam->iface1 = NULL; + } + + snd_card_free_when_closed(tascam->card); + dev_info(&intf->dev, "TASCAM US-144MKII (iface0) disconnected and scheduled for freeing.\n"); + } else if (intf == tascam->iface1) { + dev_info(&intf->dev, "Disconnecting TASCAM US-144MKII (iface1). Data already cleared by iface0 disconnect.\n"); + } +} + + +static void playback_urb_complete(struct urb *urb) +{ + struct tascam_card *tascam = urb->context; + struct snd_pcm_substream *substream; + struct snd_pcm_runtime *runtime; + unsigned long flags; + int ret; + + if (urb->status == -ENOENT || urb->status == -ECONNRESET || urb->status == -ESHUTDOWN) { + return; + } + + if (!tascam || !atomic_read(&tascam->playback_active)) { + return; + } + + substream = tascam->playback_substream; + if (!substream) return; + runtime = substream->runtime; + if (!runtime) return; + + if (urb->status != 0) { + dev_warn_ratelimited(tascam->card->dev, "Playback URB completed with status %d\n", urb->status); + } + + spin_lock_irqsave(&tascam->playback_lock, flags); + + for (int i = 0; i < NUM_ISO_PACKETS; ++i) { + size_t dma_pos_bytes; + size_t current_iso_packet_len = tascam->p_iso_packet_size; + u8 *urb_packet_buffer = urb->transfer_buffer + (i * current_iso_packet_len); + + dma_pos_bytes = frames_to_bytes(runtime, tascam->playback_pos); + + if (dma_pos_bytes + current_iso_packet_len > runtime->dma_bytes) { + size_t len1 = runtime->dma_bytes - dma_pos_bytes; + memcpy(urb_packet_buffer, runtime->dma_area + dma_pos_bytes, len1); + memcpy(urb_packet_buffer + len1, runtime->dma_area, current_iso_packet_len - len1); + } else { + memcpy(urb_packet_buffer, runtime->dma_area + dma_pos_bytes, current_iso_packet_len); + } + tascam->playback_pos += bytes_to_frames(runtime, current_iso_packet_len); + if (tascam->playback_pos >= runtime->buffer_size) { + tascam->playback_pos -= runtime->buffer_size; + } + } + spin_unlock_irqrestore(&tascam->playback_lock, flags); + + if (atomic_read(&tascam->playback_active)) { + urb->dev = tascam->dev; + ret = usb_submit_urb(urb, GFP_ATOMIC); + if (ret < 0) { + dev_err_ratelimited(tascam->card->dev, "Failed to resubmit playback URB: %d\n", ret); + } + } + snd_pcm_period_elapsed(substream); +} + +static void feedback_urb_complete(struct urb *urb) +{ + struct tascam_card *tascam = urb->context; + int ret; + + if (urb->status == -ENOENT || urb->status == -ECONNRESET || urb->status == -ESHUTDOWN) { + return; + } + + if (!tascam || !atomic_read(&tascam->feedback_active)) { + return; + } + + if (urb->status != 0) { + dev_warn_ratelimited(tascam->card->dev, "Feedback URB completed with status %d\n", urb->status); + } + + if (atomic_read(&tascam->feedback_active)) { + urb->dev = tascam->dev; + ret = usb_submit_urb(urb, GFP_ATOMIC); + if (ret < 0) { + dev_err_ratelimited(tascam->card->dev, "Failed to resubmit feedback URB: %d\n", ret); + } + } +} + + +static int tascam_pcm_trigger(struct snd_pcm_substream *substream, int cmd) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + unsigned long flags; + int err = 0; + int i; + + spin_lock_irqsave(&tascam->playback_lock, flags); + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + if (atomic_read(&tascam->playback_active)) { + err = -EBUSY; + break; + } + tascam->playback_pos = 0; + atomic_set(&tascam->playback_active, 1); + atomic_set(&tascam->feedback_active, 1); + dev_info(tascam->card->dev, "PCM TRIGGER START/RESUME\n"); + break; + case SNDRV_PCM_TRIGGER_STOP: + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + if (!atomic_read(&tascam->playback_active)) { + err = 0; + break; + } + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + dev_info(tascam->card->dev, "PCM TRIGGER STOP/SUSPEND/PAUSE\n"); + break; + default: + err = -EINVAL; + break; + } + spin_unlock_irqrestore(&tascam->playback_lock, flags); + + if (err < 0) return err; + + if (cmd == SNDRV_PCM_TRIGGER_START || cmd == SNDRV_PCM_TRIGGER_RESUME) { + for (i = 0; i < NUM_PLAYBACK_URBS; i++) { + err = usb_submit_urb(tascam->playback_urbs[i], GFP_ATOMIC); + if (err < 0) { + dev_err(tascam->card->dev, "Failed to submit playback URB %d: %d\n", i, err); + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + for (int j = 0; j < i; j++) usb_kill_urb(tascam->playback_urbs[j]); + return err; + } + } + for (i = 0; i < NUM_FEEDBACK_URBS; i++) { + err = usb_submit_urb(tascam->feedback_urbs[i], GFP_ATOMIC); + if (err < 0) { + dev_err(tascam->card->dev, "Failed to submit feedback URB %d: %d\n", i, err); + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + for (int j = 0; j < NUM_PLAYBACK_URBS; j++) usb_kill_urb(tascam->playback_urbs[j]); + for (int j = 0; j < i; j++) usb_kill_urb(tascam->feedback_urbs[j]); + return err; + } + } + } else if (cmd == SNDRV_PCM_TRIGGER_STOP || cmd == SNDRV_PCM_TRIGGER_SUSPEND || cmd == SNDRV_PCM_TRIGGER_PAUSE_PUSH) { + for (i = 0; i < NUM_PLAYBACK_URBS; i++) + if (tascam->playback_urbs[i]) usb_kill_urb(tascam->playback_urbs[i]); + for (i = 0; i < NUM_FEEDBACK_URBS; i++) + if (tascam->feedback_urbs[i]) usb_kill_urb(tascam->feedback_urbs[i]); + } + return 0; +} + +static snd_pcm_uframes_t tascam_pcm_pointer(struct snd_pcm_substream *substream) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + return tascam->playback_pos; +} + +static int tascam_pcm_prepare(struct snd_pcm_substream *substream) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = substream->runtime; + size_t total_urb_transfer_bytes; + size_t individual_iso_packet_size; + int i, j; + + dev_info(tascam->card->dev, "PCM PREPARE: rate=%d, channels=%d, format=%d, period_size=%ld, periods=%d\n", + runtime->rate, runtime->channels, runtime->format, runtime->period_size, runtime->periods); + + total_urb_transfer_bytes = (runtime->rate / 1000) * PLAYBACK_BYTES_PER_FRAME; + + if (NUM_ISO_PACKETS == 0) { + dev_err(tascam->card->dev, "NUM_ISO_PACKETS is zero, invalid configuration.\n"); + return -EINVAL; + } + individual_iso_packet_size = total_urb_transfer_bytes / NUM_ISO_PACKETS; + + if (individual_iso_packet_size == 0 && total_urb_transfer_bytes > 0) { + dev_err(tascam->card->dev, "Zero individual ISO packet size. Rate %d, BPF %d, N_ISO %d\n", + runtime->rate, PLAYBACK_BYTES_PER_FRAME, NUM_ISO_PACKETS); + return -EINVAL; + } + tascam->p_iso_packet_size = individual_iso_packet_size; + + for (i = 0; i < NUM_PLAYBACK_URBS; i++) { + struct urb *urb = tascam->playback_urbs[i]; + if (!urb) continue; + + if (total_urb_transfer_bytes > tascam->playback_urb_alloc_size) { + dev_err(tascam->card->dev, "Playback URB transfer size %zu > allocated %zu\n", + total_urb_transfer_bytes, tascam->playback_urb_alloc_size); + return -EINVAL; + } + memset(urb->transfer_buffer, 0, total_urb_transfer_bytes); + urb->transfer_buffer_length = total_urb_transfer_bytes; + urb->number_of_packets = NUM_ISO_PACKETS; + + for (j = 0; j < NUM_ISO_PACKETS; j++) { + urb->iso_frame_desc[j].offset = j * tascam->p_iso_packet_size; + urb->iso_frame_desc[j].length = tascam->p_iso_packet_size; + } + } + + tascam->f_iso_packet_size = FEEDBACK_BYTES_PER_PACKET; + for (i = 0; i < NUM_FEEDBACK_URBS; i++) { + struct urb *f_urb = tascam->feedback_urbs[i]; + if (!f_urb) continue; + f_urb->transfer_buffer_length = tascam->f_iso_packet_size * NUM_ISO_PACKETS; + f_urb->number_of_packets = NUM_ISO_PACKETS; + for (j = 0; j < NUM_ISO_PACKETS; j++) { + f_urb->iso_frame_desc[j].offset = j * tascam->f_iso_packet_size; + f_urb->iso_frame_desc[j].length = tascam->f_iso_packet_size; + } + } + + tascam->playback_pos = 0; + return 0; +} + +static int tascam_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + int err; + + dev_info(tascam->card->dev, "PCM HW_PARAMS: rate=%u, channels=%u, format=%d, period_bytes=%u, periods=%u\n", + params_rate(params), params_channels(params), params_format(params), + params_period_bytes(params), params_periods(params)); + + if (params_channels(params) != DEVICE_CHANNELS) { + dev_warn(tascam->card->dev, "Requested %d channels, but device is fixed at %d. This may cause issues.\n", + params_channels(params), DEVICE_CHANNELS); + } + + err = us144mkii_configure_device_for_rate(tascam, params_rate(params)); + if (err < 0) { + dev_err(tascam->card->dev, "Failed to set hardware rate to %u: %d\n", params_rate(params), err); + return err; + } + + return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params)); +} + +static int tascam_pcm_hw_free(struct snd_pcm_substream *substream) +{ + return snd_pcm_lib_free_pages(substream); +} + +static int tascam_pcm_open(struct snd_pcm_substream *substream) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = substream->runtime; + int i; + + dev_info(tascam->card->dev, "PCM OPEN\n"); + + runtime->hw = tascam_pcm_hw; + + tascam->playback_substream = substream; + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + + tascam->playback_urb_alloc_size = (MAX_SUPPORTED_RATE / 1000) * PLAYBACK_BYTES_PER_FRAME; + if (tascam->playback_urb_alloc_size == 0) { + dev_err(tascam->card->dev, "Calculated playback_urb_alloc_size is zero.\n"); + return -EINVAL; + } + + for (i = 0; i < NUM_PLAYBACK_URBS; i++) { + struct urb *urb = usb_alloc_urb(NUM_ISO_PACKETS, GFP_KERNEL); + if (!urb) goto error_free_playback_urbs; + tascam->playback_urbs[i] = urb; + + urb->transfer_buffer = usb_alloc_coherent(tascam->dev, tascam->playback_urb_alloc_size, + GFP_KERNEL, &urb->transfer_dma); + if (!urb->transfer_buffer) { + goto error_free_playback_urbs; + } + urb->dev = tascam->dev; + urb->pipe = usb_sndisocpipe(tascam->dev, EP_AUDIO_OUT); + urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; + urb->interval = 1; + urb->context = tascam; + urb->complete = playback_urb_complete; + } + + tascam->f_iso_packet_size = FEEDBACK_BYTES_PER_PACKET; + tascam->feedback_urb_alloc_size = tascam->f_iso_packet_size * NUM_ISO_PACKETS; + if (tascam->feedback_urb_alloc_size == 0) { + dev_err(tascam->card->dev, "Calculated feedback_urb_alloc_size is zero.\n"); + goto error_free_playback_urbs; + } + + for (i = 0; i < NUM_FEEDBACK_URBS; i++) { + struct urb *f_urb = usb_alloc_urb(NUM_ISO_PACKETS, GFP_KERNEL); + if (!f_urb) goto error_free_feedback_urbs; + tascam->feedback_urbs[i] = f_urb; + + f_urb->transfer_buffer = usb_alloc_coherent(tascam->dev, tascam->feedback_urb_alloc_size, + GFP_KERNEL, &f_urb->transfer_dma); + if (!f_urb->transfer_buffer) { + goto error_free_feedback_urbs; + } + f_urb->dev = tascam->dev; + f_urb->pipe = usb_rcvisocpipe(tascam->dev, EP_PLAYBACK_FEEDBACK); + f_urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; + f_urb->interval = 1; + f_urb->context = tascam; + f_urb->complete = feedback_urb_complete; + } + + return 0; + +error_free_feedback_urbs: + for (i = 0; i < NUM_FEEDBACK_URBS; i++) { + if (tascam->feedback_urbs[i]) { + if (tascam->feedback_urbs[i]->transfer_buffer) { + usb_free_coherent(tascam->dev, tascam->feedback_urb_alloc_size, + tascam->feedback_urbs[i]->transfer_buffer, + tascam->feedback_urbs[i]->transfer_dma); + } + usb_free_urb(tascam->feedback_urbs[i]); + tascam->feedback_urbs[i] = NULL; + } + } +error_free_playback_urbs: + for (i = 0; i < NUM_PLAYBACK_URBS; i++) { + if (tascam->playback_urbs[i]) { + if (tascam->playback_urbs[i]->transfer_buffer) { + usb_free_coherent(tascam->dev, tascam->playback_urb_alloc_size, + tascam->playback_urbs[i]->transfer_buffer, + tascam->playback_urbs[i]->transfer_dma); + } + usb_free_urb(tascam->playback_urbs[i]); + tascam->playback_urbs[i] = NULL; + } + } + return -ENOMEM; +} + +static int tascam_pcm_close(struct snd_pcm_substream *substream) +{ + struct tascam_card *tascam = snd_pcm_substream_chip(substream); + int i; + + dev_info(tascam->card->dev, "PCM CLOSE\n"); + + atomic_set(&tascam->playback_active, 0); + atomic_set(&tascam->feedback_active, 0); + + for (i = 0; i < NUM_PLAYBACK_URBS; i++) { + if (tascam->playback_urbs[i]) { + usb_kill_urb(tascam->playback_urbs[i]); + if (tascam->playback_urbs[i]->transfer_buffer) { + usb_free_coherent(tascam->dev, tascam->playback_urb_alloc_size, + tascam->playback_urbs[i]->transfer_buffer, + tascam->playback_urbs[i]->transfer_dma); + } + usb_free_urb(tascam->playback_urbs[i]); + tascam->playback_urbs[i] = NULL; + } + } + + for (i = 0; i < NUM_FEEDBACK_URBS; i++) { + if (tascam->feedback_urbs[i]) { + usb_kill_urb(tascam->feedback_urbs[i]); + if (tascam->feedback_urbs[i]->transfer_buffer) { + usb_free_coherent(tascam->dev, tascam->feedback_urb_alloc_size, + tascam->feedback_urbs[i]->transfer_buffer, + tascam->feedback_urbs[i]->transfer_dma); + } + usb_free_urb(tascam->feedback_urbs[i]); + tascam->feedback_urbs[i] = NULL; + } + } + tascam->playback_substream = NULL; + return 0; +} + +// --- USB Driver Registration --- +static const struct usb_device_id tascam_id_table[] = { + { USB_DEVICE(TASCAM_VID, TASCAM_PID) }, + { } +}; +MODULE_DEVICE_TABLE(usb, tascam_id_table); + +static struct usb_driver tascam_alsa_driver = { + .name = DRIVER_NAME, + .probe = tascam_probe, + .disconnect = tascam_disconnect, + .id_table = tascam_id_table, +}; + +module_usb_driver(tascam_alsa_driver);