Get the Input Port Data Type
Within your S-function, you might need to know the data types of different ports, run-time parameters, and DWorks. In each case, you will need to get the data type ID of the data type, and then use functions from this API to extract information about the data type.
For example, suppose you need to know the data type of your input port. To do this,
Use
ssGetInputPortDataType
. The data type ID of the input port is returned.Use API functions to extract information about the data type.
The following lines of example code are from sfun_user_fxp_dtprop.c
.
In lines 199 and 200, ssGetInputPortDataType
is used to get the data type
ID for the two input ports of the S-function:
dataTypeIdU0 = ssGetInputPortDataType( S, 0 ); dataTypeIdU1 = ssGetInputPortDataType( S, 1 );
Further on in the file, the data type IDs are used with API
functions to get information about the input port data types. In lines
205 through 226, a check is made to see whether the input port data
types are single
or double
:
storageContainerU0 = ssGetDataTypeStorageContainCat( S, dataTypeIdU0 ); storageContainerU1 = ssGetDataTypeStorageContainCat( S, dataTypeIdU1 ); if ( storageContainerU0 == FXP_STORAGE_DOUBLE || storageContainerU1 == FXP_STORAGE_DOUBLE ) { /* Doubles take priority over all other rules. * If either of first two inputs is double, * then third input is set to double. */ dataTypeIdU2Desired = SS_DOUBLE; } else if ( storageContainerU0 == FXP_STORAGE_SINGLE || storageContainerU1 == FXP_STORAGE_SINGLE ) { /* Singles take priority over all other rules, * except doubles. * If either of first two inputs is single * then third input is set to single. */ dataTypeIdU2Desired = SS_SINGLE; } else
In lines 227 through 244, additional API functions are used
to get information about the data types if they are neither single
nor double
:
{ isSignedU0 = ssGetDataTypeFxpIsSigned( S, dataTypeIdU0 ); isSignedU1 = ssGetDataTypeFxpIsSigned( S, dataTypeIdU1 ); wordLengthU0 = ssGetDataTypeFxpWordLength( S, dataTypeIdU0 ); wordLengthU1 = ssGetDataTypeFxpWordLength( S, dataTypeIdU1 ); fracSlopeU0 = ssGetDataTypeFracSlope( S, dataTypeIdU0 ); fracSlopeU1 = ssGetDataTypeFracSlope( S, dataTypeIdU1 ); fixedExponentU0 = ssGetDataTypeFixedExponent( S,dataTypeIdU0 ); fixedExponentU1 = ssGetDataTypeFixedExponent( S,dataTypeIdU1 ); totalSlopeU0 = ssGetDataTypeTotalSlope( S, dataTypeIdU0 ); totalSlopeU1 = ssGetDataTypeTotalSlope( S, dataTypeIdU1 ); biasU0 = ssGetDataTypeBias( S, dataTypeIdU0 ); biasU1 = ssGetDataTypeBias( S, dataTypeIdU1 ); }
The functions used above return whether the data types are signed or unsigned, as well as their word lengths, fractional slopes, exponents, total slopes, and biases. Together, these quantities give full information about the fixed-point data types of the input ports.