blob: bcdbe17f98393b11e095fc33a7add7ead26e899f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/**
*
* \file cpx.h
* \brief read and write DIO
*
* \author Manuel Traut
* \version 2006-10-06
*
*/
#ifndef CPX_H
#define CPX_H
#include <iostream>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
// Device Nodes
#define CPX_Input "/dev/iio2"
#define CPX_Input_1 "/dev/iio2_in"
#define CPX_Output_1 "/dev/iio2_out"
// Memory Addresses
#define PORT1_OUT 0x2c00
#define PORT2_OUT 0x3c00
#define PORT3_OUT 0x4c00
#define PORT1_IN 0x5c00
#define PORT2_IN 0x6c00
#define PORT3_IN 0x7c00
#define PROT_READ 0x01
#define PROT_WRITE 0x02
#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
// ioctl (file descriptor, CPX_DIO_IOCTL_SET_SIGNAL, irq_send_signal_param*)
// enable sending signal on interrupt
// cpx_dio_set_signal_param.signal = signal to be sent to process
#define CPX_DIO_IOCTL_BASE 0xCD
typedef struct{
int signal; // signal to be sent
int pid; // process id, signal should be sent to
}cpx_dio_set_signal_param;
#define CPX_DIO_IOCTL_ADD_SIG _IOW(CPX_DIO_IOCTL_BASE, 3, cpx_dio_set_signal_param)
#define CPX_DIO_IOCTL_DEL_SIG _IOW(CPX_DIO_IOCTL_BASE, 4, cpx_dio_set_signal_param)
class CPX{
public:
CPX();
void set(short port, short value);
short get(short port);
private:
int init();
unsigned char *mapped_in;
unsigned char *mapped_out;
volatile u_char *DOUT;
volatile u_char *DIN;
cpx_dio_set_signal_param param;
};
#endif
|