/* * File: hal_file_io.c * * * --- THIS FILE GENERATED BY S-FUNCTION BUILDER: 3.0 --- * * This file is an S-function produced by the S-Function * Builder which only recognizes certain fields. Changes made * outside these fields will be lost the next time the block is * used to load, edit, and resave this file. This file will be overwritten * by the S-function Builder block. If you want to edit this file by hand, * you must change it only in the area defined as: * * %%%-SFUNWIZ_defines_Changes_BEGIN * #define NAME 'replacement text' * %%% SFUNWIZ_defines_Changes_END * * DO NOT change NAME--Change the 'replacement text' only. * * For better compatibility with the Simulink Coder, the * "wrapper" S-function technique is used. This is discussed * in the Simulink Coder's Manual in the Chapter titled, * "Wrapper S-functions". * * ------------------------------------------------------------------------- * | See matlabroot/simulink/src/sfuntmpl_doc.c for a more detailed template | * ------------------------------------------------------------------------- * * Created: Tue Nov 01 14:35:16 2022 */ #define S_FUNCTION_LEVEL 2 #define S_FUNCTION_NAME hal_file_io /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ /* %%%-SFUNWIZ_defines_Changes_BEGIN --- EDIT HERE TO _END */ #define NUM_INPUTS 5 /* Input Port 0 */ #define IN_PORT_0_NAME data #define INPUT_0_WIDTH DYNAMICALLY_SIZED #define INPUT_DIMS_0_COL 1 #define INPUT_0_DTYPE uint8_T #define INPUT_0_COMPLEX COMPLEX_NO #define IN_0_FRAME_BASED FRAME_NO #define IN_0_BUS_BASED 0 #define IN_0_BUS_NAME #define IN_0_DIMS 1-D #define INPUT_0_FEEDTHROUGH 1 #define IN_0_ISSIGNED 0 #define IN_0_WORDLENGTH 8 #define IN_0_FIXPOINTSCALING 1 #define IN_0_FRACTIONLENGTH 9 #define IN_0_BIAS 0 #define IN_0_SLOPE 0.125 /* Input Port 1 */ #define IN_PORT_1_NAME size #define INPUT_1_WIDTH 1 #define INPUT_DIMS_1_COL 1 #define INPUT_1_DTYPE uint16_T #define INPUT_1_COMPLEX COMPLEX_NO #define IN_1_FRAME_BASED FRAME_NO #define IN_1_BUS_BASED 0 #define IN_1_BUS_NAME #define IN_1_DIMS 1-D #define INPUT_1_FEEDTHROUGH 1 #define IN_1_ISSIGNED 0 #define IN_1_WORDLENGTH 8 #define IN_1_FIXPOINTSCALING 1 #define IN_1_FRACTIONLENGTH 9 #define IN_1_BIAS 0 #define IN_1_SLOPE 0.125 /* Input Port 2 */ #define IN_PORT_2_NAME offset #define INPUT_2_WIDTH 1 #define INPUT_DIMS_2_COL 1 #define INPUT_2_DTYPE uint32_T #define INPUT_2_COMPLEX COMPLEX_NO #define IN_2_FRAME_BASED FRAME_NO #define IN_2_BUS_BASED 0 #define IN_2_BUS_NAME #define IN_2_DIMS 1-D #define INPUT_2_FEEDTHROUGH 1 #define IN_2_ISSIGNED 0 #define IN_2_WORDLENGTH 8 #define IN_2_FIXPOINTSCALING 1 #define IN_2_FRACTIONLENGTH 9 #define IN_2_BIAS 0 #define IN_2_SLOPE 0.125 /* Input Port 3 */ #define IN_PORT_3_NAME opcode #define INPUT_3_WIDTH 1 #define INPUT_DIMS_3_COL 1 #define INPUT_3_DTYPE uint8_T #define INPUT_3_COMPLEX COMPLEX_NO #define IN_3_FRAME_BASED FRAME_NO #define IN_3_BUS_BASED 0 #define IN_3_BUS_NAME #define IN_3_DIMS 1-D #define INPUT_3_FEEDTHROUGH 1 #define IN_3_ISSIGNED 0 #define IN_3_WORDLENGTH 8 #define IN_3_FIXPOINTSCALING 1 #define IN_3_FRACTIONLENGTH 9 #define IN_3_BIAS 0 #define IN_3_SLOPE 0.125 /* Input Port 4 */ #define IN_PORT_4_NAME session #define INPUT_4_WIDTH 1 #define INPUT_DIMS_4_COL 1 #define INPUT_4_DTYPE uint8_T #define INPUT_4_COMPLEX COMPLEX_NO #define IN_4_FRAME_BASED FRAME_NO #define IN_4_BUS_BASED 0 #define IN_4_BUS_NAME #define IN_4_DIMS 1-D #define INPUT_4_FEEDTHROUGH 1 #define IN_4_ISSIGNED 0 #define IN_4_WORDLENGTH 8 #define IN_4_FIXPOINTSCALING 1 #define IN_4_FRACTIONLENGTH 9 #define IN_4_BIAS 0 #define IN_4_SLOPE 0.125 #define NUM_OUTPUTS 4 /* Output Port 0 */ #define OUT_PORT_0_NAME ret_data #define OUTPUT_0_WIDTH DYNAMICALLY_SIZED #define OUTPUT_DIMS_0_COL 1 #define OUTPUT_0_DTYPE uint8_T #define OUTPUT_0_COMPLEX COMPLEX_NO #define OUT_0_FRAME_BASED FRAME_NO #define OUT_0_BUS_BASED 0 #define OUT_0_BUS_NAME #define OUT_0_DIMS 1-D #define OUT_0_ISSIGNED 1 #define OUT_0_WORDLENGTH 8 #define OUT_0_FIXPOINTSCALING 1 #define OUT_0_FRACTIONLENGTH 3 #define OUT_0_BIAS 0 #define OUT_0_SLOPE 0.125 /* Output Port 1 */ #define OUT_PORT_1_NAME ret_size #define OUTPUT_1_WIDTH 1 #define OUTPUT_DIMS_1_COL 1 #define OUTPUT_1_DTYPE uint16_T #define OUTPUT_1_COMPLEX COMPLEX_NO #define OUT_1_FRAME_BASED FRAME_NO #define OUT_1_BUS_BASED 0 #define OUT_1_BUS_NAME #define OUT_1_DIMS 1-D #define OUT_1_ISSIGNED 1 #define OUT_1_WORDLENGTH 8 #define OUT_1_FIXPOINTSCALING 1 #define OUT_1_FRACTIONLENGTH 3 #define OUT_1_BIAS 0 #define OUT_1_SLOPE 0.125 /* Output Port 2 */ #define OUT_PORT_2_NAME ret #define OUTPUT_2_WIDTH 1 #define OUTPUT_DIMS_2_COL 1 #define OUTPUT_2_DTYPE int32_T #define OUTPUT_2_COMPLEX COMPLEX_NO #define OUT_2_FRAME_BASED FRAME_NO #define OUT_2_BUS_BASED 0 #define OUT_2_BUS_NAME #define OUT_2_DIMS 1-D #define OUT_2_ISSIGNED 1 #define OUT_2_WORDLENGTH 8 #define OUT_2_FIXPOINTSCALING 1 #define OUT_2_FRACTIONLENGTH 3 #define OUT_2_BIAS 0 #define OUT_2_SLOPE 0.125 /* Output Port 3 */ #define OUT_PORT_3_NAME in_progress #define OUTPUT_3_WIDTH 1 #define OUTPUT_DIMS_3_COL 1 #define OUTPUT_3_DTYPE boolean_T #define OUTPUT_3_COMPLEX COMPLEX_NO #define OUT_3_FRAME_BASED FRAME_NO #define OUT_3_BUS_BASED 0 #define OUT_3_BUS_NAME #define OUT_3_DIMS 1-D #define OUT_3_ISSIGNED 1 #define OUT_3_WORDLENGTH 8 #define OUT_3_FIXPOINTSCALING 1 #define OUT_3_FRACTIONLENGTH 3 #define OUT_3_BIAS 0 #define OUT_3_SLOPE 0.125 #define NPARAMS 0 #define SAMPLE_TIME_0 INHERITED_SAMPLE_TIME #define NUM_DISC_STATES 0 #define DISC_STATES_IC [0] #define NUM_CONT_STATES 0 #define CONT_STATES_IC [0] #define SFUNWIZ_GENERATE_TLC 1 #define SOURCEFILES "__SFB__" #define PANELINDEX 8 #define USE_SIMSTRUCT 0 #define SHOW_COMPILE_STEPS 0 #define CREATE_DEBUG_MEXFILE 0 #define SAVE_CODE_ONLY 0 #define SFUNWIZ_REVISION 3.0 /* %%%-SFUNWIZ_defines_Changes_END --- EDIT HERE TO _BEGIN */ /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ #include "simstruc.h" extern void hal_file_io_Outputs_wrapper(const uint8_T *data, const uint16_T *size, const uint32_T *offset, const uint8_T *opcode, const uint8_T *session, uint8_T *ret_data, uint16_T *ret_size, int32_T *ret, boolean_T *in_progress, const int_T y_width, const int_T u_width); /*====================* * S-function methods * *====================*/ /* Function: mdlInitializeSizes =============================================== * Abstract: * Setup sizes of the various vectors. */ static void mdlInitializeSizes(SimStruct *S) { DECL_AND_INIT_DIMSINFO(inputDimsInfo); DECL_AND_INIT_DIMSINFO(outputDimsInfo); ssSetNumSFcnParams(S, NPARAMS); if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; /* Parameter mismatch will be reported by Simulink */ } ssSetArrayLayoutForCodeGen(S, SS_COLUMN_MAJOR); ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE); ssSetNumContStates(S, NUM_CONT_STATES); ssSetNumDiscStates(S, NUM_DISC_STATES); if (!ssSetNumInputPorts(S, NUM_INPUTS)) return; /* Input Port 0 */ ssSetInputPortWidth(S, 0, INPUT_0_WIDTH); ssSetInputPortDataType(S, 0, SS_UINT8); ssSetInputPortComplexSignal(S, 0, INPUT_0_COMPLEX); ssSetInputPortDirectFeedThrough(S, 0, INPUT_0_FEEDTHROUGH); ssSetInputPortRequiredContiguous(S, 0, 1); /*direct input signal access*/ /* Input Port 1 */ ssSetInputPortWidth(S, 1, INPUT_1_WIDTH); ssSetInputPortDataType(S, 1, SS_UINT16); ssSetInputPortComplexSignal(S, 1, INPUT_1_COMPLEX); ssSetInputPortDirectFeedThrough(S, 1, INPUT_1_FEEDTHROUGH); ssSetInputPortRequiredContiguous(S, 1, 1); /*direct input signal access*/ /* Input Port 2 */ ssSetInputPortWidth(S, 2, INPUT_2_WIDTH); ssSetInputPortDataType(S, 2, SS_UINT32); ssSetInputPortComplexSignal(S, 2, INPUT_2_COMPLEX); ssSetInputPortDirectFeedThrough(S, 2, INPUT_2_FEEDTHROUGH); ssSetInputPortRequiredContiguous(S, 2, 1); /*direct input signal access*/ /* Input Port 3 */ ssSetInputPortWidth(S, 3, INPUT_3_WIDTH); ssSetInputPortDataType(S, 3, SS_UINT8); ssSetInputPortComplexSignal(S, 3, INPUT_3_COMPLEX); ssSetInputPortDirectFeedThrough(S, 3, INPUT_3_FEEDTHROUGH); ssSetInputPortRequiredContiguous(S, 3, 1); /*direct input signal access*/ /* Input Port 4 */ ssSetInputPortWidth(S, 4, INPUT_4_WIDTH); ssSetInputPortDataType(S, 4, SS_UINT8); ssSetInputPortComplexSignal(S, 4, INPUT_4_COMPLEX); ssSetInputPortDirectFeedThrough(S, 4, INPUT_4_FEEDTHROUGH); ssSetInputPortRequiredContiguous(S, 4, 1); /*direct input signal access*/ if (!ssSetNumOutputPorts(S, NUM_OUTPUTS)) return; /* Output Port 0 */ ssSetOutputPortWidth(S, 0, OUTPUT_0_WIDTH); ssSetOutputPortDataType(S, 0, SS_UINT8); ssSetOutputPortComplexSignal(S, 0, OUTPUT_0_COMPLEX); /* Output Port 1 */ ssSetOutputPortWidth(S, 1, OUTPUT_1_WIDTH); ssSetOutputPortDataType(S, 1, SS_UINT16); ssSetOutputPortComplexSignal(S, 1, OUTPUT_1_COMPLEX); /* Output Port 2 */ ssSetOutputPortWidth(S, 2, OUTPUT_2_WIDTH); ssSetOutputPortDataType(S, 2, SS_INT32); ssSetOutputPortComplexSignal(S, 2, OUTPUT_2_COMPLEX); /* Output Port 3 */ ssSetOutputPortWidth(S, 3, OUTPUT_3_WIDTH); ssSetOutputPortDataType(S, 3, SS_BOOLEAN); ssSetOutputPortComplexSignal(S, 3, OUTPUT_3_COMPLEX); ssSetNumPWork(S, 0); ssSetNumSampleTimes(S, 1); ssSetNumRWork(S, 0); ssSetNumIWork(S, 0); ssSetNumModes(S, 0); ssSetNumNonsampledZCs(S, 0); ssSetSimulinkVersionGeneratedIn(S, "9.2"); /* Take care when specifying exception free code - see sfuntmpl_doc.c */ ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE | SS_OPTION_USE_TLC_WITH_ACCELERATOR | SS_OPTION_WORKS_WITH_CODE_REUSE)); } /* Function: mdlInitializeSampleTimes ========================================= * Abstract: * Specifiy the sample time. */ static void mdlInitializeSampleTimes(SimStruct *S) { ssSetSampleTime(S, 0, SAMPLE_TIME_0); ssSetModelReferenceSampleTimeDefaultInheritance(S); ssSetOffsetTime(S, 0, 0.0); } #define MDL_SET_INPUT_PORT_DATA_TYPE static void mdlSetInputPortDataType(SimStruct *S, int port, DTypeId dType) { ssSetInputPortDataType(S, 0, dType); } #define MDL_SET_OUTPUT_PORT_DATA_TYPE static void mdlSetOutputPortDataType(SimStruct *S, int port, DTypeId dType) { ssSetOutputPortDataType(S, 0, dType); } #define MDL_SET_DEFAULT_PORT_DATA_TYPES static void mdlSetDefaultPortDataTypes(SimStruct *S) { ssSetInputPortDataType(S, 0, SS_DOUBLE); ssSetOutputPortDataType(S, 0, SS_DOUBLE); } #define MDL_START /* Change to #undef to remove function */ #if defined(MDL_START) /* Function: mdlStart ======================================================= * Abstract: * This function is called once at start of model execution. If you * have states that should be initialized once, this is the place * to do it. */ static void mdlStart(SimStruct *S) { } #endif /* MDL_START */ /* Function: mdlOutputs ======================================================= * */ static void mdlOutputs(SimStruct *S, int_T tid) { const uint8_T *data = (uint8_T *) ssGetInputPortRealSignal(S, 0); const uint16_T *size = (uint16_T *) ssGetInputPortRealSignal(S, 1); const uint32_T *offset = (uint32_T *) ssGetInputPortRealSignal(S, 2); const uint8_T *opcode = (uint8_T *) ssGetInputPortRealSignal(S, 3); const uint8_T *session = (uint8_T *) ssGetInputPortRealSignal(S, 4); uint8_T *ret_data = (uint8_T *) ssGetOutputPortRealSignal(S, 0); uint16_T *ret_size = (uint16_T *) ssGetOutputPortRealSignal(S, 1); int32_T *ret = (int32_T *) ssGetOutputPortRealSignal(S, 2); boolean_T *in_progress = (boolean_T *) ssGetOutputPortRealSignal(S, 3); const int_T y_width = ssGetOutputPortWidth(S, 0); const int_T u_width = ssGetInputPortWidth(S, 0); hal_file_io_Outputs_wrapper(data, size, offset, opcode, session, ret_data, ret_size, ret, in_progress, y_width, u_width); } /* Function: mdlTerminate ===================================================== * Abstract: * In this function, you should perform any actions that are necessary * at the termination of a simulation. For example, if memory was * allocated in mdlStart, this is the place to free it. */ static void mdlTerminate(SimStruct *S) { } #ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ #include "simulink.c" /* MEX-file interface mechanism */ #else #include "cg_sfun.h" /* Code generation registration function */ #endif