; USB-Serial Bridge auto find script. ; try to detect the COM-port number of the USB-Serial bridge automatically ; and open an term window. ; ; AME 12.11.2013 ; HLG 2014-11-10 - some improvements PRIVATE &port ENTRY &port IF "&port"=="" ( GOSUB FindUsbSerial "CP210x%UART%COM" ;GOSUB FindUsbSerial "USB%serial%COM" ;GOSUB FindUsbSerial "USB Serial Port" RETURNVALUES &port ) IF "&port"=="" &port="COM3" TERM.RESet TERM.METHOD COM &port 115200. 8 NONE 1STOP NONE TERM.MODE VT100 TERM.SCROLL ON TERM.SIZE 80. 1000. SCREEN.ALWAYS TERM.view ENDDO FindUsbSerial: //(string name) ( PRIVATE &sName &sPort PARAMETERS &sName IF OS.VERSION(0)<0x10 // MS Windows ? ( GOSUB FindUsbSerialWin "&sName" RETURNVALUES &sPort ) RETURN "&sPort" ) FindUsbSerialWin: //(string name) ( PRIVATE &sName &tmpfile &cmd &cnt &sPort PARAMETERS &sName &tmpfile=OS.TMPFILE() &cmd="wmic path Win32_PnPEntity Where ""Caption LIKE '%&sName%'"" Get Caption > ""&tmpfile"" " OS.Command &cmd &cnt=0. RePeaT ( WAIT 0.7s &cnt=&cnt+1. ) WHILE !OS.FILE("&tmpfile")&&(&cnt<4.) IF !OS.FILE("&tmpfile") RETURN "" Data.LOAD.Binary "&tmpfile" AVM:0x0 /NosYmbol Var.NEWLOCAL char[16][80] \pConverters PRIVATE &nPos &nValue &nLine &nPos=0. &nLine=0. RePeaT OS.FILE.SIZE("&tmpfile") ( &nValue=Data.Byte(AVM:&nPos) IF (&nValue==(0x20--0x7e)) ( ; ascii char PRIVATE &pBuffer &pBuffer=Var.STRing(\pConverters[&nLine])+CONVert.CHAR(&nValue) Var.ASSIGN \pConverters[&nLine]="&pBuffer" ) ELSE IF (&nValue==(0xa||0xd)) ( Var.IF \pConverters[&nLine]!="" &nLine=&nLine+1. ) &nPos=&nPos+1. ) &nPos=0. RePeaT &nLine ( PRIVATE &pBuffer &pBuffer=STRing.TRIM(Var.STRing(\pConverters[&nPos])) SPRINTF &pBuffer "#%02u: %s" &nPos "&pBuffer" Var.ASSIGN \pConverters[&nPos]="&pBuffer" &nPos=&nPos+1. ) ( PRIVATE &sDialogCombobox &nComCount &nStart &nEnd &nPos=0. &nComCount=0. RePeaT &nLine ( IF STRing.SCAN(Var.STRing(\pConverters[&nPos]),"COM",0.)>=0. ( IF &nComCount!=0 &sDialogCombobox="&(sDialogCombobox)," &sDialogCombobox="&sDialogCombobox"+Var.STRing(\pConverters[&nPos]) &nComCount=&nComCount+1. ) &nPos=&nPos+1. ) IF &nComCount==0. RETURN "" IF &nComCount>1. ( DIALOG (&+ POS 0. 0. 30. 1. combo: COMBOBOX "&sDialogCombobox" "" BUTTON "OK" "CONT" BUTTON "CANCEL" "END" ) STOP &sDialogCombobox=DIALOG.STRing(combo) DIALOG.END ) &nStart=STRing.SCAN("&sDialogCombobox","COM",0) &nEnd=STRing.SCAN("&sDialogCombobox",")",&nStart) IF (&nStart!=-1)&&(&nEnd!=-1) ( IF (&nEnd-&nStart)<5. &sPort=STRing.MID("&sDialogCombobox",&nStart,&nEnd-&nStart) ELSE &sPort="\\.\"+STRing.MID("&sDialogCombobox",&nStart,&nEnd-&nStart) PRINT "Found serial port &sPort" ) ) RETURN "&sPort" )