Compare commits
No commits in common. "ceb4dc035f0e6dc22654ce45be249b791c71fcd4" and "cfd7b79eac6e775dafd84698ea5ab6816647964d" have entirely different histories.
ceb4dc035f
...
cfd7b79eac
11 changed files with 605 additions and 509 deletions
1005
Cargo.lock
generated
1005
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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" }
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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"]}
|
||||
Loading…
Add table
Add a link
Reference in a new issue