def set_power(self, state, cabinet, frame, board,
                  delay=0.0, post_power_on_delay=5.0):
        """Control power to the SpiNNaker chips and FPGAs on a board.

        Returns
        -------
        state : bool
            True for power on, False for power off.
        board : int or iterable
            Specifies the board to control the power of. This may also be an
            iterable of multiple boards (in the same frame). The command will
            actually be sent board 0, regardless of the set of boards
            specified.
        delay : float
            Number of seconds delay between power state changes of different
            boards.
        post_power_on_delay : float
            Number of seconds for this command to block once the power on
            command has been carried out. A short delay (default) is useful at
            this point since power-supplies and SpiNNaker chips may still be
            coming on line immediately after the power-on command is sent.

            .. warning::
                If the set of boards to be powered-on does not include board 0,
                this timeout should be extended by 2-3 seconds. This is due to
                the fact that BMPs immediately acknowledge power-on commands to
                boards other than board 0 but wait for the FPGAs to be loaded
                before responding when board 0 is powered on.
        """
        if isinstance(board, int):
            boards = [board]
        else:
            boards = list(board)

        arg1 = int(delay * 1000) << 16 | (1 if state else 0)
        arg2 = sum(1 << b for b in boards)

        # Allow additional time for response when powering on (since FPGAs must
        # be loaded). Also, always send the command to board 0. This is
        # required by the BMPs which do not correctly handle the power-on
        # command being sent to anything but board 0. Though this is a bug in
        # the BMP firmware, it is considered sufficiently easy to work-around
        # that no fix is planned.
        self._send_scp(cabinet, frame, 0, SCPCommands.power,
                       arg1=arg1, arg2=arg2,
                       timeout=consts.BMP_POWER_ON_TIMEOUT if state else 0.0,
                       expected_args=0)
        if state:
            time.sleep(post_power_on_delay)
Control power to the SpiNNaker chips and FPGAs on a board.

        Returns
        -------
        state : bool
            True for power on, False for power off.
        board : int or iterable
            Specifies the board to control the power of. This may also be an
            iterable of multiple boards (in the same frame). The command will
            actually be sent board 0, regardless of the set of boards
            specified.
        delay : float
            Number of seconds delay between power state changes of different
            boards.
        post_power_on_delay : float
            Number of seconds for this command to block once the power on
            command has been carried out. A short delay (default) is useful at
            this point since power-supplies and SpiNNaker chips may still be
            coming on line immediately after the power-on command is sent.

            .. warning::
                If the set of boards to be powered-on does not include board 0,
                this timeout should be extended by 2-3 seconds. This is due to
                the fact that BMPs immediately acknowledge power-on commands to
                boards other than board 0 but wait for the FPGAs to be loaded
                before responding when board 0 is powered on.