initial commit
[ETG_Helmet] / SOFTWARE / UTILS / fast-gpio / src / module.cpp
1 #include <module.h>
2
3 // extern unsigned long int     fullRegister;
4
5 Module::Module(void)
6 {
7         // not verbose by default
8         verbosityLevel  = 0;
9
10         // not in debug mode by default
11         debugLevel              = 0;
12 }
13
14 Module::~Module(void)
15 {
16         // nothing for now
17 }
18
19
20 // Debug Functions
21 void Module::SetVerbosity (int input)
22 {
23         verbosityLevel  = input;
24 }
25
26 void Module::SetVerbosity (bool input)
27 {
28         verbosityLevel  = (input ? 1 : 0);
29 }
30
31 void Module::SetDebugMode (int input)
32 {
33         debugLevel              = input;
34 }
35
36 void Module::SetDebugMode (bool input)
37 {
38         debugLevel              = (input ? 1 : 0);
39 }
40
41
42 // Register access
43 int Module::_SetupAddress(unsigned long int blockBaseAddr, unsigned long int blockSize)
44 {
45         int  m_mfd;
46         int page_size;
47         if (debugLevel == 0)
48         {
49                 if ((m_mfd = open("/dev/mem", O_RDWR)) < 0)
50                 {
51                         return EXIT_FAILURE;    // maybe return -1
52                 }
53                 regAddress = (unsigned long int*)mmap   (       NULL, 
54                                                                                                 1024, 
55                                                                                                 PROT_READ|PROT_WRITE, 
56                                                                                                 MAP_FILE|MAP_SHARED, 
57                                                                                                 m_mfd, 
58                                                                                                 blockBaseAddr
59                                                                                         );
60                 close(m_mfd);
61                 if (regAddress == MAP_FAILED)
62                 {
63                         return EXIT_FAILURE;    // maybe return -2
64                 }
65         }
66
67         return EXIT_SUCCESS;    // regAddress is now populated
68 }
69
70 void Module::_WriteReg(unsigned long int registerOffset, unsigned long int value)
71 {
72         if (verbosityLevel > 0) printf("Writing register 0x%08lx with data 0x%08lx \n", (regAddress + registerOffset), value);
73
74         *(regAddress + registerOffset) = value;
75 }
76
77 unsigned long int Module::_ReadReg(unsigned long int registerOffset)
78 {
79         unsigned long int       value = 0x0;
80         // read the value 
81         value = *(regAddress + registerOffset);
82
83         if (verbosityLevel > 0) printf("Read register 0x%08lx, data: 0x%08lx \n", (regAddress + registerOffset), value);
84
85 //      fullRegister = value;
86
87         return(value);
88 }
89
90 // change the value of a single bit
91 void Module::_SetBit(unsigned long int &regVal, int bitNum, int value)
92 {
93         if (value == 1) {
94                 regVal |= (1 << bitNum);
95         }
96         else {
97                 regVal &= ~(1 << bitNum);
98         }
99
100         // try this out
101         // regVal ^= (-value ^ regVal) & (1 << bitNum);
102 }
103
104 // find the value of a single bit
105 int Module::_GetBit(unsigned long int regVal, int bitNum)
106 {
107         int value;
108
109         // isolate the specific bit
110         value = ((regVal >> bitNum) & 0x1);
111
112         return (value);
113 }
Contact me: dev (at) shalnoff (dot) com
PGP fingerprint: A6B8 3B23 6013 F18A 0C71 198B 83D8 C64D 917A 5717