cec: don't scan the whole bus in CCECProcessor::IsActiveDeviceType()
[deb_libcec.git] / src / lib / LibCECC.cpp
1 /*
2 * This file is part of the libCEC(R) library.
3 *
4 * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved.
5 * libCEC(R) is an original work, containing original code.
6 *
7 * libCEC(R) is a trademark of Pulse-Eight Limited.
8 *
9 * This program is dual-licensed; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 *
23 *
24 * Alternatively, you can license this library under a commercial license,
25 * please contact Pulse-Eight Licensing for more information.
26 *
27 * For more information contact:
28 * Pulse-Eight Licensing <license@pulse-eight.com>
29 * http://www.pulse-eight.com/
30 * http://www.pulse-eight.net/
31 */
32
33 #include <cec.h>
34 #include <cecc.h>
35
36 using namespace CEC;
37 using namespace std;
38
39 /*!
40 * C interface implementation
41 */
42 //@{
43 ICECAdapter *cec_parser;
44
45 int cec_init(const char *strDeviceName, cec_logical_address iLogicalAddress, uint16_t iPhysicalAddress)
46 {
47 cec_parser = (ICECAdapter *) CECCreate(strDeviceName, iLogicalAddress, iPhysicalAddress);
48 return (cec_parser != NULL) ? 1 : 0;
49 }
50
51 int cec_init_typed(const char *strDeviceName, cec_device_type_list devicesTypes)
52 {
53 cec_parser = (ICECAdapter *) CECInit(strDeviceName, devicesTypes);
54 return (cec_parser != NULL) ? 1 : 0;
55 }
56
57 void cec_destroy(void)
58 {
59 cec_close();
60 CECDestroy(cec_parser);
61 cec_parser = NULL;
62 }
63
64 int cec_open(const char *strPort, uint32_t iTimeout)
65 {
66 if (cec_parser)
67 return cec_parser->Open(strPort, iTimeout);
68 return false;
69 }
70
71 void cec_close(void)
72 {
73 if (cec_parser)
74 cec_parser->Close();
75 }
76
77 int8_t cec_find_adapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */)
78 {
79 if (cec_parser)
80 return cec_parser->FindAdapters(deviceList, iBufSize, strDevicePath);
81 return -1;
82 }
83
84 int cec_ping_adapters(void)
85 {
86 if (cec_parser)
87 return cec_parser->PingAdapter() ? 1 : 0;
88 return -1;
89 }
90
91 int cec_start_bootloader(void)
92 {
93 if (cec_parser)
94 return cec_parser->StartBootloader() ? 1 : 0;
95 return -1;
96 }
97
98 int8_t cec_get_min_version(void)
99 {
100 if (cec_parser)
101 return cec_parser->GetMinLibVersion();
102 return -1;
103 }
104
105 int8_t cec_get_lib_version_major(void)
106 {
107 if (cec_parser)
108 return cec_parser->GetLibVersionMajor();
109 return -1;
110 }
111
112 int8_t cec_get_lib_version_minor(void)
113 {
114 if (cec_parser)
115 return cec_parser->GetLibVersionMinor();
116 return -1;
117 }
118
119 int cec_get_next_log_message(cec_log_message *message)
120 {
121 if (cec_parser)
122 return cec_parser->GetNextLogMessage(message) ? 1 : 0;
123 return -1;
124 }
125
126 int cec_get_next_keypress(cec_keypress *key)
127 {
128 if (cec_parser)
129 return cec_parser->GetNextKeypress(key) ? 1 : 0;
130 return -1;
131 }
132
133 int cec_get_next_command(cec_command *command)
134 {
135 if (cec_parser)
136 return cec_parser->GetNextCommand(command) ? 1 : 0;
137 return -1;
138 }
139
140 int cec_transmit(const CEC::cec_command *data)
141 {
142 if (cec_parser)
143 return cec_parser->Transmit(*data) ? 1 : 0;
144 return -1;
145 }
146
147 int cec_set_logical_address(cec_logical_address iLogicalAddress /* = CECDEVICE_PLAYBACKDEVICE1 */)
148 {
149 if (cec_parser)
150 return cec_parser->SetLogicalAddress(iLogicalAddress) ? 1 : 0;
151 return -1;
152 }
153
154 int cec_set_physical_address(uint16_t iPhysicalAddress /* = CEC_DEFAULT_PHYSICAL_ADDRESS */)
155 {
156 if (cec_parser)
157 return cec_parser->SetPhysicalAddress(iPhysicalAddress) ? 1 : 0;
158 return -1;
159 }
160
161 int cec_power_on_devices(cec_logical_address address /* = CECDEVICE_TV */)
162 {
163 if (cec_parser)
164 return cec_parser->PowerOnDevices(address) ? 1 : 0;
165 return -1;
166 }
167
168 int cec_standby_devices(cec_logical_address address /* = CECDEVICE_BROADCAST */)
169 {
170 if (cec_parser)
171 return cec_parser->StandbyDevices(address) ? 1 : 0;
172 return -1;
173 }
174
175 int cec_set_active_view(void)
176 {
177 if (cec_parser)
178 return cec_parser->SetActiveView() ? 1 : 0;
179 return -1;
180 }
181
182 int cec_set_active_source(cec_device_type type)
183 {
184 if (cec_parser)
185 return cec_parser->SetActiveSource(type) ? 1 : 0;
186 return -1;
187 }
188
189 int cec_set_inactive_view(void)
190 {
191 if (cec_parser)
192 return cec_parser->SetInactiveView() ? 1 : 0;
193 return -1;
194 }
195
196 int cec_set_osd_string(cec_logical_address iLogicalAddress, cec_display_control duration, const char *strMessage)
197 {
198 if (cec_parser)
199 return cec_parser->SetOSDString(iLogicalAddress, duration, strMessage) ? 1 : 0;
200 return -1;
201 }
202
203 int cec_switch_monitoring(int bEnable)
204 {
205 if (cec_parser)
206 return cec_parser->SwitchMonitoring(bEnable == 1) ? 1 : 0;
207 return -1;
208 }
209
210 cec_version cec_get_device_cec_version(cec_logical_address iLogicalAddress)
211 {
212 if (cec_parser)
213 return cec_parser->GetDeviceCecVersion(iLogicalAddress);
214 return CEC_VERSION_UNKNOWN;
215 }
216
217 int cec_get_device_menu_language(cec_logical_address iLogicalAddress, cec_menu_language *language)
218 {
219 if (cec_parser)
220 return cec_parser->GetDeviceMenuLanguage(iLogicalAddress, language) ? 1 : 0;
221 return -1;
222 }
223
224 uint64_t cec_get_device_vendor_id(cec_logical_address iLogicalAddress)
225 {
226 if (cec_parser)
227 return cec_parser->GetDeviceVendorId(iLogicalAddress);
228 return 0;
229 }
230
231 cec_power_status cec_get_device_power_status(cec_logical_address iLogicalAddress)
232 {
233 if (cec_parser)
234 return cec_parser->GetDevicePowerStatus(iLogicalAddress);
235 return CEC_POWER_STATUS_UNKNOWN;
236 }
237
238 int cec_poll_device(cec_logical_address iLogicalAddress)
239 {
240 if (cec_parser)
241 return cec_parser->PollDevice(iLogicalAddress) ? 1 : 0;
242 return -1;
243 }
244
245 cec_logical_addresses cec_get_active_devices(void)
246 {
247 cec_logical_addresses addresses;
248 if (cec_parser)
249 addresses = cec_parser->GetActiveDevices();
250 return addresses;
251 }
252
253 int cec_is_active_device(cec_logical_address iAddress)
254 {
255 if (cec_parser)
256 return cec_parser->IsActiveDevice(iAddress) ? 1 : 0;
257 return -1;
258 }
259
260 int cec_is_active_device_type(cec_device_type type)
261 {
262 if (cec_parser)
263 return cec_parser->IsActiveDeviceType(type) ? 1 : 0;
264 return -1;
265 }
266
267 //@}