asSetFileName(0) asInit(0)does not turn off acccess security like the documentation implies. Channel access also reports host to be the workstation even for remote users.
Maybe a solution is to call alarm and monitor from recSup init_record routine.
Don't suspend UDP task if we get the "no route to dest" error (has happened at APS and at CEBAF). This has the potential to disable all future connections to the server until the IOC is rebooted - a simple fix.
180c180 < if(ca_field_type(chan_id)==0) { --- > if(ca_field_type(chan_id)==DBR_STRING) { 203c203,206 < ca_pend_event(1.0); --- > unsigned oldOut; > > oldOut = outstanding; > ca_pend_event (5.0); 210c213,215 < ntries--; --- > if (outstanding==oldOut) { > ntries--; > }
341,342c341,342 < work = (dio[card].dptr->port6_7 << 16) < + dio[card].dptr->port4_5; --- > work = (dio[card].dptr->port4_5 << 16) > + dio[card].dptr->port6_7; 346,347c346,347 < dio[card].dptr->port6_7 = (unsigned short)(work >> 16); < dio[card].dptr->port4_5 = (unsigned short)work; --- > dio[card].dptr->port4_5 = (unsigned short)(work >> 16); > dio[card].dptr->port6_7 = (unsigned short)work;
This problem stems from a fundamental difference between the timeval data structure under under HPUX and under other OS such as SUNOS4:
HP UX: struct timeval { unsigned long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; SUNOS4: struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ };CA isnt expecting tv_sec to be unsigned. When it is unsigned this causes a drastic change in the arithmetic in cac_time_diff().
Of course all of this results from there being no way to fetch sub sec granularity time in POSIX. The result is we end up calling the defacto standard BSD gettimeofday() which uses struct timeval.
/* * cac_time_diff() */ ca_real cac_time_diff (ca_time *pTVA, ca_time *pTVB) { ca_real delay; ca_real udelay; /* * works with unsigned tv_sec in struct timeval * under HPUX */ if (pTVA->tv_sec>pTVB->tv_sec) { delay = pTVA->tv_sec - pTVB->tv_sec; } else { delay = pTVB->tv_sec - pTVA->tv_sec; delay = -delay; } if(pTVA->tv_usec>pTVB->tv_usec){ udelay = pTVA->tv_usec - pTVB->tv_usec; } else{ delay -= 1.0; udelay = (USEC_PER_SEC - pTVB->tv_usec) + pTVA->tv_usec; } delay += udelay / USEC_PER_SEC; return delay; }
base/src/dct/comsubs.c base/src/sequencer/snc_lex.l (many extension/src files)
#if defined(SVR4) # include <sys/select.h> #endif
#include <netdb.h> #include <sys/filio.h> #include <sys/sockio.h>
If fewer than the native count to be returned, a user should temporarily use the '/monitor' keyword. If the requested pvname is not monitored, just ignore the '...not monitored yet' message.
application("any text that you want").
The purpose of this is to allow you to document the function being performed by the records in the ".db" file. You can put as many application() token in the ".db" file as you like. This is more than just a comment, dbLoadRecords() is smart enough to record these string as ".db" files are read into the IOC. A new utility called dbAppList() will display all the text strings. If a ".db" does not have an application() string, dbLoadRecords() will make an entry which is the name of the ".db" file.
The remote PV list utility, called rdbls, can be run from any workstation. You give an a parameter the name or IP address of an IOC, and it will spit out all the process variables available on the IOC.
The application list utility will show all the file names loaded on the IOC with dbLoadRecords(). DbLoadRecords() has been modified to accept a new token describing the application in the ".db" file. The application list utility will also print these descriptive strings. The name of this utility is rdbapplist.
The new facility allows for users to add their own services and communicate with them easily. I will explain the interface if people are interested.
The new facility does not start automatically, a function must be run in the startup.cmd file after IocInit(). Running PVSstart() starts the server running. After PVSstart is run, you can use rdbls and rdbapplist from a workstation to that IOC.
#define DB_UNITS_SIZE 16The current definition for DBRunits will be changed to
#define DBRunits char units[DB_UNITS_SIZE]Since everything is local to an ioc it is ok to change from 8 characters to 16.
The get_units of each record support module will be changed from
strncpy(units,pai->egu,sizeof(pai->egu));to:
strncpy(units,pai->egu,DB_UNITS_SIZE);New database access, after calling the record support get_units routine, will force the last byte of the units string to be null.
The routine that translates between old and new database access will force the units field passed to channel access to be a null terminated 8 byte field.
This solution has the following features:
1) New database access completely supports a 16 byte null terminated units string
2) Clients (database and channel access) always get a null terminated string.
3) When we go to new major EPICS release number, i.e. CA protocal change database access will already support 16 byte character strings.
The only impact on existing clients is that some may find 8th character of units string missing.
compu_driver(card, channel, value_flag,arg1,arg2)Previously the channel parameter was missing.
New Language Features:
It is possible to include it in EPICS Release 3.12.1.2 by updating several ascii files and recompiling the source.
Using this Version of the WAIT record with EPICS Releases prior to 3.12.1.2 is NOT recommended.
The following features are new in ADT, compared to Orbitscreen:
SDDS documentation is also available here.