141 lines
3.0 KiB
Plaintext
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"
|
|
)
|
|
|