From c547dda8dd6eb736df42244bbf2c218d369a6f99 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 8 May 2020 06:43:39 -0400 Subject: [PATCH 01/18] Add 'USBSER' switch for using external USB serial adapters --- README.md | 8 +++- config.h | 1 + ini.c | 15 ++++++++ main.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++--- midilink | Bin 57376 -> 61488 bytes mlinkutil | Bin 18168 -> 18168 bytes mlinkutil.c | 15 +++++++- 7 files changed, 135 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index acea90e..4bb9c35 100644 --- a/README.md +++ b/README.md @@ -92,9 +92,11 @@ The 'midilink' daemon currently supports following switches / options: TCP - Works like a modem with AT commands: (ATDT, ATBAUD, ATIPADDR, +++ATH) + USBSER - Connect to USB serial converter + MENU - starts based on /tmp/ML_MUNT, /tmp/ML_UDP, - /tmp/ML_FSYNTH, /tmp/ML_TCP used with MiSTer - Menu to set mode of operation. + /tmp/ML_FSYNTH, /tmp/ML_TCP /tmp/ML_USBSER + used with MiSTer Menu to set mode of operation. The MidiLink.INI file: @@ -200,6 +202,8 @@ The MidiLink.INI file: #TCP_SOUND_CONNECT = --> optional WAV file for TCP modem connect + USB_SERIAL_BAUD = 9600 --> Set USB serial baud to 9600 + DELAYSYSEX = TRUE --> This option fixes "Buffer Overflow" error on Roland MT-32 Rev0. diff --git a/config.h b/config.h index 28001d1..54d3903 100644 --- a/config.h +++ b/config.h @@ -14,6 +14,7 @@ static char * midiLinkINI = "/media/fat/linux/MidiLink.INI"; static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR"; static char * serialDevice = "/dev/ttyS1"; +static char * serialDeviceUSB = "/dev/ttyUSB0"; static char * helloStr = "MiSTer MidiLink 2.9a BB7"; static unsigned char test_note[3] = {0x90, 60, 127}; static char * midiINDevice = "/dev/midi2"; diff --git a/ini.c b/ini.c index 7eef2eb..9055fc6 100644 --- a/ini.c +++ b/ini.c @@ -25,6 +25,8 @@ extern int TCPBaudRate; extern int UDPBaudRate_alt; extern int TCPBaudRate_alt; extern int MIDIBaudRate; +extern int USBSerBaudRate; +extern char USBSerModule[100]; extern int TCPFlow; extern int TCPDTR; extern int TCPQuiet; @@ -193,6 +195,14 @@ char ini_process_key_value_pair(char * key, char * value) { ini_int(value, &MIDIBaudRate); } + else if (strcmp("USB_SERIAL_BAUD", key) == 0) + { + ini_int(value, &USBSerBaudRate); + } + else if (strcmp("USB_SERIAL_MODULE", key) == 0) + { + ini_str(key, value, USBSerModule, sizeof(USBSerModule)); + } else if (strcmp("TCP_TERM_ROWS", key) == 0) { ini_uint(value, &TCPTermRows); @@ -383,6 +393,11 @@ void ini_print_settings(int p) misc_print(p, " - TCP_SOUND_CONNECT --> '%s'\n", modemConnectSndWAV); else misc_print(p, " - TCP_SOUND_CONNECT --> Software\n"); + if(USBSerBaudRate > 0) + misc_print(p, " - USB_SERIAL_BAUD --> %d\n", USBSerBaudRate); + else + misc_print(p, " - USB_SERIAL_BAUD --> Default (don't change)\n"); + misc_print(p, " - USB_SERIAL_MODULE --> '%s'\n", USBSerModule); misc_print(p, " - DELAYSYSEX --> %s\n", DELAYSYSEX?"TRUE":"FALSE"); misc_print(p, " - MT32_LCD_MSG --> '%s'\n", MT32LCDMsg); misc_print(p, "\n"); diff --git a/main.c b/main.c index f8c280b..32ff62f 100644 --- a/main.c +++ b/main.c @@ -43,11 +43,12 @@ along with this program. If not, see . #define DEFAULT_TCPDTR 1 #define DEFAULT_TCPQuiet 0 -enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeMUNT, ModeMUNTGM, ModeFSYNTH}; +enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeUSBSER, ModeMUNT, ModeMUNTGM, ModeFSYNTH}; int MIDI_DEBUG = TRUE; static enum MODE mode = ModeUSBMIDI; static int fdSerial = -1; +static int fdSerialUSB = -1; static int fdMidi = -1; static int fdMidiIN = -1; static int socket_in = -1; @@ -74,9 +75,11 @@ int modemVolume = DEFAULT_modemVolume; int midilinkPriority = 0; int UDPBaudRate = -1; int TCPBaudRate = -1; -int UDPBaudRate_alt = -1; -int TCPBaudRate_alt = -1; +int UDPBaudRate_alt = -1; +int TCPBaudRate_alt = -1; int MIDIBaudRate = -1; +int USBSerBaudRate = -1; +char USBSerModule[100] = ""; enum ASCIITRANS TCPAsciiTrans = DEFAULT_TCPAsciiTrans; int TCPFlow = DEFAULT_TCPFlow; int TCPDTR = DEFAULT_TCPDTR; @@ -96,6 +99,7 @@ static pthread_t midiInThread; static pthread_t midiINInThread; static pthread_t socketInThread; static pthread_t socketLstThread; +static pthread_t serialInThread; /////////////////////////////////////////////////////////////////////////////////////// // @@ -1143,6 +1147,30 @@ void * midi_thread_function (void * x) } while (TRUE); } +/////////////////////////////////////////////////////////////////////////////////////// +// +// void * serial_thread_function(void * x) +// Thread function for /dev/ttyUSB input +// +void * serial_thread_function (void * x) +{ + unsigned char buf [100]; + int rdLen; + do + { + rdLen = read(fdSerialUSB, &buf, sizeof(buf)); + if (rdLen > 0) + { + write(fdSerial, buf, rdLen); + show_debug_buf("SERIAL IN ", buf, rdLen); + } + else + { + misc_print(1, "ERROR: serial_thread_function() reading %s --> %d : %s \n", midiDevice, rdLen, strerror(errno)); + } + } while (TRUE); +} + /////////////////////////////////////////////////////////////////////////////////////// // // write_midi_packet() @@ -1286,6 +1314,7 @@ void show_line() void close_fd() { if (fdSerial > 0) close (fdSerial); + if (fdSerial > 0) close (fdSerialUSB); if (fdMidi > 0) close (fdMidi); if (fdMidiIN > 0) close (fdMidiIN); if (socket_in > 0) tcpsock_close(socket_in); @@ -1363,6 +1392,7 @@ int main(int argc, char *argv[]) if (misc_check_file("/tmp/ML_UDP_ALT")) {mode = ModeUDP; altBaud = TRUE; } if (misc_check_file("/tmp/ML_TCP_ALT")) {mode = ModeTCP; altBaud = TRUE; } if (misc_check_file("/tmp/ML_USBMIDI")) mode = ModeUSBMIDI; + if (misc_check_file("/tmp/ML_USBSER")) mode = ModeUSBSER; if (mode != ModeMUNT && mode != ModeMUNTGM && mode != ModeFSYNTH && mode != ModeTCP && mode != ModeUDP) { @@ -1380,6 +1410,7 @@ int main(int argc, char *argv[]) if(misc_check_args_option(argc, argv, "UDPALT")) {mode = ModeUDP; altBaud = TRUE; } if(misc_check_args_option(argc, argv, "TCPALT")) {mode = ModeTCP; altBaud = TRUE; } if(misc_check_args_option(argc, argv, "USBMIDI")) mode = ModeUSBMIDI; + if(misc_check_args_option(argc, argv, "USBSER")) mode = ModeUSBSER; } killall_mpg123(0); @@ -1397,7 +1428,7 @@ int main(int argc, char *argv[]) if (!misc_check_device(PCMDevice)) { - //misc_print(0, "ERROR: You have no PCM device loading --> snd-dummy module\n"); + //misc_print(0, "WARNING: You have no PCM device loading --> snd-dummy module\n"); //system ("modprobe snd-dummy"); misc_print(0, "ERROR: You have no PCM device --> %s\n", PCMDevice); close_fd(); @@ -1441,6 +1472,13 @@ int main(int argc, char *argv[]) else baudRate = 115200; } + else if (mode == ModeUSBSER) + { + if(USBSerBaudRate != -1) + baudRate = USBSerBaudRate; + else + baudRate = 115200; + } else { if(MIDIBaudRate != -1) @@ -1614,6 +1652,49 @@ int main(int argc, char *argv[]) misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, midiDevice); } break; + case ModeUSBSER: + { + if (!misc_check_device(serialDeviceUSB)) + { + if(strlen(USBSerModule) > 0) + { + misc_print(0, "WARNING: You have no '%s' device - loading --> %s\n", serialDeviceUSB, USBSerModule); + sprintf(buf, "insmod %s", USBSerModule); + } + else + { + misc_print(0, "ERROR: You have no '%s' device! --> maybe set 'USB_SERIAL_MODULE = ' in '%s'?\n", serialDeviceUSB, midiLinkINI); + close_fd(); + return -15; + } + system(buf); + } + + fdSerialUSB = open(serialDeviceUSB, O_RDWR); + if (fdSerialUSB < 0) + { + misc_print(0, "ERROR: cannot open %s: %s\n", serialDeviceUSB, strerror(errno)); + close_fd(); + return -16; + } + + serial_set_flow_control(fdSerial, 3); //CTS/RTS + serial_set_flow_control(fdSerialUSB, 3); + serial2_set_baud(serialDeviceUSB, fdSerialUSB, baudRate); + serial_do_tcdrain(fdSerialUSB); + serial2_set_DCD(fdSerialUSB, TRUE); + + status = pthread_create(&serialInThread, NULL, serial_thread_function, NULL); + if (status == -1) + { + misc_print(0, "ERROR: unable to create serial input thread.\n"); + close_fd(); + return -16; + } + misc_print(0, "MIDI input thread created.\n"); + misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, serialDeviceUSB); + } + break; } show_line(); @@ -1635,7 +1716,21 @@ int main(int argc, char *argv[]) if (rdLen > 0) write_midi_packet(buf, rdLen); else if (rdLen < 0) - misc_print(1, "ERROR: (USB) from read: %d: %s\n", rdLen, strerror(errno)); + misc_print(1, "ERROR: (USBMIDI) from read: %d: %s\n", rdLen, strerror(errno)); + } while (TRUE); + break; + case ModeUSBSER: + //This main loop handles USB serial + do + { + int rdLen = read(fdSerial, buf, sizeof(buf)); + if (rdLen > 0) + { + show_debug_buf("SERIAL OUT ", buf, rdLen); + write(fdSerialUSB, buf, rdLen); + } + else if (rdLen < 0) + misc_print(1, "ERROR: (USBSER) from read: %d: %s\n", rdLen, strerror(errno)); } while (TRUE); break; case ModeUDP: diff --git a/midilink b/midilink index 7542eacc36b46e686f350e50b2f0933defac6a73..8513e7a7969e58da4eafc71a17b12d6df5618d5c 100755 GIT binary patch delta 28424 zcmaKV4O~=J`v19iW&jBllnjw@W6Uov*$OAgPA zIm>38#Tz|35HsLG!Fs-W#eltwc)nNl< zv89yW$XGF@!x$^2^d`ovlqN8?iqhdwJEe(?t)p}VW95`4F&o=JnVT7_pfs7WO_Yvg zY%`^L#GAf+Z~kkYY??WHuGv06&UF?N{J z@r)g%bb<}GK$%+@tE1G+*cnPQU=@^3Wb7QJlNhU~6o%DE>8*@ipmYjjmnglBu_j70 z8T*ma+ZnS{I+d{wN~bXJIg$+ZNnBYHk|+k zjAc<;2pgbu5p00c#jpWN?}80bdN*u<(tBV7lor7TC|v>@p!7c20HsS|1C-tm8=&+7 z*Z`#u!UiZUh7J6ix3OU*jBOymGS~p6%V7hQmcj-oeF!!{>BF!AN*{p@P-=w@P`Uy( zKFdE z#MR(SabJJFC@fzPmd_2#XNBc6!}8{^yeTZN56dS6^EOBk8+<`NDlE^!@~+-~;iRy< zJuKf8mcI~|uMf+gMZSDaoe*ra?L-*za9DnCSbkSnerH&IYgm3uSbkGjenVJ(U08mV znzt$aP#T6<8kS!imd{5%T=J|iTxM9_9F{kQ<@I6tgiziF^@m=d{;)g?%e!1*>JQ7? z!}3jG`3qtB`mp@juzVfmZ2?O>8iuGvKD?#7!f-po@>|35Tf*|2!txu!^6SF#s{(l& z4TI7!#L}?*;;?*vSbla`etKAba#(&`SUwf`@CGIH<7`)Ae}UBYBd>Vmezo_6Makmn~On!}2v@`RcIz_ON_aSblR@z9KAN9+oc)%UdZQ z?Em60L{V72AS|C7md^^yXNKj?VR;kf@o#*qw1ABoEX;S*##@}JYg%i$lsX5;MF@2c z9j`SBKZtK64z+2e{9cRmOtuMNj?+qa;w_&GzRl=OHbmCwq{D!YTVoO;-%+V1;=L&r zd8U=B`Z5pFTN-g-k-H1%a@T7=`ZlBZXblyI6$VdE1{vlNz|C4IjM0A8;-JZwiAS z=+y}c2f0zfGWIas8@<4!+$^YK9S*~61veJpc4qDEwop4Z1EEn7jtkjLkM^NEY%YtV zBa5`-m-U?%M?na)78q*)Go(|a=cIkUi_n608lRqg!Qzz4RGq%o%S@a!zQW?v20H9z z1#)8rQQHzna%tI)M=B!HIqAWQqu1Er4;%|BvK@S!#aY4X9I>2QxwV6tiiR4?Wn5OR|3IdM?kw;s7*JF)H-2pQX%l92_!S>7MPVFtw92GbtOC zMR989Xry=j8Y$jOYSg4NN5iw<+lNXkv}0MMR?G4nXJ=sqj0Hzcp5sIgM!`aOr*zyUTy!;7 zMYl&p#y6#>$7D&*RWL&dTDYo1++s+yCDq^P;-(EuZ*DktjUOC+d55dX%%?|uvp6qt z^PP_DS%1l4lDG0e&H{;P{s`Qw!XI5fnm>0nny)kzuedX*yq*+7@^dha`IS29F_+q^ zdn!|`+@wbvNW$$68A5@ek>dKqmYF?k4*2C~I~nva(bhgu&98` z-_wN-(j8_E7JV1ivwnL0bDaGa%OWuz1+;m${{DIuLZ(K{j1i8jF5f02y zDOBY&ViLn-mKH@*8ivRI3cXb)wY#V=dCZhz@+cNZ{VK6EHPtrD%fCuK?{hDw_sgdC zi>@d$1MmOaZ*geX6q8fsG*XoBeDkP4t-gIJfm+A7)Jos&+xXLc1FCY)o}MLf8kYV* zeenvN^k%5a?R)E1QC!+qg0oc12O z8gAqy_3u3JuRYd%dTUOSwq7TdD0QY37q6HFLteTM-mQ%qzP#kFtJE)Kn11<6>kTda zZzjE&r`W*}&vRFU`2(JL&2L=O#bgPWt}!mVJ%-asKcPdI^ruZ4N!z#8RhCK4 zlHBR~O?i$w4VWt4*y5~RM&9@ro;ct}Uuum=j=AKl_se`c*`aN}U3Ew_Ej;OIYazd- zlb%(4+7Iw`EOzdp>x?a6YZa~Jnl#e={$F!V1)hHUvUq-JU)i4bTFBrZXl<~ykQ@Et zX-#@eL!+xS^WG#|&%nK({=la@@LrU;1n;`NjV`N_V|())N4dxvG7L;AZOoJ<-LPpv z&#+m`OZ~FreT#Fp5*BErb>9B4X>kCy60l&%R2qQUiUAD9OX~u_y8#P^Jrx01K48Hx zX-fc>i=5}ygl1m1Dw1Cw^FH~*#F2cO z&1u-fP20DsIt?9{6eKoZ=I9$ z({*#&ri47N!4bdiwlVU2cUvU<1BiwE=gS4Y>cq2HZz6^Dnh!bAkElc6YI% zK9`r${bbu@*Ruj`+CCR;LU7M(EY9s{6E`3jB51D*5k}i}$?T^aD}RP{Z);^%pPbX3 z1}{5TpxJhSyA>5~F{3=wNI9OSV>?_m6K&+Csy6~LG0(9x14y2X>p-3oiAddjd5-#w z0t%D3cPxH+ZEJzxlb`PHB}-8%LrP+0SK^V5~55#&#{igqe)B= zkp^sapI`1c-smbwD7Lb(++~gQcNeD!aZ_)jt13z>6?*l{i0i*MQgz-OwYK%SKDn)% z;I>cEcC#T^T{#$@IZi8OnnM5F6TfX<1k0QW(FcSr!6G#iDakN}y=atZCFb~03gZi&rcRljU` zs-iwafL$)wZBp9v&+D`oN8J9a_INbbHvjlVS9Qk4gBM*f=JaD}f@COwXR_L>4vvK< zWYSc3ee=wohcR)N*~z35yZQsTE4}wNry&w-0$l1+!<6I7B>m|j{m4pXf3-YqtC3qg@}gu+v#rc~;cPvlDpo@f6@$j3>|05gKt%_ZAy%-^|rp zd1qK;aw>n>D?otTYx1g?g+-@?C`jFPH>gGWgD2g>un7wPXb$ zlf1W=^!Y?UpBkfN_z0a-*KIn;Fa&wMPoCWEYStJ}&LyqgZBx`n4v58$Jr=!H~7*#;p`2qTPK35}s;OAg1 zywu>?bCs8t`k4MIIE~8=j;nuyQz1AFX5X~<X~D*KnTZ-I6cXm4QqK&w}1&w-Z4%`a*H1lqx%jbX2}U`Jy}o})3&rc|o* zo<{lu2>jm1r6~3sq&LL{1zH36Pk`&#?^_yO#hFEzlyhnp^!$4gO}jIWHo6uo6L)6K zxF5lIDB6YUFJ0%ZG}3%Uy*&$uxNKKF{1<3`x98+Rjy>KK&K;faLNj)ku? zycd})Ct82k#!Qwb<&lMfVdKUQQX z$#2cq7$K-BTu4%yRC!cB4?aspd`v$fg zbI0()7cN$PAJ*o)K5{?w5Xnm~d4n@EFKzL1cZBb>@Y2)XPg=6TySnXbTH2+MOf+cb zKcw`0>Qo4H`wmz?9|3kWcMN!=RwI@gBX`%X@X2f2bjg{Q(;#9QI(co|Aw=F%y=KR7 zgmkypt0Jy#i`=8zT?Dh%MQNmY5Hw*D#SkR0xY|6-cDt7>n)ZTtX_9yLFDyFEdm6LD zUaa^qTw2owR<%%xih1c~@4GEUkbP>~2iMCU621Jth)xz66BPY6MfR9ql|3d*c3x`1 zdU4ftvM>G8(=YoMo?ps-#zV3TitLg-T=u_vRM{I_KY%SOc3>h01Vu+#9Pt(?Xsp;| zj)#q3onb}&4<6MF0%rIu?S8Aj}|E#3ql3VLFlE)iuD8`Z`(@*#H0 zafL>q1D>^0eBKpW(Y9b)n1p!N9=Au?tHsFTr4nT&tGWR-tkfYmhtQF6`*^7!w4&uD z3$18vVP2S*vX$!Vf^tLb4^RoT*f$pQMnQHkkQk39s7D)K`FuBKln_P_%=Rp@0xv>l z^mPa`6qqvs%wb^EBNQ8^4=DmD^$f);zYP>C3|7>O$*U1uOzvgq_$T+)!v+whAqP z4(@jsTYqRS5WI4AcRZAxo2~91QlA}crb%3-n+v)rz%MS053F!_=@C@FsxVf0kHgq+ zv&YqVWxjj)$|n`d=n&;Xg)$;U*=SQpySl2In=lvEA+U4dp;pHpp$eIvjwg9(N}%n$ zmK5%l8@s|4JqFmIqR#@;ujoWzg7$D6n0`GE1m;YZO=Y*g3&X^ebg2pdbC>J?tB%)e=wl{BJ0 z_Q#tyY7GKw%w}A=TjnJh%7JE`JkZ@l4>C^0V*%8ts{JQpVEx-SNS3R1PP){Dk z*6&iZ*UUIC#gwE-#`Ng|LDXI^?={0RlDg7!N%eYz4hscdO7T6DllBb^v1F9eqa@(+ z-jrO6BfsQ|Vpk*c&@m6ODk|O7Z6>#^W2s)**~#m<$zD0r)@?%EaMjC?JE!b?4{fV| z;#$Mx+Om^SSxImh-rjp<6_*yN_=+Ixmfp``T+>4|W0Z60AXeY|KH?iQPE*(wp7po> zL$topWiJS}|IuHz-z)zaLu)!bKzRFmUDSe|IA1LbRA_P3J;Y0$h$FU?49X)daYnU$ zUU?N-O0C=!Xyqqe)W|2qHJL+g)exuOywy(q2wZ{#yR#9$YnTH#|KF|hDeg1W{ z&x4i~hSRB(Fx7;x)@HxQ_xy7vRs??)LhL4{R!ybM2j@u2QnF4}!hZ!I?L78l|z5O;7=D+OW- zM6Za9Ms?Ac%fy(ooglAEc@kYGMV?X{Yx{4l<)jb6&YE?7Yaa+}EhilWMXEl@SZtxza?*zqwMtJ46_Wqvbr0Jjt zw)GM)!Jg%$TYw3+wH}z@1j$K8V1ga{Auz#?<)j;dQJOjrbH{t_+g#P?*@$b^Xzi*% zYw;Fptq(!WszQRO_guVkMW+cpTZW$9`aZS0EK4ViJSkeHC&nFbXA_ilYAQDaHmaR3 zJ~@3P-`p;4oBp=$iQfNnZ5Ffd7%{A~mjW$j_|(PBLwflcoH}!V`2$>G%o=qQ zgM)sPeA_X)=)4W>PAQ|QRP$`@e9?QysPUPYC`@bAy#Y>=y-`h^kwb*%l_T2!>e8D1 z>Ddhg(c^?JT3j$=_&~2KO&EABf+L75J~?Af%6&LU8+*~8@+Z)rMBTX|e!FOv#C?r# z#qVdNtjGji#Ki$djlwMhZ{oM%)KB3kvviF*W;x8J4WS^MG|4bQZ7zSNwh=xfLKrB# zO2aHldti=Bdj~FK815C=E9tmA#7oP>M`w;q*^AS{TliT?6BlE-pWu}*wS9-BS+)R; zddK1x1t)zh?wfhjok?vQ1!nq3J^A$K+c?wa)6ctD)#;WA>HlijQ%-A{^DVJQXx6qC zlYMHW+TNTbRv!!hR2P8!O&pLlX4v9~B5)UJL62?iy>z6eD|!X7L#rrcjj}llxCkR) z9MxiOg{Q~SF0{c<=Nwy^iie7*~sZabV;p|pv%Hx_uAhD2T_sLoW`F< z1h)1gSJfJD(U^`JZ zk(9?Wa5VY2YbpYFuWSkkH5?}!W+9~v&b5`tr5XLkVyrkuY>YN)cY9?|s}3sWq=~-j zW66dD%n0XOEsjfT5~#tPSN>W#L!7oTL!r9gN6j3)k)jP;)q)JXHeFCQ>5Hus!R8AO z^+R3X@|714{%z&@Ko}C7g{LVo2UT)ZS=unY3Q?Pq;vvi@_6(t@#xI{zIPCx@I_mm& zCBv}|_`AnKkY!e0GW+z!(B)6(D;r(+RAms+mz7j-f`|S;;)biG?K#a3>$GDO3#*|p zG5Lpw8$;=1eVNcxV=GI^ab8=d9=v>;>y>j`i>me>-B3mwcA6rT$?+X& zvN%0qof>baPNj1xi*r+4e`iMp;Gf}E6&b~fjTUEVM$l+Hva4Gy_aWe$GJ@qiaz_CE z_|q2WmJFROU_Bm0SZaaSf!LZ68G<(k;KMeN%}v7nxD(m^?9K$ROP;~bb9R6AM+5Ln zptpy?_u{lJOL}zEq4ijdKRMrFqqvfz%}T8ScQwwqw$KGD+}`4)eSI`cY3N~(-ThNb z#I=YhvZ^d-^+U9tlk)p?LKf0NSh3>*-}nos@4(>*Ct3Q`fsj~vhz5cZxfWZe9ke)W zxE!)%SoU@-ML6jpao}vjtR|1z^qVTRyUjwhk&W@n8|~CH9H`ZviRiu9LW|&?G?3!J zgU@OXUV7uCo5VG*U1dQ&Vxy*TbN=i+e0FiVx!$Zca)MKIv#R*Q49q39i@6>!$S?JKJB$cf$P zv=VjE#o46ZKAHpWwp*M#Vb?^;jM$RIq20$Wk9l!R8iue(j_4-8V(a;SAHBWT&6~Jy zZW`5cl^Pyw_G_L@VW6Y*ew@EN9rRy3u0G99%908;vN8QwsxjG~*o;HHVV<$g>@?j> zs=igGWME3=LPpQrkw^&a_>4a%rsX~G(+igD62xQDX^Br55X zrJS^~@5^RtB_`DjwWUnz@qZfDp#!n_Wzy3XPyEh+jf4vo)QALZNAlVXLHqN$GQTX) zQDBelK(Na^^7d{R?4n1LZ0hPL=$6!_fEIl>L0KGS3jK=%PI|Rhi~gJ5WpSG0D11}z zn0=SW8H?Z}DQF#H|H|cIW$-cu*{T+7n1t0Z-XrU~G}!q$ju0gj%GjjGL7>Jm9yu1Q zOXK!L3AC8evN779PZj&+TVW?NdsgqaI1d{V_5h|diZpD3Hcx~N)NL+m z7-C6hqtW8LfN@#0hZ=->cxn{M%Srcns4=U$p1g_)FoTqo5Rjbjebh!5nNq3xMhxSW zgB*JPb^jTcr;Kbv4TPu(oK%cvhWi{JPTO|EtE!b;1~#}1g15w*8Z3L{w(AxKcL1XX z%O3f=4vpSM=0?s-x$Di&xTHxuO?PHnPZ#cMsnHEDol+oI_xWUve@LKHny6EhKKT;% zMg8LUYjJ{I5bBx8fXE#4$Tb~k#!!sfP$??0(dOczoF*)!)zFHU{>O7CE_?lLA6A>v zt)5~-bS^LTx_Rjd&(}XHEF34+{IcSY{AYj6{efq682F$1bou^MpSW|3@nxm`o}d#i zfd@-$SErO$3as{6{txKhxcfq9y;RZe=$NT2y9{kXP#ahk2?(>;gEZS%18_wk;e zlSUa#0vm%thodbfwN^xy(X<<@RPklSPvs;Wg-jn*P$h4zT!N5rU&XSOEG5qOA>|Lx86x-5bwtPvPl%GDRCtDK=P^Pqt ztMZeSKnjDu5H)Ie16*> z)%l>Bm`V@NKmBk8< z8p-Kjx1q`{U|9)?8^a|2PFa-Y)?1vhC8}9cu+^wQZ9TVRRMFP|t$RpJo+ciR#Tj2x zgyoK^{4OuPjVTF6KulVKIu@V~vIRwd(9|XGTPtlD&3|$gb2|bZKzHe|n}9x2oj%@l zOgihO@zi~lomO@dofit#zzT7oG{H+E3^R}jC};c#W@>TvP#bx~Nw<RBmOKHzv&D{*bJOy`_9cA= zpbT+d&!q7lHenELV4Ae;5d%oPQ3Bn(qzeyBO7_gV?pzWPfF}*NZ+*k$p?(U!=N@>k z#UqbvJ<}o`L4{)6!V$JrZKi`6f*$Lf8D3qjL_1013*>+h6( zR*%dSVby(BCSAmMQ*UVT*Ihhk(m6MqpzOAe8a*4L>S(uhtRm=X_u=4ft5FHIne?7p zsXVZ)>ygjf&(gNIBIXwhhua3VB^>n1_drB5iFhLoQ(lK{KF$sy-?Y=ou2gRboTKy5 z=`K6zR25T`%A`Mp1SO3^*sVyhEzG3V*ecF7qy?^uG3jCDeP!tV0XKFda}Do=063To zeSN`j^-&QjB)Zjps)g<=C^{YuF(aO-jS+4XzQ*ldE`54EX_)kjeNE5%)*Fsd!!scG z3>-+4;JIOfGsy_CcP+OCH?v9hpxi^7!~m=`Ac@g96lD%7pHY z+cDxMO)EYYvP-Pi?8l(}vLl-?PzJ)U_t<lXB4t#s%!cjn#g?!kP3B zjLh1g5x*QR_R+roCib4bUyA)^AJyfSZKt}=L87S8F8p?D<}r&iX3a@^R2Jz2m*wH8 zPL!yDDU+V2v1b%O!IOFcrG`AcBzQRS# zxI5~#gV0@$pxQ zc=qmzr9%|JDF8YOHG&c6eQFnM>}5(3cG@j(I7MxW5xCttLEFAb>z3c{((b@F@doZ4 zlaM0unm@Tl#Qw>Zn57lna%neJMS6&b!R0wzCE^43B%#o2UE)*s=ri2%mM*3rNHj-q zOL)zWTD93+jaxq2P5=L^lj%p)-tW@7>AG63_|JP@#MF{2E-!jwP}w@jr;QYzuO%NZ z{#YbTp1ww1rD0^??sie=&FPA!`=6EUbOnxg*^#Gfxp(e#+?ef__jig9+&j*;ty2Rj zVvq1C8-e1)7mwZPxC!Xz5nS(Ds~id8{`U63HZ!I=mtNp;PI{+f7^uoYwKG7~4uc+a zxC~ZvX7SUt7)#p7eR|<8m-bP&T!yo(T`7QRGK4fC!OFetmZ##(#yv!y4FPCdUsFp* zuY(TH7e_1^fdjEK1rd8`K)Pi?DNG&9Yjm%o@K!fg=0u_56BG_O4OTd09?_OBK1ik) z(IIYFl4g_IHP%J0G3LMKB%Dqu(>1`*I#ozY+1oj-4X%@!N6@DzN8Jrc-U#)^w-mQP7^sb%_5hc zal%rQAONsY0mQd+)da; zdam7!qa5kEJZw0KJC`Qf656wl-{xJ)U2HOXoY8L zx#^-kl5zWBWF&$)A`*m1v+uWb`!9~f<%(V-QJ z4r*2;SThe&y-V9TY|OfGg^~;`&sh^E7Cn%(WLP_&q7w|lV53#ohwCwJc}d$!A=h~$ zY|||dX^&J2ZEnwVp2a-JX+|E?ZFkFQZ5kmDi!fs#{&mZl9ZWv}Q)%XrJm-bDJV)7+ z;`s+|n&z~}sppM;d89AT8Dj{(CE#sx=q(O+DAm(QzkCBuTJxMs4Wja8skT~tpg~bS zy)9JEf37u9PYJDL<-t0i_2`9xsG;m6;WB}njuAk2WiTwtJ)B-e<~h$8Rw@?NCX|U7jNDM7tC>Z7#r=DSGCc8^^AI>P=KHej;yuf5Q10aCgK?Br+UhL)*5YE zAWh}?n)Ywp@}O2`YN?MX(;N6gAS3YFRDWj@w>#QMvNg9xpy!d=^PGBoR7{l-yuOY8 zZ?l_)VTg3}0;cdOZn-h=p6AS(l;_OP5Nk`u*`8|S%n9`*L4=Tbh|Kf5R;XxM#BMF} zNv(Xc_7Ym`NSa4G=n=cAx`fuw7Pq{qjYftURUgLYOa- znO)JIwNL)88|IjyPT^*JgY&ez8%vTw=!ZJPK8JRmIts|!ZbsMF9-8m08H1_&Va#8V zP+UYNc%1E~@am~n%756cj`{M|=qA$03T2#ZvGc|Z%H4qrf=0!ftY8^qXQqw@l8)JV zIIe}Q%n*gQC9R}9?K}xCtO?(g_0h*)&Py5Ms^xh$r+yYH)+AV?ip%D}T&{bIz3wgQ zy0@6?-n7@fC0zHG6!xaBS1r!e-%xXPLhAFv8@1c)8kXlQ5|YSxBD7-c9#ME2ux-@4Jy{8(ob^8PM2TKm1_R9= zAmR<4NA#7h8v@OB;mpi9@Y*CSn-$a^m~sVcpeOsSe!UC&zY2 z;r~J1;-H6(qxasUW=2^;cJXoqmsIc2FXX z>-KYf@>5-+@Q4Wn)-EdlE|KYpY)Fm9b=$Z;`JFED`A5cToaSuty+=y<;w~}CTEtI2 zD*ncrJaRsKA1RB6qnXpITth%h&tUp?)g#mr4_Q;PE_84^c!|BMw_pc3nm1T^!v|Kt&WMs1^P1iWI)M zL;P&T=;_3*=qN{l$gF_^4I~;+EJdC9;r6a+qFxj><6cLfe7++B4sL!u)k9K=<5ni| z&vuBGm5Hmu+x8%;#1#uvc?rLpp;WmjVJ?N1dO>uV^-*a_rx!?36F+K=G2-KKSD)-? z4{!BHEoPL>?NG-SIi@~&0={QKzhM5@nl09^OyGMu#kQ5{BrKk+(Pg9}Jd6tJgo;Bv z?kFfuWARl9Z4Za*^f!lm?gRiqC-%)N5H>^r7PD77>^KHIki$M+XRFXr!e}Y7N z9c;JnW31&pi|B?Oui01|n~F1^$qRbe@;%5Mf@fWrlfpFPe1o5KKTKk12vAz5SKkRZs>MI$hbM`9bS*&1@=obqV^2L8?}w4LgPNYFa*r|a_kM$}I+v~Ll(c}4S3N&Mu(ct<6H!K6*e_g@rxAXM z#B0N66hZNpDEzgp`5JVSSYDPkZZyJcE!G_DG&5!%iNoFnJVc;GCM24ml=#-3@5n3^ z&zFr$wIh0otmk*eAMBH3+O@@`d@~3m6vB5wxU^7AUNgZ~2f`WnO_Ccy_+y){m{;05 z1U(S}W%bE=q?9s8X$OEAy}x&_1&7(;S1X|n5s4?kxifcT5E*T`uWc7;)t~w)8{*r zN||!b1xQ+@P%TWLQ4u|$UB}H5){kgfK^B-&o-OER`_pf#*RSl858LVgqBe2!TBBuI z>w%naF3~EFwgk418YC#gN|*0QD&d7miug=Fu9zxXT@2P*e3R&gS(a$8>6tRHQZ&Xs zIl4{kS(|2i7tst2-q|IODkrgNR{DT$4FbM0^ck2er!kwbG74H=d5pFaFl%J90~JCq zz84>4*5jMReeG=ED!gAosKqM|c!HhGxgWb4{qa2FCt4c!A-GWDSIpA*5QijVDI}N1 zI4ZYK-ivWF86zv{Aylk02-cOoasf7_j7q2Ohg!|3>RbBIIfIxL;Ug5H*$x`L(0s8E zyS&+eHzItyR&RykhQR#$5X+pTwQ(guqUakDGrdoiDxpMUzM~ZLEzdLkB1H>B@Og;T zM?^ou%Cow7mU(0#_A-_p?3I(c#e#L?qRsZ|oais}9Xm_JXV)d$#$$J`3|H*(9gW2s zYX?#{FaxR`hvqP8b0w^+*q}iBWTOJx4ww{zB`C1J1IEgNbc3)KpwjOH8XJQ00qFk# zst-bKvdgX#e+95P2$nmb1#G?pmKB0sQDE-^RuF<+P+(1fEe*lWE3jt3%0jR+3hZaV zHiTfu0kbh_;KqDMRR~zC5Do=wR|xjD0virkZ3wngfsF+0L0$3a(oS?w!0V@l^QWe;HfR%?}i3)5dV4Fg)SOvBb zu&NL&LV=Y5wle_hl|3+g{Aj{b0QZJ~4gyNKfSm}z>Su%-~KQGsaz z>j=RDx^h~^m2W`z?8I*8P*gii_;?@RNbOr_m~kI)-7Uz&Kipn zXHa6}btML)M8Pa7VWS?s2}SH#{eryHIS7z~SwSX|idb7ZsqbbwQ*iuW9j2$PopN)q z@Ar19eUD2#`{z4PBbe0%`^ z+h)v0Lul_0{P@xozkJg3Sg4FKRHhV_PM@UKc|Xb&*%pQuddss2XYSQ&gRliXeNXu1 z?Vj9bc)PfCgwJFR47Vdo{WDNpkI%`~DsM!Un>>>NGsA#YSTbPiJ!v5^zQb~r2BxjY z0MRoQ(QOIEi6Fq&URWb}(N5o`$&{1XHeVNeI14dFM0@TY+fj`pLd zuqLESRc~JRK0tFrqNz}a`%Ts2!|E`imIT; zMC;wSJvHj-e5c7U3Yz6O8x_j}f$FIft#^T7AP6=D2ncTm-ZK=_53$w2V~$F+l8MnG zo^F-ueQDMLl=}`MN@3;Ved+l9K_*?sE&K~8KRbiUQ#mR>D#a^n=-|0&NWODBp#trI zV;F@m^Kgfx8f`fmhEc0)^^&_n9#@-R@aH?NxLYy~Myu>8Xz2R(4FV`~^0B$s&($k` zfpXJR@|`Rj(0~|9`#1N2U&sJN8uX8}II+zi3lSIL;%T80`Ow!8R-gE_? zw2}M-ChRb_gx`kpb@$SFAgaT!8SHujzf?ehJXOu-J7Wtm2yG^ko0+2Utpv!TsNi}p zzF;q21BH&+{iAb?ItvHhpq)4U`n$xSkotRyqZ8x&JDwlO4T!AgjEsgjnxEnZd3G{ybU z7a7C6s(3pgK)-l5cvZ0w2Rkp>LUJ)kt&ZlKt;DXL*p<+aevyVqFWnwE3|K9%Q7OIz z#o`j$?+&*7J5Z<|<7Vrl5Nxv|*bdN@Uq|&!*DSCHdqv5 z+mMWh%Xh9DI*<%6U^;c6C7sZ34JShE zI<=pdZJzoYJPI>1La%%Wm=#Q<_6)^jfr}Rv^Bj8MsY={C2e!@_#Qvs!o?}%Arw7gz z!Yu^uXb3k1ICZupcee2IJcpK?8O48ISqo&*!g=_?TB=4>q*w06hcN}&zb^MY#|DKK zV`sc7_7za;jq@Bk190NwmH$t<%A*R8A6J=$kA~hyyd9vy=aK(#KX`SX1LrD%_MHZs zemVDEn&(Ij5g&B#X_@D!3eoO%KZp0(q4zi3Yg+Q1S=m8euYy;<2bn4VurD7wqCxEQ zZuk#d`b_ypfG>r>Hh0TaMC*k?vfsL&#Oz-adVk!#4DbE)kGRwD-cSFad&qV4_qg5Q zw>VUOf%`|i?<`UIFZIfE+`mVGeuA0qF?f&92nui;fm;~RG+~59qXv)(Pr*+9oy2P|+uJHEGLxY~3J3!;CGl)xGNJ{$*pEGHN^fG2z zU7znx!g9f`UT6R8MtP9PWdrjmz>#t_8|Q@olo}m_7|Ct zA|EyA1(%%DO233MR=m0DrrUk3x*fDip)aWXo=BY6Wr8BLEm8@F{-Vyq80`tgThW_! zaSIho@W?jtv8ss%2unwtWcQX#Hhfz~ji|s52~l8^4*$fO7mEg6Xszwa`eRzxfE!%$ zzgopXFHKoww`-DbyvWkep8ji&_7Y!vvLpJBB-}jwU=Y)*r$iq4DTFRT%y4jLMwh%7 zC9izz!fwPo$2x2Rk+ckwS;bdg8vo!1{B9`2&vW9=#mKjFoVejI6=#Vqc_&H@R_c2_ zhr^DS>*;xptPG}~8ffjUZh{R5E!FWbsO_lZZPdX6yQox$QA`n2w6dJrEn38lgB*6W z>;1H@7__UyE`BRc8Oft$o#RgxYRe+wQVtu`)=>GK;w@W8@JH=p{???CvfS9MNq#~R zYWtl;nw60gYEGH>+}49RvOFI&r=5=;kn!pL^$i}-_h<_)DHwAFS)LB6P2b8msk&ZZ zxmR5OvNdOVNu-b{s6T8f%kSYrOr7Idd^lGzguZmp@Q6Yef6>a}=ME#cYm98GEL*Vj zu5&!Hkr^Vl%ktrFF?Cx`tc>rK(Bd7YuIL+N`L%A*_sVE-=eAgA#{4UnyROYZ-wwRUE-?ksVN^S zMcozuz2YU}q3vT)uQjaRWmNBEQU9uTa=F6bwd)vMUw16kU4gpipzbj;?%Rn)ua3^N zpx}cSgZ0jIR_`b6^$YEmfAGKDOvaYuh{g0wYH-Wn_{H~Lwb(j3$b|0MFUx72;U)4iSs1Te|LG9bdQcs{ zIJ#MukArGUXvn(dTm8f7$Nf64%JSY{piGBu+VKIOu)3W;NsF9F;fDE}g%^eBc~8xj z$xlgt)kloJgJTJI92)joA~$N$oeSq?=j-Rr*X!9Wr4Rk)md93sXES#!; z;-R%GN>+(GULPOB*u1&3=c<&4gx7_b!MCh?tn8L~`48T;C`fA0J_Q}y>g{-oYo@|%bBs~^{o8TG^%J!)IA{2~2#{i?@HN>{9YL_dD~ z4E?Alq8VGU`iaLLFGU{Z1A_dQ(gvl_V^_7G%Uryrw7y$`C5dT`!?*>~mNslNlz z6|0pxXGSy8wtslM+AKiJo?NG2XI=YHN$CVJ_ds4QHF2!|;kA!HrYGQ3{U~}MQ$SA( z?pmx5ieysT{j21M{&wJY4gQK2{sz)Xd>n}?9Y9rhYVlma!%pEW z56^5o#dtR3sljswPY0g()A&PXcoyT?fM+|N6L>D+(bjQn9G(I^<#?*`oWb)Wo~RFi z!!sLCF`i8y;3vjwkU57(!bAUXe~?85o&uyrCl9@Q$T!FkrpKJ@yJoYncU7;4_I=nL zbxRnS$n^N9bYm&H5!vwWAiTKX?5Mb~GAb*vC)V|5F;b;u~v9=LNqwpl+@q8x=|D4G+iO>G?_tEr+ z+SGrC2G_sLiTZl2xT|4YtRMeK7nBnI(1nJ~sHotZ82fGUpuK2|V{|OCv2Wrpjb(^;1EcPy5 zYN?G5C<;YX+J<*{S)LLrTC`|4mHHtM8x_drJ*;tOvd`~-W_C9l+w%Jj_s%)z-h0lu z=bn4+V>b0ox*ZL=+T`r7ayT}gG3L08|MVj4u`QH7#8|wYXG!2Gfl{j!zqnnEQ``u#&Rj` z$C!!IIL5|P3X$?Djc3d@nKJzuE1(o|PNx(M6;qnPSSh86jLo5R5M%Qx9n9DQN{2AE zh|*gbvrwAE*iuSwW6VlvGGi+!9SXHmn!?y>N{2C4MQJLtv9*-Bov~_4(-^Cv^bW>0 zP->7v$=FUxvly$RbQEKIDa~Q5p3+>#j!-(9 zv162uu`zavGIui8K&gqbvy|pBc8=1qjGd=+9AkD$VOSR^y$e=B=>*2EQ2G0v&)pj3bjP&xxPKxr{-fYO<;0ZPrV0ZL0?1C*A+1}MD`Hh|QYG@G%>1egOG zptKA&KQVpK&b^b(8$|ZQaNL539uM8KMJNNC%s2;`B7{N9NC&WQZBi2SCA{KklUO+COn;wut^}Wb%y>hSGyCd@L$VXP# z6oI=Kk+($qg$leEOVeR%UM6f?CMT$spm2poE#S|G&rMp zeU`99d^=^ZO()d{%&tvb7Qh^*lXeBn&eX!t+dF}@^q9IRDOoYQyy;m&%x;b9HBi;h zL7wTQZYBR9y=7AkEM`}X^cQ!jGj;4N*Nz-O_`3xYF#Iig=@-gnW&GHBcePZ|Z--^@ z!DK;ilX{eyuE~{JReR7({MaZ#E5h-5$)e~|lh1G&Y;^J&mceogB>y_ID|PJM)EI9P z^wMl4;h-+#@5;_Rvnw|OJ`Hev5I#8q{u98Xg7DI@w%&?zfZ&6O1rY`A0GtcLcSOJk zD^Wu7K`t{?rY-^(r2vz0yP&aE6UOKyC6I8CX|*})IA$|I4ye7$Z+4zyq=kT-+hKMZ zI2Ocw3rv0xlh&a#a8kPOGNjc_;&ak2nqBoKO?LwnM7z?m8ng34fd+|EA>0c@eJPF0 zE^xYPqH>tjS##_r8`$9dx~9-+;}gx!IVh08X^pRLXIU0YgL7MrPI}r)McHU3Wv}B= zaAOUJ4#-`1L7AVwAeBiaHQy~^=@u(&$V;_+yS&^=wdkY~K7z&&qlp%4;>|!FIx$@* z<@*Wp_cT7I!1;1DH;UP$$u$kqTQBgVW;R|>s*>3#_PzMRXT<^ev5uIm0_Ut3J}uTu zcPh!p&&`ZQZ(Cs@I|?r-YxB_%_o0~?bkbZu-jf?ZH!EPUa3&^MUH~LkFMSYzFy#f` z3on>m4OA+NN>Q17Kg%d`J+#U;R5heSXmET770m=`a#=|EnSP!0TMuc0gZvrm8l+V< z;9WZRe1?@9$E2JWzg<4VH7MiFq5>)NMYF4JC1;=}bW*I}V%$E{04;pz-lSOa8Ojd< z#krMln2CY|6E0uo{nq|Bcf^$mo4|dew@l!LEI}vjb~A~+|MpFNe1UM~CgTd*;<+ek zw3~W(>5Dq4$U{|9Ng5I2^JZ7|Gz_;RL<&vaRS9@iEfi^^iMgn;}&`zWCp zs(&2=wYZ!Y*lVhUTY1C%VD%;6tqPZOx4@&;8sEM5%8ledcte9tRl{?>_nM1Q$@uoh zW>VaU=PxL8@*hdHb$_-0g0d)oA#xY?n_X3fF?CdJKwjIyvI?a37iM=SP5W-i$2ZKb zA*zMzq~reHkv=>KI{;W{l#dU>{s>r9hD{rL(}TdR0ER~DoFMEKz(ON?Q4scPf8SBP zA_#xZA337e2BDRH>XIGngCp9tF)w5}ffTRiW%M^noUuBy^NNvrhx$w}mZ#l1`_;DS zw1V%)uUoQ=3~608RG(on4iysW%+6z3IT(UmY(Oq;yI;7hT&P8d#0+b?c!g(MF7qt^ zUpz~|S}`YQW+O{K1>;>S&Nhr2aG)e*!@bVJX>S%WY2iAt){r#Uvh3c}vFP2Md1Hk# zfvosuwO;zhN4;JkxvR;JGaHGCR~pG8cNEZE#r`NhKd+K_v zTQ%-~dcM0sBE*phCO#+ntAdCQ_**s00Mn*7gx^Apzbh9^wq_g4cmtEd1=E`5P|kDX zf-*gy&xt+5#xQBXIyPo%_woG!`D_~v+R7Gf(2~2@>e+ikFBQS$rpoaL48SU_?^m&Em|5NVABILGsB1W|;_k$ig81egvkr^r@M_R$g zxD3nG<|>$H4W3U*wpJDA*t*}|e{Sa6HWT5!)*y3{tcQ>ws<&0Kz_CLvJz`zsC(&tOm-lr z-qK0`@;rQFXRy`r2i^^~+U>ibP@}a)7Z5-okjRdua3ZJDZm{a5C&Nu-Wo zRs+69g+JN{KIR5VHXg3s)?K&HU@c13+x1ea%2$TPvTPbmecQf(P3~+V?JOzZe4UJ! zOgA7;Y*}-o_ib!T=M7$ndV_4G(!D2~uW+Bcu1;Z-^f@-y<9i;yj;LWQX2d**$!p46 z;O3>T18Bjttp2n^`aLiGUw|2uW)5n;viE{wTaf<{Ty_1P+1=la`))}<-g~l4D8{6f z*2Ae@V?kiawF^pdvc<|qaaVQH9EH;&0|olWRNU%qD(6g->?~uN^Q%GHta~@yf}w>o z4Y!+JQh3fC><-B7Cod?a>g4e3p4YDhB(1lW_Fc^V}o~l zEa~;dy!3`oiwr6oX<9J5Hv9sei6EWFByOeYqMuHrE*iK;Z+jK~v%7j#nP9=VALED$ zPVL)UNH6BDY)tJl1?u^yds>?>D?9R*AH1x@n{tk43sU+VuwK<-I5-Mj#iTUPSIya& z44P2W00&J3jiKp(duaNPQm20t%EdYI1l<;_6H2^654o9Cr^o#N0DR|^o}}>npWh?= z$V1-Qv$I*Z#V}`B?df4zvl`#U96Lg_|4(?${>K*k<(*v=bv}d=_2nVc+pI2$ zVCvJT9kj5@Y;)PmSuI{^YEsogw!2QDDAu=1tImMx)~eM_L3PP1L)AS&)jg$+obfAv zT*pt9fSgaVt}?qS!F+G+bFp08k@ul$N4A{fI-`^xixK;Pqv{}&R=IhDU;eafQ*$U7 zDS(wv$J2oAIGyo@nN2XvZ#&7nT2%8Ibv)#%2(AXNFic&hU%u2ym@;)f)=5J>=p1!6 zCRPz|lD$2wPRDVO#8Pft3xN90tM7}0@4Vy=5dNL;yHj1vA{ZrlsV(rwW^JH3oF+8GGN5xlfL(04xNrOknpw&oLdzkH~RM)RVM(45ap8v^^AvHrpIaQcb?xEr0? zL`zY%U!Kr;yqTB$Uh;ft*J&XVkS`tc%P*_-AQ`2%A{>SnpN ziC>KwmW*wTThVDF;T@y!#6YxV(6m*IzcbnPK*t`d=XjQNT56(wsWEDoUV6VrpVoC{ zrpsEcEy#FD^k-pm<)GzmP(zDjvk^7j-FVXa++hY&Uf+JVHSaJ>*VXyui5*dUbh}`j zZTeeaQIF}QXL{HsUMLX?vCx4vMMv%Br3(KLxV}7rw;6b8see%)-^WW2``>GxgH9UK zaiMvp>r}Z_jZ=7OWZ-Xj-x6kQhW~W)=oV%624SY_e7RmIQl};!bx!otLVem*GFHf+ zG}G0z9PCugbSXdIF&$dyhbOwhY2$7IPvll(lA7e~@r^U7LokuhDES1l059F@A0==` z2^Q4QKHX)o_~mWw)9+2PX9^^Pl>J>JXM6~?1>W+egisUDF0zuxEx)U(9q3e-0M8wO3=b~Zbz6rbvb)<(JQ6f!Pt>jj7$8xx zymS?A*Yp(mJ&j@2W79+h^CO01FjzkElA+N)0WW>%o&KY-a>9G2*)LygXI99+zBNZ+ zwR6>YhL`qv4>d1^4?0OL_ro<+_8{Kw98T_b6hy;VPh${ppu*18j9zC67 zcAgtN(v>qrO1cPQGl7-&LH5V6&aI+br}_H z2Y*(v47-EBtmDZcW@n`yZM`Kj?>9A1#l0=_lf66K=CLyGJ3I4ejIdQU(Ok_Hq5Pr3KL#r^RQylmv{G zp>F1v=K@n5#`FVbQxGEngAHTi0kMo1OI2;Z7r=MA8G`P>E!_*B`v=-8?hgU!)kv)jY6?!in`oS?C}6j7*Z5?G0LV6k1A`0aA7 z?s*=I^}8E1#g1(m0$nF_+ExJd&q3P_nsYV6sUVyHg5ilnRI4Mqe+11>PE1hW6EXPL zw$lHb92pf)tCVqJ%3_r=I!yVPN?GmLapNMQn|iG89C%3Tgrn3RGr&C!vGG!FP7ipHjZuPF#y?mO*BD9}ldzt7H0OC4rUIGUO9QoUZF@ygd}BQ`_mXU1fN zo{mq<5H$H|ynfKbLsQHVSD$dYat1p?S|Ii{>GcB99O$uyWbn!DShe@c@J>%i2A}+O zm;QLdX@fw__~l{8*_q0tq&y68{gHZpf98tismb=fZbW}G3+FyqIH`;=LykZYt)o}> zm;|4Eq${Tw^VkZ9Aw5dSf=S)sf1xP*D;Qs5rrL|d;ZJ)qim_9jzIX){y`u!3k;!VQ z;;I%pui~QEa32C`-oTBA*K*Ld{5L*6_q@7`G`Q9N)Xm26^_8cgvBc1zysKyN3NAZF z4U=pkU{24cFsS(S(0c~t5A8Bw_U<`}aKeC%0tIU9mHw}g{({mp=YPvT;=joMgF^C; zhrSCY1{*XxYcqMNMS&MhA5cQFaz;%)zpRI(BxPz)%12cxpA_GoG}yM~pOH4L_39ba zq77!B?Cp%~y8L5g+L0Ep3$&Vf`><$y}RvR$LK1#Ke!n5q++?W5v_ zn)+SVR}M!Dm=55?aED6ZtmO!s_&T3Fri-BbE`syY3J--Nw0Imxoryq%$5|p99eWR`@?u>Z zQdoZHX86v_2cvElL+*J!^#{q(;Vl?HaME>9PgWrYm1V!oJ7~=17x?7c-X~8>d15_E z+H+bH*7m=o<)rsfT|U-pk> z9cEjEv@Ze`lJ>71IcrJQ1jzce5|T9`ENdlbN!A2jla+>WNY-~w)8yAH>x9#homx4g z@@PC9pn;2mmTct5IcX-UQ)L|y?Ad6ayuOdD`Jf2Ny1I|7IlzQuwf2!U4VaLu3xVnF z*hFAdQD-rqd|$_F$`15w^vxZR)*6%+Z((WOI2)dvND%G7-X|w_Wua#)(X+X#U#%>N zl0G~ou9=#WIJbk1QP+~gxhb$w{Veg1Q}5t^)ggX7^-obx_WYkxEv_sWmekTi!5vHg zL}8{XD<>tQ4eZ0eQ(#lI3tG`&L?kg|AV481#$|pXyta%8Edp?D;(OtN68lY-;Cx6^1b-S z!WkJ4;s|`ys|8O)|u}3-Vv6zW|>RE%X=OpkWrPKQKel-*Z8!Nq|`HS3twZ2Qz$^ASmIis*$>34MYr91q;0*xvi@c#r*3TL zvNoJ~Nny2Tn#bh)vvE%qEnq%xPB==lc0Sx8?MUwJDN1Gb1o)@gAmm-~?r9^FhG$0O zQpN0U+p34^KpC~*b)USrO?+lrrp;+6j5Y$sQ7h+K;puUrxpm#Kn}q|J^h5Rds={0* zeYno-+*ueEraRIa1G)mqTfOQRp+U63YRcx%n4PP~eyD6v7cc|udD%=lyY35RLn6V= z&K2X(5}B`#jY>X~0?zyGEu_XdDNW3no^IP{8cWJ!c{rNBRhfv;+$T2#nHq{?R+ErX z3Fq3z<8FXqy#>pRVe8|J`dvPGQ(F{N%t>SXJC3KNCu2r<3`>o@dC4R&=aZknV!l9{ zv_4OzdPqIE9kHIG4b0Bqf!F5<>Y=s8Iu_M@;-!8#<<6+MeDLQLYkm}lOj3gmYGh73 z#YfDbK{QeB@Dk=xteqCr1?2bDnqEgubmIEWIy&G&{hm=^WU&=tqTgTvYu|s4dle6E z$RnaJ)=|MRUi$y22d)--IlOMGb<*+P_?IgA(94aabeTIJdRo!Oup9hFk+vIrsn{ns zwOXuqLl{wfL^AVXu1U`GsSt8RH9`23&m;I)8D$GwPgM}{77$BU#)RQ3g7Bmovbk|JX4gip zx4K0^>_XhosONf{pA&>%0sXNE`1BU)@Z~j!*O;9f@0#VbQC!K<=Ak|vr>$p|8V-XK z*Hd_Dmz#zu4Lx2;_k7q+)lJP=GWJ%XHjC8h!E1J-DgCNrGD& z2r26h(?C!oSBrHL=HRMAZ6lA9Heva}N#)`_Gt#GB@oGB0ZJmCXNr*GDkv=R?sb@IY zz1A~)&*f$=9fO4iQX+Wf3vPsN^>ET)@$DHu!M5lQ@$!tJHUp+9GCFFTlitDlfPyY< z#o?2$VD*r1xS%*_3642rOrZW|U}`nafHp(*N&!KAI2SWfC|o{`MjpaL?lo4s00#U{ zE8JT7g54?<&iW}gK@U01uBE|4SI#E=;HEjC6T#?;a&7s=jJ$N8n`L~Ycun)0v(+KI z-9diE*8T5&G@$Qm;j_4}Zp&=GPJ)NTe$$&T^mi_O1jmnHPV-;9^e_MP)B zGR8hhekOi#Vr*_-0P7igNsRaf*Z+WWizpak+=%tU<)j__{yE@{e%{}@$ zuX={c$|!u(F7kX`!WkF9M^ezbyX9YsmsP^c7&uLL&tVeQ!g#NItV?I`%O?<`gu^zQ zv>XIlEaR2yu<#gP)@v}2^ejMw+i>6-HW=yOJ=A*_VVK2bH0Y=q8g@VF;Z%#cN7WXc zt&+ClcP${z@^E!MrW>oOo=TmcU1ir&TldTR#7^@d@@qp>zoys!;I;VVZH^^a@D@nh zs&SL19G47#@GjP*c@xaqgJue^*n<_cMA0R~j+uU?YA-xdP7*$A;h+7ig+0qj=W(?y zr1mEqI_h=DHPvv$^3=J%So}xHZK_bow3yMek@_D_TLSW3u#>6XPwY24Ys!=N0Hz8> zL$U$d+!!%XUsXsjiY0e021gKh!5$KbG)Y2f%6QOA!ss1OU&jo#l9ZGj-7#NRLJ#xepwe76zr7xGO(@o z$rrFM>K9Ky4;c;Np3wza=9pJ5=%mq!Q5!BrC4Oa7c!L*bW5fc~1>gCC_g-AZ`13xj zHl;kTB|WZ~mwxc@(v#jVuW40mR0lXIH`MT%z`1J$UugHW{!^cd|3CG~q@(Dze1`2a z&53(u2`hvRVTF#3P$-k$0&z&8w4Mqnlu54w6H@5sxHjsQ2dTm^gc4j(pQ)<$W<=<7 zunL*758EeS`<7qR<|r~%ul!~wv1E2mU#Y{EFiB~#Vh+t?QcHl$?TT;SweH&uF!6hE z++85uz3zK;MkG%|C0Wk&Mx;^yQW&=s^bKH8S*g`zz>M^9VBED;Rr9lL-Jk3^TxFYu z?Y@up{E(W7TgPmqS6+>4foQ5arjn-Jc(sWys=u!y<|t(Ppqd(4Qn3&r;l65P1Y)M0q+bV!u|rrRs56fqJ^r$|WOmMgvz*RI z(wYRX{CT^$ZFZ^}NSR#@)W_?170DSsRHlQ!6Sz2V_~ZvO$?vsx+?h`4M3wU;>sW@a zazS14E{tSwkCD8WcweB7as5q4R2CXw9d~9V@6uIrCa?S{`g2>b-rN7ZUTKC7A3Xm*X~vV-#{de*2VhT}*3MxW3;!4{ltx8l^ zjp{m1P($jL7yoZA{VnkoJQKVMd_=_CTld`nzF0BTl-D z@&$FARE=f1_89{1MN?$g{kPo&F$y%S z=;MS;+-~W_zOs69=&ZjDO~m{f8{Gqhli0K~pFJrkCcMXZmQ?v?kqM*UE; z1~tS!FAQxubu)J0H2bNW{Rd_?ZdSIZi}mw{aI?gZ=FR5KZDP{=i7B~lr<*q`{nF=W z*EfEq#Md?oBhrhZ`(v$Q#rz_hCAcrbB!lk-I+Ded!ZXf#99x$ZlDXCUsCsqll1bQ6 za?SrQw^5li%FD(Kpbbo`zAd^Rv6m^(y%M^Vz@!xKtUhOvhyc9VbWJ2l9*leNw(gk+ z-fQ;CXIsxUOGm+kSa|<1o4!5kV4h$=P`=w2RWH$w*llDFd`!BaSTUQolAdnbM_GTN z?z4L3Eh@9xJ}Z;{593X{tix*;!&QGo?40wkG3svX&qmO0YZUFaj#3#t={XYGZ8g&5 z3bQ)oQ5z3x#w$P8dJg+SCY4R!{X=bkYD+%olRpHDCSvhc8m4>{w)r>*n4H*3$GMU{ zJ$ORRL#LA?*whVY(l5e{qD8t@w24|KMk}yYY$?wUUK(Q3V)eZu{JzjL(*}awVZdCR z%Bfe}Rn|+uI+zNx&RXAZrfV;%jz@sa=ojkagD_Lk$&e&x{`43z%x>ypinLh6jN6&%yXct~C@Y!@|s`2G;Sq&j58 znfEw5~QpyfO`iVg3=Z?WbdH@mK+pLWC+kUp678#tUX14I(!{+@fC*@aZ{oHLihSapc+Ei~kL z%gbAAV{; zE>s}Ci#>S=aBT!n@fqK3(f0b&p4%JN1w0fcHir~wa|l0 zv*K%ua&2R~bl@W4D4($&C{BFk_`S~CfF6NxdG%QJkcTgE&QI5-FD8vq3<8g%&wHIo zpc(?I6+x;tnCO5bm9UA@`Oo9(53i5eXAtgJ^vgYRJWi)JA@t^Tc|x|3Y~?n4S)i+@)6@Y+W;u_kLrwcmZkROzJhL2pKV_&th^psA??pAtgFBQ|CG|P4 zi+Tf9Zt}=`(M;(a4Sz(f7pJ^xz4=G=Rr3!<2_E^K4xM$LGTf9?iMeC8*zic2ZKDbr zY5GG^@|ldvs7BahClQS_WmNvDsHIUkoqrU@fC@bFGaWesZ=I_QH>6Y!Mg=TaZbY}| zX(tfG!h(Y(&Qsy{on0&|{tO(gA^$Xohn?ZG{&1$m*#vEHx_OF$mFS#jO`_$|wDA^P zqBIJ89f?xY!NUq3rK_RiVpJiAS-G74_K5G5 z=RO)D%vD7gVWRi9?`>}U0^PIps_1_-dCri|yTk3|tL+Tx> z{}P51RNqouY()$)BSuINYGLReIsmO&Cy+)yZ5JQ=X_oC<0M@I3`gYDbPbiB}kz+o5(oBT7gY1{$rx zKHPfo$gZ{uq1bh6A`$Ozk5LN^?`Fewik+%7Z0^L zhm@(uS{!w1K<4~>Iy1(Cp*c{Xsf<{riU%6Gx_!zJF#T#9w>!kNxjkBCx&gEr(`m<} z!SrI4Y13R{9HrI8Q$LKB6%a1Jtl#bsTc7%Dq2^LhMZte*Zc#*YLxRn{^rPl-)#eKR zqqzxat~jDO(Ff047HWK>FR8v#oVP@oS*X=95{!y8pqfO zj~v@h``1(KMqv(uG&s4|>ca?Tk^8)jWqog_++%HVS+k{yxIfeOl}Fy)%Ceg6(UpdD zz6{8B@Y-a*H+{yo=k08tw^M!I?0w!YM7(M1RD4tfk#Wad82*y*cKvG( z9V>ArJd;X#i`I(?dqm-Rz+S_*X(dj>TJhDN;}rKw`9f8%x7JOn9QfKkWsYT^vdDso ztd%r$qD2SSk_%&ND%Z{?^g?VcLXg%%*Ad-VbQ+1-e;20J7Ti&eZE#kuOTY#AfSlu@ zJLpV$dL4{!$w~FYaSj^?ON}tZmHkANgZmLDSXU2%<{UUHGxonZ4$F6s-0cugS@U$x z_@_k4S~SFiqoW;Iq4tN_>~+NA|J@EzSZ36FWMhlCVp$q8$t~i`%gm|N2RiFGWteGL zRKI@>s)N-zVrp+iy4N9gFPourddtNr6~jTe+VKZvNP}UIZhEL;opSeiScpUXRYevE z^bRV2ACVb|Y*3v}`AM!v798SVD@N&@j&iZHVkz(K66Y^pz_%X~_b*SoW0tEropi#( ze(tnTEt^46hMbCq<2LNv2ME7;SZSt70Hb3_|!wV+`( zmW$I~pitE~TVnBW`)lAgpB3+0QHhAQTKr(e;C>VsXjNZbk->XAME>y+NmM@JFh_yM zwEhB(5E?1sl*f~PUeOs1hjgEvDhf6m6Y_%3DJ*lWfUo`Y5J}zTmW`dYhj|SDfc%7V zw>o)MD7)_cOwm`jHAV{hQzay5RhXNTkKa-Jaz~_~A2yqyiffpAY1EKwapN-}W_4qW zw!~SA-Qmz~kzf90z=R_`jcV;x(fCBpoe%&*RF0@5Md4voSCmkFn8yVL18Uxl_{)tT zmGah3aqSZ+6Bl+C9L$=|jEGmK_Q%m}c4b|W(wJE_>mY0%0|lwA`}D# zRjW#z8&-<;CvLR`Lrq;SM>dr5|eZ`iNit$e)4xYw1RY#f)427=7~9r4rZlGHsEo zl|AhL2g;r*jD+p-e}u(+%{;n}$LrSDCk)4-&-mHh?Di#Y+1sv9<1cGV7`J=`u^jBW zy~MSlOdMM|oL|%-E~rc!{xKMhzl@*Pz$8@S+S}XY1Y9@uJJIB|GV#sI+`;1!pBK-g z00~#)aPCc#epQ)1D6Tz6$h$puH*avudQ?B8T#R3t96v#Auc-}Ul#8a7N%|6ep(C1C z4o_CFOU_-U_S|xuO7$M7YRbhISB~HhwTt^#CS~8i?-)Sr@oxEL;Oc`j30;Ms?l%Zg zw9b2;%T%lETxp1_LzQ}rXtySzxyR)~H%&VQhJl#pN~ zgR8)7zWWlp^G{dZ@~h$2CZo0S!J`Ul?WS)_vm5uoNOxmYF10x=3%Kumf5Dv`5?Y_e zLC*=0=Lw>Wk&{7cSt&NGGR7wXJMl6%LgRH+8lT-E4tUC7t7xw)O1m5f-{Zz4Y7k-& zhq~nvYD@N3(no0a#3wnvuh0)QE476w=>@lSz1P6mfH3Fpq0Ffu=fqu;_X7M9@%JJ= zjR^7QLOkG>ceIx1s9Wlv%Fg|3J7>^ib%EUrWB$=Z>|D6zs$hwHaP+BK;u+K~trVkI z=MJwyFcM?uw++FNtZUa>s5?v`d`Bg`ueH=UgcBcFJ;t^Ogj4VZ-K`+3ZjZ9?s;v8= z_h@L#EuTUzEocXoD7+lkEt0Zs+TC&zDw)jbuyE5P_RCYf*PBb7TR6^OROdc?5a-n_ zXs+69)A>6#xY=ZhSZrtx7-3wLzTsbYA~i zuATFldW=PoSDwBt`Q^5ZszM=ZdLZXEyP?7@&uOLqyW7Nur;TQR>w%)LuF#T>b^|tK z4iMB45>@KF!12O3m04!UwNSNBSTJ_<_#Vqs>g?w9Hw}!u01k_cZuw7bV(v59ard=x zhDuys^m3x*nISfmnn&X;xgr)yj6O-*2ACoW*@0@X{$k4jlL23{?rUTHSK$3u2$*

