[][src]Trait isis_ants_api::IAntS

pub trait IAntS: IAntSClone + Sync + Send {
    fn new(
        bus: &str,
        primary: u8,
        secondary: u8,
        ant_count: u8,
        timeout: u32
    ) -> AntSResult<Self>
    where
        Self: Sized
;
fn configure(&self, config: KANTSController) -> AntSResult<()>;
fn reset(&self) -> AntSResult<()>;
fn arm(&self) -> AntSResult<()>;
fn disarm(&self) -> AntSResult<()>;
fn deploy(
        &self,
        antenna: KANTSAnt,
        force: bool,
        timeout: u8
    ) -> AntSResult<()>;
fn auto_deploy(&self, timeout: u8) -> AntSResult<()>;
fn cancel_deploy(&self) -> AntSResult<()>;
fn get_deploy(&self) -> AntSResult<DeployStatus>;
fn get_uptime(&self) -> AntSResult<u32>;
fn get_system_telemetry(&self) -> AntSResult<AntsTelemetry>;
fn get_activation_count(&self, antenna: KANTSAnt) -> AntSResult<u8>;
fn get_activation_time(&self, antenna: KANTSAnt) -> AntSResult<u16>;
fn watchdog_kick(&self) -> AntSResult<()>;
fn watchdog_start(&self) -> AntSResult<()>;
fn watchdog_stop(&self) -> AntSResult<()>;
fn passthrough(&self, tx: &[u8], rx_in: &mut [u8]) -> AntSResult<()>; }

Trait used to represent the AntS object. Allows for mock objects to be created for unit tests

Required Methods

Construct a new AntS instance

Configure which microcontroller should be used to control the system

Perform a software reset of the microcontrollers

Arm the system for deployment

Disable deployment

Deploy one antenna

Automatically deploy all antennas

Cancel all current deployment actions

Get the current deployment status of the system

Get the system uptime

Get the system telemetry data

Get an antenna's activation count

Get the amount of time spent attempting to deploy an antenna

Kick the hardware watchdog

Start automatic watchdog kicking

Stop automatic watchdog kicking

Pass a data packet directly through to the device

Implementors

impl IAntS for AntS
[src]

Constructor

Opens a connection to the underlying I2C device

Arguments

  • bus - The I2C bus to use to communicate with the device
  • primary - The I2C address of the system's primary microcontroller
  • secondary - The I2C address of the system's secondary microcontroller (should be 0x00 if no secondary microcontroller is available)
  • ant_count - The number of antennas present in the antenna system
  • timeout - The watchdog timeout interval, in seconds

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

use isis_ants_api::*;

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;

Configure the system to send future commands to the requested microcontroller

Arguments

  • config - The microcontroller which should be used for future commands to the antenna system

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
ants.configure(KANTSController::Secondary)?;

Reset both of the antenna's microcontrollers

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.reset()?;

Arm the antenna system for deployment

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.arm()?;

Disarm the antenna system

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.disarm()?;

Deploy a particular antenna

Arguments

  • antenna - The antenna to deploy
  • force - Whether the system should ignore previous successful deployment
  • timeout - The maximum time, in seconds, the system should spend deploying the antenna

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
ants.deploy(KANTSAnt::Ant2, false, 10)?;

Auto-deploy all antennas sequentially.

Arguments

  • timeout - The maximum time, in seconds, the system should spend deploying each antenna

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
ants.auto_deploy(5)?;

Cancel all current deployment actions

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.cancel_deploy()?;

Get the current deployment status

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
let deploy = ants.get_deploy()?;
println!("Antenna 1 deployed: {}", !deploy.ant_1_not_deployed);
println!("Antenna 2 deployment active: {}", deploy.ant_2_active);

Get the system's uptime

Returns the systems uptime, in seconds

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
let uptime = ants.get_uptime()?;
println!("Antenna system uptime: {}", uptime);

Get the current system telemetry

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
let sys_telem = ants.get_system_telemetry()?;

println!("Antenna system telemetry:");
println!("    raw_temp: {}", sys_telem.raw_temp);
println!("    deploy_status:");
println!("        Antenna 1 deployed: {}", !sys_telem.deploy_status.ant_1_not_deployed);
println!("        Antenna 2 deployment active: {}", sys_telem.deploy_status.ant_2_active);
println!("    uptime: {}\n", sys_telem.uptime);

Get an antenna's activation count

Arguments

  • antenna - Antenna to query

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
let act_count = ants.get_activation_count(KANTSAnt::Ant3)?;

println!("Antenna 3 activation count - {}", act_count);

Get an antenna's activation time

Returns the total amount of time spent attempting to active the antenna, in seconds

Arguments

  • antenna - Antenna to query

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
let act_count = ants.get_activation_time(KANTSAnt::Ant1)?;

println!("Antenna 1 activation time - {}", act_count);

Kick both antenna system's watchdogs once

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.watchdog_kick()?;

Start a thread to kick the system's watchdogs at an interval of (timeout)/3 seconds

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.watchdog_start()?;

Stop the watchdog thread

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x32, 4, 10)?;
ants.watchdog_start()?;
//...
ants.watchdog_stop()?;

Pass a command packet directly through to the antenna system Useful for executing commands which have not been implemented in either the generic or specific antenna APIs.

Arguments

  • tx - Reference to byte array data to send
  • rx - Reference to byte array which returned data should be stored in

Errors

If this function encounters any errors, an AntsError variant will be returned.

Examples

let ants = AntS::new("KI2C1", 0x31, 0x00, 2, 20)?;
let tx: [u8; 1] = [0xC3];
let mut rx: [u8; 2] = [0; 2];

ants.passthrough(&tx, &mut rx).unwrap();
println!("Antenna passthrough response: {:?}", rx);