From c4811dd1b73b37b0916803097237acd31f1df98b Mon Sep 17 00:00:00 2001 From: Harsh Sharma Date: Tue, 7 Jan 2020 15:50:56 -0600 Subject: Refactored accessory cards classes with inheritence, fixed Makefile clean, moved some helper functions to header utility --- Makefile | 7 +- build/AccessoryCards/AccessoryCardLora.d | 86 --------------- build/AccessoryCards/AccessoryCardLora15.d | 89 ---------------- build/Device/Device.d | 92 ---------------- build/MtsIoSysfs.d | 5 +- include/Device/Device.h | 69 +++++++++--- include/General.h | 2 +- include/Utility/Utility.h | 56 ++++++++++ src/AccessoryCards/AccessoryCardLora.cpp | 22 ---- src/AccessoryCards/AccessoryCardLora15.cpp | 142 ------------------------- src/AccessoryCards/AcessoryCard.cpp | 21 ++++ src/AccessoryCards/Gpiob.cpp | 25 +++++ src/AccessoryCards/LoraCard.cpp | 23 ++++ src/AccessoryCards/LoraCard15.cpp | 165 +++++++++++++++++++++++++++++ src/AccessoryCards/LoraCard21.cpp | 24 +++++ src/AccessoryCards/LoraCard21Ext.cpp | 24 +++++ src/AccessoryCards/Mfser.cpp | 29 +++++ src/Device/Device.cpp | 94 +++------------- src/MtsIoSysfs.cpp | 8 +- src/Version.cpp | 2 +- 20 files changed, 445 insertions(+), 540 deletions(-) delete mode 100644 build/AccessoryCards/AccessoryCardLora.d delete mode 100644 build/AccessoryCards/AccessoryCardLora15.d delete mode 100644 build/Device/Device.d create mode 100644 include/Utility/Utility.h delete mode 100644 src/AccessoryCards/AccessoryCardLora.cpp delete mode 100644 src/AccessoryCards/AccessoryCardLora15.cpp create mode 100644 src/AccessoryCards/AcessoryCard.cpp create mode 100644 src/AccessoryCards/Gpiob.cpp create mode 100644 src/AccessoryCards/LoraCard.cpp create mode 100644 src/AccessoryCards/LoraCard15.cpp create mode 100644 src/AccessoryCards/LoraCard21.cpp create mode 100644 src/AccessoryCards/LoraCard21Ext.cpp create mode 100644 src/AccessoryCards/Mfser.cpp diff --git a/Makefile b/Makefile index f6df6d7..2fc0729 100644 --- a/Makefile +++ b/Makefile @@ -43,9 +43,8 @@ SOURCES = $(wildcard $(SOURCEDIR)/**/*.cpp) SOURCES += $(SOURCEDIR)/Version.cpp OBJS1 = $(patsubst $(SOURCEDIR)/%.cpp,$(BUILDDIR)/%.o,$(SOURCES)) OBJS = $(patsubst $(SOURCEDIR)/%.c,$(BUILDDIR)/%.o,$(OBJS1)) -CPP_DEPPS1 = $(patsubst $(SOURCEDIR)/%.cpp,$(BUILDDIR)/%.d,$(SOURCES)) -CPP_DEPPS = $(patsubst $(SOURCEDIR)/%.c,$(BUILDDIR)/%.d,$(CPP_DEPPS1)) -CPP_DEPPS = $(BUILDDIR)/MtsIo.d +CPP_DEPPS = $(patsubst $(SOURCEDIR)/%.cpp,$(BUILDDIR)/**/%.d,$(SOURCES)) +CPP_DEPPS += $(BUILDDIR)/MtsIoSysfs.o $(BUILDDIR)/**/*.o $(BUILDDIR)/**/*.d JS_OBJS = $(BUILDDIR)/Version.o OUT_DIRS=build/AccessoryCards build/Device MKDIR_P = mkdir -p @@ -115,7 +114,7 @@ strip: $(STRIP) $(BUILDDIR)/mts-io-sysfs clean: - -$(RM) $(OBJS) $(CPP_DEPPS) $(BUILDDIR)/mts-io-sysfs $(BUILDDIR)/MtsIoSysfs.o $(BUILDDIR)/AccessoryCards/*.o $(BUILDDIR)/Device/*.o + -$(RM) $(OBJS) $(CPP_DEPPS) $(BUILDDIR)/mts-io-sysfs -@echo ' ' .PHONY: all clean dependents diff --git a/build/AccessoryCards/AccessoryCardLora.d b/build/AccessoryCards/AccessoryCardLora.d deleted file mode 100644 index c0f1dfe..0000000 --- a/build/AccessoryCards/AccessoryCardLora.d +++ /dev/null @@ -1,86 +0,0 @@ -build/AccessoryCards/AccessoryCardLora.d: \ - src/AccessoryCards/AccessoryCardLora.cpp \ - include/AccessoryCards/AccessoryCardLora.h include/General.h \ - include/rapidjson/document.h include/rapidjson/reader.h \ - include/rapidjson/allocators.h include/rapidjson/rapidjson.h \ - include/rapidjson/stream.h include/rapidjson/encodings.h \ - include/rapidjson/encodedstream.h include/rapidjson/memorystream.h \ - include/rapidjson/internal/meta.h \ - include/rapidjson/internal/../rapidjson.h \ - include/rapidjson/internal/stack.h \ - include/rapidjson/internal/../allocators.h \ - include/rapidjson/internal/swap.h include/rapidjson/internal/strtod.h \ - include/rapidjson/internal/ieee754.h \ - include/rapidjson/internal/biginteger.h \ - include/rapidjson/internal/diyfp.h include/rapidjson/internal/pow10.h \ - include/rapidjson/error/error.h include/rapidjson/error/../rapidjson.h \ - include/rapidjson/internal/strfunc.h \ - include/rapidjson/internal/../stream.h \ - include/rapidjson/internal/../rapidjson.h include/rapidjson/writer.h \ - include/rapidjson/internal/dtoa.h include/rapidjson/internal/itoa.h \ - include/rapidjson/internal/itoa.h include/rapidjson/stringbuffer.h \ - include/rapidjson/stringbuffer.h include/rapidjson/istreamwrapper.h - -include/AccessoryCards/AccessoryCardLora.h: - -include/General.h: - -include/rapidjson/document.h: - -include/rapidjson/reader.h: - -include/rapidjson/allocators.h: - -include/rapidjson/rapidjson.h: - -include/rapidjson/stream.h: - -include/rapidjson/encodings.h: - -include/rapidjson/encodedstream.h: - -include/rapidjson/memorystream.h: - -include/rapidjson/internal/meta.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/internal/stack.h: - -include/rapidjson/internal/../allocators.h: - -include/rapidjson/internal/swap.h: - -include/rapidjson/internal/strtod.h: - -include/rapidjson/internal/ieee754.h: - -include/rapidjson/internal/biginteger.h: - -include/rapidjson/internal/diyfp.h: - -include/rapidjson/internal/pow10.h: - -include/rapidjson/error/error.h: - -include/rapidjson/error/../rapidjson.h: - -include/rapidjson/internal/strfunc.h: - -include/rapidjson/internal/../stream.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/writer.h: - -include/rapidjson/internal/dtoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/istreamwrapper.h: diff --git a/build/AccessoryCards/AccessoryCardLora15.d b/build/AccessoryCards/AccessoryCardLora15.d deleted file mode 100644 index 26ee09c..0000000 --- a/build/AccessoryCards/AccessoryCardLora15.d +++ /dev/null @@ -1,89 +0,0 @@ -build/AccessoryCards/AccessoryCardLora15.d: \ - src/AccessoryCards/AccessoryCardLora15.cpp \ - include/AccessoryCards/AccessoryCardLora15.h include/General.h \ - include/rapidjson/document.h include/rapidjson/reader.h \ - include/rapidjson/allocators.h include/rapidjson/rapidjson.h \ - include/rapidjson/stream.h include/rapidjson/encodings.h \ - include/rapidjson/encodedstream.h include/rapidjson/memorystream.h \ - include/rapidjson/internal/meta.h \ - include/rapidjson/internal/../rapidjson.h \ - include/rapidjson/internal/stack.h \ - include/rapidjson/internal/../allocators.h \ - include/rapidjson/internal/swap.h include/rapidjson/internal/strtod.h \ - include/rapidjson/internal/ieee754.h \ - include/rapidjson/internal/biginteger.h \ - include/rapidjson/internal/diyfp.h include/rapidjson/internal/pow10.h \ - include/rapidjson/error/error.h include/rapidjson/error/../rapidjson.h \ - include/rapidjson/internal/strfunc.h \ - include/rapidjson/internal/../stream.h \ - include/rapidjson/internal/../rapidjson.h include/rapidjson/writer.h \ - include/rapidjson/internal/dtoa.h include/rapidjson/internal/itoa.h \ - include/rapidjson/internal/itoa.h include/rapidjson/stringbuffer.h \ - include/rapidjson/stringbuffer.h include/rapidjson/istreamwrapper.h \ - include/AccessoryCards/AccessoryCardLora.h - -include/AccessoryCards/AccessoryCardLora15.h: - -include/General.h: - -include/rapidjson/document.h: - -include/rapidjson/reader.h: - -include/rapidjson/allocators.h: - -include/rapidjson/rapidjson.h: - -include/rapidjson/stream.h: - -include/rapidjson/encodings.h: - -include/rapidjson/encodedstream.h: - -include/rapidjson/memorystream.h: - -include/rapidjson/internal/meta.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/internal/stack.h: - -include/rapidjson/internal/../allocators.h: - -include/rapidjson/internal/swap.h: - -include/rapidjson/internal/strtod.h: - -include/rapidjson/internal/ieee754.h: - -include/rapidjson/internal/biginteger.h: - -include/rapidjson/internal/diyfp.h: - -include/rapidjson/internal/pow10.h: - -include/rapidjson/error/error.h: - -include/rapidjson/error/../rapidjson.h: - -include/rapidjson/internal/strfunc.h: - -include/rapidjson/internal/../stream.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/writer.h: - -include/rapidjson/internal/dtoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/istreamwrapper.h: - -include/AccessoryCards/AccessoryCardLora.h: diff --git a/build/Device/Device.d b/build/Device/Device.d deleted file mode 100644 index 16838e4..0000000 --- a/build/Device/Device.d +++ /dev/null @@ -1,92 +0,0 @@ -build/Device/Device.d: src/Device/Device.cpp include/Device/Device.h \ - include/General.h include/rapidjson/document.h \ - include/rapidjson/reader.h include/rapidjson/allocators.h \ - include/rapidjson/rapidjson.h include/rapidjson/stream.h \ - include/rapidjson/encodings.h include/rapidjson/encodedstream.h \ - include/rapidjson/memorystream.h include/rapidjson/internal/meta.h \ - include/rapidjson/internal/../rapidjson.h \ - include/rapidjson/internal/stack.h \ - include/rapidjson/internal/../allocators.h \ - include/rapidjson/internal/swap.h include/rapidjson/internal/strtod.h \ - include/rapidjson/internal/ieee754.h \ - include/rapidjson/internal/biginteger.h \ - include/rapidjson/internal/diyfp.h include/rapidjson/internal/pow10.h \ - include/rapidjson/error/error.h include/rapidjson/error/../rapidjson.h \ - include/rapidjson/internal/strfunc.h \ - include/rapidjson/internal/../stream.h \ - include/rapidjson/internal/../rapidjson.h include/rapidjson/writer.h \ - include/rapidjson/internal/dtoa.h include/rapidjson/internal/itoa.h \ - include/rapidjson/internal/itoa.h include/rapidjson/stringbuffer.h \ - include/rapidjson/stringbuffer.h include/rapidjson/istreamwrapper.h \ - include/Version.h include/AccessoryCards/AccessoryCardLora15.h \ - include/AccessoryCards/AccessoryCardLora.h - -include/Device/Device.h: - -include/General.h: - -include/rapidjson/document.h: - -include/rapidjson/reader.h: - -include/rapidjson/allocators.h: - -include/rapidjson/rapidjson.h: - -include/rapidjson/stream.h: - -include/rapidjson/encodings.h: - -include/rapidjson/encodedstream.h: - -include/rapidjson/memorystream.h: - -include/rapidjson/internal/meta.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/internal/stack.h: - -include/rapidjson/internal/../allocators.h: - -include/rapidjson/internal/swap.h: - -include/rapidjson/internal/strtod.h: - -include/rapidjson/internal/ieee754.h: - -include/rapidjson/internal/biginteger.h: - -include/rapidjson/internal/diyfp.h: - -include/rapidjson/internal/pow10.h: - -include/rapidjson/error/error.h: - -include/rapidjson/error/../rapidjson.h: - -include/rapidjson/internal/strfunc.h: - -include/rapidjson/internal/../stream.h: - -include/rapidjson/internal/../rapidjson.h: - -include/rapidjson/writer.h: - -include/rapidjson/internal/dtoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/internal/itoa.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/stringbuffer.h: - -include/rapidjson/istreamwrapper.h: - -include/Version.h: - -include/AccessoryCards/AccessoryCardLora15.h: - -include/AccessoryCards/AccessoryCardLora.h: diff --git a/build/MtsIoSysfs.d b/build/MtsIoSysfs.d index a540f53..48ed255 100644 --- a/build/MtsIoSysfs.d +++ b/build/MtsIoSysfs.d @@ -18,7 +18,8 @@ build/MtsIoSysfs.d: src/MtsIoSysfs.cpp include/Device/Device.h \ include/rapidjson/internal/dtoa.h include/rapidjson/internal/itoa.h \ include/rapidjson/internal/itoa.h include/rapidjson/stringbuffer.h \ include/rapidjson/stringbuffer.h include/rapidjson/istreamwrapper.h \ - include/Version.h include/AccessoryCards/AccessoryCardLora15.h \ + include/Utility/Utility.h include/Version.h \ + include/AccessoryCards/AccessoryCardLora15.h \ include/AccessoryCards/AccessoryCardLora.h include/Device/Device.h: @@ -85,6 +86,8 @@ include/rapidjson/stringbuffer.h: include/rapidjson/istreamwrapper.h: +include/Utility/Utility.h: + include/Version.h: include/AccessoryCards/AccessoryCardLora15.h: diff --git a/include/Device/Device.h b/include/Device/Device.h index 946221b..aa1d32b 100644 --- a/include/Device/Device.h +++ b/include/Device/Device.h @@ -2,6 +2,7 @@ #define DEVICE_H_ #include "General.h" +#include "Utility.h" #include "Version.h" #include "AccessoryCardLora15.h" @@ -11,17 +12,12 @@ class Device { 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 const std::vector apIdentifiers; - - std::map capabilityList = {{"adc", false},{"battery", false},{"bluetooth", false}, - {"cell", false},{"cellWwan", false},{"din", false},{"dout", false},{"externalSerialPort", false}, - {"gpio", false},{"gps", false},{"lora", false},{"loraNetworkServer", false}, - {"nodeRed", false},{"rs232", false},{"rs422", false},{"rs485", false},{"serial", false}, - {"wifi", false}}; + 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", ""}}; @@ -36,11 +32,58 @@ class Device { 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 exitHandler(int code); - bool fileExists(std::string file); - mode_t fileType(std::string file); void getSystemTreeJson(const char * dir_name); void init(); void load(); @@ -53,16 +96,10 @@ class Device { void printJson(); void printVersion (std::string name); void printUsage(std::string program); - void setupLora15(std::string fileData, const char * dir_name); - void setupLoraG16(std::string fileData, const char * dir_name); - void setupLoraG64(std::string fileData, const char * dir_name); - void setupGpiob(std::string fileData, const char * dir_name); - void setupMfser(std::string fileData, const char * dir_name); 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); - std::string toCamelCase(const char * d_name); void Verbose(bool val); bool Verbose(); void writeJson(); diff --git a/include/General.h b/include/General.h index 2ca729a..81f5a3d 100644 --- a/include/General.h +++ b/include/General.h @@ -67,7 +67,7 @@ typedef unsigned int uint; //32 bit - even on 64 bit machines #define READ_ACCESS 0x00 #define SPI_SPEED 8000000 -#define DEVICE_INFO_FILE "/var/run/config/device_info.json" +#define DEVICE_INFO_FILE "/var/run/config/device_info.json" #define RESET_SHORT_CMD "reset_short_handler" #define RESET_LONG_CMD "reset_long_handler" #define KILL_SIGNAL "kill -l " diff --git a/include/Utility/Utility.h b/include/Utility/Utility.h new file mode 100644 index 0000000..062e422 --- /dev/null +++ b/include/Utility/Utility.h @@ -0,0 +1,56 @@ +#ifndef UTILITIES_H_ +#define UTILITIES_H_ + +#include "General.h" +#include "Version.h" + +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +inline bool fileExists(std::string file) { + struct stat buffer; + return (stat (file.c_str(), &buffer) == 0) ? true : false; +} + +inline std::string toCamelCase(const char * d_name) { + std::string camelString = strdup(d_name); + std::string tempString = ""; + for (size_t x = 0; x < camelString.length(); x++){ + if (camelString[x] == '-' || camelString[x] == '_'){ + tempString = camelString.substr(x + 1, 1); + transform(tempString.begin(), tempString.end(), tempString.begin(), toupper); + camelString.erase(x, 2); + camelString.insert(x, tempString); + } + } + return camelString; +} + +inline void exitHandler(int code) { + if (code != 0) { + std::cout << "exiting with " << std::to_string(code); + } + exit(code); +} + +inline mode_t fileType(std::string file) { + struct stat buf; + stat (file.c_str(), &buf); + return buf.st_mode & S_IFMT; +} + +#endif /* UTILITIES_H_ */ diff --git a/src/AccessoryCards/AccessoryCardLora.cpp b/src/AccessoryCards/AccessoryCardLora.cpp deleted file mode 100644 index 13bbab5..0000000 --- a/src/AccessoryCards/AccessoryCardLora.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "AccessoryCardLora.h" - -AccessoryCardLora::AccessoryCardLora(std::string ProductId, std::string Port) { - port = Port; - productId = ProductId; - spiPath = "/dev/spidev0.0"; - if ((productId.find("MTCDT3-") == 0) && (port.back() == '2')) { - spiPath = "/dev/spidev1.0"; - } else if (productId.find("MTAC-LORA-G") == 0) { - spiPath = "/dev/spidev32766.2"; - } else if (productId.find("MTAC-LORA-") == 0) { - if (port.back() == '2') { - spiPath = "/dev/spidev32765.2"; - } else { - spiPath = "/dev/spidev32766.2"; - } - } -} - -std::string AccessoryCardLora::getPath() { - return spiPath; -} diff --git a/src/AccessoryCards/AccessoryCardLora15.cpp b/src/AccessoryCards/AccessoryCardLora15.cpp deleted file mode 100644 index ee99622..0000000 --- a/src/AccessoryCards/AccessoryCardLora15.cpp +++ /dev/null @@ -1,142 +0,0 @@ -#include "AccessoryCardLora15.h" - -AccessoryCardLora15::AccessoryCardLora15(std::string ProductId, std::string Port) : AccessoryCardLora(ProductId, Port) { -} - -int AccessoryCardLora15::spiOpen(const char *spidev) { - int *spi_device = NULL; - int dev; - int a = 0, b = 0; - int i; - - /* allocate memory for the device descriptor */ - spi_device = (int *)malloc(sizeof(int)); - if (spi_device == NULL) { - printf("ERROR: MALLOC FAIL\n"); - return -1; - } - - /* open SPI device */ - dev = open(spidev, O_RDWR); - if (dev < 0) { - printf("ERROR: failed to open SPI device %s\n", spidev); - return -1; - } - - /* setting SPI mode to 'mode 0' */ - i = SPI_MODE_3; - a = ioctl(dev, SPI_IOC_WR_MODE, &i); - b = ioctl(dev, SPI_IOC_RD_MODE, &i); - if ((a < 0) || (b < 0)) { - printf("ERROR: SPI PORT FAIL TO SET IN MODE 0\n"); - close(dev); - free(spi_device); - return -1; - } - - /* setting SPI max clk (in Hz) */ - i = SPI_SPEED; - a = ioctl(dev, SPI_IOC_WR_MAX_SPEED_HZ, &i); - b = ioctl(dev, SPI_IOC_RD_MAX_SPEED_HZ, &i); - if ((a < 0) || (b < 0)) { - printf("ERROR: SPI PORT FAIL TO SET MAX SPEED\n"); - close(dev); - free(spi_device); - return -1; - } - - /* setting SPI to MSB first */ - i = 0; - a = ioctl(dev, SPI_IOC_WR_LSB_FIRST, &i); - b = ioctl(dev, SPI_IOC_RD_LSB_FIRST, &i); - if ((a < 0) || (b < 0)) { - printf("ERROR: SPI PORT FAIL TO SET MSB FIRST\n"); - close(dev); - free(spi_device); - return -1; - } - - /* setting SPI to 8 bits per word */ - i = 0; - a = ioctl(dev, SPI_IOC_WR_BITS_PER_WORD, &i); - b = ioctl(dev, SPI_IOC_RD_BITS_PER_WORD, &i); - if ((a < 0) || (b < 0)) { - printf("ERROR: SPI PORT FAIL TO SET 8 BITS-PER-WORD\n"); - close(dev); - return -1; - } - - *spi_device = dev; - spi_target_ptr = (void *)spi_device; - return 0; -} -int AccessoryCardLora15::spiRead(uint8_t address, uint8_t *data) { - int spi_device; - uint8_t out_buf[3]; - uint8_t in_buf[ARRAY_SIZE(out_buf)]; - uint8_t command_size; - struct spi_ioc_transfer k; - int a; - - spi_device = *(int *)spi_target_ptr; /* spi_target cannot be null beforehand */ - - /* prepare frame to be sent */ - out_buf[0] = MTAC_FPGA; - out_buf[1] = READ_ACCESS | (address & 0x7F); - out_buf[2] = 0x00; - command_size = 3; - - /* I/O transaction */ - memset(&k, 0, sizeof(k)); /* clear k */ - k.tx_buf = (unsigned long)out_buf; - k.rx_buf = (unsigned long)in_buf; - k.len = command_size; - k.cs_change = 1; - a = ioctl(spi_device, SPI_IOC_MESSAGE(1), &k); - - /* determine return code */ - if (a != (int)k.len) { - printf("ERROR: SPI READ FAILURE\n"); - return -1; - } else { - *data = in_buf[command_size - 1]; - return 0; - } -} - -int AccessoryCardLora15::spiClose() { - int spi_device; - int a; - - /* close file & deallocate file descriptor */ - spi_device = *(int *)spi_target_ptr; /* check that spi_target is not null */ - a = close(spi_device); - free(spi_target_ptr); - - /* determine return code */ - if (a < 0) { - printf("ERROR: SPI PORT FAILED TO CLOSE\n"); - return -1; - } else { - return 0; - } -} - -uint8_t AccessoryCardLora15::getFPGAVersion() { - int ret; - uint8_t u = 255; - ret = spiOpen(getPath().c_str()); - if (ret != 0) { - printf("Could not open SPI port %s", getPath().c_str()); - return u; - } - /* detect if the gateway has an FPGA with SPI mux header support */ - ret = spiRead(MTAC_FPGA_ADDRESS, &u); - if (ret != 0) { - printf("Could not read FPGA version"); - } - - spiClose(); - spi_target_ptr = NULL; - return u; -} \ No newline at end of file diff --git a/src/AccessoryCards/AcessoryCard.cpp b/src/AccessoryCards/AcessoryCard.cpp new file mode 100644 index 0000000..16589b0 --- /dev/null +++ b/src/AccessoryCards/AcessoryCard.cpp @@ -0,0 +1,21 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::AccessoryCard::AccessoryCard(Device& d) : device(d) { +} diff --git a/src/AccessoryCards/Gpiob.cpp b/src/AccessoryCards/Gpiob.cpp new file mode 100644 index 0000000..3a87c8a --- /dev/null +++ b/src/AccessoryCards/Gpiob.cpp @@ -0,0 +1,25 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::Gpiob::Gpiob(Device& d) : AccessoryCard(d) { + capabilityList["adc"] = true; + capabilityList["din"] = true; + capabilityList["dout"] = true; + capabilityList["gpio"] = true; +} \ No newline at end of file diff --git a/src/AccessoryCards/LoraCard.cpp b/src/AccessoryCards/LoraCard.cpp new file mode 100644 index 0000000..ba50aa7 --- /dev/null +++ b/src/AccessoryCards/LoraCard.cpp @@ -0,0 +1,23 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::LoraCard::LoraCard(Device& d, const std::string productId, const std::string port) : AccessoryCard(d) { + spiPath = "/dev/spidev0.0"; + device.capabilityList["lora"] = true; +} \ No newline at end of file diff --git a/src/AccessoryCards/LoraCard15.cpp b/src/AccessoryCards/LoraCard15.cpp new file mode 100644 index 0000000..df5c969 --- /dev/null +++ b/src/AccessoryCards/LoraCard15.cpp @@ -0,0 +1,165 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::Lora15Card::Lora15Card(Device& d, const std::string productId, const std::string port) : LoraCard(d, productId, port) { + int ret; + fpgaVersion = 255; + if ((productId.find("MTCDT3-") == 0) && (port.back() == '2')) { + spiPath = "/dev/spidev1.0"; + } else if (productId.find("MTAC-LORA-") == 0) { + if (port.back() == '2') { + spiPath = "/dev/spidev32765.2"; + } else { + spiPath = "/dev/spidev32766.2"; + } + } + ret = spiOpen(spiPath.c_str()); + if (ret != 0) { + printf("Could not open SPI port %s", spiPath.c_str()); + return; + } + /* detect if the gateway has an FPGA with SPI mux header support */ + ret = spiRead(MTAC_FPGA_ADDRESS, &fpgaVersion); + if (ret != 0) { + printf("Could not read FPGA version"); + } + + spiClose(); + spi_target_ptr = NULL; + device.accessoryCard.AddMember("fpgaVersion", fpgaVersion, device.accessoryCardsAlloc); +} + +int Device::Lora15Card::spiOpen(const char *spidev) { + int *spi_device = NULL; + int dev; + int a = 0, b = 0; + int i; + + /* allocate memory for the device descriptor */ + spi_device = (int *)malloc(sizeof(int)); + if (spi_device == NULL) { + printf("ERROR: MALLOC FAIL\n"); + return -1; + } + + /* open SPI device */ + dev = open(spidev, O_RDWR); + if (dev < 0) { + printf("ERROR: failed to open SPI device %s\n", spidev); + return -1; + } + + /* setting SPI mode to 'mode 0' */ + i = SPI_MODE_3; + a = ioctl(dev, SPI_IOC_WR_MODE, &i); + b = ioctl(dev, SPI_IOC_RD_MODE, &i); + if ((a < 0) || (b < 0)) { + printf("ERROR: SPI PORT FAIL TO SET IN MODE 0\n"); + close(dev); + free(spi_device); + return -1; + } + + /* setting SPI max clk (in Hz) */ + i = SPI_SPEED; + a = ioctl(dev, SPI_IOC_WR_MAX_SPEED_HZ, &i); + b = ioctl(dev, SPI_IOC_RD_MAX_SPEED_HZ, &i); + if ((a < 0) || (b < 0)) { + printf("ERROR: SPI PORT FAIL TO SET MAX SPEED\n"); + close(dev); + free(spi_device); + return -1; + } + + /* setting SPI to MSB first */ + i = 0; + a = ioctl(dev, SPI_IOC_WR_LSB_FIRST, &i); + b = ioctl(dev, SPI_IOC_RD_LSB_FIRST, &i); + if ((a < 0) || (b < 0)) { + printf("ERROR: SPI PORT FAIL TO SET MSB FIRST\n"); + close(dev); + free(spi_device); + return -1; + } + + /* setting SPI to 8 bits per word */ + i = 0; + a = ioctl(dev, SPI_IOC_WR_BITS_PER_WORD, &i); + b = ioctl(dev, SPI_IOC_RD_BITS_PER_WORD, &i); + if ((a < 0) || (b < 0)) { + printf("ERROR: SPI PORT FAIL TO SET 8 BITS-PER-WORD\n"); + close(dev); + return -1; + } + + *spi_device = dev; + spi_target_ptr = (void *)spi_device; + return 0; +} +int Device::Lora15Card::spiRead(uint8_t address, uint8_t *data) { + int spi_device; + uint8_t out_buf[3]; + uint8_t in_buf[ARRAY_SIZE(out_buf)]; + uint8_t command_size; + struct spi_ioc_transfer k; + int a; + + spi_device = *(int *)spi_target_ptr; /* spi_target cannot be null beforehand */ + + /* prepare frame to be sent */ + out_buf[0] = MTAC_FPGA; + out_buf[1] = READ_ACCESS | (address & 0x7F); + out_buf[2] = 0x00; + command_size = 3; + + /* I/O transaction */ + memset(&k, 0, sizeof(k)); /* clear k */ + k.tx_buf = (unsigned long)out_buf; + k.rx_buf = (unsigned long)in_buf; + k.len = command_size; + k.cs_change = 1; + a = ioctl(spi_device, SPI_IOC_MESSAGE(1), &k); + + /* determine return code */ + if (a != (int)k.len) { + printf("ERROR: SPI READ FAILURE\n"); + return -1; + } else { + *data = in_buf[command_size - 1]; + return 0; + } +} + +int Device::Lora15Card::spiClose() { + int spi_device; + int a; + + /* close file & deallocate file descriptor */ + spi_device = *(int *)spi_target_ptr; /* check that spi_target is not null */ + a = close(spi_device); + free(spi_target_ptr); + + /* determine return code */ + if (a < 0) { + printf("ERROR: SPI PORT FAILED TO CLOSE\n"); + return -1; + } else { + return 0; + } +} \ No newline at end of file diff --git a/src/AccessoryCards/LoraCard21.cpp b/src/AccessoryCards/LoraCard21.cpp new file mode 100644 index 0000000..70bec11 --- /dev/null +++ b/src/AccessoryCards/LoraCard21.cpp @@ -0,0 +1,24 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::Lora21Card::Lora21Card(Device& d, const std::string productId, const std::string port): LoraCard(d, productId, port) { + spiPath = "/dev/spidev32766.2"; + MTS::System::cmd(LORA_2_1_FPGA_VERSION, fpgaVersion); + device.accessoryCard.AddMember("fpgaVersion", std::stoi(fpgaVersion), device.accessoryCardsAlloc); +} \ No newline at end of file diff --git a/src/AccessoryCards/LoraCard21Ext.cpp b/src/AccessoryCards/LoraCard21Ext.cpp new file mode 100644 index 0000000..b7531c7 --- /dev/null +++ b/src/AccessoryCards/LoraCard21Ext.cpp @@ -0,0 +1,24 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::Lora21ExtCard::Lora21ExtCard(Device& d, const std::string productId, const std::string port): Lora21Card(d, productId, port) { + MTS::System::cmd(LORA_2_1_EXT_FPGA_VERSION, fpgaVersion2); + device.accessoryCard.AddMember("fpgaVersion2", std::stoi(fpgaVersion2), device.accessoryCardsAlloc); + +} \ No newline at end of file diff --git a/src/AccessoryCards/Mfser.cpp b/src/AccessoryCards/Mfser.cpp new file mode 100644 index 0000000..ac6bb26 --- /dev/null +++ b/src/AccessoryCards/Mfser.cpp @@ -0,0 +1,29 @@ +/********************************************************************** +* COPYRIGHT 2020 MULTI-TECH SYSTEMS, INC. +* +* ALL RIGHTS RESERVED BY AND FOR THE EXCLUSIVE BENEFIT OF +* MULTI-TECH SYSTEMS, INC. +* +* MULTI-TECH SYSTEMS, INC. - CONFIDENTIAL AND PROPRIETARY +* INFORMATION AND/OR TRADE SECRET. +* +* NOTICE: ALL CODE, PROGRAM, INFORMATION, SCRIPT, INSTRUCTION, +* DATA, AND COMMENT HEREIN IS AND SHALL REMAIN THE CONFIDENTIAL +* INFORMATION AND PROPERTY OF MULTI-TECH SYSTEMS, INC. +* USE AND DISCLOSURE THEREOF, EXCEPT AS STRICTLY AUTHORIZED IN A +* WRITTEN AGREEMENT SIGNED BY MULTI-TECH SYSTEMS, INC. IS PROHIBITED. +* +***********************************************************************/ + +#include "Device.h" + +Device::Mfser::Mfser(Device& d, const std::string port) : AccessoryCard(d) { + capabilityList["rs232"] = true; + capabilityList["rs422"] = true; + capabilityList["rs485"] = true; + capabilityList["serial"] = true; + if (!fileExists("/dev/ext_serial") && port.size() > 0) { + std::string temp; + MTS::System::cmd(std::string("ln -s /dev/ttyAP") + port.back() + " /dev/ext_serial", temp); + } +} \ No newline at end of file diff --git a/src/Device/Device.cpp b/src/Device/Device.cpp index 0083ff3..b806f06 100644 --- a/src/Device/Device.cpp +++ b/src/Device/Device.cpp @@ -28,29 +28,17 @@ const std::regex Device::serialModeFilter("(.*)(serial-mode)"); const std::regex Device::storeFilters("(.*)(mac-)(.*)|(.*)(-id)|(uuid)|(.*)(/eui)|(.*)(/cdone)|(.*)(hw-version)|(imei)|(capability)(.*)|(radio-reset-backoff-seconds)|(modalias)|(power)|((subsystem)(.*))|(uevent)|(board-temperature)|(reset)|(led3)|(led-ls)|(usbhd-ps-oc)|(.*)(adc[0-9])|(.*)(din[0-9])|(gpi[0-9])|(gpi[0-9][0-9])"); const std::regex Device::showFilters("(modalias)|(subsystem)|(uevent)"); +std::map Device::capabilityList = {{"adc", false},{"battery", false},{"bluetooth", false}, + {"cell", false},{"cellWwan", false},{"din", false},{"dout", false},{"externalSerialPort", false}, + {"gpio", false},{"gps", false},{"lora", false},{"loraNetworkServer", false}, + {"nodeRed", false},{"rs232", false},{"rs422", false},{"rs485", false},{"serial", false}, + {"wifi", false}}; + Device::Device() { isRoot = !getuid(); verbose = false; } -void Device::exitHandler(int code) { - if (code != 0) { - logError("exiting with " + std::to_string(code)); - } - exit(code); -} - -bool Device::fileExists(std::string file) { - struct stat buffer; - return (stat (file.c_str(), &buffer) == 0) ? true : false; -} - -mode_t Device::fileType(std::string file) { - struct stat buf; - stat (file.c_str(), &buf); - return buf.st_mode & S_IFMT; -} - void Device::getSystemTreeJson(const char * dir_name) { std::string fullPath = SYSFS_PLATFORM + std::string(dir_name); DIR * d = opendir (fullPath.c_str()); @@ -81,15 +69,15 @@ void Device::getSystemTreeJson(const char * dir_name) { } if (strcmp(d_name, "product-id") == 0) { if (regex_match(fileData, lora15Filters)) { - setupLora15(fileData, dir_name); + Lora15Card lora15(*this, fileData, dir_name); } else if (regex_match(fileData, loraG16Filters)) { - setupLoraG16(fileData, dir_name); + Lora21Card lora21(*this, fileData, dir_name); } else if (regex_match(fileData, loraG64Filters)) { - setupLoraG64(fileData, dir_name); + Lora21ExtCard lora21Ext(*this, fileData, dir_name); } else if (regex_match(fileData, gpiobFilters)) { - setupGpiob(fileData, dir_name); + Gpiob ppiob(*this); } else if (regex_match(fileData, mfserFilters)) { - setupMfser(fileData, dir_name); + Mfser msfer(*this, dir_name); } } accessoryCard.AddMember(rapidjson::Value().SetString(toCamelCase(d_name).c_str(), accessoryCardsAlloc), rapidjson::Value().SetString(fileData.c_str(), accessoryCardsAlloc), accessoryCardsAlloc); @@ -301,48 +289,6 @@ void Device::printUsage(std::string program) { exitHandler(1); } -void Device::setupLora15(std::string fileData, const char * dir_name) { - capabilityList["lora"] = true; - AccessoryCardLora15 mSPI(fileData, dir_name); - mSPI.getFPGAVersion(); - accessoryCard.AddMember("fpgaVersion", mSPI.getFPGAVersion(), accessoryCardsAlloc); -} - -void Device::setupLoraG16(std::string fileData, const char * dir_name) { - capabilityList["lora"] = true; - std::string fpgaVersion; - MTS::System::cmd(LORA_2_1_FPGA_VERSION, fpgaVersion); - accessoryCard.AddMember("fpgaVersion", std::stoi(fpgaVersion), accessoryCardsAlloc); -} - -void Device::setupLoraG64(std::string fileData, const char * dir_name) { - capabilityList["lora"] = true; - std::string fpgaVersion; - std::string fpgaVersion2; - MTS::System::cmd(LORA_2_1_FPGA_VERSION, fpgaVersion); - MTS::System::cmd(LORA_2_1_EXT_FPGA_VERSION, fpgaVersion2); - accessoryCard.AddMember("fpgaVersion", std::stoi(fpgaVersion), accessoryCardsAlloc); - accessoryCard.AddMember("fpgaVersion2", std::stoi(fpgaVersion2), accessoryCardsAlloc); -} - -void Device::setupGpiob(std::string fileData, const char * dir_name) { - capabilityList["adc"] = true; - capabilityList["din"] = true; - capabilityList["dout"] = true; - capabilityList["gpio"] = true; -} - -void Device::setupMfser(std::string fileData, const char * dir_name) { - capabilityList["rs232"] = true; - capabilityList["rs422"] = true; - capabilityList["rs485"] = true; - capabilityList["serial"] = true; - if (!fileExists("/dev/ext_serial") && strlen(dir_name) > 0) { - std::string temp; - MTS::System::cmd("ln -s /dev/ttyAP" + std::string(dir_name + strlen(dir_name) - 1) + " /dev/ext_serial", temp); - } -} - void Device::show(std::string name) { std::string fileData; int32_t code = MTS::System::readFile(SYSFS_PLATFORM + name, fileData); @@ -353,7 +299,6 @@ void Device::show(std::string name) { logError("cat: can't open " + std::string(SYSFS_PLATFORM) + name + ": No such file or directory"); exitHandler(99); } - } void Device::showTrigger(std::string name) { @@ -403,21 +348,6 @@ void Device::storeTrigger(std::string name, std::string value) { } } -std::string Device::toCamelCase(const char * d_name) { - std::string camelString = strdup(d_name); - std::string tempString = ""; - for (size_t x = 0; x < camelString.length(); x++){ - if (camelString[x] == '-' || camelString[x] == '_'){ - tempString = camelString.substr(x + 1, 1); - transform(tempString.begin(), tempString.end(), tempString.begin(), toupper); - camelString.erase(x, 2); - camelString.insert(x, tempString); - } - } - return camelString; -} - - void Device::Verbose(const bool val) { verbose = val; } @@ -437,4 +367,4 @@ void Device::writeJson() { } else { os << buffer.GetString(); } -} +} \ No newline at end of file diff --git a/src/MtsIoSysfs.cpp b/src/MtsIoSysfs.cpp index 0c9dc2e..390db47 100644 --- a/src/MtsIoSysfs.cpp +++ b/src/MtsIoSysfs.cpp @@ -46,28 +46,28 @@ int main(int argc, char const* const argv[]) { m.show(argv[i + 1]); } else { m.logError("show name"); - m.exitHandler(99); + exitHandler(99); } } else if (parameter == "show-trigger") { if (argv[i + 1] && !argv[i + 2]) { m.showTrigger(std::string(argv[i + 1])); } else { m.logError("show-trigger name"); - m.exitHandler(99); + exitHandler(99); } } else if (parameter == "store") { if (argv[i + 1] && argv[i + 2] && !argv[i + 3]) { m.store(std::string(argv[i + 1]), std::string(argv[i + 2])); } else { m.logError("store name value"); - m.exitHandler(99); + exitHandler(99); } } else if (parameter == "store-trigger") { if (argv[i + 1] && argv[i + 2] && !argv[i + 3]) { m.storeTrigger(std::string(argv[i + 1]), std::string(argv[i + 2])); } else { m.logError("store name value"); - m.exitHandler(99); + exitHandler(99); } } } diff --git a/src/Version.cpp b/src/Version.cpp index 96d0a2c..0f6d228 100644 --- a/src/Version.cpp +++ b/src/Version.cpp @@ -1,4 +1,4 @@ //Pre-Build Auto-Generated Source #include "Version.h" -const std::string Version::version("v1.0.0-4-g50a0344"); +const std::string Version::version("v1.0.0-5-g68c0c5e"); -- cgit v1.2.3