Cat
Public Types | Public Member Functions | Private Attributes | List of all members
UsbSpiBus Class Reference

#include <inc/UsbSpiBus.h>

Inheritance diagram for UsbSpiBus:
Interface Element Hierarchy Object Attrib

Public Types

typedef unsigned long U32
 
typedef unsigned short U16
 
typedef unsigned char U8
 
- Public Types inherited from Attrib
enum  Attribut {
  UNDEFINED, PASSIVE, ACTIVE, INTERFACE,
  IO, IODATA, ELEMENT, HARDWARE,
  PROCESSUS, SOFTWARE
}
 

Public Member Functions

 UsbSpiBus ()
 Standard constructor. More...
 
virtual ~UsbSpiBus ()
 Destructor. More...
 
void help ()
 
virtual StatusCode init ()
 
void reset ()
 
void update ()
 
void ctrlWd (U8)
 
void setTxNeg (bool txNeg)
 
bool txNeg ()
 
void setRxNeg (bool rxNeg)
 
bool rxNeg ()
 
void setASS (bool aSS)
 
bool aSS ()
 
void setLSBFirst (bool lSBFirst)
 
bool lSBFirst ()
 
char dataLength ()
 
void setDataLength (char dataLength)
 
U32 clockDivider ()
 
StatusCode setClockDivider (U32)
 
RegisterregCtrl ()
 
RegisterregClockDivider ()
 
RegisterregSlaveSelect ()
 
RegisterregRxData ()
 
RegisterregTxData ()
 
virtual StatusCode read (IOdata *)
 
virtual StatusCode write (IOdata *)
 
- Public Member Functions inherited from Interface
 Interface ()
 Standard constructor. More...
 
virtual ~Interface ()
 Destructor. More...
 
- Public Member Functions inherited from Element
 Element ()
 Standard constructor. More...
 
virtual ~Element ()
 Destructor. More...
 
void recursiveInitElement ()
 
void recursiveInitCommunications ()
 
StatusCode setConnection (Hierarchy *)
 
Hierarchyconnection ()
 
- Public Member Functions inherited from Hierarchy
 Hierarchy ()
 Standard constructor. More...
 
virtual ~Hierarchy ()
 Destructor. More...
 
void clear ()
 
void setParent (Hierarchy *parent)
 
Hierarchyparent ()
 
Hierarchyparent (std::string)
 
Hierarchyorigin ()
 
virtual void addChild (Hierarchy *element)
 
std::vector< Hierarchy * > children ()
 
Hierarchychild (std::string)
 
HierarchychildTyped (std::string)
 
unsigned long numberOfChildren ()
 
bool hasChildren ()
 
void delChild (Hierarchy *)
 
void delChild (std::string)
 
std::string path (std::string=std::string(""))
 
std::string pathTyped (std::string=std::string(""))
 
void tree (std::string indent=std::string(""))
 
void tree ()
 
- Public Member Functions inherited from Object
 Object ()
 Standard constructor. More...
 
virtual ~Object ()
 Destructor. More...
 
std::string name () const
 
std::string type ()
 
unsigned char id ()
 
std::string title ()
 
void msgSvc (int level, std::string msg, std::string name)
 
void msg (std::string mymsg)
 
void verbose (std::string mymsg)
 
void debug (std::string mymsg)
 
void info (std::string mymsg)
 
void warning (std::string mymsg)
 
void error (std::string mymsg)
 
void fatal (std::string mymsg)
 
void msg (std::string mymsg, std::string name)
 
void verbose (std::string mymsg, std::string name)
 
void debug (std::string mymsg, std::string name)
 
void info (std::string mymsg, std::string name)
 
void warning (std::string mymsg, std::string name)
 
void error (std::string mymsg, std::string name)
 
void fatal (std::string mymsg, std::string name)
 
void setName (std::string name)
 
void setType (std::string type)
 
void setId (unsigned char id)
 
void setTitle (std::string title)
 
void setDllName (std::string dllName)
 
std::string dllName ()
 
