Loading py393sata/x393sata_eyesis4pi_control.py +73 −9 Original line number Original line Diff line number Diff line Loading @@ -2,6 +2,44 @@ from __future__ import print_function from __future__ import print_function from __future__ import division from __future__ import division ''' /** # Copyright (C) 2017, Elphel.inc. # Description: switch between internal and external SSDs # Comments: # reset_device (3x times max) # does not matter if error or not - reload driver - wait for 10 seconds + 10 # if error - reload (repeat up to 5x) # # 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 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/>. @author: Oleg K Dzhimiev @copyright: 2017 Elphel, Inc. @license: GPLv3.0+ @contact: oleg@elphel.com @deffield updated: unknown ''' __author__ = "Elphel" __copyright__ = "Copyright 2017, Elphel, Inc." __license__ = "GPL" __version__ = "3.0+" __maintainer__ = "Oleg K Dzhimiev" __email__ = "oleg@elphel.com" __status__ = "Development" import x393sata import x393sata import x393_mem import x393_mem Loading Loading @@ -121,9 +159,6 @@ def reset_device(): for i in range(RESET_LIMIT): for i in range(RESET_LIMIT): if not connection_errors(): if not connection_errors(): if i==0: DEVICE_CONNECTED = False log_msg("connection error ("+str(i)+"), resetting device",4) log_msg("connection error ("+str(i)+"), resetting device",4) sata.reset_ie() sata.reset_ie() sata.reset_device() sata.reset_device() Loading @@ -132,6 +167,11 @@ def reset_device(): if i!=0: if i!=0: log_msg("resetting device: success") log_msg("resetting device: success") result = True result = True if i==0: DEVICE_CONNECTED = False if result: break break # load driver in any case # load driver in any case Loading Loading @@ -175,10 +215,12 @@ def unmount_partitions(): content = [x.split(" ")[0] for x in content] content = [x.split(" ")[0] for x in content] for mounted_device in content: for mounted_device in content: m = re.search(r"\/dev\/sd[a-z][0-9]",mounted_device) m = re.search(r"sd[a-z][0-9]",mounted_device) if m: if m: log_msg("Unmounting "+m.group(0)) mountpoint = "/mnt/"+m.group(0) shout("umount "+m.group(0)) partname = "/dev/"+m.group(0) log_msg("Unmounting "+partname) shout("umount "+mountpoint) def load_driver(): def load_driver(): Loading @@ -196,9 +238,31 @@ def load_driver(): log_msg("SSD was not detected, ahci_elphel driver is loaded",4) log_msg("SSD was not detected, ahci_elphel driver is loaded",4) else: else: log_msg("SATA ok, SSD detected after "+str(i)+" tries") log_msg("SATA ok, SSD detected after "+str(i)+" tries") #automount() shout("echo 1 > "+STATEFILE) shout("echo 1 > "+STATEFILE) #def automount(): #output = subprocess.check_output("blkid") #output = output.split("\n") #for line in output: #pars = line.split(" ") #m = re.search(r"sd[a-z][0-9]",pars[0]) #if m: #pname = m.group(0) #m = re.search(r"TYPE=\"ext",pars[2]) #if m: #mount_partition(pname) #def mount_partition(dirname): #mountpoint = "/mnt/"+dirname #partname = "/dev/"+dirname #if not os.path.exists(mountpoint): #shout("mkdir "+mountpoint) #shout("mount "+partname+" "+mountpoint) def check_device(): def check_device(): with open("/proc/partitions") as f: with open("/proc/partitions") as f: content = f.readlines() content = f.readlines() Loading @@ -221,8 +285,8 @@ def reload_driver(): unload_ahci_elphel_driver() unload_ahci_elphel_driver() # check once # check once sata.reset_ie() sata.reset_ie() #sata.reset_device() sata.reset_device() sleep(0.1) sleep(0.5) connection_errors() connection_errors() load_ahci_elphel_driver() load_ahci_elphel_driver() Loading Loading
py393sata/x393sata_eyesis4pi_control.py +73 −9 Original line number Original line Diff line number Diff line Loading @@ -2,6 +2,44 @@ from __future__ import print_function from __future__ import print_function from __future__ import division from __future__ import division ''' /** # Copyright (C) 2017, Elphel.inc. # Description: switch between internal and external SSDs # Comments: # reset_device (3x times max) # does not matter if error or not - reload driver - wait for 10 seconds + 10 # if error - reload (repeat up to 5x) # # 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 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/>. @author: Oleg K Dzhimiev @copyright: 2017 Elphel, Inc. @license: GPLv3.0+ @contact: oleg@elphel.com @deffield updated: unknown ''' __author__ = "Elphel" __copyright__ = "Copyright 2017, Elphel, Inc." __license__ = "GPL" __version__ = "3.0+" __maintainer__ = "Oleg K Dzhimiev" __email__ = "oleg@elphel.com" __status__ = "Development" import x393sata import x393sata import x393_mem import x393_mem Loading Loading @@ -121,9 +159,6 @@ def reset_device(): for i in range(RESET_LIMIT): for i in range(RESET_LIMIT): if not connection_errors(): if not connection_errors(): if i==0: DEVICE_CONNECTED = False log_msg("connection error ("+str(i)+"), resetting device",4) log_msg("connection error ("+str(i)+"), resetting device",4) sata.reset_ie() sata.reset_ie() sata.reset_device() sata.reset_device() Loading @@ -132,6 +167,11 @@ def reset_device(): if i!=0: if i!=0: log_msg("resetting device: success") log_msg("resetting device: success") result = True result = True if i==0: DEVICE_CONNECTED = False if result: break break # load driver in any case # load driver in any case Loading Loading @@ -175,10 +215,12 @@ def unmount_partitions(): content = [x.split(" ")[0] for x in content] content = [x.split(" ")[0] for x in content] for mounted_device in content: for mounted_device in content: m = re.search(r"\/dev\/sd[a-z][0-9]",mounted_device) m = re.search(r"sd[a-z][0-9]",mounted_device) if m: if m: log_msg("Unmounting "+m.group(0)) mountpoint = "/mnt/"+m.group(0) shout("umount "+m.group(0)) partname = "/dev/"+m.group(0) log_msg("Unmounting "+partname) shout("umount "+mountpoint) def load_driver(): def load_driver(): Loading @@ -196,9 +238,31 @@ def load_driver(): log_msg("SSD was not detected, ahci_elphel driver is loaded",4) log_msg("SSD was not detected, ahci_elphel driver is loaded",4) else: else: log_msg("SATA ok, SSD detected after "+str(i)+" tries") log_msg("SATA ok, SSD detected after "+str(i)+" tries") #automount() shout("echo 1 > "+STATEFILE) shout("echo 1 > "+STATEFILE) #def automount(): #output = subprocess.check_output("blkid") #output = output.split("\n") #for line in output: #pars = line.split(" ") #m = re.search(r"sd[a-z][0-9]",pars[0]) #if m: #pname = m.group(0) #m = re.search(r"TYPE=\"ext",pars[2]) #if m: #mount_partition(pname) #def mount_partition(dirname): #mountpoint = "/mnt/"+dirname #partname = "/dev/"+dirname #if not os.path.exists(mountpoint): #shout("mkdir "+mountpoint) #shout("mount "+partname+" "+mountpoint) def check_device(): def check_device(): with open("/proc/partitions") as f: with open("/proc/partitions") as f: content = f.readlines() content = f.readlines() Loading @@ -221,8 +285,8 @@ def reload_driver(): unload_ahci_elphel_driver() unload_ahci_elphel_driver() # check once # check once sata.reset_ie() sata.reset_ie() #sata.reset_device() sata.reset_device() sleep(0.1) sleep(0.5) connection_errors() connection_errors() load_ahci_elphel_driver() load_ahci_elphel_driver() Loading