kitprog3.cfg 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #
  2. # Cypress Semiconductor KitProg3
  3. #
  4. # KitProg3 is CMSIS-DAP compliant adapter. However, it supports additional functionality
  5. # such as SPI/I2C bridging, Hardware acquire procedure for PSoC 4/5/6 devices, power control.
  6. # This functionality has been moved to separate driver to avoid pollution of generic CMSIS-DAP
  7. # with probe-specific code.
  8. #
  9. # Interface driver inherits all functionality of CMSIS-DAP including all tcl commands.
  10. # Additional functionality can be accessed via tcl using 'kitprog3' prefix
  11. #
  12. adapter driver kitprog3
  13. proc get_kp3_version {kp3_fw_dir} {
  14. set result ""
  15. set ver_file ""
  16. catch { set ver_file [find "${kp3_fw_dir}/kitprog3.version"] }
  17. if { $ver_file != "" } {
  18. set fd [open $ver_file "r"]
  19. set ver [read -nonewline $fd]
  20. close $fd
  21. regsub -all {\s} $ver "" ver
  22. regsub -all {</?version>} $ver "" ver
  23. set result $ver
  24. }
  25. return $result
  26. }
  27. #
  28. # Get the MTB tool path by the given MTBQuery tool ID.
  29. # This function invokes the mtbquery executable passing the tool ID as an argument,
  30. # then extracts the tool's 'path' entry from its output and returns it.
  31. # See for details PROGTOOLS-3023 - 'OpenOCD : Integration with MTB Query API'
  32. #
  33. proc get_tool_dir {tools_dir tool_id} {
  34. set tool_dir ""
  35. set query_args "--toolinfo $tool_id"
  36. set status [catch {exec $tools_dir/mtbquery/mtbquery {*}$query_args} query_out]
  37. if { $status == 0 } {
  38. regexp {path\s:\s(.*)$} $query_out -> tool_dir
  39. }
  40. return $tool_dir
  41. }
  42. proc get_last_tooldir_ver {tool_list} {
  43. set filt_list ""
  44. set last_version ""
  45. # Check pattern 'tools_x..z.y'
  46. for {set i 0} {$i < [llength $tool_list]} {incr i} {
  47. set match ""
  48. set folder [lindex $tool_list $i]
  49. regexp {tools_[0-9]+\.[0-9]} $folder match
  50. if {$match != ""} {
  51. lappend filt_list $match
  52. }
  53. }
  54. # Get last version
  55. for {set i 0} {$i < [llength $filt_list]} {incr i} {
  56. set folder [lindex $filt_list $i]
  57. set version [string range $folder [string length "tools_"] end]
  58. lset filt_list $i $version
  59. if {$i == 0} {
  60. set last_version $version
  61. } elseif {$version > $last_version} {
  62. set last_version $version
  63. }
  64. }
  65. return "tools_$last_version"
  66. }
  67. set script_dir [file dirname [file join [pwd] [info script]]]
  68. set script_dir_list [file split $script_dir]
  69. if {[llength $script_dir_list] > 5} {
  70. if { [lsearch -exact $script_dir_list "packs"] != -1 &&
  71. [lsearch -exact $script_dir_list "ModusToolbox"] != -1} {
  72. # Early Access Packs usage case
  73. while {[llength $script_dir_list] > 0} {
  74. set dir [lindex $script_dir_list end]
  75. if {$dir != "ModusToolbox"} {
  76. # Go backward until directory "ModusToolbox" reached
  77. # to ensure that algorithm passes by packs "tools" folder
  78. # that does not contain mtb-query
  79. set script_dir_list [lreplace $script_dir_list end end]
  80. } else {
  81. break
  82. }
  83. }
  84. set mtb_path [file join {*}[lrange $script_dir_list 0 end]]
  85. set path_list [file split $mtb_path]
  86. if { [catch {glob -directory $mtb_path tools_*} tools_list]} {
  87. set tools_dir ""
  88. } elseif {[llength $tools_list] == 1} {
  89. set tools_dir [lindex $tools_list 0]
  90. } else {
  91. set last_tooldir_ver [get_last_tooldir_ver [split $tools_list " "]]
  92. # Append ModusToolbox path with last tools directory
  93. lappend path_list $last_tooldir_ver
  94. set tools_dir [file join {*}[lrange $path_list 0 end]]
  95. }
  96. } else {
  97. # Modus Toolbox
  98. for {set dir_depth 1} {$dir_depth <= 5} {incr dir_depth} {
  99. set tools_dir [file join {*}[lrange [file split $script_dir] 0 end-$dir_depth]]
  100. set check_tool [lindex [file split $tools_dir] end]
  101. if { [string last "tools" $check_tool] != -1 } {
  102. break
  103. }
  104. }
  105. }
  106. # Get the latest fw-loader and KP firmware assets in the MTB 3.x environment (tools_3.x/ folder)
  107. set fw_loader_dir [get_tool_dir $tools_dir "1901ec91-2683-4ab4-8034-211b772c9a2b"]
  108. set kp3_fw_dir [get_tool_dir $tools_dir "2bd09d79-2620-45fd-9452-77d1dbfe41d5"]
  109. # If not found using mtbquery, try to find the assets in known folders at the same level as openocd
  110. if { $fw_loader_dir == ""} {
  111. set temp_path [file join $tools_dir "fw-loader"]
  112. if {[file exists $temp_path]} {
  113. set fw_loader_dir $temp_path
  114. }
  115. }
  116. if { $kp3_fw_dir == ""} {
  117. set temp_path [file join $tools_dir "kp-firmware"]
  118. if {[file exists $temp_path]} {
  119. set kp3_fw_dir $temp_path
  120. }
  121. }
  122. set kp3_fw_ver [get_kp3_version $kp3_fw_dir]
  123. if { $kp3_fw_dir != "" && $kp3_fw_ver != "" } {
  124. kitprog3 set_latest_version $kp3_fw_dir $kp3_fw_ver
  125. }
  126. }