- Public Member Functions inherited from Attrib
 Attrib ()
 Standard constructor. More...
 
virtual ~Attrib ()
 Destructor. More...
 
bool is (int attribut)
 
void add (int attribut)
 
void remove (int attribut)
 
std::string attributs ()
 

Private Attributes

char m_dataLength
 
bool m_aSS
 
bool m_lSBFirst
 
bool m_txNeg
 
bool m_rxNeg
 
U32 m_clockDivider
 
Registerm_regCtrl
 
Registerm_regClockDivider
 
Registerm_regSlaveSelect
 
Registerm_regRxData
 
Registerm_regTxData
 

Additional Inherited Members

- Protected Attributes inherited from Element
Hierarchym_connection
 
- Protected Attributes inherited from Attrib
std::string m_attribString [10]
 

Detailed Description

Author
Date
2006-10-23

Definition at line 17 of file UsbSpiBus.h.

Member Typedef Documentation

◆ U16

typedef unsigned short UsbSpiBus::U16

Definition at line 20 of file UsbSpiBus.h.

◆ U32

typedef unsigned long UsbSpiBus::U32

Definition at line 19 of file UsbSpiBus.h.

◆ U8

typedef unsigned char UsbSpiBus::U8

Definition at line 21 of file UsbSpiBus.h.

Constructor & Destructor Documentation

◆ UsbSpiBus()

UsbSpiBus::UsbSpiBus ( )

Standard constructor.

Definition at line 17 of file UsbSpiBus.cpp.

References Hierarchy::addChild(), IOdata::Byte, IOdata::defDataU8(), IOobject::io(), m_aSS, m_dataLength, m_lSBFirst, m_regClockDivider, m_regCtrl, m_regRxData, m_regSlaveSelect, m_regTxData, m_rxNeg, m_txNeg, IOdata::setAddress(), Object::setName(), Object::setType(), and IOdata::setWordSize().

17  {
18  setName("UsbSpiBus");
19  setType("UsbSpiBus");
20 
21  m_dataLength=32;
22  m_aSS = true;
23  m_lSBFirst = true;
24  m_txNeg = true;
25  m_rxNeg = true;
26 
27  m_regCtrl = new Register();
29  m_regSlaveSelect = new Register();
30  m_regRxData = new Register();
31  m_regTxData = new Register();
32 
33  m_regCtrl ->setName("CtrlReg");
34  m_regClockDivider->setName("ClockDividerReg");
35  m_regSlaveSelect ->setName("SlaveSelectReg");
36  m_regRxData ->setName("RxDataReg");
37  m_regTxData ->setName("TxDataReg");
38 
39  m_regCtrl ->io()->defDataU8(4);
42  m_regRxData ->io()->defDataU8(4);
43  m_regTxData ->io()->defDataU8(4);
44 
45  m_regCtrl ->io()->setAddress(64);
48  m_regRxData ->io()->setAddress(67);
49  m_regTxData ->io()->setAddress(67);
50 
56 
62 }
Register * m_regCtrl
Definition: UsbSpiBus.h:117
bool m_txNeg
Definition: UsbSpiBus.h:114
void setName(std::string name)
Definition: Object.h:51
char m_dataLength
Definition: UsbSpiBus.h:111
Register * m_regSlaveSelect
Definition: UsbSpiBus.h:119
Register * m_regTxData
Definition: UsbSpiBus.h:121
void setType(std::string type)
Definition: Object.h:52
bool m_lSBFirst
Definition: UsbSpiBus.h:113
bool m_rxNeg
Definition: UsbSpiBus.h:115
StatusCode setAddress(U32 address)
Definition: IOdata.h:51
bool m_aSS
Definition: UsbSpiBus.h:112
Register * m_regClockDivider
Definition: UsbSpiBus.h:118
Register * m_regRxData
Definition: UsbSpiBus.h:120
virtual void addChild(Hierarchy *element)
Definition: Hierarchy.cpp:83
StatusCode setWordSize(IOdata::WordSize wordSize)
Definition: IOdata.h:126
void defDataU8(unsigned long size)
Definition: IOdata.h:179
IOdata * io()
Definition: IOobject.h:66

