initial commit
[ETG_Helmet] / SOFTWARE / UTILS / fast-gpio / src / fastgpioomega.cpp
1 #include <fastgpioomega.h>
2
3 FastGpioOmega::FastGpioOmega(void)
4 {
5         // setup the memory address space
6         _SetupAddress(REGISTER_BLOCK_ADDR, REGISTER_BLOCK_SIZE);
7 }
8
9 FastGpioOmega::~FastGpioOmega(void)
10 {
11         // nothing for now
12 }
13
14 // public functions
15 int FastGpioOmega::SetDirection(int pinNum, int bOutput)
16 {
17         unsigned long int regVal;
18
19         // read the current input and output settings
20         regVal = _ReadReg(REGISTER_OE_OFFSET);
21         if (verbosityLevel > 0) printf("Direction setting read: 0x%08lx\n", regVal);
22
23         // set the OE for this pin
24         _SetBit(regVal, pinNum, bOutput);
25         if (verbosityLevel > 0) printf("Direction setting write: 0x%08lx\n", regVal);
26
27         // write the new register value
28         _WriteReg(REGISTER_OE_OFFSET, regVal);
29
30
31         return (EXIT_SUCCESS);
32 }
33
34 int FastGpioOmega::GetDirection(int pinNum, int &bOutput)
35 {
36         unsigned long int regVal;
37
38         // read the current input and output settings
39         regVal  = _ReadReg(REGISTER_OE_OFFSET);
40         if (verbosityLevel > 0) printf("Direction setting read: 0x%08lx\n", regVal);
41
42         // find the OE for this pin
43         bOutput = _GetBit(regVal, pinNum);
44
45
46         return (EXIT_SUCCESS);
47 }
48
49 int FastGpioOmega::Set(int pinNum, int value)
50 {
51         unsigned long int       regAddr;
52         unsigned long int       regVal;
53
54         if (value == 0 )        {
55                 // write to the clear register
56                 regAddr         = REGISTER_CLEAR_OFFSET;
57         }
58         else {
59                 // write to the set register
60                 regAddr         = REGISTER_SET_OFFSET;
61         }
62
63         // put the desired pin value into the register 
64         regVal = (0x1 << pinNum);
65
66         // write to the register
67         _WriteReg (regAddr, regVal);
68
69
70         return EXIT_SUCCESS;
71 }
72
73 int FastGpioOmega::Read(int pinNum, int &value)
74 {
75         unsigned long int       regVal;
76
77         // read the current value of all pins
78         regVal  = _ReadReg (REGISTER_IN_OFFSET);
79
80         // find the value of the specified pin
81         value   = _GetBit(regVal, pinNum);
82
83
84         return EXIT_SUCCESS;
85 }
86
87 unsigned long int FastGpioOmega::ReadFull(int pinNum, int &value)
88 {
89         unsigned long int       regVal;
90         // read the current value of all pins
91         regVal  = _ReadReg (REGISTER_IN_OFFSET);
92
93         // find the value of the specified pin
94         value   = _GetBit(regVal, pinNum);
95
96         return regVal;
97 }
Contact me: dev (at) shalnoff (dot) com
PGP fingerprint: A6B8 3B23 6013 F18A 0C71 198B 83D8 C64D 917A 5717