Files
epics-base/modules/database/src/ioc/db/dbScan.h
Michael Davidsaver 022b8d468b document dbScan.h
2024-10-20 10:18:30 -07:00

140 lines
4.3 KiB
C

/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* SPDX-License-Identifier: EPICS
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author: Marty Kraimer
* Date: 07-17-91
*/
#ifndef INCdbScanH
#define INCdbScanH
#include <limits.h>
#include "menuScan.h"
#include "dbCoreAPI.h"
#include "compilerDependencies.h"
#include "devSup.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SCAN_PASSIVE menuScanPassive
#define SCAN_EVENT menuScanEvent
#define SCAN_IO_EVENT menuScanI_O_Intr
#define SCAN_1ST_PERIODIC (menuScanI_O_Intr + 1)
#define MAX_PHASE SHRT_MAX
#define MIN_PHASE SHRT_MIN
/*definitions for I/O Interrupt Scanning */
/* IOSCANPVT now defined in devSup.h */
typedef struct event_list *EVENTPVT;
struct dbCommon;
typedef void (*io_scan_complete)(void *usr, IOSCANPVT, int prio);
typedef void (*once_complete)(void *usr, struct dbCommon*);
typedef struct scanOnceQueueStats {
int size;
int numUsed;
int maxUsed;
int numOverflow;
} scanOnceQueueStats;
DBCORE_API long scanInit(void);
DBCORE_API void scanRun(void);
DBCORE_API void scanPause(void);
DBCORE_API void scanStop(void);
DBCORE_API void scanCleanup(void);
DBCORE_API EVENTPVT eventNameToHandle(const char* event);
DBCORE_API void postEvent(EVENTPVT epvt);
DBCORE_API void post_event(int event);
DBCORE_API void scanAdd(struct dbCommon *);
DBCORE_API void scanDelete(struct dbCommon *);
DBCORE_API double scanPeriod(int scan);
/** Shorthand for scanOnceCallback(prec, NULL, NULL)
*/
DBCORE_API int scanOnce(struct dbCommon *prec);
/** @brief scanOnce Request immediate record processing from another thread.
*
* Queue a request for record processing from the dedicated "Once" thread.
* Request may fail if Once queue overflows. See scanOnceSetQueueSize()
*
* @param prec Record to process
* @param cb Function called after target record dbProcess()
* Does not wait for async record completion.
* @param usr Argumentfor cb
* @return Zero on success. Non-zero if the request could not be queued.
*/
DBCORE_API int scanOnceCallback(struct dbCommon *prec, once_complete cb, void *usr);
/** @brief Set Once queue size
*
* Must be called prior to iocInit()
*
* @param size New size. May be smaller
* @return Zero on success
*/
DBCORE_API int scanOnceSetQueueSize(int size);
DBCORE_API int scanOnceQueueStatus(const int reset, scanOnceQueueStats *result);
DBCORE_API void scanOnceQueueShow(const int reset);
/*print periodic lists*/
DBCORE_API int scanppl(double rate);
/*print event lists*/
DBCORE_API int scanpel(const char *event_name);
/*print io_event list*/
DBCORE_API int scanpiol(void);
/** @brief Initialize "I/O Intr" source
* @param ppios Pointer to scan list to be initialized
*
* Afterwards this IOSCANPVT may be assigned during a get_ioint_info() callback.
* See typed_dset::get_ioint_info()
*
* @note There is currently no way to free this allocation.
*/
DBCORE_API void scanIoInit(IOSCANPVT *ppios);
/** @brief Request processing of all associated records from callback threads
* @param pios The scan list
* @pre pios must be initialized by scanIoInit()
* @return
*/
DBCORE_API unsigned int scanIoRequest(IOSCANPVT pios);
/** @brief Process all records on the scan list for the specificed priority.
*
* Also executes the callback set by scanIoSetComplete()
*
* @param pios The scan list
* @param prio one of priorityLow through priorityHigh (defined in callback.h).
* A value between 0 and NUM_CALLBACK_PRIORITIES-1 .
* @return Zero if the scan list was empty or 1<<prio
* @since 3.16.0.1
*/
DBCORE_API unsigned int scanIoImmediate(IOSCANPVT pios, int prio);
/** @brief Set scan list completion callback
*
* Replace the callback which will be invoked after record processing begins.
* Asynchronous record processing may be ongoing.
*
* @since 3.15.0.2
*/
DBCORE_API void scanIoSetComplete(IOSCANPVT, io_scan_complete, void *usr);
#ifdef __cplusplus
}
#endif
#endif