This commit is contained in:
jostar-yang 2024-03-25 11:21:45 +08:00 committed by GitHub
commit 500621f827
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,7 @@
# #
try: try:
import sys
import time import time
import string import string
from ctypes import create_string_buffer from ctypes import create_string_buffer
@ -205,6 +206,9 @@ class SfpUtil(SfpUtilBase):
# Fill in write buffer # Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1) buffer = create_string_buffer(1)
if sys.version_info[0] >= 3:
buffer[0] = regval
else:
buffer[0] = chr(regval) buffer[0] = chr(regval)
# Write to eeprom # Write to eeprom
@ -220,6 +224,22 @@ class SfpUtil(SfpUtilBase):
eeprom.close() eeprom.close()
time.sleep(0.01) time.sleep(0.01)
def __read_txt_file(self, file_path):
try:
with open(file_path, 'r') as fd:
return fd.read().strip()
except IOError:
pass
return ""
def __write_txt_file(self, file_path, value):
try:
with open(file_path, 'w') as fd:
fd.write(str(value))
except Exception:
return False
return True
def reset(self, port_num): def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end: if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False return False
@ -228,21 +248,20 @@ class SfpUtil(SfpUtilBase):
cpld_ps = self._cpld_mapping[cpld_i] cpld_ps = self._cpld_mapping[cpld_i]
path = "/sys/bus/i2c/devices/{0}/module_reset_{1}" path = "/sys/bus/i2c/devices/{0}/module_reset_{1}"
port_ps = path.format(cpld_ps, port_num) port_ps = path.format(cpld_ps, port_num)
self.__port_to_mod_rst = port_ps self.__port_to_mod_rst = port_ps
try:
reg_file = open(self.__port_to_mod_rst, 'r+', buffering=0)
except IOError as e:
print("Error: unable to open file: %s" % str(e))
return False
# toggle reset ret = self.__write_txt_file(
reg_file.seek(0) self.__port_to_mod_rst, 1)
reg_file.write('1') if ret is not True:
return ret
time.sleep(1) time.sleep(1)
reg_file.seek(0) ret = self.__write_txt_file(
reg_file.write('0') self.__port_to_mod_rst, 0)
reg_file.close()
if ret is not True:
return ret
time.sleep(0.1)
return True return True