◆ ~UsbSpiBus()

UsbSpiBus::~UsbSpiBus ( )
virtual

Destructor.

Definition at line 66 of file UsbSpiBus.cpp.

66  {
67 // delete m_regData;
68 // delete m_regAddress;
69 }

Member Function Documentation

◆ aSS()

bool UsbSpiBus::aSS ( )
inline

Definition at line 67 of file UsbSpiBus.h.

References m_aSS.

Referenced by BOOST_PYTHON_MODULE(), and setASS().

67 { return m_aSS; }
bool m_aSS
Definition: UsbSpiBus.h:112

◆ clockDivider()

unsigned int long UsbSpiBus::clockDivider ( )

Definition at line 127 of file UsbSpiBus.cpp.

References Element::connection(), IOdata::dataU8(), StatusCode::FAILURE, IOobject::io(), m_clockDivider, Element::m_connection, m_regClockDivider, Interface::read(), and Object::warning().

Referenced by BOOST_PYTHON_MODULE(), setClockDivider(), and setDataLength().

127  {
128  Interface* connection = dynamic_cast<Interface*> (m_connection);
129  U8* buffer=m_regClockDivider->io()->dataU8();
130  if (connection->read(m_regClockDivider->io()).isFailure()){
131  warning("Cannot read ClockDivider register on UsbSpiBus",
132  "UsbSpiBus::clockDivider");
133  return StatusCode::FAILURE;
134  }
135  m_clockDivider=(buffer[0]+(buffer[1]<<8)+(buffer[1]<<16)+(buffer[1]<<24));
136  return m_clockDivider;
137 }
Hierarchy * connection()
Definition: Element.cpp:84
Hierarchy * m_connection
Definition: Element.h:70
virtual StatusCode read(IOdata *)=0
unsigned char U8
Definition: ICECALv3.h:55
U8 * dataU8()
Definition: IOdata.h:214
Register * m_regClockDivider
Definition: UsbSpiBus.h:118
U32 m_clockDivider
Definition: UsbSpiBus.h:116
void warning(std::string mymsg)
Definition: Object.h:39
IOdata * io()
Definition: IOobject.h:66

◆ ctrlWd()

void UsbSpiBus::ctrlWd ( U8  length)

Definition at line 89 of file UsbSpiBus.cpp.

References IOdata::dataU8(), IOobject::io(), m_aSS, m_dataLength, m_lSBFirst, m_regCtrl, m_rxNeg, and m_txNeg.

Referenced by read(), update(), and write().

89  {
90  U8* buffer=m_regCtrl->io()->dataU8();
91  buffer[0]=m_dataLength;
92  buffer[1]=
93  (m_aSS<<5)+
94  (m_lSBFirst<<3)+
95  (m_txNeg<<2)+
96  (m_rxNeg<<1)+
97  1;
98  buffer[2]=length&0x1;
99  buffer[3]=length&0x3F;
100 }
Register * m_regCtrl
Definition: UsbSpiBus.h:117
bool m_txNeg
Definition: UsbSpiBus.h:114
char m_dataLength
Definition: UsbSpiBus.h:111
unsigned char U8
Definition: ICECALv3.h:55
bool m_lSBFirst
Definition: UsbSpiBus.h:113
bool m_rxNeg
Definition: UsbSpiBus.h:115
bool m_aSS
Definition: UsbSpiBus.h:112
U8 * dataU8()
Definition: IOdata.h:214
IOdata * io()
Definition: IOobject.h:66

◆ dataLength()

char UsbSpiBus::dataLength ( )
inline

Definition at line 73 of file UsbSpiBus.h.

References m_dataLength.

Referenced by setDataLength().

73 { return m_dataLength; }
char m_dataLength
Definition: UsbSpiBus.h:111

◆ help()

void UsbSpiBus::help ( )
inlinevirtual

printout help for the element

