Exemple #1
0
static void dump_ScanList(const ScanList *list, int level)
{
    const TagInfo *info;
    char      tsString[50];
    printf("Scanlist %g secs @ 0x%lX:\n",
           list->period, (unsigned long)list);
    printf("  Status        : %s\n",
           (list->enabled ? "enabled" : "DISABLED"));
    epicsTimeToStrftime(tsString, sizeof(tsString),
                        "%Y/%m/%d %H:%M:%S.%04f", &list->scan_time);
    printf("  Last scan     : %s\n", tsString);
    if (level > 4)
    {
        printf("  Errors        : %u\n", (unsigned)list->list_errors);
        printf("  Schedule Errs : %u\n", (unsigned)list->sched_errors);
        epicsTimeToStrftime(tsString, sizeof(tsString),
                            "%Y/%m/%d %H:%M:%S.%04f", &list->scheduled_time);
        printf("  Next scan     : %s\n", tsString);
        printf("  Min. scan time: %g secs\n",
               list->min_scan_time);
        printf("  Max. scan time: %g secs\n",
               list->max_scan_time);
        printf("  Last scan time: %g secs\n",
               list->last_scan_time);
    }
    if (level > 5)
    {
        for (info=DLL_first(TagInfo, &list->taginfos); info;
             info=DLL_next(TagInfo, info))
            dump_TagInfo(info, level);
    }
}
Exemple #2
0
int ClockTime_Report(int level)
{
    char timebuf[32];

    if (onceId == EPICS_THREAD_ONCE_INIT) {
        printf("OS Clock driver not %s.\n",
#ifdef CLOCK_REALTIME
            "initialized"
#else
            "available"
#endif /* CLOCK_REALTIME */
            );
    }
    else if (ClockTimePvt.synchronize == CLOCKTIME_SYNC) {
        int synchronized, syncFromPriority;
        epicsTimeStamp startTime, syncTime;

        epicsMutexMustLock(ClockTimePvt.lock);
        synchronized = ClockTimePvt.synchronized;
        syncFromPriority = ClockTimePvt.syncFromPriority;
        startTime = ClockTimePvt.startTime;
        syncTime = ClockTimePvt.syncTime;
        epicsMutexUnlock(ClockTimePvt.lock);

        if (synchronized) {
            printf("OS Clock driver is synchronized to a priority=%d provider\n",
                syncFromPriority);
            if (level) {
                epicsTimeToStrftime(timebuf, sizeof(timebuf),
                    "%Y-%m-%d %H:%M:%S.%06f", &startTime);
                printf("Initial sync was at %s\n", timebuf);
                epicsTimeToStrftime(timebuf, sizeof(timebuf),
                    "%Y-%m-%d %H:%M:%S.%06f", &syncTime);
                printf("Last successful sync was at %s\n", timebuf);
            }
            printf("Syncronization interval = %.0f seconds\n",
                ClockTimeSyncInterval);
        }
        else
            printf("OS Clock driver is *not* synchronized\n");
    }
    else {
        epicsTimeToStrftime(timebuf, sizeof(timebuf),
            "%Y-%m-%d %H:%M:%S.%06f", &ClockTimePvt.startTime);
        printf("Program started at %s\n", timebuf);
        printf("OS Clock synchronization thread not running.\n");
    }
    return 0;
}
Exemple #3
0
void MainWindow::readValue(int index)
{
	//QWidget *pwidget = stackedWidget->widget(0);
	if(CurrentPage() == 0)
	{
		if((size_t)index >= vecPage1Stamp.size()) index = vecPage1Stamp.size();
		//page1index = index;
	}
	else
	{
		if((size_t)index >= vecPage2Stamp.size()) index = vecPage2Stamp.size();
		//page2index = index;
	};

	PVandValue *pPVValue;
	QHash<QString,CAColorTileButton *>::iterator tileiter; 

	char timebuf[30];
	if(CurrentPage() == 0)
	{
		epicsTimeToStrftime(timebuf,28,"%m/%d/%Y %H:%M:%S", &(vecPage1Stamp.at(index)));
	}
	else
	{
		epicsTimeToStrftime(timebuf,28,"%m/%d/%Y %H:%M:%S", &(vecPage2Stamp.at(index)));
	}
	qDebug("Index(%d)-SliderValue(%d) --> %s", index,timeSlider->value(), timebuf);
	currentTimeLabel->setText(timebuf);

	for(int i = 0; i <= mloop; i++)
	{
		if (CurrentPage() == 0)
		{
			pPVValue = &(vecPage1Value.at((marraycount*i)+timeSlider->value()));
			//qDebug("PVName[%d]:%s(%f),%s",i, pPVValue->pvname.c_str(), pPVValue->dvalue, mpage1names.at(i).c_str());
			CAColorTileButton *pTileButton = hash_tilepage1[pPVValue->pvname.c_str()];
			//qDebug("PVName:%s, Tile(%p)", pTileButton->getPvname().toStdString().c_str(), pTileButton);
			pTileButton->changeValue(ECA_CONN,pPVValue->dvalue);
		}
		else
		{
			pPVValue = &(vecPage2Value.at((marraycount*i)+timeSlider->value()));
			//qDebug("PVName[%d]:%s(%f),%s",i, pPVValue->pvname.c_str(), pPVValue->dvalue, mpage2names.at(i).c_str());
			CAColorTileButton *pTileButton = hash_tilepage2[pPVValue->pvname.c_str()];
			//qDebug("PVName:%s, Tile(%p)", pTileButton->getPvname().toStdString().c_str(), pTileButton);
			pTileButton->changeValue(ECA_CONN,pPVValue->dvalue);
		};
	};
};
Exemple #4
0
int NTPTime_Report(int level)
{
    if (onceId == EPICS_THREAD_ONCE_INIT) {
        printf("NTP driver not initialized\n");
    } else if (NTPTimePvt.synchronize) {
        printf("NTP driver %s synchronized with server\n",
            NTPTimePvt.synchronized ? "is" : "is *not*");
        if (NTPTimePvt.syncsFailed) {
            printf("Last successful sync was %.1f minutes ago\n",
                NTPTimePvt.syncsFailed * NTPTimeSyncInterval / 60.0);
        }
        if (level) {
            char lastSync[32];

            epicsTimeToStrftime(lastSync, sizeof(lastSync),
                "%Y-%m-%d %H:%M:%S.%06f", &NTPTimePvt.syncTime);
            printf("Syncronization interval = %.1f seconds\n",
                NTPTimeSyncInterval);
            printf("Last synchronized at %s\n",
                lastSync);
            printf("Current OS tick rate = %u Hz\n",
                osdTickRateGet());
            printf("Measured tick rate = %.3f Hz\n",
                NTPTimePvt.tickRate);
            osdNTPReport();
        }
    } else {
        printf("NTP synchronization thread not running.\n");
    }
    return 0;
}
void epicsAssert (const char *pFile, const unsigned line,
    const char *pExp, const char *pAuthorName)
{
    epicsTimeStamp current;

    errlogPrintf("\n\n\n"
        "A call to 'assert(%s)'\n"
        "    by thread '%s' failed in %s line %u.\n",
        pExp, epicsThreadGetNameSelf(), pFile, line);
    errlogPrintf("EPICS Release %s.\n", epicsReleaseVersion);

    if (epicsTimeGetCurrent(&current) == 0) {
        char date[64];

        epicsTimeToStrftime(date, sizeof(date),
            "%Y-%m-%d %H:%M:%S.%f %Z", &current);
        errlogPrintf("Local time is %s\n", date);
    }

    if (!pAuthorName) {
        pAuthorName = "the author";
    }
    errlogPrintf("Please E-mail this message to %s or to [email protected]\n",
        pAuthorName);

    errlogPrintf("Calling epicsThreadSuspendSelf()\n");
    epicsThreadSuspendSelf ();
}
Exemple #6
0
/* get date,time as yymmdd-HHMMSS */
int	fGetDateStr( char datetime[])
{ 
	epicsTimeStamp now;

	epicsTimeGetCurrent(&now);
	epicsTimeToStrftime(datetime, 28, "%y%m%d-%H%M%S", &now);
	return(0);
}
Exemple #7
0
int timeStampProcess(subRecord *precord)
{
    epicsTimeStamp stamp;
    long status;
    char textBuffer[50];
    
    status = dbCaGetTimeStamp(&precord->inpa,&stamp);
    if(status) {
	printf("timeStampProcess dbCaGetTimeStamp failed\n");
	return(0);
    }
    epicsTimeToStrftime(textBuffer,sizeof(textBuffer),
        "%a %b %d %Y %H:%M:%S",&stamp);
    printf("timeStampProcess %s\n",textBuffer);
    return(0);
}
/* ---------------------------------------------------------------------- */
static long dsetRead_devSiSyncTimestamp (struct stringinRecord *psi) {
  CONTEXT *p_myContext;
  char p_myDateFormat[BUFLEN];
  int formattedStringLength;
  char p_myWarmstartFilename[BUFLEN];
  FILE *p_myFileHandle;
  int myLogMark;

  dsetLog(3, __FILE__ "[%d] -> %s(%s)\n", __LINE__, __func__, psi->name);
  
  p_myContext = (CONTEXT *)psi->dpvt;
  strncpy(p_myDateFormat, p_myContext->p_dateFormat, BUFLEN);
  myLogMark=p_myContext->logMark;

  recGblGetTimeStamp(psi);
  formattedStringLength=
	epicsTimeToStrftime(psi->val, BUFLEN, p_myDateFormat, &psi->time);
  if (formattedStringLength >= BUFLEN) {
    psi->udf = 1;
    recGblSetSevr(psi,UDF_ALARM,INVALID_ALARM);
    dsetLog(3, __FILE__ "[%d] Error: String is too long!\n", __LINE__);
    sleep(SLEEPTIME_ERROR);
    return(ERROR);
  }
  psi->udf = 0;

  sprintf(p_myWarmstartFilename, WARMSTART_FILE_PREFIX "/%s",psi->name);
  p_myFileHandle=fopen(p_myWarmstartFilename, "w");
  if (p_myFileHandle==NULL) {
    dsetLog(1, __FILE__ "[%d] Error: %s\n", __LINE__);
    dsetLog(1, __FILE__ "[%d] Error: Couldn't create/write %s\n",
                                      __LINE__, p_myWarmstartFilename);
    sleep(SLEEPTIME_ERROR);
    return(ERROR);
  }
  fprintf(p_myFileHandle, "%s",psi->val);
  fclose(p_myFileHandle);

  if (myLogMark!=0) {
    fprintf( stdout, "%s\n", psi->val);
  }

  dsetLog(3, __FILE__ "[%d] <- %s\n", __LINE__, __func__);

  return(SUCCESS);
}
Exemple #9
0
static bool viewer(void *arg, const char *name, size_t , size_t , const CtrlInfo &,
             DbrType , DbrCount , const RawValue::Data *value)
{
	MainWindow *pMain = (MainWindow*)arg;
	if(pMain == 0) return false;

	char timebuf[30];
	epicsTimeToStrftime(timebuf,28,"%m/%d/%Y %H:%M:%S", &(value->stamp));
	//qDebug("Time:%s, PVName(%s:%f)", timebuf, name, value->value);
	//outstream << "Loop:" << pMain->mloop << ", Time: " << timebuf << ", PVName: ("<<name <<":" <<value->value<<")" << endl;

	int curpage = pMain->CurrentPage();

	if(pMain->mloop == 0)
	{
		pMain->AddEPICSTimeStamp(curpage, value->stamp);
	};
	pMain->AddPVAndValue(curpage, name, value->value);

    return true;
}
static long process(struct timestampRecord *ptimestamp){

#if EPICS_VERSION >= 3 && EPICS_REVISION >= 14
#else
  struct tsDetail time_s;
#endif
  
  ptimestamp->udf  = FALSE;
  ptimestamp->pact = TRUE;

  recGblGetTimeStamp(ptimestamp);
  ptimestamp->sec  = ptimestamp->time.secPastEpoch;
  ptimestamp->nsec = ptimestamp->time.nsec;
  
#if EPICS_VERSION >= 3 && EPICS_REVISION >= 14  
  switch(ptimestamp->tst) {
  case timestampTST_YY_MM_DD_HH_MM_SS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%y/%m/%d %H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_MM_DD_YY_HH_MM_SS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%m/%d/%y %H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_MM_DD_HH_MM_SS_YY:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%b %d %H:%M:%S %y",&ptimestamp->time);
    break;
  case timestampTST_MM_DD_HH_MM_SS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%b %d %H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_HH_MM_SS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_HH_MM:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%H:%M",&ptimestamp->time);
    break;
  case timestampTST_DD_MM_YY_HH_MM_SS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%d/%m/%y %H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_DD_MM_HH_MM_SS_YY:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%d %b %H:%M:%S %y",&ptimestamp->time);
    break;
  case timestampTST_VMS:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%e-%b-%Y %H:%M:%S",&ptimestamp->time);
    break;
  case timestampTST_MM_DD_YYYY:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%b %d, %Y %H:%M:%S.%04f",&ptimestamp->time);
    break;
  case timestampTST_MM_DD_YY:
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%m/%d/%y %H:%M:%S.%04f",&ptimestamp->time);
    break;
  default :  /* YY/MM/DD HH:MM:SS */
    epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),
                        "%y/%m/%D %H:%M:%S",&ptimestamp->time);
    break;
  }
