From d4d0f083679e6b23c4e4fe72f4958c1f313b582d Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Tue, 16 May 2017 13:51:10 -0500 Subject: Parse set speed event groups Adds the groups for a set speed event for each zone listed within the event. The groups are for maintaining a cached property value. Change-Id: I2de9cf62215f9861e8ea2e6807df11e6a04638fb Signed-off-by: Matthew Barth --- control/gen-fan-zone-defs.py | 58 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) (limited to 'control') diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py index 04f206f..221b322 100755 --- a/control/gen-fan-zone-defs.py +++ b/control/gen-fan-zone-defs.py @@ -37,6 +37,20 @@ const std::vector Manager::_zoneLayouts } }, %endfor + }, + std::vector{ + %for event in zone['events']: + SetSpeedEvent{ + Group{ + %for member in event['group']: + { + "${member['name']}", + {"${member['interface']}", + "${member['property']}"} + }, + %endfor + }, + %endfor } }, %endfor @@ -47,6 +61,37 @@ const std::vector Manager::_zoneLayouts ''' +def getEventsInZone(zone_num, events_data): + """ + Constructs the event entries defined for each zone using the events yaml + provided. + """ + events = [] + if 'events' in events_data: + for e in events_data['events']: + for z in e['zone_conditions']: + if zone_num not in z['zones']: + continue + + event = {} + # Add set speed event group + group = [] + groups = next(g for g in events_data['groups'] + if g['name'] == e['group']) + for member in groups['members']: + members = {} + members['name'] = ("/xyz/openbmc_project/" + + groups['type'] + + member) + members['interface'] = e['interface'] + members['property'] = e['property']['name'] + group.append(members) + event['group'] = group + events.append(event) + + return events + + def getFansInZone(zone_num, profiles, fan_data): """ Parses the fan definition YAML files to find the fans @@ -78,7 +123,7 @@ def getFansInZone(zone_num, profiles, fan_data): return fans -def buildZoneData(zone_data, fan_data): +def buildZoneData(zone_data, fan_data, events_data): """ Combines the zone definition YAML and fan definition YAML to create a data structure defining @@ -115,11 +160,13 @@ def buildZoneData(zone_data, fan_data): profiles = z['cooling_profiles'] fans = getFansInZone(z['zone'], profiles, fan_data) + events = getEventsInZone(z['zone'], events_data) if len(fans) == 0: sys.exit("Didn't find any fans in zone " + str(zone['num'])) zone['fans'] = fans + zone['events'] = events zones.append(zone) zone_group['zones'] = zones @@ -138,6 +185,8 @@ if __name__ == '__main__': parser.add_argument('-f', '--fan_yaml', dest='fan_yaml', default="example/fans.yaml", help='fan definitional yaml') + parser.add_argument('-e', '--events_yaml', dest='events_yaml', + help='events to set speeds yaml') parser.add_argument('-o', '--output_dir', dest='output_dir', default=".", help='output directory') @@ -153,8 +202,13 @@ if __name__ == '__main__': with open(args.fan_yaml, 'r') as fan_input: fan_data = yaml.safe_load(fan_input) or {} + events_data = {} + if args.events_yaml: + with open(args.events_yaml, 'r') as events_input: + events_data = yaml.safe_load(events_input) or {} + zone_config = buildZoneData(zone_data.get('zone_configuration', {}), - fan_data) + fan_data, events_data) manager_config = zone_data.get('manager_configuration', {}) -- cgit v1.2.1