diff --git a/backend/src/factory.js b/backend/src/factory.js
index ce403c3e7..5897d7bc8 100644
--- a/backend/src/factory.js
+++ b/backend/src/factory.js
@@ -4,17 +4,17 @@
// For example updating the EEPROM
import crypto from "node:crypto"
-// import * as z from "zod"
+import * as z from "zod"
import { read, write } from "../../lib/eeprom.js"
import { procedure, request } from "../../lib/mqtt.js"
-import { setHardwareVersion } from "../../lib/hardware.js"
+import { hardware_versions, setHardwareVersion } from "../../lib/hardware.js"
await procedure("factory/init", async () => {
- const eeprom = await read()
+ let eeprom = await read()
if (eeprom?.custom_data?.eeprom_version !== 0) {
- return {
+ eeprom = {
product_uuid: crypto.randomUUID(),
product_id: "0x0000", // TODO
product_ver: "0x0000", //TODO
@@ -31,14 +31,37 @@ await procedure("factory/init", async () => {
}
}
- return eeprom
+ return { eeprom, hardware_versions }
+})
+
+const Schema = z.object({
+ hardware_version: z.enum(["v3.0", "v2.6"]),
+ serial_number: z.string(),
})
await procedure("factory/update", async (data) => {
- const { hardware_version } = data.custom_data
+ const { hardware_version, serial_number } = Schema.parse(data)
+
+ if (hardware_version === "v3.0") {
+ await write({
+ product_uuid: crypto.randomUUID(),
+ product_id: "0x0000", // TODO
+ product_ver: "0x0000", //TODO
+ vendor: "FairScope",
+ product: "PlanktoScope HAT v3",
+ current_supply: 0,
+ dt_blob: "planktoscope-hat-v3",
+ custom_data: {
+ serial_number,
+ hardware_version: "v3.0",
+ eeprom_version: 0,
+ led_operating_time: 0,
+ },
+ })
+ }
await Promise.all([
- hardware_version && write(data),
+ hardware_version === "v3.0" && write(data),
setHardwareVersion(hardware_version),
])
diff --git a/backend/src/service.js b/backend/src/service.js
index a7b5cf4a0..a68647267 100755
--- a/backend/src/service.js
+++ b/backend/src/service.js
@@ -38,8 +38,11 @@ app.post("/api/reset", async (req, res) => {
app.get("/", async (req, res) => {
const software_config = await readSoftwareConfig()
+ if (!software_config) {
+ return res.redirect(302, "/factory")
+ }
- if (software_config?.user_setup !== true) {
+ if (software_config.user_setup !== true) {
return res.redirect(302, "/ps/node-red-v2/dashboard/setup")
}
diff --git a/frontend/src/pages/factory.jsx b/frontend/src/pages/factory.jsx
index a5dee0637..169abd9ff 100644
--- a/frontend/src/pages/factory.jsx
+++ b/frontend/src/pages/factory.jsx
@@ -6,12 +6,9 @@ import { useSubmission, action } from "@solidjs/router"
import { request } from "../../../lib/mqtt.js"
export default function Factory() {
- const [EEPROM, { refetch }] = createResource(
- "factory/init",
- async (topic) => {
- return request(topic)
- },
- )
+ const [data, { refetch }] = createResource("factory/init", async (topic) => {
+ return request(topic)
+ })
const updateFactoryAction = action(async (data) => {
const {
@@ -58,7 +55,7 @@ export default function Factory() {
@@ -84,7 +81,7 @@ export default function Factory() {
{/* */}
@@ -128,7 +125,7 @@ export default function Factory() {
serial_number
@@ -146,7 +143,7 @@ export default function Factory() {
hardware_version