def reboot_device(self, device_name, wait_after_off=10, wait_after_on=30): """ :param wait_time_after_off: Time to wait after turning the device off :param wait_time_after_on: Time to wait before verifying the reboot was successful (i.e. after turn on command) :return: Boolean representing whether or not the reboot was successful """ # FIXME: Do we need a self.pin_off() or just pin_off()? if not self.pin_off( device_name ): # If it's still on? Maybe trying to see if pin_off() was successful? return False # TODO: All code below is unconverted message = "From Pin {} ({}) reboot: sleeping {} second(s) after turn off.".format( self.eps_dict[device_name], device_name, wait_after_off) self.logger.debug(message) self.get_module_or_raise_error("telemetry").enqueue( Log(sys_name=self.name, lvl="INFO", msg=message)) time.sleep(wait_after_off) # Wait for specified time if not self.pin_on(device_name): return False message = "From Pin {} ({}) reboot: sleeping {} second(s) after turn on.".format( self.eps_dict[device_name], device_name, wait_after_off) self.logger.debug(message) self.get_module_or_raise_error("telemetry").enqueue( Log(sys_name=self.name, lvl="INFO", msg=message)) time.sleep(wait_after_off) if self.get_PDM_status(device_name) == 1: message = "Pin {} ({}) reboot successful.".format( self.eps_dict[device_name], device_name) self.logger.debug(message) self.get_module_or_raise_error("telemetry").enqueue( Log(sys_name=self.name, lvl="INFO", msg=message)) return True else: message = "Pin {} ({}) reboot NOT successful. Recommend PDM status check in {} second(s).".format( self.eps_dict[device_name], device_name, wait_after_off) self.logger.error(message) self.get_module_or_raise_error("telemetry").enqueue( Error(sys_name=self.name, msg=message)) return False
def pin_off(self, device_name) -> bool: with SMBusWrapper(1) as bus: if device_name in self.eps_dict: PDM_val = self.eps_dict[device_name] else: message = "Device name \"{}\" INVALID. Aborting command.".format( device_name) self.logger.error(message) self.get_module_or_raise_error("telemetry").enqueue( Error(sys_name=self.name, msg=message)) return False if self.get_PDM_status(device_name) == 0: message = "Pin {} ({}) is already OFF.".format( self.eps_dict[device_name], device_name) self.logger.debug(message) # Log to console for debugging self.get_module_or_raise_error("telemetry").enqueue( Log(sys_name=self.name, lvl="INFO", msg=message)) # Push to telemetry stack return True else: bus.write_byte_data(self.address, 0x13, PDM_val) # Attempt to execute pin off if self.get_PDM_status(device_name) == 0: # PDM is OFF message = "Pin {} ({}) communication successful. Pin is now OFF.".format( self.eps_dict[device_name], device_name) self.logger.debug(message) self.get_module_or_raise_error("telemetry").enqueue( Log(sys_name=self.name, lvl="INFO", msg=message)) return True else: message = "Pin {} ({}) communication NOT successful. Pin is still ON.".format( self.eps_dict[device_name], device_name) self.logger.error(message) self.get_module_or_raise_error("telemetry").enqueue( Error(sys_name=self.name, msg=message)) return False