35 #include <libphidget22/phidget22.h>
43 int32_t serial_number,
int hub_port,
bool is_hub_port_device,
44 std::function<
void(
const double[3],
double)> data_handler)
45 : data_handler_(data_handler)
47 PhidgetReturnCode ret = PhidgetMagnetometer_create(&
mag_handle_);
48 if (ret != EPHIDGET_OK)
54 serial_number, hub_port, is_hub_port_device,
57 ret = PhidgetMagnetometer_setOnMagneticFieldChangeHandler(
59 if (ret != EPHIDGET_OK)
61 throw Phidget22Error(
"Failed to set change handler for Magnetometer",
68 PhidgetHandle handle =
reinterpret_cast<PhidgetHandle
>(
mag_handle_);
73 double cc_mag_field,
double cc_offset0,
double cc_offset1,
74 double cc_offset2,
double cc_gain0,
double cc_gain1,
double cc_gain2,
75 double cc_T0,
double cc_T1,
double cc_T2,
double cc_T3,
double cc_T4,
78 PhidgetReturnCode ret = PhidgetMagnetometer_setCorrectionParameters(
79 mag_handle_, cc_mag_field, cc_offset0, cc_offset1, cc_offset2, cc_gain0,
80 cc_gain1, cc_gain2, cc_T0, cc_T1, cc_T2, cc_T3, cc_T4, cc_T5);
81 if (ret != EPHIDGET_OK)
83 throw Phidget22Error(
"Failed to set magnetometer correction parameters",
89 double ×tamp)
const
92 PhidgetReturnCode ret =
93 PhidgetMagnetometer_getMagneticField(
mag_handle_, &mag_field);
94 if (ret != EPHIDGET_OK)
104 ret = PhidgetMagnetometer_getTimestamp(
mag_handle_, &ts);
105 if (ret != EPHIDGET_OK)
107 throw Phidget22Error(
"Failed to get magnetic field timestamp", ret);
115 PhidgetReturnCode ret =
116 PhidgetMagnetometer_setDataInterval(
mag_handle_, interval_ms);
117 if (ret != EPHIDGET_OK)
124 double timestamp)
const
130 void *ctx,
const double magnetic_field[3],
133 ((
Magnetometer *)ctx)->dataHandler(magnetic_field, timestamp);