-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[device/celestica] Implement PSU APIs based on the new platform API (#…
- Loading branch information
Showing
4 changed files
with
149 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
device/celestica/x86_64-cel_e1031-r0/sonic_platform/psu.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
#!/usr/bin/env python | ||
|
||
############################################################################# | ||
# Celestica | ||
# | ||
# Module contains an implementation of SONiC Platform Base API and | ||
# provides the PSUs status which are available in the platform | ||
# | ||
############################################################################# | ||
|
||
import os.path | ||
import sonic_platform | ||
|
||
try: | ||
from sonic_platform_base.psu_base import PsuBase | ||
from sonic_platform.fan import Fan | ||
except ImportError as e: | ||
raise ImportError(str(e) + "- required module not found") | ||
|
||
FAN_E1031_SPEED_PATH = "/sys/class/hwmon/hwmon{}/fan1_input" | ||
FAN_MAX_RPM = 11000 | ||
|
||
|
||
class Psu(PsuBase): | ||
"""Platform-specific Psu class""" | ||
|
||
def __init__(self, psu_index): | ||
PsuBase.__init__(self) | ||
self.index = psu_index | ||
|
||
def get_fan(self): | ||
""" | ||
Retrieves object representing the fan module contained in this PSU | ||
Returns: | ||
An object dervied from FanBase representing the fan module | ||
contained in this PSU | ||
""" | ||
fan_speed_path = FAN_E1031_SPEED_PATH.format( | ||
str(self.index+3)) | ||
try: | ||
with open(fan_speed_path) as fan_speed_file: | ||
fan_speed_rpm = int(fan_speed_file.read()) | ||
except IOError: | ||
fan_speed = 0 | ||
|
||
fan_speed = float(fan_speed_rpm)/FAN_MAX_RPM * 100 | ||
fan = Fan(0) | ||
fan.fan_speed = int(fan_speed) if int(fan_speed) <= 100 else 100 | ||
return fan | ||
|
||
def set_status_led(self, color): | ||
""" | ||
Sets the state of the PSU status LED | ||
Args: | ||
color: A string representing the color with which to set the PSU status LED | ||
Note: Only support green and off | ||
Returns: | ||
bool: True if status LED state is set successfully, False if not | ||
""" | ||
# Hardware not supported | ||
return False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
78 changes: 78 additions & 0 deletions
78
device/celestica/x86_64-cel_seastone-r0/sonic_platform/psu.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
#!/usr/bin/env python | ||
|
||
############################################################################# | ||
# Celestica | ||
# | ||
# Module contains an implementation of SONiC Platform Base API and | ||
# provides the PSUs status which are available in the platform | ||
# | ||
############################################################################# | ||
|
||
import os.path | ||
import sonic_platform | ||
|
||
try: | ||
from sonic_platform_base.psu_base import PsuBase | ||
from sonic_platform.fan import Fan | ||
except ImportError as e: | ||
raise ImportError(str(e) + "- required module not found") | ||
|
||
FAN_DX010_SPEED_PATH = "/sys/class/hwmon/hwmon{}/fan1_input" | ||
GREEN_LED_PATH = "/sys/devices/platform/leds_dx010/leds/dx010:green:p-{}/brightness" | ||
FAN_MAX_RPM = 11000 | ||
|
||
|
||
class Psu(PsuBase): | ||
"""Platform-specific Psu class""" | ||
|
||
def __init__(self, psu_index): | ||
PsuBase.__init__(self) | ||
self.index = psu_index | ||
self.green_led_path = GREEN_LED_PATH.format(self.index+1) | ||
|
||
def get_fan(self): | ||
""" | ||
Retrieves object representing the fan module contained in this PSU | ||
Returns: | ||
An object dervied from FanBase representing the fan module | ||
contained in this PSU | ||
""" | ||
|
||
fan_speed_path = FAN_DX010_SPEED_PATH.format( | ||
str(self.index+8)) | ||
try: | ||
with open(fan_speed_path) as fan_speed_file: | ||
fan_speed_rpm = int(fan_speed_file.read()) | ||
except IOError: | ||
fan_speed = 0 | ||
|
||
fan_speed = float(fan_speed_rpm)/FAN_MAX_RPM * 100 | ||
fan = Fan(0) | ||
fan.fan_speed = int(fan_speed) if int(fan_speed) <= 100 else 100 | ||
return fan | ||
|
||
def set_status_led(self, color): | ||
""" | ||
Sets the state of the PSU status LED | ||
Args: | ||
color: A string representing the color with which to set the PSU status LED | ||
Note: Only support green and off | ||
Returns: | ||
bool: True if status LED state is set successfully, False if not | ||
""" | ||
|
||
set_status_str = { | ||
self.STATUS_LED_COLOR_GREEN: '1', | ||
self.STATUS_LED_COLOR_OFF: '0' | ||
}.get(color, None) | ||
|
||
if not set_status_str: | ||
return False | ||
|
||
try: | ||
with open(self.green_led_path, 'w') as file: | ||
file.write(set_status_str) | ||
except IOError: | ||
return False | ||
|
||
return True |