Implements Interface.

Definition at line 30 of file UsbSpiBus.h.

References Object::info(), init(), and Object::name().

Referenced by BOOST_PYTHON_MODULE().

30 { info("UsbSpiBus "+name()+". No help.","UsbSpiBus::help"); };
void info(std::string mymsg)
Definition: Object.h:38
std::string name() const
Definition: Object.h:28

◆ init()

StatusCode UsbSpiBus::init ( )
virtual

init the component

Returns
void

Implements Interface.

Definition at line 74 of file UsbSpiBus.cpp.

References StatusCode::FAILURE, Object::fatal(), Element::m_connection, Hierarchy::parent(), Element::setConnection(), StatusCode::SUCCESS, and Object::type().

Referenced by BOOST_PYTHON_MODULE(), and help().

74  {
75  if (0==m_connection){
76  if (0==this->parent()){
77  fatal("Cannot define connection for "+type()+". No parent found.",
78  "UsbSpiBus::init");
79  return StatusCode::FAILURE;
80  }
81  return setConnection(this->parent());
82  }
83  else return StatusCode::SUCCESS;
84 }
Hierarchy * m_connection
Definition: Element.h:70
StatusCode setConnection(Hierarchy *)
Definition: Element.cpp:55
Hierarchy * parent()
Definition: Hierarchy.h:28
void fatal(std::string mymsg)
Definition: Object.h:41
std::string type()
Definition: Object.h:29

◆ lSBFirst()

bool UsbSpiBus::lSBFirst ( )
inline

Definition at line 71 of file UsbSpiBus.h.

References m_lSBFirst.

Referenced by BOOST_PYTHON_MODULE(), and setLSBFirst().

71 { return m_lSBFirst; }
bool m_lSBFirst
Definition: UsbSpiBus.h:113

◆ read()

StatusCode UsbSpiBus::read ( IOdata io)
virtual

Implements Interface.

Definition at line 142 of file UsbSpiBus.cpp.

References IOdata::address(), Element::connection(), ctrlWd(), IOdata::dataU8(), IOdata::dump(), StatusCode::FAILURE, Object::info(), IOobject::io(), itos(), IOdata::length(), Element::m_connection, m_dataLength, m_regCtrl, m_regRxData, m_regSlaveSelect, m_regTxData, Interface::read(), StatusCode::SUCCESS, Object::warning(), and Interface::write().

Referenced by regTxData().

