#ifndef DEVICE_H_ #define DEVICE_H_ #include "General.h" #include "Utility.h" #include "Version.h" class Device { private: bool verbose ; bool isRoot; rapidjson::Document capabilities; rapidjson::Document deviceInfo; static const std::vector apIdentifiers; rapidjson::Document accessoryCards; rapidjson::Value accessoryCard; rapidjson::Document::AllocatorType& alloc = deviceInfo.GetAllocator(); rapidjson::Document::AllocatorType& accessoryCardsAlloc = accessoryCards.GetAllocator(); static std::map capabilityList; static std::map deviceInfoList; static const std::regex apFilters; static const std::regex lora15Filters; static const std::regex loraG16Filters; static const std::regex loraG64Filters; static const std::regex gpiobFilters; static const std::regex mfserFilters; static const std::regex serialModeFilter; static const std::regex storeFilters; static const std::regex showFilters; class AccessoryCard { protected: Device& device; const std::string productId; const std::string port; public: AccessoryCard(Device& d, const std::string ProductId, const std::string Port); }; class LoraCard : public AccessoryCard { protected: std::string spiPath; uint8_t fpgaVersion = 255; public: LoraCard(Device& d, const std::string ProductId, const std::string Port); void setCapabilities(); }; class Lora15Card : public LoraCard { private: void *spi_target_ptr = NULL; public: Lora15Card(Device& d, const std::string ProductId, const std::string Port); int spiOpen(const char *spidev); int spiRead(uint8_t address, uint8_t *data); int spiClose(); }; class Lora21Card : public LoraCard { private: std::string cmdFpgaVersion; public: Lora21Card(Device& d, const std::string ProductId, const std::string Port); }; class Lora21ExtCard : public Lora21Card { private: std::string cmdFpgaVersion2; public: Lora21ExtCard(Device& d, const std::string ProductId, const std::string Port); }; class Gpiob : public AccessoryCard { public: Gpiob(Device& d, const std::string ProductId, const std::string Port); }; class Mfser : public AccessoryCard { public: Mfser(Device& d, const std::string ProductId, const std::string Port); }; public: Device(); void getSystemTreeJson(const char * dir_name); void init(); bool isAccessoryCard(const char * d_name, const char * dir_name); bool isValidDirectory(const struct dirent * entry, std::string fullPath, const char * d_name); void load(); void logInfo(std::string info); void logError(std::string info); void json(); void mapFileToCapability(); void mapFirmware(); void printDir(const std::string dir_name, std::vector &results); void printJson(); void printVersion (std::string name); void printUsage(std::string program); void show(std::string program); void showTrigger(std::string name); void sortAccessoryCards(); void store(std::string name, std::string value); void storeTrigger(std::string name, std::string value); void Verbose(bool val); bool Verbose(); void writeJson(); }; #endif /* DEVICE_H_ */