From 68f93f75ed79c2c6266e555526d83e5eb5064cd4 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 2 Apr 2003 20:51:25 +0000 Subject: [PATCH] Renamed scan_list.rate => scanlist.period (which is really is). float => double change for temp value. Added scanPeriod() routine to convert a menuScan value into seconds. --- src/db/dbScan.c | 25 +++++++++++++++++-------- src/db/dbScan.h | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/db/dbScan.c b/src/db/dbScan.c index a2f85ac27..32d412bcb 100644 --- a/src/db/dbScan.c +++ b/src/db/dbScan.c @@ -59,7 +59,7 @@ typedef struct scan_list{ epicsMutexId lock; ELLLIST list; short modified;/*has list been modified?*/ - double rate; + double period; }scan_list; /*scan_elements are allocated and the address stored in dbCommon.spvt*/ typedef struct scan_element{ @@ -284,8 +284,17 @@ void epicsShareAPI scanDelete(struct dbCommon *precord) } return; } + +double epicsShareAPI scanPeriod(int scan) { + if (scan>=SCAN_1ST_PERIODIC) { + int ind = scan - SCAN_1ST_PERIODIC; + scan_list *psl = papPeriodic[ind]; + return psl->period; + } + return 0.0; +} -int epicsShareAPI scanppl(double rate) /*print periodic list*/ +int epicsShareAPI scanppl(double period) /*print periodic list*/ { scan_list *psl; char message[80]; @@ -294,8 +303,8 @@ int epicsShareAPI scanppl(double rate) /*print periodic list*/ for (i=0; i0.0 && (fabs(rate - psl->rate) >.05)) continue; - sprintf(message,"Scan Period= %f seconds ",psl->rate); + if(period>0.0 && (fabs(period - psl->period) >.05)) continue; + sprintf(message,"Scan Period= %f seconds ",psl->period); printList(psl,message); } return(0); @@ -477,7 +486,7 @@ static void periodicTask(void *arg) if(interruptAccept)scanList(psl); epicsTimeGetCurrent(&end_time); diff = epicsTimeDiffInSeconds(&end_time,&start_time); - delay = psl->rate - diff; + delay = psl->period - diff; delay = (delay<=0.0) ? .1 : delay; epicsThreadSleep(delay); epicsTimeGetCurrent(&start_time); @@ -489,7 +498,7 @@ static void initPeriodic() { dbMenu *pmenu; scan_list *psl; - float temp; + double temp; int i; pmenu = dbFindMenu(pdbbase,"menuScan"); @@ -506,7 +515,7 @@ static void initPeriodic() psl->lock = epicsMutexMustCreate(); ellInit(&psl->list); sscanf(pmenu->papChoiceValue[i+SCAN_1ST_PERIODIC],"%f",&temp); - psl->rate = temp; + psl->period = temp; } } @@ -516,7 +525,7 @@ static void spawnPeriodic(int ind) char taskName[20]; psl = papPeriodic[ind]; - sprintf(taskName,"scan%f",psl->rate); + sprintf(taskName,"scan%f",psl->period); /*strip off trailing 0s*/ while(taskName[strlen(taskName)-1]=='0') taskName[strlen(taskName)-1] = 0; /*strip trailing . */ diff --git a/src/db/dbScan.h b/src/db/dbScan.h index 9c55467e3..f9ffee35e 100644 --- a/src/db/dbScan.h +++ b/src/db/dbScan.h @@ -37,6 +37,7 @@ epicsShareFunc long epicsShareAPI scanInit(void); epicsShareFunc void epicsShareAPI post_event(int event); epicsShareFunc void epicsShareAPI scanAdd(struct dbCommon *); epicsShareFunc void epicsShareAPI scanDelete(struct dbCommon *); +epicsShareFunc double epicsShareAPI scanPeriod(int scan); epicsShareFunc void epicsShareAPI scanOnce(void *precord); epicsShareFunc int epicsShareAPI scanOnceSetQueueSize(int size); /*print periodic lists*/