-
Notifications
You must be signed in to change notification settings - Fork 110
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #610 from analogdevicesinc/adis16550_add_support
Add support for adis16550 and adis16550w
Showing
9 changed files
with
782 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
adis16550 | ||
==================== | ||
|
||
.. autoclass:: adi.adis16550 | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
:inherited-members: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# Copyright (C) 2024 Analog Devices, Inc. | ||
# | ||
# SPDX short identifier: ADIBSD | ||
import sys | ||
|
||
import adi | ||
import matplotlib.pyplot as plt | ||
|
||
# Set up ADIS16550 | ||
my_dev_name = sys.argv[1] | ||
my_uri = sys.argv[2] | ||
|
||
dev = adi.adis16550(device_name=my_dev_name, uri=my_uri) | ||
|
||
dev.rx_output_type = "raw" | ||
dev.rx_enabled_channels = [0, 1, 2, 3, 4, 5] | ||
# dev.rx_enabled_delta_channels = [7, 8, 9, 10, 11, 12] | ||
dev.sample_rate = 10 | ||
dev.rx_buffer_size = 10 | ||
|
||
print("\nX acceleration: " + str(dev.accel_x_conv) + " m/s^2") | ||
print("Y acceleration: " + str(dev.accel_y_conv) + " m/s^2") | ||
print("Z acceleration: " + str(dev.accel_z_conv) + " m/s^2") | ||
|
||
print("\nX angular velocity: " + str(dev.anglvel_x_conv) + " rad/s") | ||
print("Y angular velocity: " + str(dev.anglvel_y_conv) + " rad/s") | ||
print("Z angular velocity: " + str(dev.anglvel_z_conv) + " rad/s") | ||
|
||
print("\nX delta velocity: " + str(dev.deltavelocity_x_conv) + " m/s") | ||
print("Y delta velocity: " + str(dev.deltavelocity_y_conv) + " m/s") | ||
print("Z delta velocity: " + str(dev.deltavelocity_z_conv) + " m/s") | ||
|
||
print("\nX delta angle: " + str(dev.deltaangl_x_conv) + " rad") | ||
print("Y delta angle: " + str(dev.deltaangl_y_conv) + " rad") | ||
print("Z delta angle: " + str(dev.deltaangl_z_conv) + " rad") | ||
|
||
dev.sample_rate = 2000 | ||
dev.magn_x_filter_low_pass_3db_frequency = 100 | ||
dev.anglvel_y_calibscale = 30 | ||
dev.anglvel_x_calibbias = 100 | ||
|
||
print("\nSampling frequency: " + str(dev.sample_rate)) | ||
|
||
print("Temperature raw value: " + str(dev.temp.raw)) | ||
print("Temperature scale value: " + str(dev.temp.scale)) | ||
print("Temperature offset value: " + str(dev.temp.offset)) | ||
|
||
print("X-axis gyro channel calibbias value: " + str(dev.anglvel_x_calibbias)) | ||
print("X-axis gyro channel calibscale value: " + str(dev.anglvel_y_calibscale)) | ||
print("X-axis magnetometer bandwidth: " + str(dev.magn_x_filter_low_pass_3db_frequency)) | ||
|
||
for _ in range(100): | ||
data = dev.rx() | ||
plt.clf() | ||
for i, d in enumerate(data): | ||
plt.plot(d, label=dev._rx_channel_names[dev.rx_enabled_channels[i]]) | ||
plt.legend() | ||
plt.show(block=False) | ||
plt.pause(0.1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -143,6 +143,8 @@ | |
- ADIS16507 | ||
- ADIS16545 | ||
- ADIS16547 | ||
- ADIS16550 | ||
- ADIS16550W | ||
- ADL5240 | ||
- ADL5960 | ||
- ADMV8818 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE context [ | ||
<!ELEMENT context (device|context-attribute)*> | ||
<!ELEMENT context-attribute EMPTY> | ||
<!ELEMENT device (channel|attribute|debug-attribute|buffer-attribute)*> | ||
<!ELEMENT channel (scan-element?,attribute*)> | ||
<!ELEMENT attribute EMPTY> | ||
<!ELEMENT scan-element EMPTY> | ||
<!ELEMENT debug-attribute EMPTY> | ||
<!ELEMENT buffer-attribute EMPTY> | ||
<!ATTLIST context name CDATA #REQUIRED> | ||
<!ATTLIST context description CDATA #IMPLIED> | ||
<!ATTLIST context-attribute name CDATA #REQUIRED> | ||
<!ATTLIST context-attribute value CDATA #REQUIRED> | ||
<!ATTLIST device id CDATA #REQUIRED> | ||
<!ATTLIST device name CDATA #IMPLIED> | ||
<!ATTLIST channel id CDATA #REQUIRED> | ||
<!ATTLIST channel type (input|output) #REQUIRED> | ||
<!ATTLIST channel name CDATA #IMPLIED> | ||
<!ATTLIST scan-element index CDATA #REQUIRED> | ||
<!ATTLIST scan-element format CDATA #REQUIRED> | ||
<!ATTLIST scan-element scale CDATA #IMPLIED> | ||
<!ATTLIST attribute name CDATA #REQUIRED> | ||
<!ATTLIST attribute filename CDATA #IMPLIED> | ||
<!ATTLIST attribute value CDATA #IMPLIED> | ||
<!ATTLIST debug-attribute name CDATA #REQUIRED> | ||
<!ATTLIST debug-attribute value CDATA #IMPLIED> | ||
<!ATTLIST buffer-attribute name CDATA #REQUIRED> | ||
<!ATTLIST buffer-attribute value CDATA #IMPLIED> | ||
]> | ||
<context name="network" description="10.42.0.83 Linux analog 6.1.54-v7l+ #8 SMP Mon Sep 30 11:56:09 BST 2024 armv7l"> | ||
<context-attribute name="hw_carrier" value="Raspberry Pi 4 Model B Rev 1.2" /> | ||
<context-attribute name="dtoverlay" value="vc4-kms-v3d,adis16550" /> | ||
<context-attribute name="local,kernel" value="6.1.54-v7l+" /> | ||
<context-attribute name="uri" value="ip:10.42.0.83" /> | ||
<context-attribute name="ip,ip-addr" value="10.42.0.83" /> | ||
<device id="hwmon0" name="cpu_thermal"> | ||
<channel id="temp1" type="input"> | ||
<attribute name="crit" filename="temp1_crit" value="110000" /> | ||
<attribute name="input" filename="temp1_input" value="65731" /> | ||
</channel> | ||
</device> | ||
<device id="hwmon1" name="rpi_volt"> | ||
<channel id="in0" type="input"> | ||
<attribute name="lcrit_alarm" filename="in0_lcrit_alarm" value="0" /> | ||
</channel> | ||
</device> | ||
<device id="iio:device0" name="adis16550"> | ||
<channel id="anglvel_x" type="input"> | ||
<scan-element index="0" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_anglvel_x_calibbias" value="100" /> | ||
<attribute name="calibscale" filename="in_anglvel_x_calibscale" value="0" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_anglvel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_anglvel_x_raw" value="294318" /> | ||
<attribute name="scale" filename="in_anglvel_scale" value="0.000000003" /> | ||
</channel> | ||
<channel id="anglvel_y" type="input"> | ||
<scan-element index="1" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_anglvel_y_calibbias" value="0" /> | ||
<attribute name="calibscale" filename="in_anglvel_y_calibscale" value="30" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_anglvel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_anglvel_y_raw" value="-656865" /> | ||
<attribute name="scale" filename="in_anglvel_scale" value="0.000000003" /> | ||
</channel> | ||
<channel id="anglvel_z" type="input"> | ||
<scan-element index="2" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_anglvel_z_calibbias" value="0" /> | ||
<attribute name="calibscale" filename="in_anglvel_z_calibscale" value="0" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_anglvel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_anglvel_z_raw" value="431669" /> | ||
<attribute name="scale" filename="in_anglvel_scale" value="0.000000003" /> | ||
</channel> | ||
<channel id="accel_x" type="input"> | ||
<scan-element index="3" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_accel_x_calibbias" value="0" /> | ||
<attribute name="calibscale" filename="in_accel_x_calibscale" value="0" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_accel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_accel_x_raw" value="-210881" /> | ||
<attribute name="scale" filename="in_accel_scale" value="0.000000095" /> | ||
</channel> | ||
<channel id="accel_y" type="input"> | ||
<scan-element index="4" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_accel_y_calibbias" value="0" /> | ||
<attribute name="calibscale" filename="in_accel_y_calibscale" value="0" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_accel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_accel_y_raw" value="1598455" /> | ||
<attribute name="scale" filename="in_accel_scale" value="0.000000095" /> | ||
</channel> | ||
<channel id="accel_z" type="input"> | ||
<scan-element index="5" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="calibbias" filename="in_accel_z_calibbias" value="0" /> | ||
<attribute name="calibscale" filename="in_accel_z_calibscale" value="0" /> | ||
<attribute name="filter_low_pass_3db_frequency" filename="in_accel_filter_low_pass_3db_frequency" value="0" /> | ||
<attribute name="raw" filename="in_accel_z_raw" value="103145573" /> | ||
<attribute name="scale" filename="in_accel_scale" value="0.000000095" /> | ||
</channel> | ||
<channel id="temp0" type="input"> | ||
<scan-element index="6" format="be:s16/32>>0" scale="4.000000" /> | ||
<attribute name="offset" filename="in_temp0_offset" value="6250" /> | ||
<attribute name="raw" filename="in_temp0_raw" value="4369" /> | ||
<attribute name="scale" filename="in_temp0_scale" value="4" /> | ||
</channel> | ||
<channel id="deltaangl_x" type="input"> | ||
<scan-element index="7" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltaangl_x_raw" value="-86" /> | ||
<attribute name="scale" filename="in_deltaangl_scale" value="0.000000006" /> | ||
</channel> | ||
<channel id="deltaangl_y" type="input"> | ||
<scan-element index="8" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltaangl_y_raw" value="-162" /> | ||
<attribute name="scale" filename="in_deltaangl_scale" value="0.000000006" /> | ||
</channel> | ||
<channel id="deltaangl_z" type="input"> | ||
<scan-element index="9" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltaangl_z_raw" value="169" /> | ||
<attribute name="scale" filename="in_deltaangl_scale" value="0.000000006" /> | ||
</channel> | ||
<channel id="deltavelocity_x" type="input"> | ||
<scan-element index="10" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltavelocity_x_raw" value="246" /> | ||
<attribute name="scale" filename="in_deltavelocity_scale" value="0.000000058" /> | ||
</channel> | ||
<channel id="deltavelocity_y" type="input"> | ||
<scan-element index="11" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltavelocity_y_raw" value="-75" /> | ||
<attribute name="scale" filename="in_deltavelocity_scale" value="0.000000058" /> | ||
</channel> | ||
<channel id="deltavelocity_z" type="input"> | ||
<scan-element index="12" format="be:S32/32>>0" scale="0.000000" /> | ||
<attribute name="raw" filename="in_deltavelocity_z_raw" value="84684" /> | ||
<attribute name="scale" filename="in_deltavelocity_scale" value="0.000000058" /> | ||
</channel> | ||
<channel id="timestamp" type="input"> | ||
<scan-element index="13" format="le:S64/64>>0" /> | ||
</channel> | ||
<attribute name="current_timestamp_clock" value="realtime " /> | ||
<attribute name="sampling_frequency" value="2000.000000" /> | ||
<attribute name="waiting_for_supplier" value="0" /> | ||
<buffer-attribute name="data_available" value="64" /> | ||
<buffer-attribute name="direction" value="in" /> | ||
<debug-attribute name="flash_count" value="13" /> | ||
<debug-attribute name="firmware_date" value="28-04-2021" /> | ||
<debug-attribute name="firmware_revision" value="1.5" /> | ||
<debug-attribute name="product_id" value="16550" /> | ||
<debug-attribute name="serial_number" value="0x000000b6" /> | ||
<debug-attribute name="direct_reg_access" value="0x0" /> | ||
</device> | ||
<device id="trigger0" name="adis16550-dev0" /> | ||
</context> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import iio | ||
|
||
import adi | ||
import pytest | ||
|
||
hardware = "adis16550" | ||
classname = "adi.adis16550" | ||
device_name = "adis16550" | ||
|
||
|
||
def do_mock(): | ||
def mock_set_trigger(self, value): | ||
pass | ||
|
||
# Mock the _set_trigger method in iio.Device | ||
iio.Device._set_trigger = mock_set_trigger | ||
|
||
|
||
######################################### | ||
@pytest.mark.iio_hardware(hardware, False) | ||
def test_adis16550_conv_data(iio_uri): | ||
do_mock() | ||
adis16550 = adi.adis16550(uri=iio_uri) | ||
|
||
assert adis16550.accel_x_conv != 0.0 | ||
assert adis16550.accel_y_conv != 0.0 | ||
assert adis16550.accel_z_conv != 0.0 | ||
assert adis16550.anglvel_x_conv != 0.0 | ||
assert adis16550.anglvel_y_conv != 0.0 | ||
assert adis16550.anglvel_z_conv != 0.0 | ||
assert adis16550.temp_conv != 0.0 | ||
|
||
|
||
######################################### | ||
@pytest.mark.iio_hardware(hardware, True) | ||
@pytest.mark.parametrize("classname", [(classname)]) | ||
@pytest.mark.parametrize( | ||
"attr, start, stop, step, tol", | ||
[ | ||
("anglvel_x_calibbias", -2147483648, 2147483647, 1, 0), | ||
("anglvel_y_calibbias", -2147483648, 2147483647, 1, 0), | ||
("anglvel_z_calibbias", -2147483648, 2147483647, 1, 0), | ||
("accel_x_calibbias", -2147483648, 2147483647, 1, 0), | ||
("accel_y_calibbias", -2147483648, 2147483647, 1, 0), | ||
("accel_z_calibbias", -2147483648, 2147483647, 1, 0), | ||
("anglvel_x_calibscale", 0, 65535, 1, 0), | ||
("anglvel_y_calibscale", 0, 65535, 1, 0), | ||
("anglvel_z_calibscale", 0, 65535, 1, 0), | ||
("accel_x_calibscale", 0, 65535, 1, 0), | ||
("accel_y_calibscale", 0, 65535, 1, 0), | ||
("accel_z_calibscale", 0, 65535, 1, 0), | ||
], | ||
) | ||
def test_adis16550_attr( | ||
test_attribute_single_value, iio_uri, classname, attr, start, stop, step, tol | ||
): | ||
do_mock() | ||
test_attribute_single_value(iio_uri, classname, attr, start, stop, step, tol) | ||
|
||
|
||
######################################### | ||
@pytest.mark.iio_hardware(hardware, True) | ||
@pytest.mark.parametrize("classname", [(classname)]) | ||
@pytest.mark.parametrize( | ||
"attr, values, tol, repeats", | ||
[ | ||
("sample_rate", [5, 10, 246, 1230, 2460], 0.5, 2), | ||
("anglvel_x_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
("anglvel_y_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
("anglvel_z_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
("accel_x_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
("accel_y_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
("accel_z_filter_low_pass_3db_frequency", [0, 55, 275, 310], 0.5, 2), | ||
], | ||
) | ||
def test_adis16550_attr_multiple_val( | ||
test_attribute_multiple_values, iio_uri, classname, attr, values, tol, repeats, | ||
): | ||
do_mock() | ||
test_attribute_multiple_values(iio_uri, classname, attr, values, tol, repeats) |