text: #
  # Copyright (c) 2018 Bobby Noelte
  #
  # SPDX-License-Identifier: Apache-2.0
  #
  
  # NOTE: This file is part of the old device tree scripts, which will be removed
  # later. They are kept to generate some legacy #defines via the
  # --deprecated-only flag.
  #
  # The new scripts are gen_defines.py, edtlib.py, and dtlib.py.
  
  from extract.globals import *
  from extract.directive import DTDirective
  
  ##
  # @brief Manage directives in a default way.
  #
  class DTDefault(DTDirective):
  
      @staticmethod
      def _extract_enum(node_path, prop, prop_values, label):
          cell_yaml = get_binding(node_path)['properties'][prop]
          if 'enum' in cell_yaml:
              if prop_values in cell_yaml['enum']:
                  if isinstance(cell_yaml['enum'], list):
                      value = cell_yaml['enum'].index(prop_values)
                  if isinstance(cell_yaml['enum'], dict):
                      value = cell_yaml['enum'][prop_values]
                  label = label + "_ENUM"
                  return {label:value}
              else:
                  print("ERROR")
          return {}
  
  
      ##
      # @brief Extract directives in a default way
      #
      # @param node_path Path to node owning the clockxxx definition.
      # @param prop property name
      # @param prop type (string, boolean, etc)
      # @param def_label Define label string of node owning the directive.
      #
      def extract(self, node_path, prop, prop_type, def_label):
          prop_def = {}
          prop_alias = {}
  
          if prop_type == 'boolean':
              if prop in reduced[node_path]['props']:
                  prop_values = 1
              else:
                  prop_values = 0
          else:
              prop_values = reduced[node_path]['props'][prop]
  
          if prop_type in {"string-array", "array", "uint8-array"}:
              if not isinstance(prop_values, list):
                  prop_values = [prop_values]
  
          if prop_type == "uint8-array":
              prop_name = str_to_label(prop)
              label = def_label + '_' + prop_name
              prop_value = ''.join(['{ ',
                                    ', '.join(["0x%02x" % b for b in prop_values]),
                                    ' }'])
              prop_def[label] = prop_value
              add_compat_alias(node_path, prop_name, label, prop_alias)
          elif isinstance(prop_values, list):
              for i, prop_value in enumerate(prop_values):
                  prop_name = str_to_label(prop)
                  label = def_label + '_' + prop_name
                  if isinstance(prop_value, str):
                      prop_value = "\"" + prop_value + "\""
                  prop_def[label + '_' + str(i)] = prop_value
                  add_compat_alias(node_path,
                          prop_name + '_' + str(i),
                          label + '_' + str(i),
                          prop_alias)
          else:
              prop_name = str_to_label(prop)
              label = def_label + '_' + prop_name
  
              if prop_values == 'parent-label':
                  prop_values = find_parent_prop(node_path, 'label')
  
              prop_def = self._extract_enum(node_path, prop, prop_values, label)
              if prop_def:
                  add_compat_alias(node_path, prop_name + "_ENUM" , label + "_ENUM", prop_alias)
              if isinstance(prop_values, str):
                  prop_values = "\"" + prop_values + "\""
              prop_def[label] = prop_values
              add_compat_alias(node_path, prop_name, label, prop_alias)
  
              # generate defs for node aliases
              if node_path in aliases:
                  add_prop_aliases(
                      node_path,
                      lambda alias: str_to_label(alias) + '_' + prop_name,
                      label,
                      prop_alias)
  
          insert_defs(node_path, prop_def, prop_alias)
  
  ##
  # @brief Management information for directives handled by default.
  default = DTDefault()
  