Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
#!/usr/bin/env python
# Copyright (c) 2019 Edgecore Networks Corporation
#
# Copyright (C) 2017 Accton Technology Corporation
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
# LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS
# FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# See the Apache Version 2.0 License for specific language governing
# permissions and limitations under the License.
#
# ------------------------------------------------------------------
# HISTORY:
# mm/dd/yyyy (A.D.)
# 11/13/2017: Polly Hsu, Create
# 1/10/2018: Jostar modify for as7716_32
# 12/03/2018: Jostar modify for as7726_32
# 8/27/2019:Jostar craete for as9716_32d
# ------------------------------------------------------------------

try:
Expand All @@ -46,8 +42,8 @@ class FanUtil(object):
FAN_NODE_FAULT_IDX_OF_MAP = 1
FAN_NODE_DIR_IDX_OF_MAP = 2

BASE_VAL_PATH = '/sys/bus/i2c/devices/54-0066/{0}'
FAN_DUTY_PATH = '/sys/bus/i2c/devices/54-0066/fan_duty_cycle_percentage'
BASE_VAL_PATH = '/sys/bus/i2c/devices/17-0066/{0}'
FAN_DUTY_PATH = '/sys/bus/i2c/devices/17-0066/fan_duty_cycle_percentage'

#logfile = ''
#loglevel = logging.INFO
Expand All @@ -56,14 +52,14 @@ class FanUtil(object):
key1 = fan id index (integer) starting from 1
key2 = fan node index (interger) starting from 1
value = path to fan device file (string) """
_fan_to_device_path_mapping = {}
_fan_device_path_mapping = {}

#fan1_direction
#fan1_fault
#fan1_present

#(FAN_NUM_2_IDX, FAN_NODE_DUTY_IDX_OF_MAP): 'fan2_duty_cycle_percentage',
_fan_to_device_node_mapping = {
_fan_device_node_mapping = {
(FAN_NUM_1_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan1_fault',
(FAN_NUM_1_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan1_direction',

Expand All @@ -83,8 +79,8 @@ class FanUtil(object):
(FAN_NUM_6_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan6_direction',
}

def _get_fan_to_device_node(self, fan_num, node_num):
return self._fan_to_device_node_mapping[(fan_num, node_num)]
def _get_fan_device_node(self, fan_num, node_num):
return self._fan_device_node_mapping[(fan_num, node_num)]

def _get_fan_node_val(self, fan_num, node_num):
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
Expand All @@ -95,7 +91,7 @@ def _get_fan_node_val(self, fan_num, node_num):
logging.debug('GET. Parameter error. node_num:%d', node_num)
return None

device_path = self.get_fan_to_device_path(fan_num, node_num)
device_path = self.get_fan_device_path(fan_num, node_num)

try:
val_file = open(device_path, 'r')
Expand Down Expand Up @@ -131,7 +127,7 @@ def _set_fan_node_val(self, fan_num, node_num, val):
logging.debug('GET. content is NULL. device_path:%s', device_path)
return None

device_path = self.get_fan_to_device_path(fan_num, node_num)
device_path = self.get_fan_device_path(fan_num, node_num)
try:
val_file = open(device_path, 'w')
except IOError as e:
Expand All @@ -153,8 +149,8 @@ def __init__(self):

for fan_num in range(self.FAN_NUM_1_IDX, self.FAN_NUM_ON_MAIN_BROAD+1):
for node_num in range(self.FAN_NODE_FAULT_IDX_OF_MAP, self.FAN_NODE_NUM_OF_MAP+1):
self._fan_to_device_path_mapping[(fan_num, node_num)] = fan_path.format(
self._fan_to_device_node_mapping[(fan_num, node_num)])
self._fan_device_path_mapping[(fan_num, node_num)] = fan_path.format(
self._fan_device_node_mapping[(fan_num, node_num)])

def get_num_fans(self):
return self.FAN_NUM_ON_MAIN_BROAD
Expand All @@ -169,20 +165,17 @@ def get_idx_node_start(self):
return self.FAN_NODE_FAULT_IDX_OF_MAP

def get_size_node_map(self):
return len(self._fan_to_device_node_mapping)
return len(self._fan_device_node_mapping)

def get_size_path_map(self):
return len(self._fan_to_device_path_mapping)
return len(self._fan_device_path_mapping)

def get_fan_to_device_path(self, fan_num, node_num):
return self._fan_to_device_path_mapping[(fan_num, node_num)]
def get_fan_device_path(self, fan_num, node_num):
return self._fan_device_path_mapping[(fan_num, node_num)]

def get_fan_fault(self, fan_num):
return self._get_fan_node_val(fan_num, self.FAN_NODE_FAULT_IDX_OF_MAP)

#def get_fan_speed(self, fan_num):
# return self._get_fan_node_val(fan_num, self.FAN_NODE_SPEED_IDX_OF_MAP)

def get_fan_dir(self, fan_num):
return self._get_fan_node_val(fan_num, self.FAN_NODE_DIR_IDX_OF_MAP)

Expand All @@ -198,28 +191,18 @@ def get_fan_duty_cycle(self):
val_file.close()

return int(content)
#self._get_fan_node_val(fan_num, self.FAN_NODE_DUTY_IDX_OF_MAP)
#static u32 reg_val_to_duty_cycle(u8 reg_val)
#{
# reg_val &= FAN_DUTY_CYCLE_REG_MASK;
# return ((u32)(reg_val+1) * 625 + 75)/ 100;
#}
#

def set_fan_duty_cycle(self, val):

try:
fan_file = open(self.FAN_DUTY_PATH, 'r+')
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
#val = ((val + 1 ) * 625 +75 ) / 100

fan_file.write(str(val))
fan_file.close()
return True

#def get_fanr_fault(self, fan_num):
# return self._get_fan_node_val(fan_num, self.FANR_NODE_FAULT_IDX_OF_MAP)


def get_fanr_speed(self, fan_num):
return self._get_fan_node_val(fan_num, self.FANR_NODE_SPEED_IDX_OF_MAP)

Expand All @@ -232,20 +215,4 @@ def get_fan_status(self, fan_num):
logging.debug('GET. FAN fault. fan_num, %d', fan_num)
return False

#if self.get_fanr_fault(fan_num) is not None and self.get_fanr_fault(fan_num) > 0:
# logging.debug('GET. FANR fault. fan_num, %d', fan_num)
# return False

return True

#def main():
# fan = FanUtil()
#
# print 'get_size_node_map : %d' % fan.get_size_node_map()
# print 'get_size_path_map : %d' % fan.get_size_path_map()
# for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1):
# for y in range(fan.get_idx_node_start(), fan.get_num_nodes()+1):
# print fan.get_fan_to_device_path(x, y)
#
#if __name__ == '__main__':
# main()
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
#!/usr/bin/env python
# Copyright (c) 2019 Edgecore Networks Corporation
#
# Copyright (C) 2017 Accton Technology Corporation
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
# LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS
# FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# See the Apache Version 2.0 License for specific language governing
# permissions and limitations under the License.
#
# ------------------------------------------------------------------
# HISTORY:
# mm/dd/yyyy (A.D.)
# 12/18/2018:Jostar craete for as9716_32d
# 8/27/2019:Jostar craete for as9716_32d
# ------------------------------------------------------------------

try:
Expand All @@ -34,38 +32,29 @@
class ThermalUtil(object):
"""Platform-specific ThermalUtil class"""
THERMAL_NUM_MAX = 8
THERMAL_NUM_1_IDX = 1 # 1_ON_MAIN_BROAD. LM75
THERMAL_NUM_2_IDX = 2 # 2_ON_MAIN_BROAD. LM75
THERMAL_NUM_3_IDX = 3 # 3_ON_MAIN_BROAD. LM75
THERMAL_NUM_4_IDX = 4 # 4_ON_MAIN_BROAD. LM75
THERMAL_NUM_5_IDX = 5 # 5_ON_MAIN_BROAD. LM75
THERMAL_NUM_6_IDX = 6 # 6_ON_MAIN_BROAD. LM75
THERMAL_NUM_7_IDX = 7 # 7_ON_MAIN_BROAD. LM75
THERMAL_NUM_8_IDX = 8 # 8_ON_MAIN_BROAD. LM75
THERMAL_NUM_1_IDX = 1 # 1~7 are mainboard thermal sensors
THERMAL_NUM_2_IDX = 2
THERMAL_NUM_3_IDX = 3
THERMAL_NUM_4_IDX = 4
THERMAL_NUM_5_IDX = 5
THERMAL_NUM_6_IDX = 6
THERMAL_NUM_7_IDX = 7 # CPU core
THERMAL_NUM_8_IDX = 8

""" Dictionary where
key1 = thermal id index (integer) starting from 1
value = path to fan device file (string) """
#_thermal_to_device_path_mapping = {}

_thermal_to_device_node_mapping = {
THERMAL_NUM_1_IDX: ['18', '48'],
THERMAL_NUM_2_IDX: ['18', '49'],
THERMAL_NUM_3_IDX: ['18', '4a'],
THERMAL_NUM_4_IDX: ['18', '4b'],
THERMAL_NUM_5_IDX: ['18', '4c'],
THERMAL_NUM_6_IDX: ['18', '4e'],
THERMAL_NUM_7_IDX: ['18', '4f'],
}

thermal_sysfspath ={
THERMAL_NUM_1_IDX: ["/sys/bus/i2c/devices/18-0048/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_2_IDX: ["/sys/bus/i2c/devices/18-0049/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/18-004a/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_5_IDX: ["/sys/bus/i2c/devices/18-004c/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_6_IDX: ["/sys/bus/i2c/devices/18-004e/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_7_IDX: ["/sys/bus/i2c/devices/18-004f/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_8_IDX: ["/sys/class/hwmon/hwmon0/temp1_input"],
THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/18-004a/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/18-004c/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_5_IDX: ["/sys/bus/i2c/devices/18-004e/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_6_IDX: ["/sys/bus/i2c/devices/18-004f/hwmon/hwmon*/temp1_input"],
THERMAL_NUM_7_IDX: ["/sys/class/hwmon/hwmon0/temp1_input"],
THERMAL_NUM_8_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon*/temp1_input"],
}

#def __init__(self):
Expand All @@ -75,7 +64,7 @@ def _get_thermal_val(self, thermal_num):
logging.debug('GET. Parameter error. thermal_num, %d', thermal_num)
return None

device_path = self.get_thermal_to_device_path(thermal_num)
device_path = self.get_thermal_path(thermal_num)
for filename in glob.glob(device_path):
try:
val_file = open(filename, 'r')
Expand All @@ -97,39 +86,17 @@ def _get_thermal_val(self, thermal_num):
return 0

def get_num_thermals(self):
return self.THERMAL_NUM_MAX

def get_idx_thermal_start(self):
return self.THERMAL_NUM_1_IDX

def get_size_node_map(self):
return len(self._thermal_to_device_node_mapping)
return self.THERMAL_NUM_MAX

def get_size_path_map(self):
return len(self.thermal_sysfspath)

def get_thermal_to_device_path(self, thermal_num):
def get_thermal_path(self, thermal_num):
return self.thermal_sysfspath[thermal_num][0]

def get_thermal_temp(self):
return (self._get_thermal_node_val(self.THERMAL_NUM_1_IDX) + self._get_thermal_node_val(self.THERMAL_NUM_2_IDX) +self._get_thermal_node_val(self.THERMAL_NUM_3_IDX))


def main():
thermal = ThermalUtil()
print "termal1=%d" %thermal._get_thermal_val(1)
print "termal2=%d" %thermal._get_thermal_val(2)
print "termal3=%d" %thermal._get_thermal_val(3)
print "termal4=%d" %thermal._get_thermal_val(4)
print "termal5=%d" %thermal._get_thermal_val(5)
print "termal7=%d" %thermal._get_thermal_val(6)
print "termal8=%d" %thermal._get_thermal_val(7)
print "termal9=%d" %thermal._get_thermal_val(8)

#
# print 'get_size_node_map : %d' % thermal.get_size_node_map()
# print 'get_size_path_map : %d' % thermal.get_size_path_map()
# for x in range(thermal.get_idx_thermal_start(), thermal.get_num_thermals()+1):
# print thermal.get_thermal_to_device_path(x)
#
thermal = ThermalUtil()

if __name__ == '__main__':
main()
Loading