#else
  tsStampToLocal(ptimestamp->time, &time_s);
  
  switch(ptimestamp->tst) {
  case timestampTST_YY_MM_DD_HH_MM_SS:
    sprintf(ptimestamp->val,"%.2d/%.2d/%.2d %.2d:%.2d:%.2d"
	    ,time_s.year,time_s.monthNum+1,time_s.dayMonth+1
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_MM_DD_YY_HH_MM_SS:
    sprintf(ptimestamp->val,"%.2d/%.2d/%.2d %.2d:%.2d:%.2d"
	    ,time_s.monthNum+1,time_s.dayMonth+1,time_s.year
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_MM_DD_HH_MM_SS_YY:
    sprintf(ptimestamp->val,"%s %.2d %.2d:%.2d:%.2d %.2d"
	    ,MONTH[time_s.monthNum],time_s.dayMonth+1
	    ,time_s.hours,time_s.minutes,time_s.seconds,time_s.year);
    break;
  case timestampTST_MM_DD_HH_MM_SS:
    sprintf(ptimestamp->val,"%s %.2d %.2d:%.2d:%.2d"
	    ,MONTH[time_s.monthNum],time_s.dayMonth+1
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_HH_MM_SS:
    sprintf(ptimestamp->val,"%.2d:%.2d:%.2d"
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_HH_MM:
    sprintf(ptimestamp->val,"%.2d:%.2d"
	    ,time_s.hours,time_s.minutes);
    break;
  case timestampTST_DD_MM_YY_HH_MM_SS:
    sprintf(ptimestamp->val,"%.2d/%.2d/%.2d %.2d:%.2d:%.2d"
	    ,time_s.dayMonth+1,time_s.monthNum+1,time_s.year
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_DD_MM_HH_MM_SS_YY:
    sprintf(ptimestamp->val,"%.2d %s %.2d:%.2d:%.2d %.2d"
	    ,time_s.dayMonth+1,MONTH[time_s.monthNum]
	    ,time_s.hours,time_s.minutes,time_s.seconds,time_s.year);
    break;
  case timestampTST_VMS:
    sprintf(ptimestamp->val,"%.2d-%s-%.4d %.2d:%.2d:%.2d"
	    ,time_s.dayMonth+1,MONTH[time_s.monthNum],time_s.year
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_MM_DD_YYYY:
    sprintf(ptimestamp->val,"%s %.2d, %.4d %.2d:%.2d:%.2d"
	    ,MONTH[time_s.monthNum],time_s.dayMonth+1
	    ,time_s.year,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  case timestampTST_MM_DD_YY:
    sprintf(ptimestamp->val,"%.2d/%.2d/%.2d %.2d:%.2d:%.2d"
	    ,time_s.monthNum+1,time_s.dayMonth+1,time_s.year
	    ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  default :  /* YY/MM/DD HH:MM:SS */
    sprintf(ptimestamp->val,"%.2d/%.2d/%.2d %.2d:%.2d:%.2d"
            ,time_s.year,time_s.monthNum+1,time_s.dayMonth+1
            ,time_s.hours,time_s.minutes,time_s.seconds);
    break;
  }
#endif
  /* check event list */
  monitor(ptimestamp);

  /* process the forward scan link record */
  recGblFwdLink(ptimestamp);
  ptimestamp->pact=FALSE;
  return(0);
}
static void printBuffer(
    long status, short dbr_type, void *pbuffer, long reqOptions,
    long retOptions, long no_elements, TAB_BUFFER *pMsgBuff, int tab_size)
{
    epicsInt32 val_i32;
    epicsUInt32 val_u32;
    char *pmsg = pMsgBuff->message;
    int i, len;

    if (reqOptions & DBR_STATUS) {
        if (retOptions & DBR_STATUS) {
            struct dbr_status *pdbr_status = (void *)pbuffer;

            printf("status = %u, severity = %u\n",
                pdbr_status->status,
                pdbr_status->severity);
        }
        else {
            printf("status and severity not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_status_size;
    }

    if (reqOptions & DBR_UNITS) {
        if (retOptions & DBR_UNITS) {
            struct dbr_units *pdbr_units = (void *)pbuffer;

            printf("units = \"%s\"\n",
                pdbr_units->units);
        }
        else {
            printf("units not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_units_size;
    }

    if (reqOptions & DBR_PRECISION) {
        if (retOptions & DBR_PRECISION){
            struct dbr_precision *pdbr_precision = (void *)pbuffer;

            printf("precision = %ld\n",
                pdbr_precision->precision.dp);
        }
        else {
            printf("precision not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_precision_size;
    }

    if (reqOptions & DBR_TIME) {
        if (retOptions & DBR_TIME) {
            struct dbr_time *pdbr_time = (void *)pbuffer;
            char time_buf[40];
            epicsTimeToStrftime(time_buf, 40, "%Y-%m-%d %H:%M:%S.%09f",
                &pdbr_time->time);
            printf("time = %s\n", time_buf);
        }
        else {
            printf("time not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_time_size;
    }

    if (reqOptions & DBR_ENUM_STRS) {
        if (retOptions & DBR_ENUM_STRS) {
            struct dbr_enumStrs *pdbr_enumStrs = (void *)pbuffer;

            printf("no_strs = %u:\n",
                pdbr_enumStrs->no_str);
            for (i = 0; i < pdbr_enumStrs->no_str; i++) 
                printf("\t\"%s\"\n", pdbr_enumStrs->strs[i]);
        }
        else {
            printf("enum strings not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_enumStrs_size;
    }

    if (reqOptions & DBR_GR_LONG) {
        if (retOptions & DBR_GR_LONG) {
            struct dbr_grLong *pdbr_grLong = (void *)pbuffer;

            printf("grLong: %d .. %d\n",
                pdbr_grLong->lower_disp_limit,
                pdbr_grLong->upper_disp_limit);
        }
        else {
            printf("DBRgrLong not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_grLong_size;
    }

    if (reqOptions & DBR_GR_DOUBLE) {
        if (retOptions & DBR_GR_DOUBLE) {
            struct dbr_grDouble *pdbr_grDouble = (void *)pbuffer;

            printf("grDouble: %g .. %g\n",
                pdbr_grDouble->lower_disp_limit,
                pdbr_grDouble->upper_disp_limit);
        }
        else {
            printf("DBRgrDouble not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_grDouble_size;
    }

    if (reqOptions & DBR_CTRL_LONG) {
        if (retOptions & DBR_CTRL_LONG){
            struct dbr_ctrlLong *pdbr_ctrlLong = (void *)pbuffer;

            printf("ctrlLong: %d .. %d\n",
                pdbr_ctrlLong->lower_ctrl_limit,
                pdbr_ctrlLong->upper_ctrl_limit);
        }
        else {
            printf("DBRctrlLong not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_ctrlLong_size;
    }

    if (reqOptions & DBR_CTRL_DOUBLE) {
        if (retOptions & DBR_CTRL_DOUBLE) {
            struct dbr_ctrlDouble *pdbr_ctrlDouble = (void *)pbuffer;

            printf("ctrlDouble: %g .. %g\n",
                pdbr_ctrlDouble->lower_ctrl_limit,
                pdbr_ctrlDouble->upper_ctrl_limit);
        }
        else {
            printf("DBRctrlDouble not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_ctrlDouble_size;
    }

    if (reqOptions & DBR_AL_LONG) {
        if (retOptions & DBR_AL_LONG) {
            struct dbr_alLong *pdbr_alLong = (void *)pbuffer;

            printf("alLong: %d < %d .. %d < %d\n",
                pdbr_alLong->lower_alarm_limit,
                pdbr_alLong->lower_warning_limit,
                pdbr_alLong->upper_warning_limit,
                pdbr_alLong->upper_alarm_limit);
        }
        else {
            printf("DBRalLong not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_alLong_size;
    }

    if (reqOptions & DBR_AL_DOUBLE) {
        if (retOptions & DBR_AL_DOUBLE) {
            struct dbr_alDouble *pdbr_alDouble = (void *)pbuffer;

            printf("alDouble: %g < %g .. %g < %g\n",
                pdbr_alDouble->lower_alarm_limit,
                pdbr_alDouble->lower_warning_limit,
                pdbr_alDouble->upper_warning_limit,
                pdbr_alDouble->upper_alarm_limit);
        }
        else {
            printf("DBRalDouble not returned\n");
        }
        pbuffer = (char *)pbuffer + dbr_alDouble_size;
    }

    /* Now print values */
    if (no_elements == 0)
        return;

    switch (dbr_type) {
    case (DBR_STRING):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_STRING: ");
        else
            sprintf(pmsg, "DBR_STRING[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, "DBR_STRING: failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for(i=0; i<no_elements; i++) {
            len = strlen(pbuffer);
            if (len > 0) {
                sprintf(pmsg, " \"%s\"", (char *)pbuffer);
                dbpr_msgOut(pMsgBuff, tab_size);
            }
            pbuffer = (char *)pbuffer + MAX_STRING_SIZE;
        }
        break;

    case (DBR_CHAR):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_CHAR: ");
        else
            sprintf(pmsg, "DBR_CHAR[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        if (no_elements == 1) {
            val_i32 = *(epicsInt8 *) pbuffer;
            sprintf(pmsg, "%-9d 0x%-9x", val_i32, val_i32);
            dbpr_msgOut(pMsgBuff, tab_size);
        }
        else {
            for (i = 0; i < no_elements; i+= MAXLINE - 5) {
                int width = no_elements - i;
                if (width > MAXLINE - 5) width = MAXLINE - 5;
                sprintf(pmsg, " \"%.*s\"", width, (char *)pbuffer + i);
                if (i + MAXLINE - 5 < no_elements) strcat(pmsg, " +");
                dbpr_msgOut(pMsgBuff, tab_size);
            }
        }
        break;

    case (DBR_UCHAR):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_UCHAR: ");
        else
            sprintf(pmsg, "DBR_UCHAR[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            val_u32 = *(epicsUInt8 *) pbuffer;
            sprintf(pmsg, "%-9u 0x%-9x", val_u32, val_u32);
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsUInt8);
        }
        break;

    case (DBR_SHORT):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_SHORT: ");
        else
            sprintf(pmsg, "DBR_SHORT[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            val_i32 = *(epicsInt16 *) pbuffer;
            sprintf(pmsg, "%-9d 0x%-9x", val_i32, val_i32);
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsInt16);
        }
        break;

    case (DBR_USHORT):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_USHORT: ");
        else
            sprintf(pmsg, "DBR_USHORT[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            val_u32 = *(epicsUInt16 *) pbuffer;
            sprintf(pmsg, "%-9u 0x%-9x", val_u32, val_u32);
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsUInt16);
        }
        break;

    case (DBR_LONG):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_LONG: ");
        else
            sprintf(pmsg, "DBR_LONG[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            val_i32 = *(epicsInt32 *) pbuffer;
            sprintf(pmsg, "%-9d 0x%-9x", val_i32, val_i32);
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsInt32);
        }
        break;

    case (DBR_ULONG):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_ULONG: ");
        else
            sprintf(pmsg, "DBR_ULONG[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            val_u32 = *(epicsUInt32 *) pbuffer;
            sprintf(pmsg, "%-9u 0x%-9x", val_u32, val_u32);
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsUInt32);
        }
        break;

    case (DBR_FLOAT):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_FLOAT: ");
        else
            sprintf(pmsg, "DBR_FLOAT[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            sprintf(pmsg, "%-13.6g", *((epicsFloat32 *) pbuffer));
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsFloat32);
        }
        break;

    case (DBR_DOUBLE):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_DOUBLE: ");
        else
            sprintf(pmsg, "DBR_DOUBLE[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            sprintf(pmsg, "%-13.6g", *((epicsFloat64 *) pbuffer));
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsFloat64);
        }
        break;

    case (DBR_ENUM):
        if (no_elements == 1)
            sprintf(pmsg, "DBR_ENUM: ");
        else
            sprintf(pmsg, "DBR_ENUM[%ld]: ", no_elements);
        dbpr_msgOut(pMsgBuff, tab_size);
        if (status != 0) {
            sprintf(pmsg, " failed.");
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }

        for (i = 0; i < no_elements; i++) {
            sprintf(pmsg, "%-9u", *((epicsEnum16 *) pbuffer));
            dbpr_msgOut(pMsgBuff, tab_size);
            pbuffer = (char *)pbuffer + sizeof(epicsEnum16);
        }
        break;

    default:
        printf(" illegal request type.");
        break;
    }

    dbpr_msg_flush(pMsgBuff, tab_size);
    return;
}
static int dbpr_report(
    const char *pname, DBADDR *paddr, int interest_level,
    TAB_BUFFER *pMsgBuff, int tab_size)
{
    char        *pmsg;
    dbFldDes    *pdbFldDes = paddr->pfldDes;
    dbRecordType *pdbRecordType = pdbFldDes->pdbRecordType;
    short       n2;
    void        *pfield;
    char        *pfield_name;
    char        *pfield_value;
    DBENTRY     dbentry;
    DBENTRY     *pdbentry = &dbentry;
    long        status;

    dbInitEntry(pdbbase,pdbentry);
    status = dbFindRecord(pdbentry,pname);
    if (status) {
        errMessage(status,pname);
        return -1;
    }

    pmsg = pMsgBuff->message;
    for (n2 = 0; n2 <= pdbRecordType->no_fields - 1; n2++) {
        pdbFldDes = pdbRecordType->papFldDes[pdbRecordType->sortFldInd[n2]];
        pfield_name = pdbFldDes->name;
        pfield = ((char *)paddr->precord) + pdbFldDes->offset;
        if (pdbFldDes->interest > interest_level )
            continue;

        switch (pdbFldDes->field_type) {
        case DBF_STRING:
        case DBF_USHORT:
        case DBF_ENUM:
        case DBF_FLOAT:
        case DBF_CHAR:
        case DBF_UCHAR:
        case DBF_SHORT:
        case DBF_LONG:
        case DBF_ULONG:
        case DBF_DOUBLE:
        case DBF_MENU:
        case DBF_DEVICE:
            status = dbFindField(pdbentry,pfield_name);
            pfield_value = dbGetString(pdbentry);
            sprintf(pmsg, "%s: %s", pfield_name,
                (pfield_value ? pfield_value : "<nil>"));
            dbpr_msgOut(pMsgBuff, tab_size);
            break;

        case DBF_INLINK:
        case DBF_OUTLINK:
        case DBF_FWDLINK: {
                DBLINK  *plink = (DBLINK *)pfield;
                int     ind;

                status = dbFindField(pdbentry,pfield_name);
                for (ind=0; ind<LINK_NTYPES; ind++) {
                    if (pamaplinkType[ind].value == plink->type)
                        break;
                }
                if (ind>=LINK_NTYPES) {
                    sprintf(pmsg,"%s: Illegal Link Type", pfield_name);
                }
                else {
                    sprintf(pmsg,"%s:%s %s", pfield_name,
                        pamaplinkType[ind].strvalue,dbGetString(pdbentry));
                }
                dbpr_msgOut(pMsgBuff, tab_size);
            }
            break;

        case DBF_NOACCESS:
            if (pfield == (void *)&paddr->precord->time) {
                /* Special for the TIME field, make it human-readable */
                char time_buf[40];
                epicsTimeToStrftime(time_buf, 40, "%Y-%m-%d %H:%M:%S.%09f",
                    &paddr->precord->time);
                sprintf(pmsg, "%s: %s", pfield_name, time_buf);
                dbpr_msgOut(pMsgBuff, tab_size);
            }
            else if (pdbFldDes->size == sizeof(void *) &&
                strchr(pdbFldDes->extra, '*')) {
                /* Special for pointers, needed on little-endian CPUs */
                sprintf(pmsg, "%s: %p", pfield_name, *(void **)pfield);
                dbpr_msgOut(pMsgBuff, tab_size);
            }
            else { /* just print field as hex bytes */
                unsigned char *pchar = (unsigned char *)pfield;
                char   temp_buf[61];
                char *ptemp_buf = &temp_buf[0];
                short n = pdbFldDes->size;
                short i;
                unsigned int value;

                if (n > sizeof(temp_buf)/3) n = sizeof(temp_buf)/3;
                for (i=0; i<n; i++, ptemp_buf += 3, pchar++) {
                        value = (unsigned int)*pchar;
                        sprintf(ptemp_buf, "%02x ", value);
                }
                sprintf(pmsg, "%s: %s", pfield_name,temp_buf);
                dbpr_msgOut(pMsgBuff, tab_size);
            }
            break;

        default:
            sprintf(pmsg, "%s: dbpr: Unknown field_type", pfield_name);
            dbpr_msgOut(pMsgBuff, tab_size);
            break;
        }
    }
    pmsg[0] = '\0';
    dbpr_msgOut(pMsgBuff, tab_size);
    dbFinishEntry(pdbentry);
    return (0);
}
Exemple #13
0
void NDPluginOverlay::doOverlayT(NDArray *pArray, NDOverlay_t *pOverlay)
{
    size_t xmin, xmax, ymin, ymax, ix, iy, ii, jj, ib;
    size_t xwide, ywide, xwidemax_line, xwidemin_line;
    epicsType *pRow;
    char textOutStr[512];                    // our string, maybe with a time stamp, to place into the image array
    char *cp;                                // character pointer to current character being rendered
    int bmc;                                 // current byte in the font bitmap
    int mask;                                // selects the bit in bmc to look at
    char tstr[64];                           // Used to build the time string
    NDPluginOverlayTextFontBitmapType *bmp;  // pointer to our font information (bitmap pointer, perhaps misnamed)
    int bpc;                                 // bytes per char, ie, 1 for 6x13 font, 2 for 9x15 font
    int sbc;                                 // "sub" byte counter to keep track of which byte we are looking at for multi byte fonts
    
    asynPrint(pasynUserSelf, ASYN_TRACEIO_DRIVER,
        "NDPluginOverlay::DoOverlayT, shape=%d, Xpos=%ld, Ypos=%ld, Xsize=%ld, Ysize=%ld\n",
        pOverlay->shape, (long)pOverlay->PositionX, (long)pOverlay->PositionY, 
        (long)pOverlay->SizeX, (long)pOverlay->SizeY);

    switch(pOverlay->shape) {
        case NDOverlayCross:
            xmin = 0;
            if (pOverlay->PositionX > pOverlay->SizeX)
                xmin = pOverlay->PositionX - pOverlay->SizeX;
            xmax = pOverlay->PositionX + pOverlay->SizeX;
            xmax = MIN(xmax, this->arrayInfo.xSize-1);
            ymin = 0;
            if (pOverlay->PositionY > pOverlay->SizeY)
                ymin = pOverlay->PositionY - pOverlay->SizeY;
            ymax = pOverlay->PositionY + pOverlay->SizeY;
            ymax = MIN(ymax, this->arrayInfo.ySize-1);
            xwide = (pOverlay->WidthX == 1) ? 0 : pOverlay->WidthX / 2;
            ywide = (pOverlay->WidthY == 1) ? 0 : pOverlay->WidthY / 2;
            xwide = MIN(xwide, pOverlay->SizeX-1);
            ywide = MIN(ywide, pOverlay->SizeY);

            for (iy=ymin; iy<ymax; iy++) {
                pRow = (epicsType *)pArray->pData + iy*this->arrayInfo.yStride;
                if ((iy >= (pOverlay->PositionY - ywide)) && (iy <= (pOverlay->PositionY + ywide))) {
                    for (ix=xmin; ix<xmax; ++ix) {
                        setPixel(&pRow[ix*this->arrayInfo.xStride], pOverlay);
                    }
                } else {
                    xwidemin_line = pOverlay->PositionX - xwide;
                    xwidemax_line = pOverlay->PositionX + xwide;
                    for (size_t line=xwidemin_line; line<=xwidemax_line; ++line) {
                        setPixel(&pRow[line*this->arrayInfo.xStride], pOverlay);
                    }
                }
            }
            break;

        case NDOverlayRectangle:
            xmin = pOverlay->PositionX;
            xmin = MAX(xmin, 0);
            xmax = pOverlay->PositionX + pOverlay->SizeX;
            xmax = MIN(xmax, this->arrayInfo.xSize);
            ymin = pOverlay->PositionY;
            ymin = MAX(ymin, 0);
            ymax = pOverlay->PositionY + pOverlay->SizeY;
            ymax = MIN(ymax, this->arrayInfo.ySize);
            xwide = (pOverlay->WidthX == 1) ? 0 : pOverlay->WidthX / 2;
            ywide = (pOverlay->WidthY == 1) ? 0 : pOverlay->WidthY / 2;
            xwide = MIN(xwide, pOverlay->SizeX-1);
            ywide = MIN(ywide, pOverlay->SizeY);

            //For non-zero width, grow the rectangle towards the center.
            for (iy=ymin; iy<ymax; iy++) {
                pRow = (epicsType *)pArray->pData + iy*arrayInfo.yStride;
                if ((iy >= ymin) && (iy <= (ymin + ywide))) {
                    for (ix=xmin; ix<xmax; ix++) setPixel(&pRow[ix*this->arrayInfo.xStride], pOverlay);
                } else if ((iy >= (ymax-1 - ywide)) && (iy <= ymax-1)) {
                    for (ix=xmin; ix<xmax; ix++) setPixel(&pRow[ix*this->arrayInfo.xStride], pOverlay);
                } else {
                    for (size_t line=xmin; line<=xmin+xwide; ++line) {
                        setPixel(&pRow[line*this->arrayInfo.xStride], pOverlay);
                    }
                    for (size_t line=(xmax-xwide); line<=xmax; ++line) {
                        setPixel(&pRow[(line-1)*this->arrayInfo.xStride], pOverlay);
                    }
                }
            }
            break;

        case NDOverlayText:
            if ((pOverlay->Font >= 0) && (pOverlay->Font < NDPluginOverlayTextFontBitmapTypeN)) {
                bmp = &NDPluginOverlayTextFontBitmaps[pOverlay->Font];
            } else {
                // Really, no reason to go on if the font is ill defined
                return;
            }

            bpc = bmp->width / 8 + 1;

            if (strlen(pOverlay->TimeStampFormat) > 0) {
                epicsTimeToStrftime(tstr, sizeof(tstr)-1, pOverlay->TimeStampFormat, &pArray->epicsTS);
                epicsSnprintf(textOutStr, sizeof(textOutStr)-1, "%s%s", pOverlay->DisplayText, tstr);
            } else {
                epicsSnprintf(textOutStr, sizeof(textOutStr)-1, "%s", pOverlay->DisplayText);
            }
            textOutStr[sizeof(textOutStr)-1] = 0;

            cp   = textOutStr;
            xmin = pOverlay->PositionX;
            xmin = MAX(xmin, 0);
            xmax = pOverlay->PositionX + pOverlay->SizeX;
            xmax = MAX(xmax, this->arrayInfo.xSize);
            ymin = pOverlay->PositionY;
            ymin = MAX(ymin, 0);
            ymax = pOverlay->PositionY + pOverlay->SizeY;
            ymax = MIN(ymax, pOverlay->PositionY + bmp->height);
            ymax = MIN(ymax, this->arrayInfo.ySize);

            // Loop over vertical lines
            for (jj=0, iy=ymin; iy<ymax; jj++, iy++) {
                pRow = (epicsType *)pArray->pData + iy*arrayInfo.yStride;

                // Loop over characters
                for (ii=0; cp[ii]!=0; ii++) {
                    if( cp[ii] < 32)
                        continue;

                    if (xmin+ii * bmp->width >= xmax)
                        // None of this character can be written
                        break;

                    sbc = 0;
                    bmc = bmp->bitmap[(bmp->height*(cp[ii] - 32) + jj)*bpc];
                    mask = 0x80;
                    for (ib=0; ib<bmp->width; ib++) {
                        ix = xmin + ii * bmp->width + ib;
                        if (ix >= xmax)
                            break;
                        if (mask & bmc) {
                            setPixel( &pRow[ix*this->arrayInfo.xStride], pOverlay);
                        }
                        mask >>= 1;
                        if (!mask) {
                            mask = 0x80;
                            sbc++;
                            bmc = bmp->bitmap[(bmp->height*(cp[ii] - 32) + jj)*bpc + sbc];
                        }
                    }
                }
            }
            break;

    }
}
Exemple #14
0
/* Scan task, one per PLC */
static void PLC_scan_task(PLC *plc)
{
    ScanList *list;
    epicsTimeStamp    next_schedule, start_time, end_time;
    double            timeout, delay, quantum;
    eip_bool          transfer_ok, reset_next_schedule;

    quantum = epicsThreadSleepQuantum();
    timeout = (double)ETHERIP_TIMEOUT/1000.0;
scan_loop: /* --------- The Scan Loop for one PLC -------- */
    if (epicsMutexLock(plc->lock) != epicsMutexLockOK)
    {
        EIP_printf_time(1, "drvEtherIP scan task for PLC '%s'"
                   " cannot take plc->lock\n", plc->name);
        return;
    }
    if (!assert_PLC_connect(plc))
    {   /* don't rush since connection takes network bandwidth */
        epicsMutexUnlock(plc->lock);
        EIP_printf_time(2, "drvEtherIP: PLC '%s' is disconnected\n", plc->name);
        epicsThreadSleep(timeout);
        goto scan_loop;
    }
    EIP_printf_time(10, "drvEtherIP scan PLC '%s'\n", plc->name);
    reset_next_schedule = true;
    epicsTimeGetCurrent(&start_time);
    for (list = DLL_first(ScanList,&plc->scanlists);
         list;  list = DLL_next(ScanList,list))
    {
        if (! list->enabled)
            continue;
        if (epicsTimeLessThanEqual(&list->scheduled_time, &start_time))
        {
            epicsTimeGetCurrent(&list->scan_time);
            transfer_ok = process_ScanList(plc->connection, list);
            epicsTimeGetCurrent(&end_time);
            list->last_scan_time =
                epicsTimeDiffInSeconds(&end_time, &list->scan_time);
            /* update statistics */
            if (list->last_scan_time > list->max_scan_time)
                list->max_scan_time = list->last_scan_time;
            if (list->last_scan_time < list->min_scan_time  ||
                list->min_scan_time == 0.0)
                list->min_scan_time = list->last_scan_time;
            if (transfer_ok) /* re-schedule exactly */
            {
                list->scheduled_time = list->scan_time;
                epicsTimeAddSeconds(&list->scheduled_time, list->period);
            }
            else
            {  	/* end_time+fixed delay, ignore extra due to error */
                list->scheduled_time = end_time;
                epicsTimeAddSeconds(&list->scheduled_time, timeout);
                ++list->list_errors;
                ++plc->plc_errors;
                disconnect_PLC(plc);
                epicsMutexUnlock(plc->lock);
                goto scan_loop;
            }
        }
        /* Update time for list that's due next */
        if (reset_next_schedule ||
            epicsTimeLessThan(&list->scheduled_time, &next_schedule))
        {
            reset_next_schedule = false;
            next_schedule = list->scheduled_time;
        }
    }
    epicsMutexUnlock(plc->lock);
    /* fallback for empty/degenerate scan list */
    if (reset_next_schedule)
        delay = EIP_MIN_TIMEOUT;
    else
    {
        epicsTimeGetCurrent(&start_time);
        delay = epicsTimeDiffInSeconds(&next_schedule, &start_time);
        if (delay > 60.0)
        {
            char      tsString[50];
            printf("Scanlist %g secs has scheduling problem, delay = %g sec\n",
                  list->period, delay);
            epicsTimeToStrftime(tsString, sizeof(tsString),
                                "%Y/%m/%d %H:%M:%S.%04f", &list->scan_time);
            printf("  'Scan time'    : %s\n", tsString);
            epicsTimeToStrftime(tsString, sizeof(tsString),
                                "%Y/%m/%d %H:%M:%S.%04f", &start_time);
            printf("  'Current time' : %s\n", tsString);
            epicsTimeToStrftime(tsString, sizeof(tsString),
                                "%Y/%m/%d %H:%M:%S.%04f", &next_schedule);
            printf("  'Next    time' : %s\n", tsString);
            /* Attempt to hack around this by waiting a minute,
             * hoping that the clock looks better by then.
             * Also resetting the scheduled time to 'now'.
             */
            delay = 60.0;
            list->scheduled_time = start_time;
            ++list->sched_errors;
        }
    }
    /* Sleep until next turn. */
    if (delay > 0.0)
        epicsThreadSleep(delay);
    else if (delay <= -quantum)
    {
        EIP_printf(8, "drvEtherIP scan task slow, %g sec delay\n", delay);
        ++plc->slow_scans; /* hmm, "plc" not locked... */
    }
    goto scan_loop;
}
Exemple #15
0
/* Public, also driver's report routine */
long drvEtherIP_report(int level)
{
    PLC *plc;
    EIPIdentityInfo *ident;
    ScanList *list;
    epicsTimeStamp now;
    char tsString[50];

    if (level <= 0)
    {
        printf("drvEtherIP V%d.%d - ControlLogix 5000 PLC via EtherNet/IP\n",
               ETHERIP_MAYOR, ETHERIP_MINOR);
        return 0;
    }
    printf("drvEtherIP V%d.%d report, -*- outline -*-\n",
           ETHERIP_MAYOR, ETHERIP_MINOR);
    if (drvEtherIP_private.lock == 0)
    {
        printf(" drvEtherIP lock is 0, did you call drvEtherIP_init?\n");
        return 0;
    }
    if (level > 1)
        printf("  Mutex lock: 0x%lX\n",
               (unsigned long) drvEtherIP_private.lock);
    for (plc = DLL_first(PLC,&drvEtherIP_private.PLCs);
         plc;  plc = DLL_next(PLC,plc))
    {
        printf ("* PLC '%s', IP '%s'\n", plc->name, plc->ip_addr);
        if (level > 1)
        {
            ident = &plc->connection->info;
            printf("  Interface name        : %s\n", ident->name);
            printf("  Interface vendor      : 0x%X\n", ident->vendor);
            printf("  Interface type        : 0x%X\n", ident->device_type);
            printf("  Interface revision    : 0x%X\n", ident->revision);
            printf("  Interface serial      : 0x%X\n",
                   (unsigned)ident->serial_number);

            printf("  scan thread slow count: %u\n", (unsigned)plc->slow_scans);
            printf("  connection errors     : %u\n", (unsigned)plc->plc_errors);
        }
        if (level > 2)
        {
            printf("  Mutex lock            : 0x%lX\n",
                   (unsigned long)plc->lock);
            printf("  scan task ID          : 0x%lX (%s)\n",
                   (unsigned long) plc->scan_task_id,
                   (plc->scan_task_id==0 ? "-dead-" :
                    epicsThreadIsSuspended(plc->scan_task_id)!=0 ? "suspended":
                    "running"));
            epicsTimeGetCurrent(&now);
            epicsTimeToStrftime(tsString, sizeof(tsString),
                                "%Y/%m/%d %H:%M:%S.%04f", &now);
            printf("  Now                   : %s\n", tsString);
            if (level > 3)
            {
                printf("** ");
                EIP_dump_connection(plc->connection);
            }
            if (level > 4)
            {
                for (list=DLL_first(ScanList, &plc->scanlists); list;
                     list=DLL_next(ScanList, list))
                {
                    printf("** ");
                    dump_ScanList(list, level);
                }
            }
        }
    }
    printf("\n");
    return 0;
}
Exemple #16
0
long generalTimeReport(int level)
{
    int items;

    if (onceId == EPICS_THREAD_ONCE_INIT) {
        printf("General time framework not yet initialized.\n");
        return epicsTimeOK;
    }

    printf("Backwards time errors prevented %u times.\n\n",
        generalTimeGetErrorCounts());

    /* Use an output buffer to avoid holding mutexes during printing */

    printf("Current Time Providers:\n");
    epicsMutexMustLock(gtPvt.timeListLock);
    if ((items = ellCount(&gtPvt.timeProviders))) {
        gtProvider *ptp;
        char *message;     /* Temporary output buffer */
        char *pout;

        message = calloc(items, 80 * 2); /* Each provider needs 2 lines */
        if (!message) {
            epicsMutexUnlock(gtPvt.timeListLock);
            printf("Out of memory\n");
            return epicsTimeERROR;
        }

        pout = message;

        for (ptp = (gtProvider *)ellFirst(&gtPvt.timeProviders);
             ptp; ptp = (gtProvider *)ellNext(&ptp->node)) {
            pout += sprintf(pout, "    \"%s\", priority = %d\n",
                ptp->name, ptp->priority);
            if (level) {
                epicsTimeStamp tempTS;
                if (ptp->get.Time(&tempTS) != epicsTimeERROR) {
                    char tempTSText[40];
                    epicsTimeToStrftime(tempTSText, sizeof(tempTSText),
                        "%Y-%m-%d %H:%M:%S.%06f", &tempTS);
                    pout += sprintf(pout, "\tCurrent Time is %s.\n",
                        tempTSText);
                } else {
                    pout += sprintf(pout, "\tCurrent Time not available\n");
                }
            }
        }
        epicsMutexUnlock(gtPvt.timeListLock);
        puts(message);
        free(message);
    } else {
        epicsMutexUnlock(gtPvt.timeListLock);
        printf("\tNo Providers registered.\n");
    }

    printf("Event Time Providers:\n");
    epicsMutexMustLock(gtPvt.eventListLock);
    if ((items = ellCount(&gtPvt.eventProviders)))
    {
        gtProvider *ptp;
        char *message;     /* Temporary output buffer */
        char *pout;

        message = calloc(items, 80);     /* Each provider needs 1 line, */
        if (!message) {
            epicsMutexUnlock(gtPvt.eventListLock);
            printf("Out of memory\n");
            return epicsTimeERROR;
        }

        pout = message;

        for (ptp = (gtProvider *)ellFirst(&gtPvt.eventProviders);
             ptp; ptp = (gtProvider *)ellNext(&ptp->node)) {
            pout += sprintf(pout, "    \"%s\", priority = %d\n",
                ptp->name, ptp->priority);
        }
        epicsMutexUnlock(gtPvt.eventListLock);
        puts(message);
        free(message);
    }
    else
    {
        epicsMutexUnlock(gtPvt.eventListLock);
        printf("\tNo Providers registered.\n");
    }

    return epicsTimeOK;
}
static long process(struct timestampRecord *ptimestamp){

 const char * format=NULL; 
  ptimestamp->udf  = FALSE;
  ptimestamp->pact = TRUE;

  /* Device time here is the OS time appart from any epics
   * time stamp system */

  if (ptimestamp->tse==epicsTimeEventDeviceTime)
      epicsTimeFromTime_t(&ptimestamp->time,time(0));
  else
      recGblGetTimeStamp(ptimestamp);
  ptimestamp->rval=ptimestamp->time.secPastEpoch;

  if (ptimestamp->time.secPastEpoch==0)
  {
    sprintf(ptimestamp->val,"-NULL-");
  }
  else switch(ptimestamp->tst)
  {
  case timestampTST_YY_MM_DD_HH_MM_SS:
      format="%y/%m/%d %H:%M:%S";
    break;
  case timestampTST_MM_DD_YY_HH_MM_SS:
      format="%m/%d/%y %H:%M:%S";
    break;
  case timestampTST_MM_DD_HH_MM_SS_YY:
      format="%b %d %H:%M:%S %y" ;
    break;
  case timestampTST_MM_DD_HH_MM_SS:
      format="%b %d %H:%M:%S";
    break;
  case timestampTST_HH_MM_SS:
      format="%H:%M:%S";
    break;
  case timestampTST_HH_MM:
      format="%H:%M";
    break;
  case timestampTST_DD_MM_YY_HH_MM_SS:
      format="%d/%m/%y %H:%M:%S";
    break;
  case timestampTST_DD_MM_HH_MM_SS_YY:
      format="%d %b %H:%M:%S %y";
    break;
  case timestampTST_VMS:
      format="%d-%b-%Y %H:%M:%S";
    break;
  case timestampTST_MM_DD_YYYY:
      format="%b %d %Y %H:%M:%S.%03f";
    break;
  case timestampTST_MM_DD_YY:
      format="%m/%d/%y %H:%M:%S.%03f";
    break;
  default :  /* YY/MM/DD HH:MM:SS */
      format="%y/%m/%d %H:%M:%S";
    break;
  }
  if (format)
      epicsTimeToStrftime(ptimestamp->val,sizeof(ptimestamp->val),format,
	      &ptimestamp->time);
  /* check event list */
  monitor(ptimestamp);

  /* process the forward scan link record */
  recGblFwdLink(ptimestamp);
  ptimestamp->pact=FALSE;
  return(0);
}
void PvaPyLogger::prepareTimeStamp(char* timeStamp, int timeStampLength, const char* timeStampFormat) 
{
    epicsTimeStamp now;
    epicsTimeGetCurrent(&now);
    epicsTimeToStrftime(timeStamp, timeStampLength, timeStampFormat, &now);
}