mirror of
https://github.com/stakwork/sphinx-key.git
synced 2025-12-18 15:54:31 +01:00
@@ -41,6 +41,9 @@ pub enum Status {
|
|||||||
Connected,
|
Connected,
|
||||||
Signing,
|
Signing,
|
||||||
Ota,
|
Ota,
|
||||||
|
Reset1,
|
||||||
|
Reset2,
|
||||||
|
Reset3,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const ROOT_STORE: &str = "/sdcard/store";
|
pub const ROOT_STORE: &str = "/sdcard/store";
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ mod periph;
|
|||||||
use crate::core::control::{controller_from_seed, FlashPersister};
|
use crate::core::control::{controller_from_seed, FlashPersister};
|
||||||
use crate::core::{config::*, events::*};
|
use crate::core::{config::*, events::*};
|
||||||
// use crate::periph::led::led_control_loop;
|
// use crate::periph::led::led_control_loop;
|
||||||
|
use crate::periph::button::button_loop;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use crate::periph::sd::{mount_sd_card, simple_fs_test};
|
use crate::periph::sd::{mount_sd_card, simple_fs_test};
|
||||||
|
|
||||||
@@ -39,12 +40,17 @@ fn main() -> Result<()> {
|
|||||||
thread::sleep(Duration::from_secs(1));
|
thread::sleep(Duration::from_secs(1));
|
||||||
|
|
||||||
let peripherals = Peripherals::take().unwrap();
|
let peripherals = Peripherals::take().unwrap();
|
||||||
let _pins = peripherals.pins;
|
let pins = peripherals.pins;
|
||||||
|
|
||||||
let (led_tx, _led_rx) = mpsc::channel();
|
let (led_tx, _led_rx) = mpsc::channel();
|
||||||
// LED control thread
|
// LED control thread
|
||||||
// led_control_loop(pins.gpio0, peripherals.rmt.channel0, led_rx);
|
// led_control_loop(pins.gpio0, peripherals.rmt.channel0, led_rx);
|
||||||
|
|
||||||
|
// BUTTON thread
|
||||||
|
// button_loop(pins.gpio8, led_tx.clone());
|
||||||
|
|
||||||
|
// thread::sleep(Duration::from_secs(100));
|
||||||
|
|
||||||
led_tx.send(Status::MountingSDCard).unwrap();
|
led_tx.send(Status::MountingSDCard).unwrap();
|
||||||
println!("About to mount the sdcard...");
|
println!("About to mount the sdcard...");
|
||||||
while let Err(_e) = mount_sd_card() {
|
while let Err(_e) = mount_sd_card() {
|
||||||
|
|||||||
50
sphinx-key/src/periph/button.rs
Normal file
50
sphinx-key/src/periph/button.rs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
use crate::core::events::Status;
|
||||||
|
use esp_idf_hal::gpio;
|
||||||
|
use esp_idf_hal::gpio::*;
|
||||||
|
use std::sync::mpsc;
|
||||||
|
use std::thread;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
const MILLIS: u16 = 10_000;
|
||||||
|
|
||||||
|
const PAUSE: u16 = 15;
|
||||||
|
|
||||||
|
pub fn button_loop(gpio8: gpio::Gpio8, tx: mpsc::Sender<Status>) {
|
||||||
|
thread::spawn(move || {
|
||||||
|
let mut button = PinDriver::input(gpio8).unwrap();
|
||||||
|
button.set_pull(Pull::Up).unwrap();
|
||||||
|
let mut high = false;
|
||||||
|
let mut high_times = 0;
|
||||||
|
let mut low_times = 0;
|
||||||
|
loop {
|
||||||
|
// we are using thread::sleep here to make sure the watchdog isn't triggered
|
||||||
|
thread::sleep(Duration::from_millis(PAUSE.into()));
|
||||||
|
if button.is_high() {
|
||||||
|
if !high {
|
||||||
|
high = true;
|
||||||
|
log::info!("=> GPIO8 HIGH!");
|
||||||
|
high_times = 0;
|
||||||
|
}
|
||||||
|
if high {
|
||||||
|
high_times = high_times + 1;
|
||||||
|
if PAUSE * high_times > MILLIS {
|
||||||
|
// stayed not held down
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if high {
|
||||||
|
high = false;
|
||||||
|
log::info!("=> GPIO8 LOW!");
|
||||||
|
low_times = 0;
|
||||||
|
}
|
||||||
|
if !high {
|
||||||
|
low_times = low_times + 1;
|
||||||
|
if PAUSE * low_times > MILLIS {
|
||||||
|
// stayed held down
|
||||||
|
tx.send(Status::Reset1).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
use crate::core::events::Status;
|
use crate::core::events::Status;
|
||||||
// use embedded_hal::delay::blocking::DelayUs;
|
|
||||||
use esp_idf_hal::delay::FreeRtos;
|
|
||||||
use esp_idf_hal::rmt::config::TransmitConfig;
|
use esp_idf_hal::rmt::config::TransmitConfig;
|
||||||
use esp_idf_hal::rmt::{FixedLengthSignal, PinState, Pulse, TxRmtDriver};
|
use esp_idf_hal::rmt::{FixedLengthSignal, PinState, Pulse, TxRmtDriver};
|
||||||
use esp_idf_hal::{gpio, rmt};
|
use esp_idf_hal::{gpio, rmt};
|
||||||
@@ -84,7 +82,8 @@ impl Led {
|
|||||||
}
|
}
|
||||||
// Set high and wait
|
// Set high and wait
|
||||||
tx.start_blocking(&signal).unwrap();
|
tx.start_blocking(&signal).unwrap();
|
||||||
FreeRtos::delay_ms(self.blink_length);
|
// FreeRtos::delay_ms(self.blink_length);
|
||||||
|
thread::sleep(Duration::from_millis(self.blink_length.into()));
|
||||||
// Set low
|
// Set low
|
||||||
let mut signal = FixedLengthSignal::<24>::new();
|
let mut signal = FixedLengthSignal::<24>::new();
|
||||||
for i in 0..24 {
|
for i in 0..24 {
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
|
pub mod button;
|
||||||
pub mod led;
|
pub mod led;
|
||||||
pub mod sd;
|
pub mod sd;
|
||||||
|
|||||||
66
sphinx-key/up.sh
Executable file
66
sphinx-key/up.sh
Executable file
@@ -0,0 +1,66 @@
|
|||||||
|
check_exists() {
|
||||||
|
command -v "$1" > /dev/null
|
||||||
|
}
|
||||||
|
check_port() {
|
||||||
|
cargo espflash board-info "$1" &> /dev/null
|
||||||
|
}
|
||||||
|
if ! check_exists esptool.py
|
||||||
|
then
|
||||||
|
echo "esptool.py not installed!"
|
||||||
|
echo "install with this command: pip install esptool"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! check_exists ldproxy
|
||||||
|
then
|
||||||
|
echo "ldproxy not installed!"
|
||||||
|
echo "install with this command: cargo install ldproxy"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! check_exists cargo-espflash
|
||||||
|
then
|
||||||
|
echo "cargo-espflash not installed!"
|
||||||
|
echo "install with this command: cargo install cargo-espflash"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -z "$SSID" ]
|
||||||
|
then
|
||||||
|
echo "Please set environment variable SSID to the SSID of the wifi you'll use to configure your sphinx-key."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -z "$PASS" ]
|
||||||
|
then
|
||||||
|
echo "Please set environment variable PASS to the password of the wifi you'll use to configure your sphinx-key."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ ${#PASS} -lt 8 ]
|
||||||
|
then
|
||||||
|
echo "Please set PASS to a password longer than 7 characters."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
for FILE in /dev/tty.*
|
||||||
|
do
|
||||||
|
# Check for port on macOS
|
||||||
|
if check_port $FILE
|
||||||
|
then
|
||||||
|
PORT=$FILE
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$PORT" ]
|
||||||
|
then
|
||||||
|
# Check for port on linux
|
||||||
|
if check_port /dev/ttyUSB0
|
||||||
|
then
|
||||||
|
PORT=/dev/ttyUSB0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -z "$PORT" ]
|
||||||
|
then
|
||||||
|
echo "ESP likely not connected! Exiting now."
|
||||||
|
echo "Make sure the ESP is connected with a data USB cable, and try again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cargo build --release &&
|
||||||
|
esptool.py --chip esp32c3 elf2image target/riscv32imc-esp-espidf/release/sphinx-key &&
|
||||||
|
esptool.py --chip esp32c3 -p $PORT -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 4MB 0x10000 target/riscv32imc-esp-espidf/release/sphinx-key.bin &&
|
||||||
|
espmonitor $PORT
|
||||||
Reference in New Issue
Block a user