]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/blob - rpp/blocks/sfunction_ain.c
doc: Change formatting of block description in YAML
[jenkicar/rpp-simulink.git] / rpp / blocks / sfunction_ain.c
1 /* Copyright (C) 2013, 2014 Czech Technical University in Prague
2  *
3  * Authors:
4  *     - Carlos Jenkins <carlos@jenkins.co.cr>
5  *
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.
10  *
11  * File : sfunction_ain.c
12  * Abstract:
13  *     C-MEX S-function block for RPP analog input.
14  *
15  * References:
16  *     header.c
17  *     trailer.c
18  *
19  * Compile with:
20  *     <matlabroot>/bin/mex sfunction_ain.c
21  */
22
23 /*
24 %YAML 1.2
25 ---
26 Name: Analog Input block
27 Category: IO blocks
28 Header: rpp/adc.h
29 Mnemonic: ADC
30
31 Inputs:
32
33 Outputs:
34   - { name: "Analog Input Pin Number", type: "uint16" }
35   - { name: "ErrFlag",                 type: "bool"   }
36
37 Parameters:
38   - { name: "Pin number", type: "uint8", range: "[1–12]" }
39
40 # Description is in Markdown mark-up
41 Description: |
42
43   This block allows to read the analog inputs on the RPP board. The
44   ErrFlag should if raise `rpp_adc_update()` or `rpp_adc_get()`
45   returns error. `rpp_adc_update()` is called just by the first DIN
46   block in the model and thus only the first block could raise the
47   flag because of this. In case an error occurs the return value will
48   always be 0. Because the ErrFlag should never set, once set the
49   following steps will never clear it back.
50
51 Status:
52   Tested:
53     - Changing the pin.
54     - Compilation and general use.
55   Untested:
56     - Faulty situation for the ErrFlag to set.
57   Not working:
58
59 RPP API functions used:
60   - rpp_adc_update()
61   - rpp_adc_get()
62
63 Relevant demos:
64   - analog_passthrough
65   - hbridge_analog_control
66   - log_analog_input
67 ...
68 */
69
70
71 #define S_FUNCTION_NAME sfunction_ain
72 #include "header.c"
73
74
75 static void mdlInitializeSizes(SimStruct *S)
76 {
77     /*
78      * Configure parameters: 1
79      *  - Pin number: [1-12]
80      */
81     if (!rppSetNumParams(S, 1)) {
82         return;
83     }
84
85     /*
86      * Configure input ports: 0
87      */
88     if (!ssSetNumInputPorts(S, 0)) {
89         return;
90     }
91
92     /*
93      * Configure output ports: 2
94      *  - Analog input.
95      *  - Error flag.
96      */
97     if (!ssSetNumOutputPorts(S, 2)) {
98         return;
99     }
100     rppAddOutputPort(S, 0, SS_UINT16);
101     rppAddOutputPort(S, 1, SS_BOOLEAN);
102
103     /* Set standard options for this block */
104     rppSetStandardOptions(S);
105 }
106
107
108 #ifdef MATLAB_MEX_FILE
109 #define MDL_CHECK_PARAMETERS
110 static void mdlCheckParameters(SimStruct *S)
111 {
112     /* Check the parameter 1 */
113     if (!rppValidParamRange(S, 0, 1, 12)) {
114         return;
115     }
116 }
117 #endif
118
119
120 #ifdef MATLAB_MEX_FILE
121 #define MDL_SET_WORK_WIDTHS
122 static void mdlSetWorkWidths(SimStruct *S)
123 {
124     /* Set number of run-time parameters */
125     if (!ssSetNumRunTimeParams(S, 1)) {
126         return;
127     }
128
129     /* Register the run-time parameter 1 */
130     ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
131 }
132 #endif
133
134
135 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
136 #define UNUSED_MDLOUTPUTS
137 #define UNUSED_MDLTERMINATE
138 #include "trailer.c"