The VisAO Camera
libvisaocpp.cpp
Go to the documentation of this file.
1 /************************************************************
2 * libvisaocpp.cpp
3 *
4 * Author: Jared R. Males (jrmales@as.arizona.edu)
5 *
6 * VisAO software utilitites, definitions (c++)
7 *
8 ************************************************************/
9 
10 /** \file libvisaocpp.cpp
11  * \author Jared R. Males
12  * \brief VisAO software utilitites, definitions (c++)
13  *
14 */
15 
16 #include "libvisao.h"
17 
18 int visao_mdstat(char dstat[SYS_N_LOGDRV])
19 {
20  std::ifstream fin;
21  char mdstat[1024];
22 
23  fin.open("/proc/mdstat");
24 
25  if(!fin.good())
26  {
27  for(int i=0;i<4;i++) dstat[i] = '?';
28  return -1;
29  }
30 
31  fin.read(mdstat, 1024);
32 
33  mdstat[fin.gcount()] = 0;
34 
35  fin.close();
36 
37  std::string mdstr = mdstat;
38 
39  int pos = mdstr.find("] [");
40 
41  if(pos < 0)
42  {
43  for(int i=0;i<SYS_N_LOGDRV;i++) dstat[i] = '?';
44  return -1;
45  }
46 
47  pos = mdstr.find("] [", pos+3);
48  if(pos < 0)
49  {
50  for(int i=0;i<SYS_N_LOGDRV;i++) dstat[i] = '?';
51  return -1;
52  }
53 
54  dstat[0] = mdstr[pos+3];
55  dstat[1] = mdstr[pos+4];
56 
57  dstat[2] = '?'; //status of raid0 swap is not checked.
58  dstat[3] = '?';
59  pos = mdstr.find("] [", pos+3);
60  if(pos < 0)
61  {
62  for(int i=0;i<SYS_N_LOGDRV;i++) dstat[i] = '?';
63  return -1;
64  }
65 
66  dstat[4] = mdstr[pos+3];
67  dstat[5] = mdstr[pos+4];
68 
69  return 0;
70 }
71 
72 int save_preset(std::string calname, double fw1pos, int wollstat, double fw2pos, double fw3pos, std::vector<double> *vec)
73 {
74  std::ofstream fout;
75  std::ostringstream fname;
76 
77  if(wollstat == 0)
78  {
79  std::cerr << "Wollaston intermediate.\n";
80  return -1;
81  }
82  if(wollstat < 0) wollstat = 0;
83 
84  fname << getenv("VISAO_ROOT") << "/calib/visao/" << calname << "/presets/";
85  fname << (int)(fw1pos + .5) << wollstat << (int)(fw2pos + .5) << (int)(fw3pos + .5) << ".preset";
86 
87  std::cout << fname.str() << "\n";
88 
89  fout.open(fname.str().c_str(), std::ofstream::trunc);
90 
91  if(!fout.good())
92  {
93  std::cerr << "Preset " << fname.str() << " can't be created.\n";
94  return -1;
95  }
96 
97  for(unsigned int i=0;i<vec->size();i++)
98  {
99  fout << (*vec)[i];
100  fout << " ";
101  }
102  fout << "\n";
103 
104  fout.close();
105 
106  return 0;
107 }
108 
109 int get_focuscal(double * fcal)
110 {
111  std::string presetf;
112 
113  std::ifstream fin;
114  std::ostringstream fname;
115 
116 
117  fname << getenv("VISAO_ROOT") << "/calib/visao/focus/";
118  fname << "focus.cal";
119 
120  presetf = fname.str();
121  //std::cout << fname.str() << "\n";
122 
123  fin.open(fname.str().c_str());
124 
125  if(!fin.good())
126  {
127  std::cerr << "Preset " << fname.str() << " not found.\n";
128  return -1;
129  }
130 
131  fin >> (*fcal);
132 
133  fin.close();
134 
135 
136  return 0;
137 }
138 
139 int get_preset(std::string calname, double fw1pos, int wollstat, double fw2pos, double fw3pos, std::vector<double> *vec, std::string & presetf)
140 {
141 
142  std::ifstream fin;
143  std::ostringstream fname;
144 
145  if(wollstat == 0)
146  {
147  std::cerr << "Wollaston intermediate.\n";
148  return -1;
149  }
150  if(wollstat < 0) wollstat = 0;
151 
152  fname << getenv("VISAO_ROOT") << "/calib/visao/" << calname << "/presets/";
153  fname << (int)(fw1pos + .5) << wollstat << (int)(fw2pos + .5) << (int)(fw3pos + .5) << ".preset";
154 
155  presetf = fname.str();
156  //std::cout << fname.str() << "\n";
157 
158  fin.open(fname.str().c_str());
159 
160  if(!fin.good())
161  {
162  std::cerr << "Preset " << fname.str() << " not found.\n";
163  return -1;
164  }
165 
166  for(unsigned int i=0;i<vec->size();i++)
167  {
168  fin >> (*vec)[i];
169  }
170 
171  fin.close();
172 
173 
174  return 0;
175 }
176 
VisAO software utilitites, declarations.
#define SYS_N_LOGDRV
Number of logical drives in the system.
Definition: libvisao.h:54