diff --git a/fpga/include/villas/fpga/card_parser.hpp b/fpga/include/villas/fpga/card_parser.hpp new file mode 100644 index 000000000..92c9124a5 --- /dev/null +++ b/fpga/include/villas/fpga/card_parser.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include +#include + +class CardParser { +public: + std::shared_ptr logger; + + json_t *json_ips = nullptr; + json_t *json_paths = nullptr; + const char *pci_slot = nullptr; + const char *pci_id = nullptr; + int do_reset = 0; + int affinity = 0; + int polling = 0; + + CardParser(json_t *json_card) : logger(villas::Log::get("CardParser")) { + json_error_t err; + int ret = json_unpack_ex( + json_card, &err, 0, "{ s: o, s?: i, s?: b, s?: s, s?: s, s?: b, s?: o}", + "ips", &json_ips, "affinity", &affinity, "do_reset", &do_reset, "slot", + &pci_slot, "id", &pci_id, "polling", &polling, "paths", &json_paths); + + if (ret != 0) + throw villas::ConfigError(json_card, err, "", "Failed to parse card"); + } +};