Reformat source
This commit is contained in:
68
main.cpp
68
main.cpp
@ -20,7 +20,7 @@
|
||||
|
||||
sig_atomic_t stop = false;
|
||||
|
||||
void intHandler(int sig)
|
||||
void intHandler(int sig)
|
||||
{
|
||||
stop = true;
|
||||
}
|
||||
@ -60,18 +60,24 @@ static int parseCmdArgs(int argc, char** argv, Config *config)
|
||||
}
|
||||
else if (std::string(argv[i]) == "--serialport" || std::string(argv[i]) == "-p")
|
||||
{
|
||||
if(argc > i) config->portFileName = argv[i+1];
|
||||
else return -1;
|
||||
if(argc > i)
|
||||
config->portFileName = argv[i+1];
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
else if (std::string(argv[i]) == "--port" || std::string(argv[i]) == "-P")
|
||||
{
|
||||
if(argc > i) config->port = atoi(argv[i+1]);
|
||||
else return -1;
|
||||
if(argc > i)
|
||||
config->port = atoi(argv[i+1]);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
else if (std::string(argv[i]) == "--baud" || std::string(argv[i]) == "-b")
|
||||
{
|
||||
if(argc > i) config->baud = atoi(argv[i+1]);
|
||||
else return -1;
|
||||
if(argc > i)
|
||||
config->baud = atoi(argv[i+1]);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
else if (std::string(argv[i]) == "--sinkless" || std::string(argv[i]) == "-s" )
|
||||
{
|
||||
@ -94,17 +100,18 @@ static int parseCmdArgs(int argc, char** argv, Config *config)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void acceptThreadFunction( TCPServerSocket* servSock, std::vector<ClientHandler>* clients, std::mutex* clientsMutex, int pollQue )
|
||||
void acceptThreadFunction( TCPServerSocket* servSock, std::vector<ClientHandler>* clients, std::mutex* clientsMutex,
|
||||
int pollQue )
|
||||
{
|
||||
while(!stop)
|
||||
{
|
||||
while(!stop)
|
||||
{
|
||||
TCPSocket* newSock = servSock->accept();
|
||||
if(newSock != nullptr)
|
||||
{
|
||||
clientsMutex->lock();
|
||||
clients->push_back(ClientHandler(newSock)); // Wait for a client to connect
|
||||
struct epoll_event ev;
|
||||
ev.events = EPOLLIN;
|
||||
ev.events = EPOLLIN;
|
||||
ev.data.fd = newSock->getFD();
|
||||
clientsMutex->unlock();
|
||||
epoll_ctl(pollQue, EPOLL_CTL_ADD, newSock->getFD(), &ev);
|
||||
@ -123,11 +130,12 @@ int openSerialPort(const Config& config)
|
||||
{
|
||||
std::cout<<"Opeing serial port: "<<config.portFileName<<" at "<<config.baud<<" baud\n";
|
||||
serial = serialport_init(config.portFileName.c_str(), config.baud);
|
||||
if(serial == -1)
|
||||
if(serial == -1)
|
||||
std::cout<<"Opeing serial port failed\n";
|
||||
tcflush(serial, TCIOFLUSH);
|
||||
}
|
||||
else std::cout<<"Sinkless mode\n";
|
||||
else
|
||||
std::cout<<"Sinkless mode\n";
|
||||
return serial;
|
||||
}
|
||||
|
||||
@ -162,12 +170,12 @@ int serialPortReconnect(Config& config, std::string err)
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
Config config;
|
||||
|
||||
|
||||
if(parseCmdArgs(argc, argv, &config) != 0)
|
||||
return -1;
|
||||
|
||||
|
||||
std::cout<<"UVOS serial mulitplexer "<<VERSION<<'\n';
|
||||
|
||||
|
||||
int pollQue = epoll_create1(0);
|
||||
|
||||
std::mutex clientsMutex;
|
||||
@ -180,23 +188,23 @@ int main(int argc, char* argv[])
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
struct epoll_event ev = {};
|
||||
ev.events = EPOLLIN;
|
||||
ev.events = EPOLLIN;
|
||||
ev.data.fd = -1;
|
||||
epoll_ctl(pollQue, EPOLL_CTL_ADD, serial, &ev);
|
||||
}
|
||||
tcflush(serial, TCIOFLUSH);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
std::cout<<"Sinkless mode\n";
|
||||
}
|
||||
|
||||
|
||||
std::thread* acceptThread;
|
||||
TCPServerSocket* servSock;
|
||||
|
||||
|
||||
std::cout<<"opening TCP socket on port "<<config.port<<'\n';
|
||||
try
|
||||
{
|
||||
@ -209,13 +217,13 @@ int main(int argc, char* argv[])
|
||||
std::cerr<<"Could not open port"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
signal(SIGINT, intHandler);
|
||||
signal(SIGTERM, intHandler);
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
std::cout<<"starting loop\n";
|
||||
|
||||
|
||||
while(!stop)
|
||||
{
|
||||
struct epoll_event ev;
|
||||
@ -224,7 +232,7 @@ int main(int argc, char* argv[])
|
||||
if(ev.data.fd != -1)
|
||||
{
|
||||
std::vector<ClientHandler>::iterator client =
|
||||
std::find(clients.begin(), clients.end(), ev.data.fd);
|
||||
std::find(clients.begin(), clients.end(), ev.data.fd);
|
||||
if(client == clients.end())
|
||||
continue;
|
||||
clientsMutex.lock();
|
||||
@ -251,7 +259,7 @@ int main(int argc, char* argv[])
|
||||
epoll_ctl(pollQue, EPOLL_CTL_ADD, serial, &ev);
|
||||
}
|
||||
}
|
||||
if((ev.events & (EPOLLHUP | EPOLLERR)) || client->isDisconnected())
|
||||
if((ev.events & (EPOLLHUP | EPOLLERR)) || client->isDisconnected())
|
||||
{
|
||||
client->cleanUp();
|
||||
clients.erase(client);
|
||||
@ -263,7 +271,7 @@ int main(int argc, char* argv[])
|
||||
{
|
||||
char buffer[4096];
|
||||
ssize_t readlen = sRead(serial, buffer, 4096);
|
||||
if(readlen < 0 && (errno != EAGAIN || errno != EWOULDBLOCK))
|
||||
if(readlen < 0 && (errno != EAGAIN || errno != EWOULDBLOCK))
|
||||
{
|
||||
close(serial);
|
||||
serial = serialPortReconnect(config, strerror(errno));
|
||||
@ -291,7 +299,7 @@ int main(int argc, char* argv[])
|
||||
std::cout<<"\" to clients from serial\n";
|
||||
}
|
||||
clientsMutex.lock();
|
||||
for(ClientHandler& client : clients)
|
||||
for(ClientHandler& client : clients)
|
||||
{
|
||||
client.write(buffer, readlen);
|
||||
}
|
||||
@ -299,7 +307,7 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
acceptThread->join();
|
||||
delete acceptThread;
|
||||
for(ClientHandler& client : clients)
|
||||
|
Reference in New Issue
Block a user