@@ -109,12 +109,12 @@ const uint32_t ADMTController::getHarmonicRegister(HarmonicRegister registerID)
109
109
return UINT32_MAX;
110
110
}
111
111
112
- const uint32_t ADMTController::getHarmonicPage (HarmonicRegister registerID)
112
+ const uint8_t ADMTController::getHarmonicPage (HarmonicRegister registerID)
113
113
{
114
114
if (registerID >= 0 && registerID < HARMONIC_REGISTER_COUNT) {
115
115
return HarmonicPages[registerID];
116
116
}
117
- return UINT32_MAX ;
117
+ return UINT8_MAX ;
118
118
}
119
119
120
120
const uint32_t ADMTController::getConfigurationRegister (ConfigurationRegister registerID)
@@ -125,12 +125,12 @@ const uint32_t ADMTController::getConfigurationRegister(ConfigurationRegister re
125
125
return UINT32_MAX;
126
126
}
127
127
128
- const uint32_t ADMTController::getConfigurationPage (ConfigurationRegister registerID)
128
+ const uint8_t ADMTController::getConfigurationPage (ConfigurationRegister registerID)
129
129
{
130
130
if (registerID >= 0 && registerID < CONFIGURATION_REGISTER_COUNT) {
131
131
return ConfigurationPages[registerID];
132
132
}
133
- return UINT32_MAX ;
133
+ return UINT8_MAX ;
134
134
}
135
135
136
136
const uint32_t ADMTController::getSensorRegister (SensorRegister registerID)
@@ -141,12 +141,12 @@ const uint32_t ADMTController::getSensorRegister(SensorRegister registerID)
141
141
return UINT32_MAX;
142
142
}
143
143
144
- const uint32_t ADMTController::getSensorPage (SensorRegister registerID)
144
+ const uint8_t ADMTController::getSensorPage (SensorRegister registerID)
145
145
{
146
146
if (registerID >= 0 && registerID < SENSOR_REGISTER_COUNT) {
147
147
return SensorPages[registerID];
148
148
}
149
- return UINT32_MAX ;
149
+ return UINT8_MAX ;
150
150
}
151
151
152
152
const uint32_t ADMTController::getUniqueIdRegister (UniqueIDRegister registerID)
@@ -157,12 +157,12 @@ const uint32_t ADMTController::getUniqueIdRegister(UniqueIDRegister registerID)
157
157
return UINT32_MAX;
158
158
}
159
159
160
- const uint32_t ADMTController::getUniqueIdPage (UniqueIDRegister registerID)
160
+ const uint8_t ADMTController::getUniqueIdPage (UniqueIDRegister registerID)
161
161
{
162
162
if (registerID >= 0 && registerID < UNIQID_REGISTER_COUNT) {
163
163
return UniqueIdPages[registerID];
164
164
}
165
- return UINT32_MAX ;
165
+ return UINT8_MAX ;
166
166
}
167
167
168
168
const uint32_t
@@ -203,21 +203,21 @@ int ADMTController::getChannelIndex(const char *deviceName, const char *channelN
203
203
double ADMTController::getChannelValue (const char *deviceName, const char *channelName, int bufferSize)
204
204
{
205
205
if (!m_iioCtx) {
206
- return static_cast < double >(UINT64_MAX) ;
206
+ return UINT32_MAX ;
207
207
} // return QString("No context available.");
208
208
double value;
209
209
210
210
int deviceCount = iio_context_get_devices_count (m_iioCtx);
211
211
if (deviceCount < 1 )
212
- return static_cast < double >(UINT64_MAX) ; // return QString("No devices found");
212
+ return UINT32_MAX ; // return QString("No devices found");
213
213
214
214
iio_device *admtDevice = iio_context_find_device (m_iioCtx, deviceName);
215
215
if (admtDevice == NULL )
216
- return static_cast < double >(UINT64_MAX) ; // return QString("No ADMT4000 device");
216
+ return UINT32_MAX ; // return QString("No ADMT4000 device");
217
217
218
218
int channelCount = iio_device_get_channels_count (admtDevice);
219
219
if (channelCount < 1 )
220
- return static_cast < double >(UINT64_MAX) ; // return QString("No channels found.");
220
+ return UINT32_MAX ; // return QString("No channels found.");
221
221
222
222
iio_channel *channel;
223
223
std::string message = " " ;
@@ -233,7 +233,7 @@ double ADMTController::getChannelValue(const char *deviceName, const char *chann
233
233
}
234
234
}
235
235
if (channel == NULL )
236
- return static_cast < double >(UINT64_MAX) ; // return QString("Channel not found.");
236
+ return UINT32_MAX ; // return QString("Channel not found.");
237
237
iio_channel_enable (channel);
238
238
239
239
double scale = 1.0 ;
@@ -242,16 +242,16 @@ double ADMTController::getChannelValue(const char *deviceName, const char *chann
242
242
const char *offsetAttrName = " offset" ;
243
243
const char *scaleAttr = iio_channel_find_attr (channel, scaleAttrName);
244
244
if (scaleAttr == NULL )
245
- return static_cast < double >(UINT64_MAX) ; // return QString("No scale attribute");
245
+ return UINT32_MAX ; // return QString("No scale attribute");
246
246
const char *offsetAttr = iio_channel_find_attr (channel, offsetAttrName);
247
247
if (offsetAttr == NULL )
248
- return static_cast < double >(UINT64_MAX) ; // return QString("No offset attribute");
248
+ return UINT32_MAX ; // return QString("No offset attribute");
249
249
250
250
double *scaleVal = new double (1 );
251
251
int scaleRet = iio_channel_attr_read_double (channel, scaleAttr, scaleVal);
252
252
if (scaleRet != 0 ) {
253
253
delete scaleVal;
254
- return static_cast < double >(UINT64_MAX) ; // return QString("Cannot read scale attribute");
254
+ return UINT32_MAX ; // return QString("Cannot read scale attribute");
255
255
}
256
256
scale = *scaleVal;
257
257
delete scaleVal;
@@ -263,7 +263,7 @@ double ADMTController::getChannelValue(const char *deviceName, const char *chann
263
263
264
264
iio_buffer *iioBuffer = iio_device_create_buffer (admtDevice, bufferSize, false );
265
265
if (iioBuffer == NULL )
266
- return static_cast < double >(UINT64_MAX) ; // return QString("Cannot create buffer.");
266
+ return UINT32_MAX ; // return QString("Cannot create buffer.");
267
267
268
268
ssize_t numBytesRead;
269
269
int8_t *pointerData, *pointerEnd;
@@ -272,7 +272,7 @@ double ADMTController::getChannelValue(const char *deviceName, const char *chann
272
272
273
273
numBytesRead = iio_buffer_refill (iioBuffer);
274
274
if (numBytesRead < 0 )
275
- return static_cast < double >(UINT64_MAX) ; // return QString("Cannot refill buffer.");
275
+ return UINT32_MAX ; // return QString("Cannot refill buffer.");
276
276
277
277
const struct iio_data_format *format = iio_channel_get_data_format (channel);
278
278
const struct iio_data_format channelFormat = *format;
@@ -1228,6 +1228,40 @@ int ADMTController::getAbsAngleTurnCount(uint16_t registerValue)
1228
1228
}
1229
1229
}
1230
1230
1231
+ double ADMTController::getAbsAngle (uint16_t registerValue)
1232
+ {
1233
+ double scale = 0.351562500 ;
1234
+
1235
+ int turnCount = getAbsAngleTurnCount (registerValue);
1236
+
1237
+ double angle = static_cast <double >(registerValue & 0x03FF ) * scale;
1238
+ double absAngle = angle;
1239
+
1240
+ if (turnCount != 0 )
1241
+ absAngle += (turnCount * 360 );
1242
+
1243
+ return absAngle;
1244
+ }
1245
+
1246
+ double ADMTController::getAngle (uint16_t registerValue)
1247
+ {
1248
+ // Angle resolution: 360 deg / 4096
1249
+ double scale = 0.087890625 ;
1250
+
1251
+ // Bits 15:4: Magnetic Field Angle with 360 deg range.
1252
+ double angle = static_cast <double >(registerValue >> 4 ) * scale;
1253
+
1254
+ return angle;
1255
+ }
1256
+
1257
+ double ADMTController::getTemperature (uint16_t registerValue)
1258
+ {
1259
+ // Bits 15:4: Internal Temperature Sensor.
1260
+ double temperature = (static_cast <double >((registerValue >> 4 )) - 1168 ) / 15.66 ;
1261
+
1262
+ return temperature;
1263
+ }
1264
+
1231
1265
uint16_t ADMTController::setDIGIOENRegisterBitMapping (uint16_t currentRegisterValue, map<string, bool > settings)
1232
1266
{
1233
1267
uint16_t registerValue = currentRegisterValue; // Start with the current register value
@@ -1839,6 +1873,41 @@ void ADMTController::bufferedStreamIO(int totalSamples, int targetSampleRate)
1839
1873
delete[] offsetDst;
1840
1874
}
1841
1875
1876
+ void ADMTController::registryStream (int totalSamples, int targetSampleRate)
1877
+ {
1878
+ QVector<double > values;
1879
+ sampleCount = 0 ;
1880
+ double angle = 0 ;
1881
+ bool readSuccess = false ;
1882
+ uint32_t *registerValue = new uint32_t ;
1883
+
1884
+ while (!stopStream && sampleCount < totalSamples) {
1885
+ elapsedStreamTimer.start ();
1886
+
1887
+ qint64 elapsedNanoseconds = elapsedStreamTimer.nsecsElapsed ();
1888
+ while (elapsedNanoseconds < targetSampleRate) {
1889
+ if (readDeviceRegistry (getDeviceId (Device::ADMT4000), getSensorRegister (SensorRegister::ANGLE),
1890
+ registerValue) == 0 )
1891
+ break ;
1892
+ elapsedNanoseconds = elapsedStreamTimer.nsecsElapsed ();
1893
+ }
1894
+
1895
+ angle = getAngle (static_cast <uint16_t >(*registerValue));
1896
+
1897
+ values.append (angle);
1898
+ sampleCount++;
1899
+
1900
+ elapsedNanoseconds = elapsedStreamTimer.nsecsElapsed ();
1901
+ while (elapsedNanoseconds < targetSampleRate) {
1902
+ elapsedNanoseconds = elapsedStreamTimer.nsecsElapsed ();
1903
+ }
1904
+ }
1905
+
1906
+ delete registerValue;
1907
+
1908
+ Q_EMIT streamBufferedData (values);
1909
+ }
1910
+
1842
1911
void ADMTController::handleStreamBufferedData (const QVector<double > &value) { streamBufferedValues = value; }
1843
1912
1844
1913
bool ADMTController::checkVelocityReachedFlag (uint16_t registerValue)
@@ -1847,4 +1916,19 @@ bool ADMTController::checkVelocityReachedFlag(uint16_t registerValue)
1847
1916
// set while VACTUAL and VMAX match.
1848
1917
return ((registerValue >> 8 ) & 0x01 ) ? true : false ;
1849
1918
}
1919
+
1920
+ uint16_t ADMTController::changeCNVPage (uint16_t registerValue, uint8_t page)
1921
+ {
1922
+ return (registerValue & ~0x001F ) | (page & 0x1F );
1923
+ }
1924
+
1925
+ uint16_t ADMTController::convertStart (bool start, uint16_t registerValue)
1926
+ {
1927
+ registerValue &= ~(0b11 << 14 );
1928
+
1929
+ if (!start)
1930
+ registerValue |= (0b11 << 14 );
1931
+
1932
+ return registerValue;
1933
+ }
1850
1934
#include " moc_admtcontroller.cpp"
0 commit comments