78 const std::vector<double>& values) {
81 std::vector<const char*> cnames;
82 for (
const auto&
n : names)
83 cnames.push_back(
n.c_str());
84 int error_address = -1;
85 const int err = LJM_eWriteNames(
handle_,
static_cast<int>(cnames.size()), cnames.data(),
86 values.data(), &error_address);
88 warn(err,
"LJM_eWriteNames");
89 if (err != LJME_NOERROR && !is_warning(err)) {
91 std::string which =
"address " + std::to_string(error_address);
92 std::vector<int> addrs(names.size()), types(names.size());
93 if (LJM_NamesToAddresses(
static_cast<int>(cnames.size()), cnames.data(), addrs.data(),
94 types.data()) == LJME_NOERROR)
95 for (
size_t i = 0; i < names.size(); ++i)
96 if (addrs[i] == error_address)
98 throw T7Error(
"writing " + which +
": " + ljm_message(err), err);
103 std::vector<const char*> cnames;
104 for (
const auto&
n : names)
105 cnames.push_back(
n.c_str());
106 std::vector<double> values(names.size(), 0.0);
107 int error_address = -1;
108 check(LJM_eReadNames(
handle_,
static_cast<int>(cnames.size()), cnames.data(), values.data(),
110 "reading " + (names.empty() ? std::string() : names.front()) +
"...");
115 double scan_rate_hz) {
116 std::vector<const char*> cnames;
117 for (
const auto&
n : scan_names)
118 cnames.push_back(
n.c_str());
119 std::vector<int> addrs(scan_names.size()), types(scan_names.size());
120 check(LJM_NamesToAddresses(
static_cast<int>(cnames.size()), cnames.data(), addrs.data(),
122 "LJM_NamesToAddresses");
123 double rate = scan_rate_hz;
124 check(LJM_eStreamStart(
handle_, scans_per_read,
static_cast<int>(addrs.size()), addrs.data(),
double stream_start(const std::vector< std::string > &scan_names, int scans_per_read, double scan_rate_hz) override
Starts the stream; returns the scan rate the device will actually run at.