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_ain.c
13 * C-MEX S-function block for reading from RPP GPIO ports.
20 * <matlabroot>/bin/mex sfunction_din.c
34 - { name: "Digital Input value", type: "bool" }
36 - { name: "Port type", type: "Choice", range: "GIOA, GIOB, NHET1" }
37 - { name: "Pin number", type: "int8", range: "[0–7]", note: "(depends on selected port)" }
38 - { name: "Input Type", type: "Choice", range: "Tri-state, Pull Up, Pull Down" }
40 # Description is in Markdown mark-up
42 Reads a value from a GPIO pin. The block supports GIOA, GIOB and NHET1 ports.
43 Any pin can be configured as tri-state, pull up or pull down.
45 It is not allowed to read from one pin by using more then one DIN blocks.
46 It is not allowed to use DIN and DOUT blocks together configured for one GPIO pin.
52 RPP API functions used:
53 - hal_gpio_pin_get_dsc
54 - hal_gpio_pin_get_value
55 - hal_gpio_pin_conf_set
63 #define S_FUNCTION_NAME sfunction_din
66 #define PARAM_NAME_PORT_TYPE "port_type"
67 #define PARAM_NAME_PIN_NUMBER "pin_number"
68 #define PARAM_NAME_INPUT_TYPE "input_type"
70 /** Identifiers of the block parameters */
90 static void mdlInitializeSizes(SimStruct *S)
93 * Configure parameters: 3
98 if (!rppSetNumParams(S, PARAMS_COUNT)) {
103 * Configure input ports: 0
105 if (!ssSetNumInputPorts(S, 0)) {
110 * Configure output ports: 1
112 if (!ssSetNumOutputPorts(S, OUTPUTS_COUNT)) {
115 rppAddOutputPort(S, OUT_PIN_VALUE, SS_BOOLEAN);
117 /* Set standard options for this block */
118 rppSetStandardOptions(S);
122 #ifdef MATLAB_MEX_FILE
123 #define MDL_CHECK_PARAMETERS
124 static void mdlCheckParameters(SimStruct *S)
126 if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOA) {
127 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
131 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOB) {
132 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
136 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_NHET1) {
137 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 31)) {
148 #ifdef MATLAB_MEX_FILE
149 #define MDL_SET_WORK_WIDTHS
150 static void mdlSetWorkWidths(SimStruct *S)
152 /* Set number of run-time parameters */
153 if (!ssSetNumRunTimeParams(S, PARAMS_COUNT)) {
156 /* Register the run-time parameter 1 */
157 ssRegDlgParamAsRunTimeParam(S, PARAM_PORT_TYPE, PARAM_PORT_TYPE, PARAM_NAME_PORT_TYPE, SS_INT8);
158 ssRegDlgParamAsRunTimeParam(S, PARAM_PIN_NUMBER, PARAM_PIN_NUMBER, PARAM_NAME_PIN_NUMBER, SS_INT8);
159 ssRegDlgParamAsRunTimeParam(S, PARAM_INPUT_TYPE, PARAM_INPUT_TYPE, PARAM_NAME_INPUT_TYPE, SS_INT8);
164 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
165 #define UNUSED_MDLOUTPUTS
166 #define UNUSED_MDLTERMINATE