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_gio_out.c
13 * C-MEX S-function block for writting to RPP GPIO ports.
20 * <matlabroot>/bin/mex sfunction_gio_out.c
26 Name: General Purpose Digital Output
32 - { name: "Digital Output value", type: "bool" }
36 - { name: "Pin", type: "Choice", range: "Target dependent pin names or '---'" }
37 - { name: "Pin name", type: "String", note: "Pin name as defined in gio_def.h. This parameter is only visible if *Pin* is '---'." }
38 - { name: "Initial output value", type: "uint8", range: "[0,1]" }
39 - { name: "Output Type", type: "Choice", range: "Open Drain, Push/Pull" }
41 # Description is in Markdown mark-up
44 Sets a GIO pin to a given value. Which pins are supported depends on
45 the target board. Any pin can be configured as open drain or
46 push/pull and initial output value can be specified. The initial
47 value is a value, which will appear on the pin when the GPIO module
48 is initialized and stays there until the first block execution.
50 When the pin is used in multiple GIOIN or GIOOUT blocks, an error is
57 RPP API functions used:
67 #define S_FUNCTION_NAME sfunction_gio_out
70 #define PARAM_NAME_PORT_TYPE "port_type"
71 #define PARAM_NAME_PIN_NUMBER "pin_number"
72 #define PARAM_NAME_DEFAULT_OUTPUT "default_output"
73 #define PARAM_NAME_OUTPUT_TYPE "output_type"
75 /** Identifiers of the block parameters */
88 static void mdlInitializeSizes(SimStruct *S)
90 if (!rppSetNumParams(S, PARAMS_COUNT)) {
95 * Configure output ports: 0
97 if (!ssSetNumOutputPorts(S, 0)) {
102 * Configure input ports: 1
104 if (!ssSetNumInputPorts(S, INPUTS_COUNT)) {
108 rppAddInputPort(S, IN_PIN_VALUE, SS_BOOLEAN);
110 /* Set standard options for this block */
111 rppSetStandardOptions(S);
115 #ifdef MATLAB_MEX_FILE
116 #define MDL_CHECK_PARAMETERS
117 static void mdlCheckParameters(SimStruct *S)
119 if (!mxIsChar(ssGetSFcnParam(S, PARAM_PIN_NAME))) {
120 ssSetErrorStatus(S, "Parameter to S-function must be a string.");
122 if (!rppValidParamRange(S, PARAM_DEFAULT_OUTPUT, 0, 1)) {
128 #if defined(MATLAB_MEX_FILE)
130 static void mdlRTW(SimStruct *S)
133 int8_T def_out = mxGetPr(ssGetSFcnParam(S, PARAM_DEFAULT_OUTPUT))[0];
134 int8_T out_type = mxGetPr(ssGetSFcnParam(S, PARAM_OUTPUT_TYPE))[0];
136 if (mxGetString(ssGetSFcnParam(S, PARAM_PIN_NAME), pin_name, sizeof(pin_name)) != 0) {
137 ssSetErrorStatus(S,"mxGetString error in mdlRTW");
141 if (!ssWriteRTWParamSettings(S, 3,
142 SSWRITE_VALUE_STR, "PinName", pin_name,
143 SSWRITE_VALUE_DTYPE_NUM, "DefOut", &def_out, DTINFO(SS_INT8, COMPLEX_NO),
144 SSWRITE_VALUE_DTYPE_NUM, "OutType", &out_type, DTINFO(SS_INT8, COMPLEX_NO))) {
145 ssSetErrorStatus(S, "ssWriteRTWParamSettings failed");
152 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
153 #define UNUSED_MDLOUTPUTS
154 #define UNUSED_MDLTERMINATE