rk05 new serialization

This commit is contained in:
folkert van heusden 2024-05-14 08:45:31 +02:00
parent cc99ce6e19
commit eda3dd9866
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 14 additions and 21 deletions

View file

@ -25,7 +25,7 @@ static const char * const regnames[] = {
rk05::rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity) : rk05::rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity) :
b(b), b(b),
disk_read_acitivity(disk_read_acitivity), disk_read_acitivity (disk_read_acitivity ),
disk_write_acitivity(disk_write_acitivity) disk_write_acitivity(disk_write_acitivity)
{ {
} }
@ -281,37 +281,31 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
} }
} }
#if IS_POSIX JsonDocument rk05::serialize() const
json_t *rk05::serialize() const
{ {
json_t *j = json_object(); JsonDocument j;
json_t *j_backends = json_array(); JsonArray j_backends;
for(auto & dbe: fhs) for(auto & dbe: fhs)
json_array_append(j_backends, dbe->serialize()); j_backends.add(dbe->serialize());
j["backends"] = j_backends;
json_object_set(j, "backends", j_backends);
for(int regnr=0; regnr<7; regnr++) for(int regnr=0; regnr<7; regnr++)
json_object_set(j, format("register-%d", regnr).c_str(), json_integer(registers[regnr])); j[format("register-%d", regnr)] = registers[regnr];
return j; return j;
} }
rk05 *rk05::deserialize(const json_t *const j, bus *const b) rk05 *rk05::deserialize(const JsonDocument j, bus *const b)
{ {
std::vector<disk_backend *> backends;
rk05 *r = new rk05(b, nullptr, nullptr); rk05 *r = new rk05(b, nullptr, nullptr);
r->begin(); r->begin();
json_t *j_backends = json_object_get(j, "backends"); for(auto j_backend: j["backends"])
for(size_t i=0; i<json_array_size(j_backends); i++) r->access_disk_backends()->push_back(disk_backend::deserialize(j_backend));
r->access_disk_backends()->push_back(disk_backend::deserialize(json_array_get(j_backends, i)));
for(int regnr=0; regnr<7; regnr++) for(int regnr=0; regnr<7; regnr++)
r->registers[regnr] = json_integer_value(json_object_get(j, format("register-%d", regnr).c_str())); r->registers[regnr] = j[format("register-%d", regnr)];
return r; return r;
} }
#endif

7
rk05.h
View file

@ -3,6 +3,7 @@
#pragma once #pragma once
#include <ArduinoJson.h>
#include <atomic> #include <atomic>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
@ -48,10 +49,8 @@ public:
void show_state(console *const cnsl) const override; void show_state(console *const cnsl) const override;
#if IS_POSIX JsonDocument serialize() const;
json_t *serialize() const; static rk05 *deserialize(const JsonDocument j, bus *const b);
static rk05 *deserialize(const json_t *const j, bus *const b);
#endif
uint8_t read_byte(const uint16_t addr) override; uint8_t read_byte(const uint16_t addr) override;
uint16_t read_word(const uint16_t addr) override; uint16_t read_word(const uint16_t addr) override;