int Ev::outunit_connect( pwr_tObjid user) { int sts; // Wait for mh has flagged initizated mh_UtilWaitForMh(); sts = mh_OutunitConnect( user, mh_eOutunitType_Operator, 0, mh_ack_bc, mh_alarm_bc, mh_block_bc, mh_cancel_bc, mh_clear_alarmlist_bc, mh_clear_blocklist_bc, mh_info_bc, mh_return_bc ); if (EVEN(sts)) return sts; connected = 1; return XNAV__SUCCESS; }
JNIEXPORT jobject JNICALL Java_jpwr_rt_Mh_outunitConnect (JNIEnv *env, jclass obj, jobject objid_obj) { int sts; jclass PwrtObjid_id; jmethodID PwrtObjid_getOix; jmethodID PwrtObjid_getVid; jmethodID PwrtObjid_cid; pwr_tObjid user; jclass pwrtStatus_id; jmethodID pwrtStatus_cid; jobject return_obj; jint jsts; //hämta upp classid och sedan pekare till konstruktorn för PwrtStatus pwrtStatus_id = (*env)->FindClass( env, "jpwr/rt/PwrtStatus"); pwrtStatus_cid = (*env)->GetMethodID( env, pwrtStatus_id, "<init>", "(I)V"); //hämta upp classid och sedan pekare till konstruktorn för PwrtObjid PwrtObjid_id = (*env)->FindClass( env, "jpwr/rt/PwrtObjid"); if(PwrtObjid_id == NULL) printf("Pwrtobjid_id är NULL"); PwrtObjid_cid = (*env)->GetMethodID( env, PwrtObjid_id, "<init>", "(II)V"); if(PwrtObjid_cid == NULL) printf("Pwrtobjid_cid är NULL"); //hämta pekare till getOix och getVid i PwrtObjid PwrtObjid_getOix = (*env)->GetMethodID( env, PwrtObjid_id, "getOix", "()I"); if(PwrtObjid_getOix == NULL) printf("Pwrtobjid_getoix är NULL"); PwrtObjid_getVid = (*env)->GetMethodID( env, PwrtObjid_id, "getVid", "()I"); if(PwrtObjid_getVid == NULL) printf("Pwrtobjid_getVid är NULL"); //hämta oix och vid för objektet som skickats med från anroparen user.oix = (*env)->CallIntMethod( env, objid_obj, PwrtObjid_getOix); user.vid = (*env)->CallIntMethod( env, objid_obj, PwrtObjid_getVid); //gör connect sts = mh_OutunitConnect( user, mh_eOutunitType_Operator, mh_mOutunitFlags_ReadWait, ev_mh_ack_bc, ev_mh_alarm_bc, NULL, NULL, ev_mh_clear_alarmlist_bc, NULL, ev_mh_info_bc, ev_mh_return_bc ); jsts = (jint) sts; //skapa returobjekt return_obj = (*env)->NewObject( env, pwrtStatus_id, pwrtStatus_cid, jsts); return return_obj; }
int main(int argc, char *argv[]) { pwr_tStatus sts; pwr_tObjid Object; pwr_tClassId Class; mh_eOutunitType Type; mh_mOutunitFlags Flags; pwr_tInt32 TenthsOfSeconds = 10; pwr_tInt32 TimerId = 10; sts = gdh_Init("pwr_epri"); if (EVEN(sts)) { exit (sts); } if (argc > 1) { if (strcmp(argv[1], "-t") == 0) { /* test mode */ Object = pwr_cNObjid; Type = mh_eOutunitType_Logger; Flags = mh_mOutunitFlags_ReadWait; } else { Type = mh_eOutunitType_Printer; Flags = mh_mOutunitFlags_ReadWait; strcpy(EventPrinter ,argv[1]); sts = gdh_NameToObjid(argv[1], &Object); if (EVEN(sts)) { printf("%%PRI-E-NOVALID_EVENTPRINT. No valid EventPrinter object\n"); exit(sts); } sts = gdh_GetObjectClass(Object , &Class); if (Class != pwr_cClass_EventPrinter) { printf("%%PRI-E-NOVALID_EVENTPRINT. EventPrinter object, wrong class\n"); exit(sts); } } } else { printf("%%PRI-E-NO_EVENT_PRINTER. No EventPrinter object\n"); exit(2); } sts = mh_OutunitConnect( Object, Type, Flags, (mh_cbOutunitAck)PrintEvent, (mh_cbOutunitAlarm)PrintEvent, (mh_cbOutunitBlock)PrintEvent, (mh_cbOutunitCancel)PrintEvent, NULL, NULL, (mh_cbOutunitInfo)PrintEvent, (mh_cbOutunitReturn)PrintEvent, NULL ); if (EVEN(sts)) { printf("%%PRI-E-CONNECT. Could not connect Outunit to message handler.\n"); exit(sts); } if (Type == mh_eOutunitType_Printer) { sts = gdh_GetObjectInfo(EventPrinter, &EventPrinterObj, sizeof(EventPrinterObj) ); if (EVEN(sts)) { printf("%%PRI-E-EVENTPRINT Cannot get EventPrinter object\n"); exit(sts); } if ((Printer = fopen(EventPrinterObj.DeviceName, "w")) == NULL) { printf("%%PRI-E-NOPRINT Cannot open printer: %s\n", Printer); exit(1); } if (EventPrinterObj.RowSize == 0) EventPrinterObj.RowSize = 80; } else { #if 0 sts = mh_OutunitSetTimer(&TenthsOfSeconds, &TimerId); #endif Printer = stdout; EventPrinterObj.RowSize = 80; } for(;;) { sts = mh_OutunitReceive(); } }
void rt_post::open() { pwr_tStatus sts; pwr_tObjid oid; pwr_tFileName filename; // Open server configuration object PostConfig sts = gdh_GetClassList( pwr_cClass_PostConfig, &oid); if ( ODD(sts)) { sts = gdh_ObjidToPointer( oid, (void **)&conf); if ( EVEN(sts)) throw co_error( sts); aproc_RegisterObject( oid); } else { errh_Info( "No Post configuration"); errh_SetStatus( 0); exit(0); } conf->Status = PWR__SRVSTARTUP; // Connect to mh mh_UtilWaitForMh(); sts = mh_OutunitConnect( oid, mh_eOutunitType_Post, 0, mh_ack_bc, mh_alarm_bc, mh_block_bc, mh_cancel_bc, mh_clear_alarmlist_bc, mh_clear_blocklist_bc, mh_info_bc, mh_return_bc, NULL ); if ( EVEN(sts)) { errh_Error( "Post terminated: %m", sts); conf->Status = sts; exit(0); } // Load user database sts = gdh_GetObjectInfo( "pwrNode-System.SystemGroup", &systemgroup, sizeof(systemgroup)); if ( EVEN(sts)) { errh_Error( "Post terminated: %m", sts); conf->Status = sts; exit(0); } udb = new GeUser(); sts = dcli_get_defaultfilename( user_cFilename, filename, ""); udb->load( filename); conf->Status = PWR__SRUN; }
int main () { pwr_tStatus sts; pwr_tObjid oid; qcom_sQid my_q = qcom_cNQid; qcom_sGet get; pwr_tBoolean firstTime = TRUE; pwr_tUInt32 nrOfEvents = 0; pwr_tUInt32 nrOfKeys = 0; errh_Init("pwr_elog", errh_eAnix_elog); errh_SetStatus( PWR__SRVSTARTUP); memset(&lHelCB, 0, sizeof(lHelCB)); /* Declare process */ sts = gdh_Init("pwr_elog"); If_Error_Log_Exit(sts, "gdh_Init"); Init(); /* Create queue for receival of events */ if (!qcom_CreateQ(&sts, &my_q, NULL, "events")) { errh_Fatal("qcom_CreateQ, %m", sts); errh_SetStatus( PWR__APPLTERM); exit(sts); } if (!qcom_Bind(&sts, &my_q, &qcom_cQini)) { errh_Fatal("qcom_Bind(Qini), %m", sts); errh_SetStatus( PWR__APPLTERM); exit(-1); } oid.vid = lHelCB.Nid; oid.oix = pwr_cNVolumeId; sts = mh_OutunitConnect( oid, mh_eOutunitType_Logger, mh_mOutunitFlags_ReadWait, (mh_cbOutunitAck)Insert, (mh_cbOutunitAlarm)Insert, (mh_cbOutunitBlock)Insert, (mh_cbOutunitCancel)Insert, NULL, NULL, (mh_cbOutunitInfo)Insert, (mh_cbOutunitReturn)Insert, NULL ); If_Error_Log_Exit(sts, "mh_OutunitConnect"); sts = mh_OutunitSetTimeout(lHelCB.ScanTime); errh_SetStatus( PWR__SRUN); for (;;) { sts = mh_OutunitReceive(); if (EVEN(sts) && sts != MH__TMO) Log_Error(sts, "mh_OutunitReceive"); Store(&firstTime, &nrOfEvents, &nrOfKeys); get.data = NULL; qcom_Get(&sts, &my_q, &get, 0); if (sts != QCOM__TMO && sts != QCOM__QEMPTY) { if (get.type.b == qcom_eBtype_event) { qcom_sEvent *ep = (qcom_sEvent*) get.data; ini_mEvent new_event; if (get.type.s == qcom_cIini) { new_event.m = ep->mask; if (new_event.b.terminate) { errh_SetStatus( PWR__APPLTERM); exit(0); } } } qcom_Free(&sts, get.data); } aproc_TimeStamp( lHelCB.ScanTime/1000, 5.0); } }