#!/usr/bin/env python3 # # Copyright (c) 2019 Intel Corporation # # SPDX-License-Identifier: Apache-2.0 # # Author: Sathish Kuttan # 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()