From 4fd583d9f957257631d20f4084dad50077e433df Mon Sep 17 00:00:00 2001 From: Zhuyahong Date: Sun, 6 Nov 2022 15:59:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A016=E4=B8=AA=E9=81=A5?= =?UTF-8?q?=E6=8E=A7=E9=80=9A=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LoraGamepad/Lib/serial_base-win.dll | Bin 0 -> 325120 bytes LoraGamepad/Models/SerialBase.cs | 347 ++++++++++++++++++ LoraGamepad/ViewModels/MainWindowViewModel.cs | 2 - LoraGamepad/Views/TProView.axaml | 47 ++- 4 files changed, 383 insertions(+), 13 deletions(-) create mode 100644 LoraGamepad/Lib/serial_base-win.dll create mode 100644 LoraGamepad/Models/SerialBase.cs diff --git a/LoraGamepad/Lib/serial_base-win.dll b/LoraGamepad/Lib/serial_base-win.dll new file mode 100644 index 0000000000000000000000000000000000000000..4305ab43721773336ace9a88b858da8c08c15c70 GIT binary patch literal 325120 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 z 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�vH9hU%0 zMtLc2|7>b<4nQwY1twsfdoSae6X0B zGw=sVe`@kQ;H2O7&NF$0CK`Et!W>ciUpt`5c{o!M)z7ZX@HaRHIJR-qphazgjPxjmOS6ZGkd;FHTou)9YWQHK&G6BD$Mda+sBm^OBD$XU4ctD59? zY@RRx_j8%aHmV#yJyvLIb~m+VvtBRTRZXa@7x|?q=<>0usjfRGf@D0rs;zz^M|spX z*XiBmd1SKgkwOY>SDGKE-Ce_skt{7ss~P%O9-qJ^vgRFjkJ%2qG=&?YL z1$r#dV}TwE^jM(B0zDS!u|SUndMwamfgTI=SfIxOJr?M(K#v7_EYM?t9t-qXpvM9| z7U;1+j|F-x&|`rf3-nl^#{xYT=&?YL1$r#dV}TwE^jM(B0zDS!u|SUndMwamfgTI= zSfIxOJr?M83p{f|>9h6EfBt#JwSOFa#s2ByKj#nM^%g%t2)Fpz;!s8UmmlZSy^{Mq ze<=&R@sX`S(Z{;-z?eStE>lj(gx zZ`d&X8k+dVQiFU0aXDv1HnoK$D>Pl5yszkuHZ*)=^K#CkjPq5Qmb56t^lVaa>`^=}=zR#dT;8^viTyMVM+j#bNp(hl2n)!ak&KhVgTd(X8gy zWt@GK9w40Gc>_2HbB3nhsSjbV=cZ?KNBVGpZ%cO{p<+K~EU3)Y_2+Dgiz1AO?ZBH$YFHpj2WMZs_R;E46fg z+|U~*Dphtsf!YimK1r#n(FLj;`plt9%^8DC=v#*=RefNAQim&bEGRE8P`q@n65xP} z0<|7`2^fKUBXkS+bZmjz3jGY+ihs#erFNdC)cA1)sv7#h4BYrvAEDIkpfCRI(9$E7 zir|hy=YpZ|R6#EScZq!H&p|uxZP3U}!s0H04hEOvE`^=~*5cj(y$M{0doy%9n2vlk zOR1f}KnV*SCT{#op`*d4_?JTu2M35g(7E7v+*QyMzzE#c(3RjY+zIGcz(U;Xq1S++ zxHm)p1R}^(M-eY*#J>bO4AkK+g`Nbif@eMS3Gfy++y)&rTdCJ^N1=~{x8T_hoivAh z*#~`~Cx9sKYUmcQ0e3re-?`{aIf+7#1tr1*T?f|UUJtzjyfFgXLZ1fPaBqVSpQqG$ zxXYm{z~#8tL+=&fZin_dTB%LAOQCDQ3fvo@zXjE}w?lWTBCpY*6nYH!0R5|>XMpq2 zVFPrZV@NaZD(H*ga?-2jD>WOOM%ZfT7I3SSd1#*n5cJx=rD)k_E1NV05 zXJCZHdmQ!z2jDJ&4g-I{R;AFx!9dXmx)Kb{|4wi;0gSzZE*Pn(~H!6nX+^$3Fr60T_&X zGxQ}ehdQ+#y0J#7nfSLu&s|1&AnaD???4&;+o11)7jdgvrFw%Z^eKT32Qx)CXeF2< zwuQ#PQuq_l9qX_u?kKbsl;U0weHbi+e;agA96gA)9C{2m3;$~98Q?118=!ZBM%-JW zpMbTZLp^$dkH#YhddPBYbr5kuPXse@C!iOCD%=~PKLty1w?p3n)wtCPC|Du<(91zW z_@VnW5Et%p=<_Ej^(gLb(7&FHeI{T-=;lUr#=RB#dJ}E8_(S_7XeV)(K)19a|6q8a zm2Ko5?keaT;DCwnL(f@-Zn!r<7px}jxT~QX!8Y8Rp)Z0raBqX|w1zT?yA*l^_y~6u zvo2dI>1U9X*r$1P>gJO`vy!4{*0b zr+$t4gS#5q0xlIE=yhP`Vb~4&JJ2?nxS$KqB3${^BkyePUsSAzAp6VR`KMzJ&W0#Jv01N3U}D7tNg z-UeRBy&3um*h<)v@6$Dac98@933!9J+M(})iMZ89`U|iWcR92MoQ9kP^m=d|?yb;g zz`e+6hrR@&@Na{@4W7V%JM=S9Dl)I3o`N#mCD37DFz!<5XmA!X%b{a_KslH42K@<6|{q5Kj zIh&yscTlIWLpAhju$^>mhQ1B9iq4xUx8PR7mP0QE&*R<1K_y#P#?yoUY+%)#9bExMPs4n0eur+}^SZ-D+8 z+=>qB$4VUuK9w{=?*p&nZiha1ALA|wdp|Y@n+RJCy$~EGaY0KSpgiDT4&4YM_-}>Q z{Dkr^aY4ua6#0^N=$T-tlx^r1uo3rG=wHAa=(8O<@ImT@#0x!3fO{i!=dILb+~v?O zJw&=BAEDN!_P=RJX@h{kCQHVHbXxEW%!poq0}Cr6n8mvDp&ze z74%zRBL179?}K~sFL{!9!DiusE(0GBR|0w!C>MU{!k<&$XJJq1kHJLTTcPLtl5&W9 z19ai9DCfchJq64>iaG)plOcJN8JT3pnMoMB)J`qdw4$9`T$|gA?&L2+{xNOQn_6tAO5Jo9 z>)cA~)Z%VhQKQ9n+OlqLi$3>r-Z=@N>|(Usr}sYL>DSM9&U@bT{?6~5^UnLeFmK!N zN$5Vpe8Br))z9fKz6LH!F^5(Y4@@8%J_*ZzLEdCJ{1NiWa_D-IwTJh?i+{;l!kgju zQJ1U(n~pMe_%OWVCDxRz599yJIN}pfjF4x%3EF!=!^hS$Erxe;%HR#b<#!TXR0AAwO6#K+-lXa_zG#jDIiya}#AyYMzx zgC4^B;9j%`ABPFlg-^mSyhd*E5qR?`+wfNSJ9GpuUgy+`M)7g@V4C%UxBZD+qQpA( zg+D@VHs&7u+duP6;8ywqZ711x4f7Kw-exS;66ZUN5gKCO8t6xD_%M7LRaVdr{H@U- zjxQ&MY=d|MC1}TzV-VG72JP3toydcaz!M)ah+!E|u0eEv)F7r2kL6dZ8VCCG-i!ZoOsIyU%Y6vn6F+vp_ii^~k+B6I?8 zf|sKZ`6Z4QIz^&_y8JXTq1A)&7i*t zID%&5)9`I{OvW>dc+eu56L>i~PPrN0h^A3)flJUK%B}FLXq5J&Z~)DwJPw~kJMank zEQ%9P5`N-x#!-$nY(X{|8+;KRT1GtZZL|k3t}qA(vf;yU6wN3lwkr){3#!D2;m7kC zcYFfQzM6XF#0F>2Cja;v*p5;hD*>(7kpC5w!&TQZruZbhvVho_pH}#}>zIr9B)sx^ zVvudZ&)vYdlu-^}M<->>&^gy2gv>d-_(p?B^ZjClccD>y7!IMsa$lG`kN)D#(2fq^ zeK3al@d>zlK7EjRgKwfP%7w)sW}*>tXofc<7yYtACz?hce6S78WxV1rg=WdIhW9Su z*t8Re$B+RLW-g&4cpL0SNAU^xHVV;4)2Es9=m;^_z(>$Q89#gl z*%2Kpogd*fsdd)_$Yi5?ZhYHn`jqa z6d8mY9cJGMOrWE*nS^tea4h<6h4-Pult&S|a!xdG`Lvo&me^}3X6>qIJh}%(`9M-`4 zO`Ja|x7eA7x3MPizS|Ar9(0g)BCs7jB-?~PL~u2k4DI08rtfaKkL~S3K!$Mfwcg?$= z>O|oHnoW5eK8dE$egZy=Hq&MjzJ#(VAAw){67zW@ZSFLPZD=Px0v|z(s2_y`=p^mO z;gcvv`w1xSr7zSmK^HnqoiKa`9m0>mH_-{&Ov7J%nfUSM`wXH1c{p!};U%qpvs0<&4W9Yc7^N-9^bP{icRVbTwYG5a-lx@NUYzMxE4&o&ZJ&YY*avB=NOWKj3P02e@9$wOi=Hew^MpnFS zFY6jb@KN|QYQ-nvwixFtd>sA+Me$;vLEM76@HXf|{dga2MF;Rv_*;~~n|cl68Wh}2 zAK_bQm-KxGu@vpV+u)06C*IW0wF;VskH9BUB|Zt?L}hp}!1o5K!&~77#CbU`BhhIUn@KM;cpPb;+@bBY%@5uP!b7%(TBk;;^ah}9m-~dWeCkZe6 zHrFJ03#>)McpvOSN2#BH|M(roNVWqnI>21Tn_&gogRg<#LtU~Ctb2^_Q+x#WpniND ze&liHHr@;uqXT#=d>tK><^PlKZgd>)gRUXwED8nev*CBEZNTYxyD0#@NxLY56B_jnlOmxkzLmLAvu4F zIPnqq8tRwjPjik!U9vuGK_jvb{4pBEkHG9hT!-LIa1k1l_2C^z{2hISJt&1w!0aE< z4&DsEfXeWa_Gh?0z)Lox5Z?Mv^l_M+;BD~p$mGbMYkUNrK)dj!pU`*Ig%{6pJ^xeY9_>V*XMQ3dJ`L~r8EZ;R4VP2PhApgt`C9 z_ch)O7b6Sa3OAraybnHxtoRX_|8L}9)`9mRJ3b0ej&Lk|&97MF$2f1`6Y%L*7#F#PA;{!ycN3XR}L;Hzj9pPp$Hmt1BPv#-t4If%F5C97r`#b&(ZTc{N;IqPzx zIE z4dW&6oMRLx@RAWUYc6vG-f*o^wBaS6Lx=E^fdcx1m%Q{k>fe~9a|yl-FZnCfg_ped zdL#G!Svs$~!6;7RCD$SAJn{hlh@yDOZ_FjS32q!U%or(f_Sis2=r^NivM zUb1Yyk>>P~x`z1!N7162I48i5Ev6hV zIS*wo&eC}o-h`L@2AYMJd;)p!lK+81c*&WcW_k^cj6^`Q4BBnEINWu-prUH%TmsVw;07*lxtRB-Uok*4&c*p^HQVm;lr>K?WD~(d>#$qM_^X5QRHziX@ZMUVNsT_ z!dg_p-!=H)ZWP8x;UUy^3o*kJXzmhXwi?CtXzt1^oonz1@R9+Pz)SvjbQmxB1C+u` zzJiY7C38#2!>TNu^YBG@$y-qvFS!lv!b^S=rSXypbP_N5GAdl1rSrmNj5j_4A4lf3 z)PXM}3qB1mDK!c!-VB$c7~Td0Xb2yMooE;zhtH$J732`kFC$lY8w{Y6Jj)8hPGq%F zA3l#Z^PF=8W|fm4ya|2^9jA^JehrWSy;7zN@39{m?uohL4 zPak|3#n!Mdd>V!5Zxa3y9jxYj2tT=+{^BKz(Gk3)hDPv`_oL%@$#0=CyyOcgoBJ2Z zw~+}id37c03op4A72qYeqeXbhE@Z_^K8GstlK+m{@RE6JsE3!l1;z1_PIM4&T1($i z*iPT!gXjc44&Ooc+nAs0jG`1}b1!3q0d!;|^9??Sj^WerIvX+Ith#?9Op{`BjA6`^NJX{Z(;myb$+e3;66pgbo<;xT!iYZ0&<(cg@iam;>iUn7w{S{q`I~AW%yx_`Ay$ZzxioaES zCNHzyrZ`RUnM*U}_b4t^9Q#D3{BcFUqDAre-)6S=D%LArp?GvgW_whzPH~xHzM@g_ z*XsO`P<&KzhvF8+<%(Zc@&BdA|9rJ)QRkbmVw<8%u|n~D9e=#trRL1IR47&{ZdME` zKB)N3t1|VUP@fMe{zNgQm{v5Y`g0V^6zdejisSM8-(r`F?|dDvCO?y>T*Z{?=N|QW zy5cOwIf|cCjH>fwL@}%wRJ1ErDq0m6Db7)xsc2IClWPCC;t|Cm#owwp*Q(D&itniM zh3fP9%G>*GH+@kizq0;8)=F+pj<8*Lsw|iDf=lFx(cDvIh5ET7N3?zHRGEc&5I5$C z(8Z_9zD-{vwCDSqQ)P!JYrP;xBu^{rC#R#7o$b%mbxtNPQ`b3Xn;n0BWmDHVnfW?( zo%5HSn^V_0nRzvJos-GK)OF6})|b_=UJEw+%G~8m&5dPRi@R1^$(vBblJW8~jkmCP zx1ZWn$!l5ot@il#6OldAdq z@z2%nMvWJB1;i_Qym}xlyi`nl{DMvHI<3^@^jCY=G<$;XW!pK#>hh|!<&~dWn91d5 zjbvL-iX4nK`RUeX&A)x4)6=Y#hv;8P*+w!yUcXTk7h4>a-rB8h_13am%S%eE71rDN zH7wf}ymy=ZcJZ*W*kSi*O$|ZU>2Dvqt;B9CUsfjf{f4aZ-q($tR%1?1F}ZX$H@Je1 zcfH^3wi3r$j`D0)af8=eXFc<+NVk?R%WM|jtm1l)vmtPn3Ki@wmgf|2bJqo3XW8yp zMTPSJYe6O>*B2YTsA0ivzyqV6AnM`^&Mb(DVO# zriG>t(t=}^97R0=VnbH3w#8Yyb+YZOWRz^>C1r9Pe!@8Vg8mQD#PaN7pZ;E~N#^79 zDAv)&hl|2aERmQJ{ct?c70Vo#mH*Gh7Z($91)8}u1_a@`H<-l|D;Fq z!MdVHLLkq4*f#XuRB^VkHMyH6yei4i&H&T^UB zD;#U-|MZ;VpnFog>g#Ib_(C|>o7@)4Q<3;ucCo)sz7BAFxAzg^na9bzFz>&5qhRJp zZqCVWk7sfR($5mpPCwV4GrsY&Y$YSVE>ItuIN-SwqQ59l9{>`QV<;|OJf4&Hy=O^z z$wte9%y(q&hiPH8T!}vUEye}Uf^OWE|`+?WgB^Atka`e7wVDZ^`m&frI5Kr4U!FWN-;`@}ibL{Cd(vOIGM>}Ea#zcC8nh4Ijtb~%uCMAn z-fa`}Y7(83>3NClxV+mMolV;(eOk?QNuGJ`V|{LDV%R2q1tBMmohB@_Ag@m++mG@6 zceB5Ji+oY>sTU4&8A{9lAh(?T)xD=(rxvopmvKHi?ZuoEm!OZ3Bl&GU=>+K)YBE1B z&;o<~fg2cM|0XT;!5a`W&p3BvCdqj?b?D!AUpnL5@qUgqe(Jc2v0CXn?L05W>_p3{!YxK5gVySdoTk-xI;c#%`Idxy+sP)Ra z`R^&O%iJ^zeveQZ3RS!O-fiWfTFsZaN8~MOvUs`Q*{E(({fqbq#`>`veZ1>IcP{Q# zmkIjA|9F>%+{Y2{X|?WpUheGD?`JH=CRi&-e*M9+ zEe%zg&+8A01vw;(J5b*1k+ZEfpu2w)@@BNjD@3u}8uapPp`G{CvGAL;Z7z|@Zq&~K zysz=h);95`I-?_?xg1=(a5#s2Eb%yddYkIq4b6Vd(d6Wj!Z!JS?-u!lg9zP0H?REu z+{7lWsm1O0Hp#bt^Dd1uYIs?o?w}*++#;V}JZ5zG^#>vxM{TJef2i;ZJqT&FJgyku zl-cPiVqp}x$fP0h!|_j!yPDm#TiJy|(M4&-1v5vdBaNc@ly_+2a)YDZuW63DEe&F> z%n>WV!BdL@-8+NQyE1da?WOyyizY`)z{ksZgY|4&og*7{H_1mEd$JsSIc(K@P96fV z-w>YzK94)73hLyzsP>zQUf#de>1(ghP|o!8m+~0L&ETx(DUAL^Vwz6oTqNYY9o9(ZSQ4UnYN|5p+WPHm$|a5obCWmjwa4& zZ)Ht9d#d)1KadhH%H#7Si|+X3W5rFPDqDZ>WYhfhUO!h6wd90RqAORuH`bMP;+oS+ zIgj$Zk3#WBz1{7Bpw=j#iGKrX3FWp$n@WrYWLGIVOjte1~5D`-yK zngx6%@-l$u8qzOkG4NwSc?^{lSt`V@a@4@+UEp0r23b=bVsejNr)p1SU@8Ms88}}V z2%oQpr`ny$z+ZC)0wxjW7vK|r-u?OY>1S@g=^URY8d4_thT)9%-@Se6^Iua2_zged zpzxVd@s0!vEN3adFq?NkvdwpEj(jc6)Sq)?;CJ8qK~Zt2(PM7mujIL3Tav$Eo+aO` zHPw3S`1|xF`5UU2-&mM$=I=t9>YN^KZI|S4*8=&)OE3Cp5&vvJYuw`5Zl-~zz>@rC zf78u@T9?-74BXi0uJwBZ-umE;+;HCP3^dMbS&(n$j=^281%ew-KN?M$%|$_fb08>h zGTvuvpUT(wW6uEh*4%Y&SDz{IYj-ts6s^wYceikB(Vzt;HlDt@T)!=++m%|2<}rKZ zf0yJt11p4-O3u44+q=iQO+5uYuAW#=q9@g3-dni0VsBz^YVYV?d#o)Mj}6DhdJFqPeM5a?eT5u# zsDG@#a3C}=G%z+$I2hu%x%>0>7tn7y9OpOhATMgC=c#C3yS+WtKGH4{yt{((R(hY? zY3?lS40pD5#yShS3cF%mNxk=>?xF5fcV16nPpGGjNXB{!_qz6mh@-79#gQxMw~HgU zk@37iJH1W~=IyudZ^1E~WxCIl(ZR5y!9d?eG>KN^?>&MIMa&?8eTDuCmTf5u3 zW8D?{k@EK1_r~`Q>wO;EYuQ&p_Felz`y%8%+8gg3>P_?}8HJJF(cX0LSg+{I?KAb| z^_lw$`Yeo$m9g=WAvrb#F~WNRfUiULHZ#^Tf-!oY*I7W{6z0t5(e|X2s5zQ9-1%mJ~ zb5oR9J3<}tj&z5)v!;vxFM#fv?qs*Q$H&Y`Gjn`o(Hs-j95I7^MAQ^DM=eonv?eM) SPW_q6z*GjNGVuRu2L2Do9gFJ# literal 0 HcmV?d00001 diff --git a/LoraGamepad/Models/SerialBase.cs b/LoraGamepad/Models/SerialBase.cs new file mode 100644 index 0000000..f7cfc1d --- /dev/null +++ b/LoraGamepad/Models/SerialBase.cs @@ -0,0 +1,347 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + + +namespace Autolabor +{ + +[StructLayout(LayoutKind.Sequential)] + public struct SerialDevice + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string port; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string description; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string hardware_id; + public UInt16 vid; + public UInt16 pid; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string serial_num; + + } + public class SerialBaseException : Exception + { + public SerialBaseException(string message) + :base(message) + { + + } + } + + public class SerialBase + { + public static IntPtr DllImportResolver(string libraryName, Assembly assembly, DllImportSearchPath? searchPath) + { + + if (libraryName == "serial_base") + { + + if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + if (System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture == Architecture.Arm64) + { + + return NativeLibrary.Load("libserial_base-mac-arm64.dylib", assembly, searchPath); + + } + else + { + return NativeLibrary.Load("libserial_base-mac.dylib", assembly, searchPath); + } + + } + else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + if (System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture == Architecture.Arm64) + { + return NativeLibrary.Load("libserial_base-linux-arm64.so", assembly, searchPath); + } + else + { + return NativeLibrary.Load("libserial_base-linux.so", assembly, searchPath); + } + + } + else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + if (System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture == Architecture.Arm64) + { + return IntPtr.Zero; + } + else + { + return NativeLibrary.Load("serial_base-win.dll", assembly, searchPath); + } + + } + + } + return IntPtr.Zero; + } + + [DllImport("serial_base", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_enumerate_ports(IntPtr excep,IntPtr[] portlist ,ref int portsize); + + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_create(IntPtr excep,ref IntPtr serial,string port, int baudrate, int timeout); + + [DllImport("serial_base", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_open(IntPtr excep,IntPtr serial); + + [DllImport("serial_base", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_close(IntPtr excep,IntPtr serial); + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_is_open(IntPtr excep,IntPtr serial,ref bool opened); + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_write(IntPtr excep,IntPtr serial, IntPtr data,int size); + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + + private static extern bool al_serial_available(IntPtr excep,IntPtr serial, ref int avaiable_size); + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_read(IntPtr excep,IntPtr serial, int buffer_size,IntPtr data,ref int recev_size); + + [DllImport("serial_base",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_readline(IntPtr excep,IntPtr serial, StringBuilder data,ref int recev_size); + + [DllImport("serial_base", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] + private static extern bool al_serial_delete(IntPtr excep,ref IntPtr serial); + + + private IntPtr _serialPtr; + + public string Port=string.Empty; + + public int Baudrate = 0; + + public int ReadTimeout = 80; + + + private const int PortInfoBufferSize = 32; + private const int ReadBufferSize = 1024; + private const int WriteBufferSize = 1024; + private const int ExceptionBufferSize = 256; //固定尺寸,不能修改 + + private IntPtr _readBuffer; + private IntPtr _writeBuffer; + private IntPtr _exceptionBuffer; + + private static bool dynamicLibLoaded = false; + + public SerialBase() + { + _serialPtr=IntPtr.Zero; + _readBuffer = Marshal.AllocHGlobal(ReadBufferSize); + _writeBuffer = Marshal.AllocHGlobal(WriteBufferSize); + _exceptionBuffer = Marshal.AllocHGlobal(ExceptionBufferSize); + + if (dynamicLibLoaded == false) + { + NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), SerialBase.DllImportResolver); + + dynamicLibLoaded = true; + + } + } + + public static List EnumeratePorts() + { + if (dynamicLibLoaded == false) + { + NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), SerialBase.DllImportResolver); + + dynamicLibLoaded = true; + } + + + IntPtr[] portinfoPtrs = new IntPtr[PortInfoBufferSize]; + + IntPtr _tmpExceptionBuffer = Marshal.AllocHGlobal(ExceptionBufferSize); + + List result = new List(); + + int copySize = 0; + + for (int i = 0; i < PortInfoBufferSize; i++) + { + portinfoPtrs[i] = Marshal.AllocHGlobal(Marshal.SizeOf()); + + } + + + bool success = al_serial_enumerate_ports(_tmpExceptionBuffer, portinfoPtrs, ref copySize); + + if (success == false) + { + for (int i = 0; i < PortInfoBufferSize; i++) + { + Marshal.FreeHGlobal(portinfoPtrs[i]); + } + + throw new SerialBaseException(_tmpExceptionBuffer.ToString()); + } + + for (int i = 0; i < copySize; i++) + { + + result.Add(Marshal.PtrToStructure(portinfoPtrs[i])); + + } + + for (int i = 0; i < PortInfoBufferSize; i++) + { + Marshal.FreeHGlobal(portinfoPtrs[i]); + } + + Marshal.FreeHGlobal(_tmpExceptionBuffer); + return result; + } + + + public void Open() + { + + if (_serialPtr == IntPtr.Zero) + { + + if (al_serial_create(_exceptionBuffer, ref _serialPtr, Port, Baudrate, ReadTimeout) == false) { + + throw new SerialBaseException(_exceptionBuffer.ToString()); + + } + } + else + { + if (al_serial_open(_exceptionBuffer,_serialPtr) == false) + { + throw new SerialBaseException(_exceptionBuffer.ToString()); + } + + } + + } + + public void Close() + { + + + if (_serialPtr == IntPtr.Zero) + { + return; + } + else + { + + if (al_serial_close(_exceptionBuffer,_serialPtr) == false) + { + throw new SerialBaseException(_exceptionBuffer.ToString()); + } + + + } + + } + + + public bool IsOpen() + { + + + if (_serialPtr == IntPtr.Zero) + { + return false; + } + + bool opened = false; + + + if (al_serial_is_open(_exceptionBuffer, _serialPtr,ref opened) == false) + { + throw new SerialBaseException(_exceptionBuffer.ToString()); + } + + return opened; + + } + + public void Write(byte[] data) + { + + if (_serialPtr == IntPtr.Zero) + { + throw new SerialBaseException("Serial is not open."); + } + + int sendCount = 0; + + // 分批发送数据 + while (sendCount < data.Length) { + + int needSend = (data.Length - sendCount) >= WriteBufferSize + ? WriteBufferSize + : (data.Length - sendCount); + + Marshal.Copy(data,sendCount,_writeBuffer, needSend); + + if (al_serial_write(_exceptionBuffer, _serialPtr, _writeBuffer,needSend) == false) + { + + throw new SerialBaseException(_exceptionBuffer.ToString()); + } + + sendCount += needSend; + + } + + } + + public byte[] Read() + { + + + if (_serialPtr == IntPtr.Zero) + { + throw new SerialBaseException("Serial is not open."); + } + + + int recvSize = 0; + + if (al_serial_read(_exceptionBuffer, _serialPtr,ReadBufferSize, _readBuffer,ref recvSize) == false) + { + throw new SerialBaseException(_exceptionBuffer.ToString()); + } + + + Byte[] recvData = new byte[recvSize]; + + Marshal.Copy(_readBuffer, recvData, 0, recvSize); + + return recvData; + + } + + + + + + ~SerialBase() { + al_serial_delete(_exceptionBuffer, ref _serialPtr); + _serialPtr=IntPtr.Zero; + Marshal.FreeHGlobal(_readBuffer); + Marshal.FreeHGlobal(_writeBuffer); + Marshal.FreeHGlobal(_exceptionBuffer); + + } + } +} diff --git a/LoraGamepad/ViewModels/MainWindowViewModel.cs b/LoraGamepad/ViewModels/MainWindowViewModel.cs index 98d056f..e233b7a 100644 --- a/LoraGamepad/ViewModels/MainWindowViewModel.cs +++ b/LoraGamepad/ViewModels/MainWindowViewModel.cs @@ -1,9 +1,7 @@ namespace LoraGamepad.ViewModels { - public class MainWindowViewModel : ViewModelBase { - public TProViewModel TProViewModels { get; } public MainWindowViewModel() diff --git a/LoraGamepad/Views/TProView.axaml b/LoraGamepad/Views/TProView.axaml index 8b6835e..724cdb9 100644 --- a/LoraGamepad/Views/TProView.axaml +++ b/LoraGamepad/Views/TProView.axaml @@ -2,16 +2,41 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="400" x:Class="LoraGamepad.Views.TProView"> - - - - Walk the dog - Buy some milk - - + + + +