// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

use anyhow::Result;
use structopt::StructOpt;

use crate::backend::BackendOpts;
use crate::transport::cw310::CW310;
use crate::transport::Transport;

#[derive(Debug, StructOpt)]
pub struct Cw310Opts {
    #[structopt(
        long,
        help = "Comma-separated list of CW310 UARTs for non-udev environments. List the console uart first."
    )]
    pub cw310_uarts: Option<String>,
}

pub fn create(args: &BackendOpts) -> Result<Box<dyn Transport>> {
    let uarts = args
        .cw310_opts
        .cw310_uarts
        .as_ref()
        .map(|v| v.split(',').collect::<Vec<&str>>())
        .unwrap_or_default();
    Ok(Box::new(CW310::new(
        args.usb_vid,
        args.usb_pid,
        args.usb_serial.as_deref(),
        &uarts,
    )?))
}
