summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/indi/webcam/PPort.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/indi/webcam/PPort.cpp')
-rw-r--r--kstars/kstars/indi/webcam/PPort.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/kstars/kstars/indi/webcam/PPort.cpp b/kstars/kstars/indi/webcam/PPort.cpp
new file mode 100644
index 00000000..b222a6f6
--- /dev/null
+++ b/kstars/kstars/indi/webcam/PPort.cpp
@@ -0,0 +1,107 @@
+/*
+ Copyright (C) 2004 by Jasem Mutlaq
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#include "PPort.h"
+#include "port.h"
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <iostream>
+
+using namespace std;
+
+#define TEST_VALIDITY {if (this==NULL) return false;}
+
+PPort::PPort() {
+ reset();
+}
+
+PPort::PPort(int ioPort) {
+ reset();
+ setPort(ioPort);
+}
+
+void PPort::reset() {
+ bitArray=0;
+ for (int i=0;i<8;++i) {
+ assignedBit[i]=NULL;
+ }
+ currentPort=NULL;
+}
+
+bool PPort::setPort(int ioPort) {
+ TEST_VALIDITY;
+ if (geteuid() != 0) {
+ cerr << "must be setuid root control parallel port"<<endl;
+ return false;
+ }
+ if (currentPort) {
+ delete currentPort;
+ }
+ reset();
+ currentPort=new port_t(ioPort);
+ return commit();
+}
+
+bool PPort::commit() {
+ TEST_VALIDITY;
+ if (currentPort) {
+ currentPort->write_data(bitArray);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool PPort::setBit(const void * ID,int bit,bool stat) {
+ TEST_VALIDITY;
+ if (ID != assignedBit[bit]) {
+ return false;
+ }
+
+ if (stat) {
+ bitArray |= (1<<bit);
+ } else {
+ bitArray &= ~(1<<bit);
+ }
+ return true;
+}
+
+bool PPort::registerBit(const void * ID,int bit) {
+ TEST_VALIDITY;
+ if (assignedBit[bit] || currentPort==NULL) {
+ return false;
+ }
+ assignedBit[bit]=ID;
+ return true;
+}
+
+bool PPort::unregisterBit(const void * ID,int bit) {
+ TEST_VALIDITY;
+ if (assignedBit[bit] != ID) {
+ return false;
+ }
+ assignedBit[bit]=NULL;
+ return true;
+}
+
+bool PPort::isRegisterBit(const void * ID,int bit) const {
+ TEST_VALIDITY;
+ return (assignedBit[bit] == ID);
+}