&Zrpt$n(+v_48o1eZh1;;A>fq=gKydiv%i(}oZEVuR=(>9 zvXgcqP1-w@X2fp@C5n$eo04!2(_sG5{@8z51bL4+#0}5p#+`53Q55$@sdIj!`2MqL zwolZ%<9eagxiMjVeSgw0OGg9e&>)kl*1=2?(p9KieqV)c0IV(yJEFq=4A`+SYalJGQd|4$-18j8|R-?l7fK`WKYgCwouB#2h zDplAOz;=XTkF}5~7D#_vmr?cGgFU$Bn_Wd4bVk#xoLSB-^KAXkkVoL?SVWg*!PQC& zkExV)4=~6avIQ&64p!QLN-qQ}J)s^QQ_K3=gV;U5_Q+Sd zdRZ(Cv&aYO-vE7Zk!cZ|XJIUHW3^vz>5>20^%82ZkxV^uYnLX|I>fc64AnLpx z+cg*x4OJxyZS@R+L~kq0gY5Ol=Yyqf-HQ**a^(igKa2)1Ml|?l*Ic#6^<7I)<9Mw` zo9fb+X3&SkRZ3BFZq-`!QZaTQ2Ve#6XlNm=-E=8%kU(=#~6|t^t4)Ortt%ye`EOqwOw%;g9L5)i@m~W^GXZ8B%m0P(`Cs`UFg`Yn-@bpA(=<+F;Po(G!P<+A7k9u=K0br4%YcDjhY1{E zf?uJ6@xcn7#gTOZOh;YX@w2<#PX*-j-W7muS=AT%fwvsLtWrBD1YL?R>;K|?5R^OS zhG1Ixz24FrrMQxjmxIVeow{+Wswz-~;tBYOT5IZ76yM^_2h0#|J`J#!y<@^GzZ_;c z6EbB5b&>|WPhK0K|Nj`E&2UZBL8!|SuHQBmm07*90M>_r1bfu$$4#zYnF%)E+l{MI zc5I8HDlAs>z3taSmQfmJ;=6sbTy;Svu7vTE!}u?NSArdT-WDdv4HJ9_g3u_(PZA>P zT#r*FZJ?&8RJ!8^xEzWyBXRLR!d2pid#O`0^-k+O^0m$^{Fn(XY2&@*l5FJZdgN0b zAvfZejZm4^7}ly`Pd9#^ramf!$+i$5-cM6kT~O~^{?J%R!AIFls)4IE6l$w#pIi&9 zVJsXvc3gR$%FwC#3pg272BH7A^Z~B{SZgZ9`T%Yu^`NR#g_%&NR;&Ve&FQ9C?+5-H z;1kMv@e6_P9*h~KjM#BP>l~CjjdC?8r*3f)KU4fU>JQWHT2Brb z5sF#?HA@v_X87dMsQTidQfF>?uN)ZTnLgP7%oby*vor#uH8&WtU&KKx&wTRn00PlG zv(vkTYQ>|&jcD7MTLh34l{)DsM0(XD`^b?ZXdtLA#D-69^JPQD1>bjLmOD}&QgIWg zHD57|E@!CN*p=CIKS))!-It@nzh6gV9+NQLJW*@4k#x8Si3*Azq7ykF`r-U;96qe4 zc$$cK#3?H=uyD%*@pV=#K0g3eES1~o!BTTw?=TKLY6Ju`2pQpew`Zr-OXg{|Db1+duOWo5VJ;OswM3 z5xXHaHTlbk%{did^YA)a%_Roe%oc1RP6~V)e^2${?=GLlmZc9{xP}uPptoD8I=8RX zbryGhbgEROm!Y80e1Jyb1BC+%s%+J*k>s(UfEOVDf4g-#IQyx}*+(FZPmCn&_L3hj zbuFb^J`tAS@X}OW>Z{0ivDgMR0a;C9g04g#YD4-Z4zMj=7~SQy=I~s-cX2TNJb$g7azp$?!DGam@!UbprhkX$my+JFpRS#a3LRwL#w1 zSV(C^KKWOu%#LqfR71q4_^Zc7R<e?Tk4(0_UoZj`!exe(Q-p6z(IO%4P8>iO-B z$O0!k^ZFDx8@AiN1a~<<}CY?~zL#;(*_L%U|j`?EKBlemZq`S4_>u zCP;=}$f;ymPuMZ_O@vv+X(t)6bqbwQWKFVDZeqJwBbvvVu+ep1{q;r#=d|Yz(l1Z> z<$3PjA_XY&VWUA%@FN%WV;c91+@{;^#t)5brG)`~JaoS=21ir*ph#+uQK!o{5p{>A z%T4IVD|vHO`}WHJ63aG?y`K(kaMng9pCsIY9S%iK!>L{I@kvd3@U|PLw0eBMl;4w) zmCzVEy;I~%>ginvPVW@?b8G_8ksNISP?_2`@#3a2w{OBuU872{8;3Jrq3r~m&r(CU z&M0PV9zD6#Wi8ahJrj(>-R4<1_?v{ivQk%Z;aGh1pzRRpao?uEI|@5}io6QDX+*)! zh_#y+3^?Cb-&ye6?9P6-C^!NZU7IKHS6am}uO&??b=k3-svVMe+OPWy&qJfuL&bc#h6>-=KQl2k$ zEy6zP#Go9%^AKz(4%w*6g`jqz$~RGEYFTfUYs6b#&(JIQI7J-$`uYJkTEX?n?9O;_ z-P9`n_4NrhSBoyK!TGytYUvL}F;|Iwjd^0J+fAo8w_c5Di`C!jeBc3Y@<-15ABedb zn557drYAb%-L|Gxd|MG;opOu94Se@rXJZjI;)|iNbEx?#Re~+|QoW1Hid5dI-gE90 z_3DRBe0IyOB1J9&?HSkd1B$%9rLR)T-OHPCxNoEyO`xiQl$D@~lybIPT>OSLp__{l zQUvXHU|~NF@zNWHL5e&D>){6H&)2i`m@Nv9@x=HyixL!hOABd+yS0Oi1FJ7P58Ep8lBXq276&-4gXfIDych)oZ`$+oHIw=1zl}(i1W7%&v;KQ z>Z$(UjUN)XZX1QR7e%!FK&b5j`T2q@uTU%5-lvkj?OUn+YP3HC?T=J&kS7-WVMP8E z6#VJsP}@^oJNA>dA{n2gY=*bA7Zy1aR)y4&r-K$xxdD%ELFHBe;{b?pe82~#}*sw0<2 z+>qt{psEWGT#x*_z)<=f$oA{9yyHix>cfHUAMnYGJNVPI`iK#3xo?B;iV!#JSJP$k zMHk;TL=VX07|T2Ce>;Usnl*F!OvB9k3Xo@H6iU@rTbJXwZp^ zj?5S`%JA5#Cm%Pg`dRtXiH1yio{Br%cI0l|pwwd=JAy;R;Yg*zgrq?Ru~2uLO-60_ zXZj1ra)BwvW5rX8=NO(Vc)WO$k8`X5j|Ig(%pWv_l{4!Vce?2B8bvws~q5}F8KEsg4;z_~d{ah6O zJ(aVIFaGKTzp-C_9{3bV++795~;ihl$V?{%&Wq|b%$2Q`r$8+J( z;g?%q)bZP%7n3^EqN%0S?c&5vV_X)pS=$+_zf*h+80`-Xi7#~;qnkeCSkq_Xq0Wpb z^=}G^m$V$%;kz=T)W0JnW+R6`1H26 zrQWWK973`zb+V>6aA*<|(vz|>3ypk?Q`q8&lX80U;N;jX?STNPw=K0^7Gg+d6fiUU z-;r=aQ=juobMO5h-~X8ZzjEdUoOuBcS@F5uRdofmD-fz(fq{05kD3Ko2`hFVk}cot zY&v&-bNfGyR~AO9iw_>8ukCtl^eFZe;AclaE4;)7k1lPEr8`bam^<>>8&8?Ye1g)_ zHS374_ON(T`q6+Wmx^tKoeOYs=^7GHIx^s^{h8>w`pbcT%rqdB_FQMXmS=oY{z6f< zdQM852_#U9UzECfaN0eKggoN!_FVniGoswR-t2%=1C1Kc5&BR`*RcK8=`NN)C-F|`!cAMooUKn zQb_pTgebc`Kd9|sm|?FyWdQjN9W+@|-Lz3Rv^Mq7RDnYrX5clYD3wQWItGr36CDy) zCdwD6v$Q67QW^y3FSwTLig5a#YrJ1m7GD-+1P)?wdn?F1IC*P;TCNS~q0{7h-$H!B zlqk=3KuFet1kM8b{S4xZA=Km1Gz8;>3sB_Xzc;fct+~?E4DhC)ZbVaTDN*k0&?AOf zWK!2fd7uM?c&5?~(Rdd)20dS>IXJ_1eW_)HBTV9V*ZlzeHz~ybYC7v6bD%T_#|AOO zgzs)X&m6ny?E9YwnYYJML(`&s_Djn9W}Z&ZL$6P33ZFv2@y8j6(Na;4wi)yyK{_my z9?m?S#^^`DSETcO1bj&RD&HR9>L9kGOzGIk15xSvlv1{*)rff|8%!$#t z`4~M8-xk;Fmn{72mkh4|n&NmmjnKM3*|a72BUOt>Tj|?nyK0h2pR}bM>d??eT8Pz; z_h`!L86M*DQ~HescP)EYKX(9R&S3fpoWBGoGd^hmQo%t{Y)u-%2gTTAX52kyB1}e8rjky=`PV_d zssrU2yap{&pk!9|2rOJ!Q#grW$?Bi=oZfl!1K_D4k7zaIDv>oYtO z4f3jP+E;FC_avK%gK!~+{?jBE(v%b6SATh)?pKW;JBufl6K>c8$j>IryEG-4pdXYw z7WV6K8+8Ya8NAXAE<8!GrM3Rk#IiY+Azfu4$qjSF1u9-j3h)`CU$@u`{YhirGlV(V zPJd`=F1#Ps+x2xd9kEn7wkD9UmgGlpBgiG*68~?q3uK29E&_G`AMir<(4?h0crf8P zF3SBq*;xFiiusCg>9{Cw>B$z7rUX@#+uP7nI>wQ`VWS>7#A`~gY9~(+13YcNMbGBH zq30WOdUoh~m_;MBG!VXDg_kJdAXs1ZC-RSDzI0quK1i?%A54hyoAk)S8hn_(zp(kf zXne|DA`C_lk9kAb1ql-6iEp{aSbB`)xiDTyqj?A)c@93gDQH#+*N7#9?-589K~8xR z^CpmDU1mi^J${TnQqg3eNEpe65yRtFzk7t)JRQe`#afE95`edc{&&S~8xJSAdK0me z5{I80$&|V@r7Q6S>5>gw_zrXa6n(m~@}a*6 zvs1kcATv_pz@Z}<3qbsH93Q#~@v*pBhq!7EqV2dDAl|7%ocb<<3DO+XFb}HP0(?>W zhsuSIv#0dm(Ejr;X?NwcSNxTBq-#%qMf)dlQO@+vJ9N`)dV~4$P3!ugS9;PA&=YDV zM?TyBRLO@=lDt!13E`!=+N&Rc7h%>b3D}>D+4h);2*;bJ+K3U5KO74mZy_+vdf4ju zn2{ji$|Oq@0jpbjZrXf)mM6tvAu!I)+;G<4gMxYw)s#M%R@p%7>A@49_V_s=zE)Hzp5@(-VV=ht=4vg~z zM%bO2awfO-N+E++I!d*w*5HX4c3CH&P(hP>l$EAA&gQ*&*a**OqMXfm0UVZUS3`?< z);!Ft?TXF72=T|*OVI+BYs(DK&u{jIGuL61=J=V8PhuA{mZ6)S-wHB;7$#kyXCivB zT|e^cLxCMVnmc+o%AmX(^GSiZvj^aenLkSZP;C!B5z9ZWDX+#fr9uaCHtLnqnA7vY z`r@b?Y*F@H3f5Q< z1JQyh7LdpFl^W$7ZS3jqlxtCkUQ2$aGKz%cBm;+H95k=BQDo1D)w(E)opE&<8rP{P zi`Nc-*;PhQ)T{~)f@j!Z_2+j7?)6Fox2*baS+Sw{1!vzaD;A$G&UW0g+WDmwiolg} zjaNDa9%HkK>?$B{g!jU2&num#yK5`)1v*^Ygoo&4ZDrewQRcceYH+E_$Ctg*OJyy3 zV2vbyNK>{&J+l8>OCcG|bn&pJIB3;vHD!m(e|ZI!ussOu0&scc= ze+<3_Aw%Y_MXK^9Jy++%uTm4g8E>TD<{#p=w9;Sm?YN&_=bfHUX7DSVzp8It#txSP zHbcOPGH?d21GdjUf{RbMgG1REddi;*GZ)vSQIS_lR(mC56MfA7JT}r9yA#GomBZ=Y z*NPdtx0tZ zi!;eDBm32~3&PknlPxUvQmV>=8RUoXCB0I=QFk&#H2azExin9MrESx4Y^C zFf<=QtqKgx3NB?LdtK?-}~QY3V^?(b1nwX9rRy>`oj0%Z25WI$ei0F)ZrKDm|zdCjE6+q z`2ssDuWfOjgtlx4%1buu*jXFxT74)tk}naZJN$o9>i zfsit68)IK!lVM7z%G)uoLAKcGhUS(u=5$}* zhT(07NT~{fgxGRP4uJ5t1#6^2xH6$Ci$KW^y8&+dHw#C(ehDHlWyicDS9z)H+45MY zo3((%(OV=wDbF#8I)gEb>z$T{=DjfkwAnYKY>t9|QM2xSYb@iTNz% zSxyU`cGJt{7!A@k=Ogo%Y}&ka$(Aku_TYNah0y4W&W(89*`*k*T#V5ay|Sn&m~6u+ z3OmL-Flqo=1+)cdAJ8$NGeEOIwe1+Wfx3Zq0)>Fy14;uGeGMZQ&|08ApaVdsfRaF# zJ3$U;15iKE0ia_*XMi$yVh5_d3nLHECLs2A7{K)B=oEaP9zEXrry_h}bpP_p2K$}` z7`vBeEmfgT1L7~S0QeFL7L7kzc65d7c`QQTQS kFAPs%Cqhrs*3LR}_Mbg;U8lp`0RQ)CSTXv8&TaVr0q6iPwEzGB delta 4505 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 KM;_{U82=Y3f$}#1 diff --git a/mlinkutil.c b/mlinkutil.c index ea2fc68..acb4a94 100644 --- a/mlinkutil.c +++ b/mlinkutil.c @@ -47,6 +47,17 @@ int main(int argc, char *argv[]) } serial2_set_baud(serialDevice, fdSerial, baud); close(fdSerial); + if(misc_check_device(serialDeviceUSB))// && misc_check_file("/tmp/ML_USBSER")) + { + fdSerial = open(serialDeviceUSB, O_RDWR | O_NOCTTY | O_SYNC); + if (fdSerial < 0) + { + misc_print(0, "ERROR: opening %s: %s\n", serialDeviceUSB, strerror(errno)); + return -3; + } + serial2_set_baud(serialDeviceUSB, fdSerial, baud); + close(fdSerial); + } bShowInfo = FALSE; } @@ -95,14 +106,14 @@ int main(int argc, char *argv[]) else { printf("ERROR --> unable to connect to FluidSynth:9800\n"); - return -4; + return -11; } bShowInfo = FALSE; } else { printf("ERROR --> unable to open file '%s'\n", argv[result+1]); - return -3; + return -10; } } if (bShowInfo) From 34f07a84ce033c4b113a7136edc9243630178098 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 8 May 2020 07:29:48 -0400 Subject: [PATCH 02/18] Add switch for setting BAUD --- main.c | 58 ++++++++++++++++++++++++++++++++---------------------- midilink | Bin 61488 -> 61496 bytes misc.c | 10 +++++----- mlinkutil | Bin 18168 -> 18168 bytes serial2.c | 6 +++--- serial2.h | 2 +- 6 files changed, 44 insertions(+), 32 deletions(-) diff --git a/main.c b/main.c index 32ff62f..e18b233 100644 --- a/main.c +++ b/main.c @@ -344,7 +344,7 @@ void * tcplst_thread_function (void * x) play_connect_sound(buf); if(TCPQuiet == 0) misc_swrite_no_trans(fdSerial, "\r\nCONNECT %d\r\n", baudRate); - serial2_set_DCD(fdSerial, TRUE); + serial2_set_DCD(serialDevice, fdSerial, TRUE); do { rdLen = read(socket_in, buf, sizeof(buf)); @@ -363,7 +363,7 @@ void * tcplst_thread_function (void * x) } while (socket_in != -1); if(TCPQuiet == 0) misc_swrite_no_trans(fdSerial, "\r\nNO CARRIER\r\n"); - serial2_set_DCD(fdSerial, FALSE); + serial2_set_DCD(serialDevice, fdSerial, FALSE); } else { @@ -467,7 +467,7 @@ void do_check_modem_hangup(int * socket, char * buf, int bufLen) { tcpsock_close(*socket); *socket = -1; - serial2_set_DCD(fdSerial, FALSE); + serial2_set_DCD(serialDevice, fdSerial, FALSE); sprintf(tmp, "\r\nHANG-UP DETECTED\r\n"); misc_print(1, "HANG-UP Detected --> %d\n", delay); misc_swrite(fdSerial, tmp); @@ -690,7 +690,7 @@ int handle_at_command(char * lineBuf) serial_do_tcdrain(fdSerial); if(MODEMSOUND) sleep(1); - serial2_set_DCD(fdSerial, FALSE); + serial2_set_DCD(serialDevice, fdSerial, FALSE); socket_out = tcpsock_client_connect(ipAddr, iPort, fdSerial); } if(socket_out > 0) @@ -704,7 +704,7 @@ int handle_at_command(char * lineBuf) serial_do_tcdrain(fdSerial); sleep(1); int status = pthread_create(&socketInThread, NULL, tcpsock_thread_function, NULL); - serial2_set_DCD(fdSerial, TRUE); + serial2_set_DCD(serialDevice, fdSerial, TRUE); return TRUE; } } @@ -1455,7 +1455,19 @@ int main(int argc, char *argv[]) return -4; } serial_set_interface_attribs(fdSerial); - if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) + + int result = misc_check_args_option(argc, argv, "BAUD"); + if(result && (result + 1 < argc)) + { + char * ptr; + baudRate = strtol(argv[result + 1], &ptr, 10); + if (!serial2_is_valid_rate (baudRate)) + { + misc_print(0, "ERROR : BAUD not valid --> %s\n", argv[result + 1]); + return -5; + } + } + else if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) { baudRate = UDPBaudRate_alt; } @@ -1495,7 +1507,7 @@ int main(int argc, char *argv[]) serial_set_flow_control(fdSerial, 0); serial2_set_baud(serialDevice, fdSerial, baudRate); serial_do_tcdrain(fdSerial); - serial2_set_DCD(fdSerial, (mode == ModeTCP)?FALSE:TRUE); + serial2_set_DCD(serialDevice, fdSerial, (mode == ModeTCP)?FALSE:TRUE); if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH) { @@ -1519,7 +1531,7 @@ int main(int argc, char *argv[]) else { close_fd(); - return -4; + return -6; } close_fd(); return 0; @@ -1548,7 +1560,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket input thread.\n"); close_fd(); - return -6; + return -7; } misc_print(0, "Socket input thread created.\n"); } @@ -1556,21 +1568,21 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create UDP listener --> '%s'\n", strerror(errno)); close_fd(); - return -7; + return -8; } } else { misc_print(0, "ERROR: unable to open UDP port --> '%s'\n", strerror(errno)); close_fd(); - return -8; + return -9; } } else { misc_print(0, "ERROR: in INI File (UDP_SERVER) --> %s\n", midiLinkINI); close_fd(); - return -9; + return -10; } } break; @@ -1578,7 +1590,7 @@ int main(int argc, char *argv[]) { if(TCPFlow > 0) serial_set_flow_control(fdSerial, TCPFlow); - //serial2_set_DCD(fdSerial, FALSE); + //serial2_set_DCD(sericlDevice, fdSerial, FALSE); serial_set_timeout(fdSerial, 1); socket_lst = tcpsock_server_open(TCPServerPort); if(socket_lst != -1) @@ -1588,7 +1600,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener thread.\n"); close_fd(); - return -10; + return -11; } misc_print(0, "Socket listener thread created.\n"); } @@ -1596,7 +1608,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener --> '%s'\n", strerror(errno)); close_fd(); - return -11; + return -12; } } break; @@ -1607,7 +1619,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiDevice, strerror(errno)); close_fd(); - return -12; + return -13; } if (misc_check_device(midiINDevice)) @@ -1617,7 +1629,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiINDevice, strerror(errno)); close_fd(); - return -13; + return -14; } } @@ -1635,7 +1647,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create *MIDI input thread.\n"); close_fd(); - return -14; + return -15; } misc_print(0, "MIDI1 input thread created.\n"); misc_print(0, "CONNECT : %s --> %s & %s\n", midiINDevice, serialDevice, midiDevice); @@ -1646,7 +1658,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create MIDI input thread.\n"); close_fd(); - return -14; + return -16; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, midiDevice); @@ -1665,7 +1677,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: You have no '%s' device! --> maybe set 'USB_SERIAL_MODULE = ' in '%s'?\n", serialDeviceUSB, midiLinkINI); close_fd(); - return -15; + return -17; } system(buf); } @@ -1675,21 +1687,21 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", serialDeviceUSB, strerror(errno)); close_fd(); - return -16; + return -18; } serial_set_flow_control(fdSerial, 3); //CTS/RTS serial_set_flow_control(fdSerialUSB, 3); serial2_set_baud(serialDeviceUSB, fdSerialUSB, baudRate); serial_do_tcdrain(fdSerialUSB); - serial2_set_DCD(fdSerialUSB, TRUE); + serial2_set_DCD(serialDeviceUSB, fdSerialUSB, TRUE); status = pthread_create(&serialInThread, NULL, serial_thread_function, NULL); if (status == -1) { misc_print(0, "ERROR: unable to create serial input thread.\n"); close_fd(); - return -16; + return -19; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, serialDeviceUSB); diff --git a/midilink b/midilink index 8513e7a7969e58da4eafc71a17b12d6df5618d5c..b06e7a1dd5172bf112ee85b1c4098e09077f0b9d 100755 GIT binary patch delta 27921 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 delta 27874 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 F{|AJb*lqv- diff --git a/misc.c b/misc.c index c517554..677ed6c 100644 --- a/misc.c +++ b/misc.c @@ -215,11 +215,11 @@ int misc_check_args_option (int argc, char *argv[], char * option) if(argc > 1) for (int i = 1; i< argc; i++) { - char * arg = strdup(argv[i]); - misc_str_to_upper(arg); - if (strcmp(arg, option) == 0) - result = TRUE; - free(arg); + if (strcasecmp(argv[i], option) == 0) + { + result = i; + break; + } } free(OPTION); return result; diff --git a/mlinkutil b/mlinkutil index 4318e3ca5c71668a35e45f263dd10b7a79282817..763ac100a72531c588c012f26eb08e857dd79a97 100755 GIT binary patch delta 6540 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 delta 6544 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 %s\n",on?"TRUE":"FALSE"); + misc_print(1, "Setting DCD (%s) --> %s\n", serialDevice, on?"TRUE":"FALSE"); return result; } diff --git a/serial2.h b/serial2.h index 8bfc14a..785ba74 100644 --- a/serial2.h +++ b/serial2.h @@ -6,5 +6,5 @@ int serial2_baud_at_index(int index); int serial2_indexof(int baud); int serial2_set_DTR(int fd, int on); int serial2_get_DSR(int fd); -int serial2_set_DCD(int fd, int on); +int serial2_set_DCD(char * serialDevice, int fd, int on); From 45c20c4a2f66238a15fd1ccbfb1b7bb276b93739 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 8 May 2020 10:41:29 -0400 Subject: [PATCH 03/18] USBSER fix (was line-buffering) --- main.c | 3 ++- midilink | Bin 61496 -> 61496 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index e18b233..9e47f65 100644 --- a/main.c +++ b/main.c @@ -1690,8 +1690,9 @@ int main(int argc, char *argv[]) return -18; } - serial_set_flow_control(fdSerial, 3); //CTS/RTS + serial_set_flow_control(fdSerial, 3); //RTS/CTS serial_set_flow_control(fdSerialUSB, 3); + serial_set_interface_attribs(fdSerialUSB); serial2_set_baud(serialDeviceUSB, fdSerialUSB, baudRate); serial_do_tcdrain(fdSerialUSB); serial2_set_DCD(serialDeviceUSB, fdSerialUSB, TRUE); diff --git a/midilink b/midilink index b06e7a1dd5172bf112ee85b1c4098e09077f0b9d..2997d4ccc55c1ed1222a5b4d9fe81e9fabf1d02e 100755 GIT binary patch delta 8348 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 aV|gek=0nE3nu^iI=@>nI!u3N=`2PbspP-Te From 585e2f16b45c2742dbd602ed7386d479870db8fa Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 8 May 2020 13:25:59 -0400 Subject: [PATCH 04/18] fix error mgs --- main.c | 2 +- midilink | Bin 61496 -> 61496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index 9e47f65..b9d5e7b 100644 --- a/main.c +++ b/main.c @@ -1166,7 +1166,7 @@ void * serial_thread_function (void * x) } else { - misc_print(1, "ERROR: serial_thread_function() reading %s --> %d : %s \n", midiDevice, rdLen, strerror(errno)); + misc_print(1, "ERROR: serial_thread_function() reading %s --> %d : %s \n", serialDeviceUSB, rdLen, strerror(errno)); } } while (TRUE); } diff --git a/midilink b/midilink index 2997d4ccc55c1ed1222a5b4d9fe81e9fabf1d02e..59704c96bccde958f7241845fcc9633efac79fe3 100755 GIT binary patch delta 4696 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 delta 4695 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 From 189b2cc38b5c086cce985fbb24ff304959fcc2c6 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 00:16:16 -0400 Subject: [PATCH 05/18] Fix [PAUSE] bug --- config.h | 2 +- midilink | Bin 61496 -> 61496 bytes misc.c | 6 +++--- mlinkutil | Bin 18168 -> 18168 bytes 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config.h b/config.h index 54d3903..7e4c875 100644 --- a/config.h +++ b/config.h @@ -15,7 +15,7 @@ static char * midiLinkINI = "/media/fat/linux/MidiLink.INI"; static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR"; static char * serialDevice = "/dev/ttyS1"; static char * serialDeviceUSB = "/dev/ttyUSB0"; -static char * helloStr = "MiSTer MidiLink 2.9a BB7"; +static char * helloStr = "MiSTer MidiLink 2.9b BB7"; static unsigned char test_note[3] = {0x90, 60, 127}; static char * midiINDevice = "/dev/midi2"; static char * midiDevice = "/dev/midi1"; diff --git a/midilink b/midilink index 59704c96bccde958f7241845fcc9633efac79fe3..c808b3a9a8b7719c8965fd90296f1adf41d3b29c 100755 GIT binary patch delta 14280 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 PI{^P+??A)FUNicCpTC>9 delta 14481 zcmZvD4P2B}_WyI|1rR|&G(g^F7?FX2WIz+&;zfPLnE^qquyh5{by71-bKT7vd@Hxr zvaTAXCR=Wcnu?3IS`k+EUw5|`+}PH_HYyd67au2^XP9ATe&74d3)p}Ad>(r4_ndp~ zIp>~x?z#6F&$Y|XwafS94%^$xaeG?{xA&!jDrFrSbuS$iM^D}HuW?m>3#&~0uc_qI z36~fB`a^9?;~5efORmx8vAPA@%X0Y(RzeiQp?-rcCeq*9-=C-su2%|ofcC7*<%5rT zxt>S6PK9?)A+$JhPqWrkCV>k+8Z2}Tm~0hvMw~7@Bj3yOoWo!npijnWV#8!zqKkY~KMr%Ah9Ty#&F@&lEHONPuPQM4WXb3e5RN|x7(a88XQcpAEV`DcA z;pyp*IL-NZw$r8Y(P_119Mc+h{>N^xzFo?+^N8`i25Urs@()n7^l*G!R0HSL{=fa4 zmI%+(7;G2mXYmt=iMlY}E*hIK*;+(c3r#+3dw(z=bDE_3c^A_!62@e%@lhW`55K*eeOMKA=LGF`xlj5o8ktxS zXR27Xrqax;lM7qj6=u0miUxdhbt=|A?U#e0_4DDB~M2|}K zpW+sJ-ZXQ%ygUCo*=FY=xHL|9c8lx~2d(W?ovcDw7**<#c6g-rUwKcmgqC9%w&*z+Rut={TWb ztHIiuZM3c_08Pd`^%rCK?YdC8km)p9>k3MxOmV{C5g+a<<=x_%Ti~a+QgzX-Skdi2Ns9f+DI=;P^m z@_*-2d)>S1*n@65hUQ!^(inGejgGBbh1Q%j~!d2y7{dWW9Mj8!(s zjMfYEv&^T-CThGlNy%oafq5Pmr6D2{8a;nQJBwPf z#t?*hR?@Id)8Mdl1Dx8Fl|;7FZ?hi4;+UkLJ!ZLnl1ZM7VAdL}gIq7_b>MnW&$yzp zA5y-L{_XVf>^Nekf5_HDlcwx6&^oeHgIcE=tklc{A#dnrp8He zsoqGH2|Hb!_RSU+bq4FX0+=hUDx#7J3y?pm>F!CX;TMq|+d;P%7_7DQ!%3-{2Rt+5 zD=H_o$OX15P6ifZ_wfQO$&e4EmOJ0om~uBMi<?KD`+G3s)9`MxKWUi*xbnS-93oMd5~Tr#9^ zGQs0W!qoV8NSTm_o?2<|bcx%s`tyBzr%cFZGJTYdpi~DaDWGikQC5NC--%^H3@F~6 z*d;CoM$2 zL52PWieI67Kp9l%6HxpLg@OWwEYgl46V8Fu>a${??|{81OLO|(BAH-!a@xGhh!^B2 z!UYKz>}~cCRh5}bx7_*hq`^A9GDgap%ht$*wazN@l^dlzvvvgh8d6r_TLP8Nw{EZ{ z;pLSHi@-Sn9HT3zj5e?dWt0CKsE|<^A+;mx-QtnX$aoS0 ztgJ1IILrETsuJtD(K3PeStwI5bzS1lzM|Mp(3=UMY^VKG zbP2z8smv&szLg6bT&h*xx5r&goe}wRVI3`)sz!Lq>b(J~;fERA;;2p*p1+x@$;|iZ zso*(S`Y{rsf3%RhMtcX8?euR`_0fZ&uDG3rqS7V)Kg`$w9XTyC>C?&-$rnu4`hHE3 z!5Xvfhc(O(Nk)TpB7J0$%MK6Kdd3? z!IzPWBmG!j|3BEYt@F1hONsiEY5z-`B1xO@>9JAMef$RNt|w)J3q@u*oiaU@tfrNq z`e(>%`IoFXrMsuc=0)7)ktSA}`od4vt2iIgq~e)pUE-_{Se$xi*(>AE;BBSXrJ{&^VY3 z4*$$-24ye~(n0aBsQR(XWokQG=}3w!oqRkfW~-Y()~!o2deh&N-70U6W5%37U3Pm>YGPa$0naxLRla&o_1Q3<8KCsd3lWx}pJc#z-@F95#Md#Re|-|c1P;Fe zdqDBe3lZ`_@f)!HZUeGG@*A-6E(20PX{B9xaWEk0c3r@L5x_HObiSHIH%`fqA_>>~ zS@De0sp9W;E{jY4t#q^?LIMiXgY?k?Rz&YENJ0^Pq97&q$~u{36HyUC>)zYJHSg(` zp(wjZy9*{LGqASr(4@lDRJWaIm3-gjLv}@$M|bnGj1Rx9Bq|(MZrjuG9wfbY)5i+u zXy(~DZCaa0vm3lk9R}NIEiO|6Eky7lgnlv;q<&x zsG_m6XW}rsWOfQlxNWmj137LQ&vIN0vi(|VL;r9#JBr?(J%*@gFrP`L(@8u-R`7FB zn4aLH$t?N_pAf)ngO$EvTb*GPdc$>ktkY>(F zuxu_Hq^|K%AKroEe%YYR3Lk!TyTMjJ1YdZI)8-4Sw>SRIVB4u=I}fx_VtFdmx{&6J z_FV)=$jAz_OnB9SH+34%-Xonqbp+iG3JFbC9L=YHpEC{Bo3d!hNHg- zx}ryrwY)i)$tJ=v-@fJD)ds{K>=_fQTkQfXhLB7WJq@=#c{MyI?1O!s5e#*SiJe(R z23weZrZ*;&$$oB6IedJs(_kyommdQcVu=V(Im+t?#E<&mnRVU`o5Tn%2T{311y~pB zy m>V8@^w_unzP-Ma<^u$~}LjSwDQ=%J4Ht!EirQ?n3Q2ZW)Z5*9oNQg95r1R^1 z3ulMjU^CGrhE#Hq?l9y;dzBp!`CD+*g4OXcEh(twJLwmOF>wR9yU|IZA*qTR90e4; z)@!f{)MHS?NnUM6GO7!WV@%26|(#5(pTXo4-$p9coSbLc%zJ!t%jerEjJKm*1L z9sNW#Aojr_xoS3jY!o(usr^LriG3hz#toLx3^L5sAB_ui^(bo;Kf9KBm3aeu<^`Y2 zh;X34!psTJd!TZ*!G_guid*D2d3&E6!#v-2jX5jIV7r1Ckg;_{%FSM-YkikjL}(A} zF$3bb-hW;Xx-W|-!k-*04i{}bpW`jQFxZ>vzByE^!U%`yc^pwXbq%P|6TqCdvo>cP~jeeocC59(kxEVipF)c0?)eGi96dfiVR8s89F&#oesk6D zeLdDxf+DxZmrF+sPDqF37vDt@1l?8CGe0_dZ>2nt|DWw*yF*cn!PY`E7o?@MR+gKk zoe6%jVrT5B^rtUQ_?62e&V!EQ=u-<4$YT2Hf)rd@H7`)ZbKft}YpTIt$M#^36BfF0 zJi7C@V+={=%a1ZtA*`m87V5~t#>#~nLQ3h52lUEW?B;~N_dsltU90F08V1IY6n>1I z=n8n5iW8Ctif4jE%FWjGqNw}UrCpuwyK&)!RZ@FZpuJ3L9}Bb}cCwKz56vVS>BkSH`tBQVJrtX1AD_a; z4`So%rSU_ZZ+pl0-8OOpaVi^xCL+8@CzVgat zN76`mK8saFF#mi5s||iyJZEGW@unD<)^D_F>D(pjhF8m_bA;SzGt*C&BoTAt^(Ap6 zvNcjGjpY>I?JYlTv|XiiT}S(RM+tlFamolhL{sXl0=lM!T2AB}~*;ODFOD4GQ#$b<5OTatQAfH{LYbO6f~g zQS`p5n3-OE63+)gpRJNUrP)j;XvuOK8CLHUU+y;A%JsvJ`A7W0<(HKYSrw3_n=(|6 zNs?3X|H)YlIp!g9j=PMuiS*~H2hy(QNV>{{_!B>GeQe}E*YLp?jkapNFC(ZlH6HQ8 zfDyap`sI^w{djbFT=eL`Jnb1Es&MqH#_S!WZOdbWYxPQawud^Guf~Ph$`v|g%uFNl z$15w=A?$|z`puk*0`JKn3%)tvywxF`9f2OT`V&?~vG*L51z#Du6nsNtiLD`(MdEkA zUXP5kU}bTFeI}d57;{KP^&E_ISF4krS{X-At{g$HtQ=7++(o-Hq{TI7b_w$gwrd+9 zD@e&d&;PMuf2SM)n)P5jo7*4-jW|yEZNT<-js%`h3(Tpg6&^LG%D6K6vUzG`%!2oB zb0e8DQ1A(6;QLAHy5pE3wr|F(e}%acMtECP!7gLwvTE)7o1~Y@aS*b1##RoJ;Lls*v>f=6OO$ z_Qzde$sVz&pVR0n9OB*{azJK|-8A2>R*kJ@vRMfS)gbXcOaJFMd=2!<(W<9p<<5i?ULVpEx26%kp@6l=V! zY-s8fUL?{u=k4!z3|L@!7N!8!&kW~Tkg;InG}7`WS{yOuAusVeain#KdwPPfHI}q6 zpZHuD>|c7+&ZT7Y`Bs}=R!=55#KN9EjWVe15udety|C4OboOUK`sLcx6}5U8T{@nfYEk47&LM{ODEXR38P8OAi2vx;;_pY@?EQtFhSMt& zwX<}5l$}fnO%G{KtgbDzUuLwLp8V6=SzIzU>%4HB@6xO5K}p$Ed>Rg+OCOK6)Xq2J ze26im9Of3YJzC!0q|hF2Hrl*ffxNp${-yl_w;f13s%*kl&mr0{I9*r(WIhln7-ib9 z<`_PLXY0Jv$5(-E#eNqTdJg4^mBew)0xni$>KzT3Po!Rl=fSiwC_Bh%d;(7 z5Aa-fec?}6P1YE_cjLnS#$>nHaCrjMow{8t?*wo3KIv0I= zFqdC{W3n#Sd-p7F-+#KlK;Nsr{OH9#bbr!OVpCM%-i|g_M_Q7*6^XJo6)(e{=McZ? zVKZ5C(`2pJ%lTyA!O<<&xxE}*vrJummP_7_y@VOEwL2(rR2!Ef(=2~CBKcANgk6>| z+eh}v_nnYJxCb_cwc*1%?l?`>PY1QT4v8%Dhy z-mR3+vQJ;a(Rp`j)|0&s@nO1tU5+LFrjFMqgdCHp9O5`AJFy_-csN?jMcg<{Gt?c0 zAsymk$si6q%L|4Yr1o)CpEX%`7Hn@Iia*N6CQypo1L^9)izKhcygD!7<%i_yF{$h;3u*|#fvGIqwYdaibJ?IXx zWQa{#(44Nnc0`}8w_#ayt~V8IWD$s!kHVDZi+Ki3e<6E&Nm>F7GO zjf`ieW${5Lm|?T+5s$gW&s<&~XZs8*rRUeHEqiX(7bdoaN~S*3rQ(CJKpdh;Qcvg{ zbUFLZ^t$V7g!qv%?+piYuUiapU4uCj1Ll5(K39F_GL!5Bt%xyZ)Z1NyM#W3=FLatB zei16)(?>TXOzFHyR0^ySu9-{DJsZg@;oaAL-E*OyaFcm&KZc5^WI52QkXw9*Hg8DM zAG=Aif?H$(Mr zA(LFvia8C!OgO|J@RsNeNpU|Ut=7gg-=n?V;t=nH#Kn*}I5iIqT!*91RT7oA1b2%i z15z-HnZe7|asG2%nP4ym!62#e3-&PezX%eN$fR5OX_;l)5YE&rdFm zKGUVyRKP1|d34b&s#OkgV<-DNmag8YA>-(a8)GNjsg&{F&jXw)qoTw%Zu!~@cA#{N zXPgMTR<&a$D4s8||_U$A)|_I(=n?; z;I54G)pMl6s(?FH!}p7C-5Qal5`wuC-CXz@v|qo)sb$c(UleXR#D!gh)U|M|sf$sw zKyAOJ;t^H)e(@{IEv6W!VQR^fQ;HnoTKIor8wOs1ft70BysBRe!wqDzG&|LB2@`Sf z78AgB&9Pm2iHF@%s`wji4sm&B0r35u9A?c77qxb>d7a%-;5YB2YP7QVXpdKge+=B3_R!gWu zye46_z%B)_ZzSxmz^(+amd+rHbo=`r;LZSiv6GcHobY>~_5k{>5B>KRlPv^8GX;<> zC9!S5VglF^3Hu8$Z2)^s!rFmN3}AbJSvcVaz@h;7ti<>;u!R9^vxJ3jHQCGo>;TbrO~c>|6lbFJTH`7bEh#Zs-?xNuYpvZw)YRm9VS8t_847!19GlTQr;2 zV-1a`uRfJR3Tg9GV;)%5M-Ieo;_zXp#L5x@vQ32y6@eDZJiTw9R>sf$nyoX=mt^;A z++t+EpChI(hbMeWGW*q8dB2tqMIqiV=F_yz32|9I$)_P%;gfv4gUPkh%FSbNBlDZh z8e?bg^T53QIA4z~sPBt>J)V+!eAF8SO=2ZY{8tL2p~+GE>Ok)w==IGhx`y8QQjgl+ zD)gA>>%kJ-at+I^HTJ@ej7^*2g>pLSX+620u6$ZIZB6e8l#t~!*>5#u^05`cl8lmG zW`CYdbE?EzuOiv(HH@B6Zlwm|7e@eQc&VmK;qTPMK^fEO*o=OKkZ*2aLr~ zF0lqxzDqnxe{ZS8VBHor*zg)Qn69Rb+(VzPiL-=A{pIIXm_W9xONq}mQ8k$Okoe18sbG&vmDpOVRPaSU#7A zbj)z;aAm*=-)=3jwnv$4@dd0u8ob>eH!iY-K2`vQcX= zlU(8!$cagXjNqw~nsTUFQR$~X0qW@Spax}2)E;D}GXZLqPsguO3H&b|7g$_ODW)V- zkSWF#gmPt^HUwXPnF`F#pDyVsN3oD5`TwXQP18Uyu@~U?b3Jj{Jae39kzCA>( z7%1&cTGJBDOk4{Sw=SKR2L=oV%LU2(UXCxpk+F^y%6`jjG;e#XrSvZBhk+7nehxyF zRXofbDbifxR|72PAv%A7{{#H9z~A```~&dUjViW=Af)_p=@J{kUH?R}HDeI9z&G`P zOS6lurGqfgLqHqm7h5;ng}%&0lo_pIEGUS{X2LICnaAUE+=Ru>1RX zT;g}mrPqtCX9BAH2T}&reEVv#bpSM^5N7+|oyR+ht>ysphtB8Fjt{iYJJ)rfd@S?( z<1~Z~CWAcj#}g)8UHPeRI9Vph6R!b16F^^ac3em0Q0eD-(fQ;Jlf_mO0G@L$yD_wb z#hH%wV29s0N1;8)|G3i$ff<4RE1lQS-muO;z*6T^;2)$vc!C}WO zy7~uugrdjCmsOypKZ2#5^EH${{+)9#rmt2# zUkdF3@fGUYo0Eh)dED)@3BQL=!lkes2NNYnA8Dwpxrm&{&9MR@0i4XY%p>_ z#ZSWpM6p$YuMj%lxn6HlXySSGg z+CO>0u}*p7m^My#srgW$;;O8nsVDRgOtE6?E?kPG`xMxZGQ&@ag>Wv}F0Mt-AHK2U z7*uRE>AmTKgJLx_^_9$}_jje?TiON}E(Md`DzsfL;HTnu`F8PF=rvLr?{FcxiUqc< z*cwy7dH=->Of7aYEEc?M3@x}jF@_mqTp2RPRNDAT3Q^FnU)dIZrV}>3m);i!n@-Y4 zYbPgNyd_V(VBKBgwJI2yW0&4*3DfTkZLW=D1d1xpTS`$C6{V#O``!ol%0Nnh;Yk$C|}%gHeMHh{^r$cZ@zB^7fmz^+AfC z50)2N>D-Xp!6B3Rzgy>~iQ)|^KbWd<_c90FzhzNkf%Vz!mkL9!Fw+aHJCTaLa(Zd; z!JP0n`UVv`NOvEcGO0o8Iqj~VyYxeQ9=3mLkFR6nvJof2IjgAiUIa8&PUauLd{75M4>g}39r3Q@iv|Py3um7hfVfFCq>*_51nkM_<^VFMl7mqE?E>` zlepdm*EirAoNlLh-19!T@+GdF;HpJPT>1sitDYS2uqA|Pmn1!m;5x&`vjigCDL(62 zjOZ$r*p^9bE)4j_FNCf4cmisbN?c9gdVvWWBCEpF9N?M`t}|`pZ;0Y%a4j$JuUn^B z?1_C`AY9LNQC#~AQhwu~4}U0&&gzymu_Hq;KfGio{}LZs{LCzjMlElsl^drM&fNH? zH*SWK%Emn>%)^IG|A26<_@Xq6lJlvS(k8;0fSB>@#M6N13Z4Nx@y&$G#Z!T&2G2n} z7xDDq3A;eJ3_J_*RO8u;=M0{!coZKJPK&1$&n7$v@w|_x9gpH8$iahu>T@3a66P@j~4G)jekG?@mMmead+#|PF7{||P3xx{y7Lb7;-nP6HYR47ds%B=i(`>-WbR~A3GAsb_CP$;B!%DE`q?m4#|&L+3H_uS{@ z|NB4ZT&WpL&Dh(9v;4xEn%3JNZaCN=&R>7Q_UUgOEgyAX!8g*eN!+8iW*(o$e2ku+ zaCB5Z-oLZH9!IcvQGYbgrL1q5*fyXuIXbpTg(yZ-CbR@ceiCcA6}U(|${oTFM7?1# z4v3Y8CHS)ViQ!smhZUn#Jw^@P%QDn@kK31BkC%Vx$gV>{w?Cg~&Loj+vihbgnq{z% zo~R1P=#D9DG7<}s>G5%7k%F%1{!HbadhR+=68My|{6KXirQ*9#nkhzKn?mL#buxWA zZu(4J|E6RT%x<^e8Lc(+L@`ubH5D920dJ)W!I~$-7K&6O^C7P@I-Tc?W|cUjo908H z>USylbpg?kCJ=$=z@>#thmS8H&5~Z=2DTBrj3;<`jAl%=SLFt`NyXlqkC2`O&%*l} zt0TCQ@FYgnQ&*oJ{%3nCvgHJ@8CeH|HOe}b`iJo;4-1J(jFwN(j!D>*{z#8`;LQhK zs_=5_zza1`7%wV%k@#mxrU%ENEw8R;G8i)x$>dz`P4fCjB45Rc+ie&D@Y*!ujN0+V zCkH$Y$ehFoq21R&rWIuRFq}+~WlNB`0m9~k-MI<-zyp;Iu2g0}GxHk>6{ZiIg*;V< zh16KNV2pktt%PC4=n<){iVIc{*f%>=?Rcq7d&0;v(klR1(>UhSpB!lLfVLwwO1N9$ z)?zm2HVCA_Q<5N9Nanf}YeB%UK0aXt6W$KIbAeY2ym3~oaC2CuFOQ>onNEbA(Hx_i zn24Z=ls>UZQFast5Q_qc9~ucv;Um#s-m@c^N(^Ru|wJKsXkKKJMpLaa& zeNS1vB|D>c_SzFbK6o0LeYzy;*oY6Hz*Yw5YxLsIs_48*neyTv#WtKG>PzzQQ_)(I zYxr}9Cu$JGBC;XkZ*g-;>5?~OjnPWbF#$|VHp=vaQDnh=8n4?AMvO62hen-~Jvc6% z!LJm%pyodDZplk|@+hjWj>KTTw;(E5tXt&+F~nKsVEZL3ItwTZS;qo;PX-BHk|Q&3Ng@J>+{D|{Lx58}i#r54QUaGDU7EfR-!BHWJM9d!HR?iG&<0hlSzU0tLz+6CB*E^I=?$gcKB)IGtEYpL75CUB zHkKKg9AQmRb#@-4wSBF(L*yG-@3aL5sM(>&I=ij>z>5}-ckbc6Dm#c8H$S>de)^_eAvsGlRMLh zs>2~=y#m&U)GcsqN3imt7#vAf9JPfcrLe+nHV*}`+G-GlMYZr=7F_g}4McIE&8 delta 1847 zcmY*ZYfMvD96zVGJZxdKfDWj`+fqg!5-SYFWOIYUVNMY-o6&uk%w(~1Tf}9{j2~8< zk7*X;`T=`+J@4yNxG52{(Rve}7|V!$$u_+>?#1baRd~?{Ex@33lRf zZAa6SwhbN+jtaCZXRnE<>nk3w8`4>7JJ!fnlwg^UGYF0j&}PG8Tt@dAcHuiT$G8yx zOlypl_yYahcxhIb6Qfx<7;W)a0B1FjQPLc_W0p0bh*{ok&#PbHzVl;*;WR5CaDNBc>Fv_Dx=a0 z@`g0AP}7d96m}zWz^?(>3AS5Krtp>AQGZ?5wv7%#v9%0W(Dl}RMt!1Qa@62X8~Ih5 zj}`U;jay4_jG9XeGcHDOyTa!9Yf2mNJHIJ4q#6qSqO6g%CjQo^oUMH_@S(ceqqwF1 zE!8QBe)t-m`Z}lRc*C}%z*;VsUz5&yX?Bgmis|6X+lE`)2=d8<+f36anT*LAnjgLH1Uc^)M0|SVK7J`==;ml`F}^Dj19;rYPdZo~96e4Mst1ZvA}z$0D)5lL?tIaHE-V~V*u`P2-tnQ~bTy>%uG)2ezE*k;s1}&SK|Nx From 6a1cb59fdc292ee5e3c31cee7c3e693528dc5445 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 00:32:45 -0400 Subject: [PATCH 06/18] add mlinkutil dl to midilink_updater.sh --- INSTALL/midilink_updater.sh | 6 +++++- INSTALL/midilink_updater_script.zip | Bin 1401 -> 1443 bytes 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/INSTALL/midilink_updater.sh b/INSTALL/midilink_updater.sh index 11e700b..6fbd08f 100644 --- a/INSTALL/midilink_updater.sh +++ b/INSTALL/midilink_updater.sh @@ -19,6 +19,8 @@ MT32_ROM_ZIP="$MT32_ROM_DIR/mt32_roms.zip" MP3_DIR="/media/fat/MP3" MIDI_DIR="/media/fat/MIDI" MIDILINK_BIN="/sbin/midilink" +MLINKUTIL_BIN="/sbin/mlinkutil" +BIN_REPO="https://github.com/bbond007/MiSTer_MidiLink/blob/master/" echo "Checking Internet..." if ! ping -q -w1 -c1 google.com &>/dev/null then @@ -78,7 +80,9 @@ else echo "Old MidiLink not found" fi echo "Downloading MidiLink" -curl -kL "https://github.com/bbond007/MiSTer_MidiLink/blob/master/midilink?raw=true" -o $MIDILINK_BIN +curl -kL $BIN_REPO"midilink?raw=true" -o $MIDILINK_BIN +echo "Downloading MLinkUTIL" +curl -kL $BIN_REPO"mlinkutil?raw=true" -o $MLINKUTIL_BIN echo "Rebooting in:" sleep 1 echo "3" diff --git a/INSTALL/midilink_updater_script.zip b/INSTALL/midilink_updater_script.zip index 9848fac56a0f0aac6b92fb554ec4eebb6b3aeda0..8bebfd4207aea6af11142aad4f7c192bf3087949 100644 GIT binary patch delta 1373 zcmV-j1)}=-3Zn}cP)h>@6aWAK2mq4Sxb_DdEjUm zePE~=%(o0+C=r*YT#9pG9Q6twm`d|toylfirrLu&>-nD%D2*^kEjjhSb`t9*z)wk}{ zRro9YJ=xIPC`4;(F}WUE6MK1W&bkJPuyZN#X^Ip?_DB-lP`(stLTZ2LNpC#p8fOPb z$-Liu{koO-ZKH8>z3f}ot%*h?jbgHrauu?rr!ap@SIRYKMq_Mu+RK?We#UQD_Jd8$ESsT!G++vSxxL3N@>KH?rn zGHcXo)xtJM2WqX$QjUK~MCo!im|9&!momXxuCV5r({g1*97hW8;^JpA=5w2=7h(Y)a7pDB&iu2Ewitg1LIe4XuB~DZOm?T!a4!O%Hz#lWM?U@8AHdSS>KN zo1HeG5v~9niBzf$au2cHE4#j8xPXxBlcoUC8vnw9vqKsOef1oVx&9quUw)m(lcqI~ z18+z9C>!b7R7^YHkc2~{UHB#Tk;83+KI;+n-{A7dYUgtczjNwi{JWV(uSNSnjadwJ znLxb*a8csdk>7u7nTt?TPrFX!*07p#05?-1G}kVi)oTHo2{cDg4@3o^=kWKzh=2CqcU>#x%@8{I72>HQTG$g*YJu|asr=Y z#WC!&$?(goJ@ikfyqgkgflm6DgKF%rxvCs>c*Q`G{&;^oR`aixOAv_h|uRcU&zav z8oTdC5;A`lL%S|SIg8bea5|5g%!9_0_&%sM`cWmUJ(a%gt8;h9oZsJax+s%yol zZlVv0=G|0fY@7ByicdjmJbi0Djagk^$DsRnU7dPI$|8MSyfwDTy4)%|wE(t~_KDgFk3;7BiP)h>@6aWAK2mmUUo>16dt7p9g007Ji000vJ9Ft)M777Uf1MpR= zUi?+7kv$lHu3xcLJW1OzoDGvUlaypI21hj@25?=s(;+A6gl>>@>fOmQ&E&s#PXYnP zZqhFr>2~+oXJ1b*z9Sw_iAPmry?}Yd6=YH@B~1WdL&+E@5$b|U_7>J62cM=OS-_Q+ z+{-lsu7Rcj5fTy+@NkVVc$B9Blb|C8n#n|g2+NOutMLt7v6M*~!zA}&?!%D#EL99B zdNwC2VgYyt#uy9?gV}}w3aP)Svb~qDA+@89MVjWDf&pKJL$EFmR{P zg-LfhcX~I&?i40B(}_FlHvwkMkYZ^6ADIoy+F<$urYVn=iTDmnsgPG3Kt%5umegnb z9$8WFMYjHWy%2-OB3+j8q3$k$NXrQ!75Wr^6w>=8(mH!fNKq8cWtumIT#~rLP~<&w znGF^LXV`ZxJN9|xzInrvpS)zgia*|p#ck0ar0#Myh~iN{DwJ*QYhS%?7uTtCF>=RC z_qT_$WzW5p7xAz3ceSS1NsQX=&G>TQj^~R@XWFqzf}KlANHtPO^9Q0#Lxm#Miqz15 z6u}=<6$*k9S{ko~bmTg^KE_$we?Vu9TNk*1JEMv9^B<6473$fzNwnp=IYcX|4 z&-hJryVZ~)X<#=~vZwxsGeO_`)}`(Obyf2po}ucbeFTbUC~z*FV+kHsqMPzlEq+f@s>M(#1T;#RLG87>Fp`lKpAvcgX|aCS)Jpyto`BT*zg{9J^vJyih8|T_NWZKeJ=lt1g z+j9b+Gs!XRlkwoot3C8j$GjT?>I0MXF9+4wUqRb))Zvu_MS7#nSk1m#j>iUjN!Z10 zu7to`JR$xgn3YuqAMzM)2Abh5>6drCB2y9LKgME9vD$=XJo~I`A~z|2%FCs7NFX=o zM`ozhZVi7lb8xg8D!eI6Fx;}khh}}lz))N(%@W%x|DQ^^L6(*3sVsnOtY=J@ra6@w ze~}oR+1BpeQZZv0wCX}sv$);X$Ma~&+#5WBclQXF_^?{y`;~C_MCK;mmaC5Fpj0)+ zwo7*vTH@uNdu3TX4=3zc?CfVU;(>)V&Rd5Vm4%bseF*M=xCX16dt7p9g007Ji WlTHOJ1MpR=lYIps1_}iL0002zg=`4` From afa1a8c14e446f09cf0e84d96b0cbbd34d56d548 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 00:51:47 -0400 Subject: [PATCH 07/18] update midilink_updater.sh & MidiLink_INI.zip --- INSTALL/MidiLink_INI.zip | Bin 642 -> 712 bytes INSTALL/midilink_updater.sh | 5 +++++ MidiLink.INI | 33 +++++++++++++++++++++------------ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/INSTALL/MidiLink_INI.zip b/INSTALL/MidiLink_INI.zip index d2e45ec2e79c9f026458c779371dbae853983e25..377f218b07805513c00b46e145d63978fd120d8b 100644 GIT binary patch delta 664 zcmV;J0%!e#1;_<|P)h>@6aWAK2mtE^s!*i}FDe=W001Hd000aC8~{yeWNA!kZfh<{ zPDxc%2>=6Hhqqq8hqqpJcnbgl1ONa400aO4005%J|*o6B^rSFgm5ED5aQUZ%EUG{cMsuOsDd~Ohz`NXb) z6Xr#HsPg!K#NnRK-fAfA<0uKGO;|{~Bt8C-_JyYQ581vSg++KxMM>bAmhgRYD9=QD zHd$Ka5;gjx(IDTbATT{nk^h1GcE!q69Vp|;Kp7~S+|qE5_^j4Ur)^|mo0TpzXz4aZ zC9`ZYhp=re17h0W1WaV>OS+_Jaff;VeLZ&#>oylV z7ucwK-S3^M$=cv617M|-;bgon_n*J&!EGvSGL+@!8s}AXk-@rtC8W}4mZtG%!SnEE za0-8a&gM+_F=gx0qT^oej$G}`J<}9*)G)5wtb6Y2`G|p)F&?g)jx%4szTO%15ToxH zKdD(Aw!GnE^k9m^5{ReB%hA-}d>3nB=>O9NuyVw|nS+0?pJf-Xvl)7AGlSFdxf$Re yP)h*<9s?8r000O8>jkP%r3f!78Ug?SA_V}GH3B3AT8Fn@lU)KI24DgJ0000*t0!y# literal 642 zcmWIWW@Zs#U|`^2_{1CIH>Z97(kqM%4E8Jx3_J`n48EBunLe3$*?OLSo}nR}49x5; zl9WMxiW9_huYyZG3QHXe!D zfj2y4)Bpc1J1F=^X|L7!+uy&`d^lphspZ!SU$#!4rTU-wJD7QFcb=_lP@m$(+8>mg z5U}En|0Fy6!_M>4sx2m0M#*?HaFlKAZ@#b8W6*05@4&HqL-JRKPG-G~6NbDJHnqVV z9yi4Euk>>^ZQv|F6IJh;qKa#!E$4n zveR2xlgveUT=O-u!gKuAth1CVKfBKI&&^966Wso+ndx)u#9_PjG0QG&u5HtL_Opa7 z@%AqE9mVI*y$W}T77%Q=+j{r*qt_LSi(l$kXx`rCw&3~Alsw6o72Zp>KUwE-TsrjX zbu81rzi2Z!|6Z$;;%usC@o|_|@)` zx@!yFnnSmKeRQ->UpS&U?(Q$`OK#;c?4lP=YpgoH^%%#rdv`WU#@iOm?eSZ;{phvd zjML0yd))iw?#T1sV*CGp27~3FDlgHLW7QL%-`p*f`st>v+WZId0p5&Ea?H5Wh6E_? k8GuQJVM!y1g_=@WAt?ndl>~URvVqhx0$~u4mSO_&08XF<5&!@I diff --git a/INSTALL/midilink_updater.sh b/INSTALL/midilink_updater.sh index 6fbd08f..08e83bc 100644 --- a/INSTALL/midilink_updater.sh +++ b/INSTALL/midilink_updater.sh @@ -79,6 +79,11 @@ if [ -f "$MIDILINK_BIN" ]; then else echo "Old MidiLink not found" fi +if [ -f "$MLINKUTIL_BIN" ]; then + echo "Removing old MLinkUTIL" +else + echo "Old MLinkUTIL not found" +fi echo "Downloading MidiLink" curl -kL $BIN_REPO"midilink?raw=true" -o $MIDILINK_BIN echo "Downloading MLinkUTIL" diff --git a/MidiLink.INI b/MidiLink.INI index 280e2b3..5c4d6dd 100644 --- a/MidiLink.INI +++ b/MidiLink.INI @@ -10,7 +10,7 @@ FSYNTH_VOLUME = -1 MIXER_CONTROL = Master MUNT_ROM_PATH = /media/fat/linux/mt32-rom-data FSYNTH_SOUNDFONT = /media/fat/linux/soundfonts/SC-55.sf2 -UDP_SERVER = 192.168.1.157 +UDP_SERVER = 192.168.1.130 UDP_SERVER_PORT = 1999 UDP_SERVER_FILTER = FALSE UDP_FLOW = 0 @@ -24,22 +24,31 @@ TCP_TERM_ROWS = 23 TCP_FLOW = 3 TCP_SOUND = TRUE DELAYSYSEX = TRUE - -[MINIMIG] -TCP_TERM_ROWS = 22 - -[C64] -MIDI_BAUD = 2400 -TCP_BAUD = 2400 -TCP_TERM_ROWS = 24 -TCP_ATH_DELAY = 0 +#USB_SERIAL_MODULE = /media/fat/pl2303.ko [AO486] MIDI_BAUD = 38400 TCP_SOUND_CONNECT = /media/fat/SOUNDS/connect_sav.wav [ATARIST] -TCP_BAUD = 31250 +TCP_BAUD = 19200 UDP_BAUD = 31250 -TCP_BAUD_ALT = 19200 UDP_BAUD_ALT = 19200 +TCP_BAUD_ALT = 19200 + +[C64] +TCP_TERM_TRANS = PETSKII +MIDI_BAUD = 2400 +TCP_BAUD = 2400 +TCP_TERM_ROWS = 24 +TCP_ATH_DELAY = 0 + +[FXCAST] +TCP_BAUD = 19200 +UDP_BAUD = 31250 + +[MINIMIG] +TCP_TERM_ROWS = 22 +USB_SERIAL_BAUD = 9600 + + From a2c85c755cd2bc60426c2b0cc6152624497b50e4 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 03:01:18 -0400 Subject: [PATCH 08/18] Ignore DOS line-feed in MidiLink.DIR --- README.md | 2 ++ midilink | Bin 61496 -> 61496 bytes misc.c | 38 ++++++++++++++++++++++++++------------ misc.h | 2 +- mlinkutil | Bin 18168 -> 18168 bytes 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4bb9c35..b2ce2ba 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ The 'midilink' daemon currently supports following switches / options: TESTMIDI - this option sends a middle 'c' note to the MIDI device once the daemon is started. + BAUD - Specify BAUD rate... + QUIET - this option suppresses MIDI debug output. MUNT - Use MUNT SoftSynth (no USB MIDI adapter diff --git a/midilink b/midilink index c808b3a9a8b7719c8965fd90296f1adf41d3b29c..1cf9dceb79904055dcdc8293b7e030ffaa49e0fd 100755 GIT binary patch delta 14943 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 GlK&5qALxGo delta 14819 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 diff --git a/misc.c b/misc.c index c6a9343..9d26260 100644 --- a/misc.c +++ b/misc.c @@ -26,7 +26,9 @@ // // static char pauseStr[] = "[PAUSE]"; -static char pauseDel[sizeof(pauseStr)]; +//static char pauseDel[sizeof(pauseStr)]; +static char pauseSpc[sizeof(pauseStr)]; + static pthread_mutex_t print_lock; static pthread_mutex_t swrite_lock; extern int MIDI_DEBUG; @@ -784,20 +786,24 @@ int misc_MT32_LCD(char * MT32Message, char * buf) /////////////////////////////////////////////////////////////////////////////////////// // -// void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c, int CR) +// void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c) // -void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c, int CR) +void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c) { (*rowcount)++; if (*rowcount == rows) { - if (CR) - misc_swrite(fdSerial, "\r\n"); + //if(pauseDel[0] != 0x08) + //memset(pauseDel, 0x08, sizeof(pauseDel)); + if(pauseSpc[0] != ' ') + memset(pauseSpc, ' ', sizeof(pauseSpc)); + misc_swrite(fdSerial, "\r\n"); misc_swrite(fdSerial, pauseStr); while (read(fdSerial, c, 1) == 0) {}; - if(pauseDel[0] != 0x08) - memset(pauseDel, 0x08, sizeof(pauseDel)); - misc_swrite(fdSerial, pauseDel); + //misc_swrite(fdSerial, pauseDel); + misc_swrite(fdSerial, "\r"); + misc_swrite(fdSerial, pauseSpc); + misc_swrite(fdSerial, "\r"); *rowcount = 0; *c = toupper(*c); } @@ -820,7 +826,7 @@ void misc_show_at_commands(int fdSerial, int rows) misc_swrite(fdSerial, "\n"); misc_swrite(fdSerial, athelp[index]); index++; - misc_do_rowcheck(fdSerial, rows, &rowcount, &c, TRUE); + misc_do_rowcheck(fdSerial, rows, &rowcount, &c); } } @@ -832,17 +838,25 @@ int misc_file_to_serial(int fdSerial, char * fileName, int rows) { char str[1024]; FILE * file; + int index = 0; int rowcount = 0; char c = (char) 0x00; file = fopen(fileName, "r"); if (file) { - misc_swrite(fdSerial, "\r\n"); + //misc_swrite(fdSerial, "\r\n"); while (fgets(str, sizeof(str), file) != NULL && c != 'Q') { - misc_swrite(fdSerial, str); misc_swrite(fdSerial, "\r"); - misc_do_rowcheck(fdSerial, rows, &rowcount, &c, FALSE); + if(rowcount != 0 || index == 0) + misc_swrite(fdSerial, "\n"); + char * lf = strchr(str, '\n'); + if (lf) *lf = 0x00; + char * cr = strchr(str, '\r'); + if (cr) *cr = 0x00; + misc_swrite(fdSerial, str); + index++; + misc_do_rowcheck(fdSerial, rows, &rowcount, &c); } fclose(file); return TRUE; diff --git a/misc.h b/misc.h index 1b7be68..e850c3a 100644 --- a/misc.h +++ b/misc.h @@ -27,7 +27,7 @@ int misc_file_to_serial(int fdSerial, char * fileName, int rows); int misc_count_str_chr(char * str, char chr); int misc_MT32_LCD(char * MT32Message, char * buf); void misc_show_at_commands(int fdSerial, int rows); -void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c, int CR); +void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c); int misc_get_core_name(char * buf, int maxBuf); char misc_replace_char(char * str, int strLen, char old, char new); int misc_do_pipe(int fdSerial, char * path, char * command, diff --git a/mlinkutil b/mlinkutil index 6fd0d388ead83c0502fbd74dd3e6cadb34cf95a2..0cc8cfec4afe91c3f70b49278582de6099e678ef 100755 GIT binary patch delta 3762 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 DiZ*1V delta 3714 zcmZu!3se->8NPS+!J{C%fXfO!S(G!c{9qNvOv(k3w?Vv$3&VqD^g& z>0-o$lWL2(i6Ida(|B^g=TamwiMX`!B%UUC4V5sc+}|Z<_lbAab)0*mwq+~L zU3YBJPd@Ex-_~;)Z%XIRm(#Qi9`kfj#uA%Q*&pEy{Sk~DZYi>+5r^%QNJt{?hRQFN z?UJG%`c%gJ!sjP3ACq61kh(T}+5Cvxjl*~kfD~O*`Lp~g!scSKIH3bwH_bEU3Dug<+KKxIQ|(gMCZ!10lP8i04*&5c z5~M&?gfmOgkVqdk@sEVW6`BhiF22dT!O`bZ)CABmLg9x&{o9wMC@(E#I-EdI*m1MD zyE^~46pOAth4|D#DVkO%MTL#9j^j{18Ap8jSFdmF8wmr=k3~9YvUs;^E@Lu3Aw^rO zjCQ8Z*j~ORMcb+XBhO}>BqpB+jgCr~(b&f1Uyrj{GO?U+gjx7+xdG6<;^X1|wGl zasO?kjJhJpIOXUx%wtnp@Qc>^lAStFFXLw9lce)5D2H;55#kG*V{-qb zE8?W<<}IslX`FWP>LgFn!NSugKzZFeDn<9sY(*O!p!k|AvI=iW@ah;_@!iN zKmku*KG7dE5DQuPUUekf%uW&qC#mrUw%dq6RQY*mbV{H)(wwEO>E^7ZipVEB^8Fja z$>r|{)9g@ZH&Eg24XS)|+`dESzE81>g&t2Iz%c_X@V4ScU>Ny*RU8i_>N6Q{RJh0I zicIFYBH0UFk&U^a$o)+T&|%v`KJ!Lr&Ah<<$^su_MgoVF46&|M3M_}xkIA|lbg|vy zm6dD5_+>T`Q5bSoQw;f-g6-+oGcXU>^8vf8VK=RXRUJ4(?`YR1R>V)h8_|<8|<%QBa@zt)asL-I*7Ejv9J|#(1<*OkhLBgg0 zV+O!-A$9W-sYn74sURuS4eLb(6{Qaz0z0ltAa$jtKurFHvK$g0lb=-%*O&t31fEHa zTqmwj<^B*7MlOj!taaSWPRB0R-=D41)IA#SB+T~gFeu7_mlaVINY>iq(gMGEU3|9? z?A8OocMkAP0={vsN#c9Ms=Rm{xm9^045h_W$hUwCx z;6CtJbaMT_K1m{*{Rs_l?I8!HeNN0lpL0#W+(!fVj|;$2=h z)~x%J(vMpF&7XxefIC(Btq}XShI&3I&c^A^?chkCM4p4=P)~;!6mR-Sts+jy%7^MEMW4s+ey6@E zeR=6IZT76{ihSJUOzcfBj7DZgC)HF|t-FwaGux-$-9CJ@CNj55mH9FH$igx%d5pF# z%=O+Jbw!hPdgeptikh%P^M--UKc;x11JumU0(SobO_b0K!Wo918$E(se7ML+^e5td zyhhQlSLJ(Ey{(j>{UTJ3(Wc5j9EF#FD|(-&4=P}cRn`#r>c^0WBFG%u_T?&D*7~5U zne6e+Avpxwkeve{JL!5Mr&b+B?hWA>)c#p84l!e}Whu#2d7>T7-ME-Rg2%#jQwm#M ztLPt6We(u112_%$;50Mv#VWpg>g{1uFSFJc;43^aK@Of_ zn)NaP)ebW|URZnQP~{9rxe2lm?nU-zeei~8WBdofbj20CfN>Lv@dSfeqnNg;^6sg4 zqRSJ^4$~7QHgElCr&MqyRpWYKlqX5PFa*6zgQo@)i3cC7d(=<;Wf*46aRl-Fo|_y3 zItym#4uOr5pvx$ooE(7dXQUnv{)f~Y&Hu%q%M>lsdd4)Vm*_)|`Cexb^Llv2LVjd- z_L_+S9PLb)I|1HjL6*HE5Nab>J7!YyIJ_4)`^4ToK7BDR(j9XUL~VpS_J<%>!+bOZ zv6vL#I_pat|C-~dW{G~z@if?Z<)s@;99PzFIcW5q{wFeCioR+PN zK_nPqli)}~aTFvyni0Z$j#Wx_0OqBk)QMAU_*1 zY8hP=R9s2q8~3!5{Umk$&#P6rmg>rE<^x$6wSst7L)PKL3|(sAd?_PcYqy;8)Pqt599)fV+j6|?*zvn8$q^%u-{n#vo|3FaJ^dI z^ZUiW(b48|D^BluvHZ3a!@!?oUflEBmFsjgu(Fk=-OY2SOM4dI?cnB=Il&vqc93>w z&-bgI)N#l2>8I5N#?$caaJrOoHFje^-1e7JM~&T}ePGhMnnJ@W_|#n0^V1qH{x>mJ BOwa%T From 9beb8fe55a285c232b8f0f1e57957979c62b21e9 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 03:42:44 -0400 Subject: [PATCH 09/18] Cleanup misc_file_to_serial() --- midilink | Bin 61496 -> 61496 bytes misc.c | 9 +++------ mlinkutil | Bin 18168 -> 18168 bytes 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/midilink b/midilink index 1cf9dceb79904055dcdc8293b7e030ffaa49e0fd..f948b2f37f7bfef8f6c01ce0395601336accf756 100755 GIT binary patch delta 14160 zcmZ{L3tUvy_W#*uW_TqEq5|@o2gtyH&VVF}27`FS89)#-eEkK{U#OUnW_B+%sAS&C zuC~p*sYU6p@RfMcQj?&YmA9;mMP2hz-clK!9#1r9-t%Ak%me6ie|?~9&M#09~$|4j`HKKJrmLU*)xWov)w;ewe)=7 z`k#x;-Ig;bC=$Jl+a{_Orc`7y?Hod4_K-zqY7h0c_E}T>KqD;pBn49ZG z;L2CSJ0)g2teK}tYX*@(`5*OXXE_Q?0do9ERB~`r z+18NLV#QbHBN{z-37?J%kL(;qRRPt{L%oCl15|bxH4Lc8L(Rvb(NU-vr$$FcMvonm z-)9LqO?h}y@QUd0q?`&$3ZsLe|2FHmh2=y$7a!fPAF*8V38 zr9|v=^*U2E{yKUJ8pIA5Zz_(AnQk~ixp_W-vAnii^k63dlX%9z;=$el%xl$654ImL z+QVn`V6On?wQtaaHCX(ah|?(1%PS6P$5&&*Qpb7pTn~M`_Qrd#O3itJL~Nz=hWUt0#|`53u}h~_$vVw1X967^)lpIrd)x)>h@Q|%IZ{(B{Q@8X5_S>DFR#e?&A3C)?ZmFwBy<}m#U%#kR2G@eC4mHyo|}r7$IX&l zs??e4@mq0O;J+Jjd(cyOy;L97I4!8xF97)bm5hsjt~ZIvhsb!tq62B)NfS^zwn!g` z9u>0xjcRfouA)@ggWtY?!%T%xNff(dD}9IptsAjS9_O#;Mu|wjxpLBPz5D=r1_vrs zs1aubX;Aoo*P#JG@3Z;@A}{ejX@$d)u!k2ONxbzaZ=~vmvk31PQLm+@Zutu2}ep~BaW+L{U6|mV5a4Yqk9dA&kqf7X(Qc-wLhdWqMeg&({m{}EGa#1 zi*L*gFlJ{Cj9E$gLazmSZa-d~G-a4x`Gm)(*YTu{5I%9qWL~Bx4|nOWmgnz@+0XHY z6>}K-O=*(UO(((GGDQ`*!zzxwe^bXb;jSsO!N)4KD#^PnX|~JxK^KXt z_j^0LbevsNMUoYw*%sFq(7uKZ>hbg_E#9Y&4V3D^oilXc^j38oO2N0(kHPZE(99V> zN}Ew2l0&pBb=(lwUo|S=`ba~#!qOg-tb+bK@rJZ0bP>OlrU6x2(~^MJm6j-})9JXE z@z3euI5~YrU=4)DP7TR6>(f=h@warXq!T!914l{VVOi+gmiOXG)=CJdHG3fno7)9gB%j-z1IQP1FS zAKoN!J3v2;xag^AaR$Ol$w3T7vo32K%#L>}rP*xg+99k{2j2ks!RXm!X*P`rg_Vpb z2frC85uS~iW)pyt;-Rbsig(MV*$AMxw`>Q$3@BBkPmmB64*{tT$7Dts`Y0mQkA2)y zxt8n|X{UxO)CY^(tB@K*3@P+8P`nDo17%2|Z-L@fXaZ1%6#5J(UWI~y0ty+V#Gy2M z4oGz#E9?UY%=v1?>B;#tYqn9!?5hwm0?m&dXSrbxkXBYv$%esS-`8<>Dk6luy0V&P zpRiR{UAtGz5Nk(+UzEm=n0W$kfg9@D$AwoN} z$;lrvhBi6)4+bjNZWLI9e4Hx@C*Ck!@pw)}$XU{#k`{62#?dU}v5*!MuR8dh1H-*J z4X9pk)&XV6o5?`&dh-dO40$sKC@I)7T@~}SLs|vrs#_xVvO~Jo{r0J&)fkc^Vn4&$ z88V1Zy2%}(3MNqJnUa^u=G<%nBLI>MvV3WP*U(0Gc@5tu`Yg~ zhSR5m{~TuQ2p*G_8n>x7LGT5Uwb7!;*KzH&zf==H#6fPjiI--{=4qUC%9S=sffQjq z9UC89o!VT}s^bpUy0azC&a?bdjgtMZLaGk+V%e52$+Y=+rU{Asv#kH7O}?N_@XW|@ zcRc($(^Lt~I?Or~h474-lTaJ3m>C)7og%mC-;rZ1-Ze8a``ieZw30)tXXVlT;`1S` zQiizJ!RLKU0(H3i-UHq`e0OF^ATO{GlpA`w~ea);S!?_Z% zKqt=17e;{un?S+?jua9Ik-p)9Fbz1oQ&R_&p+HCmig#H(0hFO-6$2FSvRVlgVVw)B zD#WZ)`)iXjF_ zJoAFs<QTwDeA+jFPf=y&HmCn6gRNL-e8qRIixK}$xQV+}NAdbsTOk7|=N(nP?^^jSt zcBy)<(oFCJ36jFKW{xEp-u;C4Y`i{quHvwnQYPJSDRu#GYnRS+5t1cY>WFP72}vem z<@n#ZiiCRL^Sco!7ab*Xo`Dv=KAihSht6~j$IXsGc06nL(Wsj>#MdI$Y{`wLIzn1u z`NE1I$bF3R65()>l$Ql(+|}?t6Yt7PoDwniQ}gax;GxHKXp$-R%GU49yF+!Rh_O0T z2n45a>K0K+5p5G0;+bC(;o7@=P6C|pw$DlQCAlnyB)JGk z_fH60`X_V9rS-v_@n{qFXHwA}oWT%eH8U5^t|ysr)Q3M~;v%nT{m4#^)Qp{PyzkGD ztK&bm=}djt!GuQ+Y9&7EP7n31?K+bkr_PO;7hf?%t@cotJP(zDiXoZh9{gs5&Qv@M zUwEHV=CJD;TK=RnsWF~gONYp?U;eT&A;d+Y#1)zM$nCo}e<>s&cYY;16k?Bg_8|8T zW#{`K|KF_XG_&Mn19{;|SMvi`c0EI}uYsz&$yCEW7Hd@J>r7`fv)$n(NBgMVW#F!J zMxBY(lpP~ZAVK$MYgv<>|Hl9rS?k_>Q84SUBB_HH1FKkz%jOjXx+j`uBk{?38VKE= z=S>eU3r%CZfhDoNa~HIopfg>;Q*<$*gXPIgttarGhx|T>m+KNyHGW=~9`4rA&NKJn zeqFjQI-(;%q2qSrf9b|Y9f2~9N|;(fKPc9SLAyKsI@5ma(#gOxZhSlJdhXH2feSzhAdufAr_wi)Mqit%4zl7rl}7 zZXZmz#%subfI5^;i=gFBr*{6;5&MA_DDHG>=XdlG1HXZ4)6E(LH*iE+e8n z!{ET8lir*`vrapK?w)k=ymPF_ANd-uKfZ%WAU^rsCB92Czq?+C*oQnSBg)Pf_qn|| zh*OKgRqpIWv;VZuiOwE;?<6Io*{AH~vLHB4GoqlUTSF|3(SZj+_+ z^=LPKYkuYQ__5$S8j>Vj^Wm%tf?d4pBbc2MGCQ=yjsDg3y_rIPhZOH!pWouFVijyK zj~7ot_4xJT%BZOxBPdqpN@7T8#z1Jo-Plxx$CqTs#X~BV`cg5_g=AdVMWTYN=8Ywl z5-ITX;Tt8{8FonKLbSl@pxD2{mX=cCju(pE>2&e^7eLxrHOV>j&+av2f}_=faM%_e zUyy)UylX)WD#ync#7t|3wLBy%(|LI9Upzg=kx@ikbeV7&px9)P{MQR`T2bgsm$7R> zc=*g(kuOp2=q71Aze8u*f>TSA66$Kps)Q{B{Kml+wzt-srzrOSIb8gF(D4fXb7>4M zF2Qe<#zPINtyBh1`%kGxaS1xO>%J6RHsK~S_{A}T$eFUEU=&n?+i=E06|%QfEL0$5 z#?L>hk@S%pEB@%w$hgK#aj#z>Fa{(rv^rEeQEU@eaUMR3o?2~XCY}6!s3Mdr2R%oyFwO0!5 zW4`th8yVg3*lhGA{`9c~UmfxOW09$i4<`^E{D=-3L5CpQ3AYZO8Y0Cao1~d-MeMIQ zqbvjJ!t2V?WqK|`DE@c~KSCNKx?Qw-kJN2tTW&x+AFrNV6qu_;dXZ3(f7PI9D2Y!ZHEaSLqfsY~MM_*z`FWM*h%tz6jJ zl(6xYfsjl1z>+Lb?cYmg!Hz$E>0_t{uU|SJ?QCgXnuLOl=Kjla-ec3N+0z@aN- z!A)f0h)T^;N^g3(C40qeg!bd@<+8+!!Vco%-*zJDgyxV|z3Gh1ZLy1g-AQ?{{rIb4 zywCm@-ixkqm@<2{vO_~FWkJhwiv=lwvRZGt}L zG@=t|NfWOJHre=Bd-Wzt8+gn+;x7)btQ?RPpvA9NCQlzOs6Y@Dko!kL%Ro@bFhR#1 zdecq(d*!1^4YLJhMSjf5-?yzF^HnwDe@SnO(0UStR8jBZ+wFSTBsZ?gfU4rrRZ-y= zeN(mDj-7S#OfNS?++p2X??0S5)O42@C59#Ff)wK|Nf&X(jJ)p#W zqE~}+4%qH@v1dm^j~wkuPF(1|zo@}kx^6Mk+)`v}P9)*@^Z#sw{8RdPp`o#qOk+e< zKzYqv7-vLl_lVZc5v`X;v>HaV_K#>C9M+=RQoGstdhTUE7}Zb0yeMbhZr*1UK{#Jq z6iwp5PmDv3V`e*G`;21%H)3s7BAh1Hz~3gkrz$J7z4W68)EJ^RnDQiX#;vMPP-n|q zYYGvh{ryOYEvn3OAQ{Cw;ahXdVf^Y*>V5{B^Y^(7qJj9wQ0M zfBkyke`@`o4cE>iisaA@S> zC!3Mn5d2^aQZiP4A?VC|bd{T<=MkM_&2HT%nyq|QFW4g`7K*CGO;miTSq|SV!9Qv% z-`-0pcV5i|DIfGgTyx_JTaD~rOTca?Z+E@aW#td{Q&mB zvfAxoEQdtiNZ4>i&G;xUO0}_2ZlGn)H~T@^HvkMchWFGY8nVng&u21ZAJhQ0s<$ck zx0?lAyT(0_aOt1sS>1za(F z*^ql~V@|#RZ>SANlkp3+ahm<0=cpU-EgGtM1>B~g5g&H)awi8Pp3wR%04xIkyEYE_ zVZJuq@I$wX(ZmECqor29qq~5+sSP+D3@u_C6%W(lkTPRIu9XiEG&uo0qe_Nr0u@k! zqvmV@r!Hw|M)7`(_@sO3&oPS&oqWDiEK@Pm9yRFiC$sWjLXe^xL|bbFf3ueuxDCV> zc(SS#Vs#4s7Q`+MwMY~52XycNliI-tAM*$lIvRm-#AWnB{3m#!ufDF zr95_>n)2=~5(eJ!17Ljnu<_42_QQ%=C|F=M4p~4}+k1`=yF$)d`5(H)u?VJqi(y_0_i3?m** z^B89D!H;Z`8fNx1<;LC!5^PQGmNNbj$X4FmLp*$Nn119liO%sO1V%xH`+86O>*UYa z?|?nGf#2=#ZP2Ho!oAlKn~vB!p?XEEDjR0iWkG(mu^{9Rk+BQ+Z;CPO?Lks8#4^=J z$urM}G7@kvY>k3bGC{qALib!4>Kyna*%#p}?NTPQRekpPW^n?F7adP#C@f>><6n2v zbBK&ZJxJ}}K_46k$>mQy;&KuSYLK@{kT((J-6ZmYAXgE`IUz^kr(}l7(Cv{9`p|gj zwxCB+P7B_uhxzt{S+er4z+0?4IQd)hycS8_ z=Ts+ewFzO($3ssG|0VR8I-*Ap<6#&lFkAozqNN-Xv|GvRw$p-(cQl76{Ek76I+|-9 zHwzMbw`jkGzjGf6sdp59X7h^h@@~ZzEhEWuslq#?YpuN8NdA6~?{8K_br?_O{&*9X z#tSuPi%g9PqZx7x2}11Uwur4%B$mEVGwKCLoHyOEUSkxRAf zgu7XC6$Q1I3>yU~)mCJRuOypn#M%IG;I(r#bASoj6^N2{f*KXtN~3a*B> z?mk@6L1PPl@V=F&x`(JwfUC_$LRACx<@-_wLQZ4hw;8}C7i)#vG!n@Z@~!+tn31VB zVBpon02x!Y*215I@8fb|zM_pt5RreM2vCFA&y5;^hk|;Xl(~1q%7+-Wfae-1n8zw` zQN59<nQv3%SurkW@&^!XId(+G@^;BrpFyZ%5%hrKIc zcLBTY!ww2q2VkrZdsV}4Mo z4_FR+d8=Z}#?u!5TO3oD5I)eK&LAd1P7b)+EJ`Lwj*eRR33zc`)QlhcUsKY|ydTL5 zqde(#pTfzvnrS#UC}H_t8rHka*SoJDzh4&(g|@HiBE#Pt#-j1DT*9_GMeyGK7rVSe zp1`VSBNLwJ4}&2ig(1Dy>TxjSqvmx!&R6i7XA@M*`WFCV;q&?{p~qBD50V5{DM+$R zG3R!rY^ei7#rXWQ8q|Y(pH)Rf^pA#vUfFE&I|EuYvD{yfVeP|{pPLX&_w)C>>P*BX z&&8o2T>D&{%-V+zL~Wr|hQV*%FET|ykr8rl`4>Lk9()>juj8xm_e=Z${$9YLhB$N# zYYgd7Xs72F#X1tota{tzeyxYrQnpW;%&H{?fgaD4@gx1m0cw)W!P^|7Gw zsrnN14~(`(C7kIcDu~WY%gK?{o6c@Zhte4&aID=rK73WLcS7Op1?PD8guaZ|Z;doi zn$&LdY~mv^3_0CdWa@(!_yK-3K(TK@RE_c!A{=}&P&3mY_MntN3-!9H4n{-zAb3MN@3T_5xFrCIK7;-#(z180fH@7zBn#fgu_QryFxbQGD`9C(KhJXx*+lTilcP5jBW z@rGr?cpdy6;L8KG>j^6I4(s5b2X(3BoZn(V-A2z1+`<0|xJQ9cXi*gWV$V$-EJ+r& zHsYnVU<|>dw-uSBAay3($c9T@;wUnhE-!{^HB_zXK=`~D_M@31X9qGg4ckyfkts(> z)S#3B@Tm{D0*K&89M{ZLc`f)aZW}pv&Tzsu1Sg&}&#}zGr-Et`iNNnaLr`1LH~S3Ay@MU zd^7Op0srnl;A;)gp>b>>*Gve$g|!0Mo1QG>I!B-j0WD4|b zNGQ>BXFw*63QU8FU=mtFY!q@iz)PG!r5earU7Y{d#RfZ9fe$< zk9Y@&l&|Xopk=~kfavPre*jvvFf}AWEx1+4HTY!M^?RZxq7vgKLx4mEh;F8b&)wbF$H~^M-ZC(z-hLS`!|Le&DC=z+8MK+Qm zviUoJF7u(YZC!U^@2~Z8W!av(S71{5+Ud5H(Dw2h9K6bw48Twag>CGJ4pBB62<-F? z5N5jr7DprR01w&z4E#fMku4G0d$nG=%}Ua;VNd~T8ht2hO$4dZi9Wz+P+YijRl^iBX8zrt%crNq<;2N5EJHm$fF7S-l>+@3R=pMzUfnG@ zKu$rK5X>&S|Ir|LGxM+F6|aRql%rW7#G{>`jkms*UJ4~dPoxsGwjm`}B2nmya zKI^s^G?>(l7;%$}&$K9%Ay<<LzATV&?EH0Hx^GI_6^+<)&mmvYKe9=gEGRA%awjxt@HO9EL=eLd zF5b71yN{V4Fyb@&Rs}QN%>y|vB@YBXWae{l!t2w}BE0eCqX7IGx;jJ$!Bu@Qk@ZsV=v@m5bo2 zYu;YSwS(Ll9=R4P!6M=3EzK`&pH`a`~ zSnCfZZT}`Rr92;x0}m+1kUMlc_xLtS=D(lkNP~iZ;z60>c0X~=)vb$T=W>%5?8*K78Zlxnr(Qq?A!dAo*By*Q zui}>uCMu2z+>ZdamfMlGCpSRg)^a-`|GK&VhQB|UKDuaNNP+wT{K|nzc;=z88Owz3 zStGhn)ei5jH{UWxH|BD9-aol{Ng3dg33&UV1ch4YX{-Og2ad&G9a4?{p?_%Lj(*R; zqo-wppnHA9(lmNb$dhhA*!V;E>o@g=CD6Cc^w|46RFa2Jx{Y7!D!CU4^&%3~jKFmPxOM>7 z(6rn5$6ObID@Wj(3S9dkG&cQ#XO1f!c*uf-=@%p|fgmd<;~9Kw&c>&?mO+#i3v8nW zHU|t?^ao*aE|*U&doNMG6}V;)VZ&sNa<%!mjKFo~#-w{ZuLQ19CEhh@<1NmK8(2j3 z-R1d-e<1ZaThxv1G+gi=yfYrn!2XA2l5esQ)!veNxO76`osSV!cLBQMzno7r*jo`b z2uMg9qSWw|!BY><5qK`aa~qz3b~v%ZlLt>VJbU3e15YPBc6cH_fq#bv&oX!#;5h+L z2RvqYr2l|^@T`JoCp;(MxdhK`c*LI~IV5^S6~I#i5BcvLD6`Y^bin_wwUk`=bfVcn`eg!9SeKYdJq)K>r{4@PO_B delta 14286 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 U=^swC6-F1~6Y65$&zpVt|Bj)}CjbBd delta 3343 zcmZu!4R93I9e;1{E?-{E9VEHS2Vw6nA)8zRM+guTE0^8mfeHf*$cUm1sPrshJO&+8 zi{_|8)qyeeIhHA?K+y>w%B3MSwn;Co)G}2&Nu^%`mA1CYg(F@T+}%R5*ZMl&(C2cBJ?ADcpHP1?CLUXPEwm{Rz;S6ZM=%lp)i*-OC7u$M)3iTlvC!w=uOS-? zhvUvMBs?`JDrf!A6gLt!mr#9UCg6@V(qda-`EDcV^0D=ovfSdaby_J9GRD#gj@xe_ zK^$z9IlHK|(uZuWjjjHABLt3r=Q0#N0-F~ol`oYcXp zwWV_N&>BqmmWuOC#Z6`7*8ehTzZmNn7L@?qX`gLr6-A|uzGe4VI*idL_5xf-hwaT- z)m0c}=3q4L?OrtF2)2K`QDEY6LR}QQze`lk(dbOq?b;fcGp*5hBq|qLx}CWq=0-Ns z4SBp^-Ik;u)-j(Sw)KmOc^fkHCDb45C^ZMnr; zxtLszNzUv{sBZqwqPe+Qs}kR&6MOO`b6P2e3Jg7@TZQDoiluW zun-U2_;NVjb31tS(gQ_B_#Az&Xgl{;JFO~S-d^ls#X18SEy1OdY@23Tr&;D{R>m|7 zO|x>RS5>%~`{{3IpTbr2DLw+NT)b z6#{<&{0p1pP|+O5%K&7-S$SJMfg^Au*Qu*#Vo2CD__~(vTkU;#u#pJR_%`k5*LPoi zFcVcdBiMty4-93w7`LhYN=6s*n1b1cc~{E9wcIg*;6({_gLb%iXy}0E^MPi2axe4V zl1SyfE8~342T|mP)vPtixyC&X_PL~CclLNX7KpAs38kp15*BN-?q;Pd(2^z1({%Np zu}x4X&nhnQEV|ZUX0nLv;{FxB^QNIs<3oE2|AXcJ0k!U5&+1Kv&<5 zN%DS|iPVrfqjS2tE>TBr@==7YDxF*1izWFCKPL$7G7dXkwZ<$Y)XkAQV9)AmevH+7 zDaOW!=!w#z_8-OkT|yIb=V^FJwl^bE8SE6bp|Z9WUAnqCW(us)%6y(+u7lf$YJbgU6pl#X#Hm4&4{QZ&pgxRkm*xx0KEXGgVhI26kLi0>!2hTFMydE zm@zSbu2`@}oWw@hUdT-mTe>8A#6}_gZSmUB*?tJ}c}Oj)h;iSh#c zcluI!^@AUdnjpEahx0riwvY^h>5=#G@n+f4sH?rBlJcU-%wm`%r2|(Q(J)9kJjoO0 z$C&xRJPOQEiWwa?&LX9h+J(FYHr?#<612}p+$7DVt5u`$Qaf)B2m9gqjQM7>sO9a8x*C|uFF^kIE%~3F+z*@JenV5?Et=R$eq!>yVOtOLHkaV@Jh6fL zCdOQ=nt@sj`^8PL@m|%{PbL@vMdCfk{lhSP>9{y(`5WL`e;&_a(tITC9VV<qZr9c-JAd3S2d{pLn;kqbr< zqa&~#r+NI0qzF!f@EH(Tm2NmtlY92ajV`0XyTdk5+Hou4j)_|Cx1jM+(|$M{M&Q#B ziabQ^RSvVRW{uFQDn5J0OpMHc;8GOX+`Yc)cQ`Y!0HcrLwHBlmbIaR9H5j$Q%&UOY zfC~U~Ek*)h8Q@XC9>7V!SwI}%T!>K};C?^|a1by6xCF>pgpm)h7O(?w6mS+W0H27`cW0QPq$6kttZE&SimJwErc6|e2S*f7sT;|&6}F5z))cl8o4 zmwmDhoB`JW&hEz=pEkie{$kT?OD%lp)>7Q;vG`%+rxh?Ve(liJFzSQfJ$>EZYi`H? E1HY)Br~m)} From 2956bc7bdbbe8a878cf1e7b7776741c8bc7d592e Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 04:11:58 -0400 Subject: [PATCH 10/18] Fix [PAUSE] for C64 --- midilink | Bin 61496 -> 61496 bytes misc.c | 71 +++++++++++++++++++++++++++++++++--------------------- mlinkutil | Bin 18168 -> 18168 bytes 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/midilink b/midilink index f948b2f37f7bfef8f6c01ce0395601336accf756..bcac639405e98876ede9bdced399bc55b2123ed6 100755 GIT binary patch delta 17056 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

>-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 Date: Sun, 10 May 2020 05:20:35 -0400 Subject: [PATCH 11/18] fix clear screen for C64 --- midilink | Bin 61496 -> 61496 bytes misc.c | 25 +++++++++++++++++++++---- misc.h | 2 ++ mlinkutil | Bin 18168 -> 18168 bytes 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/midilink b/midilink index bcac639405e98876ede9bdced399bc55b2123ed6..bdce6c51f5d9ec72164e3f98d83af9d117fcc4b8 100755 GIT binary patch delta 15267 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 delta 15121 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 > 0 && @@ -734,11 +751,11 @@ int misc_list_files(char * path, int fdSerial, int rows, char * fileName, int * else page++; count = 0; - misc_swrite(fdSerial, clrScr); + misc_swrite(fdSerial, misc_get_clrScr()); if (c == 'Q') break; //else if(index < max) //no clear on exit - // misc_swrite(fdSerial, clrScr); + // misc_swrite(fdSerial, misc_get_clrScr()); } } for(index = 0; index < max; index++) diff --git a/misc.h b/misc.h index e850c3a..3f27750 100644 --- a/misc.h +++ b/misc.h @@ -39,5 +39,7 @@ int misc_do_pipe(int fdSerial, char * path, char * command, char * misc_hayes_flow_to_str(int flow); char * misc_hayes_DTR_to_str(int dtr); char * misc_hayes_ATQ_to_str(int dtr); +char * misc_get_clrScr(); + #define TRUE 1 #define FALSE 0 diff --git a/mlinkutil b/mlinkutil index 791e24f6155807b42635562beb262bf3ee98a1c6..8585a03f155b9c7af4ab30304237f8b64ae4bda5 100755 GIT binary patch delta 4253 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 Date: Sun, 10 May 2020 05:40:26 -0400 Subject: [PATCH 12/18] fix ARROWS stop at 2 --- main.c | 2 +- midilink | Bin 61496 -> 61496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index b9d5e7b..7f28b82 100644 --- a/main.c +++ b/main.c @@ -890,7 +890,7 @@ int handle_at_command(char * lineBuf) char * strRows = &lineBuf[6]; if(!misc_is_number(strRows)) { - for (int i = 50; i > 0; i--) + for (int i = 50; i > 1; i--) misc_swrite(fdSerial, "\r\n%2d", i); } else diff --git a/midilink b/midilink index bdce6c51f5d9ec72164e3f98d83af9d117fcc4b8..4a4c4edd26dcd81e9b2a2e2b1e0e27c8525981c3 100755 GIT binary patch delta 18553 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 X?*CSZyxkS22*Cd^6ma59my!K{erM}R delta 18500 zcmaKU3tW^{`u}_0nE^ym5D^fN8AjwL$>0rd35c&ag9>Sdw*iRY=iT;$Tkf7x&-tco)1G~` z>iAa!PMs#f(Ik)73`tt~ez)Fot0+sTH4~x~58!QMnD6b4?xC8%DwR0gW-u3!EFtiy zhw5ceaT)l|DaB-a)=Bm@fpOphj|7S_&H~HjfwL@U(*WU9gbZN#zDn^=v?wOrm~Pjb zcV>Iq{tUhg`9Q%#LwKcl%%+Hqsv%l#WK<2O<23BuVnM z3F?I_vH_!w7d&EJ>%}b(+&C|{TYyjY>5&D5LPqG#)*?;~IPCvVtKQtNgjvTe#kT9s z<$lcHfZ0J0#>T{ihBCZT9Bbo}iTGlL-ZG4}1|*$+ADcvuQDO1W&x#woFeP9<3s!nzw(cJ5?e@Y%zSY0pTNRrsYWmCLN}MpiOH27LmA9%#Am2r8Z&g1uAfV9K31}1RcRShOCfG? zm6R#OrLG3+`x=Jvzz24@GZ9n?3UL=T4o!LdXXmMWw{*2FFge@YxxG4HDPHN0I`_$p zAcPk|NUAm0tUI&7ksQ%;YK8c*8}Csc=Bvb7tGa|_a3cQ_AVDf|G~_EO&HmN2-C)jU zt&&+Q*5-8@5+5^Wuf`*Hie6lB8A(dP;v&dbqpb$TBMOaDNc!7tU2VK*qN%d^d z^JwEQ~U_2P#R%cHi zx1Ck@_0dS5P1ri%ZRh+u`H;4x<@-A-@lo1Go3`j)J+fP17d0D$Johm4skZ*F{z`lG zx4?P7P7gWPqla+%x;BZtK+kF82iIF?i|$ceLTOpHu(VVmHaPTV$0pjLO$ZxAJcj7& zWq8bU?UC#<-7|bVNub{jk2KyJCuLp<8ZaOHXS}~^?~!1K{eB6I_Ond}^UfmTjsIuu zC7SQ@dGT>Kvl6q=<}J)t2J@A9kVT7FROorjS^8ws_}SC#%}sjq=xjs=rx0r$H_z>} zR%LQ&oLIdD@LYrWY7THbi=0mljEzD}x5MB?g=`@r$MtS$esiJVl2&zso^~chj~Usm z&>UK>5YxKZ=XK2cqqCQ+dUv^}k9TCK5d(X4Hc9Y7PtwWBF^0W4zUk(U4fv^;0+$%f zroa^4wv*y2bX-aq}IG#n|Us`^*=wmVAkeYz%f%Hr5kUyxkrE=jmC zLtVy;t6iQjnR54s;|BAj((m<*HyeaUx)aNo$BTqIEHNF{B7ql@1zvpE_2=7=8#;k>9G{_Nc#zc2B>PnF-_^S@7&b2;C% zKDzrvlS?Y;&q zwo0=SOg+5#wd1MV$o~8ye23;mXg+{D(S)2c(_kLtiBQ>w3h_(ebAa!|9R&L_jZd#X z06qrr0FFY$pE{TgD%%X^vl?C=g=|cG02-}pO`#abZ3fX*nP?q|OudLGh{C`qh+EUd zi~U@jdL2!2al5BZhDjA?&6wpRjWPucxo1 z$Bi16U@*@O>)|&6n6qd>xWQ-MoVr|%%l zy%Pg3UIknacraH59(UWBY4^4o%)60wKyt#VdGS1GvS`f%llz1nCfvy(g!`VVMjla( z9*^NjPmN3qUuIJd?QGPWOLU$A#*6W^Yvg!i@mPhJYvXqFf&m$vT@CpSgr_50>j({7s}>;%YiamlSbXH>N<50Pe}XIlrdU#7uDw zzA2@SuGgD;`nV$Zkx9SOrB8@)k%SaMgqg3k%)a}Za+g%yQZUWbD~0p)8|dv<;qBM$ zq?wsns#pWF`I^ia@;3clX8L$1mY3pjyzsS^JG4Mhyv3^nKY?O_y!eUJH!bpFm6J^F zoh9<(LE4oWry8x-oAc<;qatbQsIehOz$+QkakdUT=~JU3$3N_3eqxy>FV1%6-RCF4 zS%Z6+2e zPF!UBQ|Xto*Cp3M6y9IM@+(q-42LjIxFuRmzYM z8ZlNA=dfoW$OD=&3nkByUnOE@$#tIj!;pif27iVeLeVz_8=I z_@qC*;>FVY(kosprp9p*M%DwD!1~}tw=EvS(6_VY#VP1}X zyqITzsqU!X>pcseTV+-D8V(4Kq* znciXK(=XH)SgJUN3lOJvFI~ZQJ((wZi`j-`!zX42825N)_QQ;i33CuH z3SI?yrN`nsI(l1k9I!rXZUUyqnyJ9}thpMP9&5${bBlJ5PmBB5sV+nD1BvU0PW1}U zw|AWvO`+Ke@i5Jqpm{vMl&|sxzgFm@cS!>=f)|!*g#dr(f8WhRr`V3*>d=ej)43Yc z|M5sY4|%mv3T$|MiImDGOVB;Cdh?8-oi$|?OB?p%nlOA{D`*@PE& z(D;cFN$XwPa#L^U%_G((`sG;Pt1LV~B2nD$<)$~cJHU7hR5Ug*5B3V^ z$pfCW9?QLVje5+ggw34Nu=a18xSFgph|6%cdt0zVaV`tCEH6^Ze3_^7WeKq$C$eY- zmC9+9b|8)I3CwXI@dd*sV0r>G6&T-av>KS6Q62}3Z(Az{HVM7BpZ%lc=fIwMC``idMC|!FvhsIM_&5>>qW%Bquq|ed-Re9 z_EL+8e*}e3t$RkZ9w_-BI4V?`1JazHEk2qDim5} zdbPrvU#Uva?xbl`VvJQ>k5cC^_I6bH^zt+Pkf4|fOjL%m@oC1tbsY;(x56Mbp0_9WcnR}E<1jeV-iqfVMjo-vi|DarCL&>DtXGBc(LBwXcBoB6{24=T*%nWsO4Q=s$C{ zQy&9eKtrDd#SzBmQM}O~dQ-pb)LV98vGB;T)me{JT%6684h%jer`20d)5%j4NiAJE zb$p-iohd>IEK*NDn3@x_yPTO$A^xK~HGll$)ti!?5wh~1ht5VXrPcDvA=YQyp*v1lAI)o{as6E2r(h7AnrM*A>x~K ztuQ8VyX(wNy(N|&7b3~~^iM*(u`(whf%TdpIHW_JfdbR&i!FM~`#CBZ~D`b}Q=;L4m4oH(jdZ)q&*;kL?)oxcrRX=7~>(o-|i;xgo5&xDobPH>2) zE(^Z%fF=WG45juNamLUv3<2*@SJ~dX4Mhj*EtRZYK(IDd7P-7E3G`cR!D@%}GBT25 zC8@$%Z-{S0-Tzovd6|du>19M*ZTs#HxP)U))q#tmxQr9;y8qhC0Y!G^fUOm90DV)h ziS!uCAqky`i8(8M1CV~Jk1#GQ%@TUDHG*SMC5&{dU2iGWu(i{3e)5xnBotSnHp9LFJDX;)w?_6gPjUn)Sv^}u^p7l(8foGUecrxc5icQdaX z1K95sv8kKD6dmx?UUsy^YN|Mc;Kga(MEfVJBV)2`07M+d8L#Mfq?j3tC*oJ#8F$ug zTpv3(btAoC7&CG|P6&f?q6Fo?ol88TzK1nHo#S)YzHU^3#h2YsHWzCHjW38a4#Mp0 zGgxJZg1MyQ7IRxT))z>^vpJI#V?;2utlsluBHr}pI}W5>U)>HE%Ywj(lgeyy-ewlx zddp6@TaN93%*0edC(rAJ-DI-0e#@P3D;YT_b&Iin!N&PG3o)KxO`?vl23(Tz-nl3de8eGHha6f@sHV5-Jmq5ig&DHZ|6?q=#ORz!C3$6q(|&oVQ8-ORDS znB)&Sn0iAxp1!TOEX-j>iV}<-R6zI2+i?Fd*8MeDTzitht<-(l>L~Bo%rFrNj!8W3 z_l?>Q+c20=Q}=NCKVW;ZlUaE4WG4>k_xGe+Ilv%0!G4u&hX}9AA}|4vojRt)PPzNhaZbYu8YPj2rV6T93j+-^GO+`1d5M$~Vk&&^JpdBvaXPv-N;jwclX9m`t>mmb;cjp~*NnbcC zgt@m|Qa1h;-qKqJl`1fccvk(NTG*rom0hAL8QI0)){)w% zBZ_j8;gD{&>Md7G#45XRc*T=T$SC98M^BWlz^nlCU8jqRqGKwHQoZXGC*E=$UNNRA8Lm|xaY(!9 z>qXH;tB|Npxf>lJ=x%^+Q*T!_GglSVGe=FV)1{@=6IN74@?0gi4wVD+ZDR>1{uPG-=g$Kz&*4$M z&>nA|1ODiF<|SmWh_oJYvtXv*dWE`rpHQg~>b3KpE-PdlQ2wCOGji zbTS*AFu%(7gQadd53kVOdBs{n_A#*s=|^L%FpVH*qQ~rbQ(+h2WMiiDHdj;i3wB5r zYpEwmK_NoSq~FeoAcN@bIZ3*3=j^)`rNvc5d=K4wZa#71F=YHx?*8Q{gCqznw%Hw= z16H@xK_|~m>U(-4>t%SJL%KxQ%+-;H>AQ1hlM>oBcOuE9=?_PSUommX3+rZ!oPyt_ zD9=ZQb{T#2VV$vht!JOdi51RmO^_O?6VH*dbEh~BOH4wW8BEDW69*cMlK15kL*8@I zLmno)niF*n?t%WSSdyh|4d?^;f)WLG6wZ!PI5EL7^PZA7Cq_F`aTxFFFZGqrie{Yn ztjQt$KqDT}8i%wbpVSFz@!<5j3M5EDczq+ySS8z1T=j$#-m{t<)lo^#gSEWnsu)}icF ztV{KtqjKU3`F(}|eTn>j)c-!;uJ>P`;lw$R5K{Oh9BjJObmjkediYVTvC46wtnWFd zfez>H57se5*(FP7Z$mu+x%^jZ*x9e&o00baUi#w1VEetLFHR(~olxAtwuZTiIjT0b zF$?A>GqF0v#FBIVz_LrHJI|p^P=2PeS}BBJ;TcHR6l)i~eUD&$Ay}O+%AU>h$Frh|2N

BIArlFs9@gV3NDF}Y4TVo)77BC{^A!C)?4n;_3zSl-2A+%4Ng z56@4GEa?nAN7SqzyL1yL=60zPeA?*G^GEfqmEWJhdn}Dx5FMU+iOJYcAV*Y!vb9oa zm*&zL3u3|scCz+NgF*0_!IDg$UJy?T=$-{y&4dn49m23@43=!Nui7I&L9jj1$v%H` z>c)Zy5^{(wNydwr#Z-mCa)o}qC`Oe4*cIB2_CsjcW8s0f+SM>}2Tgly z+<38VmgSh18HQJ=-ij(CyY15X_F0yzEZyVm(id$CTt7fDznT^1v(6|t&OOOobd>IU zEX}yPRZ%v_nv`)MH>yTkuBx|7jcp!?w*14~=6dVJtTQkb+SqXsE=}Oe9C@u zhQ!k7B`GtqT5o0zNZwh)sd2kT4t>O$HiI2HA@;UalS$MR$dTjQ@X6n_OPMVhC$X4J zNfvPSm}aRbYBn<)EZ6AomT0lEpIDNlscKaU#U~ZZqsp>QvOa5@393JK$<)HUZ?N2? z(vrA&6)n70C1`{J31z}@92?rDOU)~Ud`m34$&Krtet9491X4nAaxpyzISeA&Z`CrvGvy%``J|M!-s27I+j2)t~t)aks*pITdi)ZSshR=!Nu)-E|r zDk1q?%1xc1gxsd)>T{_A%hlN1XC~xv$zAo#H%CpdB`tkC(zqYrHu!@)%R$s3=&KyQ zcIZ}k{gCcR7Ccb4D6;-k(4-*yjcR6NJRCRNF8!mK@qe%`K`4~h@eQVmQ%GFU^ZsTo z`PVx3ZFF;R@@#Pe;j3D2*rjzQt~j}=E}&d3H&}u6?`GY!SaKvdfeBd%L$XOy4-t!V zJW4b8gckNW%akDu#@eYCumX+6Y~p=4ST;^ISSso4C(@^xnn^}f9TOlx$U4P>Fuxh* zSQ2nViSOG@{7_{h6gJ1sWYxTYBdoVAruHUG%*|YxP1@aQu(Z)XJ`q=>ZvN3aXcwEN z*(4nW-1bg_Tb_0)*Ndt4V>Ws*qnlZeN+hRMe%uP+STDor$R{<%GE>kwo3yM`HW7H{ zqQBZ4&+3$cTcA_zolWAI{xG&xcigO;=?Q8!+nM3a>Ql2U)k#>Yo{`fToc?8j$B0f& z1J|3__u=S`+3FWl@J*)oa=h7)VDSk$_HB}6?o5#5qYU73l#$!&)%doolgIq?xrx&R zq48xCGm&zph?z()o28?}U>QXFmd#8no&)d096=@J(-9H(yyf5XmQ7zTi!n~R2Ud8` z+uUAnTn&~E%m@n~f@;KI&Qk=*)jZZ4!HN_rLuuT^kv}< z(*Vw3d4FL@S4n?h`o*5$hJS)t@KqYOd;oSF>C5Bh95pdhRCFpbY?27GFT;ijv_vWN z+XZ)+ax5lACS1jO9B{-Y{kfyMiwmkX@7l~3HLqkW7v-acKD196WTXd{$AxX0a{;vl z)(VbU$8v_RmKz8By&c8%gpjU@gxR->&Ra2t?4qx&NDN^bBFz?}We$H_kskI)$06)P z2JE#-4|Vjz=Pc@8kw~u4#FZNIIi0?8X7tq#McF88Oh$~V&-VkXY|8(5{VjvHZd;1*MQb)Mr8cf3&hmX7f`Rb1xNPF>p(9 z)(cHG>2utcvq?)Z9oEsrHParqA^;qP!^^>0o@8v&^;VToaf%nl!!b78t79(Qg|*x! zEo`ek`S{S}yflH8OoMUxd}#UJT&o<;v)ZyxCg*Vp*y>FQ!HGy}c@;2;8)u%hNul)H zHIYWgLk3H~QsxNOmrLT@$%6HwGWnoC)lsxoprTUCRRWS%0xGV2Isy?En7b5^C4k7m zz#}-Lgir)0hJ%-`1S!?Rd#G3l_o9lD*>N=@PIh_Cw(0=f4GMx%SLqAoW8${AR^|TM zSYY0y^JHn5?#8*KKe*bP3e2bJx8?D1=i9jC8$T4_N~I@R@ld?w`W6(~wC~!KXt6~( zly6WAJdzs3AMy#rRZ9UbC(K-%II^%cVCcXGE|J$RJ0F^`9BVqC&F>+56nl>2Xx1j3 zhXnl^@M|MXw*}@5`tI6rQby0LO()6pUu#E=vEs6tE-vUOueM3%<^uEHoS=_G@WzbE z4TCvdYGEMSA}r*dzX8n^YFHOd+UVo!5+mCX8l-`7w@EHsf3r#NgCdB&yDll|Lr6a4 z2X3UQ5n7E_3o3RIcdJeM0dx#vL$RcQ-4vI(^;xeW`)S(xv<0JExa8nQZsge?3(Omf zas^Kw?~+94iKY}GG=T+8G1jG{;Qir`n9lwDQo--6w?dhP8pJ=Hdl8(^$a2NXa-Ccs z9%*e>4kfTCv*!{S7XaKX+OS^RHyAQcXduH2u!ZTfA)XASDH}8oKh{!}JG3EK!+I`g zRttg1d~DJXx$Pwr^!4`1ZlW;}+!L{c^sKHre#xhKR`D^pd3o z7xZk>tH52MUu{TB`wW?z5?<$OxP+`TVc6Q)q*Y$}EcAa#re6m74OH`Vx^`m=$q20D z_YcD0*x#ZoVHVE--5WC9B+%`pYo8uzECk(yb^L({&~0c@mGH7&@4=!0u!>Ep#Czo;xkFPQAh= z<(b&0i8ef=C1&b=CK`9)qo0in+qhQQrRL;_)hZHf(%W?UvuS;Dn~9pmd3zt)ajoa>tRf*X-zH6h-9|UevW$2fE1yaul&$ENe!x~bp+UV6Odf=CjKzvh z1cfdG5R*wK6D45zRtt9;Y*MBv2k>Rcrn>6NpzM1lW)8LKqP*u}kiD$tk>PotWjT~k zU_L~j+n7Q=q=z@A_o?kXlpFkAf%!VUu`%9w5mkZmGfJVr63T6<4q*=BG~kEy07dT| zn+q(lcxOj7VT%AO_QUSTu&IER`C*MRY$RYC{jk5wuo-~u^umnY z(iIta8^Ha3!b>u&4zOc>*l8K|8DOXVu%j|;KVY?f*dZCV1+c4r*c&pe9I)$t*iHsB ziVFcW`GH$x!hFE2e%MACHX5*gYL8jFrPVTQC}6RE*fJTW1T5JPn=ive_&v)HE0kf4 zfaR+reGCNvv&Ac$wHw!;?3V7*KARFrC>^;e;^C|gvM&a8`j+}xW;T?uKPcg`m?dMJ zTHE&|^TLc97)_|&d8W5Fv@YpqtB>MN`zUPq6S3oQOU2#n^o1Phmip7THpRub+C7|4 zg0s@g`D2{WbW63gep3XwLz^~fb)U7rET7u2cHekgY_6YW$@jK+UT(3gJsgrmGfC*g z7otfuefWjM@E6-3lCe*;F9mkAjD6*WNHUy$@Pdx?qyKy%ZQ_LX{-})>Ph}UDdBu>D zK)FS%tl1Qc7H30MYJ#6L0n2scm|MEz(_#{x{9-&AK^NgOmcD?`e)Ir79rPkT+vtz@ zY@|+nUZruyQRGuvWSoi#d55TNsq6_AhYFvb0UDr7vv`Nx6b0kHMW%0iao#2sM-qcsYk;Cj&XIS>~XG0!uc% zxLHG%(VsWRN1W9q!Yc&Z09=3uUa3XU((o}ZAqH(F~r7apAe&cH?kR=7Bg5BTgE6lQpxtLkl0hV8` zQ_fkIJoGz>-q;c|XnI7L7hds$xTccB~Oc=j1PD$fr z?by8`#)GwGJXrgXN-f&!Dx)JWm->Y4a%AF$clNJrk%*$Dm2sdjR%)=Ddbctu^7LAT zkP4TB1Kd*Wm}Sl$H4|Cx&y|tUBe03+-S1vt^MEa&1GYsPS23*LM4N%DS~t_Y>mKMc zfEH%XG@rf)x)RXphi00u-vcdS9E#X)^}(0GklGMtNLjy`W(R0l5OC@2hMiNIK|k0Q zmKGc4+4?hMPeA)d+{lxyOPFPPx1U7+Z<{u5VVFg%kxHJ2VF%X$UW$qCTc3unDLrHk^Z zk4GN-;%2H-I(-52Hlrz)opId0`1VY5l(&&n`T%TVwP>su0*4-JoM|rc zVUACLIEcxP;zTXl5) z?%0(1&74*#q?L2YtLu>5q#~e#J;j`$DyuXIY2?H@_U$@7xZ9Ba4Yos9>)9`ut}lh_C&_5lk1S}s6$$%Cy<)5 z$|5VqGl~c3uX{#@XF}L|8J~;V(+#lCpkv+`Pj=8XZ$w6yq5hfX-8(38SYC(wo=mh* zdhm_XkQL3<9ofH2?da3jiqqqeH^;^N#-tb;(ZHo$sX36VY~-siwgvx=^*0m0U0eKS ze8_{q|MG)XdeJn~Tup!X=J@pf%_%sZ+Tg@-MEr+1G{_MqpwtKHKsi9>bTF4RBFeYU z!~s^YpsY2&QsI#& z@JA+v_N^qMr-rxU!=3sS%Smmov!Yc zP3)IM`GO>U1FFg&B&k1WCef$fetN*hwSmGAA+U=1LxT0Y-qsFi#9pG-{Nxr+6S!BB z1ghOPt^e3gNVzY$Be<`GAFNW>{^4~0zJd4;QBLej47}9N2xDo(zEQ+P2kh4nCDrW@ z$93Xq`_sv1bp8IMh;Q1NQV(vPH#En*J@fV4pzBQZ6Z>;Q)^+r-UPYbz$46Aiv=i^4 z6{+DsJefdO9!Ml}>FWm=_YV$??{91GX??dHf{mu?ca#yqGK+UAdUq$%@$bZ8oq6<~ zq!gTg4PD&e!%ndr`UK+S6E>+%=^pf3qG0uTGQ0Yc+J_b@g6Q3!vdExQ=|3;%8*=L`8lz@80#D(oJuNROkbA{-#H$7! khAK3tL#tBbo0=}~&<1$^hamd Date: Sun, 10 May 2020 07:28:03 -0400 Subject: [PATCH 13/18] Fix missing str null term --- midilink | Bin 61496 -> 61496 bytes misc.c | 12 ++++++------ mlinkutil | Bin 18168 -> 18168 bytes 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/midilink b/midilink index 4a4c4edd26dcd81e9b2a2e2b1e0e27c8525981c3..6cb55f546430237a50f96c8405d4bb67b6a0fe84 100755 GIT binary patch delta 16337 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 Pf8vk$>eTtJ7s&qu&3C1d diff --git a/misc.c b/misc.c index c5bcf69..38d70ff 100644 --- a/misc.c +++ b/misc.c @@ -809,20 +809,20 @@ void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c) (*rowcount)++; if (*rowcount == rows) { - if(pauseDel[0] != ' ') - memset(pauseSpc, ' ', sizeof(pauseSpc)); + memset(pauseSpc, ' ', sizeof(pauseSpc)-1); + pauseSpc[sizeof(pauseSpc)-1] = 0x00; misc_swrite(fdSerial, "\r\n"); misc_swrite(fdSerial, pauseStr); while (read(fdSerial, c, 1) == 0) {}; switch(TCPAsciiTrans) { case AsciiToPetskii: - if(pauseDel[0] != 0x14) - memset(pauseDel, 0x14, sizeof(pauseDel)); //C64 + memset(pauseDel, 0x14, sizeof(pauseDel)-1); //C64 + pauseDel[sizeof(pauseDel)-1] = 0x00; break; default: - if(pauseDel[0] != 0x08) - memset(pauseDel, 0x08, sizeof(pauseDel)); + memset(pauseDel, 0x08, sizeof(pauseDel)-1); + pauseDel[sizeof(pauseDel)-1] = 0x00; break; } misc_swrite(fdSerial, pauseDel); diff --git a/mlinkutil b/mlinkutil index 8585a03f155b9c7af4ab30304237f8b64ae4bda5..ffe9949809d3e0345cbd53d3323de1529d70c927 100755 GIT binary patch delta 4914 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 From 6ed0a30a388fd7b24f4068528428c39ca9be7146 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 10 May 2020 08:02:07 -0400 Subject: [PATCH 14/18] Fix misc_do_rowcheck() --- config.h | 2 +- midilink | Bin 61496 -> 61496 bytes misc.c | 31 ++++++++++++++++++++----------- mlinkutil | Bin 18168 -> 18176 bytes 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/config.h b/config.h index 7e4c875..304aaa2 100644 --- a/config.h +++ b/config.h @@ -15,7 +15,7 @@ static char * midiLinkINI = "/media/fat/linux/MidiLink.INI"; static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR"; static char * serialDevice = "/dev/ttyS1"; static char * serialDeviceUSB = "/dev/ttyUSB0"; -static char * helloStr = "MiSTer MidiLink 2.9b BB7"; +static char * helloStr = "MiSTer MidiLink 2.9c BB7"; static unsigned char test_note[3] = {0x90, 60, 127}; static char * midiINDevice = "/dev/midi2"; static char * midiDevice = "/dev/midi1"; diff --git a/midilink b/midilink index 6cb55f546430237a50f96c8405d4bb67b6a0fe84..27a96e1f4ddc2d253bd9e75ade7887f482d3bcbf 100755 GIT binary patch delta 16654 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

i`GwL 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 delta 16579 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 VS^jHQlJ`L+A!jGFPQ{w&{x84G2_^sl From 34234c5cfb2a32f96d2c5c48b3d971156eab1cbc Mon Sep 17 00:00:00 2001 From: bbond007 Date: Thu, 21 May 2020 19:53:43 -0400 Subject: [PATCH 15/18] Add UDPMUNT, UDPMUNTGB & UDPFSYNTH options --- config.h | 2 +- ini.c | 7 ++ main.c | 363 ++++++++++++++++++++++++++++++++++-------------------- midilink | Bin 61496 -> 61496 bytes mlinkutil | Bin 18176 -> 18176 bytes 5 files changed, 236 insertions(+), 136 deletions(-) diff --git a/config.h b/config.h index 304aaa2..1032072 100644 --- a/config.h +++ b/config.h @@ -15,7 +15,7 @@ static char * midiLinkINI = "/media/fat/linux/MidiLink.INI"; static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR"; static char * serialDevice = "/dev/ttyS1"; static char * serialDeviceUSB = "/dev/ttyUSB0"; -static char * helloStr = "MiSTer MidiLink 2.9c BB7"; +static char * helloStr = "MiSTer MidiLink 2.9d BB7"; static unsigned char test_note[3] = {0x90, 60, 127}; static char * midiINDevice = "/dev/midi2"; static char * midiDevice = "/dev/midi1"; diff --git a/ini.c b/ini.c index 9055fc6..78c6107 100644 --- a/ini.c +++ b/ini.c @@ -47,6 +47,7 @@ extern int TCPATHDelay; extern enum ASCIITRANS TCPAsciiTrans; extern enum SOFTSYNTH TCPSoftSynth; extern int MUNTCPUMask; +extern int FSYNTHCPUMask; /////////////////////////////////////////////////////////////////////////////////////// // @@ -129,11 +130,16 @@ char ini_process_key_value_pair(char * key, char * value) { ini_int(value, &MUNTCPUMask); } + else if(strcmp("FSYNTH_VOLUME", key) == 0) { misc_replace_char(value, strlen(value), '%', 0x00); ini_int(value, &fsynthVolume); } + else if (strcmp("FSYNTH_CPU_MASK", key) == 0) + { + ini_int(value, &FSYNTHCPUMask); + } else if(strcmp("MODEM_VOLUME", key) == 0) { misc_replace_char(value, strlen(value), '%', 0x00); @@ -310,6 +316,7 @@ void ini_print_settings(int p) else misc_print(p, " - MUNT_VOLUME --> Default (don't set)\n"); misc_print(p, " - MUNT_CPU_MASK --> %d\n",MUNTCPUMask); + misc_print(p, " - FSYNTH_CPU_MASK --> %d\n",FSYNTHCPUMask); if(fsynthVolume != -1) misc_print(p, " - FSYNTH_VOLUME --> %d%c\n", fsynthVolume, '%'); else diff --git a/main.c b/main.c index 7f28b82..cf412ab 100644 --- a/main.c +++ b/main.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include #include #include +#include #include #include #include @@ -43,7 +44,7 @@ along with this program. If not, see . #define DEFAULT_TCPDTR 1 #define DEFAULT_TCPQuiet 0 -enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeUSBSER, ModeMUNT, ModeMUNTGM, ModeFSYNTH}; +enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeUSBSER, ModeMUNT, ModeMUNTGM, ModeFSYNTH, ModeUDPMUNT, ModeUDPMUNTGM, ModeUDPFSYNTH}; int MIDI_DEBUG = TRUE; static enum MODE mode = ModeUSBMIDI; @@ -86,9 +87,9 @@ int TCPDTR = DEFAULT_TCPDTR; int UDPFlow = -1; int MODEMSOUND = DEFAULT_MODEMSOUND; int TCPQuiet = DEFAULT_TCPQuiet; - int TCPATHDelay = 900; -int MUNTCPUMask = 1; +int MUNTCPUMask = -1; +int FSYNTHCPUMask = -1; enum SOFTSYNTH TCPSoftSynth = FluidSynth; unsigned int TCPTermRows = DEFAULT_TCPTermRows; unsigned int DELAYSYSEX = FALSE; @@ -108,8 +109,6 @@ void set_pcm_volume(int value) { if(value != -1) { - //if(misc_check_module_loaded("snd_dummy")) - // strcpy(mixerControl, "Master"); char buf[30]; sprintf(buf, "amixer set %s %d%c", mixerControl, value, '%'); misc_print(0, "Setting '%s' to %d%\n", mixerControl, value); @@ -141,24 +140,23 @@ int start_munt() int midiPort = -1; set_pcm_volume(muntVolume); if(strlen(MUNTOptions) > misc_count_str_chr(MUNTOptions, ' ')) - misc_print(0, "Starting --> mt32d : Options --> '%s'\n", MUNTOptions); + misc_print(0, "Starting --> mt32d : Options --> '%s' ", MUNTOptions); else - { misc_print(0, "Starting --> mt32d"); - if (CPUMASK != MUNTCPUMask) + if (CPUMASK != MUNTCPUMask) misc_print(0, " : CPUMASK = %d", MUNTCPUMask); - misc_print(0, "\n"); - } + misc_print(0, "\n"); sprintf(buf, "taskset %d mt32d %s -f %s &", MUNTCPUMask, MUNTOptions, MUNTRomPath); system(buf); int loop = 0; do { + if (loop > 0) + misc_print(0, "Looking for MUNT port (%d / 2)\n", loop); sleep(2); midiPort = alsa_get_midi_port("MT-32"); loop++; - } - while(midiPort < 0 && loop < 3); + } while (midiPort < 0 && loop < 3); return midiPort; } @@ -171,17 +169,21 @@ int start_fsynth() char buf[256]; int midiPort = -1; set_pcm_volume(fsynthVolume); - misc_print(0, "Starting --> fluidsynth\n"); - sprintf(buf, "taskset %d fluidsynth -is -a alsa -m alsa_seq %s &", CPUMASK, fsynthSoundFont); + misc_print(0, "Starting --> fluidsynth"); + if (CPUMASK != FSYNTHCPUMask) + misc_print(0, " : CPUMASK = %d", FSYNTHCPUMask); + misc_print(0, "\n"); + sprintf(buf, "taskset %d fluidsynth -is -a alsa -m alsa_seq %s &", FSYNTHCPUMask, fsynthSoundFont); system(buf); int loop = 0; do { - sleep(2); + if(loop > 0) + misc_print(0, "Looking for FluidSynth port (%d / 13)\n", loop); + sleep(3); midiPort = alsa_get_midi_port("FLUID Synth"); loop++; - } - while(midiPort < 0 && loop < 5); + } while (midiPort < 0 && loop < 14); return midiPort; } @@ -314,6 +316,17 @@ void play_dial_sound(char * tmp, char * ipAddr) } } +/////////////////////////////////////////////////////////////////////////////////////// +// +// write_[sequencer]_packet() +// this is for ALSA sequencer interface +// +void write_alsa_packet(char * buf, int bufLen) +{ + alsa_send_midi_raw(buf, bufLen); + show_debug_buf("SEQU OUT ", buf, bufLen); +} + /////////////////////////////////////////////////////////////////////////////////////// // // void * tcplst_thread_function(void * x) @@ -433,6 +446,27 @@ void * udpsock_thread_function (void * x) } while (TRUE); } + +/////////////////////////////////////////////////////////////////////////////////////// +// +// void * udpsock_thread_function2(void * x) +// Thread function for UDP input for external device like Raspberry Pi +// +void * udpsock_thread_function2 (void * x) +{ + unsigned char buf[100]; + int rdLen; + do + { + rdLen = udpsock_read(socket_in, (char *) buf, sizeof(buf)); + if (rdLen > 0) + { + write_alsa_packet(buf, rdLen); + //show_debug_buf("USOCK2 IN", buf, rdLen); + } + } while (TRUE); +} + /////////////////////////////////////////////////////////////////////////////////////// // // void do_check_modem_hangup(char * buf, int bufLen) @@ -1263,7 +1297,6 @@ void * midiINin_thread_function (void * x) // write_socket_packet() // this is for TCP/IP // - void write_socket_packet(int sock, char * buf, int bufLen) { if (mode == ModeTCP) @@ -1281,17 +1314,6 @@ void write_socket_packet(int sock, char * buf, int bufLen) show_debug_buf("SOCK OUT ", buf, bufLen); } -/////////////////////////////////////////////////////////////////////////////////////// -// -// write_[sequencer]_packet() -// this is for ALSA sequencer interface -// -void write_alsa_packet(char * buf, int bufLen) -{ - alsa_send_midi_raw(buf, bufLen); - show_debug_buf("SEQU OUT ", buf, bufLen); -} - /////////////////////////////////////////////////////////////////////////////////////// // // void show_line() @@ -1360,6 +1382,8 @@ int main(int argc, char *argv[]) int altBaud = FALSE; char coreName[30] = ""; MUNTCPUMask = CPUMASK; + FSYNTHCPUMask = CPUMASK; + unsigned char buf[256]; //catch_signal(SIGTERM); misc_print(0, "\e[2J\e[H"); @@ -1371,6 +1395,12 @@ int main(int argc, char *argv[]) if(misc_check_file(midiLinkINI)) ini_read_ini(midiLinkINI, coreName, 0); + else + { + midiLinkINI = basename(midiLinkINI); + if(misc_check_file(midiLinkINI)) + ini_read_ini(midiLinkINI, coreName, 0); + } if (misc_check_args_option(argc, argv, "QUIET")) MIDI_DEBUG = FALSE; @@ -1380,21 +1410,18 @@ int main(int argc, char *argv[]) if (midilinkPriority != 0) misc_set_priority(midilinkPriority); - int MIDI = misc_check_device(midiDevice); - - if (misc_check_args_option(argc, argv, "MENU") && !MIDI) + if (!misc_check_device(midiDevice) && misc_check_args_option(argc, argv, "MENU")) { - if (misc_check_file("/tmp/ML_MUNT") && !MIDI) mode = ModeMUNT; - if (misc_check_file("/tmp/ML_MUNTGM") && !MIDI) mode = ModeMUNTGM; - if (misc_check_file("/tmp/ML_FSYNTH") && !MIDI) mode = ModeFSYNTH; - if (misc_check_file("/tmp/ML_UDP")) {mode = ModeUDP; altBaud = FALSE;} - if (misc_check_file("/tmp/ML_TCP")) {mode = ModeTCP; altBaud = FALSE;} - if (misc_check_file("/tmp/ML_UDP_ALT")) {mode = ModeUDP; altBaud = TRUE; } - if (misc_check_file("/tmp/ML_TCP_ALT")) {mode = ModeTCP; altBaud = TRUE; } - if (misc_check_file("/tmp/ML_USBMIDI")) mode = ModeUSBMIDI; - if (misc_check_file("/tmp/ML_USBSER")) mode = ModeUSBSER; - if (mode != ModeMUNT && mode != ModeMUNTGM && mode != ModeFSYNTH && - mode != ModeTCP && mode != ModeUDP) + if (misc_check_file("/tmp/ML_MUNT")) mode = ModeMUNT; + if (misc_check_file("/tmp/ML_MUNTGM")) mode = ModeMUNTGM; + if (misc_check_file("/tmp/ML_FSYNTH")) mode = ModeFSYNTH; + if (misc_check_file("/tmp/ML_UDP")) { mode = ModeUDP; altBaud = FALSE; } + if (misc_check_file("/tmp/ML_TCP")) { mode = ModeTCP; altBaud = FALSE; } + if (misc_check_file("/tmp/ML_UDP_ALT")) { mode = ModeUDP; altBaud = TRUE; } + if (misc_check_file("/tmp/ML_TCP_ALT")) { mode = ModeTCP; altBaud = TRUE; } + if (misc_check_file("/tmp/ML_USBMIDI")) mode = ModeUSBMIDI; + if (misc_check_file("/tmp/ML_USBSER")) mode = ModeUSBSER; + if (mode == ModeUSBMIDI) // no USB MIDI { misc_print(0, "MENU --> FSYNTH\n"); mode = ModeFSYNTH; @@ -1402,43 +1429,56 @@ int main(int argc, char *argv[]) } else { - if(misc_check_args_option(argc, argv, "MUNT")) mode = ModeMUNT; - if(misc_check_args_option(argc, argv, "MUNTGM")) mode = ModeMUNTGM; - if(misc_check_args_option(argc, argv, "FSYNTH")) mode = ModeFSYNTH; - if(misc_check_args_option(argc, argv, "UDP")) {mode = ModeUDP; altBaud = FALSE;} - if(misc_check_args_option(argc, argv, "TCP")) {mode = ModeTCP; altBaud = FALSE;} - if(misc_check_args_option(argc, argv, "UDPALT")) {mode = ModeUDP; altBaud = TRUE; } - if(misc_check_args_option(argc, argv, "TCPALT")) {mode = ModeTCP; altBaud = TRUE; } - if(misc_check_args_option(argc, argv, "USBMIDI")) mode = ModeUSBMIDI; - if(misc_check_args_option(argc, argv, "USBSER")) mode = ModeUSBSER; + if(misc_check_args_option(argc, argv, "MUNT")) mode = ModeMUNT; + if(misc_check_args_option(argc, argv, "MUNTGM")) mode = ModeMUNTGM; + if(misc_check_args_option(argc, argv, "FSYNTH")) mode = ModeFSYNTH; + if(misc_check_args_option(argc, argv, "UDP")) { mode = ModeUDP; altBaud = FALSE; } + if(misc_check_args_option(argc, argv, "TCP")) { mode = ModeTCP; altBaud = FALSE; } + if(misc_check_args_option(argc, argv, "UDPALT")) { mode = ModeUDP; altBaud = TRUE; } + if(misc_check_args_option(argc, argv, "TCPALT")) { mode = ModeTCP; altBaud = TRUE; } + if(misc_check_args_option(argc, argv, "USBMIDI")) mode = ModeUSBMIDI; + if(misc_check_args_option(argc, argv, "USBSER")) mode = ModeUSBSER; + if(misc_check_args_option(argc, argv, "UDPMUNT")) mode = ModeUDPMUNT; + if(misc_check_args_option(argc, argv, "UDPMUNTGM")) mode = ModeUDPMUNTGM; + if(misc_check_args_option(argc, argv, "UDPFSYNTH")) mode = ModeUDPFSYNTH; } killall_mpg123(0); killall_aplaymidi(0); killall_softsynth(3); - if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH) + if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH || + mode == ModeUDPMUNT || mode == ModeUDPMUNTGM || mode == ModeUDPFSYNTH) { + /* Disable this so we can run UDPMUNT & UDPFSYNTH on RPi or other linux device. if(!misc_check_device(MrAudioDevice)) // && misc_check_file("/etc/asound.conf")) { misc_print(0, "ERROR: You have no MrAudio device in kernel --> %s\n", MrAudioDevice); close_fd(); return -1; } - + */ + if (!misc_check_device(PCMDevice)) { - //misc_print(0, "WARNING: You have no PCM device loading --> snd-dummy module\n"); - //system ("modprobe snd-dummy"); misc_print(0, "ERROR: You have no PCM device --> %s\n", PCMDevice); close_fd(); return -2; } - - if (mode == ModeMUNT || mode == ModeMUNTGM) - midiPort = start_munt(); - else if (mode == ModeFSYNTH) - midiPort = start_fsynth(); + + switch(mode) + { + case ModeMUNT: + case ModeMUNTGM: + case ModeUDPMUNT: + case ModeUDPMUNTGM: + midiPort = start_munt(); + break; + case ModeFSYNTH: + case ModeUDPFSYNTH: + midiPort = start_fsynth(); + break; + } if (midiPort < 0) { @@ -1447,68 +1487,73 @@ int main(int argc, char *argv[]) return -3; } } - fdSerial = open(serialDevice, O_RDWR | O_NOCTTY | O_SYNC); - if (fdSerial < 0) - { - misc_print(0, "ERROR: opening %s: %s\n", serialDevice, strerror(errno)); - close_fd(); - return -4; - } - serial_set_interface_attribs(fdSerial); - int result = misc_check_args_option(argc, argv, "BAUD"); - if(result && (result + 1 < argc)) + //these modes don't need serial port. all others do :) + if (mode != ModeUDPMUNT && mode != ModeUDPMUNTGM && mode != ModeUDPFSYNTH ) { - char * ptr; - baudRate = strtol(argv[result + 1], &ptr, 10); - if (!serial2_is_valid_rate (baudRate)) + fdSerial = open(serialDevice, O_RDWR | O_NOCTTY | O_SYNC); + if (fdSerial < 0) { - misc_print(0, "ERROR : BAUD not valid --> %s\n", argv[result + 1]); - return -5; + misc_print(0, "ERROR: opening %s: %s\n", serialDevice, strerror(errno)); + close_fd(); + return -4; } - } - else if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) - { - baudRate = UDPBaudRate_alt; - } - else if (mode == ModeUDP && UDPBaudRate != -1) - { - baudRate = UDPBaudRate; - } - else if (mode == ModeTCP) - { - if(altBaud && TCPBaudRate_alt != -1) - baudRate = TCPBaudRate_alt; - else if(TCPBaudRate != -1) - baudRate = TCPBaudRate; - else - baudRate = 115200; - } - else if (mode == ModeUSBSER) - { - if(USBSerBaudRate != -1) - baudRate = USBSerBaudRate; - else - baudRate = 115200; - } - else - { - if(MIDIBaudRate != -1) - baudRate = MIDIBaudRate; - else + serial_set_interface_attribs(fdSerial); + + int result = misc_check_args_option(argc, argv, "BAUD"); + if(result && (result + 1 < argc)) { - if (strcmp(coreName, "AO486") == 0) - baudRate = 38400; + char * ptr; + baudRate = strtol(argv[result + 1], &ptr, 10); + if (!serial2_is_valid_rate (baudRate)) + { + misc_print(0, "ERROR : BAUD not valid --> %s\n", argv[result + 1]); + return -5; + } + } + else if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) + { + baudRate = UDPBaudRate_alt; + } + else if (mode == ModeUDP && UDPBaudRate != -1) + { + baudRate = UDPBaudRate; + } + else if (mode == ModeTCP) + { + if(altBaud && TCPBaudRate_alt != -1) + baudRate = TCPBaudRate_alt; + else if(TCPBaudRate != -1) + baudRate = TCPBaudRate; else - baudRate = 31250; + baudRate = 115200; } + else if (mode == ModeUSBSER) + { + if(USBSerBaudRate != -1) + baudRate = USBSerBaudRate; + else + baudRate = 115200; + } + else + { + if(MIDIBaudRate != -1) + baudRate = MIDIBaudRate; + else + { + if (strcmp(coreName, "AO486") == 0) + baudRate = 38400; + else + baudRate = 31250; + } + } + + serial_set_flow_control(fdSerial, 0); + serial2_set_baud(serialDevice, fdSerial, baudRate); + serial_do_tcdrain(fdSerial); + serial2_set_DCD(serialDevice, fdSerial, (mode == ModeTCP)?FALSE:TRUE); } - - serial_set_flow_control(fdSerial, 0); - serial2_set_baud(serialDevice, fdSerial, baudRate); - serial_do_tcdrain(fdSerial); - serial2_set_DCD(serialDevice, fdSerial, (mode == ModeTCP)?FALSE:TRUE); - + if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH) { if(alsa_open_seq(midiPort, (mode == ModeMUNTGM)?1:0)) @@ -1517,6 +1562,7 @@ int main(int argc, char *argv[]) if(strlen(MT32LCDMsg) > 0) write_alsa_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); //This loop handles softSynth MUNT/FluidSynth + misc_print(0, "Starting --> local MIDI loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1539,6 +1585,40 @@ int main(int argc, char *argv[]) switch(mode) { + case ModeUDPMUNT: + case ModeUDPMUNTGM: + case ModeUDPFSYNTH: + if(alsa_open_seq(midiPort, (mode == ModeUDPMUNTGM)?1:0)) + { + show_line(); + if(strlen(MT32LCDMsg) > 0) + write_alsa_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); + socket_in = udpsock_server_open(UDPServerPort); + if(socket_in > 0) + { + misc_print(0, "Socket Listener created on port %d.\n", UDPServerPort); + status = pthread_create(&socketInThread, NULL, udpsock_thread_function2, NULL); + if (status == -1) + { + misc_print(0, "ERROR: unable to create UDP socket input thread.\n"); + close_fd(); + return -8; + } + misc_print(0, "UDP Socket input thread(2) created.\n"); + } + else + { + misc_print(0, "ERROR: unable to create UDP listener --> '%s'\n", strerror(errno)); + close_fd(); + return -9; + } + } + else + { + close_fd(); + return -10; + } + break; case ModeUDP: { if(UDPFlow > 0) @@ -1555,34 +1635,34 @@ int main(int argc, char *argv[]) if(socket_in > 0) { misc_print(0, "Socket Listener created on port %d.\n", UDPServerPort); - status = pthread_create(&socketInThread, NULL, udpsock_thread_function, NULL); + status = pthread_create(&socketInThread, NULL, udpsock_thread_function, NULL); if (status == -1) { - misc_print(0, "ERROR: unable to create socket input thread.\n"); + misc_print(0, "ERROR: unable to create UDP socket input thread.\n"); close_fd(); - return -7; + return -11; } - misc_print(0, "Socket input thread created.\n"); + misc_print(0, "UDP Socket input thread(1) created.\n"); } else { misc_print(0, "ERROR: unable to create UDP listener --> '%s'\n", strerror(errno)); close_fd(); - return -8; + return -12; } } else { misc_print(0, "ERROR: unable to open UDP port --> '%s'\n", strerror(errno)); close_fd(); - return -9; + return -13; } } else { misc_print(0, "ERROR: in INI File (UDP_SERVER) --> %s\n", midiLinkINI); close_fd(); - return -10; + return -14; } } break; @@ -1600,7 +1680,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener thread.\n"); close_fd(); - return -11; + return -15; } misc_print(0, "Socket listener thread created.\n"); } @@ -1608,7 +1688,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener --> '%s'\n", strerror(errno)); close_fd(); - return -12; + return -16; } } break; @@ -1619,7 +1699,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiDevice, strerror(errno)); close_fd(); - return -13; + return -17; } if (misc_check_device(midiINDevice)) @@ -1629,7 +1709,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiINDevice, strerror(errno)); close_fd(); - return -14; + return -18; } } @@ -1647,7 +1727,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create *MIDI input thread.\n"); close_fd(); - return -15; + return -19; } misc_print(0, "MIDI1 input thread created.\n"); misc_print(0, "CONNECT : %s --> %s & %s\n", midiINDevice, serialDevice, midiDevice); @@ -1658,7 +1738,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create MIDI input thread.\n"); close_fd(); - return -16; + return -20; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, midiDevice); @@ -1677,21 +1757,21 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: You have no '%s' device! --> maybe set 'USB_SERIAL_MODULE = ' in '%s'?\n", serialDeviceUSB, midiLinkINI); close_fd(); - return -17; + return -21; } system(buf); } - + fdSerialUSB = open(serialDeviceUSB, O_RDWR); if (fdSerialUSB < 0) { misc_print(0, "ERROR: cannot open %s: %s\n", serialDeviceUSB, strerror(errno)); close_fd(); - return -18; + return -22; } serial_set_flow_control(fdSerial, 3); //RTS/CTS - serial_set_flow_control(fdSerialUSB, 3); + serial_set_flow_control(fdSerialUSB, 3); serial_set_interface_attribs(fdSerialUSB); serial2_set_baud(serialDeviceUSB, fdSerialUSB, baudRate); serial_do_tcdrain(fdSerialUSB); @@ -1702,7 +1782,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create serial input thread.\n"); close_fd(); - return -19; + return -23; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, serialDeviceUSB); @@ -1723,6 +1803,7 @@ int main(int argc, char *argv[]) write_midi_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); } //This main loop handles USB MIDI + misc_print(0, "Starting --> USB MIDI loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1734,18 +1815,28 @@ int main(int argc, char *argv[]) break; case ModeUSBSER: //This main loop handles USB serial + misc_print(0, "Starting --> USB Serial loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); if (rdLen > 0) - { + { show_debug_buf("SERIAL OUT ", buf, rdLen); write(fdSerialUSB, buf, rdLen); - } + } else if (rdLen < 0) misc_print(1, "ERROR: (USBSER) from read: %d: %s\n", rdLen, strerror(errno)); } while (TRUE); break; + case ModeUDPMUNT: + case ModeUDPMUNTGM: + case ModeUDPFSYNTH: + misc_print(0, "Starting --> UDP Synth loop :)\n"); + do + { + sleep(1); + } while (TRUE); + break; case ModeUDP: //only send all-notes-off if UDP is being used with MIDI and not game if (socket_out != -1 && baudRate == 31250) @@ -1759,6 +1850,7 @@ int main(int argc, char *argv[]) } } //This main loop handles UDP + misc_print(0, "Starting --> UDP loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1773,6 +1865,7 @@ int main(int argc, char *argv[]) break; case ModeTCP : //This main loop handles TCP + misc_print(0, "Starting --> TCP loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); diff --git a/midilink b/midilink index 27a96e1f4ddc2d253bd9e75ade7887f482d3bcbf..aad37f630922f9962ee8a79748f8be0827b9dab8 100755 GIT binary patch delta 28154 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 Ulyx55o)=Gazs1&wclBKOf0yS1sQ>@~ delta 27474 zcmch=eOy%4_6K~`Rm8$vuDm; zYwf+)T6^ua*M2#}p=Q;gX4R&6?%eoS5|SeGzGs-c?^&c*3M#^ikt_cGm0k9+^S?{a zulj!8lM7BHy#DKjZPpul+RWt)!#s*K8%d26hg2!#tA>|9h^L2;W+2hu7^FLq%t*;d z_aQ|f%|lWl(cehrOa6?-=PZBTgztq&w<1xC^tV{Jjl0hBh>~IM!uM$Z^H_YBBHiZC z=lQ=Y@O=l;G=F|RzEk|q!|=Tn$%vGNRDiSy=_aHyq-dmcBm)xt>5*nKOqiT063%hg z&n(6>FXxqyn?s&&4|%4?LZqQc6DWhfdz3F`D!!Kp`R67GOI0U?Y<1e8d_QKoaG!co z%p8A?zH*RCg!k0f-8L6bw;&NW3y=bT!|`x0(gOhizVAnhN4gs+0qJ4tEFnUZowA?$ z&;LitUojwW5bn_=vrh_7o6V3>{EO z-2nXk1Msg8$Y%}6KQ8Ov|SF`&sI!q<`0Vs0J)eNY%R zI61#%KkkjUNmcJ1I*JqGW1bW?#Z-)98CG@? zG}yFAaf=rZVHgc_y)Yy;nY~^ZCx6b0O->)J0UCd`|KXSs7`vpJIQXDF^bLj4 ze>L_2E(K%eR*;P>fmfq%xQ0Ud#;7Tx@A*RPhzabyLcxd^EfIO+TJH*D+9RruS=G(s zuBe;ey)v}<&&?6y@hf@XpgX_(^QFXZHeSkeesU%7oE!3-9rCOXdDezJ$A>&ehdf6( zKM@9xe7ktn9Vhre-J5&++SwTLye{NQ`ZO2th>1GZXUcaP&1Q zhCEyGEF8LSTUjWFD?JTDA+o*(jD9P(Um9K zYd}9WAp~1Oo;QU&ZwPs=#$7Qgc$y2IgT}ImuE}U0Nu$)@_)~QO2Z(viI3God~DwCNf zUaU6S4xmn|IUD7VIivThQ~&PRkz+C1PKF@%1EG--M%$SX_+J1I^TRKPz~2O%^TWju z_)CDZet1!AU&Cvh;e7mlc1)m5i6sQN!ULwB5a7;N)Rq#d7>*lDmGDh*)11*Wk?!3^zGX<5&FnW{eQ`-mCD)ByVu{}40bx*H$KXZ+>MAXgr)Mk;ZWhVTgkwcYiHJkZ((;3IY z+y@d@H?iWZLq^*kMqwix5-UAtw0+`-r2`h|w9|fAB4B|IyWoe#0v1rb)eo~o02t`0 z9zW3A+rO98ey!MgLpvzW4{hn~>zp({>|!qhBT>Ij=^UeNa!jBLhB_3s#|Uo5H~WBz8JvvzY^LW`V@uEeY>g39G`(syvq62vu_2xr%Uz^8EWdc_ zi+s}Qj&OaRt$Tf4ky>o)jX%6^W(0;wDn_t5<&0xvE}CU`8W^og{LqJd{0BuE@v=i} zVzU{M1H&65G-4TKHkIf7YF%%%ZJ<(mDn(^p^D(K@ZTIL#$pdf;+Iy>mN`AH8Xt6b? zD5_D3Ykey5CpQ_GDwDCbuK(FOT$EH}nb%Zm#%Rl11m7?gRjQ!Q3iyUWL$1|Css%u} zVY^kYa>AUR>gA=p$?TJ2JHnFkeqC3+-AtqZe-)a3Rfz3W#ridi7PFHW@kBNEHj`?C1ktrnxH;2=;t@V+Py3zxdB>Sek?mpO zam|@%?1gG3r5qAoY8SH8bT?dWI(&^A7I|^2qdA+)3_Ca9n6P1nEr0r31&mlPJf3!) z#k6=v;;KfHnz&>$8FBU+jrf#9;r;G4sb+T4BTdA{mZluOgjb2@dxe&1JI}wq z7K67Vx^zF2GO9@Zs!y8Tjv8)dQq*t#9dMyJHNLpAg`{}B@%NQzZR=Cw4b5T)$JDiR z%qFC5NVQ0rnJb%^l<%O{k)+n!*&Cs{8!SKX3su_})oO8RC50qW4?`UZX9LRE zEGy&nwt>p9tZHFW--MGtlf5GN^#0W|j^bP{GopbR&xqbYT!4r-99t0`0XHX zfC|2I{5KUm7@~p)JOfSQF3$=uaj)-gqt%UD0*jKS8@{yo2c)eG~_}l+--)MjP zr4FU}O$BEV8z4r=h@eOzv!YRJ)`+zsji;Ja;;VAw7abAJs8d*xetnRK&)fPSlQ%$DD(-Wul%-`#i)Uy5-mCw3D zMoK2?lS*1uEy!8?Swrjcs~oS9E#ePuWAOPY_tRJ2yQYaM;xAld*!=b=mNZIp(cSA* z;+MUf9aXvHHpwj(t~1(-Qu~~0JX|6-==U8e(;Ai(b-~_f@kv!}WRfGTiq9eUew(|k zg*=l++#q|cU*OG{=$ZBX%+7ChT~_iwD)D(=$Y2XPpLloQV2gDRw6sC)k1Z`^`=_l< zEoU5NOp=zKusxU>5N}eaBiw0Y^m$^-^K*JePG3~%lN?9MLnI_~85VoQZgwi0X|bz! z`=oy!C5NPGtXO)7JvNn`@rbpg7le`_(@fO=(uk#Rj#*`;3F7rNTJs%=zxMOrjce2* z?;%IjB5Q(t@pr%LhRl9#crd@i7Y}g7ue$oQvC$=K!xG|)pLZR?WOk;M_50>$U8a;LjKI&!a;Wd7lq8Fo=5!G{;IvJYy1_kCkb-y`ps8y51{F=Dtw?<48t&G_#rFCb( z^UUOFYB9Q6TPz0K>O54ysKiU|=EGYZwG(OR)~yA+z-Wsr1&$hEKQfX!RbmdJ^P&Xs#0netHcSt^mzd>>*~CU zrSB~UwFM2oFN2@&B`~X#!GIogQjFp8#~7Q7;18`7WBjznXlu?7gcxm@^j1&D3|?Wh zx${vW`FWXPGUW44pLF-pGmesYlbIRIUQ~%)4pwGqcJCR-rU4UplV%fsky(* zRYIDli@eh5Zi4@^)@VDF6KJj;6;3!xYn6bkPeRsa(+S(-YYevd5|Upf-tI2hPdUb~ zk4mC}KD4MSt01thQHhM3vB0`ptA9Z-klsiPyjGwvumB8flo_}e@~#TXy8`l_$%DL$ zs3|lu*J#_4&ukhf`2(`{zMiPmR)pFr<=UR;r@dk)`v1&-Ro`up_VAJOj+&hF`_DU~ zvNI27@M1~{25gaa)BdsW5R7=I>+7r2dLF>kR$?Usvv>BzE;l&mUd=!Z)C~A{UCKmW zFHd7%*K_a4Qq2L4 zOb;!+f4r&|Pr(^alg45G^h&e4m1%1<=2x%uPS@D0sx4mWt*%d7imq^ssgq+)c3L=Q zJ|4=D79tsKmF0oq*U)RyotvpOb7GZO8GzGze%x!ctt*!z2KibqX>)~Nn<|}{oboyP=KXH{enuSa;B}M_h0q|JnG8)LH2Bb3`7{$L+zum!! z%e|Jz#Te#WRMJzr!a$k`Xuri#%0C9Z&vCG@MNa&u`_U`d7YMTOZxo-0riL*ewqSE& zqS3Zc8Od^gsKl>;pAP&W=3UfYml6=`DBw2(9>xe@@h3|c@wl!7iiS(4#>uzr1kq>^ zg)?hFbXula4w~!`nm0f*95fNk<1L&x)XQieAx0)C(#|L68uV8xu^QBF&*Ne=Q-;}a zJ{FOdo6OiO?!2bm}$4qEpM4fL9 z210EEBfjgUr|k{c4$v8G+hV|oUnjSt#1WKWnUSceEEWq!O9*-b(7QbtSJ~k$n0tF} zs6FE_<(7fdv9)u0{xgZ@=+TEt`9Vc0@sB>GTQWU9>7%2Z_-9nBVcM_K4DFL*4$&yo zV>|N{_9`QF`ki+=^q4$yJ580GnChdTim5f)v?&%K5KoWNJ}IPbYQkmUg4Wp3Cmypx?UsHxZ2X02nHTH({|KZdQo1zsyx zD9(wui0!-0uETos^u(CPN}Xn>THN4NCv{&i*lKeW|3V__5izojsJCOc9O!2t(7&bW zsQKA?h8#irE#{nhCPh_?0n)D7t=ft4->x2vQGJt2taLJ)Io`0se9J4>L9_RQ9`LjXB{_Q>1GOpDzX9I7r zMdhpc0@>y{)cK9~5cYwDHmwotOflGU@2DxHXcH;ygiWZJ7;DMOXAq*0 z@A(>Y2Pgi;JClcB&}t-cVx4aF}cZL>yzP>EW=Gf89Le&8BVno|Beix22aTW zUZgW^O7nG~{@*eT_RA2i$Y2pw!Gebn|Nho^wx0|yLk6aSMh)%t`uie|v~RFgqCYlF zI)xtN)KLE5_v-MeQVEs1@SP?EU&noQ*O*A@;#?ki^PRAU4Q=n6nT#&ziHS~uxoK)G zUg^a)&CWbbxydv~+|2R+a4!RM*}4?cf&_wm{39?0iqH}M$-KD|<%HI&VNyA?LyYW);8 zE?b6vw#9a61oRw%DQ5xHbIZGRcaYvS0lkxVvM%;YkF~0kZa%N$H9O6ycxfv=S@C3U z-3{fp!vq=ZLER1IlRq-Is&?jLw0V8xh2}v|q|`UuEB9-5lYdHtGhoBE^4B{ovO@y$ zPwwplG+ymK0ZD4H{Par2R+`uhwzN`aQz{r#rXv>R9(6~;8M<33paz`bM9$0Tw>K*E zCYnR#sf%dub`w<~>`t^=%l|y4B^Nyx+qzv*2@XYe*TEt)4Ys8#pbs=zQ;NOzD#3em z`ncV`>4~QD8yi*PUEatP8ZWQhTIu@<-*M zl0nUXcM*K3bG-?kzrE|i-;5yJde)e7^BPU%FID;bkc;3NZa z7=%$yGCa~ctR}6cN({q^H<6eoD&>)$1SY;bfEf!+mLIdk0#xA0gcB2iQjSbK(n4Tx zor8Es2rvwo)&4>y-CG^e*{S>Q!Yca-lt!Ltgp=^p+e+Agg zM!kJ(T7Cg4z-JmzeSH1^On}dk!1S^CH824-BZ28-^AlhKY`VL)I*P#Nc(A#g7C4xh znq?8f#5k-dWCO8eSbBchXRuu^kEij&RxIU2t80<@?9~#UbTAa^t}9hG(>U?G>w~Kl z11Piz5rve*L_G)1Ilsz7p zfUX|{2D+x5H0s|JpaROS=)$^RpLn4epX^04tmeha({tS>`AH@I)1#HKD)AeSb_ros z;uoG{*62Je5RQAKCEXZ(nHMkCEcRdxeXeDC;`NQu2S=yASf@sOw5gn{RmQU=l^4_NBBeScZ{NMd~B=v3k>;APa;vT;P}k-mg^?Z7C= zZXHTR`W2E=8<-Fa$0t>N3wP45j{-ua#^S4UD@GnjVrD-O|GjtX0UBr z78r`NdM__*a3YHa7YS~JE z{u|SLU|h%d>$L^P$-+bX{!`EfteopdTL@aSf5a&D?glNq!U)+Jc65ZA!}#OEs%d&l zNhfAEEw>Xk!EoXwI6HYC^0i5_Q=nOTm4g`WM)xAqphjY=Fhf39Qy<{TAB!{I0&5wpI;YB$O1~e9|eZzJtNCIZQ znwGLbuRI=@fSErAOrMKP0Vbfz3SjzNWE?O77dgMO@MU9527TT9$ z#SI`PS);jttaY6MS&tv3Nv==UpN@t0YSkT82czKF4wY*BJg+5pF3=PMYeZfQq7)uN_P_qkEc`%M2@~c;y4ECku5Z zLkum z*|(m?eo!^5>?%>mWqCJapwST%0@O)@qj3EEwQx||(5q;jWyNrBL^G>n5y*L@Pukvg zsIz^U`B*u#JGD5An%~RnHGEf-0&i>L_#xLcEMe~G&A@Y*{G8t_JTrq&`wPyI#-8`3 zzJyASfsapujU1pkF-0Y&^$M3~=nB_@Fzoywol0(ljwpp6L&;zE80=>;rz;%3;AslR z+B7pUsRp|{LNM@Y>}BC`J~_1l$6*t=>4_8PV}T#TA0H=Q`IIhU%Q>#4Ei>(}Pdg#}haKR*XZKO`U(<6P)nG4)i6_}ukF-%fRhzyxN2dBa)>Di)el3L(274WL`#5zbe*)*q zID4IlYA(8|Q%*Yd+ z)I`Twt@46~!O<{@iEek%*+_+%c5}3*hoRJ8zgvTInj9kj_Zq4o-A$i+U9_n{6VX=l z)Wa0>R>*M)u{qPjj-l@-oVn1~`c@{j!2afPV9y>wT@9UM7l2cz;F5w+XNY=munTv5QfLHXf5i1` zOW3ur2(qU<=&=e$4ma=A@Ok)N>0$J^iZ||T!)-Y3V8z+E1xM8|@~rNP6ZS2$G}C?k8%x3DRwfrgO0 z1D$&{aC?mv|A1u>Bfhj|#nUM`uKav$4nFT$I}xAWwevDnP4!Rnc#afy8&fSm_A;qo zINaHNOAF$W75Dj<7s}$pjblslBxf8Vt&bxWUh87y}9GG*C?n{Y0gAk-jL=PNJ< z3;Ajs))9mATQV@n-O|1;8swIqfA6JSWjCj1&s{hA=PRV3fO^!PTz&{#7mi)PoZ{{{ z@p@ljVxCyKmKoEBwXj+@4l`q~`lO-m(b&?a%Q$t|dnYYmj*`dwMD)7Mxmf4anj^1{ z2P3RF8N2Y)q>p7bwB6%%}6{f`KZs}B~%7XozeTX^&Q7Vh|Q6QFaONUVP>6AW8SlmmN zum{jSLul`%Ug_#G*qiBQo$UB&+%4{9WmC9KRs$W+kQ$t}6n|MsG43hyLW?z`{nE1=Ivr_KkZ6?jn7#mr3EW#3$XRl)*(f(i<#oUcc%>G{=Yyu>VladD{(kZBTQ!hG>ovcY-#c zxweqi0V8e$CZM?s?WDPMnQi&#NYUK=qDj`%jJc}g$$+@OVt{sq@t^Tb<(7v?5gzJaxEDplyUaQKbB zoXg8s&BvD7SG((1!Qu3LzWcYt(J6YK8RM4L;$VrvwT)*Hy#;g({y` z6A#;$(4F7C)fG#aj6AWu+GK{E$C4FeQY)t(Ch>ie=P0HKbt&1Lye$v#E57d?4Eqsc z@_?y)=Thb(OV9m#=zey1Eh6T#+%YNh9^%PrLPoLq?2e(orSbSJ$&Y5&nrXVM7uwogc* z@7c24i`Foys;aWu_?kO`A_zc9b|I=3tXC4FBB5h*!Pam)zK*N5rAt>BezxrJniq4QQd_ zP@IYa4|PpNI?$}R5o?@jJ@FrsT#?WVQ+#d~yFQQ!g5voz% zisF9uPXu(Iic{GV<%s|$@+9c~4Z4$|o!v^EUED-nJ+(0>GZX7V3X~C;P-%-QTK3s* znHcf!IFmng1ZdfPnB>Y8tkV5Qfv-KHuv>>ou#ep-(BYr_OvRBPAxvd~sh5r@O`ekL zBq3StyJ+!M5AGUT!11li`pk2k%yAJkxN4bVe`K`J$WTkq%@}*M1wUywvB}*;jT!8# zmz7~vqKuy&%vzh51;P+UG=c3|XoEUk)*m!=$+LY)&efM3CJVdO-vMe_BAWaawWDGU zBYx|lQP+KiX^^+{?0L(S=mx==7f4He z{I~H`QudjHS@s5GAK}3@!}83sT2?#>j+K{Yuo}d|Yg*42y9lD=Y5dTO84V7f)FIq* z_voRplvTu9dLfo0R$=Mg+3elI+jq}WyQTYEg|54E$GN4v)?+QNIR>T7&!}tqha+lJ z6Q7<^1RZ{9W%LUh=ZK7o+oYFvG?dK@ooD3IlLANjWmy@PNW^F>!^>p@D$!* zc1ydgN3o@Ht#PdRX>iGb%RN@&QrYKZ#A&|3EvSK9e&=Gw%e$R7rqgbxhITv0${c>- zIuO|H93@AwjQEL5ZrraD7@}1;4epM##_z{|J2=ZG&PI^^avJQeu~zUl+e#;-Vq=Q` zaGJO)3E@ta#)$v%2KWOHbW3Y9zHv0oh%2!}Ta%OFzlFt!OXd8MV7}627zct~LBK+n zA$Vt$uHVT_1v!qh3U4jYTfT80H4i>a!sLLf+i_~k)w-mf?oger2T#E(@^ot~*t4Tt zzrRDwh*7ToJH(8rl2yivzhFs7y+(a@BJ)Bn6!VakHqfS;4hN0QC4JO=82ejQ2iM{B zWC$GXWS?-dKx=VHTl(>q3Etx6TW!!)Ki-Zz{~K@nodbERb<*y&3r9Go(P%_)_j-#t z_ps5nl09aP$fJH>bfR#?XiM{NVKL%HyeCuW&k+$LJ}$o71@557{jnAh+wDXd#4Tv&KhUH68=F)%?l*2;|8CH>H8#LkBjv@kFw zS1avp=T%v^HLA1X8kww#jp65wwwh%+*^eTs!3$!z zH?~ZOx-Tt$VR!UlR!c3puz;eLsymJL$*fRx-^9vKWIzR~u3V<#bvV6}H7Ks{W#l3Z zL{2|WyhriuP7SYaU#E6SC0**Rm3Swe-KFPKMNajSlC6)3E2~|D2pF1pJAws_UIU8 zCCWmX6C7Gzg?8CpGi)RCT~ZP#qlXK3nRJOGam2DG6^5?L;WPMnGy59s0o&^?sjWlU zY`SSmM+Xs*ZaJ0aO%QB$Ngt!oX3OtLE>ge*U0cP?u*| zHnpqF^BiNc-!6!6NUhQ|xumll3M94agM!v3$FbalP%H|$q-WYQdCol7k)}T99qVxvTxK1 zb>&HumvoFp2XnQ={)TpPAZ7@5Xi~T=*!5;Mb4cS9p2Pl-3ol{~FLFtfI|QymH*%yb zK)Nh|8m|t8L4<`J!jy{K_@oYP3de_C%Z3_WZD&%~J8sUVfJk_;Ld)%I7xq--@*lTl ztRi`J*_l<2V-XoGjkE1rkEud})YA9Zl?nK^NJy z9R5y+dYDT((T2AMC;zp;-o&Jl>~ZaM#2~I=pvNsKLi3^o%YwGN!$$ij2p8xjhD;m_ zjKt}$(S9IB881F51(!h;*p`&&gB<@l9HMNjcmrm*H-%rqtF$iZrhfH=|4uy~PoSQY zay?XsdIpB2PZB-gwOz-v$iZ8*MPO7%V@!|7OJ*+VOsmm;8QKaodJYvu%fs+_u;P-O zZNl+NJ^HdacbI--1Ea-#XL+1roJNs1gF#o}H-THPlU$$ShINqGQpW1z=mBpSRd|?~epV6+*5w<;;Xt}?QOV#ix{4kxF z--}BbE@@lq628bjB8G?;U>QT-jcrD(8NjkC`LJe-3-^>%@EFB8I)AhWSJlpF2VvgJ zg}*4vG1{#fS+8{82|aNd2Mk)=Uq9tBV%?#fjrpWcJw}UtV=#LJ$OFM#yhAi1sVu7Du+)-YL+r9nZG z4u?SyON1b|7$<{i&K|rA}3uN_pL~rcgKutw#7aOtLWwQeE9G;=!TNd0zfrn|hWq2FT5Ri*Bx~ zpKY%j13&+y93J9oU@q#2=%&c$q?MjIG)O8tZjEdv=@%pCl)mfcbUD0!8Xmvx*2$J* z#&a>wGCG>Hc*^VM;M%rWnUn|=uCbD$)U!l5xpY}M-*g%63rmFqOAIjInt8ATRlGUE zRCNbzqhD@Qzubm?xsCmD>-y!k^vi7v$uSL>E8&24%!SOXQDxhx5~?4G2Ok&il5gdP zY4}85;5EXF{Oi_XjM3h)aL6^&Q1BR)_#u2uNhI&oH{8**(bR>V$eU6;T;I#F%3pPeV7IHmDjQTWX05^5h!<92ij-#)74w%|3GM~f3`yHw^$j_b3p z*9`hTw$_OkVInq-!1wqr;jYJcv~a3asCg_sp{Mh0NBjxxZdGA`3zg%R(@yEFPNDg+ zjD&TaRJf6dv_uqJt8(0&<&?hc6w)5oqnZPyLdoL~ajQFpLywnn2M!CdRq0ViyZc_F zJ?>#FzD5a!RqG6A53_Xt`i>~Y=6_rBC^MRVV}teqUg6o-UUH~PoYfhL8zSE8^jXh4dAZlPcP43x2&&Y&)5wgtqXgH+!Wwyqzt@xW*`~T9K6W zI)0tv+>gb0IYtSx6q2XC{{+c~9O1wUeZuKBbrN@8%X5gvV44VoU~6r~w)y#jeMK6V z)h;BiOiFtlZAG2O?~1^87YARyBOi_zD7`jRSC=o`zcPzccL*C-PK-T++u}JlMC{_U z@KdeDcs)^QTp6DpCRe`;fap?MDzWlX$t&T;As>sXs}2_1;JJrBkrsan{mq`I_MFm> zxZ3T+-GgFVNvU9XBHgkUOeg%vOwe2a3zN0HhTgS$-YI75<={luVX#SS-v+aow&JnpN_$v)=sNAsF z^hGO&A28~EVwfcwHwGdvFcS`4EVi8}E#Q@v6>YzN*fN%n)=@2!F^BE~pC4Srv=ihl z47@SrN}Nf&{mrul<~vsw(qSbb6`UTpou0qpMu!uzsXB>8H&G|uPL$!&C6H#73+tZL zS*`**qq{Cl?a7P2L*mDkDUoxj$=}1z&SNhm} z8RGne0!mj@qtFJwxFpgC?lahXAffIG5$a31fhC}ghR=K|BkNT}!)h2Mmj1fjgE3h4 zJEbCjfn0F(mRukY1wJVkzIiGuZGIb@9p1=oi`$RxYg3!3!?QuSTqcYMVRN~Vuxh*| z3xv1hhZ;tJu%u06;$&IzHZZRAP_J#oQc z0u5ARUsNZ1I^4^5DMqV9$zJIcO62w{(J|al5GxZL0s;8?aaCIM@mAHAUg?q?XgHz>vYV{lnNEI4<8Tp=#L+G|D+0PmDIpG~1q4`53$mr^dFY3l_UfeND@do#5y~=fv+X2;$Qjkx8wrmPYug zWkT9BT8mTq;Sepz;nnk*53BiJsib>owia*r?QLgNH;f!d*nqoVC&_;$jrI%&c7Qj{pVe4er-vC<|ggs*ovtUkS z#G?Rj4uT)EhRM)B0lFgyt@J~`2lPM?S|(R}9-b{}9hLD*+9 zY&u|dewd|KIwS)p0C*xuxKD=71nf)@wnK(p0qk-R_LdB51gs|r+a$w22Fx9Vt(Rfj z0E^HnTJ6QHCTPJTt_3hI2wW}`Rsp6B!pt&kAz;}-*!?oB2(Y{$Y`zSe4A}f2%pk*( z0ILkb@?@AAuqtg{fSa3Spoo624iaX`unT}~3c_@N<%y@(q^?@AzgKGP5Waja&C=01 z341G}u@Ll0YkTQbk=@xV#dWb;ug9@fThnYCjeAZNZ{jeq>oG*nbiStN_?hQu;4yw5 z`g*EYYH$Q7J`1U{ELdk-r&8w$)Y&{-sq=_MKFFjdfApjG1FiNqxf|GCXM_s`ZZ0n?L~h2XIm`Pz|zj)kZ6=FQD74$ z4ieq%cqCYSqrbSNr{cre_CkLJ_o6{-bYFuDI_JtP7j!N{jg$Q~lFzP8rPpD{I|^E| zR;`BmIqZfGccfXe@5zjBn4cL2u1?Kkb)=RA`i&ao7=Laoikw6dD|RGN#9v|0qY)j;3J2PN&=H{0GZ zUFoToAU-09{|WeLzb5`2#5+2aezx>{3w*pE|5Xrg4dRdQn{Ba2`3e3OBsd!+*oO+@ z{P@2H@u!0LclOP;+lS7lQcOApW_17Q~Bwf~T%xlEH7m(bAIR zD)DyrG54dvLN5mkRie>Cf1~%IjA?FYneFa*IG?Ru9)Qj1ajx)5Tiiug;mr`&DKQ6w z3v?O2+pj`?J>C#jnjC>9*SRO7%3N5m0!sqy8FxmI4MUKP6v&q6XFUOUk2Ky#pLhFc z9jxeNDC%N@bxlNF^WAE|P6gYv5YXUu;<8a$Kf*k>h|4?|uyKj1u<4lQwq6NXNJNl{ zpZCtTpYStrHi&n$2Q1*9z(@G;r-FEE5Z^Ep1cA|h2o2WF4M?si&g0q(Xi1PY1!{A> zj|1-LgKKd=dvZoYiAt$3 z;2Bw^3FbS29|Am+ui!0ItsSTQ>Qu}m`NS`rrh69XP#G%oQ2Q>!bs*l!I% zDb0Q8A5Pg*CLKYrzkj5}O%8HZQmp_O^k6KK7d23R@J>_ObP) zJ1}f-FjH-fRNFFKfl@&+N`nVMqPPZyIENd|kASfaGGkjo=k7 zWjossdKaK26KC1n{h&rb>*mg~X=6fb$fFuc@uMvkRLZf%c1P+EGCbLIX4wisOgdr4 z(HjyTX)M_AduX#qs&UV=c4&IRsPtg4AsyrBV{GB1)ln|pB< zemgUO`vy1@bZ|k2D0=ir4S<$e^8Xv(Opa2V8K>}F3v#^#V?#v{Gtdf>_|n<>c3AN#Sn=YnOHtu}~!%C);?mMt!rf86x~@~49GKkQo8 zg0)v^K&}T+nG%eU2bm`QvbPx9k^yXqi~Pql=`x_EAasVS?WqvA)bero5O!Qd+ zfOMm)0{OlI<6IfY2Mb7}U9tV>Z*aL#;n`pVBV3muv6c<6F~s#O==<;**BIotlJm#K(;?zcZI?yU?e#0u`NUVQFw z98u+hVpFS-w`Jtu!koFXfx4v`Liv`QyX1o!oUxJ7j^vZEk>bFrUc(n1p4zMiFKIZY zRpV8g+}>1ubW`Be&Vd6lIzsEjshvYAuqx+t*eh5=Ww423-7@}$q2RwsCP>18%sE)j zDjd*KL%5GBOnP&|l*Syjf7^j>!5?#J`Kj1qi5H_(+*dAWXq=avgBwe?V_)g)_ z*luWHtG+98up~uw3y-~%%V}`{^iEpDTb)Ga=n&4lGm$&lB}BZdO>OQZ1vRa?C+QB` z__?nXe0i2cxxMV*n=tch+sv^yLNOz| zgvy$c8LqAAhg;jqo6ZC&A5gPwmRbN~i!?BUV{ksZ; z6T6btkqpBKKkvG+{?^@bDq+(RZGFkUe{<}jdj0;hta{#z(mU%NAKl6hnNa!QlM`kw z&wrwF@#Bn8dSIm1pV0!bc+rE}#gAzpd2sn-4=&Y?8+W^Q^omGf-hsVB+Ci=0Kq@?# zm$c&XMUOnV5`Bs-%guKI} zg+Cq67S0`>Hh9L|xpU@D(dzFkED`1$9wAhL*}5YqIQl0qjP*FntUiKE*2jfsj-^}N z$5_SzP+SAcOh#IWv<|5j=@imsq^J`tlZ8}-RE4w!=@8OcB<53=Nkqy+G9hh1szW-1 z#Kj3&-mVjwcMQUwXP- zC2Vbs7S1;gso&hVBSN#~9-oD+&p%hMsV_O_RzZ{B#U{(I4OR&qPFg<9GJ)A95yIe&zsB{_4=~|8=tbUpF|QJO#Qhl<`~O?z z!k;gV5>EW55J@dWT-rt*$<)_gQmbGIO#O#fUQtJ&gMI%D$8axd%Nv@7O9LfHE0MMw zu7ABPiNik`I@pmsh%BiG zT@?#Yccu;^OIr#P%N70t3NqFm!q}1>%myK;D=BQ@c8t*N tLP3`<(u_y*c7{2dBRmF-@;|bKSG#m!Mc-q{eJ>p8dY|1R+}C~n{{geB>0$r? diff --git a/mlinkutil b/mlinkutil index f796ebe0b19260b830056a78e4b62ba0bc18d215..244e02f271b6680d2395a5ad43fff5c0134d7b0f 100755 GIT binary patch delta 42 ycmZqZV{GVS+^~RA Date: Thu, 21 May 2020 19:53:43 -0400 Subject: [PATCH 16/18] Add UDPMUNT, UDPMUNTGM & UDPFSYNTH options --- config.h | 2 +- ini.c | 7 ++ main.c | 363 ++++++++++++++++++++++++++++++++++-------------------- midilink | Bin 61496 -> 61496 bytes mlinkutil | Bin 18176 -> 18176 bytes 5 files changed, 236 insertions(+), 136 deletions(-) diff --git a/config.h b/config.h index 304aaa2..1032072 100644 --- a/config.h +++ b/config.h @@ -15,7 +15,7 @@ static char * midiLinkINI = "/media/fat/linux/MidiLink.INI"; static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR"; static char * serialDevice = "/dev/ttyS1"; static char * serialDeviceUSB = "/dev/ttyUSB0"; -static char * helloStr = "MiSTer MidiLink 2.9c BB7"; +static char * helloStr = "MiSTer MidiLink 2.9d BB7"; static unsigned char test_note[3] = {0x90, 60, 127}; static char * midiINDevice = "/dev/midi2"; static char * midiDevice = "/dev/midi1"; diff --git a/ini.c b/ini.c index 9055fc6..78c6107 100644 --- a/ini.c +++ b/ini.c @@ -47,6 +47,7 @@ extern int TCPATHDelay; extern enum ASCIITRANS TCPAsciiTrans; extern enum SOFTSYNTH TCPSoftSynth; extern int MUNTCPUMask; +extern int FSYNTHCPUMask; /////////////////////////////////////////////////////////////////////////////////////// // @@ -129,11 +130,16 @@ char ini_process_key_value_pair(char * key, char * value) { ini_int(value, &MUNTCPUMask); } + else if(strcmp("FSYNTH_VOLUME", key) == 0) { misc_replace_char(value, strlen(value), '%', 0x00); ini_int(value, &fsynthVolume); } + else if (strcmp("FSYNTH_CPU_MASK", key) == 0) + { + ini_int(value, &FSYNTHCPUMask); + } else if(strcmp("MODEM_VOLUME", key) == 0) { misc_replace_char(value, strlen(value), '%', 0x00); @@ -310,6 +316,7 @@ void ini_print_settings(int p) else misc_print(p, " - MUNT_VOLUME --> Default (don't set)\n"); misc_print(p, " - MUNT_CPU_MASK --> %d\n",MUNTCPUMask); + misc_print(p, " - FSYNTH_CPU_MASK --> %d\n",FSYNTHCPUMask); if(fsynthVolume != -1) misc_print(p, " - FSYNTH_VOLUME --> %d%c\n", fsynthVolume, '%'); else diff --git a/main.c b/main.c index 7f28b82..cf412ab 100644 --- a/main.c +++ b/main.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include #include #include +#include #include #include #include @@ -43,7 +44,7 @@ along with this program. If not, see . #define DEFAULT_TCPDTR 1 #define DEFAULT_TCPQuiet 0 -enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeUSBSER, ModeMUNT, ModeMUNTGM, ModeFSYNTH}; +enum MODE {ModeUSBMIDI, ModeTCP, ModeUDP, ModeUSBSER, ModeMUNT, ModeMUNTGM, ModeFSYNTH, ModeUDPMUNT, ModeUDPMUNTGM, ModeUDPFSYNTH}; int MIDI_DEBUG = TRUE; static enum MODE mode = ModeUSBMIDI; @@ -86,9 +87,9 @@ int TCPDTR = DEFAULT_TCPDTR; int UDPFlow = -1; int MODEMSOUND = DEFAULT_MODEMSOUND; int TCPQuiet = DEFAULT_TCPQuiet; - int TCPATHDelay = 900; -int MUNTCPUMask = 1; +int MUNTCPUMask = -1; +int FSYNTHCPUMask = -1; enum SOFTSYNTH TCPSoftSynth = FluidSynth; unsigned int TCPTermRows = DEFAULT_TCPTermRows; unsigned int DELAYSYSEX = FALSE; @@ -108,8 +109,6 @@ void set_pcm_volume(int value) { if(value != -1) { - //if(misc_check_module_loaded("snd_dummy")) - // strcpy(mixerControl, "Master"); char buf[30]; sprintf(buf, "amixer set %s %d%c", mixerControl, value, '%'); misc_print(0, "Setting '%s' to %d%\n", mixerControl, value); @@ -141,24 +140,23 @@ int start_munt() int midiPort = -1; set_pcm_volume(muntVolume); if(strlen(MUNTOptions) > misc_count_str_chr(MUNTOptions, ' ')) - misc_print(0, "Starting --> mt32d : Options --> '%s'\n", MUNTOptions); + misc_print(0, "Starting --> mt32d : Options --> '%s' ", MUNTOptions); else - { misc_print(0, "Starting --> mt32d"); - if (CPUMASK != MUNTCPUMask) + if (CPUMASK != MUNTCPUMask) misc_print(0, " : CPUMASK = %d", MUNTCPUMask); - misc_print(0, "\n"); - } + misc_print(0, "\n"); sprintf(buf, "taskset %d mt32d %s -f %s &", MUNTCPUMask, MUNTOptions, MUNTRomPath); system(buf); int loop = 0; do { + if (loop > 0) + misc_print(0, "Looking for MUNT port (%d / 2)\n", loop); sleep(2); midiPort = alsa_get_midi_port("MT-32"); loop++; - } - while(midiPort < 0 && loop < 3); + } while (midiPort < 0 && loop < 3); return midiPort; } @@ -171,17 +169,21 @@ int start_fsynth() char buf[256]; int midiPort = -1; set_pcm_volume(fsynthVolume); - misc_print(0, "Starting --> fluidsynth\n"); - sprintf(buf, "taskset %d fluidsynth -is -a alsa -m alsa_seq %s &", CPUMASK, fsynthSoundFont); + misc_print(0, "Starting --> fluidsynth"); + if (CPUMASK != FSYNTHCPUMask) + misc_print(0, " : CPUMASK = %d", FSYNTHCPUMask); + misc_print(0, "\n"); + sprintf(buf, "taskset %d fluidsynth -is -a alsa -m alsa_seq %s &", FSYNTHCPUMask, fsynthSoundFont); system(buf); int loop = 0; do { - sleep(2); + if(loop > 0) + misc_print(0, "Looking for FluidSynth port (%d / 13)\n", loop); + sleep(3); midiPort = alsa_get_midi_port("FLUID Synth"); loop++; - } - while(midiPort < 0 && loop < 5); + } while (midiPort < 0 && loop < 14); return midiPort; } @@ -314,6 +316,17 @@ void play_dial_sound(char * tmp, char * ipAddr) } } +/////////////////////////////////////////////////////////////////////////////////////// +// +// write_[sequencer]_packet() +// this is for ALSA sequencer interface +// +void write_alsa_packet(char * buf, int bufLen) +{ + alsa_send_midi_raw(buf, bufLen); + show_debug_buf("SEQU OUT ", buf, bufLen); +} + /////////////////////////////////////////////////////////////////////////////////////// // // void * tcplst_thread_function(void * x) @@ -433,6 +446,27 @@ void * udpsock_thread_function (void * x) } while (TRUE); } + +/////////////////////////////////////////////////////////////////////////////////////// +// +// void * udpsock_thread_function2(void * x) +// Thread function for UDP input for external device like Raspberry Pi +// +void * udpsock_thread_function2 (void * x) +{ + unsigned char buf[100]; + int rdLen; + do + { + rdLen = udpsock_read(socket_in, (char *) buf, sizeof(buf)); + if (rdLen > 0) + { + write_alsa_packet(buf, rdLen); + //show_debug_buf("USOCK2 IN", buf, rdLen); + } + } while (TRUE); +} + /////////////////////////////////////////////////////////////////////////////////////// // // void do_check_modem_hangup(char * buf, int bufLen) @@ -1263,7 +1297,6 @@ void * midiINin_thread_function (void * x) // write_socket_packet() // this is for TCP/IP // - void write_socket_packet(int sock, char * buf, int bufLen) { if (mode == ModeTCP) @@ -1281,17 +1314,6 @@ void write_socket_packet(int sock, char * buf, int bufLen) show_debug_buf("SOCK OUT ", buf, bufLen); } -/////////////////////////////////////////////////////////////////////////////////////// -// -// write_[sequencer]_packet() -// this is for ALSA sequencer interface -// -void write_alsa_packet(char * buf, int bufLen) -{ - alsa_send_midi_raw(buf, bufLen); - show_debug_buf("SEQU OUT ", buf, bufLen); -} - /////////////////////////////////////////////////////////////////////////////////////// // // void show_line() @@ -1360,6 +1382,8 @@ int main(int argc, char *argv[]) int altBaud = FALSE; char coreName[30] = ""; MUNTCPUMask = CPUMASK; + FSYNTHCPUMask = CPUMASK; + unsigned char buf[256]; //catch_signal(SIGTERM); misc_print(0, "\e[2J\e[H"); @@ -1371,6 +1395,12 @@ int main(int argc, char *argv[]) if(misc_check_file(midiLinkINI)) ini_read_ini(midiLinkINI, coreName, 0); + else + { + midiLinkINI = basename(midiLinkINI); + if(misc_check_file(midiLinkINI)) + ini_read_ini(midiLinkINI, coreName, 0); + } if (misc_check_args_option(argc, argv, "QUIET")) MIDI_DEBUG = FALSE; @@ -1380,21 +1410,18 @@ int main(int argc, char *argv[]) if (midilinkPriority != 0) misc_set_priority(midilinkPriority); - int MIDI = misc_check_device(midiDevice); - - if (misc_check_args_option(argc, argv, "MENU") && !MIDI) + if (!misc_check_device(midiDevice) && misc_check_args_option(argc, argv, "MENU")) { - if (misc_check_file("/tmp/ML_MUNT") && !MIDI) mode = ModeMUNT; - if (misc_check_file("/tmp/ML_MUNTGM") && !MIDI) mode = ModeMUNTGM; - if (misc_check_file("/tmp/ML_FSYNTH") && !MIDI) mode = ModeFSYNTH; - if (misc_check_file("/tmp/ML_UDP")) {mode = ModeUDP; altBaud = FALSE;} - if (misc_check_file("/tmp/ML_TCP")) {mode = ModeTCP; altBaud = FALSE;} - if (misc_check_file("/tmp/ML_UDP_ALT")) {mode = ModeUDP; altBaud = TRUE; } - if (misc_check_file("/tmp/ML_TCP_ALT")) {mode = ModeTCP; altBaud = TRUE; } - if (misc_check_file("/tmp/ML_USBMIDI")) mode = ModeUSBMIDI; - if (misc_check_file("/tmp/ML_USBSER")) mode = ModeUSBSER; - if (mode != ModeMUNT && mode != ModeMUNTGM && mode != ModeFSYNTH && - mode != ModeTCP && mode != ModeUDP) + if (misc_check_file("/tmp/ML_MUNT")) mode = ModeMUNT; + if (misc_check_file("/tmp/ML_MUNTGM")) mode = ModeMUNTGM; + if (misc_check_file("/tmp/ML_FSYNTH")) mode = ModeFSYNTH; + if (misc_check_file("/tmp/ML_UDP")) { mode = ModeUDP; altBaud = FALSE; } + if (misc_check_file("/tmp/ML_TCP")) { mode = ModeTCP; altBaud = FALSE; } + if (misc_check_file("/tmp/ML_UDP_ALT")) { mode = ModeUDP; altBaud = TRUE; } + if (misc_check_file("/tmp/ML_TCP_ALT")) { mode = ModeTCP; altBaud = TRUE; } + if (misc_check_file("/tmp/ML_USBMIDI")) mode = ModeUSBMIDI; + if (misc_check_file("/tmp/ML_USBSER")) mode = ModeUSBSER; + if (mode == ModeUSBMIDI) // no USB MIDI { misc_print(0, "MENU --> FSYNTH\n"); mode = ModeFSYNTH; @@ -1402,43 +1429,56 @@ int main(int argc, char *argv[]) } else { - if(misc_check_args_option(argc, argv, "MUNT")) mode = ModeMUNT; - if(misc_check_args_option(argc, argv, "MUNTGM")) mode = ModeMUNTGM; - if(misc_check_args_option(argc, argv, "FSYNTH")) mode = ModeFSYNTH; - if(misc_check_args_option(argc, argv, "UDP")) {mode = ModeUDP; altBaud = FALSE;} - if(misc_check_args_option(argc, argv, "TCP")) {mode = ModeTCP; altBaud = FALSE;} - if(misc_check_args_option(argc, argv, "UDPALT")) {mode = ModeUDP; altBaud = TRUE; } - if(misc_check_args_option(argc, argv, "TCPALT")) {mode = ModeTCP; altBaud = TRUE; } - if(misc_check_args_option(argc, argv, "USBMIDI")) mode = ModeUSBMIDI; - if(misc_check_args_option(argc, argv, "USBSER")) mode = ModeUSBSER; + if(misc_check_args_option(argc, argv, "MUNT")) mode = ModeMUNT; + if(misc_check_args_option(argc, argv, "MUNTGM")) mode = ModeMUNTGM; + if(misc_check_args_option(argc, argv, "FSYNTH")) mode = ModeFSYNTH; + if(misc_check_args_option(argc, argv, "UDP")) { mode = ModeUDP; altBaud = FALSE; } + if(misc_check_args_option(argc, argv, "TCP")) { mode = ModeTCP; altBaud = FALSE; } + if(misc_check_args_option(argc, argv, "UDPALT")) { mode = ModeUDP; altBaud = TRUE; } + if(misc_check_args_option(argc, argv, "TCPALT")) { mode = ModeTCP; altBaud = TRUE; } + if(misc_check_args_option(argc, argv, "USBMIDI")) mode = ModeUSBMIDI; + if(misc_check_args_option(argc, argv, "USBSER")) mode = ModeUSBSER; + if(misc_check_args_option(argc, argv, "UDPMUNT")) mode = ModeUDPMUNT; + if(misc_check_args_option(argc, argv, "UDPMUNTGM")) mode = ModeUDPMUNTGM; + if(misc_check_args_option(argc, argv, "UDPFSYNTH")) mode = ModeUDPFSYNTH; } killall_mpg123(0); killall_aplaymidi(0); killall_softsynth(3); - if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH) + if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH || + mode == ModeUDPMUNT || mode == ModeUDPMUNTGM || mode == ModeUDPFSYNTH) { + /* Disable this so we can run UDPMUNT & UDPFSYNTH on RPi or other linux device. if(!misc_check_device(MrAudioDevice)) // && misc_check_file("/etc/asound.conf")) { misc_print(0, "ERROR: You have no MrAudio device in kernel --> %s\n", MrAudioDevice); close_fd(); return -1; } - + */ + if (!misc_check_device(PCMDevice)) { - //misc_print(0, "WARNING: You have no PCM device loading --> snd-dummy module\n"); - //system ("modprobe snd-dummy"); misc_print(0, "ERROR: You have no PCM device --> %s\n", PCMDevice); close_fd(); return -2; } - - if (mode == ModeMUNT || mode == ModeMUNTGM) - midiPort = start_munt(); - else if (mode == ModeFSYNTH) - midiPort = start_fsynth(); + + switch(mode) + { + case ModeMUNT: + case ModeMUNTGM: + case ModeUDPMUNT: + case ModeUDPMUNTGM: + midiPort = start_munt(); + break; + case ModeFSYNTH: + case ModeUDPFSYNTH: + midiPort = start_fsynth(); + break; + } if (midiPort < 0) { @@ -1447,68 +1487,73 @@ int main(int argc, char *argv[]) return -3; } } - fdSerial = open(serialDevice, O_RDWR | O_NOCTTY | O_SYNC); - if (fdSerial < 0) - { - misc_print(0, "ERROR: opening %s: %s\n", serialDevice, strerror(errno)); - close_fd(); - return -4; - } - serial_set_interface_attribs(fdSerial); - int result = misc_check_args_option(argc, argv, "BAUD"); - if(result && (result + 1 < argc)) + //these modes don't need serial port. all others do :) + if (mode != ModeUDPMUNT && mode != ModeUDPMUNTGM && mode != ModeUDPFSYNTH ) { - char * ptr; - baudRate = strtol(argv[result + 1], &ptr, 10); - if (!serial2_is_valid_rate (baudRate)) + fdSerial = open(serialDevice, O_RDWR | O_NOCTTY | O_SYNC); + if (fdSerial < 0) { - misc_print(0, "ERROR : BAUD not valid --> %s\n", argv[result + 1]); - return -5; + misc_print(0, "ERROR: opening %s: %s\n", serialDevice, strerror(errno)); + close_fd(); + return -4; } - } - else if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) - { - baudRate = UDPBaudRate_alt; - } - else if (mode == ModeUDP && UDPBaudRate != -1) - { - baudRate = UDPBaudRate; - } - else if (mode == ModeTCP) - { - if(altBaud && TCPBaudRate_alt != -1) - baudRate = TCPBaudRate_alt; - else if(TCPBaudRate != -1) - baudRate = TCPBaudRate; - else - baudRate = 115200; - } - else if (mode == ModeUSBSER) - { - if(USBSerBaudRate != -1) - baudRate = USBSerBaudRate; - else - baudRate = 115200; - } - else - { - if(MIDIBaudRate != -1) - baudRate = MIDIBaudRate; - else + serial_set_interface_attribs(fdSerial); + + int result = misc_check_args_option(argc, argv, "BAUD"); + if(result && (result + 1 < argc)) { - if (strcmp(coreName, "AO486") == 0) - baudRate = 38400; + char * ptr; + baudRate = strtol(argv[result + 1], &ptr, 10); + if (!serial2_is_valid_rate (baudRate)) + { + misc_print(0, "ERROR : BAUD not valid --> %s\n", argv[result + 1]); + return -5; + } + } + else if (altBaud && mode == ModeUDP && UDPBaudRate_alt != -1) + { + baudRate = UDPBaudRate_alt; + } + else if (mode == ModeUDP && UDPBaudRate != -1) + { + baudRate = UDPBaudRate; + } + else if (mode == ModeTCP) + { + if(altBaud && TCPBaudRate_alt != -1) + baudRate = TCPBaudRate_alt; + else if(TCPBaudRate != -1) + baudRate = TCPBaudRate; else - baudRate = 31250; + baudRate = 115200; } + else if (mode == ModeUSBSER) + { + if(USBSerBaudRate != -1) + baudRate = USBSerBaudRate; + else + baudRate = 115200; + } + else + { + if(MIDIBaudRate != -1) + baudRate = MIDIBaudRate; + else + { + if (strcmp(coreName, "AO486") == 0) + baudRate = 38400; + else + baudRate = 31250; + } + } + + serial_set_flow_control(fdSerial, 0); + serial2_set_baud(serialDevice, fdSerial, baudRate); + serial_do_tcdrain(fdSerial); + serial2_set_DCD(serialDevice, fdSerial, (mode == ModeTCP)?FALSE:TRUE); } - - serial_set_flow_control(fdSerial, 0); - serial2_set_baud(serialDevice, fdSerial, baudRate); - serial_do_tcdrain(fdSerial); - serial2_set_DCD(serialDevice, fdSerial, (mode == ModeTCP)?FALSE:TRUE); - + if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH) { if(alsa_open_seq(midiPort, (mode == ModeMUNTGM)?1:0)) @@ -1517,6 +1562,7 @@ int main(int argc, char *argv[]) if(strlen(MT32LCDMsg) > 0) write_alsa_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); //This loop handles softSynth MUNT/FluidSynth + misc_print(0, "Starting --> local MIDI loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1539,6 +1585,40 @@ int main(int argc, char *argv[]) switch(mode) { + case ModeUDPMUNT: + case ModeUDPMUNTGM: + case ModeUDPFSYNTH: + if(alsa_open_seq(midiPort, (mode == ModeUDPMUNTGM)?1:0)) + { + show_line(); + if(strlen(MT32LCDMsg) > 0) + write_alsa_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); + socket_in = udpsock_server_open(UDPServerPort); + if(socket_in > 0) + { + misc_print(0, "Socket Listener created on port %d.\n", UDPServerPort); + status = pthread_create(&socketInThread, NULL, udpsock_thread_function2, NULL); + if (status == -1) + { + misc_print(0, "ERROR: unable to create UDP socket input thread.\n"); + close_fd(); + return -8; + } + misc_print(0, "UDP Socket input thread(2) created.\n"); + } + else + { + misc_print(0, "ERROR: unable to create UDP listener --> '%s'\n", strerror(errno)); + close_fd(); + return -9; + } + } + else + { + close_fd(); + return -10; + } + break; case ModeUDP: { if(UDPFlow > 0) @@ -1555,34 +1635,34 @@ int main(int argc, char *argv[]) if(socket_in > 0) { misc_print(0, "Socket Listener created on port %d.\n", UDPServerPort); - status = pthread_create(&socketInThread, NULL, udpsock_thread_function, NULL); + status = pthread_create(&socketInThread, NULL, udpsock_thread_function, NULL); if (status == -1) { - misc_print(0, "ERROR: unable to create socket input thread.\n"); + misc_print(0, "ERROR: unable to create UDP socket input thread.\n"); close_fd(); - return -7; + return -11; } - misc_print(0, "Socket input thread created.\n"); + misc_print(0, "UDP Socket input thread(1) created.\n"); } else { misc_print(0, "ERROR: unable to create UDP listener --> '%s'\n", strerror(errno)); close_fd(); - return -8; + return -12; } } else { misc_print(0, "ERROR: unable to open UDP port --> '%s'\n", strerror(errno)); close_fd(); - return -9; + return -13; } } else { misc_print(0, "ERROR: in INI File (UDP_SERVER) --> %s\n", midiLinkINI); close_fd(); - return -10; + return -14; } } break; @@ -1600,7 +1680,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener thread.\n"); close_fd(); - return -11; + return -15; } misc_print(0, "Socket listener thread created.\n"); } @@ -1608,7 +1688,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create socket listener --> '%s'\n", strerror(errno)); close_fd(); - return -12; + return -16; } } break; @@ -1619,7 +1699,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiDevice, strerror(errno)); close_fd(); - return -13; + return -17; } if (misc_check_device(midiINDevice)) @@ -1629,7 +1709,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: cannot open %s: %s\n", midiINDevice, strerror(errno)); close_fd(); - return -14; + return -18; } } @@ -1647,7 +1727,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create *MIDI input thread.\n"); close_fd(); - return -15; + return -19; } misc_print(0, "MIDI1 input thread created.\n"); misc_print(0, "CONNECT : %s --> %s & %s\n", midiINDevice, serialDevice, midiDevice); @@ -1658,7 +1738,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create MIDI input thread.\n"); close_fd(); - return -16; + return -20; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, midiDevice); @@ -1677,21 +1757,21 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: You have no '%s' device! --> maybe set 'USB_SERIAL_MODULE = ' in '%s'?\n", serialDeviceUSB, midiLinkINI); close_fd(); - return -17; + return -21; } system(buf); } - + fdSerialUSB = open(serialDeviceUSB, O_RDWR); if (fdSerialUSB < 0) { misc_print(0, "ERROR: cannot open %s: %s\n", serialDeviceUSB, strerror(errno)); close_fd(); - return -18; + return -22; } serial_set_flow_control(fdSerial, 3); //RTS/CTS - serial_set_flow_control(fdSerialUSB, 3); + serial_set_flow_control(fdSerialUSB, 3); serial_set_interface_attribs(fdSerialUSB); serial2_set_baud(serialDeviceUSB, fdSerialUSB, baudRate); serial_do_tcdrain(fdSerialUSB); @@ -1702,7 +1782,7 @@ int main(int argc, char *argv[]) { misc_print(0, "ERROR: unable to create serial input thread.\n"); close_fd(); - return -19; + return -23; } misc_print(0, "MIDI input thread created.\n"); misc_print(0, "CONNECT : %s <--> %s\n", serialDevice, serialDeviceUSB); @@ -1723,6 +1803,7 @@ int main(int argc, char *argv[]) write_midi_packet(buf, misc_MT32_LCD(MT32LCDMsg, buf)); } //This main loop handles USB MIDI + misc_print(0, "Starting --> USB MIDI loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1734,18 +1815,28 @@ int main(int argc, char *argv[]) break; case ModeUSBSER: //This main loop handles USB serial + misc_print(0, "Starting --> USB Serial loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); if (rdLen > 0) - { + { show_debug_buf("SERIAL OUT ", buf, rdLen); write(fdSerialUSB, buf, rdLen); - } + } else if (rdLen < 0) misc_print(1, "ERROR: (USBSER) from read: %d: %s\n", rdLen, strerror(errno)); } while (TRUE); break; + case ModeUDPMUNT: + case ModeUDPMUNTGM: + case ModeUDPFSYNTH: + misc_print(0, "Starting --> UDP Synth loop :)\n"); + do + { + sleep(1); + } while (TRUE); + break; case ModeUDP: //only send all-notes-off if UDP is being used with MIDI and not game if (socket_out != -1 && baudRate == 31250) @@ -1759,6 +1850,7 @@ int main(int argc, char *argv[]) } } //This main loop handles UDP + misc_print(0, "Starting --> UDP loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); @@ -1773,6 +1865,7 @@ int main(int argc, char *argv[]) break; case ModeTCP : //This main loop handles TCP + misc_print(0, "Starting --> TCP loop :)\n"); do { int rdLen = read(fdSerial, buf, sizeof(buf)); diff --git a/midilink b/midilink index 27a96e1f4ddc2d253bd9e75ade7887f482d3bcbf..aad37f630922f9962ee8a79748f8be0827b9dab8 100755 GIT binary patch delta 28154 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 Ulyx55o)=Gazs1&wclBKOf0yS1sQ>@~ delta 27474 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 diff --git a/mlinkutil b/mlinkutil index f796ebe0b19260b830056a78e4b62ba0bc18d215..244e02f271b6680d2395a5ad43fff5c0134d7b0f 100755 GIT binary patch delta 42 ycmZqZV{GVS+^~RA Date: Thu, 21 May 2020 20:26:58 -0400 Subject: [PATCH 17/18] update README.md --- README.md | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index b2ce2ba..188b9ca 100644 --- a/README.md +++ b/README.md @@ -75,30 +75,36 @@ SoftMPU option *** The 'midilink' daemon currently supports following switches / options: - TESTMIDI - this option sends a middle 'c' note to the MIDI device + TESTMIDI - this option sends a middle 'c' note to the MIDI device once the daemon is started. - BAUD - Specify BAUD rate... + BAUD - Specify BAUD rate... - QUIET - this option suppresses MIDI debug output. + QUIET - this option suppresses MIDI debug output. - MUNT - Use MUNT SoftSynth (no USB MIDI adapter - required) + MUNT - Use MUNT SoftSynth (no USB MIDI adapter + required) - FSYNTH - Use FluidSynth SoftSynth (no USB MIDI adapter - required) + FSYNTH - Use FluidSynth SoftSynth (no USB MIDI adapter + required) - UDP - Send MIDI to UDP Port (INI setting MIDI_SERVER / - MIDI_SERVER_PORT) + UDP - Send MIDI to UDP Port (INI setting MIDI_SERVER / + MIDI_SERVER_PORT) - TCP - Works like a modem with AT commands: - (ATDT, ATBAUD, ATIPADDR, +++ATH) + UDPMUNT - Listen on UDP port and send to MUNT - USBSER - Connect to USB serial converter + UDPMUNTGM - Listen on UDP port and send to MUNT (GM mapping) + + UDPFSYNTH - Listen on UDP port and send to FluidSynth - MENU - starts based on /tmp/ML_MUNT, /tmp/ML_UDP, - /tmp/ML_FSYNTH, /tmp/ML_TCP /tmp/ML_USBSER - used with MiSTer Menu to set mode of operation. + TCP - Works like a modem with AT commands: + (ATDT, ATBAUD, ATIPADDR, +++ATH) + + USBSER - Connect to USB serial converter + + MENU - starts based on /tmp/ML_MUNT, /tmp/ML_UDP, + /tmp/ML_FSYNTH, /tmp/ML_TCP /tmp/ML_USBSER + used with MiSTer Menu to set mode of operation. The MidiLink.INI file: From 8c9d1369160970e52468a41ca1210a130f820054 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 22 May 2020 20:34:21 -0400 Subject: [PATCH 18/18] Set permissions for midilink & mlinkutil --- INSTALL/midilink_updater.sh | 3 +++ INSTALL/midilink_updater_script.zip | Bin 1443 -> 1487 bytes 2 files changed, 3 insertions(+) diff --git a/INSTALL/midilink_updater.sh b/INSTALL/midilink_updater.sh index 08e83bc..ecd4872 100644 --- a/INSTALL/midilink_updater.sh +++ b/INSTALL/midilink_updater.sh @@ -88,6 +88,9 @@ echo "Downloading MidiLink" curl -kL $BIN_REPO"midilink?raw=true" -o $MIDILINK_BIN echo "Downloading MLinkUTIL" curl -kL $BIN_REPO"mlinkutil?raw=true" -o $MLINKUTIL_BIN +echo "Setting permissions : $MIDILINK_BIN, $MLINKUTIL_BIN" +chmod 755 $MIDILINK_BIN +chmod 755 $MLINKUTIL_BIN echo "Rebooting in:" sleep 1 echo "3" diff --git a/INSTALL/midilink_updater_script.zip b/INSTALL/midilink_updater_script.zip index 8bebfd4207aea6af11142aad4f7c192bf3087949..5a1d057371cedbbee457f50d09f75f4403f5dd75 100644 GIT binary patch delta 1396 zcmV-)1&jKl3(pH3P)h>@6aWAK2mltOworRkz8n(;001ov000vJ9Ft)M777Uf11xXI zUNUdUkv$uKD4wM47|w=qlW|Hi7=x`E5FhdIiVXQoq8u3(~SRn_XHB+#dZ3H z5xaZOKKpw2_6>1ZOdMMVwYOjeOhO{~T-Xudr!Oc4$^CR`3wjAFo`Gw}AgIS=Dwva{ z6j%y&>=7;?;vVx?2!o<5_Nag~ppa4#N#K6|=Vmm2g&P`EVTUlzoRGONU@na%1sgpp zi43R*j)GAK`ijA1!vOjmaqX1x_!KBZy?{q5B>sn1;bMb#3S1z@4|b|(3*d=5_9Jp# zL1?GjlZ_*BZ^QF|#W`%i6O1K5IE-$|!Vnw^nWTOeo+1L;!o6EYw;qr^^mS|0n@pf@n9zZ7 z$F%hBbkH$jJT=G0q}KqLP(_O3`TxkQpVtP{=h4(=p;Qq+U@0Z?3OxwyM~WqNDSJd# zHn==ly*Hgl+dGp z&al_kPIiuxNwdghjiu%%-_uAe8H$z8(OXA%ru5C z_>Iz5vo3g4$8NSs#rzL_jJ~UOr@`yMNkG-?A4`j$D z78SE0!Vd5#aYF8p$d)*27$9{64q7*$?t)>{=rM|8nl>5@t;T$K1BnvX|AzYV9O~{l zth1_Iz`M`HqmLxc!mx%-8P@>Ta3fv9+g?7_jr3wF#;xy2!miOa{5AHT!%c&}=n?hb;d0Mv>vIFYb?RgM+nGkM zdHX<#nGf|kfoccfqQtK~zt?+JV^r4E%k@>EGH|L~{uc|JA)kq;{ncJB z;5{ki1imGLVb~|5{`30^`qx9=bq=LKCH;A)8r3ydl%otUA1KltZpLbV@@hHu4^)z{ zjaywip1Rz8e21vDmFWOI5#)BI>= zixi(>6wb8T_PZuSN)u>*mW5c)VsRrJ&Z8ppsPH(x4~mVxR|%t{Qn!6ku1dYpP4#Md z&5uG-w#OV5x;;-vnxbS|%mbVh7noMud0&LRY^Nfln*vvoaSU=x>=n~Hx^%Nn-(}M-zZz905+25f#iI9 zNaR?xe*sWS0RkQa6aWAK2mltOworRkz8n(;001ovlTHOJ11xXIlYIps24DpM00015 C@tr#W delta 1342 zcmV-E1;P5y3!@7dP)h>@6aWAK2mq42 zo}}#<&W1^wNlG#pgQFS{1EQ|m>5!9jLN`cv>PfOpGx_h`laP3`oAe7KcK4or_VwI5Y_wFTf6X0Ql_E=q+k5GnJjrnrd*11U>x-d9+*n-KXfV=TfB3S3NgN?siv(!#`@R~$aMoDO?M|-PsF_o z&jT(B*g(b@OMq|~UCzT090pm!{46|21hj=a)Bb2JZ0Jqy;jTBE^(OZHJG6gI1BqJp zz)B<@#UV#vj7U+DZjd+vj0dy+M?BHHGDoI;kL+P++LOV24nu1OJ(%`pw%K2ddNY_V zW>afEXaUTbCdKgle`MA#YJ=(XSW0=A=!oyJlnL?*JqYLn!;-p;KOid#u8cQduNPv_ zP>NL%AKLB`h_p-}giOyNL3)3`1Zf(-B_z-D)=Fe8sa7N`F%t3~xy*;lp*b3u*InZ> zu-?33(N9ifufvaba(R~zhQeCShe0?V1bJdK_N{MTck)|dUX88E%KGi`V%4|q)K&N^ z{XN;x+bBe9YcaVVS`&MDZO*y|iLi4i@o9<_MD|D$-B7+1X+mn~NpF8V=o)7SN6Eb3 zeEqtW_-&(cbG__a)~$&~B#mOSl5!QYrKd1|OIOM@XGUXeciPLDHGal#ly=%pC8H*G zGbMZGf0$GBy??r}U7~H$`iIA8I_;c*q6`)0wRx&RVW}FKliTH$IYD)zM?T^nM>1>F zYSqFvM+a)H%TkU>MCpHWHkevnLzgnaTCT9>nbUG*L>xy7@8aTTGUjuespS}9M|hMt zp>#+@6C5=Rkhy^bqaQGL&9P}rfnveZR;y(+xDVe!ti{d0p_yMo)4hZ;tJ(#;d`~>~ zKtvXX4Qxu$04U)mvIfGg6@s~X#tp51#3{XO_*{ek2~7_UlWKp!U+>@mt5_{Cwws+c zpb@SB9Ent_4RQ~$-7CAkVz_{i>yxGc(Hj54fwMyz2YvM%kGcLGVqbop$CIWtj{|Q< z`6wId*;GtB-;jhuqh0tV_L0MFgFfpK_21y~$ZF?v3%_&fWBj|BMz2NtK#f@pb(uiD z18`B|*OA|AnTvl=Qct^1ubl;mz$68 z5WN}ou;T9b}(pLlwHN_3C&&X&LZ?rDEYe1 zMiMd>L%V-2L^+Gqjc_`Tn#_a7llVTUHu_N|tUZ;!?W=Ot5gnAO#;Cd!&Z=w0sBWSU ziss!^Wo(=FJ&I33YCL^wJ&jpiU&o;PcU_%&N6I37T)Z{5$-3MsJGB6|lJ<$@a(74- zSdD)HP)h*<9s?8r000O8lLM+yC+CZd=L7%%R|}JR1uO&hg13{Y1t11A1poj50C{?T AdjJ3c