Cat
Register.cpp
Go to the documentation of this file.
1 // $Id: $
2 // Include files
3 
4 
5 // local
6 #include "Register.h"
7 #include "Interface.h"
8 
9 //-----------------------------------------------------------------------------
10 // Implementation file for class : Register
11 //
12 // 2006-10-23 :
13 //-----------------------------------------------------------------------------
14 
15 //=============================================================================
16 // Standard constructor, initializes variables
17 //=============================================================================
19  setName("Register");
20  setType("Register");
21 }
22 //=============================================================================
23 // Destructor
24 //=============================================================================
26 
27 }
28 
29 //=============================================================================
30 // Change a bit of a register
31 //=============================================================================
32 StatusCode Register::setBit(unsigned int bit, bool val){
33  if (read().isFailure()){
34  error("Cannot read register "+name(),"Register::setBit");
35  return StatusCode::FAILURE;
36  }
37  unsigned int data;
38  if (IOdata::Byte==io()->wordSize()&&0!=io()->dataU8()&&bit<8){
39  data=io()->dataU8()[0];
40  if (val) data |= (1 << bit);
41  else data &= ~(1 << bit);
42  io()->setU8(0,data);
43  }
44  if (IOdata::Word==io()->wordSize()&&0!=io()->dataU16()&&bit<16){
45  data=io()->dataU16()[0];
46  if (val) data |= (1 << bit);
47  else data &= ~(1 << bit);
48  io()->setU16(0,data);
49  }
50  if (IOdata::DWord==io()->wordSize()&&0!=io()->dataU32()&&bit<32){
51  data=io()->dataU32()[0];
52  if (val) data |= (1 << bit);
53  else data &= ~(1 << bit);
54  io()->setU32(0,data);
55  }
56  if (write().isFailure()){
57  error("Cannot write register "+name(),"Register::setBit");
58  return StatusCode::FAILURE;
59  }
60  return StatusCode::SUCCESS;
61 }
62 
63 //=============================================================================
64 // Change a bit of a register
65 //=============================================================================
66 bool Register::getBit(unsigned int bit){
67  if (read().isFailure()){
68  error("Cannot read register "+name(),"Register::setBit");
69  return StatusCode::FAILURE;
70  }
71  unsigned int data;
72  if (IOdata::Byte==io()->wordSize()&&0!=io()->dataU8()&&bit<8){
73  data=io()->dataU8()[0];
74  return (data >>bit )& 1 ;
75  }
76  if (IOdata::Word==io()->wordSize()&&0!=io()->dataU16()&&bit<16){
77  data=io()->dataU16()[0];
78  return (data >>bit )& 1 ;
79  }
80  if (IOdata::DWord==io()->wordSize()&&0!=io()->dataU32()&&bit<32){
81  data=io()->dataU32()[0];
82  return (data >>bit )& 1 ;
83  }
84  if (write().isFailure()){
85  error("Cannot write register "+name(),"Register::setBit");
86  return StatusCode::FAILURE;
87  }
88  return StatusCode::SUCCESS;
89 }
90 
91 //=============================================================================
bool getBit(unsigned int)
Definition: Register.cpp:66
Register()
Standard constructor.
Definition: Register.cpp:18
virtual StatusCode write()
Definition: IOobject.h:80
StatusCode setU8(unsigned long int, U8)
Definition: IOdata.cpp:43
void setName(std::string name)
Definition: Object.h:51
StatusCode setU16(unsigned long int, U16)
Definition: IOdata.cpp:60
U32 * dataU32()
Definition: IOdata.h:222
virtual StatusCode read()
Definition: IOobject.h:73
StatusCode setU32(unsigned long int, U32)
Definition: IOdata.cpp:77
void setType(std::string type)
Definition: Object.h:52
void error(std::string mymsg)
Definition: Object.h:40
def data(object, stream=None)
Definition: shell.py:150
StatusCode setBit(unsigned int, bool)
Definition: Register.cpp:32
U16 * dataU16()
Definition: IOdata.h:218
virtual ~Register()
Destructor.
Definition: Register.cpp:25
U8 * dataU8()
Definition: IOdata.h:214
std::string name() const
Definition: Object.h:28
IOdata * io()
Definition: IOobject.h:66