diff options
Diffstat (limited to 'quellcode/versuch1/cpx.cpp')
| -rwxr-xr-x | quellcode/versuch1/cpx.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/quellcode/versuch1/cpx.cpp b/quellcode/versuch1/cpx.cpp new file mode 100755 index 0000000..3424d72 --- /dev/null +++ b/quellcode/versuch1/cpx.cpp @@ -0,0 +1,92 @@ +/** + * + * \file cpx.cpp + * \brief read and write DIO + * + * \author Manuel Traut + * \version 2006-10-06 + * + */ + +#include "cpx.h" + +// Constructor: calls init + +CPX::CPX(){ + init(); + std::cout<<"\n\n init ok\n\n"; +} + +// init: Memory Mapping, Setup Signal + +int CPX::init(){ + + int fd_out = open(CPX_Input, O_RDWR | O_SYNC); + if (fd_out == -1){ + std::cerr<<"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 *) ¶m) == -1) { + std::cerr<<"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::cerr<<"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; +} + +// returns value of specified port +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::cerr<<"portNo: "<<port<<" incorrect\n"; + value = 0; + } + + return (short) value; +} + +// write value to specified port +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::cerr<<"portNo: "<<port<<" incorrect\n"; + } +} |
