initial commit
[ETG_Helmet] / SOFTWARE / UTILS / fast-gpio / src / fastgpioomega2.cpp
1 #include <fastgpioomega2.h>
2
3 FastGpioOmega2::FastGpioOmega2(void)
4 {
5         // setup the memory address space
6         _SetupAddress(REG_BLOCK_ADDR, REG_BLOCK_SIZE);
7 }
8
9 FastGpioOmega2::~FastGpioOmega2(void)
10 {
11         // nothing for now
12 }
13
14 void FastGpioOmega2::setGpioOffset(int gpio){
15         int mod;
16         mod = gpio / 32;
17         if(mod == 0){
18                 this->ctrlOffset = REGISTER_CTRL0_OFFSET;
19                 this->dataOffset = REGISTER_DATA0_OFFSET;
20                 this->dataSetOffset = REGISTER_DSET0_OFFSET;
21                 this->dataClrOffset = REGISTER_DCLR0_OFFSET;
22         }
23         else if(mod == 1){
24                 this->ctrlOffset = REGISTER_CTRL1_OFFSET;
25                 this->dataOffset = REGISTER_DATA1_OFFSET;
26                 this->dataSetOffset = REGISTER_DSET1_OFFSET;
27                 this->dataClrOffset = REGISTER_DCLR1_OFFSET;
28         } else{
29                 this->ctrlOffset = REGISTER_CTRL2_OFFSET;
30                 this->dataOffset = REGISTER_DATA2_OFFSET;
31                 this->dataSetOffset = REGISTER_DSET2_OFFSET;
32                 this->dataClrOffset = REGISTER_DCLR2_OFFSET;
33         }
34 }
35 // public functions
36 int FastGpioOmega2::SetDirection(int pinNum, int bOutput)
37 {
38         unsigned long int regVal;
39         setGpioOffset(pinNum);
40         int gpio;
41         gpio = pinNum % 32;
42         // read the current input and output settings
43         regVal = _ReadReg(ctrlOffset);
44         if (verbosityLevel > 0) printf("Direction setting read: 0x%08lx\n", regVal);
45
46         // set the OE for this pin
47         _SetBit(regVal, gpio, bOutput);
48         if (verbosityLevel > 0) printf("Direction setting write: 0x%08lx\n", regVal);
49
50         // write the new register value
51         _WriteReg(ctrlOffset, regVal);
52
53
54         return (EXIT_SUCCESS);
55 }
56
57 int FastGpioOmega2::GetDirection(int pinNum, int &bOutput)
58 {
59         unsigned long int regVal;
60         setGpioOffset(pinNum);
61         int gpio;
62         gpio = pinNum % 32;
63         // read the current input and output settings
64         regVal  = _ReadReg(ctrlOffset);
65         if (verbosityLevel > 0) printf("Direction setting read: 0x%08lx\n", regVal);
66
67         bOutput = _GetBit(regVal, gpio);
68
69         return (EXIT_SUCCESS);
70 }
71
72 int FastGpioOmega2::Set(int pinNum, int value)
73 {
74         unsigned long int       regAddr;
75         unsigned long int       regVal;
76         setGpioOffset(pinNum);
77         int gpio;
78         gpio = pinNum % 32;
79
80         if (value == 0 )        {
81                 // write to the clear register
82                 regAddr         = dataClrOffset;
83         }
84         else {
85                 // write to the set register
86                 regAddr         = dataSetOffset;
87         }
88
89         // put the desired pin value into the register 
90         regVal = (0x1 << gpio);
91
92         // write to the register
93         _WriteReg (regAddr, regVal);
94
95         return EXIT_SUCCESS;
96 }
97
98 int FastGpioOmega2::Read(int pinNum, int &value)
99 {
100         unsigned long int       regVal;
101         setGpioOffset(pinNum);
102         int gpio;
103         gpio = pinNum % 32;
104         // read the current value of all pins
105         regVal  = _ReadReg (dataOffset);
106
107         // find the value of the specified pin
108         value   = _GetBit(regVal, gpio);
109
110         return EXIT_SUCCESS;
111 }
112
113 unsigned long int FastGpioOmega2::ReadFull(int pinNum, int &value)
114 {
115         unsigned long int       regVal;
116         setGpioOffset(pinNum);
117         int gpio;
118         gpio = pinNum % 32;
119         // read the current value of all pins
120         regVal  = _ReadReg (dataOffset);
121
122         return regVal;
123 }
Contact me: dev (at) shalnoff (dot) com
PGP fingerprint: A6B8 3B23 6013 F18A 0C71 198B 83D8 C64D 917A 5717