diff --git a/vimfiles.stefan/plugin/toptica.vim b/vimfiles.stefan/plugin/toptica.vim index b06edb2..5deba08 100644 --- a/vimfiles.stefan/plugin/toptica.vim +++ b/vimfiles.stefan/plugin/toptica.vim @@ -98,15 +98,12 @@ function! s:ProjectSet(project_type, project_base_dir) execute 'set path-=./**' execute 'set path+=' . s:ProjectSrcDir.'/**' - let s:invoke_options = '' " used for --project=... - if (count(['pfd', 'tiny'], g:project_type) > 0) let g:ProjectBuildDir = s:ProjectSrcDir.'/.build/target/firmware/Debug' let g:DebugRemote = v:true let g:termdebugger = 'arm-none-eabi-gdb' let s:gdb_connect_script = g:ProjectBuildDir.'/gdbinit' elseif (count(['dlcpro', 'dlcpro-new'], g:project_type) > 0) - let s:invoke_options = ' --project='.g:project_type set wildignore-=**/firmware/src/device-control/** set wildignore+=**/shg-firmware/** set titlestring=%<%t\ (%{expand('%:p:h')})%=project:\ %{g:project_type}\ \ \ \ compiler:\ %{g:Compiler_version()} @@ -118,6 +115,10 @@ function! s:ProjectSet(project_type, project_base_dir) else let s:firware_file_name = 'DLCpro-archive.fw' endif + let s:firmware_file = g:ProjectBuildDir.'/artifacts/'.s:firware_file_name + let g:DeviceType = 'TApro' + let g:PowerswitchIP = 'elab-stefan' + let g:Powerplug = '1' let g:termdebugger = 'arm-none-eabi-gdb' let s:gdb_connect_script = g:ProjectBuildDir.'/gdbinit' command! DlcProGuiStart execute("!~/dlcpro/pc-gui/start-gui&") @@ -170,6 +171,7 @@ function! s:ProjectSet(project_type, project_base_dir) let g:termdebugger = 'arm-none-eabi-gdb' let s:gdb_connect_script = g:ProjectBuildDir.'/gdbinit' let s:firware_file_name = 'TopMode-CHARM-Control-1.5.4-dev.fw' + let s:firmware_file = g:ProjectBuildDir.'/artifacts/'.s:firware_file_name command! TopmodeGuiStart execute("!~/topmode/pc-gui/start-gui&") elseif (g:project_type == 'topmode-gui') let g:DebugRemote = v:false @@ -214,6 +216,8 @@ function! s:ProjectSet(project_type, project_base_dir) echo "no project" endif + let g:BuildType = 'Default' + " Settings for invoke development let s:invoke = 'invoke' let s:tasks_file_dev = '/home/stefan/tools/invoke/'.g:project_type.'/tasks.py' @@ -251,7 +255,7 @@ function! s:ProjectSet(project_type, project_base_dir) function! s:DeviceFirmwareUpdate() call s:Make('kill', 'bang') call s:Make('flash', 'bang') - call s:Make('start', 'bang') + call s:Make('run', 'bang') endfunction command! DeviceDebug call s:DeviceDebug(0) @@ -267,32 +271,45 @@ endfunction " Make " ==== +" Add default value for all given options, if not already set +function! s:SetDefaults(commandline, option_defaults) + + let g:option_defaults = [ + \ {'name': '--project', 'value': g:project_type}, + \ {'name': '--device-ip', 'value': g:DeviceIP}, + \ {'name': '--build-type', 'value': g:BuildType}, + \ {'name': '--firmware-file', 'value': s:firmware_file}, + \ {'name': '--version-file', 'value': g:ProjectBuildDir.'/artifacts/VERSION'}, + \ {'name': '--laser1-type', 'value': g:DeviceType}, + \ {'name': '--powerswitch-ip', 'value': g:PowerswitchIP}, + \ {'name': '--powerplug', 'value': g:Powerplug}, + \ {'name': '--firmware-file', 'value': s:firmware_file}, + \ ] + + let commandline = a:commandline + let task = split(commandline)[0] + let options_allowed = system(s:invoke.' --complete -- '.task.' -') + for option_default in a:option_defaults + let option = option_default['name'] + let value = option_default['value'] + if options_allowed =~ option && commandline !~ option + let commandline .= ' '.option.'='.value + endif + endfor + return commandline +endfunction + function! s:Make(args, async_mode) - call asyncrun#quickfix_toggle(10, 1) - let l:makeprg = s:invoke.' -e' - let l:args = a:args - if l:args == '' - let l:args = 'build' " needed for --project - endif + " Add defaults for options + let l:options = s:SetDefaults(a:args, g:option_defaults) - let task = split(l:args)[0] - let options = system(s:invoke.' --complete -- '.task.' -') - - " Add --project if necessary - if options =~ '--project' && a:args !~ '--project' - let l:args .= ' --project='.g:project_type + if (a:async_mode == 'background') + call system(s:invoke.' -e '.l:options.'&') + else + call asyncrun#quickfix_toggle(10, 1) + let &makeprg = s:invoke.' -e' + execute 'AsyncRun -mode='.a:async_mode.' -save=2 -program=make @ '.l:options endif - " Add --device-ip if necessary - if options =~ '--device-ip' && l:args !~ '--device-ip' - let l:args .= ' --device-ip='.g:DeviceIP - endif - " Add --build-type=Debug - if options =~ '--build-type' && l:args !~ '--build-type' - let l:args .= ' --build-type=Debug' - endif - - let &makeprg = l:makeprg - execute 'AsyncRun -mode='.a:async_mode.' -save=2 -program=make @ '.l:args endfunction " Tab-completion is done with plugin vim-bash-completion @@ -308,16 +325,6 @@ function! GetAllMakeCompletions(ArgLead, CmdLine, CursorPos) return bash#complete(l:command) endfunction -function! s:Call_and_log(cmd) - echom a:cmd - let r = system(a:cmd) - let e = v:shell_error - if (e != 0) - echom 'return value: '.e.', output: "'.r.'"' - endif - return v:shell_error -endfunction - function! g:JLinkSWOviewer() let cmd = '/JLinkSWOViewerCLExe -device STM32H743ZI -itmmask 0xffffffff -swofreq 450000' call asyncrun#quickfix_toggle(10, 1) @@ -336,29 +343,15 @@ function! s:StartDebugger(elffile, attach) endif endfunction -let g:DlcproBasePath = "/jenkins/workspace/pro--firmware_release_1.9.0-DCESJ5C5R577IG5QFEWTML22UFDDZCJDGFLMDA4DCD3V2ZAGVEJA/source/" function! s:DeviceDebug(attach) if g:DebugRemote - let kill_cmd = s:invoke.' -e kill' - if exists('g:DeviceIP') - let kill_cmd .= ' --device-ip='.g:DeviceIP - endif - call system(kill_cmd) + call s:Make('kill', 'bang') + " Close quickfix window + execute 'cclose' autocmd! User TermdebugStartPre autocmd! User TermdebugStartPost autocmd! User TermdebugStopPost - let gdb_server_cmd = s:invoke.' -e gdb-server' - if exists('g:DeviceIP') - let gdb_server_cmd .= ' --device-ip='.g:DeviceIP - endif - let gdb_server_cmd .= s:invoke_options - if v:true - call system(gdb_server_cmd.'&') - else - call asyncrun#quickfix_toggle(3, 1) - execute 'AsyncRun '.gdb_server_cmd - autocmd User TermdebugStopPost execute 'AsyncStop' - endif + call s:Make('gdb-server', 'background') sleep 2 if exists('s:gdb_connect_script') autocmd User TermdebugStartPost call term_sendkeys('',"source ".s:gdb_connect_script."\n") @@ -375,89 +368,6 @@ function! s:DeviceDebug(attach) endif endfunction -" ================ -" Regression Tests -" ================ - -command -nargs=1 -complete=file DlcproRegtest call s:DlcproRegtest(g:DeviceIP, 'DL-CBCpro', g:DlcproRegtest_marks, '') -command -nargs=? -complete=file DlcproRegtestDL call s:DlcproRegtest('dl', 'DLpro', '', '') -command -nargs=? -complete=file DlcproRegtestCTL call s:DlcproRegtest('ctl', 'CTL', '', '') -command -nargs=? -complete=file DlcproRegtestSHG call s:DlcproRegtest('shg', 'TA-SHGpro', '', '') -command -nargs=? -complete=file DlcproRegtestDual call s:DlcproRegtest('dual-dl', '', '', '') -command -nargs=? -complete=file DlcproRegtestQuad call s:DlcproRegtest('quad-dl', 'DLpro', '', '') - -let g:DlcproRegtest_fast_restart = 1 -let g:DlcproRegtest_smoke = 1 -let g:DlcproRegtest_fw_update = 0 -let g:DlcproRegtest_marks = 'usb, usbstick, si, si1, servo_control, eom, cavity, cell_spectroscopy, falc, pfd, smc' - -let g:TopmodeRegtest_smoke = 0 - -function! s:DlcproRegtest(device_ip, laser1_type, marks, tests) - execute "wa" - - let regtest_cmd = 'time' - \.' '.s:invoke - \.' -e' - \.' regtest' - \.' --device-ip='.a:device_ip - \.' --laser1-type='.a:laser1_type - - let firmware_file = g:ProjectBuildDir.'/artifacts/'.s:firware_file_name - if filereadable(firmware_file) - let regtest_cmd .= ' --firmware-file='.firmware_file - \.' --version-file='.g:ProjectBuildDir.'/artifacts/VERSION' - endif - - let regtest_cmd .= ' --marks="'.a:marks.'"' - if g:DlcproRegtest_fast_restart == 1 - let regtest_cmd .= ' --fast-restart' - endif - if g:DlcproRegtest_fw_update == 1 - let regtest_cmd .= ' --do-fw-update' - endif - if g:DlcproRegtest_smoke == 1 - let regtest_cmd .= ' --smoke' - endif - if (a:tests != "") - let regtest_cmd .= ' --tests="'.a:tests.'"' - endif - - echo regtest_cmd - execute "terminal ++shell " . regtest_cmd -endfunction - -command -nargs=? -complete=file TopmodeRegtest call s:TopmodeRegtest('', '') -function! s:TopmodeRegtest(marks, tests) - execute "wa" - - let regtest_cmd = 'time' - \.' '.s:invoke - \.' -e' - \.' regtest' - \.' --device-ip='.g:DeviceIP - " \.' --do-fw-update' - " \.' --smoke' - - let firmware_file = g:ProjectBuildDir.'/artifacts/'.s:firware_file_name - if filereadable(firmware_file) - let regtest_cmd .= ' --firmware-file='.firmware_file - endif - if g:DlcproRegtest_fw_update == 1 - let regtest_cmd .= ' --do-fw-update' - endif - if g:TopmodeRegtest_smoke == 1 - let regtest_cmd .= ' --smoke' - endif - let regtest_cmd .= ' --marks="'.a:marks.'"' - if (a:tests != "") - let regtest_cmd .= ' --tests="'.a:tests.'"' - endif - - echo regtest_cmd - execute "terminal ++shell " . regtest_cmd -endfunction - " ------ " Pandoc " ------