1 /* Copyright (C) 2013, 2014, 2015 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_ain.c
13 * C-MEX S-function block for RPP analog input.
20 * <matlabroot>/bin/mex sfunction_ain.c
24 TODO: Change Pin number range to use macro SFUNCTION_AIN_PIN_COUNT, expanded by C preprocesor
35 - { name: "Analog Input Pin Number", type: "uint16" }
36 - { name: "ErrFlag", type: "bool" }
39 - { name: "Pin number", type: "uint8", range: "[1–16]" }
41 # Description and Help is in Markdown mark-up
44 Gets the analog value of the specified analog input pin on the RPP
47 The value is an unsigned 16 bit integer between 0–4095 (12 bit ADC).
49 If an error is detected while reading the value, the ErrFlag is set
54 This block allows to read the analog inputs on the RPP board. The
55 ErrFlag should if raise `rpp_adc_update()` or `rpp_adc_get()`
56 returns error. `rpp_adc_update()` is called just by the first DIN
57 block in the model and thus only the first block could raise the
58 flag because of this. In case an error occurs the return value will
59 always be 0. Because the ErrFlag should never set, once set the
60 following steps will never clear it back.
64 RPP API functions used:
70 - hbridge_analog_control
76 #define S_FUNCTION_NAME sfunction_ain
80 static void mdlInitializeSizes(SimStruct *S)
83 * Configure parameters: 1
84 * - Pin number: [1-16]
86 if (!rppSetNumParams(S, 1)) {
91 * Configure input ports: 0
93 if (!ssSetNumInputPorts(S, 0)) {
98 * Configure output ports: 2
102 if (!ssSetNumOutputPorts(S, 2)) {
105 rppAddOutputPort(S, 0, SS_UINT16);
106 rppAddOutputPort(S, 1, 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, 1, 16)) {
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 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
141 #define UNUSED_MDLOUTPUTS
142 #define UNUSED_MDLTERMINATE