// 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 serde_annotate::Annotate;
use std::any::Any;
use std::time::Duration;
use structopt::StructOpt;

use opentitanlib::app::TransportWrapper;
use opentitanlib::app::command::CommandDispatch;

/// Boot the target device.
#[derive(Debug, StructOpt)]
pub struct BootCommand {
}

impl CommandDispatch for BootCommand {
    fn run(
        &self,
        _context: &dyn Any,
        transport: &TransportWrapper,
    ) -> Result<Option<Box<dyn Annotate>>> {
        let reset_pin = transport.gpio_pin("RESET")?;
        transport.apply_pin_strapping("RUN")?;
        // Active-low RESET
        reset_pin.write(true)?;
        reset_pin.write(false)?;
        reset_pin.write(true)?;
        std::thread::sleep(Duration::from_millis(1000));
        Ok(None)
    }
}
