Jump to content
    

Gowin programmer_cli вывод - как обработать?

Батник в виде

@echo off
%GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables
echo Done    
pause
exit

выводит в консоль

 Cable found:  Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl)
 Cost 0.05 second(s)

Done

как выцарапать из его вывода выводимые им данные, чтобы обработать их в том же батнике ?

Share this post


Link to post
Share on other sites

Например, с помощью средств PowerShell. bat-файлы это прошлый век и пора использовать более современные средства.

Share this post


Link to post
Share on other sites

10 минут назад, Zversky сказал:

Да, спасибо. Настала пора переходить.

Если у вас где-то используется Python или TCL, то на них можно сделать более переносимый вариант, т.к. лично мне в PowerShell не нравится его плохая переносимость. В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом.

Share this post


Link to post
Share on other sites

2 минуты назад, makc сказал:

В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом.

Python знаю, но здесь, по кр. мере, не использую, TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить?

Share this post


Link to post
Share on other sites

9 минут назад, Zversky сказал:

TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить?

Ставите интерпретатор из https://www.tcl.tk/software/tcltk/bindist.html и далее пишете скрипт, который запускает что нужно и парсит выхлоп. Для TCL есть прекрасная библиотека expect, которая позволяет упростить парсинг с помощью простого задания сигнатур и реакций на них.

Share this post


Link to post
Share on other sites

8 часов назад, Zversky сказал:

как выцарапать из его вывода выводимые им данные, чтобы обработать их в том же батнике?

Что вы хотите получить на выходе?
Батник:
 

Спойлер
@echo off
setlocal
for /f "tokens=6,7,8,9,10,11,12 delims=() " %%a in (qq.txt) do (
	set a1=%%a
	set a2=%%b
	set a3=%%c
	set a4=%%d
	set a5=%%e
	set a6=%%f
)
echo %a1% 
echo %a2%
echo %a3%
echo %a4%
echo %a5%
echo %a6%

 

Выведет:
 

Спойлер
FT2CH
/0/324/GW-7qrVl
USB
location:324
SN:
GW-7qrVl

 

 

Share this post


Link to post
Share on other sites

11 часов назад, Zversky сказал:

Что это?

Результат перенаправления вывода вашей программы в файл.

%GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables>qq.txt

Можно попробовать изменить мой батник (строку с for) для обработки результата выполнения команды, а не файла, как у меня написано выше.
Тип так:

@echo off
setlocal
for /f "usebackq tokens=6,7,8,9,10,11,12 delims=() " %%a in (`%GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables`) do (
	set a1=%%a
	set a2=%%b
	set a3=%%c
	set a4=%%d
	set a5=%%e
	set a6=%%f
)
echo %a1% 
echo %a2%
echo %a3%
echo %a4%
echo %a5%
echo %a6%

но это нужно проверять...
Обратите внимание на вид кавычек обрамляющих команду.

Описание команды for можно посмотреть набрав в командной строке: for /?

Share this post


Link to post
Share on other sites

55 минут назад, Zig сказал:

Описание команды for можно посмотреть набрав в командной строке: for /?

Спасибо огромное: я обязательно попробую, уже чувствуя на себе неодобрительные выводы господина модератора и моих коллег, которые давно направляли меня в будущее. Но и в будущее я уже смотрю довольно уверенно, о чём непременно доложусь.

Share this post


Link to post
Share on other sites

Ну, из серии "Гора родила мышь или ногами не пинать"
 

Спойлер
@echo off

: Header

    set HeaderString="File name   : GowinSearchCable.bat"
    set HeaderString=%HeaderString%;"Description : Searches Gowing programmer" 
    set HeaderString=%HeaderString%;"              by Gowin's programmer_cli"
    set HeaderString=%HeaderString%;""
    set HeaderString=%HeaderString%;"Format      : Plain text Windows (CR LF)"
    set HeaderString=%HeaderString%;"Encoding    : UTF-8"      
    set HeaderString=%HeaderString%;"Version     : 01"
    set HeaderString=%HeaderString%;"Date        : 25.11.2022"
    set HeaderString=%HeaderString%;""
    set HeaderString=%HeaderString%;"Author      : Anatoly Sharapov"
    set HeaderString=%HeaderString%;"Email       : [email protected]"
    set HeaderString=%HeaderString%;"Phone       : +7 903 231-11-26" 

: Start

    set True=1
    set False=0
    
    set Ok=0
    set Failed=1 
    
    set ThisGowinSearchCableBatchIsCalled=%False%
    if not "%1" == "" set ThisGowinSearchCableBatchIsCalled=%True%   
    if %ThisGowinSearchCableBatchIsCalled% == %True% goto Process

    color 0B
    mode con cols=140 lines=50

    set ThisGowinSearchCableBatchDir=%~dp0
    set "LogDirRelative=%ThisGowinSearchCableBatchDir%..\Log" 
    for %%i in ("%LogDirRelative%") do set "LogDir=%%~fi"
    if not exist "%LogDir%" md "%LogDir%"
    set "Log=%LogDir%\%~n0.log"
    if exist "%Log%" del /q "%Log%"
    
: PrintHeader

    for %%a in (%HeaderString%) do call :echo_out %%a
    call :echo_out "-------------------------------------" 
    call :echo_out "%~n0 started at %time% %date%"

