Source code for iio_info
#!/usr/bin/env python
"""
Copyright (C) 2015 Analog Devices, Inc.
Author: Paul Cercueil <paul.cercueil@analog.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
import sys
import iio
def _create_context():
if len(sys.argv) == 3 and sys.argv[1] == "--uri":
uri = sys.argv[2]
else:
contexts = iio.scan_contexts()
if len(contexts) > 1:
print("Multiple contexts found. Please select one using --uri:")
for uri, description in contexts.items():
print("\t%s: %s" % (uri, description))
sys.exit(0)
return iio.Context(uri)
[docs]
class Information:
"""Class for retrieving the requested information."""
def __init__(self, context):
"""
Class constructor.
Args:
context: type=iio.Context
Context used for retrieving the information.
"""
self.context = context
[docs]
def write_information(self):
"""Write the information about the current context."""
self._context_info()
def _context_info(self):
print("IIO context created: " + self.context.name)
print("Backend version: %u.%u (git tag: %s" % self.context.version)
print("Backend description string: " + self.context.description)
if len(self.context.attrs) > 0:
print("IIO context has %u attributes: " % len(self.context.attrs))
for attr, value in self.context.attrs.items():
print("\t" + attr + ": " + value)
print("IIO context has %u devices:" % len(self.context.devices))
for dev in self.context.devices:
self._device_info(dev)
def _device_info(self, dev):
print("\t" + dev.id + ": " + dev.name)
if dev is iio.Trigger:
print("Found trigger! Rate: %u HZ" % dev.frequency)
print("\t\t%u channels found: " % len(dev.channels))
for channel in dev.channels:
self._channel_info(channel)
if len(dev.attrs) > 0:
print("\t\t%u device-specific attributes found: " % len(dev.attrs))
for device_attr in dev.attrs:
self._device_attribute_info(dev, device_attr)
if len(dev.debug_attrs) > 0:
print("\t\t%u debug attributes found: " % len(dev.debug_attrs))
for debug_attr in dev.debug_attrs:
self._device_debug_attribute_info(dev, debug_attr)
def _channel_info(self, channel):
print("\t\t\t%s: %s (%s)" % (channel.id, channel.name or "", "output" if channel.output else "input"))
if len(channel.attrs) > 0:
print("\t\t\t%u channel-specific attributes found: " % len(channel.attrs))
for channel_attr in channel.attrs:
self._channel_attribute_info(channel, channel_attr)
@staticmethod
def _channel_attribute_info(channel, channel_attr):
try:
print("\t\t\t\t" + channel_attr + ", value: " + channel.attrs[channel_attr].value)
except OSError as err:
print("Unable to read " + channel_attr + ": " + err.strerror)
@staticmethod
def _device_attribute_info(dev, device_attr):
try:
print("\t\t\t" + device_attr + ", value: " + dev.attrs[device_attr].value)
except OSError as err:
print("Unable to read " + device_attr + ": " + err.strerror)
@staticmethod
def _device_debug_attribute_info(dev, debug_attr):
try:
print("\t\t\t" + debug_attr + ", value: " + dev.debug_attrs[debug_attr].value)
except OSError as err:
print("Unable to read " + debug_attr + ": " + err.strerror)
[docs]
def main():
"""Module's main method."""
context = _create_context()
information = Information(context)
information.write_information()
if __name__ == "__main__":
main()