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
#![deny(missing_docs)]
#![deny(warnings)]
extern crate comms_service;
#[macro_use]
extern crate failure;
extern crate kubos_service;
extern crate kubos_system;
#[macro_use]
extern crate juniper;
extern crate rust_uart;
extern crate serial;
#[macro_use]
extern crate log;
mod comms;
mod kiss;
mod model;
mod schema;
use crate::comms::*;
use crate::model::Subsystem;
use crate::schema::{MutationRoot, QueryRoot};
use comms_service::*;
use failure::Error;
use kubos_service::{Config, Logger, Service};
use std::sync::{Arc, Mutex};
type SerialServiceResult<T> = Result<T, Error>;
fn main() -> SerialServiceResult<()> {
Logger::init("serial-comms-service").unwrap();
let service_config = Config::new("serial-comms-service")?;
let bus = service_config
.get("bus")
.expect("No 'bus' parameter in config.toml")
.as_str()
.unwrap()
.to_owned();
let comms_config = CommsConfig::new(service_config.clone())?;
let serial_comms = Arc::new(Mutex::new(SerialComms::new(&bus)));
let controls = CommsControlBlock::new(
Some(Arc::new(read_ser)),
vec![Arc::new(write_ser)],
serial_comms.clone(),
serial_comms,
comms_config,
)?;
let telem = Arc::new(Mutex::new(CommsTelemetry::default()));
info!("Serial Communications Service starting on {}", bus);
CommsService::start::<Arc<Mutex<SerialComms>>, SpacePacket>(controls, &telem)?;
let subsystem = Subsystem::new(telem);
Service::new(service_config, subsystem, QueryRoot, MutationRoot).start();
Ok(())
}