]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blob - rpp/src/rpp/irc.c
6886744dd76f52ed66bf4e9e4db4a3128f67f5f5
[pes-rpp/rpp-lib.git] / rpp / src / rpp / irc.c
1 /* Copyright (C) 2013-2014 Czech Technical University in Prague
2  *
3  * Authors:
4  *     - Karel Kočí
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 : irc.c
12  * Abstract:
13  *     IRC sensor input driver RPP API implementation file.
14  *
15  * References:
16  *     irc.h
17  *     RPP API documentation.
18  */
19
20 #include "rpp/rpp.h"
21 #include "rpp/mutex.h"
22
23 RPP_MUTEX_DEFINE(mutex_irc);
24
25 #ifndef FREERTOS_POSIX
26 #include "sys/sys.h"
27 #else
28 #define setMuxForIRC(a, b)
29 #define ircEnable(a)
30 #define ircDisable(a)
31 #endif
32
33 static boolean_t initialized = FALSE;
34 static boolean_t rpp_irc_enabled[2] = {FALSE, FALSE};
35
36 int8_t rpp_irc_init()
37 {
38
39         if (initialized)
40                 return FAILURE;
41         if (!RPP_MUTEX_INIT(mutex_irc))
42                 return FAILURE;
43
44 #ifndef FREERTOS_POSIX
45         het2Init();
46 #endif
47
48         initialized = TRUE;
49         return SUCCESS;
50 }
51
52 int8_t rpp_irc_enable(uint8_t irc)
53 {
54
55         if (!initialized)
56                 return FAILURE;
57
58         if (irc < 1 || irc > 2)
59                 return -RPP_EINVAL;
60
61         RPP_MUTEX_LOCK(mutex_irc);
62         rpp_irc_enabled[irc-1] = TRUE;
63
64         setMuxForIRC(irc, TRUE);
65         ircEnable(irc);
66         RPP_MUTEX_UNLOCK(mutex_irc);
67
68         return SUCCESS;
69 }
70
71 int8_t rpp_irc_status(uint8_t irc)
72 {
73
74         if (!initialized)
75                 return FAILURE;
76
77         if (irc < 1 || irc > 2)
78                 return -RPP_EINVAL;
79
80         RPP_MUTEX_LOCK(mutex_irc);
81         boolean_t ret_val = rpp_irc_enabled[irc-1];
82         RPP_MUTEX_UNLOCK(mutex_irc);
83
84         return ret_val;
85 }
86
87 int32_t rpp_irc_get(uint8_t irc)
88 {
89
90         if (!initialized)
91                 return FAILURE;
92
93         if (irc < 1 || irc > 2)
94                 return 0;
95
96         if (rpp_irc_status(irc) != 1)
97                 return FAILURE;
98
99 #ifndef FREERTOS_POSIX
100         RPP_MUTEX_LOCK(mutex_irc);
101         int32_t ret_val = ircGet(irc);
102         RPP_MUTEX_UNLOCK(mutex_irc);
103         return ret_val;
104 #else
105         return 1;
106 #endif
107 }
108
109 int8_t rpp_irc_disable(uint8_t irc)
110 {
111
112         if (!initialized)
113                 return FAILURE;
114
115         if (irc < 1 || irc > 2)
116                 return -RPP_EINVAL;
117
118         if (rpp_irc_status(irc) != 1)
119                 return FAILURE;
120
121         RPP_MUTEX_LOCK(mutex_irc);
122         ircDisable(irc);
123         setMuxForIRC(irc, FALSE);
124         rpp_irc_enabled[irc-1] = FALSE;
125         RPP_MUTEX_UNLOCK(mutex_irc);
126         return SUCCESS;
127 }