REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
sys.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3//
4// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
5
6#pragma once
7
8#include "build/distributor.h"
9#include "lucidac/front_panel_signaling.h"
10#include "mode/counters.h"
11#include "nvmconfig/vendor.h"
12#include "protocol/handler.h"
13#include "protocol/jsonl_logging.h"
14#include "utils/hashflash.h"
15#include "utils/reboot.h"
16
17namespace msg {
18namespace handlers {
19
21class GetSystemIdent : public MessageHandler {
22public:
23 utils::status replyWithObject(const Request& req, JsonObject &msg_out) override {
24 msg_out["serial"] = nvmconfig::VendorOTP::get().serial_number;
25 msg_out["mac"] = net::StartupConfig::get().mac;
26
27 if (req.msg_in.containsKey("blink")) {
28 leds::indicate_error(); // this is just blocking blinking for a few seconds
29 }
30
31 dist::write_to_json(msg_out.createNestedObject("fw_build"));
32 loader::flashimage::toJson(msg_out.createNestedObject("fw_image"));
33 return utils::status::success();
34 }
35};
36
37#ifdef ANABRID_WRITE_EEPROM
38
40class WriteSystemIdent : public MessageHandler {
41public:
42 utils::status replyWithObject(const Request& req, JsonObject &msg_out) override {
43 auto &persistent = nvmconfig::PersistentSettingsWriter::get();
44 auto &vendor = nvmconfig::VendorOTP::get();
45 persistent.read_from_eeprom(); // at first run, this will result in default values
46 if (req.msg_in.containsKey("vendor"))
47 vendor.fromJson(req.msg_in["vendor"], nvmconfig::Context::User);
48 bool valid = vendor.is_valid();
49 if (valid)
50 persistent.write_to_eeprom();
51
52 msg_out["valid"] = valid;
53 return utils::status::success();
54 }
55};
56
58class ResetSystemIdent : public MessageHandler {
59public:
60 utils::status replyWithObject(const Request& req, JsonObject &msg_out) override {
61 bool write_to_hardware = req.msg_in["write_to_hardware"];
62 auto &persistent = nvmconfig::PersistentSettingsWriter::get();
63 persistent.reset_defaults(write_to_hardware);
64 return utils::status::success();
65 }
66};
67
69
70class ReadSystemIdent : public MessageHandler {
71public:
72 utils::status replyWithObject(const Request& req, JsonObject &msg_out)override {
73 auto &persistent = nvmconfig::PersistentSettingsWriter::get();
74 if (req.msg_in.containsKey("read_from_eeprom"))
75 persistent.read_from_eeprom();
76
77 // dump infos about all subsystems, including passwords, etc
78 auto subsystems = msg_out.createNestedObject("subsystems");
79 for (auto const &sys : nvmconfig::PersistentSettingsWriter::get().subsystems) {
80 auto sysout = subsystems.createNestedObject(sys->name());
81 sys->toJson(sysout, nvmconfig::Context::User);
82 }
83
84 return utils::status::success();
85 }
86};
87#endif
88
90class RebootHandler : public MessageHandler {
91public:
92 utils::status replyWithObject(const Request& req, JsonObject &msg_out) override {
93 loader::reboot(); // does actually not return
94 return utils::status::success();
95 }
96};
97
99class SyslogHandler : public MessageHandler {
100public:
101 bool replyStreaming(const Request& req, Stream &io) override {
102 msg::StreamingJsonResponse res(io);
103 res.begin_envelope(req);
104 msg::StartupLog::get().stream_to_json(res);
105 res.end_envelope();
106 return true; // = is implemented
107 }
108};
109
110class SystemStats : public MessageHandler {
111public:
112 utils::status replyWithObject(const Request& req, JsonObject &msg_out) override {
113 auto perf_counters = msg_out.createNestedObject("perf_counters");
114 mode::PerformanceCounter::get().to_json(perf_counters);
115 return utils::status::success();
116 }
117};
118
119} // namespace handlers
120} // namespace msg
utils::status replyWithObject(const Request &req, JsonObject &msg_out) override
Definition sys.h:23
utils::status replyWithObject(const Request &req, JsonObject &msg_out) override
Definition sys.h:92
bool replyStreaming(const Request &req, Stream &io) override
Definition sys.h:101
utils::status replyWithObject(const Request &req, JsonObject &msg_out) override
Definition sys.h:112
void reboot()
Just a little generic Teensy reboot routine.
Definition reboot.cpp:7
Definition carrier.h:10