Example #1
0
    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
Example #2
0
    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