Files
adcs_api
cbor_protocol
channel_protocol
clyde_3g_eps_api
clyde_3g_eps_service
comms_service
db_test
eps_api
example_rust_c_service
example_rust_service
extern_lib
file_protocol
file_service
gomspace_p31u_api
gomspace_p31u_service
iobc_supervisor_service
isis_ants
isis_ants_api
isis_ants_service
isis_imtq_api
isis_iobc_supervisor
kubos_app
kubos_app_service
kubos_build_helper
kubos_file_client
kubos_service
kubos_shell_client
kubos_system
kubos_telemetry_db
large_download
large_upload
local_comms_service
mai400
mai400_api
mai400_service
monitor_service
novatel_oem6_api
novatel_oem6_service
nsl_duplex_d2
nsl_duplex_d2_comms_service
obc_hs
radio_api
rust_i2c
rust_mission_app
rust_uart
scheduler_service
serial_comms_service
shell_protocol
shell_service
telemetry_service
uart_comms_client
udp_client
utils
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//
// Copyright (C) 2020 Kubos Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License")
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Contributed by Xueliang Bai <x.bai@sydney.edu.au> on behalf of the
// ARC Training Centre for CubeSats, UAVs & Their Applications (CUAVA) team (www.cuava.com.au)
// at the University of Sydney

#[allow(dead_code)]
#[repr(C)]
pub enum KEPSStatus {
    EpsOk,
    EpsError,
    EpsI2CError,
    EpsErrorConfig,
    EpsErrorInternal,
}

#[repr(C)]
pub struct KEPSConf {
    pub k_bus: *const u8,
    pub k_addr: u8,
}

#[repr(C)]
#[derive(Default)]
pub struct EpsSystemConfig {
    pub ppt_mode: u8,
    pub battheater_mode: u8,
    pub battheater_low: i8,
    pub battheater_high: i8,
    pub output_normal_value: [u8; 8],
    pub output_safe_value: [u8; 8],
    pub output_initial_on_delay: [u16; 8],
    pub output_initial_off_delay: [u16; 8],
    pub vboost: [u16; 3],
}
#[repr(C)]
#[derive(Default)]
pub struct EpsBatteryConfig {
    pub batt_maxvoltage: u16,
    pub batt_safevoltage: u16,
    pub batt_criticalvoltage: u16,
    pub batt_normalvoltage: u16,
    pub reserved1: [u32; 2],
    pub reserved2: [u8; 4],
}

/* Changed counter_wdt_gnd and counter_boot from u32 to u16 to match the C API*/
#[repr(C)]
#[derive(Default)]
pub struct EpsHk {
    pub vboost: [u16; 3],
    pub vbatt: u16,
    pub curin: [u16; 3],
    pub cursun: u16,
    pub cursys: u16,
    pub reserved1: u16,
    pub curout: [u16; 6],
    pub output: [u8; 8],
    pub output_on_delta: [u16; 8],
    pub output_off_delta: [u16; 8],
    pub latchup: [u16; 6],
    pub wdt_i2c_time_left: u32,
    pub wdt_gnd_time_left: u32,
    pub wdt_csp_pings_left: [u8; 2],
    pub counter_wdt_i2c: u32,
    pub counter_wdt_gnd: u16,
    pub counter_wdt_csp: [u32; 2],
    pub counter_boot: u16,
    pub temp: [i16; 6],
    pub boot_cause: u8,
    pub batt_mode: u8,
    pub ppt_mode: u8,
    pub reserved2: u16,
}

extern "C" {
    pub fn k_eps_init(config: KEPSConf) -> KEPSStatus;
    pub fn k_eps_ping() -> KEPSStatus;
    pub fn k_eps_reset() -> KEPSStatus;
    pub fn k_eps_reboot() -> KEPSStatus;
    pub fn k_eps_configure_system(config: *const EpsSystemConfig) -> KEPSStatus;
    pub fn k_eps_configure_battery(config: *const EpsBatteryConfig) -> KEPSStatus;
    pub fn k_eps_save_battery_config() -> KEPSStatus;
    pub fn k_eps_set_output(channel_mask: u8) -> KEPSStatus;
    pub fn k_eps_set_single_output(channel: u8, value: u8, delay: u16) -> KEPSStatus;
    pub fn k_eps_set_input_value(
        in1_voltage: u16,
        in2_voltage: u16,
        in3_voltage: u16,
    ) -> KEPSStatus;
    pub fn k_eps_set_input_mode(mode: u8) -> KEPSStatus;
    pub fn k_eps_set_heater(cmd: u8, heater: u8, mode: u8) -> KEPSStatus;
    pub fn k_eps_reset_system_config() -> KEPSStatus;
    pub fn k_eps_reset_battery_config() -> KEPSStatus;
    pub fn k_eps_reset_counters() -> KEPSStatus;
    pub fn k_eps_get_housekeeping(buff: *mut EpsHk) -> KEPSStatus;
    pub fn k_eps_get_system_config(buff: *mut EpsSystemConfig) -> KEPSStatus;
    pub fn k_eps_get_battery_config(buff: *mut EpsBatteryConfig) -> KEPSStatus;
    pub fn k_eps_get_heater(bp4: *mut u8, onboard: *mut u8) -> KEPSStatus;
    pub fn k_eps_watchdog_kick() -> KEPSStatus;
    pub fn k_eps_passthrough(tx: *const u8, tx_len: u8, rx: *mut u8, rx_len: u8) -> KEPSStatus;
}