1 %module cec
2 
3 %{
4 #include "SwigHelper.h"
5 %}
6 
7 %include "stdint.i"
8 %include "cstring.i"
9 %include "std_string.i"
10 %include "std_vector.i"
11 
12 %ignore *::operator=;
13 
14 %typemap(out) CEC::cec_osd_name {
15   $result = PyString_FromString($1.name);
16 }
17 
18 /////// replace operator[]() ///////
19 
20 // CEC::cec_datapacket::operator[]()
21 %extend CEC::cec_datapacket {
22  public:
__getitem__(uint8_t pos)23   uint8_t __getitem__(uint8_t pos)
24   {
25     return (*($self))[pos];
26   }
27 }
28 
29 // CEC::cec_device_type::operator[]()
30 %extend CEC::cec_device_type_list {
31  public:
__getitem__(uint8_t pos)32   CEC::cec_device_type __getitem__(uint8_t pos)
33   {
34     return (*($self))[pos];
35   }
36 }
37 
38 // CEC::cec_logical_addresses::operator[]()
39 %extend CEC::cec_logical_addresses {
40  public:
__getitem__(uint8_t pos)41   bool __getitem__(uint8_t pos)
42   {
43     return (*($self))[pos];
44   }
45 }
46 %ignore *::operator[];
47 
48 /////// rename ToString() ///////
49 %rename("MenuStateToString") ToString(const cec_menu_state);
50 %rename("CecVersionToString") ToString(const cec_version);
51 %rename("PowerStatusToString") ToString(const cec_power_status);
52 %rename("LogicalAddressToString") ToString(const cec_logical_address);
53 %rename("DeckControlModeToString") ToString(const cec_deck_control_mode);
54 %rename("DeckInfoToString") ToString(const cec_deck_info);
55 %rename("OpcodeToString") ToString(const cec_opcode);
56 %rename("AudioStatusToString") ToString(const cec_audio_status);
57 %ignore *::ToString(const cec_vendor_id);
58 %rename("DeviceTypeToString") ToString(const cec_device_type);
59 %rename("UserControlCodeToString") ToString(const cec_user_control_code);
60 %rename("AdapterTypeToString") ToString(const cec_adapter_type);
61 
62 /////// callbacks ///////
63 %extend CEC::libcec_configuration {
64  public:
~libcec_configuration(void)65   virtual ~libcec_configuration(void)
66   {
67     _ClearCallbacks(self);
68     self->Clear();
69   }
70 
SetLogCallback(PyObject * pyfunc)71   void SetLogCallback(PyObject* pyfunc)
72   {
73     _SetCallback(self, CEC::PYTHON_CB_LOG_MESSAGE, pyfunc);
74   }
75 
SetKeyPressCallback(PyObject * pyfunc)76   void SetKeyPressCallback(PyObject* pyfunc)
77   {
78     _SetCallback(self, CEC::PYTHON_CB_KEY_PRESS, pyfunc);
79   }
80 
SetCommandCallback(PyObject * pyfunc)81   void SetCommandCallback(PyObject* pyfunc)
82   {
83     _SetCallback(self, CEC::PYTHON_CB_COMMAND, pyfunc);
84   }
85 
SetMenuStateCallback(PyObject * pyfunc)86   void SetMenuStateCallback(PyObject* pyfunc)
87   {
88     _SetCallback(self, CEC::PYTHON_CB_MENU_STATE, pyfunc);
89   }
90 
SetSourceActivatedCallback(PyObject * pyfunc)91   void SetSourceActivatedCallback(PyObject* pyfunc)
92   {
93     _SetCallback(self, CEC::PYTHON_CB_SOURCE_ACTIVATED, pyfunc);
94   }
95 
SetAlertCallback(PyObject * pyfunc)96   void SetAlertCallback(PyObject* pyfunc)
97   {
98     _SetCallback(self, CEC::PYTHON_CB_ALERT, pyfunc);
99   }
100 
SetConfigurationChangedCallback(PyObject * pyfunc)101   void SetConfigurationChangedCallback(PyObject* pyfunc)
102   {
103     _SetCallback(self, CEC::PYTHON_CB_CONFIGURATION, pyfunc);
104   }
105 
ClearCallbacks(void)106   void ClearCallbacks(void)
107   {
108     _ClearCallbacks(self);
109   }
110 }
111 
112 %ignore CEC::libcec_configuration::~libcec_configuration;
113 %ignore CEC::libcec_configuration::callbacks;
114 %ignore CEC::libcec_configuration::callbackParam;
115 
116 namespace std {
117   %template(AdapterVector) vector<CEC::AdapterDescriptor>;
118 }
119 
120 /////// replace CECInitialise(), CECDestroy() and DetectAdapters() ///////
121 
122 %extend CEC::ICECAdapter {
123   public:
~ICECAdapter(void)124     virtual ~ICECAdapter(void)
125     {
126       CEC::libcec_configuration config;
127       if (self->GetCurrentConfiguration(&config))
128       {
129         _ClearCallbacks(&config);
130         %#if CEC_LIB_VERSION_MAJOR >= 5
131         self->DisableCallbacks();
132         %#else
133         self->EnableCallbacks(NULL, NULL);
134         %#endif
135       }
136     }
137 
Create(CEC::libcec_configuration * configuration)138     static CEC::ICECAdapter* Create(CEC::libcec_configuration* configuration)
139     {
140       CEC::ICECAdapter* lib = CECInitialise(configuration);
141       if (!!lib)
142       {
143         lib->InitVideoStandalone();
144         PyEval_InitThreads();
145       }
146       return lib;
147     }
148 
149     std::vector<CEC::AdapterDescriptor> DetectAdapters(const char *strDevicePath = NULL, bool bQuickScan = false)
150     {
151       std::vector<CEC::AdapterDescriptor> retval;
152       CEC::cec_adapter_descriptor devList[10];
153       int nbAdapters = self->DetectAdapters(devList, 10, strDevicePath, bQuickScan);
154       for (int adapter = 0; adapter < nbAdapters; ++adapter)
155         retval.push_back(CEC::AdapterDescriptor(devList[adapter]));
156       return retval;
157     }
158 }
159 
160 %ignore CEC::ICECAdapter::~ICECAdapter;
161 %ignore CEC::ICECAdapter::SetCallbacks;
162 %ignore CEC::ICECAdapter::EnableCallbacks;
163 %ignore CEC::ICECAdapter::CanPersistConfiguration;
164 %ignore CEC::ICECAdapter::PersistConfiguration;
165 %ignore CEC::ICECCallbacks;
166 %ignore CEC::DetectAdapters;
167 %ignore CEC::GetDeviceMenuLanguage;
168 
169 %ignore CEC::cec_keypress;
170 %ignore CEC::cec_log_message;
171 %ignore CEC::cec_adapter_descriptor;
172 %ignore CEC::cec_adapter;
173 %ignore CECInitialise;
174 %ignore CECDestroy;
175 
176 %include "cectypes.h"
177 %include "cec.h"
178 
179 %ignore *::ToString;
180