RDK Documentation (Open Sourced RDK Components)
Messages.hpp
1 /*
2  * If not stated otherwise in this file or this component's Licenses.txt file the
3  * following copyright and licenses apply:
4  *
5  * Copyright 2016 RDK Management
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18 */
19 
20 /**
21  * @defgroup HDMI_CEC_MSG_N_FRAME HDMI-CEC Messages and Frames
22  * The CECFrame is a byte buffer that provides access to raw CEC bytes. CECFrame is guaranteed to be a
23  * complete CEC Message that has the necessary data blocks:
24  * @n @n
25  * - The Header Data block (The byte that contains the initiator and destination address)
26  * - The OpCode Data Block (The byte that contains the opcode).
27  * - The Operand Data Block.(The bytes that contains the operands).
28  *
29  * In most cases application need not access CECFrame directly, but manipulate the raw bytes through the Message API.
30  * @n @n
31  * The Message API allows the application to send or receive high-level CEC message construct instead of raw bytes.
32  * Basically for each CEC message (such as ActiveSource), there is a C++ class implementation representing it.
33  * Each message class provides necessary getter and setter methods to access the properties of each message.
34  * @ingroup HDMI_CEC
35  *
36  * @defgroup HDMI_CEC_MSG_N_FRAME_CLASSES HDMI-CEC Messages and Frames Classes
37  * Described the details of High Level Class diagram and its functionalities.
38  * @ingroup HDMI_CEC_MSG_N_FRAME
39  *
40  * @defgroup HDMI_CEC_MULTI_SYNC HDMI-CEC Messages - Asynchronous Vs. Synchronous
41  * When messages converge on the logical buses, they are queued for sending opportunities on the physical bus.
42  * The waiting time for such send to complete, though short in most cases, can be problematic to some interactive
43  * real-time applications. It is recommended that the applications always send CEC messages asynchronously via
44  * the Connection API and use the listener APIs to monitor response messages or device state changes.
45  * The CEC library offers abundant APIs to facilitate such asynchronous implementation and the application is
46  * encouraged to make full use of them.
47  * @n @n
48  * Given the vast variance of HDMI-CEC support from the off-the-self media devices, it is not recommended that
49  * application wait for the response from a destination device. Even if the request message is sent out successfully,
50  * the destination device may choose to ignore the request. The recommended approach is again to send the request
51  * asynchronously and use the listener to monitor responses.
52  * @n @n
53  * Overall, given the asynchronous nature of HDMI-CEC, application should always opt to use Asynchronous APIs
54  * as first choice. And for same reasons, the RDK CEC library offers only limited support for Synchronous APIs.
55  * @ingroup HDMI_CEC_MSG_N_FRAME
56  */
57 
58 /**
59 * @defgroup hdmicec
60 * @{
61 * @defgroup ccec
62 * @{
63 **/
64 
65 
66 #ifndef HDMI_CCEC_MESSAGES_HPP_
67 #define HDMI_CCEC_MESSAGES_HPP_
68 
69 #include <stdint.h>
70 
71 #include <iostream>
72 #include "CCEC.hpp"
73 #include "Assert.hpp"
74 #include "ccec/CECFrame.hpp"
75 #include "DataBlock.hpp"
76 #include "OpCode.hpp"
77 #include "Operands.hpp"
78 #include "ccec/Util.hpp"
79 
80 CCEC_BEGIN_NAMESPACE
81 /**
82  * @brief The Message API allows the application to send or receive high-level CEC message construct instead of raw bytes.
83  *
84  * Basically for each CEC message (such as ActiveSource), there is a C++ class implementation representing it.
85  * Each message class provides necessary getter and setter methods to access the properties of each message.
86  * @ingroup HDMI_CEC_MSG_N_FRAME_CLASSES
87  */
88 class ActiveSource : public DataBlock
89 {
90 public:
91  Op_t opCode(void) const {return ACTIVE_SOURCE;}
92 
93  ActiveSource(const PhysicalAddress &physicalAddress) : physicalAddress(physicalAddress) {
94  }
95 
96  ActiveSource(const CECFrame &frame, int startPos = 0)
97  : physicalAddress(frame, startPos)
98  {
99  }
100  CECFrame &serialize(CECFrame &frame) const {
101  CCEC_LOG( LOG_DEBUG, "%s \n",physicalAddress.toString().c_str());
102  return physicalAddress.serialize(frame);
103  }
104 
105  void print(void) const {
106  CCEC_LOG( LOG_DEBUG, "%s : %s : %s \n",GetOpName(opCode()),physicalAddress.name().c_str(),physicalAddress.toString().c_str());
107  }
108 public:
109  PhysicalAddress physicalAddress;
110 };
111 
112 class ImageViewOn : public DataBlock
113 {
114 public:
115  Op_t opCode(void) const {return IMAGE_VIEW_ON;}
116 };
117 
118 
119 class TextViewOn : public DataBlock
120 {
121 public:
122  Op_t opCode(void) const {return TEXT_VIEW_ON;}
123 };
124 
125 class InActiveSource : public DataBlock
126 {
127 public:
128  Op_t opCode(void) const {return INACTIVE_SOURCE;}
129 
130  InActiveSource(const PhysicalAddress &physicalAddress) : physicalAddress(physicalAddress) {}
131 
132  InActiveSource(const CECFrame &frame, int startPos = 0)
133  : physicalAddress(frame, startPos)
134  {
135  }
136 
137  CECFrame &serialize(CECFrame &frame) const {
138  CCEC_LOG( LOG_DEBUG, "%s \n",physicalAddress.toString().c_str());
139  return physicalAddress.serialize(frame);
140  }
141 
142  void print(void) const {
143  CCEC_LOG( LOG_DEBUG, "%s : %s : %s \n",GetOpName(opCode()),physicalAddress.name().c_str(),physicalAddress.toString().c_str());
144  }
145 public:
146  PhysicalAddress physicalAddress;
147 };
148 
150 {
151 public:
152  Op_t opCode(void) const {return REQUEST_ACTIVE_SOURCE;}
153 };
154 
155 class Standby : public DataBlock
156 {
157 public:
158  Op_t opCode(void) const {return STANDBY;}
159 };
160 
161 class GetCECVersion : public DataBlock
162 {
163 public:
164  Op_t opCode(void) const {return GET_CEC_VERSION;}
165 };
166 
167 class CECVersion : public DataBlock
168 {
169 public:
170  Op_t opCode(void) const {return CEC_VERSION;}
171 
172  CECVersion(const Version &version) : version(version) {}
173 
174  CECVersion(const CECFrame &frame, int startPos = 0)
175  : version(frame, startPos)
176  {
177  }
178 
179  CECFrame &serialize(CECFrame &frame) const {
180  return version.serialize(frame);
181  }
182 
183  void print(void) const {
184  CCEC_LOG( LOG_DEBUG, "Version : %s \n",version.toString().c_str());
185  }
186 
187  Version version;
188 };
189 
191 {
192 
193 public:
194  Op_t opCode(void) const {return SET_MENU_LANGUAGE;}
195 
196  SetMenuLanguage(const Language &language) : language(language) {};
197 
198  SetMenuLanguage(const CECFrame &frame, int startPos = 0)
199  : language(frame, startPos)
200  {
201  }
202 
203  CECFrame &serialize(CECFrame &frame) const {
204  return language.serialize(frame);
205  }
206 
207  void print(void) const {
208  CCEC_LOG( LOG_DEBUG, "Language : %s \n",language.toString().c_str());
209  }
210 
211  Language language;
212 };
213 
215 {
216 public:
217  Op_t opCode(void) const {return GET_MENU_LANGUAGE;}
218 };
219 
220 class GiveOSDName: public DataBlock
221 {
222 public:
223  Op_t opCode(void) const {return GIVE_OSD_NAME;}
224 };
225 
226 class SetOSDName: public DataBlock
227 {
228 public:
229  Op_t opCode(void) const {return SET_OSD_NAME;}
230 
231  SetOSDName(const OSDName &osdName) : osdName(osdName) {};
232 
233  SetOSDName(const CECFrame &frame, int startPos = 0)
234  : osdName(frame, startPos)
235  {
236  }
237 
238  CECFrame &serialize(CECFrame &frame) const {
239  return osdName.serialize(frame);
240  }
241 
242  void print(void) const {
243  CCEC_LOG( LOG_DEBUG,"OSDName : %s\n",osdName.toString().c_str());
244  }
245 
246  OSDName osdName;
247 };
248 
249 class SetOSDString : public DataBlock
250 {
251 public:
252  Op_t opCode(void) const {return SET_OSD_STRING;}
253 
254  SetOSDString(const OSDString &osdString) : osdString(osdString) {};
255 
256  SetOSDString(const CECFrame &frame, int startPos = 0)
257  : osdString(frame, startPos)
258  {
259  }
260 
261  CECFrame &serialize(CECFrame &frame) const {
262  return osdString.serialize(frame);
263  }
264 
265  void print(void) const {
266  CCEC_LOG( LOG_DEBUG,"OSDString : %s\n",osdString.toString().c_str());
267  }
268 
269  OSDString osdString;
270 };
271 
273 {
274 public:
275  Op_t opCode(void) const {return GIVE_PHYSICAL_ADDRESS;}
276 };
277 
279 {
280 public:
281  Op_t opCode(void) const {return REPORT_PHYSICAL_ADDRESS;}
282 
283  ReportPhysicalAddress(const PhysicalAddress &physicalAddress, const DeviceType &deviceType)
284  : physicalAddress(physicalAddress), deviceType(deviceType) {
285  }
286 
287  ReportPhysicalAddress(const CECFrame &frame, int startPos = 0)
288  : physicalAddress(frame, startPos), deviceType(frame, startPos + PhysicalAddress::MAX_LEN)
289  {
290  }
291 
292  CECFrame &serialize(CECFrame &frame) const {
293  return deviceType.serialize(physicalAddress.serialize(frame));
294  }
295 
296  void print(void) const {
297  CCEC_LOG( LOG_DEBUG,"Physical Address : %s\n",physicalAddress.toString().c_str());
298  CCEC_LOG( LOG_DEBUG,"Device Type : %s\n",deviceType.toString().c_str());
299  }
300 
301  PhysicalAddress physicalAddress;
302  DeviceType deviceType;
303 };
304 
306 {
307 public:
308  Op_t opCode(void) const {return GIVE_DEVICE_VENDOR_ID;}
309 };
310 
311 class DeviceVendorID : public DataBlock
312 {
313 public:
314  Op_t opCode(void) const {return DEVICE_VENDOR_ID;}
315 
316  DeviceVendorID(const VendorID &vendorId) : vendorId(vendorId) {}
317 
318  DeviceVendorID(const CECFrame &frame, int startPos = 0)
319  : vendorId(frame, startPos)
320  {
321  }
322 
323  CECFrame &serialize(CECFrame &frame) const {
324  return vendorId.serialize(frame);
325  }
326 
327  void print(void) const {
328  CCEC_LOG( LOG_DEBUG,"VendorID : %s\n",vendorId.toString().c_str());
329  }
330 
331  VendorID vendorId;
332 };
333 
335 {
336 public:
337  Op_t opCode(void) const {return GIVE_DEVICE_POWER_STATUS;}
338 };
339 
341 {
342 public:
343  Op_t opCode(void) const {return REPORT_POWER_STATUS;}
344 
345  ReportPowerStatus(const PowerStatus &status) : status(status) {}
346 
347  ReportPowerStatus(const CECFrame &frame, int startPos = 0)
348  : status(frame, startPos)
349  {
350  }
351 
352  CECFrame &serialize(CECFrame &frame) const {
353  return status.serialize(frame);
354  }
355 
356  void print(void) const {
357  CCEC_LOG( LOG_DEBUG,"Power Status: %s",status.toString().c_str());
358  }
359 
360  PowerStatus status;
361 };
362 
363 class Abort : public DataBlock
364 {
365 public:
366  Op_t opCode(void) const {return ABORT;}
367 };
368 
369 class FeatureAbort: public DataBlock
370 {
371 public:
372  Op_t opCode(void) const {return FEATURE_ABORT;}
373 
374  FeatureAbort(const OpCode &feature, const AbortReason &reason) : feature(feature), reason(reason) {}
375 
376  FeatureAbort(const CECFrame &frame, int startPos = 0)
377  : feature(frame, startPos), reason(frame, startPos + OpCode::MAX_LEN)
378  {
379  }
380 
381  CECFrame &serialize(CECFrame &frame) const {
382  return reason.serialize(feature.serialize(frame));
383  }
384 
385  void print(void) const {
386  CCEC_LOG( LOG_DEBUG,"Abort For Feature : %s\n",feature.toString().c_str());
387  CCEC_LOG( LOG_DEBUG,"Abort Reason : %s\n",reason.toString().c_str());
388  }
389 
390  OpCode feature;
391  AbortReason reason;
392 };
393 
395 {
396 public:
397  Op_t opCode(void) const {return ROUTING_CHANGE;}
398 
399  RoutingChange(const PhysicalAddress &from, const PhysicalAddress &to) : from(from), to(to) {}
400 
401  RoutingChange(const CECFrame &frame, int startPos = 0)
402  : from(frame, startPos), to(frame, startPos + PhysicalAddress::MAX_LEN)
403  {
404  }
405 
406  CECFrame &serialize(CECFrame &frame) const {
407  return to.serialize(from.serialize(frame));
408  }
409 
410  void print(void) const {
411  CCEC_LOG( LOG_DEBUG,"Routing Change From : %s\n",from.toString().c_str());
412  CCEC_LOG( LOG_DEBUG,"Routing Change to : %s\n",to.toString().c_str());
413  }
414 
415  PhysicalAddress from;
416  PhysicalAddress to;
417 };
418 
420 {
421 public:
422  Op_t opCode(void) const {return ROUTING_INFORMATION;}
423 
424  RoutingInformation(const PhysicalAddress &toSink) : toSink(toSink) {}
425 
426  RoutingInformation(const CECFrame &frame, int startPos = 0)
427  : toSink(frame, startPos)
428  {
429  }
430 
431  CECFrame &serialize(CECFrame &frame) const {
432  return toSink.serialize(frame);
433  }
434 
435  void print(void) const {
436  CCEC_LOG( LOG_DEBUG,"Routing Information to Sink : %s\n",toSink.toString().c_str());
437  }
438 
439  PhysicalAddress toSink;
440 };
441 
442 
444 {
445 public:
446  Op_t opCode(void) const {return SET_STREAM_PATH;}
447 
448  SetStreamPath(const PhysicalAddress &toSink) : toSink(toSink) {}
449 
450  SetStreamPath(const CECFrame &frame, int startPos = 0)
451  : toSink(frame, startPos)
452  {
453  }
454 
455  CECFrame &serialize(CECFrame &frame) const {
456  return toSink.serialize(frame);
457  }
458 
459  void print(void) const {
460  CCEC_LOG( LOG_DEBUG,"Set Stream Path to Sink : %s\n",toSink.toString().c_str());
461  }
462 
463  PhysicalAddress toSink;
464 };
465 
467 {
468 
469 public:
470  Op_t opCode(void) const {return REQUEST_SHORT_AUDIO_DESCRIPTOR;}
471 
472  RequestShortAudioDescriptor(const std::vector<uint8_t> formatid, const std::vector<uint8_t> audioFormatCode, uint8_t number_of_descriptor = 1)
473  {
474  uint8_t audioFormatIdCode;
475  numberofdescriptor = number_of_descriptor > 4 ? 4 : number_of_descriptor;
476  for (uint8_t i=0 ; i < numberofdescriptor ;i++)
477  {
478  audioFormatIdCode = (formatid[i] << 6) | ( (audioFormatCode[i])& 0x3f) ;
479  requestAudioFormat.push_back(RequestAudioFormat(audioFormatIdCode));
480  }
481  }
482  /* called by the messaged_decoder */
483  RequestShortAudioDescriptor(const CECFrame &frame, int startPos = 0)
484  {
485  uint8_t len = frame.length();
486  numberofdescriptor = len > 4 ? 4:len;
487  for (uint8_t i=0; i< numberofdescriptor ; i++)
488  {
489  requestAudioFormat.push_back(RequestAudioFormat(frame,startPos + i ));
490  }
491  }
492  /* called by the message encoder */
493  CECFrame &serialize(CECFrame &frame) const {
494 
495  for (uint8_t i=0; i < numberofdescriptor ; i++)
496  {
497  requestAudioFormat[i].serialize(frame);
498 
499  }
500  return frame;
501  }
502 
503  void print(void) const {
504  uint8_t i=0;
505  for(i=0;i < numberofdescriptor;i++)
506  {
507 
508  CCEC_LOG( LOG_DEBUG,"audio format id %d audioFormatCode : %s\n",requestAudioFormat[i].getAudioformatId(),requestAudioFormat[i].toString());
509 
510  }
511  }
512  std::vector<RequestAudioFormat> requestAudioFormat ;
513  uint8_t numberofdescriptor;
514 };
516 {
517 
518 public:
519  Op_t opCode(void) const {return REPORT_SHORT_AUDIO_DESCRIPTOR;}
520 
521  ReportShortAudioDescriptor( const std::vector <uint32_t> shortaudiodescriptor, uint8_t numberofdescriptor = 1)
522  {
523 
524  uint8_t bytes[3];
525  numberofdescriptor = numberofdescriptor > 4 ? 4 : numberofdescriptor;
526  for (uint8_t i=0; i < numberofdescriptor ;i++)
527  {
528  bytes[0] = (shortaudiodescriptor[i] & 0xF);
529  bytes[1] = ((shortaudiodescriptor[i] >> 8) & 0xF);
530  bytes[2] = ((shortaudiodescriptor[i] >> 16) & 0xF);
531  shortAudioDescriptor.push_back(ShortAudioDescriptor(bytes));
532 
533  }
534  }
535  /* called by the messaged_decoder */
536  ReportShortAudioDescriptor(const CECFrame &frame, int startPos = 0)
537  {
538  numberofdescriptor = (frame.length())/3;
539  for (uint8_t i=0; i< numberofdescriptor ;i++)
540  {
541  shortAudioDescriptor.push_back(ShortAudioDescriptor(frame,startPos + i*3 ));
542  }
543  }
544 
545  /* called by the message encoder*/
546  CECFrame &serialize(CECFrame &frame) const {
547  for (uint8_t i=0; i < numberofdescriptor ; i++)
548  {
549  //just do the append of the stored cec bytes
550  shortAudioDescriptor[i].serialize(frame);
551 
552  }
553  return frame;
554  }
555  void print(void) const {
556  for(uint8_t i=0;i < numberofdescriptor;i++)
557  {
558  CCEC_LOG( LOG_DEBUG," audioFormatCode : %s audioFormatCode %d Atmos = %d\n",shortAudioDescriptor[i].toString(),shortAudioDescriptor[i].getAudioformatCode(),shortAudioDescriptor[i].getAtmosbit());
559  }
560  }
561  std::vector <ShortAudioDescriptor> shortAudioDescriptor ;
562  uint8_t numberofdescriptor;
563 };
565 {
566 
567 public:
568  Op_t opCode(void) const {return SYSTEM_AUDIO_MODE_REQUEST;}
569  SystemAudioModeRequest(const PhysicalAddress &physicaladdress = {0xf,0xf,0xf,0xf} ): physicaladdress(physicaladdress) {}
570  /* called by the messaged_decoder */
571  SystemAudioModeRequest(const CECFrame &frame, int startPos = 0):physicaladdress(frame, startPos)
572  {
573  if (frame.length() == 0 )
574  {
575  physicaladdress= PhysicalAddress((uint8_t) 0xf,(uint8_t) 0xf,(uint8_t)0xf,(uint8_t)0xf);
576  }
577  }
578  CECFrame &serialize(CECFrame &frame) const {
579  if ( (physicaladdress.getByteValue(3) == 0xF) && (physicaladdress.getByteValue(2) == 0xF) && (physicaladdress.getByteValue(1) == 0xF) && (physicaladdress.getByteValue(0) == 0xF))
580  {
581  return frame;
582  } else{
583  return physicaladdress.serialize(frame);
584  }
585  }
586  void print(void) const {
587  CCEC_LOG( LOG_DEBUG,"Set SystemAudioModeRequest : %s\n",physicaladdress.toString().c_str());
588  }
589  PhysicalAddress physicaladdress;
590 };
592 {
593 public:
594  Op_t opCode(void) const {return SET_SYSTEM_AUDIO_MODE;}
595 
596  SetSystemAudioMode( const SystemAudioStatus &status ) : status(status) { }
597 
598  SetSystemAudioMode(const CECFrame &frame, int startPos = 0) : status(frame, startPos)
599  {
600  }
601  CECFrame &serialize(CECFrame &frame) const {
602  return status.serialize(frame);
603  }
604 
605  SystemAudioStatus status;
606 };
607 
609 {
610 public:
611  Op_t opCode(void) const {return GIVE_AUDIO_STATUS;}
612 };
614 {
615 public:
616  Op_t opCode(void) const {return REPORT_AUDIO_STATUS;}
617 
618  ReportAudioStatus( const AudioStatus &status ) : status(status) { }
619  ReportAudioStatus(const CECFrame &frame, int startPos = 0):status(frame, startPos)
620  {
621  }
622  CECFrame &serialize(CECFrame &frame) const {
623  return status.serialize(frame);
624  }
625  AudioStatus status;
626 };
627 
629 {
630 public:
631  Op_t opCode(void) const {return USER_CONTROL_PRESSED;}
632 
633  UserControlPressed( const UICommand &command ) : uiCommand(command) { }
634 
635  CECFrame &serialize(CECFrame &frame) const {
636  return uiCommand.serialize(frame);
637  }
638 
639  UICommand uiCommand;
640 };
641 
643 {
644 public:
645  Op_t opCode(void) const {return USER_CONTROL_RELEASED;}
646 };
647 
648 
649 class Polling : public DataBlock
650 {
651 public:
652  Op_t opCode(void) const {return POLLING;}
653 };
654 
656 {
657  public:
658  Op_t opCode(void) const {return REQUEST_ARC_INITIATION;}
659 
660 };
661 
663 {
664  public:
665  Op_t opCode(void) const {return REPORT_ARC_INITIATED;}
666 
667 };
669 {
670  public:
671  Op_t opCode(void) const {return REQUEST_ARC_TERMINATION;}
672 
673 };
675 {
676  public:
677  Op_t opCode(void) const {return REPORT_ARC_TERMINATED;}
678 
679 };
680 class InitiateArc:public DataBlock
681 {
682  public:
683  Op_t opCode(void) const {return INITIATE_ARC;}
684 };
686 {
687  public:
688  Op_t opCode(void) const {return TERMINATE_ARC;}
689 };
690 
691 #endif
692 
693 
694 /** @} */
695 /** @} */
OSDName
Definition: Operands.hpp:135
FeatureAbort
Definition: Messages.hpp:369
ShortAudioDescriptor
Definition: Operands.hpp:683
GetCECVersion
Definition: Messages.hpp:161
SetOSDString
Definition: Messages.hpp:249
VendorID
Definition: Operands.hpp:288
GiveOSDName
Definition: Messages.hpp:220
Version
Definition: Operands.hpp:514
TextViewOn
Definition: Messages.hpp:119
GiveDevicePowerStatus
Definition: Messages.hpp:334
SetOSDName
Definition: Messages.hpp:226
ReportAudioStatus
Definition: Messages.hpp:613
ReportArcTermination
Definition: Messages.hpp:674
DeviceVendorID
Definition: Messages.hpp:311
PhysicalAddress
Definition: Operands.hpp:314
GivePhysicalAddress
Definition: Messages.hpp:272
RequestArcTermination
Definition: Messages.hpp:668
SetSystemAudioMode
Definition: Messages.hpp:591
GiveAudioStatus
Definition: Messages.hpp:608
Polling
Definition: Messages.hpp:649
ReportShortAudioDescriptor
Definition: Messages.hpp:515
DeviceType
Definition: Operands.hpp:211
SetMenuLanguage
Definition: Messages.hpp:190
SystemAudioStatus
Definition: Operands.hpp:772
UserControlReleased
Definition: Messages.hpp:642
AbortReason
Definition: Operands.hpp:156
Standby
Definition: Messages.hpp:155
RoutingInformation
Definition: Messages.hpp:419
ActiveSource
The Message API allows the application to send or receive high-level CEC message construct instead of...
Definition: Messages.hpp:88
GetMenuLanguage
Definition: Messages.hpp:214
SetStreamPath
Definition: Messages.hpp:443
TerminateArc
Definition: Messages.hpp:685
GiveDeviceVendorID
Definition: Messages.hpp:305
Language
Definition: Operands.hpp:266
OSDString
Definition: Operands.hpp:114
UICommand
Definition: Operands.hpp:861
UserControlPressed
Definition: Messages.hpp:628
PowerStatus
Definition: Operands.hpp:564
AudioStatus
Definition: Operands.hpp:818
ReportPhysicalAddress
Definition: Messages.hpp:278
RequestAudioFormat
Definition: Operands.hpp:619
OpCode
Definition: OpCode.hpp:123
InActiveSource
Definition: Messages.hpp:125
RequestActiveSource
Definition: Messages.hpp:149
RequestShortAudioDescriptor
Definition: Messages.hpp:466
RoutingChange
Definition: Messages.hpp:394
ImageViewOn
Definition: Messages.hpp:112
ReportPowerStatus
Definition: Messages.hpp:340
CECFrame
Definition: CECFrame.hpp:40
InitiateArc
Definition: Messages.hpp:680
CCEC_LOG
void CCEC_LOG(int level, const char *format ...)
This function is used to gets the logs depending on the level of log and print these to standard outp...
Definition: Util.cpp:120
ReportArcInitiation
Definition: Messages.hpp:662
SystemAudioModeRequest
Definition: Messages.hpp:564
RequestArcInitiation
Definition: Messages.hpp:655
CECVersion
Definition: Messages.hpp:167
Abort
Definition: Messages.hpp:363
DataBlock
Definition: DataBlock.hpp:45