1 /* Copyright (C) 2013, 2014 Czech Technical University in Prague
4 * - Carlos Jenkins <carlos@jenkins.co.cr>
6 * This document contains proprietary information belonging to Czech
7 * Technical University in Prague. Passing on and copying of this
8 * document, and communication of its contents is not permitted
9 * without prior written authorization.
11 * File : sfunction_sdrw.c
13 * C-MEX S-function block for RPP SD-RAM log write.
20 * <matlabroot>/bin/mex sfunction_sdrw.c
32 - { name: "Data", type: "double" }
35 - { name: "ErrFlag", type: "bool" }
38 - { name: "Block ID", type: "uint8" }
39 - { name: "PrintFormat [SETTING]", type: "string" }
41 # Description and Help is in Markdown mark-up
44 This block allows to log a double value to the SD-RAM. User needs to provide a valid PrintFormat
45 string to format and register the double value on the log. The PrintFormat string should include
47 1. For the block ID. Any valid integer specifier.
48 2. For the value to log. Any valid double specifier.
50 Note that the value of PrintFormat is inserted raw between quotes on code generation and thus there
51 is no validation on it. Error to provide a valid PrintFormat could generate compilation errors or
52 even run-time errors (normally this generates a warning on compile time). Note that the function
53 for logging used is `rpp_sdr_printf()`, which is a blocking call, and can potentially overrun the
54 step. The ErrFlag will set if `rpp_sdr_printf()` returns an error (for example out of memory),
55 but will clear back if the next step the call to this function is successful.
62 - Compilation and general use.
64 - Faulty situation for the ErrFlag to set.
67 RPP API functions used:
75 #define S_FUNCTION_NAME sfunction_sdrw
79 static void mdlInitializeSizes(SimStruct *S)
82 * Configure parameters: 2
84 * - Printf format [setting].
86 if (!rppSetNumParams(S, 2)) {
91 * Configure input ports: 1
94 if (!ssSetNumInputPorts(S, 1)) {
97 rppAddInputPort(S, 0, SS_DOUBLE);
100 * Configure output ports: 1
103 if (!ssSetNumOutputPorts(S, 1)) {
106 rppAddOutputPort(S, 0, SS_BOOLEAN);
108 /* Set standard options for this block */
109 rppSetStandardOptions(S);
113 #ifdef MATLAB_MEX_FILE
114 #define MDL_CHECK_PARAMETERS
115 static void mdlCheckParameters(SimStruct *S)
117 /* Check the parameter 1 */
118 if (!rppValidParamRange(S, 0, 0, 255)) {
125 #ifdef MATLAB_MEX_FILE
126 #define MDL_SET_WORK_WIDTHS
127 static void mdlSetWorkWidths(SimStruct *S)
129 /* Set number of run-time parameters */
130 if (!ssSetNumRunTimeParams(S, 1)) {
134 /* Register the run-time parameter 1 */
135 ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
140 #ifdef MATLAB_MEX_FILE
142 static void mdlRTW(SimStruct* S)
144 /* Register parameter 2 as a parameter setting */
145 static char_T str[128];
146 mxGetString(ssGetSFcnParam(S, 1), (char*)&str, sizeof(str)); /* Get string */
147 if (!ssWriteRTWParamSettings(S, 1,
148 SSWRITE_VALUE_QSTR, "PrintfFormat", (const char_T*)&str)) {
149 /* An error ocurred */
156 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
157 #define UNUSED_MDLOUTPUTS
158 #define UNUSED_MDLTERMINATE