Empty sequences in Python are falsy, so
if len(config_file) != 0:
can be simplified to
if config_file:
pylint warning:
C1801: Do not use `len(SEQUENCE)` to determine if a sequence is
empty (len-as-condition)
Simplify the code a bit with os.path.join(), which indirectly gets rid
of the warning. os.path.join('', 'foo') returns 'foo', so things work
out when os.path.basename() returns '' (no directory) as well.
I'm getting rid of pylint warnings for a CI check.
Also replace a '== None' with 'is None', which is more common.
Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (c) 2019 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Author: Sathish Kuttan <sathish.k.kuttan@intel.com>
|
|
|
|
# This script sends a command to either start or stop audio streams
|
|
# to an Intel Sue Creek S1000 target connected to a Linux host
|
|
# over USB.
|
|
# The target should be running the sample audio application from the
|
|
# sample project to which this script belongs.
|
|
|
|
import hid
|
|
import yaml
|
|
import os
|
|
import argparse
|
|
|
|
class Device:
|
|
def __init__(self):
|
|
"""
|
|
Reads configuration file to determine the USB VID/PID of
|
|
the Sue Creek target.
|
|
When the script is run using sudo permission, the
|
|
manufacturer and product strings are printed
|
|
"""
|
|
config_file = os.path.join(os.path.dirname(__file__), 'config.yml')
|
|
with open(config_file, 'r') as ymlfile:
|
|
config = yaml.safe_load(ymlfile)
|
|
self.name = config['general']['name']
|
|
self.usb_vid = config['usb']['vid']
|
|
self.usb_pid = config['usb']['pid']
|
|
self.hid_dev = hid.device()
|
|
if self.hid_dev is None:
|
|
print('Device not found')
|
|
else:
|
|
self.hid_dev.open(self.usb_vid, self.usb_pid)
|
|
|
|
def start_audio(self):
|
|
"""
|
|
Sends a command to start the audio transfers
|
|
in the Sue Creek target.
|
|
"""
|
|
# space for 1 byte report id, 2 bytes of padding and 1 byte report size
|
|
command = 'start_audio'.encode('utf-8') + b'\x00'
|
|
command += b'\x00' * (56 - len(command))
|
|
cmd_len = len(command) // 4 + 1
|
|
command = b'\x01\x00' + cmd_len.to_bytes(2, byteorder='little') + \
|
|
command
|
|
command = b'\x01\x00\x00\x38' + command
|
|
print('Starting Audio on %s ...' % self.hid_dev.get_product_string())
|
|
self.hid_dev.send_feature_report(command)
|
|
self.hid_dev.read(len(command))
|
|
|
|
def stop_audio(self):
|
|
"""
|
|
Sends a command to stop the running audio transfers
|
|
in the Sue Creek target.
|
|
"""
|
|
# space for 1 byte report id, 2 bytes of padding and 1 byte report size
|
|
command = 'stop_audio'.encode('utf-8') + b'\x00'
|
|
command += b'\x00' * (56 - len(command))
|
|
cmd_len = len(command) // 4 + 1
|
|
command = b'\x02\x00' + cmd_len.to_bytes(2, byteorder='little') + \
|
|
command
|
|
command = b'\x01\x00\x00\x38' + command
|
|
print('Stopping Audio on %s ...' % self.hid_dev.get_product_string())
|
|
self.hid_dev.send_feature_report(command)
|
|
self.hid_dev.read(len(command))
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(epilog='NOTE: use sudo -E %(prog)s to run the script')
|
|
parser.add_argument('command', choices=['start', 'stop'],
|
|
help='start or stop audio streams')
|
|
args = parser.parse_args()
|
|
sue_creek = Device()
|
|
if args.command == 'start':
|
|
sue_creek.start_audio()
|
|
if args.command == 'stop':
|
|
sue_creek.stop_audio()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|