Compare commits

..

No commits in common. "ceb4dc035f0e6dc22654ce45be249b791c71fcd4" and "cfd7b79eac6e775dafd84698ea5ab6816647964d" have entirely different histories.

11 changed files with 605 additions and 509 deletions

1005
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -5,23 +5,22 @@ edition = "2021"
[dependencies]
anyhow = "1.0.83"
axum = { version = "0.8.8", features = ["macros"] }
fern = { version = "0.7.1", features = ["colored"] }
axum = { version = "0.7.5", features = ["macros"] }
fern = { version = "0.6.2", features = ["colored"] }
humantime = "2.1.0"
log = "0.4.21"
nom = "8.0.0"
nom = "7.1.3"
serde_json = "1.0.118"
serialport = "4.5.1"
tokio = {version = "1.37.0", features = ["full"]}
tower-http = { version = "0.6.8", features = ["fs", "trace"] }
tower-http = { version = "0.5.2", features = ["fs", "trace"] }
radomctl-protocol = { path = "../protocol" }
postcard = {version = "1.0.10", features = ["use-std"]}
dfu-libusb = "0.5.5"
dfu-libusb = "0.3.0"
rusb = "0.9"
clap = { version = "4.5.19", features = ["derive"] }
indicatif = "0.18.3"
indicatif = "0.17.8"
tokio-serial = {version = "5.4.4", features = ["codec", "rt"] }
tokio-util = { version = "0.7.13", features = ["codec", "rt"] }
bytes = "1.9.0"
futures = "0.3.31"
nom-language = "0.1.0"

View file

