コード例 #1
0
ファイル: pv_gettersetter.c プロジェクト: mdcb/python-ca
PyObject *pv_getter_pvtime(pvobject * self, void *closure)
{
	struct timespec posixtime;
	if (self->chanId && self->buff != NULL) {
		epicsTimeToTimespec(&posixtime, &self->buff->stamp);
		return PyFloat_FromDouble((double)posixtime.tv_sec +
					  (double)posixtime.tv_nsec * 1e-9);
	} else {
		PYCA_ERR("pvtime: indef");
	}
}
コード例 #2
0
ファイル: wave2rootSub.c プロジェクト: JeffersonLab/hps-epics
/*
 * Process records to save waveform data
 */
static long wave2rootDataProcess(aSubRecord *record) {

	if (wave2rootDebug > 2)
		printf("Record %s called wave2rootDataProcess(%p)\n", record->name,
				(void*) record);

	// daq_state: 0 = writing, 1 = stopped
	epicsEnum16 daq_state = *(epicsEnum16*) (record->c);

	// convert EPICS time to POSIX time
	struct timespec posixTime = { 0, 0 };
	epicsTimeToTimespec(&posixTime, &record->time);

	// save previous timestamp, posixTime, and data, vala, to file
	if (!daq_state && posixTime.tv_sec > 0) {
		if (GetBufferSize() < 1000) {
			WriteRootFile(record->b, &posixTime, record->vala, record->noa);
		} else {
			printf("Buffer length exceeds 1000, exiting the program!");
			return 1;
		}
	}
	if (wave2rootDebug > 2) {
		struct tm tsLocal = *localtime(&posixTime.tv_sec);
		char timeString[128];  // Reserve string for timestamp
		strftime(timeString, sizeof(timeString), "%Z %a %Y-%m-%d %H:%M:%S",
				&tsLocal);
		char nsTime[64];
		sprintf(nsTime, "%ld", posixTime.tv_nsec);
/* 		if (strcmp(record->b, "halld-pxi:array:vtt4") == 0) */
/* 			printf("%s : %s.%s   %8.5f   %8.5f \n", (char*) record->b, */
/* 					timeString, nsTime, ((float*) record->a)[5000 - 1], */
/* 					((float*) record->vala)[5000 - 1]); */
	}

	// update file name and size
	const char* file_name = GetFileName();
	long file_size = GetFileSize();
	strcpy(record->vald, file_name);
	((long*) record->vale)[0] = file_size;

	// copy updated data to vala
	memcpy(record->vala, record->a, record->noa * (sizeof(float)));

	return 0;
}
コード例 #3
0
ファイル: osiClockTime.c プロジェクト: ukaea/epics
static void ClockTimeSync(void *dummy)
{
    taskwdInsert(0, NULL, NULL);

    for (epicsEventWaitWithTimeout(ClockTimePvt.loopEvent,
             ClockTimeSyncInterval);
         ClockTimePvt.synchronize == CLOCKTIME_SYNC;
         epicsEventWaitWithTimeout(ClockTimePvt.loopEvent,
             ClockTimeSyncInterval)) {
        epicsTimeStamp timeNow;
        int priority;

        if (generalTimeGetExceptPriority(&timeNow, &priority,
                LAST_RESORT_PRIORITY) == epicsTimeOK) {
            struct timespec clockNow;

            epicsTimeToTimespec(&clockNow, &timeNow);
            if (clock_settime(CLOCK_REALTIME, &clockNow)) {
                errlogPrintf("ClockTimeSync: clock_settime failed\n");
                continue;
            }

            epicsMutexMustLock(ClockTimePvt.lock);
            if (!ClockTimePvt.synchronized) {
                ClockTimePvt.startTime    = timeNow;
                ClockTimePvt.synchronized = 1;
            }
            ClockTimePvt.syncFromPriority = priority;
            ClockTimePvt.syncTime         = timeNow;
            epicsMutexUnlock(ClockTimePvt.lock);
        }
    }

    ClockTimePvt.synchronized = 0;
    taskwdRemove(0);
}