[tests] Added -Wall and use TinyConsole::string
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
# GCC
|
# GCC
|
||||||
# CXXFLAGS = -Wextra -Wall -std=gnu++11 -fno-exceptions -fno-threadsafe-statics
|
# CXXFLAGS = -Wextra -Wall -std=gnu++11 -fno-exceptions -fno-threadsafe-statics
|
||||||
# EXTRA_CXXFLAGS=-g3 -O0
|
CXXFLAGS=-D_GNU_SOURCE -Werror=return-type -std=gnu++11 -Wall
|
||||||
|
|
||||||
# CLANG SANITIZE
|
# CLANG SANITIZE
|
||||||
# CXX=clang
|
# CXX=clang
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
using string = TinyConsole::string;
|
||||||
|
|
||||||
bool echo_on = true;
|
bool echo_on = true;
|
||||||
auto green = TinyConsole::green;
|
auto green = TinyConsole::green;
|
||||||
auto red = TinyConsole::red;
|
auto red = TinyConsole::red;
|
||||||
@@ -24,13 +26,13 @@ const char* password = "";
|
|||||||
struct free_broker
|
struct free_broker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
free_broker(const char* s, uint16_t p, const char* comment) : url(s), port(p) {}
|
free_broker(const char* s, uint16_t p, const char* /* comment */) : url(s), port(p) {}
|
||||||
|
|
||||||
TinyString url;
|
string url;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::map<TinyString, free_broker> list =
|
const std::map<string, free_broker> list =
|
||||||
{
|
{
|
||||||
{ "mqtthq", { "public.mqtthq.com" , 8083, "publish/subscribe" }},
|
{ "mqtthq", { "public.mqtthq.com" , 8083, "publish/subscribe" }},
|
||||||
{ "hivemq", { "broker.hivemq.com", 1883, "" }}
|
{ "hivemq", { "broker.hivemq.com", 1883, "" }}
|
||||||
@@ -65,13 +67,13 @@ void onPublish(const MqttClient* srce, const Topic& topic, const char* payload,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<TinyString, MqttClient*> clients;
|
std::map<string, MqttClient*> clients;
|
||||||
std::map<TinyString, MqttBroker*> brokers;
|
std::map<string, MqttBroker*> brokers;
|
||||||
std::map<TinyString, TinyString> vars;
|
std::map<string, string> vars;
|
||||||
|
|
||||||
void eval(TinyString& cmd);
|
void eval(string& cmd);
|
||||||
|
|
||||||
void replace(const char* d, TinyString& str, TinyString srch, TinyString to)
|
void replace(const char* d, string& str, string srch, string to)
|
||||||
{
|
{
|
||||||
if (d[0] && d[1])
|
if (d[0] && d[1])
|
||||||
{
|
{
|
||||||
@@ -79,7 +81,7 @@ void replace(const char* d, TinyString& str, TinyString srch, TinyString to)
|
|||||||
to=d[0]+to+d[1];
|
to=d[0]+to+d[1];
|
||||||
|
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
while((pos=str.find(srch, pos)) != TinyString::npos)
|
while((pos=str.find(srch, pos)) != string::npos)
|
||||||
{
|
{
|
||||||
str.erase(pos, srch.length());
|
str.erase(pos, srch.length());
|
||||||
str.insert(pos, to);
|
str.insert(pos, to);
|
||||||
@@ -88,7 +90,7 @@ void replace(const char* d, TinyString& str, TinyString srch, TinyString to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void replaceVars(TinyString& cmd)
|
void replaceVars(string& cmd)
|
||||||
{
|
{
|
||||||
cmd = ' '+cmd+' ';
|
cmd = ' '+cmd+' ';
|
||||||
|
|
||||||
@@ -104,10 +106,10 @@ void replaceVars(TinyString& cmd)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onCommand(const TinyString& command)
|
void onCommand(const string& command)
|
||||||
{
|
{
|
||||||
Console << endl;
|
Console << endl;
|
||||||
TinyString cmd=command;
|
string cmd=command;
|
||||||
if (cmd.substr(0,3)!="set") replaceVars(cmd);
|
if (cmd.substr(0,3)!="set") replaceVars(cmd);
|
||||||
eval(cmd);
|
eval(cmd);
|
||||||
Console << endl;
|
Console << endl;
|
||||||
@@ -158,12 +160,12 @@ void setup()
|
|||||||
if (Console.isTerm()) onCommand("every 333 view");
|
if (Console.isTerm()) onCommand("every 333 view");
|
||||||
}
|
}
|
||||||
|
|
||||||
TinyString getword(TinyString& str, const char* if_empty=nullptr, char sep=' ');
|
string getword(string& str, const char* if_empty=nullptr, char sep=' ');
|
||||||
|
|
||||||
int getint(TinyString& str, const int if_empty=0)
|
int getint(string& str, const int if_empty=0)
|
||||||
{
|
{
|
||||||
TinyString str2=str;
|
string str2=str;
|
||||||
TinyString sword = getword(str);
|
string sword = getword(str);
|
||||||
if (sword[0] and isdigit(sword[0]))
|
if (sword[0] and isdigit(sword[0]))
|
||||||
{
|
{
|
||||||
int ret=atoi(sword.c_str());
|
int ret=atoi(sword.c_str());
|
||||||
@@ -175,11 +177,11 @@ int getint(TinyString& str, const int if_empty=0)
|
|||||||
return if_empty;
|
return if_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
TinyString getword(TinyString& str, const char* if_empty/*=nullptr*/, char sep/*=' '*/)
|
string getword(string& str, const char* if_empty/*=nullptr*/, char sep/*=' '*/)
|
||||||
{
|
{
|
||||||
char quote=(str[0]=='"' or str[0]=='\'' ? str[0] : 0);
|
char quote=(str[0]=='"' or str[0]=='\'' ? str[0] : 0);
|
||||||
if (quote) str.erase(0,1);
|
if (quote) str.erase(0,1);
|
||||||
TinyString sword;
|
string sword;
|
||||||
while(str.length() and (str[0]!=sep or quote))
|
while(str.length() and (str[0]!=sep or quote))
|
||||||
{
|
{
|
||||||
if (str[0]==quote)
|
if (str[0]==quote)
|
||||||
@@ -222,7 +224,7 @@ TinyString getword(TinyString& str, const char* if_empty/*=nullptr*/, char sep/*
|
|||||||
return sword;
|
return sword;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isaddr(TinyString s)
|
bool isaddr(string s)
|
||||||
{
|
{
|
||||||
if (s.length()==0 or s.length()>3) return false;
|
if (s.length()==0 or s.length()>3) return false;
|
||||||
for(char c: s)
|
for(char c: s)
|
||||||
@@ -230,14 +232,14 @@ bool isaddr(TinyString s)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TinyString getip(TinyString& str, const char* if_empty=nullptr, char sep=' ')
|
string getip(string& str, const char* if_empty=nullptr, char sep=' ')
|
||||||
{
|
{
|
||||||
TinyString addr=getword(str, if_empty, sep);
|
string addr=getword(str, if_empty, sep);
|
||||||
TinyString ip=addr;
|
string ip=addr;
|
||||||
std::vector<TinyString> build;
|
std::vector<string> build;
|
||||||
while(ip.length())
|
while(ip.length())
|
||||||
{
|
{
|
||||||
TinyString b=getword(ip,nullptr,'.');
|
string b=getword(ip,nullptr,'.');
|
||||||
if (isaddr(b) && build.size()<4)
|
if (isaddr(b) && build.size()<4)
|
||||||
{
|
{
|
||||||
build.push_back(b);
|
build.push_back(b);
|
||||||
@@ -253,7 +255,7 @@ TinyString getip(TinyString& str, const char* if_empty=nullptr, char sep=' ')
|
|||||||
b << (int)local[3-build.size()];
|
b << (int)local[3-build.size()];
|
||||||
build.insert(build.begin(), b.str().c_str());
|
build.insert(build.begin(), b.str().c_str());
|
||||||
}
|
}
|
||||||
for(TinyString s: build)
|
for(string s: build)
|
||||||
{
|
{
|
||||||
if (addr.length()) addr += '.';
|
if (addr.length()) addr += '.';
|
||||||
addr += s;
|
addr += s;
|
||||||
@@ -262,20 +264,20 @@ TinyString getip(TinyString& str, const char* if_empty=nullptr, char sep=' ')
|
|||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<TinyString> commands = {
|
std::set<string> commands = {
|
||||||
"broker", "blink", "client", "connect",
|
"broker", "blink", "client", "connect",
|
||||||
"create", "delete", "debug", "help", "interval",
|
"create", "delete", "debug", "help", "interval",
|
||||||
"list", "ls", "ip", "off", "on", "set",
|
"list", "ls", "ip", "off", "on", "set",
|
||||||
"publish", "reset", "subscribe", "unsubscribe", "view", "echo", "every"
|
"publish", "reset", "subscribe", "unsubscribe", "view", "echo", "every"
|
||||||
};
|
};
|
||||||
|
|
||||||
void convertToCommand(TinyString& search)
|
void convertToCommand(string& search)
|
||||||
{
|
{
|
||||||
while(search[0]==' ') search.erase(0,1);
|
while(search[0]==' ') search.erase(0,1);
|
||||||
if (search.length()==0) return;
|
if (search.length()==0) return;
|
||||||
TinyString matches;
|
string matches;
|
||||||
int count=0;
|
int count=0;
|
||||||
for(TinyString cmd: commands)
|
for(string cmd: commands)
|
||||||
{
|
{
|
||||||
if (cmd.substr(0, search.length()) == search)
|
if (cmd.substr(0, search.length()) == search)
|
||||||
{
|
{
|
||||||
@@ -293,7 +295,7 @@ void convertToCommand(TinyString& search)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compare(TinyString s, const char* cmd)
|
bool compare(string s, const char* cmd)
|
||||||
{
|
{
|
||||||
uint8_t p=0;
|
uint8_t p=0;
|
||||||
while(s[p++]==*cmd++)
|
while(s[p++]==*cmd++)
|
||||||
@@ -304,11 +306,11 @@ bool compare(TinyString s, const char* cmd)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
using ClientFunction = void(*)(TinyString& cmd, MqttClient* publish);
|
using ClientFunction = void(*)(string& cmd, MqttClient* publish);
|
||||||
|
|
||||||
struct Every
|
struct Every
|
||||||
{
|
{
|
||||||
TinyString cmd;
|
string cmd;
|
||||||
uint32_t ms;
|
uint32_t ms;
|
||||||
uint32_t next;
|
uint32_t next;
|
||||||
uint32_t underrun=0;
|
uint32_t underrun=0;
|
||||||
@@ -338,9 +340,9 @@ int16_t blink;
|
|||||||
|
|
||||||
std::vector<Every> everies;
|
std::vector<Every> everies;
|
||||||
|
|
||||||
void clientConnect(MqttClient* client, TinyString& cmd)
|
void clientConnect(MqttClient* client, string& cmd)
|
||||||
{
|
{
|
||||||
TinyString remote = getword(cmd);
|
string remote = getword(cmd);
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
auto it=list.find(remote);
|
auto it=list.find(remote);
|
||||||
if (it != list.end())
|
if (it != list.end())
|
||||||
@@ -356,18 +358,18 @@ void clientConnect(MqttClient* client, TinyString& cmd)
|
|||||||
Console << (client->connected() ? "connected." : "not connected") << endl;
|
Console << (client->connected() ? "connected." : "not connected") << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void eval(TinyString& cmd)
|
void eval(string& cmd)
|
||||||
{
|
{
|
||||||
while(cmd.length())
|
while(cmd.length())
|
||||||
{
|
{
|
||||||
MqttError retval = MqttOk;
|
MqttError retval = MqttOk;
|
||||||
|
|
||||||
TinyString s;
|
string s;
|
||||||
MqttBroker* broker = nullptr;
|
MqttBroker* broker = nullptr;
|
||||||
MqttClient* client = nullptr;
|
MqttClient* client = nullptr;
|
||||||
|
|
||||||
// client.function notation
|
// client.function notation
|
||||||
if (cmd.find('.') != TinyString::npos &&
|
if (cmd.find('.') != string::npos &&
|
||||||
cmd.find('.') < cmd.find(' '))
|
cmd.find('.') < cmd.find(' '))
|
||||||
{
|
{
|
||||||
s=getword(cmd, nullptr, '.');
|
s=getword(cmd, nullptr, '.');
|
||||||
@@ -619,7 +621,7 @@ void eval(TinyString& cmd)
|
|||||||
}
|
}
|
||||||
else if (compare(s, "broker"))
|
else if (compare(s, "broker"))
|
||||||
{
|
{
|
||||||
TinyString id=getword(cmd);
|
string id=getword(cmd);
|
||||||
if (clients.find(id) != clients.end())
|
if (clients.find(id) != clients.end())
|
||||||
{
|
{
|
||||||
Console << "A client already have that name" << endl;
|
Console << "A client already have that name" << endl;
|
||||||
@@ -650,7 +652,7 @@ void eval(TinyString& cmd)
|
|||||||
}
|
}
|
||||||
else if (compare(s, "client"))
|
else if (compare(s, "client"))
|
||||||
{
|
{
|
||||||
TinyString id=getword(cmd);
|
string id=getword(cmd);
|
||||||
if (brokers.find(id) != brokers.end())
|
if (brokers.find(id) != brokers.end())
|
||||||
{
|
{
|
||||||
Console << "A broker have that name" << endl;
|
Console << "A broker have that name" << endl;
|
||||||
@@ -687,7 +689,7 @@ void eval(TinyString& cmd)
|
|||||||
}
|
}
|
||||||
else if (compare(s, "set"))
|
else if (compare(s, "set"))
|
||||||
{
|
{
|
||||||
TinyString name(getword(cmd));
|
string name(getword(cmd));
|
||||||
if (name.length()==0)
|
if (name.length()==0)
|
||||||
{
|
{
|
||||||
for(auto it: vars)
|
for(auto it: vars)
|
||||||
@@ -799,7 +801,7 @@ void loop()
|
|||||||
if (not every.active) continue;
|
if (not every.active) continue;
|
||||||
if (every.ms && every.cmd.length() && ms > every.next)
|
if (every.ms && every.cmd.length() && ms > every.next)
|
||||||
{
|
{
|
||||||
TinyString cmd(every.cmd);
|
string cmd(every.cmd);
|
||||||
eval(cmd);
|
eval(cmd);
|
||||||
every.next += every.ms;
|
every.next += every.ms;
|
||||||
if (ms > every.next and ms > every.underrun)
|
if (ms > every.next and ms > every.underrun)
|
||||||
@@ -832,7 +834,6 @@ void loop()
|
|||||||
out++;
|
out++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long count;
|
|
||||||
#if defined(ESP9266)
|
#if defined(ESP9266)
|
||||||
MDNS.update();
|
MDNS.update();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user