diff --git a/src/ioc/db/dbScan.c b/src/ioc/db/dbScan.c index 08c5c4af3..272b185b0 100644 --- a/src/ioc/db/dbScan.c +++ b/src/ioc/db/dbScan.c @@ -580,6 +580,28 @@ unsigned int scanIoRequest(IOSCANPVT piosh) return queued; } +unsigned int scanIoImmediate(IOSCANPVT piosh, int prio) +{ + io_scan_list *piosl; + + if (prio<0 || prio>=NUM_CALLBACK_PRIORITIES) + return S_db_errArg; + else if (scanCtl != ctlRun) + return 0; + + piosl = &piosh->iosl[prio]; + + if (ellCount(&piosl->scan_list.list) == 0) + return 0; + + scanList(&piosl->scan_list); + + if (piosh->cb) + piosh->cb(piosh->arg, piosh, prio); + + return 1 << prio; +} + /* May not be called while a scan request is queued or running */ void scanIoSetComplete(IOSCANPVT piosh, io_scan_complete cb, void *arg) { diff --git a/src/ioc/db/dbScan.h b/src/ioc/db/dbScan.h index cd9666348..8bd2bba22 100644 --- a/src/ioc/db/dbScan.h +++ b/src/ioc/db/dbScan.h @@ -68,6 +68,7 @@ epicsShareFunc int scanpiol(void); epicsShareFunc void scanIoInit(IOSCANPVT *ppios); epicsShareFunc unsigned int scanIoRequest(IOSCANPVT pios); +epicsShareFunc unsigned int scanIoImmediate(IOSCANPVT pios, int prio); epicsShareFunc void scanIoSetComplete(IOSCANPVT, io_scan_complete, void *usr); #ifdef __cplusplus