7 Commits

Author SHA1 Message Date
Ralph Lange
297fa347a9 Prepare release 4.13.2; SONAME = 4.13.0 (unchanged) 2018-09-14 11:56:43 +02:00
Ralph Lange
0556439fa7 Fix spinning on zero length search request (lp:1743321; from 3.14) 2018-09-14 11:52:23 +02:00
Ralph Lange
3bf4e95de8 Step version to 4.13.2-DEV for development 2018-09-11 09:53:37 +02:00
Ralph Lange
46b839c3ce Prepare release 4.13.1; SONAME 4.13.0 (unchanged) 2018-09-10 16:18:02 +02:00
Ralph Lange
55a20fb4d9 Update links in README 2018-09-10 16:16:23 +02:00
Ralph Lange
6544bc0ae5 Update pcas CA error msgs to include the pv name for easier debugging.
(from Bruce Hill @3.15: 05a3699b)
2018-09-07 15:46:38 +02:00
Ralph Lange
8e93f8ce69 Step version to 4.13.1-DEV 2017-11-03 14:40:23 +01:00
4 changed files with 30 additions and 20 deletions

View File

@@ -1,8 +1,10 @@
# PCAS - Portable Channel Access Server
Portable Channel Access Server and Generic Data Descriptor C++ libraries,
split off [EPICS Base 3.16.1](http://www.aps.anl.gov/epics/base/R3-16/1.php)
as a separate module for EPICS 7.
[EPICS](https://epics-controls.org/) Portable Channel Access Server
and Generic Data Descriptor C++ libraries, split off from
[EPICS Base 3.16.1](https://epics-controls.org/resources-and-support/base/series-3-16/3-16-1/)
as a separate module for
[EPICS 7](https://epics-controls.org/resources-and-support/base/epics-7/).
The repository keeps the complete history of the code, i.e. it is a clone
of the EPICS Base repository, which explains its size.
@@ -20,5 +22,5 @@ manually export the CA client library header file `net_convert.h`:
cp <EPICS_BASE>/src/ca/client/net_convert.h <EPICS_BASE>/include/
Additional information and documentation:
* [Base 3.16.1 home page](http://www.aps.anl.gov/epics/base/R3-16/1.php)
* [CA Reference Manual](http://www.aps.anl.gov/epics/base/R3-16/1-docs/CAref.html)
* [Base 3.16.1 home page](https://epics-controls.org/resources-and-support/base/series-3-16/3-16-1/)
* [CA 4.13.1 Reference Manual](https://epics.anl.gov/base/R7-0/1-docs/CAref.html)

View File

@@ -1,6 +1,6 @@
EPICS_PCAS_MAJOR_VERSION = 4
EPICS_PCAS_MINOR_VERSION = 13
EPICS_PCAS_MAINTENANCE_VERSION = 0
EPICS_PCAS_MAINTENANCE_VERSION = 2
EPICS_PCAS_DEVELOPMENT_FLAG = 0
EXPANDVARS += EPICS_PCAS_MAJOR_VERSION

View File

@@ -665,6 +665,10 @@ caStatus casDGClient::processDG ()
if ( status != S_cas_success ) {
break;
}
if ( this->in.bytesPresent () > 0 && dgInBytesConsumed == 0 ) {
this->in.removeMsg ( this->in.bytesPresent() );
}
}
return status;
}

View File

@@ -26,6 +26,11 @@
#include "casAsyncIOI.h"
#include "casMonitor.h"
// Use casErrMessage instead of errMessage to show PV name
#define casErrMessage(S, PM) \
errPrintf(S, __FILE__, __LINE__, ", %s, %s", getName(), PM)
casPVI::casPVI ( casPV & intf ) :
pCAS ( NULL ), pPV ( & intf ), nMonAttached ( 0u ),
nIOAttached ( 0u ), deletePending ( false ) {}
@@ -146,7 +151,7 @@ caStatus casPVI::updateEnumStringTable ( casCtx & ctxIn )
// gddArray(int app, aitEnum prim, int dimen, ...);
gdd * pTmp = new gddScalar ( gddAppType_enums );
if ( pTmp == NULL ) {
errMessage ( S_cas_noMemory,
casErrMessage ( S_cas_noMemory,
"unable to create gdd for read of application type \"enums\" string"
" conversion table for enumerated PV" );
return S_cas_noMemory;
@@ -156,8 +161,8 @@ caStatus casPVI::updateEnumStringTable ( casCtx & ctxIn )
gddAppType_enums, MAX_ENUM_STATES );
if ( status != S_cas_success ) {
pTmp->unreference ();
errMessage ( status,
"unable to to config gdd for read of application type \"enums\" string"
casErrMessage ( status,
"unable to config gdd for read of application type \"enums\" string"
" conversion table for enumerated PV");
return status;
}
@@ -187,9 +192,9 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
epicsGuard < epicsMutex > guard ( this->mutex );
if ( resp.isContainer() ) {
errMessage ( S_cas_badType,
"application type \"enums\" string conversion table for"
" enumerated PV was a container (expected vector of strings)" );
casErrMessage ( S_cas_badType,
"Invalid \"enums\" string conversion table for"
" enumerated PV (container instead of vector of strings)" );
return;
}
@@ -197,14 +202,14 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
if ( resp.primitiveType() == aitEnumString ) {
aitString *pStr = (aitString *) resp.dataVoid ();
if ( ! this->enumStrTbl.setString ( 0, pStr->string() ) ) {
errMessage ( S_cas_noMemory,
casErrMessage ( S_cas_noMemory,
"no memory to set enumerated PV string cache" );
}
}
else if ( resp.primitiveType() == aitEnumFixedString ) {
aitFixedString *pStr = (aitFixedString *) resp.dataVoid ();
if ( ! this->enumStrTbl.setString ( 0, pStr->fixed_string ) ) {
errMessage ( S_cas_noMemory,
casErrMessage ( S_cas_noMemory,
"no memory to set enumerated PV string cache" );
}
}
@@ -232,7 +237,7 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
aitString *pStr = (aitString *) resp.dataVoid ();
for ( index = 0; index<count; index++ ) {
if ( ! this->enumStrTbl.setString ( index, pStr[index].string() ) ) {
errMessage ( S_cas_noMemory,
casErrMessage ( S_cas_noMemory,
"no memory to set enumerated PV string cache" );
}
}
@@ -241,19 +246,18 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
aitFixedString *pStr = (aitFixedString *) resp.dataVoid ();
for ( index = 0; index < count; index++ ) {
if ( ! this->enumStrTbl.setString ( index, pStr[index].fixed_string ) ) {
errMessage ( S_cas_noMemory,
casErrMessage ( S_cas_noMemory,
"no memory to set enumerated PV string cache" );
}
}
}
else {
errMessage ( S_cas_badType,
"application type \"enums\" string conversion"
" table for enumerated PV isnt a string type?" );
casErrMessage( S_cas_badType,
"bad \"enums\" string conversion table for enumerated PV" );
}
}
else {
errMessage ( S_cas_badType,
casErrMessage ( S_cas_badType,
"application type \"enums\" string conversion table"
" for enumerated PV was multi-dimensional"
" (expected vector of strings)" );