Skip to content

Commit

Permalink
Sync
Browse files Browse the repository at this point in the history
  • Loading branch information
nkolban committed Aug 6, 2018
1 parent 11125da commit db78095
Show file tree
Hide file tree
Showing 13 changed files with 1,082 additions and 12 deletions.
123 changes: 123 additions & 0 deletions cpp_utils/AWS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,129 @@ AWS::AWS() {
AWS::~AWS() {
}

/**
* Convert an AWS IoT error code to a string representation.
* @param err The error code to be mapped.
* @return A string representation of the error code.
*/
/* static */ std::string AWS::errorToString(IoT_Error_t err) {
switch(err) {
case NETWORK_PHYSICAL_LAYER_CONNECTED :
return "NETWORK_PHYSICAL_LAYER_CONNECTED";
case NETWORK_MANUALLY_DISCONNECTED :
return "NETWORK_MANUALLY_DISCONNECTED";
case NETWORK_ATTEMPTING_RECONNECT:
return "NETWORK_ATTEMPTING_RECONNECT";
case NETWORK_RECONNECTED:
return "NETWORK_RECONNECTED";
case MQTT_NOTHING_TO_READ :
return "MQTT_NOTHING_TO_READ";
case MQTT_CONNACK_CONNECTION_ACCEPTED:
return "MQTT_CONNACK_CONNECTION_ACCEPTED";
case SUCCESS :
return "SUCCESS";
case FAILURE:
return "FAILURE";
case NULL_VALUE_ERROR :
return "NULL_VALUE_ERROR";
case TCP_CONNECTION_ERROR :
return "TCP_CONNECTION_ERROR";
case SSL_CONNECTION_ERROR:
return "SSL_CONNECTION_ERROR";
case TCP_SETUP_ERROR :
return "TCP_SETUP_ERROR";
case NETWORK_SSL_CONNECT_TIMEOUT_ERROR :
return "NETWORK_SSL_CONNECT_TIMEOUT_ERROR";
case NETWORK_SSL_WRITE_ERROR :
return "NETWORK_SSL_WRITE_ERROR";
case NETWORK_SSL_INIT_ERROR :
return "NETWORK_SSL_INIT_ERROR";
case NETWORK_SSL_CERT_ERROR :
return "NETWORK_SSL_CERT_ERROR";
case NETWORK_SSL_WRITE_TIMEOUT_ERROR :
return "NETWORK_SSL_WRITE_TIMEOUT_ERROR";
case NETWORK_SSL_READ_TIMEOUT_ERROR :
return "NETWORK_SSL_READ_TIMEOUT_ERROR";
case NETWORK_SSL_READ_ERROR :
return "NETWORK_SSL_READ_ERROR";
case NETWORK_DISCONNECTED_ERROR :
return "NETWORK_DISCONNECTED_ERROR";
case NETWORK_RECONNECT_TIMED_OUT_ERROR:
return "NETWORK_RECONNECT_TIMED_OUT_ERROR";
case NETWORK_ALREADY_CONNECTED_ERROR :
return "NETWORK_ALREADY_CONNECTED_ERROR";
case NETWORK_MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED :
return "NETWORK_MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED";
case NETWORK_SSL_UNKNOWN_ERROR :
return "NETWORK_SSL_UNKNOWN_ERROR";
case NETWORK_PHYSICAL_LAYER_DISCONNECTED :
return "NETWORK_PHYSICAL_LAYER_DISCONNECTED";
case NETWORK_X509_ROOT_CRT_PARSE_ERROR :
return "NETWORK_X509_ROOT_CRT_PARSE_ERROR";
case NETWORK_X509_DEVICE_CRT_PARSE_ERROR :
return "NETWORK_X509_DEVICE_CRT_PARSE_ERROR";
case NETWORK_PK_PRIVATE_KEY_PARSE_ERROR :
return "NETWORK_PK_PRIVATE_KEY_PARSE_ERROR";
case NETWORK_ERR_NET_SOCKET_FAILED :
return "NETWORK_ERR_NET_SOCKET_FAILED";
case NETWORK_ERR_NET_UNKNOWN_HOST :
return "NETWORK_ERR_NET_UNKNOWN_HOST";
case NETWORK_ERR_NET_CONNECT_FAILED :
return "NETWORK_ERR_NET_CONNECT_FAILED";
case NETWORK_SSL_NOTHING_TO_READ :
return "NETWORK_SSL_NOTHING_TO_READ";
case MQTT_CONNECTION_ERROR :
return "MQTT_CONNECTION_ERROR";
case MQTT_CONNECT_TIMEOUT_ERROR :
return "MQTT_CONNECT_TIMEOUT_ERROR";
case MQTT_REQUEST_TIMEOUT_ERROR:
return "MQTT_REQUEST_TIMEOUT_ERROR";
case MQTT_UNEXPECTED_CLIENT_STATE_ERROR :
return "MQTT_UNEXPECTED_CLIENT_STATE_ERROR";
case MQTT_CLIENT_NOT_IDLE_ERROR :
return "MQTT_CLIENT_NOT_IDLE_ERROR";
case MQTT_RX_MESSAGE_PACKET_TYPE_INVALID_ERROR :
return "MQTT_RX_MESSAGE_PACKET_TYPE_INVALID_ERROR";
case MQTT_RX_BUFFER_TOO_SHORT_ERROR :
return "MQTT_RX_BUFFER_TOO_SHORT_ERROR";
case MQTT_TX_BUFFER_TOO_SHORT_ERROR :
return "MQTT_TX_BUFFER_TOO_SHORT_ERROR";
case MQTT_MAX_SUBSCRIPTIONS_REACHED_ERROR :
return "MQTT_MAX_SUBSCRIPTIONS_REACHED_ERROR";
case MQTT_DECODE_REMAINING_LENGTH_ERROR :
return "MQTT_DECODE_REMAINING_LENGTH_ERROR";
case MQTT_CONNACK_UNKNOWN_ERROR :
return "MQTT_CONNACK_UNKNOWN_ERROR";
case MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR :
return "MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR";
case MQTT_CONNACK_IDENTIFIER_REJECTED_ERROR:
return "MQTT_CONNACK_IDENTIFIER_REJECTED_ERROR";
case MQTT_CONNACK_SERVER_UNAVAILABLE_ERROR :
return "MQTT_CONNACK_SERVER_UNAVAILABLE_ERROR";
case MQTT_CONNACK_BAD_USERDATA_ERROR:
return "MQTT_CONNACK_BAD_USERDATA_ERROR";
case MQTT_CONNACK_NOT_AUTHORIZED_ERROR :
return "MQTT_CONNACK_NOT_AUTHORIZED_ERROR";
case JSON_PARSE_ERROR :
return "JSON_PARSE_ERROR";
case SHADOW_WAIT_FOR_PUBLISH :
return "SHADOW_WAIT_FOR_PUBLISH";
case SHADOW_JSON_BUFFER_TRUNCATED :
return "SHADOW_JSON_BUFFER_TRUNCATED";
case SHADOW_JSON_ERROR :
return "SHADOW_JSON_ERROR";
case MUTEX_INIT_ERROR :
return "MUTEX_INIT_ERROR";
case MUTEX_LOCK_ERROR:
return "MUTEX_LOCK_ERROR";
case MUTEX_UNLOCK_ERROR :
return "MUTEX_UNLOCK_ERROR";
case MUTEX_DESTROY_ERROR :
return "MUTEX_DESTROY_ERROR";
default:
return "Unknown error!";
}
} // AWS#errorToString

/**
* @brief Connect to the AWS IoT service.
Expand Down
1 change: 1 addition & 0 deletions cpp_utils/AWS.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class AWS {

void connect(std::string clientId);
void disconnect();
static std::string errorToString(IoT_Error_t err); // Convert an AWS IoT error code to a string representation.
void init(std::string host=CONFIG_AWS_IOT_MQTT_HOST, uint16_t port=CONFIG_AWS_IOT_MQTT_PORT);
void publish(std::string topic, std::string payload, QoS qos = QOS0);
void subscribe(std::string topic);
Expand Down
200 changes: 200 additions & 0 deletions cpp_utils/Console.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
/*
* Console.cpp
*
* Created on: Jun 15, 2018
* Author: kolban
*/

/**
* Example:
* Argtable argtable;
* argtable.addString("myparam", "l", "list", "Get Listings");
* argtable.parse(argc, argv);
* ArgTableEntry_String* pStr = (ArgTableEntry_String*)argTable.get("myparam");
* pStr->getValue();
*/
#include "Console.h"

/**
* Argtable instance constructor.
*/
ArgTable::ArgTable() {
m_argtable = nullptr;
m_argEnd = nullptr;
} // ArgTable#ArgTable


/**
* Argtable instance destructor.
*/
ArgTable::~ArgTable() {
freeArgtable(); // Release any resources associated with the argtable.
} // ArgTable#~ArgTable


/**
* Build the ArgTable that will be used for parsing.
*/
/* private */ void ArgTable::build() {
/*
* The m_argTableEntries is a std::list that contains the argtable entries in the form of a std::pair. We
* allocate storage for the ArgTable and then populate it. The last entry of the argtable must be an end marker.
*/
int size = m_argTableEntries.size();
m_argtable = new void*[size + 1];
int i=0;
for (auto it = m_argTableEntries.begin(); it != m_argTableEntries.end(); ++it) {
m_argtable[i] = it->second->getEntry();
i++;
}
m_argEnd = arg_end(10);
m_argtable[i] = m_argEnd;
} // ArgTable#build


ArgTableEntry_Date ArgTable::addDate(std::string name, std::string shortopts, std::string longopts, std::string glossary) {
ArgTableEntry_Date* pDate = new ArgTableEntry_Date(shortopts, longopts, glossary);
m_argTableEntries.push_back(std::make_pair(name, pDate));
return *pDate;
} // ArgTable#addDate


ArgTableEntry_Double ArgTable::addDouble(std::string name, std::string shortopts, std::string longopts, std::string glossary) {
ArgTableEntry_Double* pDouble = new ArgTableEntry_Double(shortopts, longopts, glossary);
m_argTableEntries.push_back(std::make_pair(name, pDouble));
return *pDouble;
} // ArgTable#addDouble


ArgTableEntry_File ArgTable::addFile(std::string name, std::string shortopts, std::string longopts, std::string glossary) {
ArgTableEntry_File* pFile = new ArgTableEntry_File(shortopts, longopts, glossary);
m_argTableEntries.push_back(std::make_pair(name, pFile));
return *pFile;
} // ArgTable#addFile


ArgTableEntry_Int ArgTable::addInt(std::string name, std::string shortopts, std::string longopts, std::string glossary) {
ArgTableEntry_Int* pInt = new ArgTableEntry_Int(shortopts, longopts, glossary);
m_argTableEntries.push_back(std::make_pair(name, pInt));
return *pInt;
} // ArgTable#addInt


ArgTableEntry_Lit ArgTable::addLit(std::string name, std::string shortopts, std::string longopts, std::string glossary) {
ArgTableEntry_Lit* pLit = new ArgTableEntry_Lit(shortopts, longopts, glossary);
m_argTableEntries.push_back(std::make_pair(name, pLit));
return *pLit;
} // ArgTable#addLit


ArgTableEntry_String ArgTable::addString(std::string name, std::string shortopts, std::string longopts, std::string glossary, int min, int max) {
ArgTableEntry_String* pStr = new ArgTableEntry_String(shortopts, longopts, glossary, min, max);
m_argTableEntries.push_back(std::make_pair(name, pStr));
return *pStr;
} // ArgTable#addString


/**
* Parse the input and output parameters against this argtable.
* @param argc A count of the number of parameters.
* @param argv An array of string parameters.
* @return The number of errors detected.
*/
int ArgTable::parse(int argc, char* argv[]) {
if (m_argtable == nullptr) { // If we don't have an argtable, build it.
build();
}
int nErrors = arg_parse(argc, argv, m_argtable);
return nErrors;
} // ArgTable#parse


/**
* Print any errors associated with the parsing.
*/
void ArgTable::printErrors(FILE* fp, std::string progName) {
if (m_argEnd != nullptr) {
arg_print_errors(fp, m_argEnd, progName.c_str());
}
} // ArgTable#printErrors


/**
* Release the argtable data.
*/
/* private */void ArgTable::freeArgtable() {
if (m_argtable != nullptr) {
arg_free(m_argtable);
m_argtable = nullptr;
m_argEnd = nullptr;
}
} // ArgTable#freeArgtable


ArgTableEntry_Date::ArgTableEntry_Date(std::string shortopts, std::string longopts, std::string glossary) {
m_argDate = arg_daten(shortopts.c_str(), longopts.c_str(), "", "", 0, 1, glossary.c_str());
m_type = ArgType_t::DATE;
} // ArgTableEntry_Date#ArgTableEntry_Date


int ArgTableEntry_Date::getCount() {
return m_argDate->count;
} // ArgTableEntry_Date#getCount


ArgTableEntry_Double::ArgTableEntry_Double(std::string shortopts, std::string longopts, std::string glossary) {
m_argDbl = arg_dbln(shortopts.c_str(), longopts.c_str(), "", 0, 1, glossary.c_str());
m_type = ArgType_t::DBL;
}

int ArgTableEntry_Double::getCount() {
return m_argDbl->count;
}

ArgTableEntry_File::ArgTableEntry_File(std::string shortopts, std::string longopts, std::string glossary) {
m_argFile = arg_filen(shortopts.c_str(), longopts.c_str(), "", 0, 1, glossary.c_str());
m_type = ArgType_t::FILE;
}

int ArgTableEntry_File::getCount() {
return m_argFile->count;
}

ArgTableEntry_Int::ArgTableEntry_Int(std::string shortopts, std::string longopts, std::string glossary) {
m_argInt = arg_intn(shortopts.c_str(), longopts.c_str(), "", 0, 1, glossary.c_str());
m_type = ArgType_t::INT;
}

int ArgTableEntry_Int::getCount() {
return m_argInt->count;
}

ArgTableEntry_Lit::ArgTableEntry_Lit(std::string shortopts, std::string longopts, std::string glossary) {
m_argLit = arg_litn(shortopts.c_str(), longopts.c_str(), 0, 1, glossary.c_str());
m_type = ArgType_t::LIT;
}

int ArgTableEntry_Lit::getCount() {
return m_argLit->count;
}

int ArgTableEntry_Regex::getCount() {
return m_argRex->count;
}

ArgTableEntry_String::ArgTableEntry_String(std::string shortopts, std::string longopts, std::string glossary, int min, int max) {
m_argStr = arg_strn(shortopts.c_str(), longopts.c_str(), "", min, max, glossary.c_str());
m_type = ArgType_t::STR;
}

int ArgTableEntry_String::getCount() {
return m_argStr->count;
}


Console::Console() {
}

Console::~Console() {
}

Loading

0 comments on commit db78095

Please sign in to comment.