Skip to content

Commit 8eb99c3

Browse files
authored
Merge pull request #125 from HyperloopUPV-H8/ethernet-view/oscilloscope-screenshot
[ethernet-view] Add oscilloscope screenshot feature
2 parents 49c2943 + de541fa commit 8eb99c3

7 files changed

Lines changed: 61 additions & 3 deletions

File tree

common-front/lib/config/config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ export const config = {
1212
websocket: "backend",
1313
uploadableBoards: "backend/uploadableBoards",
1414
},
15+
oscilloscope: {
16+
ip: "192.168.0.100"
17+
},
1518
cameras: {
1619
ip: "192.168.0.9",
1720
port: 4040,
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// vite.config.ts
2+
import { defineConfig } from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/vite/dist/node/index.js";
3+
import react from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/@vitejs/plugin-react/dist/index.mjs";
4+
import typescript from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/@rollup/plugin-typescript/dist/es/index.js";
5+
import tsconfigPaths from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/vite-tsconfig-paths/dist/index.mjs";
6+
import path from "path";
7+
import postcss from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/rollup-plugin-postcss/dist/index.js";
8+
import svgr from "file:///Users/andres/Desktop/Hyper/CODE/h9-software/common-front/node_modules/vite-plugin-svgr/dist/index.js";
9+
var __vite_injected_original_dirname = "/Users/andres/Desktop/Hyper/CODE/h9-software/common-front";
10+
var vite_config_default = defineConfig({
11+
plugins: [react(), tsconfigPaths(), postcss(), svgr()],
12+
server: {
13+
port: 3e3
14+
},
15+
build: {
16+
manifest: true,
17+
minify: false,
18+
reportCompressedSize: true,
19+
lib: {
20+
entry: path.resolve(__vite_injected_original_dirname, "lib/index.ts"),
21+
fileName: "index",
22+
formats: ["es"]
23+
},
24+
rollupOptions: {
25+
external: ["react", "react-dom", "react-redux", "@reduxjs/toolkit"],
26+
plugins: [typescript()]
27+
}
28+
}
29+
});
30+
export {
31+
vite_config_default as default
32+
};
33+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvYW5kcmVzL0Rlc2t0b3AvSHlwZXIvQ09ERS9oOS1zb2Z0d2FyZS9jb21tb24tZnJvbnRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9hbmRyZXMvRGVza3RvcC9IeXBlci9DT0RFL2g5LXNvZnR3YXJlL2NvbW1vbi1mcm9udC92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvYW5kcmVzL0Rlc2t0b3AvSHlwZXIvQ09ERS9oOS1zb2Z0d2FyZS9jb21tb24tZnJvbnQvdml0ZS5jb25maWcudHNcIjsvLyB2aXRlLmNvbmZpZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgdHNjb25maWdQYXRocyBmcm9tIFwidml0ZS10c2NvbmZpZy1wYXRoc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBwb3N0Y3NzIGZyb20gXCJyb2xsdXAtcGx1Z2luLXBvc3Rjc3NcIjtcbmltcG9ydCBzdmdyIGZyb20gXCJ2aXRlLXBsdWdpbi1zdmdyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gICAgcGx1Z2luczogW3JlYWN0KCksIHRzY29uZmlnUGF0aHMoKSwgcG9zdGNzcygpLCBzdmdyKCldLFxuICAgIHNlcnZlcjoge1xuICAgICAgICBwb3J0OiAzMDAwLFxuICAgIH0sXG4gICAgYnVpbGQ6IHtcbiAgICAgICAgbWFuaWZlc3Q6IHRydWUsXG4gICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiB0cnVlLFxuICAgICAgICBsaWI6IHtcbiAgICAgICAgICAgIGVudHJ5OiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcImxpYi9pbmRleC50c1wiKSxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBcImluZGV4XCIsXG4gICAgICAgICAgICBmb3JtYXRzOiBbXCJlc1wiXSxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgZXh0ZXJuYWw6IFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwicmVhY3QtcmVkdXhcIiwgXCJAcmVkdXhqcy90b29sa2l0XCJdLFxuICAgICAgICAgICAgcGx1Z2luczogW3R5cGVzY3JpcHQoKV0sXG4gICAgICAgIH0sXG4gICAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9CO0FBQzdCLE9BQU8sV0FBVztBQUNsQixPQUFPLGdCQUFnQjtBQUN2QixPQUFPLG1CQUFtQjtBQUMxQixPQUFPLFVBQVU7QUFDakIsT0FBTyxhQUFhO0FBQ3BCLE9BQU8sVUFBVTtBQVBqQixJQUFNLG1DQUFtQztBQVN6QyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUN4QixTQUFTLENBQUMsTUFBTSxHQUFHLGNBQWMsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQUEsRUFDckQsUUFBUTtBQUFBLElBQ0osTUFBTTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNILFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLHNCQUFzQjtBQUFBLElBQ3RCLEtBQUs7QUFBQSxNQUNELE9BQU8sS0FBSyxRQUFRLGtDQUFXLGNBQWM7QUFBQSxNQUM3QyxVQUFVO0FBQUEsTUFDVixTQUFTLENBQUMsSUFBSTtBQUFBLElBQ2xCO0FBQUEsSUFDQSxlQUFlO0FBQUEsTUFDWCxVQUFVLENBQUMsU0FBUyxhQUFhLGVBQWUsa0JBQWtCO0FBQUEsTUFDbEUsU0FBUyxDQUFDLFdBQVcsQ0FBQztBQUFBLElBQzFCO0FBQUEsRUFDSjtBQUNKLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
Lines changed: 1 addition & 0 deletions
Loading

ethernet-view/src/components/FormComponents/Button/Button.module.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@
2929
overflow: hidden;
3030
text-overflow: ellipsis;
3131
}
32+
33+
.icon {
34+
width: 75%;
35+
}

