#ifndef DEVICE_H_ #define DEVICE_H_ #include "General.h" #include "Utility.h" #include "Version.h" #include "AccessoryCardLora15.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; std::map deviceInfoList = {{"deviceId", ""},{"hardwareVersion", ""}, {"imei", ""},{"macAddress", "00:00:00:00:00:00"},{"macBluetooth", "00:00:00:00:00:00"}, {"macWifi", "00:00:00:00:00:00"},{"productId", ""},{"uuid", ""},{"vendorId", ""}}; 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; public: AccessoryCard(Device& d); }; class LoraCard : public AccessoryCard { protected: std::string spiPath; public: LoraCard(Device& d, const std::string productId, const std::string port); }; class Lora15Card : public LoraCard { private: void *spi_target_ptr = NULL; uint8_t fpgaVersion = 255; 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 fpgaVersion; public: Lora21Card(Device& d, const std::string productId, const std::string port); }; class Lora21ExtCard : public Lora21Card { private: std::string fpgaVersion2; public: Lora21ExtCard(Device& d, const std::string productId, const std::string port); }; class Gpiob : public AccessoryCard { public: Gpiob(Device& d); }; class Mfser : public AccessoryCard { public: Mfser(Device& d, const std::string port); }; public: Device(); void getSystemTreeJson(const char * dir_name); void init(); 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 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_ */