1 /* TODO: Přejmenovat na sfunction_gio_in.c */
3 /* Copyright (C) 2013, 2014, 2015 Czech Technical University in Prague
6 * - Carlos Jenkins <carlos@jenkins.co.cr>
8 * This document contains proprietary information belonging to Czech
9 * Technical University in Prague. Passing on and copying of this
10 * document, and communication of its contents is not permitted
11 * without prior written authorization.
13 * File : sfunction_ain.c
15 * C-MEX S-function block for reading from RPP GPIO ports.
22 * <matlabroot>/bin/mex sfunction_din.c
36 - { name: "Digital Input value", type: "bool" }
38 - { name: "Port type", type: "Choice", range: "GIOA, GIOB, NHET1" }
39 - { name: "Pin number", type: "int8", range: "[0–7]", note: "(depends on selected port)" }
40 - { name: "Input Type", type: "Choice", range: "Tri-state, Pull Up, Pull Down" }
42 # Description is in Markdown mark-up
44 Reads a value from a GPIO pin. The block supports GIOA, GIOB and NHET1 ports.
45 Any pin can be configured as tri-state, pull up or pull down.
47 It is not allowed to read from one pin by using more then one DIN blocks.
48 It is not allowed to use DIN and DOUT blocks together configured for one GPIO pin.
54 RPP API functions used:
55 - hal_gpio_pin_get_dsc
56 - hal_gpio_pin_get_value
57 - hal_gpio_pin_conf_set
65 #define S_FUNCTION_NAME sfunction_din
68 #define PARAM_NAME_PORT_TYPE "port_type"
69 #define PARAM_NAME_PIN_NUMBER "pin_number"
70 #define PARAM_NAME_INPUT_TYPE "input_type"
72 /** Identifiers of the block parameters */
92 static void mdlInitializeSizes(SimStruct *S)
95 * Configure parameters: 3
100 if (!rppSetNumParams(S, PARAMS_COUNT)) {
105 * Configure input ports: 0
107 if (!ssSetNumInputPorts(S, 0)) {
112 * Configure output ports: 1
114 if (!ssSetNumOutputPorts(S, OUTPUTS_COUNT)) {
117 rppAddOutputPort(S, OUT_PIN_VALUE, SS_BOOLEAN);
119 /* Set standard options for this block */
120 rppSetStandardOptions(S);
124 #ifdef MATLAB_MEX_FILE
125 #define MDL_CHECK_PARAMETERS
126 static void mdlCheckParameters(SimStruct *S)
128 if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOA) {
129 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
133 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOB) {
134 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) {
138 else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_NHET1) {
139 if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 31)) {
150 #ifdef MATLAB_MEX_FILE
151 #define MDL_SET_WORK_WIDTHS
152 static void mdlSetWorkWidths(SimStruct *S)
154 /* Set number of run-time parameters */
155 if (!ssSetNumRunTimeParams(S, PARAMS_COUNT)) {
158 /* Register the run-time parameter 1 */
159 ssRegDlgParamAsRunTimeParam(S, PARAM_PORT_TYPE, PARAM_PORT_TYPE, PARAM_NAME_PORT_TYPE, SS_INT8);
160 ssRegDlgParamAsRunTimeParam(S, PARAM_PIN_NUMBER, PARAM_PIN_NUMBER, PARAM_NAME_PIN_NUMBER, SS_INT8);
161 ssRegDlgParamAsRunTimeParam(S, PARAM_INPUT_TYPE, PARAM_INPUT_TYPE, PARAM_NAME_INPUT_TYPE, SS_INT8);
166 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
167 #define UNUSED_MDLOUTPUTS
168 #define UNUSED_MDLTERMINATE