diff options
Diffstat (limited to 'quellcode/versuch4/cpx.cpp')
| -rwxr-xr-x | quellcode/versuch4/cpx.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/quellcode/versuch4/cpx.cpp b/quellcode/versuch4/cpx.cpp new file mode 100755 index 0000000..eebdc65 --- /dev/null +++ b/quellcode/versuch4/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 *) ¶m) == -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"; + } +} |
