]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/blob - rpp/blocks/sfunction_ain.c
Merge branch 'master' of rtime.felk.cvut.cz:jenkicar/rpp-simulink
[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
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 and Help is in Markdown mark-up
41 Description: &desc |
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 Help: *desc
52
53 Status:
54   Tested:
55     - Changing the pin.
56     - Compilation and general use.
57   Untested:
58     - Faulty situation for the ErrFlag to set.
59   Not working:
60
61 RPP API functions used:
62   - rpp_adc_update()
63   - rpp_adc_get()
64
65 Relevant demos:
66   - analog_passthrough
67   - hbridge_analog_control
68   - log_analog_input
69 ...
70 */
71
72
73 #define S_FUNCTION_NAME sfunction_ain
74 #include "header.c"
75
76
77 static void mdlInitializeSizes(SimStruct *S)
78 {
79     /*
80      * Configure parameters: 1
81      *  - Pin number: [1-12]
82      */
83     if (!rppSetNumParams(S, 1)) {
84         return;
85     }
86
87     /*
88      * Configure input ports: 0
89      */
90     if (!ssSetNumInputPorts(S, 0)) {
91         return;
92     }
93
94     /*
95      * Configure output ports: 2
96      *  - Analog input.
97      *  - Error flag.
98      */
99     if (!ssSetNumOutputPorts(S, 2)) {
100         return;
101     }
102     rppAddOutputPort(S, 0, SS_UINT16);
103     rppAddOutputPort(S, 1, SS_BOOLEAN);
104
105     /* Set standard options for this block */
106     rppSetStandardOptions(S);
107 }
108
109
110 #ifdef MATLAB_MEX_FILE
111 #define MDL_CHECK_PARAMETERS
112 static void mdlCheckParameters(SimStruct *S)
113 {
114     /* Check the parameter 1 */
115     if (!rppValidParamRange(S, 0, 1, 12)) {
116         return;
117     }
118 }
119 #endif
120
121
122 #ifdef MATLAB_MEX_FILE
123 #define MDL_SET_WORK_WIDTHS
124 static void mdlSetWorkWidths(SimStruct *S)
125 {
126     /* Set number of run-time parameters */
127     if (!ssSetNumRunTimeParams(S, 1)) {
128         return;
129     }
130
131     /* Register the run-time parameter 1 */
132     ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
133 }
134 #endif
135
136
137 #define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
138 #define UNUSED_MDLOUTPUTS
139 #define UNUSED_MDLTERMINATE
140 #include "trailer.c"