Fix type problem with local CA channels

This commit fixes a problem introduced in Bazaar commit 12658.
Local CA channels were seeing the data type of a channel as an
IOC-specific (dbFldTypes.h) type value instead of the CA type
value from db_access.h.

We introduce a pair of dbChannel*CAType() macros which convert
the dbChannel's dbr_field_type and final_type values into the
CA equivalent type values, and use these macros whenever the
CA encoded field type value is needed. This ensures that the
meaning of the dbChannel member fields never changes (in 3.14
the addr.dbr_field_type was overwritten with the converted
value when connected to by rsrv).
This commit is contained in:
Andrew Johnson
2015-04-22 16:51:31 -05:00
parent bcf47ac663
commit 2774b4c4af
5 changed files with 15 additions and 23 deletions

View File

@@ -159,7 +159,7 @@ void dbChannelIO::show (
if ( level > 0u ) {
printf ( " type %s, element count %li, field at %p\n",
dbf_type_to_text ( dbChannelExportType ( this->dbch ) ),
dbf_type_to_text ( dbChannelExportCAType ( this->dbch ) ),
dbChannelElements ( this->dbch ),
dbChannelField ( this->dbch ) );
if ( level > 1u ) {
@@ -206,7 +206,7 @@ short dbChannelIO::nativeType (
epicsGuard < epicsMutex > & guard ) const
{
guard.assertIdenticalMutex ( this->mutex );
return dbChannelExportType( this->dbch );
return dbChannelExportCAType( this->dbch );
}
void * dbChannelIO::operator new ( size_t size,