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