text: # Copyright 2014-present PlatformIO <contact@platformio.org>
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  
  from platformio.managers.platform import PlatformBase
  
  
  class K210rtthreadPlatform(PlatformBase):
  
      def get_boards(self, id_=None):
          result = PlatformBase.get_boards(self, id_)
          print(111,result)
          if not result:
              return result
          if id_:
              return self._add_dynamic_options(result)
          else:
              for key, value in result.items():
                  result[key] = self._add_dynamic_options(result[key])
          return result
  
      def _add_dynamic_options(self, board):
          # upload protocols
          if not board.get("upload.protocols", []):
              board.manifest['upload']['protocols'] = ["kflash"]
          if not board.get("upload.protocol", ""):
              board.manifest['upload']['protocol'] = "kflash"
  
          # debug tools
          debug = board.manifest.get("debug", {})
          non_debug_protocols = ["kflash"]
          supported_debug_tools = [
              "jlink",
              "minimodule",
              "olimex-arm-usb-tiny-h",
              "olimex-arm-usb-ocd-h",
              "olimex-arm-usb-ocd",
              "olimex-jtag-tiny",
              "iot-bus-jtag",
              "tumpa",
              "sipeed-rv-debugger"
          ]
  
          upload_protocol = board.manifest.get("upload", {}).get("protocol")
          upload_protocols = board.manifest.get("upload", {}).get(
              "protocols", [])
          upload_protocols.extend(supported_debug_tools)
          if upload_protocol and upload_protocol not in upload_protocols:
              upload_protocols.append(upload_protocol)
          board.manifest['upload']['protocols'] = upload_protocols
  
          if "tools" not in debug:
              debug['tools'] = {}
  
          # Only FTDI based debug probes
          for link in upload_protocols:
              if link in non_debug_protocols or link in debug['tools']:
                  continue
  
              if link == "jlink":
                  openocd_interface = link
              else:
                  openocd_interface = "ftdi/" + link
  
              server_args = [
                  "-s", "$PACKAGE_DIR/share/openocd/scripts",
                  "-f", "interface/%s.cfg" % openocd_interface,
                  "-c", "adapter_khz 1000",
                  "-f", "target/kendryte210.cfg",
                  "-m", "0"
              ]
  
              debug['tools'][link] = {
                  "server": {
                      "package": "tool-openocd-kendryte",
                      "executable": "bin/openocd",
                      "arguments": server_args
                  }
              }
  
          board.manifest['debug'] = debug
          return board
  