142  {
143  Interface* connection = dynamic_cast<Interface*> (m_connection);
144  U8* buffer=m_regSlaveSelect->io()->dataU8();
145  buffer[0]=(U8)(io->address());
146  buffer[1]=(U8)(0);
147  buffer[2]=(U8)(0);
148  buffer[3]=(U8)(0);
149  info("1) chipselect register:");
150  m_regSlaveSelect->io()->dump(0);
151  if (connection->write(m_regSlaveSelect->io()).isFailure()){
152  warning("Cannot write SlaveSelect register on UsbSpiBus",
153  "UsbSpiBus::read");
154  return StatusCode::FAILURE;
155  }
156  m_dataLength=8*io->length();
157  buffer=m_regTxData->io()->dataU8();
158  // for (int i=0; i<(io->length()-1); ++i) buffer[i]=10;
159  buffer[io->length()-1]=io->dataU8(io->length()-1);
160  m_regTxData->io()->dump(0);
161  if (connection->write(m_regTxData->io()).isFailure()){
162  warning("Cannot write TxData register on UsbSpiBus","UsbSpiBus::write");
163  return StatusCode::FAILURE;
164  }
165  info("2) spi read length (header included): "+itos(m_dataLength));
167  info("3) Control word:");
168  m_regCtrl->io()->dump(0);
169  if (connection->write(m_regCtrl->io()).isFailure()){
170  warning("Cannot write Ctrl register on UsbSpiBus","UsbSpiBus::write");
171  return StatusCode::FAILURE;
172  }
173  if (connection->read(m_regRxData->io()).isFailure()){
174  warning("Cannot read RxData register on UsbSpiBus",
175  "UsbSpiBus::read"); ;
176  return StatusCode::FAILURE;
177  }
178  info("4) spi data read:");
179  m_regRxData->io()->dump(0);
180  buffer=io->dataU8();
181  for (unsigned int i=0; i<io->length()-1; ++i){
182  if (i>3) {
183  warning("Not implemented yet: cannot read more than 32 bits.",
184  "UsbSpiBus::write");
185  return StatusCode::FAILURE;
186  }
187  buffer[i]=m_regRxData->io()->dataU8(i);
188  }
189  return StatusCode::SUCCESS;
190 }
void info(std::string mymsg)
Definition: Object.h:38
std::string itos(int)
Definition: Tools.cpp:46
Hierarchy * connection()
Definition: Element.cpp:84
Hierarchy * m_connection
Definition: Element.h:70
Register * m_regCtrl
Definition: UsbSpiBus.h:117
U32 address()
Definition: IOdata.h:59
virtual StatusCode read(IOdata *)=0
char m_dataLength
Definition: UsbSpiBus.h:111
Register * m_regSlaveSelect
Definition: UsbSpiBus.h:119
void dump(unsigned int printout=0)
Definition: IOdata.cpp:94
void ctrlWd(U8)
Definition: UsbSpiBus.cpp:89
Register * m_regTxData
Definition: UsbSpiBus.h:121
unsigned char U8
Definition: ICECALv3.h:55
virtual StatusCode write(IOdata *)=0
unsigned char U8
Definition: UsbSpiBus.h:21
U32 length()
Definition: IOdata.h:175
U8 * dataU8()
Definition: IOdata.h:214
Register * m_regRxData
Definition: UsbSpiBus.h:120
void warning(std::string mymsg)
Definition: Object.h:39
IOdata * io()
Definition: IOobject.h:66

◆ regClockDivider()

Register* UsbSpiBus::regClockDivider ( )
inline

Definition at line 88 of file UsbSpiBus.h.

References m_regClockDivider.

Referenced by BOOST_PYTHON_MODULE().

88  {
89  return m_regClockDivider;
90  };
Register * m_regClockDivider
Definition: UsbSpiBus.h:118

◆ regCtrl()

Register* UsbSpiBus::regCtrl ( )
inline

Definition at line 84 of file UsbSpiBus.h.

References m_regCtrl.

Referenced by BOOST_PYTHON_MODULE().

84  {
85  return m_regCtrl;
86  };
Register * m_regCtrl
Definition: UsbSpiBus.h:117

◆ regRxData()

Register* UsbSpiBus::regRxData ( )
inline

Definition at line 96 of file UsbSpiBus.h.

References m_regTxData.

Referenced by BOOST_PYTHON_MODULE().

96  {
97  return m_regTxData;
98  };
Register * m_regTxData
Definition: UsbSpiBus.h:121

◆ regSlaveSelect()

Register* UsbSpiBus::regSlaveSelect ( )
inline

Definition at line 92 of file UsbSpiBus.h.

References m_regSlaveSelect.

Referenced by BOOST_PYTHON_MODULE().

92  {
93  return m_regSlaveSelect;
94  };
Register * m_regSlaveSelect
Definition: UsbSpiBus.h:119

◆ regTxData()

Register* UsbSpiBus::regTxData ( )
inline

Definition at line 100 of file UsbSpiBus.h.

References m_regTxData, read(), and write().

Referenced by BOOST_PYTHON_MODULE().

100  {
101  return m_regTxData;
102  };
Register * m_regTxData
Definition: UsbSpiBus.h:121

◆ reset()

void UsbSpiBus::reset ( )
inlinevirtual

Resets the Element so that is is in a standard and safe situation. Different from Element::init which configure the Element. Element::reset() is more an Emergency pull. It is often/usually called by the recursiveInitElement method at the start of the program.

Implements Interface.

Definition at line 46 of file UsbSpiBus.h.

References Object::info(), and Object::name().

