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