mirror of
https://github.com/stakwork/sphinx-key.git
synced 2025-12-18 07:44:21 +01:00
use esp idf 4.3.2
This commit is contained in:
@@ -22,7 +22,7 @@ Find the path to your `riscv32-esp-elf-gcc` binary within the `.embuild` dir:
|
||||
|
||||
### flash release
|
||||
|
||||
`espflash target/riscv32imc-esp-espidf/release/sphinx-key`
|
||||
`espflash target/riscv32imc-esp-espidf/release/sphinx-key --monitor`
|
||||
|
||||
### monitor
|
||||
|
||||
@@ -89,3 +89,5 @@ espflash save-image esp32-c3 target/riscv32imc-esp-espidf/debug/sphinx-key ./asd
|
||||
espflash save-image esp32-c3 target/riscv32imc-esp-espidf/release/sphinx-key ./test-flash
|
||||
|
||||
espflash board-info
|
||||
|
||||
export CC=$PWD/.embuild/espressif/tools/riscv32-esp-elf/esp-2021r2-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc
|
||||
@@ -3,11 +3,10 @@ use lightning_signer::Arc;
|
||||
use sphinx_key_parser::MsgDriver;
|
||||
use vls_protocol::msgs::{self, read_serial_request_header, write_serial_response_header, Message};
|
||||
use vls_protocol::serde_bolt::WireString;
|
||||
use vls_protocol_signer::lightning_signer;
|
||||
use vls_protocol_signer::vls_protocol;
|
||||
|
||||
pub use vls_protocol::model::PubKey;
|
||||
pub use vls_protocol_signer::handler::{Handler, RootHandler};
|
||||
pub use vls_protocol_signer::lightning_signer;
|
||||
pub use vls_protocol_signer::vls_protocol;
|
||||
use vls_protocol::model::PubKey;
|
||||
use vls_protocol_signer::handler::{Handler, RootHandler};
|
||||
|
||||
pub struct InitResponse {
|
||||
pub root_handler: RootHandler,
|
||||
|
||||
@@ -24,11 +24,11 @@ rustflags = ["-C", "default-linker-libraries"]
|
||||
[unstable]
|
||||
|
||||
build-std = ["std", "panic_abort"]
|
||||
#build-std-features = ["panic_immediate_abort"] # Required for older ESP-IDF versions without a realpath implementation
|
||||
build-std-features = ["panic_immediate_abort"] # Required for older ESP-IDF versions without a realpath implementation
|
||||
|
||||
[env]
|
||||
# Note: these variables are not used when using pio builder
|
||||
# Enables the esp-idf-sys "native" build feature (`cargo build --features native`) to build against ESP-IDF stable (v4.4)
|
||||
ESP_IDF_VERSION = { value = "branch:release/v4.4" }
|
||||
#ESP_IDF_VERSION = { value = "branch:release/v4.4" }
|
||||
# Enables the esp-idf-sys "native" build feature (`cargo build --features native`) to build against ESP-IDF master (mainline)
|
||||
#ESP_IDF_VERSION = { value = "master" }
|
||||
|
||||
4
sphinx-key/.gitignore
vendored
Normal file
4
sphinx-key/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/.vscode
|
||||
/.embuild
|
||||
/target
|
||||
/Cargo.lock
|
||||
@@ -19,8 +19,8 @@ pio = ["esp-idf-sys/pio"]
|
||||
pingpong = []
|
||||
|
||||
[dependencies]
|
||||
sphinx-key-signer = { path = "../signer", optional = true }
|
||||
esp-idf-sys = { version = "0.31.5", features = ["binstart"] }
|
||||
sphinx-key-signer = { path = "../signer", optional = true }
|
||||
embedded-svc = { version = "0.21.2" }
|
||||
esp-idf-svc = "0.41"
|
||||
esp-idf-hal = "0.37"
|
||||
@@ -39,3 +39,4 @@ anyhow = "1"
|
||||
[[bin]]
|
||||
name = "clear"
|
||||
path = "src/clear.rs"
|
||||
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta name="description" content="sphinxkey" />
|
||||
<meta charset="utf-8">
|
||||
<title>Sphinx Key</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;,">
|
||||
<style>
|
||||
html {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
}
|
||||
body{
|
||||
padding:0;
|
||||
background: #292a2d;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
#logo{
|
||||
margin-top:25px;
|
||||
}
|
||||
input {
|
||||
margin-top:10px;
|
||||
height:32px;
|
||||
width:230px;
|
||||
padding-left:15px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
button {
|
||||
margin-top:20px;
|
||||
height:40px;
|
||||
width:108px;
|
||||
color:white;
|
||||
font-weight: bold;
|
||||
border-radius: 20px;
|
||||
background: #618AFF;
|
||||
cursor: pointer;
|
||||
}
|
||||
button:disabled {
|
||||
cursor:default;
|
||||
background:grey;
|
||||
}
|
||||
@keyframes spin {
|
||||
from {
|
||||
transform:rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform:rotate(360deg);
|
||||
}
|
||||
}
|
||||
#button svg {
|
||||
animation-name: spin;
|
||||
animation-duration: 600ms;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
}
|
||||
#loading {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<svg id="logo" width="194px" height="186px" viewBox="0 0 194 186" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path fill="white" transform="translate(-508.000000, -189.000000)" stroke-width="1" d="M667.21,214.51 C658.045169,206.151145 647.39915,199.578356 635.82,195.13 C625.907772,191.21621 615.366017,189.139033 604.71,189 L604.64,189 C593.983983,189.139033 583.442228,191.21621 573.53,195.13 C561.95085,199.578356 551.304831,206.151145 542.14,214.51 C526.56,228.7 508,254.87 508,299.01 C508.002384,301.229806 509.18759,303.280098 511.11,304.39 C511.3,304.5 529.85,315.39 533.38,336.77 C535.8,351.44 545.74,362.71 562.12,369.36 C569.522132,372.317389 577.318819,374.170534 585.26,374.86 C586.972704,374.964831 588.652634,374.357474 589.902326,373.181627 C591.152018,372.00578 591.860447,370.36591 591.86,368.65 L591.86,324.52 C595.931833,325.717067 600.155885,326.316653 604.4,326.3 C608.837411,326.319158 613.252794,325.675389 617.5,324.39 L617.5,368.65 C617.5,370.299647 618.15532,371.881728 619.321796,373.048204 C620.488272,374.21468 622.070353,374.87 623.72,374.87 L624.1,374.87 C632.041181,374.180534 639.837868,372.327389 647.24,369.37 C663.6,362.72 673.54,351.45 676,336.77 C677.588215,327.719728 681.863657,319.357004 688.27,312.77 C691.228816,309.557963 694.589929,306.74135 698.27,304.39 C700.19241,303.280098 701.377616,301.229806 701.38,299.01 C701.34,254.87 682.78,228.7 667.21,214.51 Z M604.64,201.43 L604.71,201.43 C617.38,201.43 635.81,205.99 652.35,218.35 L641.43,239.24 L567.63,239.24 L556.93,218.4 C573.49,206 592,201.43 604.64,201.43 Z M545.65,334.77 C542.12,313.39 527.11,300.48 520.48,295.72 C521.29,261.14 534.75,239.52 547.28,226.83 L557.6,246.93 L557.65,273.15 C557.6448,282.683193 559.914304,292.08004 564.27,300.56 C567.824721,307.643965 573.02275,313.774622 579.43,318.44 L579.43,361.54 C568.77,359.48 548.7,353.22 545.65,334.77 Z M575.3,294.77 C571.858657,288.054866 570.069114,280.615578 570.08,273.07 L570.079951,251.64 L639,251.64 L638.81,272.13 C638.761448,279.909114 636.94573,287.575481 633.5,294.55 C629.09,303.34 620.5,313.83 604.44,313.83 C587.69,313.87 579,301.93 575.3,294.77 Z M663.69,334.77 C662,345.01 654.98,352.77 642.82,357.77 C638.655184,359.452348 634.334139,360.718515 629.92,361.55 L629.92,318.12 C636.158361,313.363256 641.179183,307.194329 644.57,300.12 C648.863933,291.449073 651.131029,281.915644 651.2,272.24 L651.43,246.92 L662,226.77 C674.55,239.45 688.06,261.08 688.87,295.77 C682.23,300.46 667.22,313.37 663.69,334.77 Z" id="Shape"></path>
|
||||
</svg>
|
||||
|
||||
<p style="max-width:260px;text-align:center;margin-top:32px;">
|
||||
Enter your WiFi credentials and MQTT Broker to connect you Sphinx Key
|
||||
</p>
|
||||
|
||||
<input id="ssid" placeholder="WiFi SSID" />
|
||||
|
||||
<input id="pass" placeholder="Password" />
|
||||
|
||||
<input id="broker" placeholder="Broker" />
|
||||
|
||||
<button id="button" type="submit">
|
||||
<svg id="loading" height="16" width="16" viewbox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="white" stroke="grey" d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 0 0-94.3-139.9 437.71 437.71 0 0 0-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z" />
|
||||
</svg>
|
||||
<span style="margin:0 8px;">OK</span>
|
||||
</button>
|
||||
|
||||
<p id="msg" style="max-width:260px;text-align:center;margin-top:32px;"></p>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
function get(id){
|
||||
return document.getElementById(id)
|
||||
}
|
||||
const params = getParams()
|
||||
|
||||
const button = get('button')
|
||||
button.disabled = true
|
||||
const ssid = get('ssid')
|
||||
const pass = get('pass')
|
||||
const broker = get('broker')
|
||||
const loading = get('loading')
|
||||
const msg = get('msg')
|
||||
|
||||
if(params['ssid']) {
|
||||
ssid.value = params.ssid
|
||||
}
|
||||
if(params['pass']) {
|
||||
pass.value = params.pass
|
||||
}
|
||||
if(params['broker']) {
|
||||
broker.value = params.broker
|
||||
}
|
||||
|
||||
function checker() {
|
||||
if(ssid.value && broker.value && button.disabled) {
|
||||
button.disabled = false
|
||||
} else if(!ssid.value || !broker.value) {
|
||||
button.disabled = true
|
||||
}
|
||||
}
|
||||
ssid.onchange = function(){
|
||||
checker()
|
||||
}
|
||||
ssid.oninput = function(){
|
||||
checker()
|
||||
}
|
||||
broker.onchange = function(){
|
||||
checker()
|
||||
}
|
||||
broker.oninput = function(){
|
||||
checker()
|
||||
}
|
||||
|
||||
button.onclick = function(e) {
|
||||
fetchWithTimeout('/config?config=' +
|
||||
encodeURIComponent(JSON.stringify({
|
||||
ssid: ssid.value,
|
||||
pass: pass.value || '',
|
||||
broker: broker.value,
|
||||
})), {
|
||||
method:'POST',
|
||||
timeout:3000,
|
||||
})
|
||||
.then(r=> r.json())
|
||||
.then(finish)
|
||||
.catch(e=> {
|
||||
console.log(e)
|
||||
msg.innerHTML = 'Failed to post configuration to the Sphinx Key'
|
||||
})
|
||||
}
|
||||
async function finish(r) {
|
||||
console.log("done!", r)
|
||||
loading.style.display = 'inline-block'
|
||||
button.disabled = true
|
||||
await sleep(2000)
|
||||
loading.style.display = 'none'
|
||||
button.disabled = false
|
||||
msg.innerHTML = 'Please unplug your Sphinx Key and plug it back in'
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms))
|
||||
}
|
||||
|
||||
function getParams() {
|
||||
const ps = new URLSearchParams(window.location.search);
|
||||
const r = {};
|
||||
for (const [k, v] of ps) {
|
||||
r[k] = v;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
async function fetchWithTimeout(resource, options = {}) {
|
||||
const { timeout = 5000 } = options;
|
||||
const controller = new AbortController();
|
||||
const id = setTimeout(() => controller.abort(), timeout);
|
||||
const response = await fetch(resource, {
|
||||
...options,
|
||||
signal: controller.signal
|
||||
});
|
||||
clearTimeout(id);
|
||||
return response;
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
115
sphinx-key/docs/README.md
Normal file
115
sphinx-key/docs/README.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# sphinx_key
|
||||
|
||||
## Dev Containers
|
||||
This repository offers Dev Containers supports for:
|
||||
- [Gitpod](https://gitpod.io/)
|
||||
- ["Open in Gitpod" button](https://www.gitpod.io/docs/getting-started#open-in-gitpod-button)
|
||||
- [VS Code Dev Containers](https://code.visualstudio.com/docs/remote/containers#_quick-start-open-an-existing-folder-in-a-container)
|
||||
- [GitHub Codespaces](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace)
|
||||
> **Note**
|
||||
>
|
||||
> In order to use Gitpod the project needs to be published in a GitLab, GitHub,
|
||||
> or Bitbucket repository.
|
||||
>
|
||||
> In [order to use GitHub Codespaces](https://github.com/features/codespaces#faq)
|
||||
> the project needs to be published in a GitHub repository and the user needs
|
||||
> to be part of the Codespaces beta or have the project under an organization.
|
||||
|
||||
If using VS Code or GitHub Codespaces, you can pull the image instead of building it
|
||||
from the Dockerfile by selecting the `image` property instead of `build` in
|
||||
`.devcontainer/devcontainer.json`.
|
||||
|
||||
When using Dev Containers, some tooling to facilitate building, flashing and
|
||||
simulating in Wokwi is also added.
|
||||
### Build
|
||||
- Terminal approach:
|
||||
|
||||
```
|
||||
scripts/build.sh [debug | release]
|
||||
```
|
||||
> If no argument is passed, `release` will be used as default
|
||||
|
||||
|
||||
- UI approach:
|
||||
|
||||
The default build task is already set to build the project, and it can be used
|
||||
in VS Code and Gitpod:
|
||||
- From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Build Task` command.
|
||||
- `Terminal`-> `Run Build Task` in the menu.
|
||||
- With `Ctrl-Shift-B` or `Cmd-Shift-B`.
|
||||
- From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and
|
||||
select `Build`.
|
||||
- From UI: Press `Build` on the left side of the Status Bar.
|
||||
|
||||
### Flash
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> When using GitHub Codespaces, we need to make the ports
|
||||
> public, [see instructions](https://docs.github.com/en/codespaces/developing-in-codespaces/forwarding-ports-in-your-codespace#sharing-a-port).
|
||||
|
||||
- Terminal approach:
|
||||
- Using `flash.sh` script:
|
||||
|
||||
```
|
||||
scripts/flash.sh [debug | release]
|
||||
```
|
||||
> If no argument is passed, `release` will be used as default
|
||||
|
||||
- UI approach:
|
||||
- From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and
|
||||
select `Build & Flash`.
|
||||
- From UI: Press `Build & Flash` on the left side of the Status Bar.
|
||||
- Any alternative flashing method from host machine.
|
||||
|
||||
|
||||
### Wokwi Simulation
|
||||
When using a custom Wokwi project, please change the `WOKWI_PROJECT_ID` in
|
||||
`run-wokwi.sh`. If no project id is specified, a DevKit for esp32c3 will be
|
||||
used.
|
||||
> **Warning**
|
||||
>
|
||||
> ESP32-S3 is not available in Wokwi
|
||||
|
||||
- Terminal approach:
|
||||
|
||||
```
|
||||
scripts/run-wokwi.sh [debug | release]
|
||||
```
|
||||
> If no argument is passed, `release` will be used as default
|
||||
|
||||
- UI approach:
|
||||
|
||||
The default test task is already set to build the project, and it can be used
|
||||
in VS Code and Gitpod:
|
||||
- From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Test Task` command
|
||||
- With `Ctrl-Shift-,` or `Cmd-Shift-,`
|
||||
> **Note**
|
||||
>
|
||||
> This Shortcut is not available in Gitpod by default.
|
||||
- From the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl-Shift-P` or `Cmd-Shift-P`) run the `Tasks: Run Task` command and
|
||||
select `Build & Run Wokwi`.
|
||||
- From UI: Press `Build & Run Wokwi` on the left side of the Status Bar.
|
||||
|
||||
> **Warning**
|
||||
>
|
||||
> The simulation will pause if the browser tab is in the background.This may
|
||||
> affect the execution, specially when debuging.
|
||||
|
||||
#### Debuging with Wokwi
|
||||
|
||||
Wokwi offers debugging with GDB.
|
||||
|
||||
- Terminal approach:
|
||||
```
|
||||
$HOME/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gdb target/riscv32imc-esp-espidf/debug/sphinx_key -ex "target remote localhost:9333"
|
||||
```
|
||||
|
||||
> [Wokwi Blog: List of common GDB commands for debugging.](https://blog.wokwi.com/gdb-avr-arduino-cheatsheet/?utm_source=urish&utm_medium=blog)
|
||||
- UI approach:
|
||||
1. Run the Wokwi Simulation in `debug` profile
|
||||
2. Go to `Run and Debug` section of the IDE (`Ctrl-Shift-D or Cmd-Shift-D`)
|
||||
3. Start Debugging by pressing the Play Button or pressing `F5`
|
||||
4. Choose the proper user:
|
||||
- `esp` when using VS Code or GitHub Codespaces
|
||||
- `gitpod` when using Gitpod
|
||||
@@ -1,212 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>HMQ CLIENT</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/bulma@0.6.1/css/bulma.css">
|
||||
<style>
|
||||
body{
|
||||
min-height: 100vh;
|
||||
background: #232327;
|
||||
}
|
||||
.title{
|
||||
color:#26b1b2;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="app">
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h1 class="title">Connection
|
||||
<small v-bind:class="{'has-text-danger': connection.error, 'has-text-grey': !connection.error}">{{ connection.state }}
|
||||
<span v-if="connection.error">({{ connection.error }})</span>
|
||||
</small>
|
||||
</h1>
|
||||
<div class="field is-grouped">
|
||||
<p class="control">
|
||||
<input class="input" v-model="username" placeholder="Username">
|
||||
</p>
|
||||
<p class="control">
|
||||
<input class="input" v-model="password" placeholder="Password">
|
||||
</p>
|
||||
<p class="control">
|
||||
<button class="button is-primary" v-on:click="mqtt.connect()" v-bind:disabled="connected">Connect</button>
|
||||
</p>
|
||||
<p class="control">
|
||||
<button class="button" v-on:click="mqtt.disconnect()" v-bind:disabled="!connected">Disconnect</button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h1 class="title">Subscriptions</h1>
|
||||
<div class="field is-grouped">
|
||||
<p class="control">
|
||||
<input class="input" v-model="subscribe.filter" placeholder="Topic">
|
||||
</p>
|
||||
<p class="control">
|
||||
<input class="input" v-model="subscribe.qos" placeholder="QoS">
|
||||
</p>
|
||||
<p class="control">
|
||||
<button class="button" v-on:click="mqtt.subscribe(subscribe.filter, subscribe.qos)" v-bind:disabled="!connected">Subscribe</button>
|
||||
</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="(info, filter) in subscriptions" class="field is-grouped">
|
||||
<div class="control">
|
||||
<div class="tags has-addons">
|
||||
<span class="tag">QoS</span>
|
||||
<span class="tag is-dark">{{ info.qos }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control">
|
||||
<div class="tags has-addons">
|
||||
<span class="tag">Topic</span>
|
||||
<span class="tag is-primary">{{ filter }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<a class="tag is-delete is-danger" v-on:click="mqtt.unsubscribe(filter)" v-bind:disabled="!connected"></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h1 class="title">Messages</h1>
|
||||
<div class="field is-grouped">
|
||||
<p class="control">
|
||||
<input class="input" v-model="publish.topic" placeholder="Topic">
|
||||
</p>
|
||||
<p class="control">
|
||||
<input class="input" v-model="publish.payload" placeholder="Payload">
|
||||
</p>
|
||||
<p class="control">
|
||||
<button class="button" v-on:click="mqtt.publish(publish.topic, publish.payload)" v-bind:disabled="!connected">Publish</button>
|
||||
</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="message in messages">
|
||||
<code>{{ message.topic }}</code>:
|
||||
<code>{{ message.payload }}</code>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<script src="https://unpkg.com/paho-mqtt@1.1.0"></script>
|
||||
<script src="https://unpkg.com/vue@2.5.9"></script>
|
||||
<script>
|
||||
const params = getParams()
|
||||
const IP = params.ip || '52.91.253.115'
|
||||
const PORT = params.port || 1888
|
||||
console.log(IP, PORT)
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
created() {
|
||||
var mqtt = new Paho.Client(IP, Number(PORT), "/ws", "client1");
|
||||
mqtt.onConnectionLost = ({ errorCode, errorMessage }) => {
|
||||
this.connection.state = 'disconnected';
|
||||
this.connection.error = (errorCode === 0) ? '' : errorMessage;
|
||||
}
|
||||
mqtt.onMessageArrived = ({ payloadBytes, destinationName, qos }) => {
|
||||
this.messages.unshift({
|
||||
received: new Date(),
|
||||
payload: String.fromCharCode.apply(String, payloadBytes),
|
||||
payload_raw: payloadBytes,
|
||||
topic: destinationName,
|
||||
qos,
|
||||
})
|
||||
this.messages = this.messages.slice(0, 10)
|
||||
},
|
||||
this.mqtt = {
|
||||
connect: () => {
|
||||
this.connection.state = 'connecting';
|
||||
this.connection.error = '';
|
||||
console.log(this.username, this.password)
|
||||
mqtt.connect({
|
||||
userName: this.username || '',
|
||||
password: this.password || '',
|
||||
onSuccess: () => {
|
||||
this.connection.state = 'connected';
|
||||
},
|
||||
onFailure: ({ errorCode, errorMessage }) => {
|
||||
this.connection.state = 'connection failed';
|
||||
this.connection.error = errorMessage;
|
||||
},
|
||||
});
|
||||
},
|
||||
disconnect: () => {
|
||||
mqtt.disconnect();
|
||||
this.subscriptions = {};
|
||||
},
|
||||
publish: (topic, payload) => {
|
||||
console.log('publish',topic,payload)
|
||||
mqtt.send(topic, payload);
|
||||
},
|
||||
subscribe: (filter, qos) => {
|
||||
qos = parseInt(qos);
|
||||
Vue.set(this.subscriptions, filter, {
|
||||
state: 'subscribing',
|
||||
qos,
|
||||
})
|
||||
mqtt.subscribe(filter, {
|
||||
qos,
|
||||
onSuccess: () => {
|
||||
this.subscriptions[filter].state = 'subscribed';
|
||||
}
|
||||
});
|
||||
},
|
||||
unsubscribe: (filter) => {
|
||||
if (this.subscriptions[filter]) {
|
||||
this.subscriptions[filter].state = 'unsubscribing';
|
||||
mqtt.unsubscribe(filter, {
|
||||
onSuccess: () => {
|
||||
Vue.delete(this.subscriptions, filter);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
data: {
|
||||
username: '',
|
||||
password: '',
|
||||
connection: {
|
||||
state: 'idle',
|
||||
error: '',
|
||||
},
|
||||
subscribe: {
|
||||
filter: '',
|
||||
qos: 0,
|
||||
},
|
||||
publish: {
|
||||
topic: '',
|
||||
payload: '',
|
||||
},
|
||||
subscriptions: {},
|
||||
messages: [],
|
||||
},
|
||||
computed: {
|
||||
connected() { return this.connection.state == 'connected'; },
|
||||
}
|
||||
});
|
||||
function getParams() {
|
||||
const ps = new URLSearchParams(window.location.search);
|
||||
const r = {};
|
||||
for (const [k, v] of ps) {
|
||||
r[k] = v;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,3 +0,0 @@
|
||||
cargo build --features pingpong
|
||||
espflash target/riscv32imc-esp-espidf/debug/sphinx-key
|
||||
espmonitor /dev/tty.usbserial-1420
|
||||
24
sphinx-key/scripts/build.sh
Executable file
24
sphinx-key/scripts/build.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Gitpod and VsCode Codespaces tasks do not source the user environment
|
||||
if [ "${USER}" == "gitpod" ]; then
|
||||
which idf.py >/dev/null || {
|
||||
source ~/export-esp.sh > /dev/null 2>&1
|
||||
}
|
||||
elif [ "${CODESPACE_NAME}" != "" ]; then
|
||||
which idf.py >/dev/null || {
|
||||
source ~/export-esp.sh > /dev/null 2>&1
|
||||
}
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
""|"release")
|
||||
cargo build --release
|
||||
;;
|
||||
"debug")
|
||||
cargo build
|
||||
;;
|
||||
*)
|
||||
echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported"
|
||||
exit 1;;
|
||||
esac
|
||||
22
sphinx-key/scripts/flash.sh
Executable file
22
sphinx-key/scripts/flash.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_MODE=""
|
||||
case "$1" in
|
||||
""|"release")
|
||||
bash scripts/build.sh
|
||||
BUILD_MODE="release"
|
||||
;;
|
||||
"debug")
|
||||
bash scripts/build.sh debug
|
||||
BUILD_MODE="debug"
|
||||
;;
|
||||
*)
|
||||
echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
export ESP_ARCH=riscv32imc-esp-espidf
|
||||
|
||||
web-flash --chip esp32c3 target/${ESP_ARCH}/${BUILD_MODE}/sphinx-key
|
||||
36
sphinx-key/scripts/run-wokwi.sh
Executable file
36
sphinx-key/scripts/run-wokwi.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_MODE=""
|
||||
case "$1" in
|
||||
""|"release")
|
||||
bash scripts/build.sh
|
||||
BUILD_MODE="release"
|
||||
;;
|
||||
"debug")
|
||||
bash scripts/build.sh debug
|
||||
BUILD_MODE="debug"
|
||||
;;
|
||||
*)
|
||||
echo "Wrong argument. Only \"debug\"/\"release\" arguments are supported"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
if [ "${USER}" == "gitpod" ];then
|
||||
gp_url=$(gp url 9012)
|
||||
echo "gp_url=${gp_url}"
|
||||
export WOKWI_HOST=${gp_url:8}
|
||||
elif [ "${CODESPACE_NAME}" != "" ];then
|
||||
export WOKWI_HOST=${CODESPACE_NAME}-9012.githubpreview.dev
|
||||
fi
|
||||
|
||||
export ESP_ARCH=riscv32imc-esp-espidf
|
||||
|
||||
# TODO: Update with your Wokwi Project
|
||||
export WOKWI_PROJECT_ID=""
|
||||
if [ "${WOKWI_PROJECT_ID}" == "" ]; then
|
||||
wokwi-server --chip esp32c3 target/${ESP_ARCH}/${BUILD_MODE}/sphinx-key
|
||||
else
|
||||
wokwi-server --chip esp32c3 --id ${WOKWI_PROJECT_ID} target/${ESP_ARCH}/${BUILD_MODE}/sphinx-key
|
||||
fi
|
||||
@@ -6,5 +6,5 @@ CONFIG_ESP_MAIN_TASK_STACK_SIZE=7000
|
||||
#CONFIG_FREERTOS_HZ=1000
|
||||
|
||||
# Workaround for https://github.com/espressif/esp-idf/issues/7631
|
||||
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
|
||||
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n
|
||||
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
|
||||
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::conn::mqtt::{RETURN_TOPIC, TOPIC, QOS};
|
||||
use sphinx_key_signer::{self, InitResponse, PubKey};
|
||||
use sphinx_key_signer::{self, InitResponse};
|
||||
use sphinx_key_signer::vls_protocol::model::PubKey;
|
||||
use std::sync::mpsc;
|
||||
|
||||
use esp_idf_sys;
|
||||
|
||||
9
sphinx-key/src/test.rs
Normal file
9
sphinx-key/src/test.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
|
||||
|
||||
fn main() {
|
||||
// Temporary. Will disappear once ESP-IDF 4.4 is released, but for now it is necessary to call this function once,
|
||||
// or else some patches to the runtime implemented by esp-idf-sys might not link properly.
|
||||
esp_idf_sys::link_patches();
|
||||
|
||||
println!("Hello, world!");
|
||||
}
|
||||
Reference in New Issue
Block a user