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: "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.
50 RPP API functions used:
51 - hal_gpio_pin_get_dsc
52 - hal_gpio_pin_get_value
53 - hal_gpio_pin_conf_set
61 #define S_FUNCTION_NAME sfunction_din
64 #define PARAM_NAME_PORT_TYPE "port_type"
65 #define PARAM_NAME_PIN_NUMBER "pin_number"
66 #define PARAM_NAME_INPUT_TYPE "input_type"
68 /** Identifiers of the block parameters */
88 static void mdlInitializeSizes(SimStruct *S)
91 * Configure parameters: 3
96 if (!rppSetNumParams(S, PARAMS_COUNT)) {
101 * Configure input ports: 0
103 if (!ssSetNumInputPorts(S, 0)) {
108 * Configure output ports: 1
110 if (!ssSetNumOutputPorts(S, OUTPUTS_COUNT)) {
113 rppAddOutputPort(S, OUT_PIN_VALUE, SS_BOOLEAN);
115 /* Set standard options for this block */
116 rppSetStandardOptions(S);
120 #ifdef MATLAB_MEX_FILE
121 #define MDL_CHECK_PARAMETERS
122 static void mdlCheckParameters(SimStruct *S)
124 if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOA) {
125 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
129 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOB) {
130 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
134 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_NHET1) {
135 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 31)) {
146 #ifdef MATLAB_MEX_FILE
147 #define MDL_SET_WORK_WIDTHS
148 static void mdlSetWorkWidths(SimStruct *S)
150 /* Set number of run-time parameters */
151 if (!ssSetNumRunTimeParams(S, PARAMS_COUNT)) {
154 /* Register the run-time parameter 1 */
155 ssRegDlgParamAsRunTimeParam(S, PARAM_PORT_TYPE, PARAM_PORT_TYPE, PARAM_NAME_PORT_TYPE, SS_INT8);
156 ssRegDlgParamAsRunTimeParam(S, PARAM_PIN_NUMBER, PARAM_PIN_NUMBER, PARAM_NAME_PIN_NUMBER, SS_INT8);
157 ssRegDlgParamAsRunTimeParam(S, PARAM_INPUT_TYPE, PARAM_INPUT_TYPE, PARAM_NAME_INPUT_TYPE, SS_INT8);
162 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
163 #define UNUSED_MDLOUTPUTS
164 #define UNUSED_MDLTERMINATE