Referenced by BOOST_PYTHON_MODULE().

46 { info("UsbSpiBus "+name()+" reset.","UsbSpiBus::reset");};
void info(std::string mymsg)
Definition: Object.h:38
std::string name() const
Definition: Object.h:28

◆ rxNeg()

bool UsbSpiBus::rxNeg ( )
inline

Definition at line 63 of file UsbSpiBus.h.

References m_rxNeg.

Referenced by BOOST_PYTHON_MODULE(), and setRxNeg().

63 { return m_rxNeg; }
bool m_rxNeg
Definition: UsbSpiBus.h:115

◆ setASS()

void UsbSpiBus::setASS ( bool  aSS)
inline

Definition at line 65 of file UsbSpiBus.h.

References aSS(), and m_aSS.

Referenced by BOOST_PYTHON_MODULE().

65 { m_aSS=aSS; }
bool aSS()
Definition: UsbSpiBus.h:67
bool m_aSS
Definition: UsbSpiBus.h:112

◆ setClockDivider()

StatusCode UsbSpiBus::setClockDivider ( U32  value)

Definition at line 105 of file UsbSpiBus.cpp.

References clockDivider(), Element::connection(), IOdata::dataU8(), StatusCode::FAILURE, IOobject::io(), Element::m_connection, m_regClockDivider, StatusCode::SUCCESS, Object::warning(), and Interface::write().

Referenced by BOOST_PYTHON_MODULE(), and setDataLength().

105  {
106  Interface* connection = dynamic_cast<Interface*> (m_connection);
107  U8* buffer=m_regClockDivider->io()->dataU8();
108  buffer[0]= value&0xFF;
109  buffer[1]= (value>>8)&0xFF;
110  buffer[2]= (value>>16)&0xFF;
111  buffer[3]= (value>>24)&0xFF;
112  if (connection->write(m_regClockDivider->io()).isFailure()){
113  warning("Cannot write ClockDivider register on UsbSpiBus",
114  "UsbSpiBus::setClockDivider");
115  return StatusCode::FAILURE;
116  }
117  if (value!=clockDivider()){
118  warning("ClockDivider read/write mismatch.","UsbSpiBus::setClockDivider");
119  return StatusCode::FAILURE;
120  };
121  return StatusCode::SUCCESS;
122 }
Hierarchy * connection()
Definition: Element.cpp:84
Hierarchy * m_connection
Definition: Element.h:70
U32 clockDivider()
Definition: UsbSpiBus.cpp:127
unsigned char U8
Definition: ICECALv3.h:55
virtual StatusCode write(IOdata *)=0
U8 * dataU8()
Definition: IOdata.h:214
Register * m_regClockDivider
Definition: UsbSpiBus.h:118
void warning(std::string mymsg)
Definition: Object.h:39
IOdata * io()
Definition: IOobject.h:66

◆ setDataLength()

void UsbSpiBus::setDataLength ( char  dataLength)
inline

Definition at line 75 of file UsbSpiBus.h.

References clockDivider(), dataLength(), Object::info(), itos(), m_dataLength, and setClockDivider().

75  {
77  info("DataLength="+itos(m_dataLength));
78  }
void info(std::string mymsg)
Definition: Object.h:38
std::string itos(int)
Definition: Tools.cpp:46
char m_dataLength
Definition: UsbSpiBus.h:111
char dataLength()
Definition: UsbSpiBus.h:73

◆ setLSBFirst()

void UsbSpiBus::setLSBFirst ( bool  lSBFirst)
inline

Definition at line 69 of file UsbSpiBus.h.

References lSBFirst(), and m_lSBFirst.

Referenced by BOOST_PYTHON_MODULE().

bool m_lSBFirst
Definition: UsbSpiBus.h:113
bool lSBFirst()
Definition: UsbSpiBus.h:71

◆ setRxNeg()

void UsbSpiBus::setRxNeg ( bool  rxNeg)
inline

Definition at line 61 of file UsbSpiBus.h.

References m_rxNeg, and rxNeg().

