fab  130
API Documentation
rio.hxx
Go to the documentation of this file.
1 
6 #ifndef _RIO_RIO_HXX__
7 #define _RIO_RIO_HXX__
8 
9 #ifdef SWIG
10 %module rio
11 #endif
12 
13 #include <list>
14 #include <fstream>
15 #include "umi/umi_task.hxx"
16 #include "aes/aes.hxx"
17 #include "rio/protocols.hxx"
18 #include "aesc/umipro_aes.hxx"
19 
23 namespace INdepRio100 {
24  namespace Umi=INdepUmi100;
25  namespace Aes=INdepAes100 ;
26 
27  class RioReadFunc:public Umi::TaskFunc::Func {
28  int _cnRio;
29  int _iPort;
30  unsigned *_pnVal;
31 
32  int cnRio() const { return _cnRio; }
33 
34  public:
35  int func( int eState );
36  RioReadFunc(int cnRio, int iPort, unsigned *pnVal):_cnRio(cnRio), _iPort(iPort), _pnVal(pnVal) { assert(pnVal); }
37  ~RioReadFunc() { }
38  };
39 
40  class RioReadnFunc:public RioReadFunc {
41  unsigned _nVal;
42  public:
43  int nVal() const { return _nVal; }
44  RioReadnFunc(int cnRio, int iPort):RioReadFunc(cnRio,iPort, &_nVal) { }
45  ~RioReadnFunc() { }
46  };
47 
48  class RioWriteFunc:public Umi::TaskFunc::Func {
49  int _cnRio;
50  int _iPort, _iVal;
51 
52  int cnRio() const { return _cnRio; }
53 
54  public:
55  int func( int eState );
56  RioWriteFunc(int cnRio, int iPort, int iVal ):_cnRio(cnRio), _iPort(iPort), _iVal(iVal) { }
57  ~RioWriteFunc() { }
58  };
59 
60 
61  class RioConfigFunc:public Umi::TaskFunc::Func,public Failable {
62  int _cnRio;
63  /* config */
64  std::filebuf *_pfb;
65  std::stringbuf *_pgb;
66  std::streambuf *psb() { return _pfb ? static_cast<std::streambuf*>(_pfb) : static_cast<std::streambuf*>(_pgb); }
67  int cnRio() const { return _cnRio; }
68  std::string _sgConfig;
69  public:
70  const std::string &sgConfig() { return _sgConfig; }
71  int func( int eState );
72  Failable &initPath(const std::list<std::string> &lisgPath, const char *szProg);
73  Failable &initFile(const char *szProg);
74  Failable &initData(const char *mpch);
75 
76  RioConfigFunc(int cnRio);
77  ~RioConfigFunc();
78  };
79 
80  std::list<std::string> getEnv(std::string sgEnv, std::string sgPostfix);
81 
82  class RioTaskPlex:public Aes::AesTaskPlex {
83  std::string _sgConfig; /* config loaded */
84 
85 
86  Failables &callRioConfig(const char *szFile);
87  Failables &callRioConfig(const std::list<std::string>&, int iVers);
88 
89  public:
90  const std::string &sgConfig() const { return _sgConfig; }
91 
93  Failables &callRioInitPath(const std::list<std::string>&, int iVers=0);
94 
96  Failables &callRioInitFile(const char *szFile);
97 
99  Failables &callRioInitData(const char *szFile);
100 
102  int callRioRead(int iPort) {
103  unsigned nVal=-1;
104  run(new RioReadFunc(0, iPort, &nVal));
105  return nVal;
106  }
107 
109  void callRioWrite(int iPort, int iVal) {
110  run(new RioWriteFunc(0, iPort, iVal));
111  }
112 
113  RioTaskPlex(Umi::Channel *puc, Umi::ChanUser *pucIo):Aes::AesTaskPlex(puc, pucIo) {
114  assert(*(pucIo->pup()) == INdepRio100::theRio_rio_Proto);
115  assert(*(puc->pup()) == INdepRio100::theRio_rio_Proto);
116  }
117  ~RioTaskPlex() { }
118  };
119 
120 
127  Umi::ChanDevio *_puc; /* szDevice i/o channel */
128  RioTaskPlex *_prp; /* endpoint plexer */
129  public:
130  RioTaskPlex *prp() const { return _prp; }
131 
140  RioLocalTaskInitializer(const char *szDevice, const char *szRbfPath[]);
141 
147  RioLocalTaskInitializer(const char *szDevice); /* open only */
149  };
150 
151 }
152 
153 
154 #endif
Convenience class to configure all resources necessary for process-local operation in a single constr...
Definition: rio.hxx:126
Definition: rio.hxx:82
int callRioRead(int iPort)
reads the register content of iPort
Definition: rio.hxx:102
void callRioWrite(int iPort, int iVal)
writes the register content of iPort
Definition: rio.hxx:109
Rio namespace.
Definition: rio.hxx:23
base class for something that does have a failed/good state.
Definition: failable.hxx:13
Failable with reason stack.
Definition: failable.hxx:95