ethernet-view/src/components/FormComponents/Button/Button.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@ import { animated, useSpring } from "@react-spring/web";
33
import { lightenHSL } from "utils/color";
44

55
type Props = {
6-
label: string;
6+
label?: string;
7+
icon?: string;
78
onClick?: (ev: React.MouseEvent) => void;
89
disabled?: boolean;
910
color?: string;
1011
className?: string;
1112
};
1213

1314
export const Button = ({
14-
label,
15+
label = undefined,
16+
icon = undefined,
1517
color = "hsl(29, 88%, 57%)",
1618
onClick = () => {},
17-
disabled,
19+
disabled = false,
1820
className = "",
1921
}: Props) => {
2022
const [springs, api] = useSpring(() => ({
@@ -55,6 +57,7 @@ export const Button = ({
5557
})
5658
}
5759
>
60+
{icon && <img src={icon} alt="icon" className={styles.icon}/>}
5861
<span className={styles.label}>{label}</span>
5962
</animated.div>
6063
);

ethernet-view/src/components/Logger/Logger.module.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
}
1010

1111
.state {
12+
flex: 1;
1213
overflow: hidden;
1314
text-overflow: ellipsis;
1415
white-space: nowrap;
1516
font-weight: bold;
1617
}
1718

1819
.buttons {
20+
flex: 2;
1921
width: 10rem;
2022
display: flex;
2123
flex-direction: row;

ethernet-view/src/components/Logger/Logger.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@ import styles from "components/Logger/Logger.module.scss";
22
import { useLogger } from "./useLogger";
33
import { Island } from "components/Island/Island";
44
import { Button } from "components/FormComponents/Button/Button";
5+
import oscilloscope from "assets/svg/oscilloscope.svg";
6+
import { useConfig } from "common";
57

68
export const Logger = () => {
9+
710
const [state, startLogging, stopLogging] = useLogger();
11+
const config = useConfig();
12+
813
return (
914
<Island style={{ height: "min-content" }}>
1015
<div className={styles.logger}>
@@ -24,6 +29,13 @@ export const Logger = () => {
2429
stopLogging();
2530
}}
2631
></Button>
32+
33+
<Button
34+
icon={oscilloscope}
35+
onClick={() => {
36+
window.open(`http://${config.oscilloscope.ip}/screenshot.png`, '_blank');
37+
}}
38+
></Button>
2739
</div>
2840
</div>
2941
</Island>

0 commit comments

Comments
 (0)