Referenced by BOOST_PYTHON_MODULE().

61 { m_rxNeg=rxNeg; }
bool m_rxNeg
Definition: UsbSpiBus.h:115
bool rxNeg()
Definition: UsbSpiBus.h:63

◆ setTxNeg()

void UsbSpiBus::setTxNeg ( bool  txNeg)
inline

Definition at line 57 of file UsbSpiBus.h.

References m_txNeg, and txNeg().

Referenced by BOOST_PYTHON_MODULE().

57 { m_txNeg=txNeg; }
bool m_txNeg
Definition: UsbSpiBus.h:114
bool txNeg()
Definition: UsbSpiBus.h:59

◆ txNeg()

bool UsbSpiBus::txNeg ( )
inline

Definition at line 59 of file UsbSpiBus.h.

References m_txNeg.

Referenced by BOOST_PYTHON_MODULE(), and setTxNeg().

59 { return m_txNeg; }
bool m_txNeg
Definition: UsbSpiBus.h:114

◆ update()

void UsbSpiBus::update ( )
inlinevirtual

Update the Element configuration from the actual hardware

Implements Interface.

Definition at line 51 of file UsbSpiBus.h.

References ctrlWd(), Object::info(), and Object::name().

Referenced by BOOST_PYTHON_MODULE(), AppFrame.AppFrame::deleteHardware(), ConfFrame.ConfFrame::onChange(), GraphFrame.GraphFrame::onChange(), CfgFrame.CfgFrame::onChange(), ConfFrame.ConfFrame::onEdit(), AppFrame.AppFrame::onLoad(), ConfFrame.ConfFrame::onReLoad(), GraphFrame.GraphFrame::onReLoad(), CfgFrame.CfgFrame::onReLoad(), and AppFrame.AppFrame::onReLoad().

51  {
52  info("UsbSpiBus "+name()+". Nothing to do.","UsbSpiBus::update");
53  };
void info(std::string mymsg)
Definition: Object.h:38
std::string name() const
Definition: Object.h:28

◆ write()

StatusCode UsbSpiBus::write ( IOdata io)
virtual

Implements Interface.

Definition at line 195 of file UsbSpiBus.cpp.

References IOdata::address(), Element::connection(), ctrlWd(), IOdata::dataU8(), IOdata::dump(), StatusCode::FAILURE, Object::info(), IOobject::io(), itos(), IOdata::length(), Element::m_connection, m_dataLength, m_regCtrl, m_regSlaveSelect, m_regTxData, StatusCode::SUCCESS, Object::warning(), and Interface::write().

Referenced by regTxData().

