-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathSensor.cpp
More file actions
102 lines (87 loc) · 2.78 KB
/
Copy pathSensor.cpp
File metadata and controls
102 lines (87 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "SoapySidekiq.hpp"
std::vector<std::string> SoapySidekiq::listSensors(void) const
{
std::vector<std::string> sensors;
SoapySDR_logf(SOAPY_SDR_TRACE, "listSensors");
sensors.push_back("temperature");
sensors.push_back("accelerometer");
return sensors;
}
std::string SoapySidekiq::readSensor(const std::string &key) const
{
int status = 0;
SoapySDR_logf(SOAPY_SDR_TRACE, "readSensor");
if (key.compare("temperature") == 0)
{
int8_t temp = 0;
status = skiq_read_temp(card, &temp);
if (status != 0)
{
SoapySDR_logf(SOAPY_SDR_ERROR,
"Failure: skiq_read_temp (card %i), status %d", card,
status);
}
else
{
SoapySDR_logf(SOAPY_SDR_DEBUG, "Temp is %d", temp);
}
return std::to_string(temp);
}
bool supported = false;
if (key.compare("accelerometer") == 0)
{
status = skiq_is_accel_supported(card, &supported);
if (status != 0)
{
SoapySDR_logf(
SOAPY_SDR_ERROR,
"Failure: skiq-is_accel_supported (card %u), status %d", card,
status);
}
if (!supported)
{
SoapySDR_logf(SOAPY_SDR_WARNING,
"Accelerometer not supported by card %u, status %d",
card, status);
return "{}";
}
/* enable accel for the card */
status = skiq_write_accel_state(card, 1);
if (status != 0)
{
SoapySDR_logf(
SOAPY_SDR_ERROR,
"Failure: skiq_write_accel_state (card %i), status %d", card,
status);
return "{}";
}
int16_t x_data = 0;
int16_t y_data = 0;
int16_t z_data = 0;
status = skiq_read_accel(card, &x_data, &y_data, &z_data);
if (status != 0)
{
SoapySDR_logf(SOAPY_SDR_ERROR,
"Failure: skiq_read_accel (card %i), status %d", card,
status);
return "{}";
}
/* disable accel */
status = skiq_write_accel_state(card, 0);
if (status != 0)
{
SoapySDR_logf(
SOAPY_SDR_ERROR,
"Failure: skiq_write_accel_state (card %i), status %d", card,
status);
return "{}";
};
std::stringstream ss;
ss << "{\"x\":" << x_data << " \"y\":" << y_data << " \"z\":" << z_data
<< "}";
SoapySDR_logf(SOAPY_SDR_DEBUG, "accel data %s", (ss.str().c_str()));
return ss.str();
}
SoapySDR_log(SOAPY_SDR_DEBUG, "sensor didn't match");
return SoapySDR::Device::readSensor(key);
}