def powerport_get_port_status(port_id, port_type, raw=False):
    """ Get port status
    """

    try:
        gpio_binary = get_gpio_library()

        output = {}

        i = c_long()
        j = c_int()

        if (port_id < 1) or (port_id > 48):
            return set_failure_dict(
                "Invalid port-id {0}. Expected {1, 48}".format(port_id),
                completion_code.failure)

        if port_type == "pdu":
            output = gpio_binary.ocs_port_state(port_id, byref(i))

            if (output == 0):
                if (i.value == 1):
                    if raw:
                        return set_success_dict({port_id: "On"})
                    else:
                        return set_success_dict({"Port State": "On"})
                else:
                    if raw:
                        return set_success_dict({port_id: "Off"})
                    else:
                        return set_success_dict({"Port State": "Off"})
            else:
                return set_failure_dict(
                    ("Failed to get port status from GPIO Library: {0}".format(
                        output)), completion_code.failure)

        elif port_type == "relay":
            output = gpio_binary.ocs_port_relay(port_id, 2, byref(j))

            if (output == 0):
                if (j.value == 1):
                    return set_success_dict({"Relay": "On"})
                else:
                    return set_success_dict({"Relay": "Off"})
            else:
                return set_failure_dict(
                    ("Failed to get relay status from GPIO Library: {0}".
                     format(output)), completion_code.failure)

    except Exception, e:
        return set_failure_dict(
            "powerport_get_port_status - Exception: {0}".format(e),
            completion_code.failure)
def get_rack_manager_psu_status():
    result = {}
    output = -1

    try:
        gpio_binary = lib_utils.get_gpio_library()

        state = c_uint()
        output = gpio_binary.ocs_get_powergood(byref(state))

        if output != 0:
            return set_failure_dict(
                "Failed to get psu state using GPIO library: " + str(output),
                completion_code.failure)

    except Exception, e:
        return set_failure_dict(
            "get_rack_manager_status() Exception {0}".format(str(e)),
            completion_code.failure)
def powerport_get_port_presence(port_id, port_type, raw=False):
    """ Get port presence
    """

    try:
        if port_type == "relay":
            return set_success_dict({"Port Presence": "True"})

        gpio_binary = get_gpio_library()

        output = {}

        i = c_long()

        if (port_id < 1) or (port_id > 48):
            return set_failure_dict(
                "Invalid port-id {0}. Expected {1, 48}".format(port_id),
                completion_code.failure)

        output = gpio_binary.ocs_port_present(port_id, byref(i))

        if output == 0:
            if (i.value == 1):
                if raw:
                    return set_success_dict({port_id: "True"})
                else:
                    return set_success_dict({"Port Presence": "True"})
            else:
                if raw:
                    return set_success_dict({port_id: "False"})
                else:
                    return set_success_dict({"Port Presence": "False"})
        else:
            #Log_Info(Failed to get port presence)
            return set_failure_dict(
                ("Failed to get port presence from GPIO Library: {0}".format(
                    output)), completion_code.failure)

    except Exception, e:
        #log_error ("Exception :",e)
        return set_failure_dict(
            "powerport_get_port_presence - Exception: {0}".format(e),
            completion_code.failure)
def powerport_set_system_reset(port_id, action_type, port_type):
    """ Turn power port on/off through GPIO shared library
    """

    try:
        gpio_binary = get_gpio_library()

        action = 1
        output = ''
        j = c_int()

        if (port_id < 1) or (port_id > 48):
            return set_failure_dict(
                "Invalid port-id {0}. Expected {1, 48}".format(port_id),
                completion_code.failure)

        if action_type.lower() == 'on':
            action = 1
        else:
            action = 0

        if port_type.lower() == "pdu":
            output = gpio_binary.ocs_port_control(port_id, action)

        elif port_type.lower() == "relay":
            output = gpio_binary.ocs_port_relay(port_id, action, byref(j))

        if (output == 0):
            return set_success_dict()
        else:
            #log_err
            return set_failure_dict(
                ("Failed to reset system using GPIO Library: {0}".format(
                    output)), completion_code.failure)

    except Exception, e:
        ocslog.log_exception()
        return set_failure_dict(
            "powerport_set_system_reset - Exception: {0}".format(e),
            completion_code.failure)
def powerport_get_all_port_status(raw=False, ports=range(0, 48)):
    """ Get all 48 blades' statuses
    """

    try:
        output = {}

        gpio_binary = get_gpio_library()

        presence = c_longlong()
        port_id = c_int(int(0))

        rc = gpio_binary.ocs_port_state(port_id, byref(presence))

        if rc == 0:
            for i, j in enumerate(ports):
                if (((presence.value >> j) & 1) == 1):
                    result = "ON"
                else:
                    result = "OFF"

                if raw:
                    output.update({(i + 1): result})
                else:
                    result = set_success_dict({"Port State": result})
                    result = ({(i + 1): result})
                    output.update(result)

        if raw:
            return set_success_dict(output)
        else:
            return output

    except Exception, e:
        return set_failure_dict(
            "powerport_get_all_port_status - Exception: {0}".format(e),
            completion_code.failure)