195  {
196  U8* buffer=m_regSlaveSelect->io()->dataU8();
197  buffer[0]=(U8)(io->address());
198  buffer[1]=(U8)(0);
199  buffer[2]=(U8)(0);
200  buffer[3]=(U8)(0);
201  m_dataLength=8*io->length();
202  info("1) spi write length (header included): "+itos(m_dataLength));
203  Interface* connection = dynamic_cast<Interface*> (m_connection);
204  info("2) chip select register:");
205  m_regSlaveSelect->io()->dump(0);
206  if (connection->write(m_regSlaveSelect->io()).isFailure()){
207  warning("Cannot write SlaveSelect register on UsbSpiBus",
208  "UsbSpiBus::write");
209  return StatusCode::FAILURE;
210  }
211  info("3) spi data to be sent:");
212  buffer=m_regTxData->io()->dataU8();
213  for (unsigned int i=0; i<io->length(); ++i) {
214  if (i>3) {
215  warning("Not implemented yet: cannot send more than 32 bits.",
216  "UsbSpiBus::write");
217  return StatusCode::FAILURE;
218  }
219  buffer[i]=io->dataU8(i);
220  }
221  m_regTxData->io()->dump(0);
222  if (connection->write(m_regTxData->io()).isFailure()){
223  warning("Cannot write TxData register on UsbSpiBus","UsbSpiBus::write");
224  return StatusCode::FAILURE;
225  }
226  info("4) Control word:");
228  m_regCtrl->io()->dump(0);
229  if (connection->write(m_regCtrl->io()).isFailure()){
230  warning("Cannot write Ctrl register on UsbSpiBus","UsbSpiBus::write");
231  return StatusCode::FAILURE;
232  }
233  info("5) Spi transmission done.");
234  return StatusCode::SUCCESS;
235 }
void info(std::string mymsg)
Definition: Object.h:38
std::string itos(int)
Definition: Tools.cpp:46
Hierarchy * connection()
Definition: Element.cpp:84
Hierarchy * m_connection
Definition: Element.h:70
Register * m_regCtrl
Definition: UsbSpiBus.h:117
U32 address()
Definition: IOdata.h:59
char m_dataLength
Definition: UsbSpiBus.h:111
Register * m_regSlaveSelect
Definition: UsbSpiBus.h:119
void dump(unsigned int printout=0)
Definition: IOdata.cpp:94
void ctrlWd(U8)
Definition: UsbSpiBus.cpp:89
Register * m_regTxData
Definition: UsbSpiBus.h:121
unsigned char U8
Definition: ICECALv3.h:55
virtual StatusCode write(IOdata *)=0
unsigned char U8
Definition: UsbSpiBus.h:21
U32 length()
Definition: IOdata.h:175
U8 * dataU8()
Definition: IOdata.h:214
void warning(std::string mymsg)
Definition: Object.h:39
IOdata * io()
Definition: IOobject.h:66

Member Data Documentation

◆ m_aSS

bool UsbSpiBus::m_aSS
private

Definition at line 112 of file UsbSpiBus.h.

Referenced by aSS(), ctrlWd(), setASS(), and UsbSpiBus().

◆ m_clockDivider

U32 UsbSpiBus::m_clockDivider
private

Definition at line 116 of file UsbSpiBus.h.

Referenced by clockDivider().

◆ m_dataLength

char UsbSpiBus::m_dataLength
private

Definition at line 111 of file UsbSpiBus.h.

Referenced by ctrlWd(), dataLength(), read(), setDataLength(), UsbSpiBus(), and write().

◆ m_lSBFirst

bool UsbSpiBus::m_lSBFirst
private

Definition at line 113 of file UsbSpiBus.h.

Referenced by ctrlWd(), lSBFirst(), setLSBFirst(), and UsbSpiBus().

◆ m_regClockDivider

Register* UsbSpiBus::m_regClockDivider
private

Definition at line 118 of file UsbSpiBus.h.

Referenced by clockDivider(), regClockDivider(), setClockDivider(), and UsbSpiBus().

◆ m_regCtrl

Register* UsbSpiBus::m_regCtrl
private

Definition at line 117 of file UsbSpiBus.h.

Referenced by ctrlWd(), read(), regCtrl(), UsbSpiBus(), and write().

◆ m_regRxData

Register* UsbSpiBus::m_regRxData
private

Definition at line 120 of file UsbSpiBus.h.

Referenced by read(), and UsbSpiBus().

◆ m_regSlaveSelect

Register* UsbSpiBus::m_regSlaveSelect
private

Definition at line 119 of file UsbSpiBus.h.

Referenced by read(), regSlaveSelect(), UsbSpiBus(), and write().

◆ m_regTxData

Register* UsbSpiBus::m_regTxData
private

Definition at line 121 of file UsbSpiBus.h.

Referenced by read(), regRxData(), regTxData(), UsbSpiBus(), and write().

◆ m_rxNeg

bool UsbSpiBus::m_rxNeg
private

Definition at line 115 of file UsbSpiBus.h.

Referenced by ctrlWd(), rxNeg(), setRxNeg(), and UsbSpiBus().

◆ m_txNeg

bool UsbSpiBus::m_txNeg
private

Definition at line 114 of file UsbSpiBus.h.

Referenced by ctrlWd(), setTxNeg(), txNeg(), and UsbSpiBus().


The documentation for this class was generated from the following files: