headless?
This commit is contained in:
96
Cargo.lock
generated
96
Cargo.lock
generated
@@ -25,6 +25,21 @@ dependencies = [
|
|||||||
"avr-hal-generic",
|
"avr-hal-generic",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "atomic-polyfill"
|
||||||
|
version = "0.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
|
||||||
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "avr-device"
|
name = "avr-device"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
@@ -71,6 +86,7 @@ dependencies = [
|
|||||||
"arduino-hal",
|
"arduino-hal",
|
||||||
"avr-device",
|
"avr-device",
|
||||||
"embedded-hal",
|
"embedded-hal",
|
||||||
|
"heapless",
|
||||||
"nb 0.1.3",
|
"nb 0.1.3",
|
||||||
"panic-halt",
|
"panic-halt",
|
||||||
"ufmt",
|
"ufmt",
|
||||||
@@ -82,6 +98,12 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
|
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "byteorder"
|
||||||
|
version = "1.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
@@ -94,6 +116,12 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "critical-section"
|
||||||
|
version = "1.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-hal"
|
name = "embedded-hal"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
@@ -110,6 +138,38 @@ version = "0.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "723dce4e9f25b6e6c5f35628e144794e5b459216ed7da97b7c4b66cdb3fa82ca"
|
checksum = "723dce4e9f25b6e6c5f35628e144794e5b459216ed7da97b7c4b66cdb3fa82ca"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hash32"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heapless"
|
||||||
|
version = "0.7.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
|
||||||
|
dependencies = [
|
||||||
|
"atomic-polyfill",
|
||||||
|
"hash32",
|
||||||
|
"rustc_version",
|
||||||
|
"spin",
|
||||||
|
"stable_deref_trait",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lock_api"
|
||||||
|
version = "0.4.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"scopeguard",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nb"
|
name = "nb"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
@@ -161,12 +221,48 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc_version"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
|
||||||
|
dependencies = [
|
||||||
|
"semver",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustversion"
|
name = "rustversion"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
|
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scopeguard"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "semver"
|
||||||
|
version = "1.0.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "spin"
|
||||||
|
version = "0.9.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
|
dependencies = [
|
||||||
|
"lock_api",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "stable_deref_trait"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "1.0.109"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ ufmt = "0.1.0"
|
|||||||
nb = "0.1.2"
|
nb = "0.1.2"
|
||||||
embedded-hal = "0.2.3"
|
embedded-hal = "0.2.3"
|
||||||
avr-device = "0.5.1"
|
avr-device = "0.5.1"
|
||||||
|
heapless = "0.7.16"
|
||||||
|
|
||||||
[dependencies.arduino-hal]
|
[dependencies.arduino-hal]
|
||||||
git = "https://github.com/rahix/avr-hal"
|
git = "https://github.com/rahix/avr-hal"
|
||||||
|
|||||||
40
src/main.rs
40
src/main.rs
@@ -2,13 +2,14 @@
|
|||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
mod webee;
|
mod webee;
|
||||||
|
|
||||||
use webee::{Webee};
|
use webee::{Webee};
|
||||||
|
|
||||||
|
|
||||||
use arduino_hal::{delay_ms, Peripherals};
|
use arduino_hal::{delay_ms, Peripherals};
|
||||||
use arduino_hal::prelude::*;
|
use arduino_hal::prelude::*;
|
||||||
|
use ufmt::{uDisplay};
|
||||||
use panic_halt as _;
|
use panic_halt as _;
|
||||||
use crate::webee::SimpleVec;
|
|
||||||
|
|
||||||
|
|
||||||
#[arduino_hal::entry]
|
#[arduino_hal::entry]
|
||||||
@@ -16,32 +17,41 @@ fn main() -> ! {
|
|||||||
let dp = Peripherals::take().unwrap();
|
let dp = Peripherals::take().unwrap();
|
||||||
let pins = arduino_hal::pins!(dp);
|
let pins = arduino_hal::pins!(dp);
|
||||||
let _status = pins.d13.into_output();
|
let _status = pins.d13.into_output();
|
||||||
let webee_rx = pins.d2;
|
let webee_rx = pins.d2.forget_imode();
|
||||||
let mut serial = arduino_hal::default_serial!(dp, pins, 57600);
|
let mut serial = arduino_hal::default_serial!(dp, pins, 57600);
|
||||||
|
|
||||||
let mut test = Webee::new(
|
let mut test = Webee::new(
|
||||||
dp.USART1,
|
dp.USART1,
|
||||||
pins.d19.forget_imode(),
|
pins.d19.forget_imode(),
|
||||||
pins.d18.into_output()
|
pins.d18.into_output(),
|
||||||
);
|
);
|
||||||
|
|
||||||
ufmt::uwriteln!(&mut serial, "Webee initialized: {}", webee_rx.is_high()).void_unwrap();
|
let ready = webee_rx.is_high();
|
||||||
|
ufmt::uwriteln!(&mut serial, "Webee initialized: {}", ready).void_unwrap();
|
||||||
delay_ms(1000);
|
delay_ms(1000);
|
||||||
|
if (!ready) {
|
||||||
{
|
ufmt::uwriteln!(&mut serial, "Webee initialized: {}", webee_rx.is_high()).void_unwrap();
|
||||||
let x = SimpleVec::from_slice(&[0x5a, 0xaa, 0xb1]);
|
|
||||||
ufmt::uwrite!(&mut serial, "Vector ({}): ", x.len());
|
|
||||||
for byte in &x.items()[..x.len()] {
|
|
||||||
ufmt::uwrite!(&mut serial, "{:02X} ", *byte);
|
|
||||||
}
|
|
||||||
ufmt::uwrite!(&mut serial, "\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let role = test.send(&[0x5a, 0xaa, 0xb1]);
|
let func = |byte : u8| {
|
||||||
|
ufmt::uwriteln!(&mut serial, "R {}", byte);
|
||||||
|
};
|
||||||
|
|
||||||
|
test.send_void(&[0x5a, 0xaa, 0xb1]);
|
||||||
ufmt::uwrite!(&mut serial, "Role: ");
|
ufmt::uwrite!(&mut serial, "Role: ");
|
||||||
for byte in role.items() {
|
let role = test.recv();
|
||||||
ufmt::uwrite!(&mut serial, "{:02X}", byte);
|
for i in 0..role.len() {
|
||||||
|
let byte = *role.get(i).unwrap();
|
||||||
|
ufmt::uwrite!(&mut serial, "{} ", byte);
|
||||||
}
|
}
|
||||||
|
ufmt::uwriteln!(&mut serial, "");
|
||||||
|
|
||||||
|
let data = test.recv();
|
||||||
|
ufmt::uwrite!(&mut serial, "{}", data.len());
|
||||||
|
|
||||||
|
// for byte in role.items() {
|
||||||
|
// ufmt::uwrite!(&mut serial, "{:02X}", byte);
|
||||||
|
// }
|
||||||
|
|
||||||
// for byte in [0x5a, 0xaa, 0xb1].iter() {
|
// for byte in [0x5a, 0xaa, 0xb1].iter() {
|
||||||
// webee.write_byte(*byte);
|
// webee.write_byte(*byte);
|
||||||
|
|||||||
39
src/webee.rs
39
src/webee.rs
@@ -4,13 +4,15 @@ use arduino_hal::port::mode::{Input, Output};
|
|||||||
use arduino_hal::usart::{Usart, UsartOps};
|
use arduino_hal::usart::{Usart, UsartOps};
|
||||||
use arduino_hal::prelude::*;
|
use arduino_hal::prelude::*;
|
||||||
|
|
||||||
mod simple_vector;
|
use heapless::Vec;
|
||||||
pub use simple_vector::SimpleVec;
|
|
||||||
|
// mod simple_vector;
|
||||||
|
// pub use simple_vector::SimpleVec;
|
||||||
|
|
||||||
|
|
||||||
pub struct Webee<USART: UsartOps<Atmega, RX, TX>, RX, TX>
|
pub struct Webee<USART: UsartOps<Atmega, RX, TX>, RX, TX>
|
||||||
{
|
{
|
||||||
webee: Usart<USART, RX, TX>,
|
pub webee: Usart<USART, RX, TX>,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SendCmd {}
|
enum SendCmd {}
|
||||||
@@ -34,7 +36,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send(&mut self, data: &[u8]) -> SimpleVec {
|
pub fn send(&mut self, data: &[u8]) -> Vec<u8, 128> {
|
||||||
for byte in data {
|
for byte in data {
|
||||||
self.webee.write_byte(*byte);
|
self.webee.write_byte(*byte);
|
||||||
}
|
}
|
||||||
@@ -42,12 +44,31 @@ where
|
|||||||
return self.recv();
|
return self.recv();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn recv(&mut self) -> SimpleVec {
|
pub fn send_void(&mut self, data: &[u8]) {
|
||||||
let mut byte: u8 = self.webee.read_byte();
|
for byte in data {
|
||||||
let mut buffer = SimpleVec::new();
|
self.webee.write_byte(*byte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while byte != STOP {
|
pub fn recv(&mut self) -> Vec<u8, 128> {
|
||||||
buffer.push(byte);
|
let mut byte: u8 = self.webee.read_byte();
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
|
||||||
|
while byte != STOP && !buffer.is_full() {
|
||||||
|
buffer.push(byte).unwrap();
|
||||||
|
byte = self.webee.read_byte();
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn recv_debug(&mut self, callback: fn(u8)) -> Vec<u8, 128> {
|
||||||
|
let mut byte: u8 = self.webee.read_byte();
|
||||||
|
callback(byte);
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
|
||||||
|
while byte != STOP && !buffer.is_full() {
|
||||||
|
buffer.push(byte).unwrap();
|
||||||
byte = self.webee.read_byte();
|
byte = self.webee.read_byte();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,10 @@ impl SimpleVec {
|
|||||||
len
|
len
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn full(&self) -> bool {
|
||||||
|
self.items.len() == self.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn push(&mut self, value: u8) {
|
pub fn push(&mut self, value: u8) {
|
||||||
let vec_item = VecItem {
|
let vec_item = VecItem {
|
||||||
|
|||||||
Reference in New Issue
Block a user