25 #include "epicsEndian.h" 42 #if EPICS_BYTE_ORDER != EPICS_ENDIAN_BIG || EPICS_FLOAT_WORD_ORDER != EPICS_BYTE_ORDER 43 # if ! defined ( EPICS_CONVERSION_REQUIRED ) 44 # define EPICS_CONVERSION_REQUIRED 54 inline void WireGet < epicsFloat64 > (
55 const epicsUInt8 * pWireSrc, epicsFloat64 & dst )
64 # if EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE 65 WireGet ( pWireSrc, tmp._u[1] );
66 WireGet ( pWireSrc + 4, tmp._u[0] );
67 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG 68 WireGet ( pWireSrc, tmp._u[0] );
69 WireGet ( pWireSrc + 4, tmp._u[1] );
71 # error unsupported floating point word order 76 #if defined ( __GNUC__ ) && ( __GNUC__ == 4 && __GNUC_MINOR__ <= 0 ) 78 inline void WireGet < epicsOldString > (
81 memcpy ( dst, pWireSrc,
sizeof ( dst ) );
87 memcpy ( dst, pWireSrc,
sizeof ( dst ) );
92 inline void WireSet < epicsFloat64 > (
93 const epicsFloat64 & src, epicsUInt8 * pWireDst )
103 # if EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE 104 WireSet ( tmp._u[1], pWireDst );
105 WireSet ( tmp._u[0], pWireDst + 4 );
106 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG 107 WireSet ( tmp._u[0], pWireDst );
108 WireSet ( tmp._u[1], pWireDst + 4 );
110 # error unsupported floating point word order 114 #if defined ( __GNUC__ ) && ( __GNUC__ == 4 && __GNUC_MINOR__ <= 0 ) 116 inline void WireSet < epicsOldString > (
119 memcpy ( pWireDst, src,
sizeof ( src ) );
122 inline void WireSet (
125 memcpy ( pWireDst, src,
sizeof ( src ) );
130 inline void AlignedWireGet < epicsUInt16 > (
131 const epicsUInt16 & src, epicsUInt16 & dst )
133 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE 134 dst = byteSwap ( src );
135 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG 138 # error unsupported endian type 143 inline void AlignedWireGet < epicsUInt32 > (
144 const epicsUInt32 & src, epicsUInt32 & dst )
146 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE 147 dst = byteSwap ( src );
148 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG 151 # error unsupported endian type 156 inline void AlignedWireGet < epicsFloat64 > (
157 const epicsFloat64 & src, epicsFloat64 & dst )
166 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG && EPICS_FLOAT_WORD_ORDER == EPICS_BYTE_ORDER 168 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG 171 AlignedWireGet ( tmp._u[0], tmp._u[0] );
172 AlignedWireGet ( tmp._u[1], tmp._u[1] );
174 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE 177 AlignedWireGet ( srcu._u[1], dstu._u[0] );
178 AlignedWireGet ( srcu._u[0], dstu._u[1] );
181 # error unsupported floating point word order 186 inline void AlignedWireSet < epicsUInt16 >
187 (
const epicsUInt16 & src, epicsUInt16 & dst )
189 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE 190 dst = byteSwap ( src );
191 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG 194 # error undefined endian type 199 inline void AlignedWireSet < epicsUInt32 > (
200 const epicsUInt32 & src, epicsUInt32 & dst )
202 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE 203 dst = byteSwap ( src );
204 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG 207 # error undefined endian type 212 inline void AlignedWireSet < epicsFloat64 > (
213 const epicsFloat64 & src, epicsFloat64 & dst )
222 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG && EPICS_FLOAT_WORD_ORDER == EPICS_BYTE_ORDER 224 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG 227 AlignedWireSet ( tmp._u[0], tmp._u[0] );
228 AlignedWireSet ( tmp._u[1], tmp._u[1] );
230 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE 233 AlignedWireSet ( srcu._u[1], dstu._u[0] );
234 AlignedWireSet ( srcu._u[0], dstu._u[1] );
237 # error unsupported floating point word order 241 #endif // osdWireFormat char epicsOldString[MAX_STRING_SIZE]
!! Dont use this - it may vanish in the future !!