#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright (C) 2018 Takashi Sakamoto
from hinawa_utils.misc.cli_kit import CliKit
from hinawa_utils.dice.dice_unit import DiceUnit
def handle_current_status(unit, args):
print('owner address: {0:016x}'.format(unit.get_owner_addr()))
print('global enabled: {0}'.format(unit.get_enabled()))
print('clock status:')
for name, value in unit.get_clock_status().items():
print(' {0}: {1}'.format(name, value))
print('clock source detection:')
for name, value in unit.get_external_clock_states().items():
print(' {0}: {1}'.format(name, ', '.join(value)))
print('measured rate: {0}'.format(unit.get_measured_sampling_rate()))
print('dice version: {0}'.format(unit.get_dice_version()))
print('latest notification: 0x{0:08x}'.format(
unit.get_latest_notification()))
print('clock source: {0}'.format(unit.get_clock_source()))
print('sampling rate: {0}'.format(unit.get_sampling_rate()))
print('nickname: {0}'.format(unit.get_nickname()))
print('Transmitted streams:')
for i, params in enumerate(unit.get_tx_params()):
print(' Stream {0}:'.format(i))
print(' iso-channel: 0x{0:08x}'.format(params['iso-channel']))
print(' speed: {0}'.format(params['speed']))
print(' pcm: {0}'.format(params['pcm']))
print(' midi: {0}'.format(params['midi']))
if 'iec60958' in params:
print(' iec60958:')
print(' caps: {0}'.format(params['iec60958']['caps']))
print(' enable: {0}'.format(params['iec60958']['enable']))
print(' formation:')
for j, name in enumerate(params['formation']):
print(' {0}: {1}'.format(j, name))
print('Received streams:')
for i, params in enumerate(unit.get_rx_params()):
print(' Stream {0}:'.format(i))
print(' iso-channel: 0x{0:08x}'.format(params['iso-channel']))
print(' start: {0}'.format(params['start']))
print(' pcm: {0}'.format(params['pcm']))
print(' midi: {0}'.format(params['midi']))
if 'iec60958' in params:
print(' iec60958:')
print(' caps: {0}'.format(params['iec60958']['caps']))
print(' enable: {0}'.format(params['iec60958']['enable']))
print(' formation:')
for j, name in enumerate(params['formation']):
print(' {0}: {1}'.format(j, name))
sync_clock_source = unit.get_external_sync_clock_source()
if sync_clock_source != '':
sync_locked = unit.get_external_sync_locked()
sync_rate = unit.get_external_sync_rate()
sync_adat_status = unit.get_external_sync_adat_status()
print('Synchronization infomation:')
print(' clock-source: {0}'.format(sync_clock_source))
print(' locked: {0}'.format(sync_locked))
print(' sampling-rate: {0}'.format(sync_rate))
print(' adat-status: {0:x}'.format(sync_adat_status))
return True
def handle_sampling_rate(unit, args):
ops = ('set', 'get')
rates = unit.get_supported_sampling_rates()
if len(args) > 0 and args[0] in ops:
op = args[0]
if op == ops[0] and len(args) == 2:
rate = int(args[1])
unit.set_sampling_rate(rate)
else:
print(unit.get_sampling_rate())
return True
print('Arguments for sampling-rate command:')
print(' sampling-rate OPERATION [RATE]')
print(' OP: [{0}]'.format('|'.join(ops)))
print(' RATE: [{0}]'.format('|'.join(map(str, rates))))
return False
def handle_clock_source(unit, args):
ops = ('set', 'get')
sources = unit.get_supported_clock_sources()
if len(args) > 0 and args[0] in ops:
op = args[0]
if op == ops[0] and len(args) == 2:
source = args[1]
unit.set_clock_source(source)
else:
print(unit.get_clock_source())
return True
print('Arguments for clock-source command:')
print(' clock-source OPERATION [SOURCE]')
print(' OP: [{0}]'.format('|'.join(ops)))
print(' SOURCE: [{0}]'.format('|'.join(sources)))
return False
def handle_nickname(unit, args):
ops = ('set', 'get')
if len(args) > 0 and args[0] in ops:
op = args[0]
if op == ops[0] and len(args) == 2:
name = args[1]
unit.set_nickname(name)
else:
print(unit.get_nickname())
return True
print('Arguments for nickname command:')
print(' nickname OPERATION [SOURCE]')
print(' OPERATION: {0}'.format(', '.join(ops)))
return False
cmds = {
'current-status': handle_current_status,
'sampling-rate': handle_sampling_rate,
'clock-source': handle_clock_source,
'nickname': handle_nickname,
}
fullpath = CliKit.seek_snd_unit_path()
if fullpath:
with DiceUnit(fullpath) as unit:
CliKit.dispatch_command(unit, cmds)