summaryrefslogtreecommitdiff
path: root/quellcode/versuch5/cpx.cpp
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2014-03-31 16:53:55 +0200
committerManuel Traut <manut@mecka.net>2014-03-31 16:53:55 +0200
commit1adba473e6917b227e1b0a1118148101dca202e7 (patch)
tree13180ede9564ba50c528b274ee5719b4e030ef06 /quellcode/versuch5/cpx.cpp
parenteacbf5bb4d57af21c731f41251015d3b991ad490 (diff)
add quellcodeHEADmaster
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'quellcode/versuch5/cpx.cpp')
-rwxr-xr-xquellcode/versuch5/cpx.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/quellcode/versuch5/cpx.cpp b/quellcode/versuch5/cpx.cpp
new file mode 100755
index 0000000..eebdc65
--- /dev/null
+++ b/quellcode/versuch5/cpx.cpp
@@ -0,0 +1,85 @@
+/**
+ *
+ * \file cpx.cpp
+ * \brief read and write DIO
+ *
+ * \author Manuel Traut
+ * \version 2006-10-06
+ *
+ */
+
+#include "cpx.h"
+
+CPX::CPX(){
+ init();
+ std::cout<<"\n\n init ok\n\n";
+}
+
+int CPX::init(){
+
+ int fd_out = open(CPX_Input, O_RDWR | O_SYNC);
+ if (fd_out == -1){
+ std::cout<<"PBCIO: open failed"<<std::endl;
+ return(-1);
+ }
+ std::cout<<"CPX_Output_1 opened\n";
+
+ /* setup signal on interrupt */
+ param.signal = 1001;
+ param.pid = getpid();
+
+ if (ioctl(fd_out, CPX_DIO_IOCTL_ADD_SIG, (void *) &param) == -1) {
+ std::cout<<"signal map failed\n";
+ close(fd_out);
+ return(-1);
+ } else std::cout<<"signal map ok\n";
+
+ mapped_out = (u_char*) mmap (NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd_out, 0);
+ if (mapped_out == MAP_FAILED) {
+ std::cout<<"PBCIO: mmap failed\n";
+ close (fd_out);
+ return(-2);
+ }
+ std::cout<<"mmap ok\n";
+
+ DOUT = (u_char *) mapped_out;
+ DIN = (u_char *) mapped_out;
+
+ return 0;
+}
+
+short CPX::get(short port){
+ unsigned char value = 0;
+
+ switch(port){
+ case 1:
+ value = DIN[PORT1_IN];
+ break;
+ case 2:
+ value = DIN[PORT1_IN];
+ break;
+ case 3:
+ value = DIN[PORT1_IN];
+ break;
+ default:
+ std::cout<<"portNo: "<<port<<" incorrect\n";
+ }
+
+ return (short) value;
+}
+
+void CPX::set(short port, short value){
+ switch(port){
+ case 1:
+ DOUT[PORT1_OUT] = value;
+ break;
+ case 2:
+ DOUT[PORT2_OUT] = value;
+ break;
+ case 3:
+ DOUT[PORT3_OUT] = value;
+ break;
+ default:
+ std::cout<<"portNo: "<<port<<" incorrect\n";
+ }
+}