#Example set speed events for phosphor-fan-control

#groups:
#    - name: [A unique name for this group]
#      description: [A user description of what makes up the group]
#      type: [The '/xyz/openbmc_project' path extension]
#      members:
#          [List of object paths under the path extension]
#
#matches:
#    - name: [The name associated with a supported match string function]
#      description: [A user description of what this match string represents]
#      parameters:
#          [Ordered list of required parameters for the match string function]
#
#signals:
#    - name: [The name associated with a supported signal function]
#      description: [A user description of what this signal does]
#      parameters:
#          [Ordered list of required parameters for the signal function]
#      match: [Match string function to use in subscribing to the signal]
#
#methods:
#    - name: [The name associated with a supported method function]
#      description: [A user description of what this method does]
#      parameters:
#          [Ordered list of required parameteres for the method function]
#
#handlers:
#    - name: [The name associated with a supported handler function]
#      description: [A user descriptiion of what this handler does]
#      parameters:
#          [Ordered list of required parameters for the handler function]
#
#preconditions: [Preconditions are intended to load or unload events based
#                on the precondition's resulting state]
#    - name: [Name associated with an available precondition function]
#      description: [A user description of the precondition's use]
#      parameters:
#          [Ordered list of required parameters for the precondition function]
#
#actions:
#    - name: [Name associated with an available action function]
#      description: [A user description of what this action does]
#      parameters:
#          [Ordered list of required parameters for the associated function]
#
#events:
#    - name: [A unique name for this event]
#      precondition{OPTIONAL}:
#          name: [Name of the precondition function]
#          groups:
#              - name: [A group name from the list of groups]
#                zone_conditions{OPTIONAL}:
#                    - name: [The name of the zone condition]
#                      zones:
#                          - [Zone number to include this set speed event with]
#                interface: [Dbus interface on the group members' object path]
#                property:
#                    name: [Name of the property on the interface]
#                    type: [The property's data type]
#          triggers:
#              [At least 1 trigger is required per event from those available:
#               "init"   - Executes a method(with associated handler) at startup
#                          and then process the event actions
#               "signal" - Subscribes to a signal and executes the associated
#                          handler when the signal is received and then process
#                          the event actions
#               "timer"  - Configures a type of timer over an interval that
#                          processess the event actions each time the timer
#                          expires]
#              - name: [Name of trigger to execute the event]
#                [Provide the required trigger parameter(s)]
#          events: [Define the event that is to be loaded when the precondition
#                   succeeds]
#      groups:
#          - name: [A group name from the list of groups]
#            zone_conditions{OPTIONAL}:
#                - name: [The name of the zone condition]
#                  zones:
#                      - [Zone number to include this set speed event with]
#            interface: [The Dbus interface on the group members' object path]
#            property:
#                name: [Name of the property on the interface]
#                type: [The property's data type]
#      triggers:
#          [At least 1 trigger is required per event from those available:
#           "init"   - Executes a method(with associated handler) at startup
#                      and then process the event actions
#           "signal" - Subscribes to a signal and executes the associated
#                      handler when the signal is received and then process
#                      the event actions
#           "timer"  - Configures a type of timer over an interval that
#                      processess the event actions each time the timer expires]
#          - name: [Name of trigger to execute the event]
#            [Provide the required trigger parameter(s)]
#      actions:
#          - name: [Name of an action from the list of actions]
#            [Ordered list of each required action parameter with a defined
#             type and value for this event. The 'property' parameter utilizes
#             the same type defined under the 'property' attribute.]

