Esempio n. 1
0
/*
 * int set_table_ctrl_digital_state (saHpiCtrlDigitalTable_context * ctx)
 */
int set_table_ctrl_digital_state (saHpiCtrlDigitalTable_context *row_ctx)
{
	SaErrorT            rc = SA_OK;
	SaHpiSessionIdT     session_id;
	SaHpiResourceIdT    resource_id;
	SaHpiCtrlStateT	    ctrl_state;	

	if (!row_ctx)
		return AGENT_ERR_NULL_DATA;

	session_id = get_session_id(row_ctx->index.oids[saHpiCtrlDigitalDomainId_INDEX]);
	resource_id = row_ctx->index.oids[saHpiCtrlDigitalResourceEntryId_INDEX];

	ctrl_state.StateUnion.Digital = row_ctx->saHpiCtrlDigitalState - 1;
	ctrl_state.Type = SAHPI_CTRL_TYPE_DIGITAL;

	rc = saHpiControlSet(session_id, resource_id, 
			     row_ctx->saHpiCtrlDigitalNum, 
			     row_ctx->saHpiCtrlDigitalMode - 1, 
			     &ctrl_state); 

	if (rc != SA_OK) {
		snmp_log (LOG_ERR,
			  "Call to saHpiControlSet failed to set State rc: %s.\n",
			  oh_lookup_error(rc));
		DEBUGMSGTL ((AGENT,
			     "Call to saHpiControlSet failed to set State rc: %s.\n",
			     oh_lookup_error(rc)));
		return get_snmp_error(rc);
	} 

	return SNMP_ERR_NOERROR; 
}
Esempio n. 2
0
/*
 * SaErrorT set_table_ctrl_text()
 */
int set_table_ctrl_text (saHpiCtrlTextTable_context *row_ctx) 
{
	SaErrorT            rc = SA_OK;
	SaHpiSessionIdT     session_id;
	SaHpiResourceIdT    resource_id;
	SaHpiCtrlStateT     ctrl_state; 

	DEBUGMSGTL ((AGENT, "set_table_ctrl_text, called\n"));  

	if (!row_ctx)
		return AGENT_ERR_NULL_DATA;

	session_id = get_session_id(row_ctx->index.oids[saHpiDomainId_INDEX]);
	resource_id = row_ctx->index.oids[saHpiResourceEntryId_INDEX];

	/* line */
	ctrl_state.StateUnion.Text.Line = row_ctx->saHpiCtrlTextLine;

	/* data, len */
	memset(ctrl_state.StateUnion.Text.Text.Data, 0, 
	       sizeof(ctrl_state.StateUnion.Text.Text.Data));
	memcpy(ctrl_state.StateUnion.Text.Text.Data,
	       row_ctx->saHpiCtrlTextState, 
	       row_ctx->saHpiCtrlTextState_len);
	ctrl_state.StateUnion.Text.Text.DataLength = 
	row_ctx->saHpiCtrlTextState_len;

	/* Datatype */
	ctrl_state.StateUnion.Text.Text.DataType = 
	row_ctx->saHpiCtrlTextType - 1;

	/* language */
	ctrl_state.StateUnion.Text.Text.Language = 
	row_ctx->saHpiCtrlTextLanguage - 1;

	/* type */
	ctrl_state.Type = SAHPI_CTRL_TYPE_TEXT;

	rc = saHpiControlSet(session_id, resource_id, 
			     row_ctx->saHpiCtrlTextNum, 
			     row_ctx->saHpiCtrlTextMode - 1, 
			     &ctrl_state); 

	if (rc != SA_OK) {
		snmp_log (LOG_ERR,
			  "SAHPI_CTRL_TYPE_TEXT: Call to saHpiControlSet failed to set Mode rc: %s.\n",
			  oh_lookup_error(rc));
		DEBUGMSGTL ((AGENT,
			     "SAHPI_CTRL_TYPE_TEXT: Call to saHpiControlSet failed to set Mode rc: %s.\n",
			     oh_lookup_error(rc)));
		return get_snmp_error(rc);
	}

	return SNMP_ERR_NOERROR;
}
Esempio n. 3
0
/*
 * int set_table_ctrl_analog_mode();
 */