@ -7,8 +7,9 @@ use std::{
use anyhow::{anyhow, Context};
use clap::Parser;
use dfu_libusb::{Dfu, DfuLibusb};
use postcard::to_stdvec_cobs;
use postcard::{from_bytes_cobs, to_stdvec_cobs};
use radomctl_protocol::*;
use radomctld::logger::setup_logger;
#[derive(Parser)]
struct Cli {

View file

@ -1,5 +1,7 @@
use anyhow::Result;
use fern::colors::{Color, ColoredLevelConfig};
use log::{debug, error, info, warn};
use std::io;
pub fn setup_logger() -> Result<()> {
let colors = ColoredLevelConfig::new()

View file

@ -1,9 +1,17 @@
use anyhow::anyhow;
use anyhow::Result;
use axum::{extract::State, routing::get, Json, Router};
use anyhow::{anyhow, Context};
use axum::{
extract::State,
http::StatusCode,
routing::{get, post},
Json, Router,
};
use clap::Parser;
use log::{debug, error, info};
use fern::colors::{Color, ColoredLevelConfig};
use log::{debug, error, info, warn, Level};
use serde_json::{json, Value};
use std::time::Duration;
use std::{borrow::Borrow, io};
use tokio::{
self,
io::{AsyncBufReadExt, AsyncWriteExt, BufStream},
@ -12,7 +20,10 @@ use tokio::{
task::JoinSet,
};
use tokio_serial;
use tower_http::{services::ServeFile, trace::TraceLayer};
use tower_http::{
services::{ServeDir, ServeFile},
trace::TraceLayer,
};
use radomctld::{
logger::setup_logger,
@ -23,7 +34,7 @@ use radomctld::{
async fn process_socket(
socket: TcpStream,
cmd_tx: mpsc::Sender<Command>,
pos_rx: watch::Receiver<(f32, f32)>,
mut pos_rx: watch::Receiver<(f32, f32)>,
) {
let mut stream = BufStream::new(socket);

View file

@ -4,14 +4,13 @@ use nom::{
character::complete::{
alphanumeric1, i8, multispace0, multispace1, newline, none_of, not_line_ending, space1,
},
combinator::{all_consuming, map, opt, recognize},
error::context,
multi::many1,
combinator::{all_consuming, map, opt, recognize, rest},
error::{context, convert_error, VerboseError},
multi::{many0, many1},
number::complete::float,
sequence::{preceded, separated_pair, terminated},
Err as NomErr, IResult, Parser,
};
use nom_language::error::{convert_error, VerboseError};
#[derive(PartialEq, Debug)]
pub enum Command {

View file

@ -1,19 +1,22 @@
use anyhow::Result;
use bytes::{BufMut, BytesMut};
use futures::{stream::StreamExt, SinkExt};
use log::{debug, error, info, warn};
use postcard::{from_bytes_cobs, to_stdvec_cobs};
use radomctl_protocol::{HostMessage, PositionTarget, RadomMessage};
use std::{io, time::Duration};
use std::{env, io, str, time::Duration};
use tokio::time::sleep;
use tokio::{
self,
io::AsyncBufReadExt,
sync::{mpsc, watch},
io::{AsyncBufReadExt, AsyncWriteExt, BufStream},
net::{TcpListener, TcpStream},
sync::{self, mpsc, watch},
time,
};
use tokio_serial::SerialPortBuilderExt;
use tokio_util::codec::{Decoder, Encoder};
use crate::rotctlprotocol::Command;
use crate::rotctlprotocol::{parse_command, Command};
struct ProtocolCodec;

View file

@ -5,25 +5,25 @@ version = "0.1.0"
[dependencies]
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
defmt = { version = "1.0", features = ["encoding-rzcobs"] }
defmt = { version = "0.3", features = ["encoding-rzcobs"] }
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
panic-probe = { version = "1.0", features = ["print-defmt"] }
panic-probe = { version = "0.3", features = ["print-defmt"] }
rtic = { version = "2.0.1", features = [ "thumbv7-backend" ] }
defmt-rtt = "1.1"
stm32f4xx-hal = { version = "0.23.0", features = ["stm32f401", "usb_fs"] }
defmt-rtt = "0.4"
stm32f4xx-hal = { version = "0.21.0", features = ["stm32f401", "usb_fs"] }
embedded-hal = {version = "1.0.0"}
nb = "1.0.0"
num-traits = { version = "0.2", default-features = false, features = ["libm"] }
num = {version = "0.4", default-features = false}
ufmt = "0.2.0"
qmc5883l = {version = "0.0.1", git="https://github.com/patrickelectric/qmc5883l", rev="62b8a64b54e0f843ddf0c5942f8ed218b5f3e492"}
qmc5883l = "0.0.1"
rtic-monotonics = {version = "2.0.2", features = ["cortex-m-systick"]}
xca9548a = "1.0.0"
xca9548a = "0.2.1"
as5048a = { git = "https://github.com/LongHairedHacker/as5048a", rev="b15d716bf47ce4975a6cefebf82006c9b09e8fea"}
usb-device = "0.3.2"
usbd-serial = "0.2.2"
postcard = {version = "1.0.10", features = ["use-defmt"]}
heapless = {version = "0.9.2", features = ["defmt"]}
heapless = {version = "0.8.0", features = ["defmt-03"]}
radomctl-protocol = { path = "../protocol" }

View file

@ -1,4 +1,4 @@
use core::mem::MaybeUninit;
use core::{mem::MaybeUninit, ptr::addr_of_mut};
use stm32f4xx_hal::pac;
@ -9,7 +9,7 @@ fn jump_to_bootloader() {
let address: u32 = 0x1FFF0000;
let device = pac::Peripherals::steal();
device.SYSCFG.memrmp().modify(|_, w| w.bits(0x01));
device.SYSCFG.memrm.modify(|_, w| w.bits(0x01));
let mut p = cortex_m::Peripherals::steal();
p.SCB.invalidate_icache();

View file

@ -33,7 +33,6 @@ mod app {
otg_fs::{UsbBus, UsbBusType, USB},
pac::{I2C1, SPI1},
prelude::*,
rcc::Config,
signature, spi,
};
use usb_device::prelude::*;
@ -94,19 +93,26 @@ mod app {
bootloader::init();
defmt::info!("init");
let mut rcc = cx
.device
.RCC
.freeze(Config::hse(25.MHz()).sysclk(84.MHz()).require_pll48clk());
Mono::start(cx.core.SYST, rcc.clocks.sysclk().to_Hz());
let rcc = cx.device.RCC.constrain();
// Freeze the configuration of all the clocks in the system and store the frozen frequencies in
// `clocks`
let clocks = rcc
.cfgr
.use_hse(25.MHz())
.sysclk(84.MHz())
.require_pll48clk()
.freeze();
Mono::start(cx.core.SYST, clocks.sysclk().to_Hz());
defmt::info!("Clock Setup done");
// Acquire the GPIO peripherials
let gpioa = cx.device.GPIOA.split(&mut rcc);
let gpiob = cx.device.GPIOB.split(&mut rcc);
let gpioc = cx.device.GPIOC.split(&mut rcc);
let gpioa = cx.device.GPIOA.split();
let gpiob = cx.device.GPIOB.split();
let gpioc = cx.device.GPIOC.split();
let board_led = gpioc.pc13.into_push_pull_output();
@ -122,7 +128,7 @@ mod app {
cx.device.OTG_FS_PWRCLK,
),
(gpioa.pa11, gpioa.pa12),
&rcc.clocks,
&clocks,
);
unsafe {
@ -171,7 +177,7 @@ mod app {
i2c::Mode::Standard {
frequency: 400.kHz(),
},
&mut rcc,
&clocks,
);
defmt::info!("I2C Setup done");
@ -195,13 +201,13 @@ mod app {
let pico = gpioa.pa7.into_push_pull_output();
let spi1 = spi::Spi::new(
cx.device.SPI1,
(Some(sck), Some(poci), Some(pico)),
(sck, poci, pico),
spi::Mode {
polarity: spi::Polarity::IdleLow,
phase: spi::Phase::CaptureOnSecondTransition,
},
8.MHz(),
&mut rcc,
&clocks,
);
defmt::info!("SPI Setup done");

View file

@ -7,4 +7,4 @@ edition = "2021"
[dependencies]
serde = {version = "1.0.193", default-features = false, features = ["derive"]}
heapless = {version = "0.9.2", features = ["serde"]}
heapless = {version = "0.8.0", features = ["serde"]}