Files
2025-10-14 09:52:32 +09:00

141 lines
3.0 KiB
Plaintext

; 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"
)