#Example:
#groups:
#    - name: zone0_fans
#      description: Group of fan inventory objects for zone 0
#      type: /xyz/openbmc_project/inventory
#      members:
#          - /system/chassis/motherboard/fan0
#          - /system/chassis/motherboard/fan1
#          - /system/chassis/motherboard/fan2
#          - /system/chassis/motherboard/fan3
#    - name: zone0_ambient
#      description: Group of ambient temperature sensors for zone 0
#      type: /xyz/openbmc_project/sensors
#      members:
#          - /temperature/ambient
#    - name: occ0_object
#      description: Dbus object containing OCC0 properties
#      type: /org/open_power/control
#      members:
#          - /occ0
#    - name: zone0_regulators
#      description: Group of regulator temperature sensors for zone 0
#      type: /xyz/openbmc_project/sensors
#      members:
#          - /temperature/p0_vdd_temp
#          - /temperature/p1_vdd_temp
#    - name: zone0_dimms
#      description: Group of dimm temperature sensors for zone 0
#      type: /xyz/openbmc_project/sensors
#      members:
#          - /temperature/dimm0_temp
#          - /temperature/dimm1_temp
#          - /temperature/dimm2_temp
#          - /temperature/dimm3_temp
#          - /temperature/dimm4_temp
#
#matches:
#    - name: propertiesChanged
#      parameters:
#          - object
#          - interface
#    - name: interfacesAdded
#      parameters:
#          - object
#    - name: interfacesRemoved
#      parameters:
#          - object
#
#signals:
#    - name: propertiesChanged
#      description: >
#          A property changed signal
#      parameters:
#          - object
#          - interface
#      match: propertiesChanged
#    - name: interfacesAdded
#      description: >
#          An interfaces added signal
#      parameters:
#          - type
#          - object
#          - interface
#          - property
#      match: interfacesAdded
#    - name: interfacesRemoved
#      description: >
#          An interfaces removed match
#      parameters:
#          - object
#          - interface
#      match: interfacesRemoved
#
#methods:
#    - name: getProperties
#      description: >
#          Get the property values of the given group members
#          by performing a `GetProperty` method call on each
#      parameters:
#          - type
#
#handlers:
#    - name: setProperty
#      description: >
#          Sets a value for the givent object/interface/property
#      parameters:
#          - type
#
#preconditions:
#    - name: property_states_match
#      description: >
#          All defined properties must match the values given to
#          enable a set speed event otherwise fan speeds are set to full
#      parameters:
#          - groups
#
#actions:
#    - name: count_state_before_speed
#      description: Set the speed when a number of properties at a state
#      parameters:
#          - count
#          - property
#          - speed
#    - name: set_floor_from_average_sensor_value
#      description: Set floor speed from first entry with average less than key
#      parameters:
#          - map
#    - name: set_ceiling_from_average_sensor_value
#      description: Set ceiling speed based on key transition values with average
#      parameters:
#          - map
#    - name: set_net_increase_speed
#      description: >
#          Set the speed increase delta based on the delta increase
#          size times the given value and property's value difference
#      parameters:
#          - property
#          - factor
#          - delta
#    - name: set_net_decrease_speed
#      description: >
#          Set the speed decrease delta based on the delta decrease
#          size times the given value and property's value difference
#      parameters:
#          - property
#          - factor
#          - delta
#    - name: update_default_floor
#      description: >
#          Update the default fan floor to the given speed
#      parameters:
#          - property
#          - speed
#    - name: use_events_on_state
#      description: >
#          Use a set of events when all the group properties are at a given
#          state, otherwise remove the events
#      parameters:
#          - property
#          - events
#
#events:
#    - name: missing_before_high_speed
#      groups:
#          - name: zone0_fans
#            zone_conditions:
#                - name: air_cooled_chassis
#                  zones:
#                      - 0
#            interface: xyz.openbmc_project.Inventory.Item
#            property:
#                name: Present
#                type: bool
#      triggers:
#          - name: init
#            method: getProperties
#            handler: setProperty
#          - name: signal
#            signal: propertiesChanged
#            handler: setProperty
#      actions:
#          - name: count_state_before_speed
#            count: 1
#            property:
#                value: false
#                type: bool
#            speed:
#                value: 10500
#                type: uint64_t
#    - name: set_air_cooled_speed_boundaries_based_on_ambient
#      groups:
#          - name: zone0_ambient
#            zone_conditions:
#                - name: air_cooled_chassis
#                  zones:
#                      - 0
#            interface: xyz.openbmc_project.Sensor.Value
#            property:
#                name: Value
#                type: int64_t
#      triggers:
#          - name: init
#            method: getProperties
#            handler: setProperty
#          - name: signal
#            signal: propertiesChanged
#            handler: setProperty
#      actions:
#          - name: set_floor_from_average_sensor_value
#            map:
#                value:
#                    - 27000: 3500
#                    - 32000: 4600
#                    - 37000: 5200
#                    - 40000: 5800
#                type: std::map<int64_t, uint64_t>
#          - name: set_ceiling_from_average_sensor_value
#            map:
#                value:
#                    - 25000: 7200
#                    - 27000: 10500
#                type: std::map<int64_t, uint64_t>
#    - name: set_water_cooled_speed_boundaries_based_on_ambient
#      groups:
#          - name: zone0_ambient
#            zone_conditions:
#                - name: water_and_air_cooled_chassis
#                  zones:
#                      - 0
#            interface: xyz.openbmc_project.Sensor.Value
#            property:
#                name: Value
#                type: int64_t
#      triggers:
#          - name: init
#            method: getProperties
#            handler: setProperty
#          - name: signal
#            signal: propertiesChanged
#            handler: setProperty
#      actions:
#          - name: set_floor_from_average_sensor_value
#            map:
#                value:
#                    - 27000: 3000
#                    - 32000: 4300
#                    - 37000: 5000
#                    - 40000: 5800
#                type: std::map<int64_t, uint64_t>
#          - name: set_ceiling_from_average_sensor_value
#            map:
#                value:
#                    - 25000: 7200
#                    - 27000: 10500
#                type: std::map<int64_t, uint64_t>
#    - name: occ_active_speed_changes
#      precondition:
#          name: property_states_match
#          groups:
#              - name: occ0_object
#                interface: org.open_power.OCC.Status
#                property:
#                    name: OccActive
#                    type: bool
#                    value: true
#              - name: occ1_object
#                interface: org.open_power.OCC.Status
#                property:
#                    name: OccActive
#                    type: bool
#                    value: true
#          triggers:
#              - name: init
#                method: getProperties
#                handler: setProperty
#              - name: signal
#                signal: interfacesAdded
#                handler: setProperty
#              - name: signal
#                signal: propertiesChanged
#                handler: setProperty
#          events:
#              - name: speed_control_sensors
#                groups:
#                    - name: zone0_regulators
#                      interface: xyz.openbmc_project.Sensor.Value
#                      property:
#                          name: Value
#                          type: int64_t
#                    - name: zone0_dimms
#                      interface: xyz.openbmc_project.Sensor.Value
#                      property:
#                          name: Value
#                          type: int64_t
#                triggers:
#                    - name: init
#                      method: getProperties
#                      handler: setProperty
#                    - name: signal
#                      signal: interfacesAdded
#                      handler: setProperty
#                    - name: signal
#                      signal: propertiesChanged
#                      handler: setProperty
#                    - name: signal
#                      signal: interfacesRemoved
#                      handler: removeInterface
#              - name: 1sec_speed_change_request_sampling
#                triggers:
#                    - name: timer
#                      interval: 1000000
#                      type: repeating
#                actions:
#                    # Speed changes based on regulator temps
#                    - name: set_net_increase_speed
#                      groups:
#                          - name: zone0_regulators
#                            interface: xyz.openbmc_project.Sensor.Value
#                            property:
#                                name: Value
#                                type: int64_t
#                      property:
#                          value: 85000
#                          type: int64_t
#                      factor:
#                          value: 1000
#                          type: int64_t
#                      delta:
#                          value: 400
#                          type: uint64_t
#                    - name: set_net_decrease_speed
#                      groups:
#                          - name: zone0_regulators
#                            interface: xyz.openbmc_project.Sensor.Value
#                            property:
#                                name: Value
#                                type: int64_t
#                      property:
#                          value: 82000
#                          type: int64_t
#                      factor:
#                          value: 1000
#                          type: int64_t
#                       delta:
#                          value: 40
#                          type: uint64_t
#                    # Speed changes based on dimm temps
#                    - name: set_net_increase_speed
#                      groups:
#                          - name: zone0_dimms
#                            interface: xyz.openbmc_project.Sensor.Value
#                            property:
#                                name: Value
#                                type: int64_t
#                      property:
#                          value: 64000
#                          type: int64_t
#                      factor:
#                          value: 1000
#                          type: int64_t
#                      delta:
#                          value: 200
#                          type: uint64_t
#                    - name: set_net_decrease_speed
#                      groups:
#                          - name: zone0_dimms
#                            interface: xyz.openbmc_project.Sensor.Value
#                            property:
#                                name: Value
#                                type: int64_t
#                      property:
#                          value: 61000
#                          type: int64_t
#                      factor:
#                          value: 1000
#                          type: int64_t
#                      delta:
#                          value: 40
#                          type: uint64_t
