# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: LicenseRef-NvidiaProprietary # # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual # property and proprietary rights in and to this material, related # documentation and any modifications thereto. Any use, reproduction, # disclosure or distribution of this material and related documentation # without an express license agreement from NVIDIA CORPORATION or # its affiliates is strictly prohibited. from tkinter import StringVar from tkinter.ttk import Label, LabelFrame from ...utils.common import PAttrs, PNames, err_symbol from ...utils.layoutmanager import fill_parent, grid_span, padding from ...utils.subjectobserver import Observer class FanFrame(LabelFrame, Observer): def __init__(self, master=None, **kwargs): super().__init__(master, text="Fan", **kwargs) self.create_widgets() self.manage_layout() fill_parent(self) def create_widgets(self): self.fan_names = PNames.FAN_NAMES self.fan_nums = len(self.fan_names) self.name_l = [None] * self.fan_nums self.profile_l = [None] * self.fan_nums self.pwm_l = [None] * self.fan_nums self.rpm_l = [None] * self.fan_nums self.profile_v = [None] * self.fan_nums self.pwm_v = [None] * self.fan_nums self.rpm_v = [None] * self.fan_nums self.name_hl = Label(self, text="Name") self.profile_hl = Label(self, text="Profile") self.pwm_hl = Label(self, text="PWM") self.rpm_hl = Label(self, text="RPM") for i in range(self.fan_nums): self.profile_v[i] = StringVar() self.pwm_v[i] = StringVar() self.rpm_v[i] = StringVar() self.name_l[i] = Label(self, text=self.fan_names[i]) self.profile_l[i] = Label(self, textvariable=self.profile_v[i]) self.pwm_l[i] = Label(self, textvariable=self.pwm_v[i]) self.rpm_l[i] = Label(self, textvariable=self.rpm_v[i]) def manage_layout(self): self.name_hl.grid(row=0, column=0, **grid_span, **padding) self.profile_hl.grid(row=1, column=0, **grid_span, **padding) self.pwm_hl.grid(row=2, column=0, **grid_span, **padding) self.rpm_hl.grid(row=3, column=0, **grid_span, **padding) for i in range(self.fan_nums): self.name_l[i].grid(row=0, column=1 + i, **grid_span, **padding) self.profile_l[i].grid(row=1, column=1 + i, **grid_span, **padding) self.pwm_l[i].grid(row=2, column=1 + i, **grid_span, **padding) self.rpm_l[i].grid(row=3, column=1 + i, **grid_span, **padding) def update_data(self, data): for i in range(self.fan_nums): fan_name = self.fan_names[i] pwm_read = data[(fan_name, PAttrs.CURR_PWM)] self.profile_v[i].set(f"{data[(fan_name, PAttrs.FAN_PROFILE)]}") if pwm_read != err_symbol: self.pwm_v[i].set(f"{round(pwm_read * 100 / 255, 2)} %") else: self.pwm_v[i].set(f"{err_symbol}") self.rpm_v[i].set(f"{data[(fan_name, PAttrs.RPM_MEASURED)]} rpm")