From c50c87af2d06948cdcade47a4738a079e937d308 Mon Sep 17 00:00:00 2001 From: helori_ollivier Date: Mon, 5 Jan 2026 22:42:41 +0100 Subject: [PATCH] added some function (from lightbar state to speaker volume --- .../classes/application.properties | 1 + .../bzh/risotto/dualsensgui/Command.class | Bin 0 -> 2270 bytes .../dualsensgui/DualsensController.class | Bin 0 -> 5502 bytes .../dualsensgui/DualsensguiApplication.class | Bin 0 -> 1218 bytes .../enums/MicrophoneLedState$1.class | Bin 0 -> 697 bytes .../enums/MicrophoneLedState$2.class | Bin 0 -> 762 bytes .../enums/MicrophoneLedState$3.class | Bin 0 -> 764 bytes .../enums/MicrophoneLedState.class | Bin 0 -> 1776 bytes .../enums/MicrophoneModeState$1.class | Bin 0 -> 704 bytes .../enums/MicrophoneModeState$2.class | Bin 0 -> 768 bytes .../enums/MicrophoneModeState$3.class | Bin 0 -> 769 bytes .../enums/MicrophoneModeState.class | Bin 0 -> 1781 bytes .../dualsensgui/enums/SpeakerState$1.class | Bin 0 -> 673 bytes .../dualsensgui/enums/SpeakerState$2.class | Bin 0 -> 732 bytes .../dualsensgui/enums/SpeakerState$3.class | Bin 0 -> 727 bytes .../dualsensgui/enums/SpeakerState.class | Bin 0 -> 1707 bytes .../risotto/dualsensgui/enums/Trigger$1.class | Bin 0 -> 644 bytes .../risotto/dualsensgui/enums/Trigger$2.class | Bin 0 -> 698 bytes .../risotto/dualsensgui/enums/Trigger$3.class | Bin 0 -> 697 bytes .../risotto/dualsensgui/enums/Trigger.class | Bin 0 -> 1639 bytes .../exception/OutOufBoundException.class | Bin 0 -> 898 bytes ${project.build.directory}/classes/log4j2.xml | 26 +++ .../main/resources/application.properties | 1 + .../classes/main/resources/log4j2.xml | 26 +++ .../java/bzh/risotto/dualsensgui/Command.java | 45 +++++ .../dualsensgui/DualsensController.java | 164 +++++++++++++++--- .../dualsensgui/DualsensguiApplication.java | 6 +- .../dualsensgui/enums/MicrophoneLedState.java | 23 +++ .../enums/MicrophoneModeState.java | 22 +++ .../dualsensgui/enums/SpeakerState.java | 22 +++ .../dualsensgui/{ => enums}/Trigger.java | 2 +- .../exception/OutOufBoundException.java | 12 ++ 32 files changed, 321 insertions(+), 29 deletions(-) create mode 100644 ${project.build.directory}/classes/application.properties create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/Command.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/DualsensController.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/DualsensguiApplication.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$1.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$2.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$3.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$1.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$2.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$3.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$1.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$2.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$3.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger$1.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger$2.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger$3.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger.class create mode 100644 ${project.build.directory}/classes/bzh/risotto/dualsensgui/exception/OutOufBoundException.class create mode 100644 ${project.build.directory}/classes/log4j2.xml create mode 100644 ${project.build.directory}/classes/main/resources/application.properties create mode 100644 ${project.build.directory}/classes/main/resources/log4j2.xml create mode 100644 src/main/java/bzh/risotto/dualsensgui/Command.java create mode 100644 src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneLedState.java create mode 100644 src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneModeState.java create mode 100644 src/main/java/bzh/risotto/dualsensgui/enums/SpeakerState.java rename src/main/java/bzh/risotto/dualsensgui/{ => enums}/Trigger.java (89%) create mode 100644 src/main/java/bzh/risotto/dualsensgui/exception/OutOufBoundException.java diff --git a/${project.build.directory}/classes/application.properties b/${project.build.directory}/classes/application.properties new file mode 100644 index 0000000..508d8da --- /dev/null +++ b/${project.build.directory}/classes/application.properties @@ -0,0 +1 @@ +spring.application.name=dualsensgui diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/Command.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..102486360d365586b13d181276a28d94fb8cea1b GIT binary patch literal 2270 zcmai0*-{%<5Iq+y!!j&pUu_W_7GaPR;}8&b5(p&30uyk+*jX5)i!@l8kw-H??4&AH zeo9qd@)dr~QUxJY5YZ{Tc>z3}T3GUjrrJH?1xE^0Z2lD%3ZsYC0^?epZYn$BxTf?zE_3 zjHvDy6=)s2gq5MyYJ_o9$6I(?pvjR5(_z_X9mjUav@|jTJ%f)*3w7QDiyOw6j@x)g zAdqtnhc#(ASJ|RLRKvTBA|I-0N2a~4ElGdN(qQ*#m=x$ZIh(h#o?CEVIIhMN?r6BH z<2}4DaHT9?fx4u0OYGR_Cqd9z$pHhNz_j9IhQt+{=Yoo2WgN3gX^yO%DHWn2?dtqv z9rO8?CQXT$X-O63JsmMD2xz;8>CV|~A5Px9hWo@hi+Xl1F0-y_Tb1~f4VI@nw3{;1 zGW5S)w4&nyJ|oFe6-Qv=lEyFZkaEe;s_Mx#9S^Ziw1nLBk^)_&Xfr9pS&>gYX~kte z*~j=?!xuWf#8(1+uj=6i!!q(yQ^k4|#zSE29C+Hu<+v?gg+hcVM`6ZJNP&9A?V^|2 zl+FWVGfhcj%#IuBRl_mWcTwnfQ)W(0>uV;Pz&^*b1o}&(Dy)@DmKfFRvgd|MptFS4 z3**4b7qwaNay6m_RlBIY(q1?&n+275nklP1&swG!AeSQ#T1pO1dx>^har3AYCCTV0 z(JKI)>|_DGsJq0GrE1e9+ktn%ifhE5EEw55$r?QF;sxoZ>;%n>jC7?#+sdgp1J2(w z)ho8=#N`}YnJ$XUbX28*UT)wDUR>l)?O?w7_|2P(k_~>{;#2S$2p>TF%$Eun{8g76 zPzyimvB@{RpoBOQ{HlV)7Bx1A`yIhF%6>e8wtj%BSn=6dy$?OizkM{^3pY0JqjljI zbT_^cKE!n&ju2kIaey0(BmR9v)<*VmYtny&@%1B2tanfrJ-`PC_;51N5!lB^>yyDh zQ9IlbB;eZ10Cu=X!u&6MX!Xt-R_Ji-khghw^FrEIykVlcj4i=fSN@^Mn{A~iS zJ9MKJeQ2jfC$~x$?ocv=tDMgelk7!?r#TGJ`Z{*ej~5ui4;apqu}p+xX%ezQFBw>5d6(4L$Wo6K;VEUH_4jay&Z*|N3y)OpP<|W!V}b-Vv}w>Z z>}m*Wn9}GB|Dc)TW7_h6kK!?ehD9BFGz|!1E99?FE8Ckd8H?4}^BW%hif&b1ktaeG NAE@E)Gd?Tu{6AhILg)Yh literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/DualsensController.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/DualsensController.class new file mode 100644 index 0000000000000000000000000000000000000000..ea95fb0d0e06c0ab8654cb4bcbbf757752dadea9 GIT binary patch literal 5502 zcmb_gdw&$w8GcT7lbtLJBr73G0xY5-S&}Sr(-J_NC^V87B{T>Ec6N8NS=h|1v$GJO zsI|2hZ0-Gi(-y0(*ivW{F0GfgN^8GGKS%xx#^1k&HHf6UIAGv~bT^SswH`|-c8 zzYAb1{uxIDA~8f0Xhf4h%W?IjnklJzAv2aeuH`I&rkzE-Xzdn=boWdsPy}LG)v`46 zbR2Oki6N1|QY;f#n>{m?F^d($vW!f=s+KC6UMWV<)x`Y8o10wNVh5_iS0B7runoCna^D$rOdmx=_sAx!Qw^@8KL8~4PpDuE7k3bfY1 z4C|Iw&`bfPteO>#j{}8)UNWGdOJKRwE7fYcnk{MhCFn*^ z4Cw?mqL+TSgAjpeQJ*vxphg$>3nXgPCMOkaqTxNI`C`S^8Ykn;32ebuf#zamP_s^H z8r|E}Jv=1I^G(r7E5`}jAI)j3O>P|z9Km{kibstq71cM)?~!=g;~GO zrLNQgDdJ%%;t_$)?&12N3N9Q>UWS{O@o4G1(pU^Z&IKNtOzdm5He@(DDuK%pS-QH6@w&!Igd7@urxek%{lFVX;5sN70eL*0e zn$)y>R?VGA$-?}_1ipkX6Ry{lg4MToWbw6{6(%LyMeJ2k_+`;CY#Q156efqRyw#+3f1zp8b{VF#$49qykP@!Qk$!| z*Fz;AS{%%yett9d-1osbsiO95i`mw_U`T0tb-I$7w|-ov3>2kgvcaq-LB#^lizTk4(LJQ}rW7v5c z9GkdP9-JjavB#|q0=;)aaKNc515Rwk+#v28Go zf<>sGCy#{+O8t?M$-9&`%$*oj%Wir$F|e4yP7s+a-O-9=u=p!Gb0zou9v?TVW=`8v zlsVpBFSTDD*07Ehu7TeM4LsblXmYel9%*@B!8v{;K;XN4+QPfwy)iup@p}#$@IC&@ z?+Ks(v;VUJIed9bVsBW|Cz%B z2h*MYXtg)Gfo+H8@L=+xS?uVT#cpY^9i84_H3zf!q=)FSj;q+)$%~}-UcAQ5LDV)uYjmCo-n7l|7JluTLFY1QwSJnR zQTo^O<+$t1fag9fnOwucNC14&_Q+l+{Ipn$#~D%kY``lWsXpL-8amYAN|nh`_8TFdr)L2)7)iz+<5Te;Xoj(i1opDp2K?ECuF51^y0~ z+z5Dm}|D!zUNYn?=tM9wP`k5I_#ys> zJfP)+AK*u+Jqr|2m6Ytm%+7Sr=|0_O=J%hUzW_YJ>kN93vSB&sMIXb^4*$$up9h}% zp}r#;nxSt=22!suq;mOM23L@_k#W!uhhe_{rR9b)Qd%pw8FN1pLFC2KeRJ}^t^yq@ z-xndnfG70%bupK(T>gB?gud!v5JLo1qMJRfmGN3Hk=cZA>_r#1uoegAaqfXHNJ5gOw}iYiZoVZ5z`L?%*!N zY&Rw%h})676-v)DMX)MwH?|n&x-!4upOBt$FpK*P{gKccLNx2VvCFWKyCg)Jk~Ou< zImlz4VUS=d(reXuxUPIfIrZhr#>vJ4L$Mo=(~eSiSNHaO+2C3#Q;c=h6ogulfp{Oc z>muCZb)R-dDyqT#8V{vepKMyXB_oE#uDN#(Q=&L+E-Bnt?$dD#6OB^;WZ;$ZHL~;2 zBjjucGwG#qPKOKs4SuFl3T)R;g~rOHtan1URCAMuye&w76f#p)ao7+W(y*TFOrU5a z#W4Oc4zz5Gnv5hBWi<$tPU=W7D-{)bZe&#EZ5#A`74EuqrL@aqt%$+4^x{ys)x>3u z4CfkAA{iFwE}O3h%-m)gAJEFBnbF)k{~hdGVlL8X%z#a1z&UonA|BEzjYoJ)Am;Es zETm|j{Q@paJ_Jdo0fHidxc^AO%3Dg5$4XoCkP(&L|6o!#sG%s+K$sW vgKQFT`WTcRpr_<#QSQ(1oRUam3NP@Ig1@5uUPcavPAM6euuQYbdj;ORz literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$1.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8d46f916aa57dc7da6c5c97bb2e5ed90d2040104 GIT binary patch literal 697 zcmbVJO-lnY5Pj*c?Y6dBtJV)Z_RuQ2T6$AN5QWMrLZ$b#8`{V=ktFNEU!^C(gFnC@ zCC;{jf?hO`_hyF4<7MXU{pA%v2b(42;1%GPF^4?E{@`I88fmq2I*e1ESfT7Fm7!4S z#DMJ7&0OMz{Q)hY44su;+|aqr-0WSHZ@?VXGe?V904z zK#8IKcL|32Z)RG32LDvY~^!tyi@u!t&UOLU7l)F@u2OV+VUn91!DXV1J^;gKkZFQvjaCGS(oLw(w{hIL|p P>TQFf5{VRvaZ>#N?>wx@ literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$2.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState$2.class new file mode 100644 index 0000000000000000000000000000000000000000..31e9cadb1ef7e7015628310095f95bbf27bffba9 GIT binary patch literal 762 zcmbVKO;6iE5Pcgvu`x+WQ@%=b%z+e9L&PlzAt8`J4yqKC`zGEbTRFSc?z)Hms`gZg z13#cYs_NK50tqg`(!Mt{+I@O6>T&I zqYxp3r>D~Z5kqffjUL1HYi_zD2LD2*WP2l#O5Em)u`qXhoKdBf=n2n8+{hw-Ec$LP zEyKy`ef0Va&4F-poqpwpFN70@l%h^C%8sG}Lt~j}lS;)ihS2Hd;21XdyD!H{&xblU z6LBRA$2%|g@ugS+b$6*InYOfor2~fgwNk=dWZYU|1AKbRSdY(-utq;j@fBFbI&qz% z9(;Jj;pc-k`vdm7ywM=6fe}V{M_4c85F2Px_MXmK1ucp{(4m&GMOerk5*N?BR`83c jf+wZMGbQg)$-{PeYX`f;e(CKaMJx>ZCF1!WbX(tFwsZDgBBlJ(%P(v#r9AK;G? zXSafaUTProW`^YD%}m}uUf%#5V!eU_yfXYMiYPJcb{_|!kybmW!#L%M70UKg848sS zZFnVnM&A##5|N18jyu6nI+9AdV}{F(=#D?|FyX2nww;lx-@1s#C2Z`qnwGK;^Gz8gr(a5#P? z2Q7x$m2d+c-*Cf+!U;o6l}6UghN1++)F{vaq_w{>cI;#_8m zmwr!VCmRA)ccyxYwlsv10*2~^Qo@`j+*)DFSo=>~_fB>(L0=|YnJr?Huu9%Oe0YSx z=GHoU0ej9*Opz^tk*#5xY&G`-%uo!>(w-=wPW~KiDj5r8GrDcU?3!0EKM@r0%{2Fe d$@^mRu$Z4(!ZM+sYg-|&PTndZPHLn($4{Te!d(CW literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneLedState.class new file mode 100644 index 0000000000000000000000000000000000000000..8a2fed90862eb389d8049b18dfbeebad1141eabc GIT binary patch literal 1776 zcmbVMZBNrs6n<{kty?KDCW5?(fOK7RVXQ~={iFE9HVNx zuAQpXG_$H()%}{0(yiK2HMMD!9sB)(ZRrKQqPm)^Gla5+Ww^@>eUpVl?O02hnzf%& zUB|HYGxsAoubHSb6g6hr0 z6x={Bq2k5W!fsAwn0wp)elq&dFQHe#EesHS*`%}?dM6VtX>RWw>SZ@0V+g|%ZYvnU z9fq#II^;+M=w&b@#xo>}U>QT-~8G zMfboUBggqgiu=Bu{=jxBhNYPd5!KkYG`HpuZ(uS}WO#K&3i-B=ay*^kWWosvFPx+q zSf2mPGR$9xiy@pXo6SqV-jY8*s@b*~Gs`5gtlBlFtZx{+aQ&Ct%rw7I3`*XzbjQ0k zdUa)#4%85}F>z&pw-nzVK1I(L+`K^FCmKmOh}$#@B#wI3;*C3Xh!i-Si~b5J*GFvu=tTfsktKHk)_E7 zXh}*=4L5N2GyVRLNx~DJg~t>T@H7f!=*@aAOLVE|D$$lar4&T^0{x+H5K4hlNNPzu zMTc4no}x>=lpoOqvD|dtrhvG+9}>Gdq@)jNhD2aIqcpiJ5>~KEN$|htSR=A9*0Izi zf8C61`W&OB*u6jl@j9e)jF(~)Vgr+PbetnmicJL@cu+^z86MWr!(;FZ67&2;udsvE g=_fq>d<}BgAe?{~cu97URz}HUB}(new+Y|=0xNH!-2eap literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$1.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..7991f4abc294d8010f21cf8480828e4cc970a7f0 GIT binary patch literal 704 zcmbVJO-lnY5Pj*c?Y351>$iC9!793bo)jsFg4l{s={?c;$H*D_X! Q{gJm-ib^C>Bu2CP332PM!vFvP literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$2.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$2.class new file mode 100644 index 0000000000000000000000000000000000000000..182218386cec25137a75995208012f1eee1172ab GIT binary patch literal 768 zcmbVK!A=`75Pg$fk|iW0gcfMwm;(X9lF*(~RY(XV)TBZR%H2t<#Ast9+smO})t)MG z-~;+mh}jKNk>CO=`MsHu{q$yL|2^E@1NefSG71Pv2rF1ZkU8enz8YI|Gc#KD%|s5o@RCscrnK_k2|spw*Wy;hiO|z{;H}cr?nUp-ip_Sn zHH;7u0^w{4Wy0~>MLL9y*Zj1Ggz%Kz6KXxB<5P+cU(PLvi2A@XK1JHm(E*2{_V^MOh2 zSe~oQ^42RmIn36;{hjG?VjQnwVS!M&&|2ElL^vm13ES_QZ2RO0%lzA9UxrIqVXko0 zL5P4k+S}iuzo0+)jVfai#8}2EV8lTxwlUoH8}drjFUS1&iN5FFvJi5 literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$3.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState$3.class new file mode 100644 index 0000000000000000000000000000000000000000..f733672bf9f7a62c0586ac902b5c0ee62330f80f GIT binary patch literal 769 zcmbVKO-lnY5Pj*c?OLnW`u%b2!794e>Zu}vD2S~HmEO}fbR*kDlB@@Rm7W9-{s4cJ zIJ*@T^r8!SZ)QjyZ)W!G{pA(F0XB-r!7IQoVFG!Edha0$jkMZ19S#y6TcPYQk)cq@ z$cAm%H~KEpO0@MrbR2hrA%7&5bjJ*ro2^@Z&%>CjVc2m-s$uh@^=HLuy;}B3%(kQwSIMX+%nk3wRH?LdpT}KpWSV~#eHTf~aQKf_ z8cl|BTewIMuDRhO;e;WnVl|y-RZ)RqdYou8kc!6)fz#vRF)VD>evXu$cXVR<;#{Vd zSAJQ_Zn_8R?@aY$ZD|i<3k;P;f)=%~@N&ijyr8t2p;u1ys@Zk{$ zTiYA#8SE*$F-@2UBP?Tvu$09CW+?~e=uGBNp?IDSHH}5WRBnejedbjPk3>0qDb0UV d@;;S3EM>Qru|n);-c~89P_#yjlQQ|v_ycFe#D)L> literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/MicrophoneModeState.class new file mode 100644 index 0000000000000000000000000000000000000000..6c31c2705d4d68e9afee5db63b656ebecf563ed9 GIT binary patch literal 1781 zcmbVM>rc~A6#w0}TenhROyn&J4%vn>#>>Y5dB|gNh@rS-@lzQUN=j?Gju1cjCn+RC zBpN>ZM;Xs;r_O*MwkGYlxA&aiJ?D2GKYo7w4qzI21p-7Fl8O+*4B6ce2N~C_IG*QZ z_Nuy7G3?5I)yx=n^{A5BG|R5@{=l(~O=r*0Jl!)G!gHo=dJ7C)$-<$2tY<9U-p^>B zYufv{e5x3wD^96{jv-!f%DPq5U6Ui%;3Zo>qFdtEQ^*k8G`s_6@3rodj%TOCcV0pfn zq?&9Bj3F{twrXv^TE_sd*ty0ba|^_>qB&K!Y^<3)c|A9bnsMG*3~JuC4cG4T&z%WU>VUqk&PSNoNx3AFkiFQ=t^bPxG zBIys(j1+u*F1dvg7t$B#yMn;=g@5#C=#Ls`VHS^R_k`XMRryD*N)r~M50)h<(vh4V z8#u?k&$Rp>l8mQ33Lhyd;8_gF(L3jx%u{PoL(!Eyqzokb0^Q+n5K7`HWUVBfqD3o( zPSK`ai;rMJSg09qkwe@(aEaaQQaVtnxkSo%PGNFdWGrHdg5axVtPofPFEC#N->!K! zeu<${{JwaO#2MsEjFjS|(m9f6Xt_kH6dwzn_3b`BdvB$hf%^~E0i53G88Hq z+pv2l_^mKq$DLrv9ZDtL5yQzw=Z4?&Fy?9)cAb%G*gEh0ovOaqYV-mG41rWm7{%i} ziVWNTp}hhMOfd&W z(Z?*s(j*TshYD3y+Jy{il+V+qp|MCYrQ0D)uX(lnBS8jVO!;q2-Y1iXrOByftPuK> O*;Xkl5=ns&?aBvVPNQ1@ literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$2.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$2.class new file mode 100644 index 0000000000000000000000000000000000000000..63ac04d3d1c8aaf6b1d0c5b53e0c91b61d9ae724 GIT binary patch literal 732 zcmb7CU5^qm6g_1I7!ZVI6~B1o0rqQz_=Yhgs0j%g6AbT#X_)HJlD4xC{;J(46Cd^m z_@g#^XCRS8AEZg|IrpYLz4xTQ?|u~OjRO``n_Wx4d!Kl9o5HM6? z!J}=gl_;aiaB+mjkfHsrKKcs=f1)F5xG|GTd`>q@VZQQZLY3A`uXwWHMrQfG=(|{2 zhO1*H7>*d4pM;Bb^o1L~5l$G=sCF~sx{3-6^0;hLoF+Az@|F)2>&vj~6 z;-k!ZJvns$Dl?oW`k+>cwq*G3ZHC%ZDPblFw^rCPUL9xRVEh^t`V!g7ViAuBYs7}| z;SmOB=N^479r&t1`SjA(CwVVfNph?*Y?MeYH;-|D}OgyES$z2j=*SuEwhM<5y hO7#OJZ?EK`ou7J!=Y)RV+Y4eXVlN3XZc^VlJ^=1UwSE8q literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$3.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/SpeakerState$3.class new file mode 100644 index 0000000000000000000000000000000000000000..a3021a2dc6c6220f4905168c5759ae93a38db58c GIT binary patch literal 727 zcmb7C%Sr<=6g}yT?O3bU*0(OZu=O!&-Bm>J0YVj_(tX;7Hablt$++;VbS1d(1NpTuZBdvB$hrO6bRw&z#WhhiU zv|;OB@H=5zjyu7SJ(NniBZkwB<}H8VVZ>EGY&j!Uzj4w0KUHO~QEdkZ82pZQgBxr3?gL1~`NvOC}=}NftkqQK48m({+US$)BW< z2$5*`?2j^@+fJPU6V{|Xz4xB;+;g7u^5f^%?*Ja5AVWYvf~X*f5JP(B!@la6wW{k@ z)!n*o)eO6~S2tC|t{>J^?Y*JDGaSv;U4tPsZ`!82$k3B49_UB9YU%c#s=1D7?_~?A z?FeCq6+|F2gbV9i`OWpEBExv`=9gqShN7UIV?@^SODh{|rS&}D?NkuuyW)$|)*9c4 zDY%7h1}U+3o=_#1wnh$0`3bgOQZ-ZIQKbF*yewOY0bu0dAw4IIG3r?dW&2wUs_XdMfux-Qf z8o;RK;#4dHG=aoiAD<5ZN$PP=Qda}fe%{Qa5u)=9rob>wt6`G-kx$U|1-CEJ^NCgr zGxQC4X93b5qRA$B`do4gIVPmf(SHen>kI$r&(e% hPs4iDwvTTy`&2o{0j`>4}8vChEEY!CgadJ1~z2lS(& zyDAjag9~%cy_b8>+&TOC_5K0i6q`k4;N{_$kVTGRyZ1Z{jkMZ19S#y6TcK=}$WW+c zWW$b;Q6vmQ?p!MAE*LI%TaWyShcQ=C*mg#$=&aeANu_ptR__J~82nf~xIBssJ2Or) zRR6oU-X*by9teiTmQ>;{8TEwe@Lo)nN=x^7+~r25`LyV}p|lM3nO9~g-wHR>gL`iH zNH}3=yjV;9sVOQj%uf<+22$~uA#i$P48zK9{jXg#-qwlfiyN7)S(=)BnEFcZxK{mG zTk>^sEj2Wi5~dMzYlXc!LV-Wd8qE&Ql@m5hm6oe{*(tFy5ZDgB3lJ(%P(v#r9AK;G? zXSW3fJ#-=S-V8G@leeE=?;ik;u~kM6UJ-r;c@!A7d(XqrNUNRG;UM9$70O15424QY zHheHLiiBY(oJb|zDZ|-r=aE10Fy<->@12n(AuBQgo6%`m}$B8xrsd&r~I6ZcTVQIJV*Do5s*NN$iE19lYnYetI8cXlE zRQ*_6GIo3|HC!tt%tg$t6}E`Ysa z3t$vyFh{YH@c{FvQno;+ltYd9A{}}hmMNxk2ZZUES1Y~{m79 T=x4jF6RQ#1AjEl<_RjDd+uf)D literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger$3.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger$3.class new file mode 100644 index 0000000000000000000000000000000000000000..8de098efa7fe9a002ed617e77ea5609955d5f535 GIT binary patch literal 697 zcma)3%Sr<=6g}yT?O3a=_5D~@w2F?eT}2B;L8u}q-KTAsMy3fQ85e$)t^^l;fFC8^ znHCgu(Lm0*x!iklbMpE1{sG_=n?>Z{72uaJg*?Mn_jwQ+X|;1Y>?b_7LfI&hp-{=t zh7U$YkuVJTGpVFIXSmpDKk_FY##}|=y)#lpjqCPADz&3Vy%Qi{@VnX#3MevcPu6+D zu>9Y}^$v-(bYC!(+fs?!WY`tvfp=rdRNK18;|@16J&%*V8%WDgpK#=p21DgWxPk89 zal?ng2}AA0TIx?tQG#K1bkL?R6^|JLr$@#xEbi3*+C}a6Ix#(QCDSoWW0Mb3U+Eo} zsuycZzK*V?f@`IOX~o=HVGG!p*tMhPA*SiS)0N^BW{67^9m9u59PI9GvNy2TtYVfh z4@NkTIl@vF2PmVG<$&oNsuVBKrpIB4FqPXUPTRa{;e{xNAEm`#O5Rw>!*W)&f>mNa Sn{ADvDn;wWXjW+MjK2ZE|EHV) literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/enums/Trigger.class new file mode 100644 index 0000000000000000000000000000000000000000..7e3cbb270cca40f0df9a8442ff4658a67457530b GIT binary patch literal 1639 zcma)6?@!ZE6g{u&)~ys66F~-|;E-)7V<0GY-~jotWQt*vWbsoOb(EAY={iFEWre8tSC0pMu@9>G3f?F75kP`cA#kZR! zhU7b+JIENqu!KPccQ8VmRL#1jGYlqEUAgQY9P3p_l`)Dj33nBY;~qob-()vQ5!(J# zGn@MEdxphsB{od0(NMeSI?{CSzzJM_(tncl@g+|p8%9LN1V6NgzCrV0^vamxptNt$ zLKsmQDFk?p%qqxWj?3*P++av2Q+@@fdijkKH|mF^b$`*Y^w-Uk1Klob2PVy^-SYiW z%a@?$YSEjtWa{g%4RZ>tc)th!z-!k}ND4j;1<>gMpf@SHpThn?YKSAX%O1FoYAK?uS zkfm;QE%hi6jq}zdj}WbAF$acu8cmYrkKDq*7u>$W&?g!(EYLUPt_8?{oNgt-_2-r& zP{<_ZR;0U!)nu^THCI(&!nzL58J|+?DP$1YEK#*#Ip`>6x)M?tiA=|1n8e z=2^H*5dqJmfJ$%9g{)9ZP$STmJf#do`U1nDZxAYh7Nk-|Y@w%A3AWHzx|Sc&1hLuy z?@~YEE4iqqa^s>IyQ(bjF(vHkneROo4v$DCH5fDM&caO zC8jE|X|avuIeIRUs>Ei3Z9Ff{CvdBm2hVg95v%df^3~T@Z literal 0 HcmV?d00001 diff --git a/${project.build.directory}/classes/bzh/risotto/dualsensgui/exception/OutOufBoundException.class b/${project.build.directory}/classes/bzh/risotto/dualsensgui/exception/OutOufBoundException.class new file mode 100644 index 0000000000000000000000000000000000000000..7a6729aa8396951802a8e6eb6e82c9a02c8ff272 GIT binary patch literal 898 zcmbV}+invv5Qcx}v`d=OlAdUrmgT%jNtO$Q5J9~t0x42x5k-->bh1ujv{^^Hc7@=n zxJf0DcmN&>F-`(SG~BQk_CMb7_s@*K|M>C^z#}|#kYU(*&(C-e@purN>O{taBO{|w zBtlezoJmWpFw?GUBOcvx+4wp+s4HJQi`tQ1{z^Lz~r0M{}R1 zMO?Lr6^4r6`gfv>YYc0iOg&|^r}}-bt4thvzKb;mR(G*MTh;QmO1O?~23M7_29(l6VpGk1^>Y;_^no}+M!85SD|27Y0Fp~n^9LJZ+SPOlX6@2c+}yEwDJ5f zr-w3Sc+&nq-zG!;%)TFut3^81JkeA`s@0fb^_9>=6~5*P9|%Z8ZqBlPTNdyDbs|}Oo>5@24O%k@egX(a B$ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/${project.build.directory}/classes/main/resources/application.properties b/${project.build.directory}/classes/main/resources/application.properties new file mode 100644 index 0000000..508d8da --- /dev/null +++ b/${project.build.directory}/classes/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=dualsensgui diff --git a/${project.build.directory}/classes/main/resources/log4j2.xml b/${project.build.directory}/classes/main/resources/log4j2.xml new file mode 100644 index 0000000..6ff0743 --- /dev/null +++ b/${project.build.directory}/classes/main/resources/log4j2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/bzh/risotto/dualsensgui/Command.java b/src/main/java/bzh/risotto/dualsensgui/Command.java new file mode 100644 index 0000000..a42475c --- /dev/null +++ b/src/main/java/bzh/risotto/dualsensgui/Command.java @@ -0,0 +1,45 @@ +package bzh.risotto.dualsensgui; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Command { + + private static final Logger logger = LogManager.getLogger(Command.class); + + private Command() { + + } + + public static String run(String command) { + + StringBuilder res = new StringBuilder(); + + command = "dualsensectl " + command; + String[] commandParts = command.split(" "); + + logger.info("executing command: {}", command); + try { + ProcessBuilder processBuilder = new ProcessBuilder(commandParts); + processBuilder.redirectErrorStream(true); + Process process = processBuilder.start(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + res.append(line); + } + process.waitFor(); + } catch (Exception e) { + + logger.error("Error while executing command: {}", command, e); + } + + logger.debug(res); + + return res.toString(); + } +} diff --git a/src/main/java/bzh/risotto/dualsensgui/DualsensController.java b/src/main/java/bzh/risotto/dualsensgui/DualsensController.java index d36f78c..f4731be 100644 --- a/src/main/java/bzh/risotto/dualsensgui/DualsensController.java +++ b/src/main/java/bzh/risotto/dualsensgui/DualsensController.java @@ -1,8 +1,10 @@ package bzh.risotto.dualsensgui; -import java.io.BufferedReader; -import java.io.InputStreamReader; - +import bzh.risotto.dualsensgui.enums.MicrophoneLedState; +import bzh.risotto.dualsensgui.enums.MicrophoneModeState; +import bzh.risotto.dualsensgui.enums.SpeakerState; +import bzh.risotto.dualsensgui.enums.Trigger; +import bzh.risotto.dualsensgui.exception.OutOufBoundException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -15,41 +17,147 @@ public class DualsensController { } + //info Get the controller firmware info + + /** + * get the state of the battery + * + * @return the battery level + */ public int getBattery() { - String res = run("battery"); + String res = Command.run("battery"); String value = res.split(" ")[0]; return Integer.parseInt(value); } + // lightbar STATE Enable (on) or disable (off) lightbar + public void enableLightbar() { + Command.run("lightbar on"); + + logger.info("lighbar enabled"); + } + + public void disableLightbar() { + Command.run("lightbar off"); + + logger.info("lighbar disabled"); + } + + // lightbar RED GREEN BLUE [BRIGHTNESS] Set lightbar color and brightness (0-255) + public void setLighbarColor(int red, int green, int blue) { + isBetween(red, 0, 255); + isBetween(green, 0, 255); + isBetween(blue, 0, 255); + + Command.run("lightbar " + red + " " + green + " " + blue); + + logger.info("lighbar color set to: R {}, G {}, B {}", red, green, blue); + } + + public void setLighbarColor(int red, int green, int blue, int brightness) { + isBetween(red, 0, 255); + isBetween(green, 0, 255); + isBetween(blue, 0, 255); + isBetween(brightness, 0, 255); + + Command.run("lightbar " + red + " " + green + " " + blue + " " + brightness); + + logger.info("lighbar color set to: R {}, G {}, B {}, Brightness {}", red, green, blue, brightness); + } + + // led-brightness NUMBER Set player and microphone LED dimming (0-2) + public void setLedBrightness(int brightness) { + isBetween(brightness, 0, 2); + + Command.run("led-brightness " + brightness); + logger.info("led brightness set to: {}", brightness); + } + + // player-leds NUMBER [instant] Set player LEDs (1-7) or disabled (0) + public void setLed(int playerLed) { + isBetween(playerLed, 0, 7); + + Command.run("player-leds " + playerLed); + logger.info("player leds set to: {}", playerLed); + } + + public void disableLed() { + Command.run("player-leds 0" ); + logger.info("player leds disabled"); + } + + // microphone STATE Enable (on) or disable (off) microphone + public void enableMicrophone() { + Command.run("microphone on"); + logger.info("microphone enabled"); + } + + public void disableMicrophone() { + Command.run("microphone off"); + logger.info("microphone disabled"); + } + + // microphone-led STATE Enable (on), disable (off) or pulsate (pulse) microphone LED + public void setMicrophoneLed(MicrophoneLedState state) { + Command.run("microphone " + state); + logger.info("microphone led state set to: {}", state); + } + + // microphone-mode STATE Toggle microphone usage to 'chat', 'asr' or 'both' + public void setMicrophoneMod(MicrophoneModeState state) { + Command.run("microphone-mode " + state); + logger.info("microphone mode set to: {}", state); + } + + // microphone-volume VOLUME Set microphone volume (0-255) + public void setMicrophoneVolume(int volume) { + Command.run("microphone-volume " + volume); + logger.info("microphone volume set to: {}", volume); + } + + // speaker STATE Toggle to 'internal' speaker, 'headphone' or 'both' + public void setSpeakerState(SpeakerState state) { + Command.run("speaker " + state); + logger.info("speaker state set to: {}", state ); + } + // volume VOLUME Set audio volume (0-255) of internal speaker and headphone + public void setSpeakerVolume(int volume) { + isBetween(volume, 0, 255); + Command.run("volume " + volume); + logger.info("volume set to: {}", volume); + + } + + // attenuation RUMBLE TRIGGER Set the attenuation (0-7) of rumble/haptic motors and trigger vibration + + // trigger TRIGGER off remove all effects + + // trigger TRIGGER feedback POSITION STRENGTH set a resistance starting at position with a defined strength public void setFeedback(Trigger trigger, int position, int strength) { - run("trigger " + trigger + " feedback " + position + " " + strength); + Command.run("trigger " + trigger + " feedback " + position + " " + strength); } - private String run(String command) { + // trigger TRIGGER weapon START STOP STRENGTH Emulate weapon like gun trigger - StringBuilder res = new StringBuilder(); + // trigger TRIGGER bow START STOP STRENGTH SNAPFORCE Emulate weapon like bow - command = "dualsensectl " + command; - String[] commandParts = command.split(" "); - try { - ProcessBuilder processBuilder = new ProcessBuilder(commandParts); - processBuilder.redirectErrorStream(true); - Process process = processBuilder.start(); + // trigger TRIGGER galloping START STOP FIRST_FOOT SECOND_FOOT FREQUENCY Emulate a galloping - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = reader.readLine()) != null) { - res.append(line); - } - process.waitFor(); - } catch (Exception e) { + // trigger TRIGGER machine START STOP STRENGTH_A STRENGTH_B FREQUENCY PERIOD Switch vibration between to strength at a specified period - logger.error("Error while executing command: {}", command, e); - } + // trigger TRIGGER vibration POSITION AMPLITUDE FREQUENCY Vibrates motor arm around specified position - return res.toString(); - } + // trigger TRIGGER feedback-raw STRENGTH[10] set a resistance starting using array of strength + + // trigger TRIGGER vibration-raw AMPLITUDE[10] FREQUENCY Vibrates motor arm at position and strength specified by an array of amplitude + + // trigger TRIGGER MODE [PARAMS] set the trigger (left, right or both) mode with parameters (up to 9) + + // monitor [add COMMAND] [remove COMMAND] Run shell command COMMAND on add/remove events + + + // power-off Turn off the controller (BT only) public static DualsensController getController() { @@ -59,4 +167,12 @@ public class DualsensController { return dualsensController; } + + private boolean isBetween(int number, int start, int stop) { + if (number < start || number > stop) { + throw new OutOufBoundException(number, start, stop); + } + + return true; + } } diff --git a/src/main/java/bzh/risotto/dualsensgui/DualsensguiApplication.java b/src/main/java/bzh/risotto/dualsensgui/DualsensguiApplication.java index 5f7ccea..3c2729f 100644 --- a/src/main/java/bzh/risotto/dualsensgui/DualsensguiApplication.java +++ b/src/main/java/bzh/risotto/dualsensgui/DualsensguiApplication.java @@ -1,11 +1,8 @@ package bzh.risotto.dualsensgui; -import org.springframework.boot.SpringApplication; +import bzh.risotto.dualsensgui.enums.Trigger; import org.springframework.boot.autoconfigure.SpringBootApplication; -import java.io.BufferedReader; -import java.io.InputStreamReader; - @SpringBootApplication public class DualsensguiApplication { @@ -16,6 +13,7 @@ public class DualsensguiApplication { System.out.println(battery); controller.setFeedback(Trigger.LEFT, 1, 1); + controller.setLighbarColor(255, 0, 150); //SpringApplication.run(DualsensguiApplication.class, args); } diff --git a/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneLedState.java b/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneLedState.java new file mode 100644 index 0000000..5003ba3 --- /dev/null +++ b/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneLedState.java @@ -0,0 +1,23 @@ +package bzh.risotto.dualsensgui.enums; + +public enum MicrophoneLedState { + ENABLE{ + @Override + public String toString() { + return "on"; + } + }, + DISABLE { + @Override + public String toString() { + return "off"; + } + }, + PULSE { + @Override + public String toString() { + return "pulse"; + } + } + +} diff --git a/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneModeState.java b/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneModeState.java new file mode 100644 index 0000000..a0e5358 --- /dev/null +++ b/src/main/java/bzh/risotto/dualsensgui/enums/MicrophoneModeState.java @@ -0,0 +1,22 @@ +package bzh.risotto.dualsensgui.enums; + +public enum MicrophoneModeState { + CHAT { + @Override + public String toString() { + return "chat"; + } + }, + ASR { + @Override + public String toString() { + return "asr"; + } + }, + BOTH { + @Override + public String toString() { + return "both"; + } + } +} diff --git a/src/main/java/bzh/risotto/dualsensgui/enums/SpeakerState.java b/src/main/java/bzh/risotto/dualsensgui/enums/SpeakerState.java new file mode 100644 index 0000000..719f781 --- /dev/null +++ b/src/main/java/bzh/risotto/dualsensgui/enums/SpeakerState.java @@ -0,0 +1,22 @@ +package bzh.risotto.dualsensgui.enums; + +public enum SpeakerState { + INTERNAL { + @Override + public String toString() { + return "internal"; + } + }, + HEADPHONE { + @Override + public String toString() { + return "headphone"; + } + }, + BOTH { + @Override + public String toString() { + return "both"; + } + }, +} diff --git a/src/main/java/bzh/risotto/dualsensgui/Trigger.java b/src/main/java/bzh/risotto/dualsensgui/enums/Trigger.java similarity index 89% rename from src/main/java/bzh/risotto/dualsensgui/Trigger.java rename to src/main/java/bzh/risotto/dualsensgui/enums/Trigger.java index b52ab5d..55db1a1 100644 --- a/src/main/java/bzh/risotto/dualsensgui/Trigger.java +++ b/src/main/java/bzh/risotto/dualsensgui/enums/Trigger.java @@ -1,4 +1,4 @@ -package bzh.risotto.dualsensgui; +package bzh.risotto.dualsensgui.enums; public enum Trigger { LEFT { diff --git a/src/main/java/bzh/risotto/dualsensgui/exception/OutOufBoundException.java b/src/main/java/bzh/risotto/dualsensgui/exception/OutOufBoundException.java new file mode 100644 index 0000000..79ab498 --- /dev/null +++ b/src/main/java/bzh/risotto/dualsensgui/exception/OutOufBoundException.java @@ -0,0 +1,12 @@ +package bzh.risotto.dualsensgui.exception; + +public class OutOufBoundException extends RuntimeException { + + public OutOufBoundException(int value, int start, int stop) { + super("Value: " + value + " is out off bound (" + start + "-" + stop + ")"); + } + + public OutOufBoundException(String message) { + super(message); + } +}