/* This file is part of the TDE libraries Copyright (C) 2012 Timothy Pearson (C) 2013 Golubev Alexander This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "tdeeventdevice.h" #include #include #include #include "tdelocale.h" #include "tdehardwaredevices.h" #include "config.h" TDEEventDevice::TDEEventDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) { m_fd = -1; m_fdMonitorActive = false; } TDEEventDevice::~TDEEventDevice() { if (m_fd >= 0) { close(m_fd); } } TDEEventDeviceType::TDEEventDeviceType TDEEventDevice::eventType() { return m_eventType; } void TDEEventDevice::internalSetEventType(TDEEventDeviceType::TDEEventDeviceType et) { m_eventType = et; } TDESwitchType::TDESwitchType TDEEventDevice::providedSwitches() { return m_providedSwitches; } void TDEEventDevice::internalSetProvidedSwitches(TDESwitchType::TDESwitchType sl) { m_providedSwitches = sl; } TDESwitchType::TDESwitchType TDEEventDevice::activeSwitches() { return m_switchActive; } void TDEEventDevice::internalSetActiveSwitches(TDESwitchType::TDESwitchType sl) { m_switchActive = sl; } // Keep this in sync with the TDESwitchType definition in the header TQStringList TDEEventDevice::friendlySwitchList(TDESwitchType::TDESwitchType switches) { TQStringList ret; if (switches & TDESwitchType::Lid) { ret.append(i18n("Lid Switch")); } if (switches & TDESwitchType::TabletMode) { ret.append(i18n("Tablet Mode")); } if (switches & TDESwitchType::HeadphoneInsert) { ret.append(i18n("Headphone Inserted")); } if (switches & TDESwitchType::RFKill) { ret.append(i18n("Radio Frequency Device Kill Switch")); } if (switches & TDESwitchType::Radio) { ret.append(i18n("Enable Radio")); } if (switches & TDESwitchType::MicrophoneInsert) { ret.append(i18n("Microphone Inserted")); } if (switches & TDESwitchType::Dock) { ret.append(i18n("Docked")); } if (switches & TDESwitchType::LineOutInsert) { ret.append(i18n("Line Out Inserted")); } if (switches & TDESwitchType::JackPhysicalInsert) { ret.append(i18n("Physical Jack Inserted")); } if (switches & TDESwitchType::VideoOutInsert) { ret.append(i18n("Video Out Inserted")); } if (switches & TDESwitchType::CameraLensCover) { ret.append(i18n("Camera Lens Cover")); } if (switches & TDESwitchType::KeypadSlide) { ret.append(i18n("Keypad Slide")); } if (switches & TDESwitchType::FrontProximity) { ret.append(i18n("Front Proximity")); } if (switches & TDESwitchType::RotateLock) { ret.append(i18n("Rotate Lock")); } if (switches & TDESwitchType::LineInInsert) { ret.append(i18n("Line In Inserted")); } return ret; } void TDEEventDevice::internalStartFdMonitoring(TDEHardwareDevices* hwmanager) { if (!m_fdMonitorActive) { // For security and performance reasons, only monitor known ACPI buttons if (eventType() != TDEEventDeviceType::Unknown) { if (m_fd >= 0) { m_eventNotifier = new TQSocketNotifier(m_fd, TQSocketNotifier::Read, this); connect( m_eventNotifier, TQT_SIGNAL(activated(int)), this, TQT_SLOT(eventReceived()) ); } connect( this, TQT_SIGNAL(keyPressed(unsigned int, TDEEventDevice*)), hwmanager, TQT_SLOT(processEventDeviceKeyPressed(unsigned int, TDEEventDevice*)) ); } m_fdMonitorActive = true; } } void TDEEventDevice::eventReceived() { struct input_event ev; int r; r = read(m_fd, &ev, sizeof(struct input_event)); if (r > 0) { if (ev.type == EV_KEY) { emit keyPressed(ev.code, this); } } } #include "tdeeventdevice.moc"