int set_table_ctrl_stream (saHpiCtrlStreamTable_context *row_ctx)
{
	SaErrorT            rc = SA_OK;
	SaHpiSessionIdT     session_id;
	SaHpiResourceIdT    resource_id;
	SaHpiCtrlStateT	    ctrl_state;	

	DEBUGMSGTL ((AGENT, "set_table_ctrl_stream_mode, called\n"));	

	if (!row_ctx)
		return AGENT_ERR_NULL_DATA;

	session_id = get_session_id(row_ctx->index.oids[saHpiCtrlStreamDomainId_INDEX]);
	resource_id = row_ctx->index.oids[saHpiCtrlStreamResourceEntryId_INDEX];

	/* repeat */
	ctrl_state.StateUnion.Stream.Repeat = row_ctx->saHpiCtrlStreamRepeat;

	/* stream */
	memset(ctrl_state.StateUnion.Stream.Stream, 0, 
	       sizeof(ctrl_state.StateUnion.Stream.Stream));
	memcpy(ctrl_state.StateUnion.Stream.Stream,
	       row_ctx->saHpiCtrlStreamState, 
	       row_ctx->saHpiCtrlStreamState_len);

	/* stream length */
	ctrl_state.StateUnion.Stream.StreamLength = row_ctx->saHpiCtrlStreamState_len;

	/* type */
	ctrl_state.Type = SAHPI_CTRL_TYPE_STREAM;

	rc = saHpiControlSet(session_id, resource_id, 
			     row_ctx->saHpiCtrlStreamNum, 
			     row_ctx->saHpiCtrlStreamMode - 1, 
			     &ctrl_state); 

	if (rc != SA_OK) {
		snmp_log (LOG_ERR,
			  "SAHPI_CTRL_TYPE_STREAM: Call to saHpiControlSet failed to set Mode rc: %s.\n",
			  oh_lookup_error(rc));
		DEBUGMSGTL ((AGENT,
			     "SAHPI_CTRL_TYPE_STREAM: Call to saHpiControlSet failed to set Mode rc: %s.\n",
			     oh_lookup_error(rc)));
		return get_snmp_error(rc);
	} 

	return SNMP_ERR_NOERROR; 
}
Esempio n. 4
0
SaErrorT setAnalogState(SaHpiSessionIdT sessionId,
			SaHpiResourceIdT resourceId,
			SaHpiCtrlRecT * ctrlRec, SaHpiInt32T value)
{
	SaErrorT status;
	SaHpiCtrlStateT ctrlState;
	SaHpiCtrlNumT ctrlNum = ctrlRec->Num;

	setDefaultCtrlState(ctrlRec, &ctrlState);
	ctrlState.StateUnion.Analog = value;

	status = saHpiControlSet(sessionId, resourceId, ctrlNum,
				 SAHPI_CTRL_MODE_MANUAL, &ctrlState);

	return status;
}
Esempio n. 5
0
int main(int argc, char **argv)
{
	SaHpiSessionIdT sid = 0;
	SaHpiCtrlModeT mode;
	SaHpiCtrlStateT state;
	SaErrorT rc = SA_OK;

        rc = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sid, NULL);
	if (rc != SA_OK) {
		dbg("Failed to open session");
                return -1;
	}

	rc = saHpiDiscover(sid);
	if (rc != SA_OK) {
		dbg("Failed to run discover");
                return -1;
	}

        /* get the resource id of the chassis */
        SaHpiResourceIdT resid = get_resid(sid, SAHPI_ENT_SYSTEM_CHASSIS);
        if (resid == 0) {
		dbg("Couldn't find the resource id of the chassis");
                return -1;
	}

        /* get control */
        rc = saHpiControlGet(sid, resid, 1, &mode, &state);
        if (rc != SA_OK) {
		dbg("Couldn't get control type");
		dbg("Error %s",oh_lookup_error(rc));
                return -1;
	}

        /* set control */
        rc = saHpiControlSet(sid, resid, 1, mode, &state);
        if (rc != SA_OK) {
		dbg("Couldn't set control");
		dbg("Error %s",oh_lookup_error(rc));
                return -1;
	}

	return 0;
}
Esempio n. 6
0
int set_table_ctrl_analog_state (saHpiCtrlAnalogTable_context *row_ctx)
{

    DEBUGMSGTL ((AGENT, "set_table_ctrl_analog_state, called\n"));

    SaErrorT            rc = SA_OK;
    SaHpiSessionIdT     session_id;
    SaHpiResourceIdT    resource_id;
    SaHpiCtrlStateT	    ctrl_state;

    if (!row_ctx)
        return AGENT_ERR_NULL_DATA;

    session_id = get_session_id(row_ctx->index.oids[saHpiDomainId_INDEX]);
    resource_id = row_ctx->index.oids[saHpiResourceEntryId_INDEX];

    ctrl_state.StateUnion.Analog = row_ctx->saHpiCtrlAnalogState;
    ctrl_state.Type = SAHPI_CTRL_TYPE_ANALOG;

    rc = saHpiControlSet(session_id, resource_id,
                         row_ctx->saHpiCtrlAnalogNum,
                         row_ctx->saHpiCtrlAnalogMode - 1,
                         &ctrl_state);

    if (rc != SA_OK) {
        snmp_log (LOG_ERR,
                  "SAHPI_CTRL_TYPE_ANALOG: Call to saHpiControlSet failed to set State rc: %s.\n",
                  oh_lookup_error(rc));
        DEBUGMSGTL ((AGENT,
                     "SAHPI_CTRL_TYPE_ANALOG: Call to saHpiControlSet failed to set State rc: %s.\n",
                     oh_lookup_error(rc)));
        return get_snmp_error(rc);
    }

    return SNMP_ERR_NOERROR;
}
Esempio n. 7
0
int processCtrlRdr(SaHpiSessionIdT sessionId,
		   SaHpiResourceIdT resourceId,
		   SaHpiRdrT * rdr, SaHpiCtrlRecT * ctrlRec)
{
	SaErrorT status;
	int retval = SAF_TEST_NOTSUPPORT;
	SaHpiCtrlNumT ctrlNum = ctrlRec->Num;
	SaHpiCtrlStateT ctrlState;

	if (isTextControl(ctrlRec) && canSetControlState(ctrlRec)) {

		if (isAscii6DataType(ctrlRec) || isBcdPlusDataType(ctrlRec)
		    || isUnicodeDataType(ctrlRec)) {

			setDefaultCtrlState(ctrlRec, &ctrlState);

			ctrlState.StateUnion.Text.Text.DataLength = 1;
			ctrlState.StateUnion.Text.Text.Data[0] =
			    CARRIAGE_RETURN;

			status = saHpiControlSet(sessionId, resourceId, ctrlNum,
						 SAHPI_CTRL_MODE_MANUAL,
						 &ctrlState);

			if (status == SA_ERR_HPI_INVALID_PARAMS) {
				retval = SAF_TEST_PASS;
			} else {
				retval = SAF_TEST_FAIL;
				e_print(saHpiControlSet,
					SA_ERR_HPI_INVALID_PARAMS, status);
			}
		}
	}

	return retval;
}
Esempio n. 8
0
int main(int argc, char **argv) 
{

	/* ************************
	 * Local variables
	 * ***********************/	 
	int testfail = 0;
	SaErrorT          err;
	SaErrorT expected_err;
	SaHpiResourceIdT  id;
        SaHpiSessionIdT sessionid;
        SaHpiRptEntryT rptentry;
	SaHpiRdrT	rdr;		 
	SaHpiCtrlNumT cid = 1;
	SaHpiCtrlModeT mode = SAHPI_CTRL_MODE_AUTO;
	SaHpiCtrlStateT state;
	SaHpiEntryIdT entryid;
	SaHpiEntryIdT nextentryid;
	SaHpiBoolT foundControl;			
	struct oh_handler_state l_handle;

	/* *************************************	 	 
	 * Find a resource with Control type rdr
	 * ************************************* */
	err = tsetup(&sessionid);
	if (err != SA_OK) {
		printf("Error! Can not open session for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		return -1;
	}
	err = tfind_resource(&sessionid, SAHPI_CAPABILITY_CONTROL, SAHPI_FIRST_ENTRY, &rptentry, SAHPI_TRUE);
	if (err != SA_OK) {
		printf("Can not find a control resource for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		err = tcleanup(&sessionid);
		return SA_OK;
	}
	
	id = rptentry.ResourceId;
	/************************** 
	 * Test: find a control RDR
	 **************************/
	entryid = SAHPI_FIRST_ENTRY;
	foundControl = SAHPI_FALSE;			
	do {
		err = saHpiRdrGet(sessionid,id,entryid,&nextentryid, &rdr);
		if (err == SA_OK)
		{
			if (rdr.RdrType == SAHPI_CTRL_RDR) 
			{
				foundControl = SAHPI_TRUE;
				break;
														
			}
			entryid = nextentryid;
		}
	} while ((err == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) ;

	if (!foundControl) {
		err("Did not find desired resource for test\n");
		return(SA_OK);
	} else {
		cid = rdr.RdrTypeUnion.CtrlRec.Num; 
	}	

	/************************** 
	 * Test 1: Invalid Handle    
	 *************************/
	memset(&l_handle, 0, sizeof(struct oh_handler_state));

	expected_err = SA_ERR_HPI_INVALID_PARAMS;
	err = snmp_bc_set_control_state(NULL, id, cid, mode, &state);
	checkstatus(err, expected_err, testfail);
	
	/************************** 
	 * Test 2: Resource ID with no RPT
	 *************************/

	expected_err = SA_ERR_HPI_INVALID_RESOURCE;
	err = saHpiControlSet(sessionid, 5000, cid, mode, &state);
	checkstatus(err, expected_err, testfail);
	
	/************************** 
	 * Test 3: Control ID with no RDR 
	 *************************/
	expected_err = SA_ERR_HPI_NOT_PRESENT;
	err = saHpiControlSet(sessionid, id, 5000, mode, &state);
	checkstatus(err, expected_err, testfail);
	
	/************************** 
	 * Test 4: NULL state with AUTO mode
	 *************************/
	expected_err = SA_ERR_HPI_READ_ONLY;
	err = saHpiControlSet(sessionid, id, cid, mode, NULL);
	checkstatus(err, expected_err, testfail);
	
	/************************** 
	 * Test 5: NULL state with AUTO mode
	 *************************/
	expected_err = SA_ERR_HPI_INVALID_PARAMS;
	err = saHpiControlSet(sessionid, id, cid, SAHPI_CTRL_MODE_MANUAL, NULL);
	checkstatus(err, expected_err, testfail);
	
	/************************** 
	 * Test 6: Invalid Capability
	 *************************/	
	err = tfind_resource(&sessionid, SAHPI_CAPABILITY_CONTROL, SAHPI_FIRST_ENTRY, &rptentry, SAHPI_FALSE);
	if (err != SA_OK) {
		printf("Error! Can not find resources for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		err = tcleanup(&sessionid);
		return SA_OK;
	}

	expected_err = SA_ERR_HPI_CAPABILITY;
	err = saHpiControlSet(sessionid, rptentry.ResourceId, cid, mode, &state);
	checkstatus(err, expected_err, testfail);

	/***************************
	 * Cleanup after all tests
	 ***************************/
	 err = tcleanup(&sessionid);
	 return testfail;

}
Esempio n. 9
0
static ret_code_t set_control_state(SaHpiSessionIdT sessionid,
	SaHpiResourceIdT resourceid, SaHpiCtrlNumT num)
{
        SaErrorT		rv;
	SaHpiRdrT		rdr;
	SaHpiCtrlRecT		*ctrl;
	SaHpiCtrlTypeT		type;
	SaHpiCtrlStateDigitalT	state_val = 0;
	SaHpiCtrlModeT		mode;
	SaHpiCtrlStateT		state;
	char			buf[SAHPI_MAX_TEXT_BUFFER_LENGTH];
	char			*str;
	int			i, res;

	rv = saHpiRdrGetByInstrumentId(sessionid, resourceid, SAHPI_CTRL_RDR,
		num, &rdr);
	if (rv != SA_OK) {
		printf("saHpiRdrGetByInstrumentId: error: %s\n", oh_lookup_error(rv));
		return(HPI_SHELL_CMD_ERROR);
	};
	memset(&state, 0, sizeof(SaHpiCtrlStateT));
	i = get_string_param("Mode(auto|manual): ", buf, 7);
	if (i != 0) return(HPI_SHELL_CMD_ERROR);
	if (strcmp(buf, "auto") == 0) mode = SAHPI_CTRL_MODE_AUTO;
	else if (strcmp(buf, "manual") == 0) mode = SAHPI_CTRL_MODE_MANUAL;
	else return(HPI_SHELL_CMD_ERROR);
	if (mode == SAHPI_CTRL_MODE_AUTO) {
		rv = saHpiControlSet(sessionid, resourceid, num,
			mode, (SaHpiCtrlStateT *)NULL);
		if (rv != SA_OK) {
			printf("saHpiControlSet: error: %s\n",
				oh_lookup_error(rv));
			return(HPI_SHELL_CMD_ERROR);
		};
		return(HPI_SHELL_OK);
	};
	ctrl = &(rdr.RdrTypeUnion.CtrlRec);
	type = ctrl->Type;
	state.Type = type;
	switch (type) {
		case SAHPI_CTRL_TYPE_DIGITAL:
			i = get_string_param(
				"New state(on|off|pulseon|pulseoff): ", buf, 9);
			if (i != 0) return(HPI_SHELL_CMD_ERROR);
			if (strcmp(buf, "on") == 0) state_val = SAHPI_CTRL_STATE_ON;
			if (strcmp(buf, "off") == 0) state_val = SAHPI_CTRL_STATE_OFF;
			if (strcmp(buf, "pulseon") == 0)
				state_val = SAHPI_CTRL_STATE_PULSE_ON;
			if (strcmp(buf, "pulseoff") == 0)
				state_val = SAHPI_CTRL_STATE_PULSE_OFF;
			state.StateUnion.Digital = state_val;
			break;
		case SAHPI_CTRL_TYPE_DISCRETE:
			i = get_int_param("Value ==> ", &res);
			if (i != 1) {
				printf("Invalid value\n");
				return HPI_SHELL_CMD_ERROR;
			};
			state.StateUnion.Discrete = res;
			break;
		case SAHPI_CTRL_TYPE_ANALOG:
			i = get_int_param("Value ==> ", &res);
			if (i != 1) {
				printf("Invalid value\n");
				return HPI_SHELL_CMD_ERROR;
			};
			state.StateUnion.Analog = res;
			break;
		case SAHPI_CTRL_TYPE_STREAM:
			i = get_string_param("Repeat(yes|no): ", buf, 4);
			if (i != 0) return(HPI_SHELL_CMD_ERROR);
			str = buf;
			while (*str == ' ') str++;
			if (strncmp(str, "yes", 3) == 0)
				state.StateUnion.Stream.Repeat = 1;
			i = get_string_param("Stream: ", buf, 4);
			i = strlen(buf);
			if (i > 4) i = 4;
			state.StateUnion.Stream.StreamLength = i;
			strncpy((char *)(state.StateUnion.Stream.Stream), buf, i);
			break;
		case SAHPI_CTRL_TYPE_TEXT:
			i = get_int_param("Line #: ", &res);
			if (i != 1) {
				printf("Invalid value\n");
				return HPI_SHELL_CMD_ERROR;
			};
			state.StateUnion.Text.Line = res;
			printf("Text: ");
			i = set_text_buffer(&(state.StateUnion.Text.Text));
			if (i != 0) {
				printf("Invalid text\n");
				return(HPI_SHELL_CMD_ERROR);
			};
			break;
		case SAHPI_CTRL_TYPE_OEM:
			i = get_int_param("Manufacturer Id: ", &res);
			if (i != 1) {
				printf("Invalid value\n");
				return HPI_SHELL_CMD_ERROR;
			};
			state.StateUnion.Oem.MId = res;
			memset(state.StateUnion.Oem.Body, 0,
				SAHPI_CTRL_MAX_OEM_BODY_LENGTH);
			i = get_hex_string_param("Oem body: ",
				(char *)(state.StateUnion.Oem.Body),
				SAHPI_CTRL_MAX_OEM_BODY_LENGTH);
			state.StateUnion.Oem.BodyLength = i;
			break;
		default:
			strcpy(buf, "Unknown control type\n");
			return(HPI_SHELL_CMD_ERROR);
	};
	rv = saHpiControlSet(sessionid, resourceid, num,
		SAHPI_CTRL_MODE_MANUAL, &state);
	if (rv != SA_OK) {
		printf("saHpiControlSet: error: %s\n",
			oh_lookup_error(rv));
		return(HPI_SHELL_CMD_ERROR);
	};
	return(HPI_SHELL_OK);
}
Esempio n. 10
0
int main(int argc, char **argv)
{
        int number_resources = 0, modeOption;
        SaErrorT rv;
        SaHpiSessionIdT sessionid;
        SaHpiResourceIdT resourceid;
        SaHpiResourceIdT resourceid_list[RESOURCE_CAP_LENGTH] = {0};
        SaHpiCtrlNumT controlNumber = OA_SOAP_RES_CNTRL_NUM;
        SaHpiCtrlModeT controlMode;
        SaHpiCtrlStateT controlState;
        SaHpiCapabilitiesT capability = SAHPI_CAPABILITY_CONTROL;
        SaHpiCtrlTypeT control_type = SAHPI_CTRL_TYPE_DIGITAL;
        SaHpiRdrT rdr;
        SaHpiCtrlRecT *ctrl;
        SaHpiCtrlRecAnalogT *analog;

        printf("saHpiControlSet: Test for hpi control set function\n");

        rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sessionid, NULL);
        if (rv != SA_OK) {
                printf("saHpiSessionOpen failed with error: %s\n",
                       oh_lookup_error(rv));
                return rv;
        }

        /* Discover the resources with control capability */
        printf("\nListing the resource with control capability\n\n");
        rv = discover_resources(sessionid, capability, resourceid_list,
                                &number_resources);
        if (rv != SA_OK) {
                exit(-1);
        }

        printf("\nPlease enter the resource id: ");
        scanf("%d", &resourceid);

        printf("\nSupported controls on the resource are:");
        if (resourceid == powerSubsystemResId) {
          printf("\nPower mode control(Press 3)");
          printf("\nDynamic power mode control(Press 4)");
          printf("\nPower limit mode control(Press 5)");
          printf("\nStatic power limit control(Press 6)");
          printf("\nDynamic power cap control(Press 7)");
          printf("\nDerated circuit cap control(Press 8)");
          printf("\nRated circuit cap control(Press 9)");
        }
        else {
          printf("\nUID LED control(Press 0)");
          printf("\nPower control(Press 1)");
        }

        printf("\nEnter your option:");
        scanf("%d", &controlNumber);

        if (resourceid == powerSubsystemResId) {
          switch (controlNumber) {
            case OA_SOAP_DYNAMIC_PWR_CNTRL:
              control_type = SAHPI_CTRL_TYPE_DIGITAL;
              break;
            case OA_SOAP_PWR_MODE_CNTRL:
            case OA_SOAP_PWR_LIMIT_MODE_CNTRL:
              control_type = SAHPI_CTRL_TYPE_DISCRETE;
              break;
            case OA_SOAP_STATIC_PWR_LIMIT_CNTRL:
            case OA_SOAP_DYNAMIC_PWR_CAP_CNTRL:
            case OA_SOAP_DERATED_CIRCUIT_CAP_CNTRL:
            case OA_SOAP_RATED_CIRCUIT_CAP_CNTRL:
              control_type = SAHPI_CTRL_TYPE_ANALOG;
              break; 
          }
        }

        printf("Possible control mode options are: \n");
        printf("\tPress 1 for AUTO MODE \n");
        printf("\tPress 2 for MANUAL MODE \n");
        printf("Please enter your option: ");

        scanf("%d", &modeOption);
        if (modeOption == 1)
                controlMode=SAHPI_CTRL_MODE_AUTO;
        else if (modeOption == 2)
                controlMode=SAHPI_CTRL_MODE_MANUAL;
        else {
                printf("Wrong option selected. Exiting");
                exit (-1);
        }

        controlState.Type = control_type;

        switch (control_type) {
          case SAHPI_CTRL_TYPE_DIGITAL:
            printf("Possible control state options are: \n");
            printf("\tPress 1 for ON \n");
            printf("\tPress 2 for OFF \n");
            printf("Please enter your option: ");
            scanf("%d", &modeOption);
            switch (modeOption) {
                    case 1 :
                            controlState.StateUnion.Digital =
                              SAHPI_CTRL_STATE_ON;
                            break;
                    case 2 :
                            controlState.StateUnion.Digital =
                              SAHPI_CTRL_STATE_OFF;
                            break;
                    default :
                            printf("Wrong option selected. Exiting");
                            exit (-1);
            }

            break;
          case SAHPI_CTRL_TYPE_DISCRETE:
            printf("Possible control state options are: \n");
            if (controlNumber == OA_SOAP_PWR_MODE_CNTRL) {
              printf("\tPress 1 for C7000_PWR_NON_REDUNDANT \n");
              printf("\tPress 2 for C7000_PWR_AC_REDUNDANT \n");
              printf("\tPress 3 for C7000_PWR_SUPPLY_REDUNDANT \n");
            } else {
              printf("\tPress 0 for C7000_PWR_LIMIT_NONE \n");
              printf("\tPress 1 for C7000_PWR_LIMIT_STATIC \n");
              printf("\tPress 2 for C7000_PWR_LIMIT_DYNAMIC_CAP \n");
            }
            printf("Please enter your option: ");
            scanf("%d", &modeOption);
            controlState.StateUnion.Discrete = modeOption;
            break;
          case SAHPI_CTRL_TYPE_ANALOG:
            rv = saHpiRdrGetByInstrumentId(sessionid, resourceid,
                                           SAHPI_CTRL_RDR,
                                           controlNumber, &rdr);
            if (rv != SA_OK) {
              printf("Error: cannot get ctrl rdr by instrument id. Exiting");
              exit (-1);
            };
            ctrl = &(rdr.RdrTypeUnion.CtrlRec);
            analog = &(ctrl->TypeUnion.Analog);
            printf("Choose an analog value for the control (range = %d - %d): \
\n", analog->Min, analog->Max);
            scanf("%d", &modeOption);
            controlState.StateUnion.Analog = modeOption;
            break; 
        }

        rv = saHpiControlSet(sessionid, resourceid, controlNumber,
                             controlMode, &controlState);

        /* Print the test case status*/
        if (rv != SA_OK) {
                printf("saHpiControlSet returns %s\n",oh_lookup_error(rv));
                printf("Test case - FAIL\n");
        }
        else
                printf("Test case - PASS\n");

        rv = saHpiSessionClose(sessionid);
        return 0;
}
Esempio n. 11
0
int main(int argc, char **argv) 
{
	int               testfail = 0;
        gchar             *rdr_name;
	SaErrorT          err, expected_err;
	SaHpiCtrlModeT    mode;
	SaHpiCtrlStateT   state;
	SaHpiEntityPathT  ep, vmm_ep;
	SaHpiRdrT         rdr;
        SaHpiRptEntryT    rpt;
        SaHpiSessionIdT   sessionid;

	vmm_ep.Entry[0].EntityType = SAHPI_ENT_SYS_MGMNT_MODULE;
	vmm_ep.Entry[0].EntityLocation = 0;
	vmm_ep.Entry[1].EntityType = SAHPI_ENT_SYSTEM_CHASSIS;
	vmm_ep.Entry[1].EntityLocation = 1;
	vmm_ep.Entry[2].EntityType = SAHPI_ENT_ROOT;
	vmm_ep.Entry[2].EntityLocation = 0;  

	rdr_name = "MM Failover Control";

	/***********************
	 * Find the VMM resource
	 ***********************/
	err = tsetup(&sessionid);
	if (err) {
		printf("Error! Cannot open session for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		return -1;
	}
	
	oh_init_ep(&ep);
	oh_concat_ep(&ep, &vmm_ep);

	err = tfind_resource_by_ep(&sessionid, &ep, SAHPI_FIRST_ENTRY, &rpt);
	if (err) {
		printf("Cannot find resource for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		err = tcleanup(&sessionid);
		return -1;
	}
	
	/**************************
	 * Find MM Failover control
	 **************************/
	err = tfind_rdr_by_name(&sessionid, rpt.ResourceId, rdr_name, &rdr);
	if (err) {
		printf("Cannot find resource for test environment\n");
		printf("       File=%s, Line=%d\n", __FILE__, __LINE__);
		err = tcleanup(&sessionid);
		return -1;
	}

	/***************************
	 * Test: Write Invalid State    
	 ***************************/
	expected_err = SA_ERR_HPI_INVALID_REQUEST;
	state.Type = SAHPI_CTRL_TYPE_DIGITAL;
	state.StateUnion.Digital = SAHPI_CTRL_STATE_OFF;
	err = saHpiControlSet(sessionid, rpt.ResourceId, rdr.RdrTypeUnion.CtrlRec.Num,
			      SAHPI_CTRL_MODE_MANUAL, &state);
	checkstatus(err, expected_err, testfail);

	/**************************
	 * Test: Write Invalid Mode    
	 **************************/
	expected_err = SA_ERR_HPI_READ_ONLY;
	state.Type = SAHPI_CTRL_TYPE_DIGITAL;
	state.StateUnion.Digital = SAHPI_CTRL_STATE_PULSE_ON;
	err = saHpiControlSet(sessionid, rpt.ResourceId, rdr.RdrTypeUnion.CtrlRec.Num,
			      SAHPI_CTRL_MODE_AUTO, &state);
	checkstatus(err, expected_err, testfail);

	/***************************
	 * Test: Write Valid State    
	 ***************************/
	expected_err = SA_OK;
	state.Type = SAHPI_CTRL_TYPE_DIGITAL;
	state.StateUnion.Digital = SAHPI_CTRL_STATE_PULSE_ON;
	err = saHpiControlSet(sessionid, rpt.ResourceId, rdr.RdrTypeUnion.CtrlRec.Num,
			      SAHPI_CTRL_MODE_MANUAL, &state);
	checkstatus(err, expected_err, testfail);

	
	/***********************
	 * Test: Read State/Mode
	 ***********************/
	err = saHpiControlGet(sessionid, rpt.ResourceId, rdr.RdrTypeUnion.CtrlRec.Num, &mode, &state);
	if (mode != SAHPI_CTRL_MODE_MANUAL || state.StateUnion.Digital != SAHPI_CTRL_STATE_OFF) {
	  printf("  Error! Testcase failed. Line=%d\n", __LINE__);
	  printf("State=%s; Mode=%s\n", oh_lookup_ctrlmode(mode),
		 oh_lookup_ctrlstatedigital(state.StateUnion.Digital));
	  return -1;
	}

	/***************************
	 * Cleanup after all tests
	 ***************************/
	 err = tcleanup(&sessionid);
	 return testfail;
}
Esempio n. 12
0
int
main(int argc, char **argv)
{
  int c;
  SaErrorT rv;
  SaHpiSessionIdT sessionid;
  SaHpiRptEntryT rptentry;
  SaHpiEntryIdT rptentryid;
  SaHpiEntryIdT nextrptentryid;
  SaHpiEntryIdT entryid;
  SaHpiEntryIdT nextentryid;
  SaHpiResourceIdT resourceid;
  SaHpiRdrT rdr;
  SaHpiCtrlTypeT  ctltype;
  SaHpiCtrlNumT   ctlnum;
  SaHpiCtrlStateT ctlstate;
  int raw_val = 0;
  int j;
  uchar b = 0;

  printf("%s ver %s\n", argv[0],progver);
  while ( (c = getopt( argc, argv,"rxa:b:c:m:n:p:i:d:o?")) != EOF )
     switch(c) {
          
	case 'c': b = atoi(optarg);      /* set crit alarm value */
		  leds[1].fset = 1; 
		  leds[1].val = b;
                  break;
	case 'm': b = atoi(optarg);      /* set major alarm value */
		  leds[2].fset = 1; 
		  leds[2].val = b;
                  break;
	case 'n': b = atoi(optarg);      /* set minor alarm value */
		  leds[3].fset = 1; 
		  leds[3].val = b;
                  break;
	case 'a': b = atoi(optarg);      /* set disk a fault led */
		  leds[4].fset = 1; 
		  leds[4].val = b;
                  break;
	case 'b': b = atoi(optarg);      /* set disk b fault led */
		  leds[5].fset = 1; 
		  leds[5].val = b;
                  break;
	case 'p': b = atoi(optarg);      /* set power alarm value */
		  leds[0].fset = 1; 
		  leds[0].val = b;
                  break;
	case 'i': fid = atoi(optarg);     /* set chassis id on/off */
		  fsetid = 1;
                  break;
	case 'd': raw_val = atoi(optarg);  /* set raw alarm byte  */
                  break;
	case 'o': fsetid=1; fid=0; 	  /* set all alarms off */
		  for (j = 0; j < NLEDS; j++) { 
			leds[j].fset = 1; 
			leds[j].val = 0; 
		  }
                  break;
	case 'x': fdebug = 1;     break;  /* debug messages */
	default:
                printf("Usage: %s [-a -b -c -i -m -n -p -o -x]\n", argv[0]);
                printf(" where -c1  sets Critical Alarm on\n");
                printf("       -c0  sets Critical Alarm off\n");
                printf("       -m1  sets Major Alarm on\n");
                printf("       -m0  sets Major Alarm off\n");
                printf("       -n1  sets Minor Alarm on\n");
                printf("       -n0  sets Minor Alarm off\n");
                printf("       -p1  sets Power Alarm on\n");
                printf("       -p0  sets Power Alarm off\n");
                printf("       -i5  sets Chassis ID on for 5 sec\n");
                printf("       -i0  sets Chassis ID off\n");
                printf("       -a1  sets Disk A fault on\n");
                printf("       -a0  sets Disk A fault off\n");
                printf("       -b1  sets Disk B fault on\n");
                printf("       -b0  sets Disk B fault off\n");
                printf("       -d[byte] sets raw Alarm byte\n");
                printf("       -o   sets all Alarms off\n");
                printf("       -x   show eXtra debug messages\n");
		exit(1);
     }

  rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL);
  if (rv != SA_OK) {
	printf("saHpiSessionOpen error %d\n",rv);
	exit(-1);
	}
  rv = saHpiDiscover(sessionid);
  if (fdebug) printf("saHpiDiscover complete, rv = %d\n",rv);

  /* walk the RPT list */
  rptentryid = SAHPI_FIRST_ENTRY;
  while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY))
  {
     rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry);
     if (rv != SA_OK) printf("RptEntryGet: rv = %d\n",rv);
     if (rv == SA_OK) {
	/* Walk the RDR list for this RPT entry */
	entryid = SAHPI_FIRST_ENTRY;
	resourceid = rptentry.ResourceId;
	/* 
	 * Don't stringify here, since OpenHPI returns a valid string, but
	 * a DataLength of zero here (for processor, bios).
	 * rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0;
	 */
	//if (fdebug) 
	   printf("rptentry[%d] resourceid=%d tlen=%d tag: %s\n",
		entryid, resourceid, rptentry.ResourceTag.DataLength, 
		rptentry.ResourceTag.Data);
	while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY))
	{
		rv = saHpiRdrGet(sessionid,resourceid,
				entryid,&nextentryid, &rdr);
  		if (fdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv);
		if (rv == SA_OK) {
		   if (rdr.RdrType == SAHPI_CTRL_RDR) { 
			/*type 1 includes alarm LEDs*/
			ctlnum = rdr.RdrTypeUnion.CtrlRec.Num;
			rdr.IdString.Data[rdr.IdString.DataLength] = 0;
			if (fdebug) printf("Ctl[%d]: %d %d %s\n",
				ctlnum, rdr.RdrTypeUnion.CtrlRec.Type,
				rdr.RdrTypeUnion.CtrlRec.OutputType,
				rdr.IdString.Data);
			rv = saHpiControlTypeGet(sessionid,resourceid,
					ctlnum,&ctltype);
  			if (fdebug) printf("saHpiControlTypeGet[%d] rv = %d, type = %d\n",ctlnum,rv,ctltype);
			rv = saHpiControlGet(sessionid, resourceid, ctlnum,
					NULL, &ctlstate);
  			if (fdebug) 
			   printf("saHpiControlStateGet[%d] rv = %d v = %x\n",
				ctlnum,rv,ctlstate.StateUnion.Digital);
			printf("RDR[%d]: ctltype=%d:%d oem=%02x %s  \t",
				rdr.RecordId, 
				rdr.RdrTypeUnion.CtrlRec.Type,
				rdr.RdrTypeUnion.CtrlRec.OutputType,
				rdr.RdrTypeUnion.CtrlRec.Oem,
				rdr.IdString.Data);
			if (rv == SA_OK) {
			   if (ctlstate.Type == SAHPI_CTRL_TYPE_ANALOG)
			        b = 2;  /*Identify*/
			   else {
			      b = ctlstate.StateUnion.Digital;
			      if (b > 2) b = 2; 
			   }
			   printf("state = %s\n",states[b]);
			} else { printf("\n"); }
			if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_ANALOG &&
			    rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) {
			    /* This is a Chassis Identify */
			    if (fsetid) {
				printf("Setting ID led to %d sec\n", fid);
				ctlstate.Type = SAHPI_CTRL_TYPE_ANALOG;
				ctlstate.StateUnion.Analog = fid;
				rv = saHpiControlSet(sessionid, resourceid,
						ctlnum, SAHPI_CTRL_MODE_MANUAL,
						&ctlstate);
				printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv);
			    }
			} else 
			if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_DIGITAL &&
			    (rdr.RdrTypeUnion.CtrlRec.Oem & 0xf0) == SAHPI_OEM_ALARM_LED &&
			    rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) {
				/* this is an alarm LED */
				b = (uchar)rdr.RdrTypeUnion.CtrlRec.Oem & 0x0f;
				if ((b < NLEDS) && leds[b].fset) {
				   printf("Setting alarm led %d to %d\n",b,leds[b].val);
				   if (leds[b].val == 0) 
					ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_OFF;
				   else 
					ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_ON;
				   rv = saHpiControlSet(sessionid, resourceid,
						ctlnum, SAHPI_CTRL_MODE_MANUAL,
						&ctlstate);
  				   /* if (fdebug)  */
					printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv);
				}
			}
			else if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_DIGITAL &&
			    (rdr.RdrTypeUnion.CtrlRec.Oem & 0xf0) == SAHPI_OEM_DISK_LED &&
			    rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) {
				/* this is a disk LED */
				b = (uchar)rdr.RdrTypeUnion.CtrlRec.Oem & 0x0f;
				if ((b < NLEDS) && leds[b].fset) {
				   printf("Setting disk led %d to %d\n",b,leds[b].val);
				   if (leds[b].val == 0) 
					ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_OFF;
				   else 
					ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_ON;
				   rv = saHpiControlSet(sessionid, resourceid,
						ctlnum, SAHPI_CTRL_MODE_MANUAL,
						&ctlstate);
				   printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv);
				}
			}

			rv = SA_OK;  /* ignore errors & continue */
		    }
		    j++;
		    entryid = nextentryid;
		}
	}
	rptentryid = nextrptentryid;
     }
  }
 
  rv = saHpiSessionClose(sessionid);

  exit(0);
  return(0);
}