API
 
Loading...
Searching...
No Matches
zaberUtils.hpp
Go to the documentation of this file.
1/** \file zaberUtils.hpp
2 * \brief utilties for working with zaber stages
3 *
4 * \ingroup zaberLowLevel_files
5 */
6
7#ifndef zaberUtils_hpp
8#define zaberUtils_hpp
9
10#include <algorithm>
11#include <cctype>
12#include <iostream>
13
14#define ZUTILS_E_NOAT ( -100 )
15#define ZUTILS_E_NOSP ( -101 )
16#define ZUTILS_E_BADADD ( -102 )
17#define ZUTILS_E_SERIALSIZE ( -103 )
18#define ZUTILS_E_BADSERIAL ( -104 )
19
20namespace MagAOX
21{
22namespace app
23{
24
25/// Parse the system.serial query
26/**
27 * \returns 0 on success
28 * \returns <0 on error with error code primarily meant for unit testing
29 *
30 * \ingroup zaberLowLevel
31 */
32int parseSystemSerial( std::vector<int> &address, std::vector<std::string> &serial, const std::string &response )
33{
34 size_t at = response.find( '@', 0 );
35
36 if( at == std::string::npos )
37 {
38 return ZUTILS_E_NOAT;
39 }
40
41 while( at != std::string::npos )
42 {
43 size_t sp = response.find( ' ', at );
44
45 if( sp == std::string::npos )
46 {
47 return ZUTILS_E_NOSP;
48 }
49
50 if( sp - at != 3 ) // Address should be 2 characters
51 {
52 return ZUTILS_E_BADADD;
53 }
54
55 int add = std::stoi( response.substr( at + 1, sp - at - 1 ) );
56
57 address.push_back( add );
58
59 at = response.find( '@', at + 1 );
60
61 sp = response.rfind( ' ', at );
62 size_t ed = response.find_first_of( "\n@", sp );
63 if( ed == std::string::npos )
64 ed = response.size();
65
66 if( ed - sp - 1 > 6 )
67 {
69 }
70
71 std::string ser = response.substr( sp + 1, ed - sp - 1 );
72
73 if( ser.size() == 0 ||
74 !std::all_of( ser.begin(), ser.end(), []( unsigned char c ) { return std::isdigit( c ) != 0; } ) )
75 {
76 return ZUTILS_E_BADSERIAL;
77 }
78
79 serial.push_back( ser );
80 }
81
82 return 0;
83}
84
85} // namespace app
86} // namespace MagAOX
87
88#endif // zaberUtils_hpp
int parseSystemSerial(std::vector< int > &address, std::vector< std::string > &serial, const std::string &response)
Parse the system.serial query.
Definition dm.hpp:19
#define ZUTILS_E_NOSP
#define ZUTILS_E_NOAT
#define ZUTILS_E_SERIALSIZE
#define ZUTILS_E_BADSERIAL
#define ZUTILS_E_BADADD