示例#1
0
static pwr_tStatus
restart (
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;
  char time[24];
  lst_sEntry	*pl;
  ini_sProc	*pp;

  ini_CheckContext(&sts, cp);

  ini_ReadBootFile(&sts, cp);
  ini_CheckNode(&sts, cp);

  checkErrors(cp);

  if (cp->flags.b.verbose)
    logCardinality(cp);

  qcom_SignalAnd(&sts, &qcom_cQini, 0);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapInit);

  ini_ReloadNode(&sts, cp);

  if (cp->flags.b.verbose)
    logChanges(cp);

  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_rebuildInit);
  ini_RebuildNode(&sts, cp);
  ini_DecodeBodies(&sts, cp, 0);
  ini_DecodeBodies(&sts, cp, 1);

  if (cp->flags.b.verbose)
    errh_LogInfo(&cp->log, "Update bodies of io objects");
  ini_UpdateBodies(&sts, cp, 1);
  io_init_signals();

  ini_ProcTable(&sts, cp);

  // ini_ProcLoad(&sts, cp, cp->plc);
  // ini_ProcStart(&sts, cp, cp->plc);
  ini_ProcIter(&sts, cp, proc_mProcess_user, ini_mProc_plc, ini_ProcLoad);
  ini_ProcIter(&sts, cp, proc_mProcess_user, ini_mProc_plc, ini_ProcStart);


  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcInit);
  qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_newPlcInitDone | cp->plc_sigmask, qcom_cTmoEternal);
  errh_LogInfo(&cp->log, "Entering time critical period, stopping old PLC");
  qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop);
  qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone | cp->plc_sigmask, qcom_cTmoEternal);
  qcom_SignalAnd(&sts, &qcom_cQini, ~ini_mEvent_oldPlcStop);

  ini_UpdateBodies(&sts, cp, 0);

  qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcStart);
  qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal);
  errh_LogInfo(&cp->log, "Time critical period over, new PLC is running");
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapDone);
  
  for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL, pl, &pl)) {
    if ( pp->flags.m & ini_mProc_plc && pp->objectp) {
      pwr_sClass_PlcProcess *plc = pp->objectp;

      time_GetTime(&plc->LastChgTime);
      if ( time_Dcomp(&plc->StartTime, &plc->StopTime) == 1)
	time_Dsub(&plc->StallTime, &plc->StartTime, &plc->StopTime);
      else
	plc->StallTime = pwr_cNDeltaTime;
      time_DtoAscii(&plc->StallTime, 1, time, sizeof(time));
      cp->np->RestartStallTime = plc->StallTime;
    }
  }
  cp->log.put.type.s = 2;
  errh_LogInfo(&cp->log, "IO stall time: %s", time);

  ini_FreeBodies(&sts, cp, 0);
  ini_FreeBodies(&sts, cp, 1);

  return sts;
}
示例#2
0
int ItemLocal::open_attributes( TblNav *tblnav, double x, double y)
{
  double	node_x, node_y;

  brow_GetNodePosition( node, &node_x, &node_y);

  if ( brow_IsOpen( node)) {
    // Close
    brow_SetNodraw( tblnav->brow->ctx);
    brow_CloseNode( tblnav->brow->ctx, node);
    brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_leaf);
    brow_ResetOpen( node, tblnav_mOpen_All);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  else {
    char value[256];
    char txt[80];

    brow_SetNodraw( tblnav->brow->ctx);

    
    new ItemLocalAttr( tblnav, "Description", item.description, node, flow_eDest_IntoLast);

    strcpy( value, "");
    cdh_ObjidToString( value, item.oid, 1);
    new ItemLocalAttr( tblnav, "Oid", value, node, flow_eDest_IntoLast);

    new ItemLocalAttr( tblnav, "Object", item.oname, node, flow_eDest_IntoLast);

    time_DtoAscii( &item.storagetime, 0, value, sizeof(value));
    new ItemLocalAttr( tblnav, "StorageTime", value, node, flow_eDest_IntoLast);

    time_AtoAscii( &item.creatime, time_eFormat_DateAndTime, value, sizeof(value));
    new ItemLocalAttr( tblnav, "CreationTime", value, node, flow_eDest_IntoLast);

    time_AtoAscii( &item.modtime, time_eFormat_DateAndTime, value, sizeof(value));
    new ItemLocalAttr( tblnav, "ModificationTime", value, node, flow_eDest_IntoLast);

    sprintf( value, "%f", item.scantime);
    new ItemLocalAttr( tblnav, "ScanTime", value, node, flow_eDest_IntoLast);

    strcpy( value, "");
    if ( item.options & pwr_mSevOptionsMask_PosixTime)
      strcat( value, " PosixTime");
    if ( item.options & pwr_mSevOptionsMask_HighTimeResolution)
      strcat( value, " HighTimeResolution");
    if ( item.options & pwr_mSevOptionsMask_ReadOptimized)
      strcat( value, " ReadOptimized");
    if ( item.options & pwr_mSevOptionsMask_UseDeadBand)
      strcat( value, " UseDeadBand");
    new ItemLocalAttr( tblnav, "Options", value, node, flow_eDest_IntoLast);

    sprintf( value, "%f", item.deadband);
    new ItemLocalAttr( tblnav, "Deadband", value, node, flow_eDest_IntoLast);

    for ( int i = 0; i < (int)item.objectattrlist.size(); i++) {
      sprintf( txt, "Attr[%d].Name", i);
      new ItemLocalAttr( tblnav, txt, item.objectattrlist[i].aname, node, flow_eDest_IntoLast);

      switch ( item.objectattrlist[i].type) {
      case pwr_eType_Int64: strcpy( value, "Int64"); break;
      case pwr_eType_Int32: strcpy( value, "Int32"); break;
      case pwr_eType_Int16: strcpy( value, "Int16"); break;
      case pwr_eType_Int8: strcpy( value, "Int8"); break;
      case pwr_eType_UInt64: strcpy( value, "UInt64"); break;
      case pwr_eType_UInt32: strcpy( value, "UInt32"); break;
      case pwr_eType_UInt16: strcpy( value, "UInt16"); break;
      case pwr_eType_UInt8: strcpy( value, "UInt8"); break;
      case pwr_eType_Boolean: strcpy( value, "Boolean"); break;
      case pwr_eType_Char: strcpy( value, "Char"); break;
      case pwr_eType_Float32: strcpy( value, "Float32"); break;
      case pwr_eType_Float64: strcpy( value, "Float64"); break;
      case pwr_eType_String: strcpy( value, "String"); break;
      case pwr_eType_Time: strcpy( value, "Time"); break;
      case pwr_eType_DeltaTime: strcpy( value, "DeltaTime"); break;
      default: strcpy( value, "Unknown");
      }
      sprintf( txt, "Attr[%d].DataType", i);
      new ItemLocalAttr( tblnav, txt, value, node, flow_eDest_IntoLast);

      sprintf( txt, "Attr[%d].DataSize", i);
      sprintf( value, "%d", item.objectattrlist[i].size);
      new ItemLocalAttr( tblnav, txt, value, node, flow_eDest_IntoLast);
    
      sprintf( txt, "Attr[%d].Unit", i);
      new ItemLocalAttr( tblnav, txt, item.objectattrlist[i].unit, node, flow_eDest_IntoLast);
    }
    brow_SetOpen( node, tblnav_mOpen_Attributes);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  return 1;
}
示例#3
0
static void  attrvalue_to_string( int type_id, void *value_ptr, 
	char *str, int size, int *len, char *format)
{
  pwr_tObjid		objid;
  pwr_sAttrRef		*attrref;
  int			sts;
  char			timstr[64];

  if ( value_ptr == 0)
  {
    strcpy( str, "UNDEFINED");
    return;
  }

  switch ( type_id )
  {
    case pwr_eType_Boolean:
    {
      if ( !format)
        *len = sprintf( str, "%d", *(pwr_tBoolean *)value_ptr);
      else
        *len = sprintf( str, format, *(pwr_tBoolean *)value_ptr);
      break;
    }
    case pwr_eType_Float32:
    {
      if ( !format)
        *len = sprintf( str, "%f", *(float *)value_ptr);
      else
        *len = sprintf( str, format, *(float *)value_ptr);
      break;
    }
    case pwr_eType_Float64:
    {
      if ( !format)
        *len = sprintf( str, "%f", *(double *)value_ptr);
      else
        *len = sprintf( str, format, *(double *)value_ptr);
      break;
    }
    case pwr_eType_Char:
    {
      if ( !format)
        *len = sprintf( str, "%c", *(char *)value_ptr);
      else
        *len = sprintf( str, format, *(char *)value_ptr);
      break;
    }
    case pwr_eType_Int8:
    {
      if ( !format)
        *len = sprintf( str, "%d", *(char *)value_ptr);
      else
        *len = sprintf( str, format, *(char *)value_ptr);
      break;
    }
    case pwr_eType_Int16:
    {
      if ( !format)
        *len = sprintf( str, "%hd", *(short *)value_ptr);
      else
        *len = sprintf( str, format, *(short *)value_ptr);
      break;
    }
    case pwr_eType_Int32:
    {
      if ( !format)
        *len = sprintf( str, "%d", *(int *)value_ptr);
      else
        *len = sprintf( str, format, *(int *)value_ptr);
      break;
    }
    case pwr_eType_Int64:
    {
      if ( !format)
        *len = sprintf( str, pwr_dFormatInt64, *(pwr_tInt64 *)value_ptr);
      else
        *len = sprintf( str, format, *(pwr_tInt64 *)value_ptr);
      break;
    }
    case pwr_eType_UInt8:
    {
      if ( !format)
        *len = sprintf( str, "%d", *(unsigned char *)value_ptr);
      else
        *len = sprintf( str, format, *(unsigned char *)value_ptr);
      break;
    }
    case pwr_eType_UInt16:
    {
      if ( !format)
        *len = sprintf( str, "%hd", *(unsigned short *)value_ptr);
      else
        *len = sprintf( str, format, *(unsigned short *)value_ptr);
      break;
    }
    case pwr_eType_UInt32:
    case pwr_eType_Mask:
    case pwr_eType_Enum:
    {
      if ( !format)
        *len = sprintf( str, "%d", *(unsigned int *)value_ptr);
      else
        *len = sprintf( str, format, *(unsigned int *)value_ptr);
      break;
    }
    case pwr_eType_UInt64:
    {
      if ( !format)
        *len = sprintf( str, pwr_dFormatUInt64, *(pwr_tUInt64 *)value_ptr);
      else
        *len = sprintf( str, format, *(pwr_tUInt64 *)value_ptr);
      break;
    }
    case pwr_eType_String:
    {
      strncpy( str, (char *)value_ptr, size);
      str[size-1] = 0;
      *len = strlen(str);
      break;
    }
    case pwr_eType_Objid:
    {
      pwr_tOName hiername;

      objid = *(pwr_tObjid *)value_ptr;
      if ( !objid.oix)
        sts = gdh_ObjidToName ( objid, hiername, sizeof(hiername), 
			 cdh_mName_volumeStrict);
      else
        sts = gdh_ObjidToName ( objid, hiername, sizeof(hiername), 
		cdh_mNName);
      if (EVEN(sts))
      {
        strcpy( str, "");
        *len = 0;
        break;
      }
      *len = sprintf( str, "%s", hiername);
      break;
    }
    case pwr_eType_AttrRef:
    {
      pwr_tAName hiername;

      attrref = (pwr_sAttrRef *) value_ptr;
      sts = gdh_AttrrefToName ( attrref, hiername, sizeof(hiername), cdh_mNName);
      if (EVEN(sts))
      {
        strcpy( str, "");
        *len = 0;
        break;
      }
      *len = sprintf( str, "%s", hiername);
      break;
    }
    case pwr_eType_Time:
    {
      sts = time_AtoAscii( (pwr_tTime *) value_ptr, time_eFormat_DateAndTime, 
		timstr, sizeof(timstr));
      if ( EVEN(sts))
        strcpy( timstr, "-");
      *len = sprintf( str, "%s", timstr);
      break;
    }
    case pwr_eType_DeltaTime:
    {
      sts = time_DtoAscii( (pwr_tDeltaTime *) value_ptr, 1, 
		timstr, sizeof(timstr));
      if ( EVEN(sts))
        strcpy( timstr, "Undefined time");
      *len = sprintf( str, "%s", timstr);
      break;
    }
    case pwr_eType_ObjectIx:
    {
      *len = sprintf( str, "%s", cdh_ObjectIxToString( NULL, 
		*(pwr_tObjectIx *) value_ptr, 1));
      break;
    }
    case pwr_eType_ClassId:
    {
      pwr_tOName hiername;

      objid = cdh_ClassIdToObjid( *(pwr_tClassId *) value_ptr);
      sts = gdh_ObjidToName ( objid, hiername, sizeof(hiername), cdh_mNName);
      if (EVEN(sts))
      {
        strcpy( str, "");
        *len = 0;
        break;
      }
      *len = sprintf( str, "%s", hiername);
      break;
    }
    case pwr_eType_TypeId:
    {
      pwr_tOName hiername;

      objid = cdh_TypeIdToObjid( *(pwr_tTypeId *) value_ptr);
      sts = gdh_ObjidToName ( objid, hiername, sizeof(hiername), cdh_mNName);
      if (EVEN(sts))
      {
        strcpy( str, "");
        *len = 0;
        break;
      }
      *len = sprintf( str, "%s", hiername);
      break;
    }
    case pwr_eType_VolumeId:
    {
      *len = sprintf( str, "%s", cdh_VolumeIdToString( NULL, 
		*(pwr_tVolumeId *) value_ptr, 1, 0));
      break;
    }
    case pwr_eType_RefId:
    {
      *len = sprintf( str, "%s", cdh_SubidToString( NULL, 
		*(pwr_tSubid *) value_ptr, 1));
      break;
    }

  }
}
示例#4
0
int sev_repair::list( char *table)
{
  int found = 0;
  char timstr[40];

  for ( unsigned int i = 0; i < m_db->m_items.size(); i++) {
    if ( cdh_NoCaseStrcmp( table, m_db->m_items[i].tablename) == 0) {
      printf( "-- %s\n", m_db->m_items[i].tablename);
      printf( "    Object:            %s\n", m_db->m_items[i].oname);
      for ( int j = 0; j < (int)m_db->m_items[i].attr.size(); j++) {
	printf( "    Attribute:         %s ", m_db->m_items[i].attr[j].aname);
	for ( int k = 0; k < 19 - (int)strlen( m_db->m_items[i].attr[j].aname); k++)
	  printf( " ");
	switch ( m_db->m_items[i].attr[j].type) {
	case pwr_eType_Boolean:
	  printf( "Boolean\n");
	  break;
	case pwr_eType_Float32:
	  printf( "Float32\n");
	  break;
	case pwr_eType_Float64:
	  printf( "Float64\n");
	  break;
	case pwr_eType_Int64:
	  printf( "Int64\n");
	  break;
	case pwr_eType_Int32:
	  printf( "Int32\n");
	  break;
	case pwr_eType_Int16:
	  printf( "Int16\n");
	  break;
	case pwr_eType_Int8:
	  printf( "Int8\n");
	  break;
	case pwr_eType_UInt64:
	  printf( "UInt64\n");
	  break;
	case pwr_eType_UInt32:
	  printf( "UInt32\n");
	  break;
	case pwr_eType_UInt16:
	  printf( "UInt16\n");
	  break;
	case pwr_eType_UInt8:
	  printf( "UInt8\n");
	  break;
	case pwr_eType_String:
	  printf( "String\n");
	  break;
	default:
	  printf( "Unknown\n");
	}
      }
      time_AtoAscii( &m_db->m_items[i].creatime, time_eFormat_DateAndTime, timstr, sizeof(timstr));
      printf( "    Creation time:     %s\n", timstr);
      time_AtoAscii( &m_db->m_items[i].modtime, time_eFormat_DateAndTime, timstr, sizeof(timstr));
      printf( "    Modification time: %s\n", timstr);
      time_DtoAscii( &m_db->m_items[i].storagetime, time_eFormat_DateAndTime, timstr, sizeof(timstr));
      printf( "    Storage time:      %s\n", timstr);
      printf( "    Scantime:          %f\n", m_db->m_items[i].scantime);
      printf( "    Deadband:          %f\n", m_db->m_items[i].deadband);
      printf( "    Options:           ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_PosixTime)
	printf( "PosixTime ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_HighTimeResolution)
	printf( "HighTimeResoltion ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_ReadOptimized)
	printf( "ReadOptimized ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_UseDeadBand)
	printf( "UseDeadBand ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_Parameter)
	printf( "Parameter ");
      if ( m_db->m_items[i].options & pwr_mSevOptionsMask_Event)
	printf( "Event ");
      printf( "\n");
      found = 1;
      break;
    }
  }
  if ( !found)
    printf( "** No such table\n");
  return 1;
}