: Process

    set "GowinProgGetPathBat=%ThisGowinSearchCableBatchDir%GowinProgGetPath.bat"
    if not exist "%GowinProgGetPathBat%" (
        call :Echo_out "Error: file %GowinProgGetPathBat% not exists"
        set ERROR_CODE=%Failed%
        goto Done        
    )     
    call :Echo_out "GowinProgGetPathBat = %GowinProgGetPathBat%"
    
    call "%GowinProgGetPathBat%" GowinProgPath
    
    if %errorlevel% neq %Ok% (
        call :Echo_out "%GowinProgGetPathBat% failed and returned %errorlevel%"
        set ERROR_CODE=%Failed%
        goto Done
    )
    call :Echo_out "%GowinProgGetPathBat% done"      
    
    if "%GowinProgPath%" == "" goto GowinProgGetPathBatError
    goto Process

: GowinProgGetPathBatError

    call :Echo_out "Error: %GowinProgGetPathBat% failed"
    set ERROR_CODE=%Failed%
    goto Done
    
: Process

    call :Echo_out "GowinProgPath = %GowinProgPath%"

    set "GowinProgCLIExe=%GowinProgPath%\programmer_cli.exe"
    if not exist "%GowinProgCLIExe%" (
        call :Echo_out "Error: file %GowinProgCLIExe% not exists"
        set ERROR_CODE=%Failed%
        goto Done        
    )
    call :Echo_out "GowinProgCLIExe = %GowinProgCLIExe%"
   
    :: usage: programmer_cli.exe [-h] [--device <GWxx-x>] [--operation_index <int>]
    ::                       [--chain_index <int>] [--chain_size <int>]
    ::                       [--chain_ir <string>] [--frequency <string>]
    ::                       [--fsFile bitstream.fs] [--acFile ac.bin]
    ::                       [--csrFile csr.bin] [--mcuFile mcu.bin]
    ::                       [--fiFile userflash.fi] [--spiaddr 0x000000]
    ::                       [--output output.txt]
    ::                       [--key 00000000-00000000-00000000-00000000]
    ::                       [--keyread] [--keywrite] [--keylock]
    ::                       [--mfgiref data[9:0]] [--svfcreate] [--vme]
    ::                       [--svf_frequency <float>] [--channel <int>]
    ::                       [--location <int>] [--uid UID] [--lpt_address <int>]
    ::                       [--cable "Gowin USB CableFT2CH"]
    ::                       [--cable-index <int>] [--scan-cables] [--scan]
    ::                       [--filestransform <int>] [--files <string>]
    ::                       [--read-otp-addr] [--save-otp-addr]
    ::                       [--i2c-addr 1010000] 

    :: If there's no Gowin cable programmer_cli.exe --scan-cables returns
    :: Cost 0.0 second(s)
    
    :: If case there is Gowin cable programmer_cli.exe --scan-cables returns
    :: Cable found:  Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl)
    :: Cost 0.06 second(s)
    
    set CableFlag=""
    
    for /f "usebackq tokens=5 delims= " %%a in (`"%GowinProgCLIExe%" --scan-cables`) do (
        set CableFlag=%%a
    )

    if %CableFlag% neq "" (
        call :Echo_out "Gowin cable is found"
        goto QueryCable
    )
    
    call :Echo_out "No Gowin cable is found"
    set ERROR_CODE=%Failed%
    goto Finish

: QueryCable


    :: Cable found:  Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl)
    for /f "usebackq tokens=6-9 delims=:/() " %%a in (`"%GowinProgCLIExe%" --scan-cables`) do (
        set Type=%%a
        set Channel=%%b
        set USBLocation=%%c
        set SerialNumber=%%d
    )
    
    set ERROR_CODE=%Ok%

    
: Done

    if %ThisGowinSearchCableBatchIsCalled% == %False% goto Finish
    
    set "%1=%Type%"
    set "%2=%Channel%"
    set "%3=%USBLocation%"
    set "%4=%SerialNumber%"    
    exit /b %ERROR_CODE%

: Finish

    if %CableFlag% neq "" (
        call :Echo_out "Gowin USB Cable parameters :"    
        call :Echo_out "Type = %Type%"
        call :Echo_out "Channel = %Channel%"
        call :Echo_out "USBLocation = %USBLocation%"
        call :Echo_out "SerialNumber = %SerialNumber%"
    )
    
    call :Echo_out "%~nx0 done"    
    pause
    exit  
    
: Echo_out

    echo %1
    echo %1 >> "%Log%"
    exit /b 

 

 

Share this post


Link to post
Share on other sites

Круто.

Добавьте в начале батника setlocal, а в конце endlocal. Без этого у вас в системе

будет установлено много лишних переменных окружения.

И ещё. Чтобы дважды не вызывать GowinProgCLIExe можно попробовать вернуть результат её выполнения в переменную и проверять её.

 

И ещё можно посмотреть результат вызова GowinProgCLIExe в переменной %errorlevel%

Share this post


Link to post
Share on other sites

5 часов назад, Zig сказал:

Добавьте в начале батника setlocal, а в конце endlocal.

А как оперировать с этими set- и endlocal, если один батник вызывает другой?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...