Skip to content

Commit

Permalink
Merge pull request #313 from adrimbarean/adpd2140_get_sensor
Browse files Browse the repository at this point in the history
Adpd2140 get sensor
  • Loading branch information
tfcollins authored Apr 5, 2022
2 parents 2088598 + 8c1d3b0 commit 9c60f19
Show file tree
Hide file tree
Showing 8 changed files with 582 additions and 0 deletions.
2 changes: 2 additions & 0 deletions adi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@

from adi.ad4630 import ad4630

from adi.adpd1080 import adpd1080

try:
from adi.jesd import jesd
except ImportError:
Expand Down
108 changes: 108 additions & 0 deletions adi/adpd1080.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Copyright (C) 2021 Analog Devices, Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# - Neither the name of Analog Devices, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
# - The use of this software may or may not infringe the patent rights
# of one or more patent holders. This license does not release you
# from the requirement that you obtain separate licenses from these
# patent holders to use this software.
# - Use of the software either in source or binary form, must be run
# on or directly connected to an Analog Devices Inc. component.
#
# THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED.
#
# IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY
# RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

from adi.attribute import attribute
from adi.context_manager import context_manager
from adi.rx_tx import rx


class adpd1080(rx, context_manager):
"""ADPD1080 photo-electronic device."""

channel = [] # type: ignore
_device_name = ""
_rx_data_type = ["<u4", "<u4", "<u4", "<u4", "<u4", "<u4", "<u4", "<u4"]

def __init__(self, uri="", device_index=0):
"""ADPD1080 class constructor."""
context_manager.__init__(self, uri, self._device_name)

compatible_parts = ["adpd1080"]

self._ctrl = None
index = 0

# Selecting the device_index-th device from the adpd188 family as working device.
for device in self._ctx.devices:
if device.name in compatible_parts:
if index == device_index:
self._ctrl = device
self._rxadc = device
break
else:
index += 1

# dynamically get channels and sorting them after the color
# self._ctrl.channels.sort(key=lambda x: str(x.id[14:]))

for ch in self._ctrl._channels:
name = ch._id
self._rx_channel_names.append(name)
self.channel.append(self._channel(self._ctrl, name))
rx.__init__(self)
self.rx_buffer_size = 16

def rx(self):
buff = super().rx()
del self._rx__rxbuf
return buff

@property
def sample_rate(self):
"""Sets sampling frequency of the ADPD1080."""
return self._get_iio_dev_attr_str("sampling_frequency", self._rxadc)

@sample_rate.setter
def sample_rate(self, value):
self._set_iio_dev_attr_str("sampling_frequency", value, self._rxadc)

class _channel(attribute):
"""ADPD1080 channel."""

def __init__(self, ctrl, channel_name):
self.name = channel_name
self._ctrl = ctrl

@property
def raw(self):
"""ADPD1080 channel raw value."""
return self._get_iio_attr(self.name, "raw", False)

@property
def offset(self):
"""ADPD1080 channel offset."""
return self._get_iio_attr(self.name, "offset", False)

@offset.setter
def offset(self, value):
self._set_iio_attr(self.name, "offset", False, value)
7 changes: 7 additions & 0 deletions doc/source/devices/adi.adpd1080.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
adpd1080
==================

.. automodule:: adi.adpd1080
:members:
:undoc-members:
:show-inheritance:
1 change: 1 addition & 0 deletions doc/source/devices/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ Supported Devices
adi.adl5960
adi.admv8818
adi.adpd188
adi.adpd1080
adi.adpd410x
adi.adrf5720
adi.adrv9002
Expand Down
44 changes: 44 additions & 0 deletions examples/adpd1080.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Copyright (C) 2021 Analog Devices, Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# - Neither the name of Analog Devices, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
# - The use of this software may or may not infringe the patent rights
# of one or more patent holders. This license does not release you
# from the requirement that you obtain separate licenses from these
# patent holders to use this software.
# - Use of the software either in source or binary form, must be run
# on or directly connected to an Analog Devices Inc. component.
#
# THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED.
#
# IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY
# RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import adi

# Set up ADPD1080
adpd1080 = adi.adpd1080(uri="serial:COM23")
adpd1080.rx_buffer_size = 40
# adpd1080.sample_rate = 10

data = adpd1080.rx()

print(data)
print(adpd1080._rx_channel_names)
Loading

0 comments on commit 9c60f19

Please sign in to comment.