diff --git a/CMakeLists.txt b/CMakeLists.txt index e3fff2c9843beeafc69ee6402cf6d3719bc464a8..b866f786d9bde60f7b86567c89b4b1cb5c12a1b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,7 +134,7 @@ check_include_file_cxx("opencv2/cudastereo.hpp" HAVE_OPENCVCUDA) find_program(CPPCHECK_FOUND cppcheck) if (CPPCHECK_FOUND) message(STATUS "Found cppcheck: will perform source checks") - set(CMAKE_CXX_CPPCHECK "cppcheck" "--enable=style" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp") + set(CMAKE_CXX_CPPCHECK "cppcheck" "--enable=warning,performance,portability,style" "--inline-suppr" "--std=c++11" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp" "--quiet") endif() # include_directories(${PROJECT_SOURCE_DIR}/common/cpp/include) diff --git a/components/common/cpp/include/ftl/cuda_common.hpp b/components/common/cpp/include/ftl/cuda_common.hpp index 91d5a28c30e1fa911ff984e8a14dabf5acc0aaea..1df4b1b2fa89bb495f4e0108740774e8753a2afa 100644 --- a/components/common/cpp/include/ftl/cuda_common.hpp +++ b/components/common/cpp/include/ftl/cuda_common.hpp @@ -34,7 +34,7 @@ class TextureObject { TextureObject(const TextureObject &t); ~TextureObject(); - int pitch() const { return pitch_; } + size_t pitch() const { return pitch_; } T *devicePtr() { return ptr_; }; __host__ __device__ T *devicePtr(int v) { return &ptr_[v*pitch2_]; } __host__ __device__ int width() const { return width_; } @@ -148,8 +148,8 @@ TextureObject<T>::TextureObject(size_t width, size_t height) { cudaTextureObject_t tex = 0; cudaCreateTextureObject(&tex, &resDesc, &texDesc, NULL); texobj_ = tex; - width_ = width; - height_ = height; + width_ = (int)width; + height_ = (int)height; needsfree_ = true; pitch2_ = pitch_ / sizeof(T); //needsdestroy_ = true; diff --git a/components/common/cpp/include/loguru.hpp b/components/common/cpp/include/loguru.hpp index 2bfe8e0e2e174b107fea79dd286be956adc00a82..e43dc742e83d21405dacdafafa830a3251703998 100644 --- a/components/common/cpp/include/loguru.hpp +++ b/components/common/cpp/include/loguru.hpp @@ -536,7 +536,7 @@ namespace loguru class LOGURU_EXPORT LogScopeRAII { public: - LogScopeRAII() : _file(nullptr) {} // No logging + LogScopeRAII() : _file(nullptr), _line(0), _indent_stderr(false), _start_time_ns(0), _name() {} // No logging LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(5, 6); ~LogScopeRAII(); diff --git a/components/common/cpp/src/configuration.cpp b/components/common/cpp/src/configuration.cpp index b2e8c23c723f5255aa4728ef9820c2123b15f03d..c4369bd0057488455e43770aa7772ff350b6f395 100644 --- a/components/common/cpp/src/configuration.cpp +++ b/components/common/cpp/src/configuration.cpp @@ -143,6 +143,7 @@ static bool mergeConfig(const string path) { } catch (...) { LOG(ERROR) << "Unknown error opening config file"; } + return false; } else { return false; } @@ -216,6 +217,7 @@ bool ftl::config::update(const std::string &puri, const json_t &value) { if (cfg) { DLOG(1) << "Updating CFG: " << head << "[" << tail << "] = " << value; cfg->set<json_t>(tail, value); + return true; } else { DLOG(1) << "Updating: " << head << "[" << tail << "] = " << value; auto &r = resolve(head, false); diff --git a/components/common/cpp/src/loguru.cpp b/components/common/cpp/src/loguru.cpp index ccbc864b47d8c92b2883348f77e6b5972e4fa0b8..b481a411ef0ae05a23b66289abb4297138b994fd 100644 --- a/components/common/cpp/src/loguru.cpp +++ b/components/common/cpp/src/loguru.cpp @@ -1,4 +1,5 @@ // Disable all warnings from gcc/clang: +#ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpragmas" @@ -15,6 +16,7 @@ #pragma GCC diagnostic ignored "-Wunknown-pragmas" #pragma GCC diagnostic ignored "-Wunused-macros" #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif // __GNUC__ #define LOGURU_REPLACE_GLOG 1 #include "loguru.hpp" @@ -508,6 +510,7 @@ namespace loguru Text errno_as_text() { + // cppcheck-suppress unusedVariable char buff[256]; #if defined(__GLIBC__) && defined(_GNU_SOURCE) // GNU Version @@ -1067,7 +1070,7 @@ namespace loguru i - skip, int(2 + sizeof(void*) * 2), callstack[i], status == 0 ? demangled : info.dli_sname == 0 ? symbols[i] : info.dli_sname, - static_cast<char*>(callstack[i]) - static_cast<char*>(info.dli_saddr)); + (ssize_t)(static_cast<char*>(callstack[i]) - static_cast<char*>(info.dli_saddr))); free(demangled); } else { snprintf(buf, sizeof(buf), "%-3d %*p %s\n", diff --git a/components/common/cpp/src/uri.cpp b/components/common/cpp/src/uri.cpp index 2fcbd86d1d3c824627641474720067015fb8debd..ab306786b874a0ffa0eefa7e50eb5d11b68f3612 100644 --- a/components/common/cpp/src/uri.cpp +++ b/components/common/cpp/src/uri.cpp @@ -106,7 +106,7 @@ string URI::to_string() const { } string URI::getPathSegment(int n) const { - int N = (n < 0) ? m_pathseg.size()+n : n; + size_t N = (n < 0) ? m_pathseg.size()+n : n; if (N < 0 || N >= m_pathseg.size()) return ""; else return m_pathseg[N]; } @@ -123,8 +123,8 @@ string URI::getBaseURI(int n) { return r; } else if (m_pathseg.size()+n >= 0) { string r = m_protostr + string("://") + m_host + ((m_port != 0) ? string(":") + std::to_string(m_port) : ""); - int N = m_pathseg.size()+n; - for (int i=0; i<N; i++) { + size_t N = m_pathseg.size()+n; + for (size_t i=0; i<N; i++) { r += "/"; r += getPathSegment(i); } diff --git a/components/control/cpp/src/master.cpp b/components/control/cpp/src/master.cpp index 9421a733cd3236e21d734f67b3b8105f0948f2c3..1724f1dd58f84610ba0bb576cb241bf2958137b8 100644 --- a/components/control/cpp/src/master.cpp +++ b/components/control/cpp/src/master.cpp @@ -48,23 +48,23 @@ void Master::set(const ftl::UUID &peer, const string &uri, json_t &value) { } vector<string> Master::getConfigurables() { - + return {}; } vector<string> Master::getConfigurables(const ftl::UUID &peer) { - + return {}; } vector<json_t> Master::get(const string &uri) { - + return {}; } json_t Master::getOne(const string &uri) { - + return {}; } json_t Master::get(const ftl::UUID &peer, const string &uri) { - + return {}; } void Master::watch(const string &uri, function<void()> f) { diff --git a/components/net/cpp/include/ftl/net/common.hpp b/components/net/cpp/include/ftl/net/common.hpp new file mode 100644 index 0000000000000000000000000000000000000000..61914d81a93684f488330974a8cedf92c29681e8 --- /dev/null +++ b/components/net/cpp/include/ftl/net/common.hpp @@ -0,0 +1,22 @@ +#ifndef _FTL_NET_COMMON_HPP_ +#define _FTL_NET_COMMON_HPP_ + +#ifndef WIN32 +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <arpa/inet.h> +#define INVALID_SOCKET -1 +#define SOCKET_ERROR -1 +#define SOCKET int +#endif + +#ifdef WIN32 +#include <winsock2.h> +#include <windows.h> +typedef int socklen_t; +#endif + +#endif // _FTL_NET_COMMON_HPP_ diff --git a/components/net/cpp/include/ftl/net/listener.hpp b/components/net/cpp/include/ftl/net/listener.hpp index 4c3bb83ac6bf903a23abd2d55c2b38ab3b9e4739..44690ff6327f0af7b6911cdea70869b137a27c4c 100644 --- a/components/net/cpp/include/ftl/net/listener.hpp +++ b/components/net/cpp/include/ftl/net/listener.hpp @@ -1,14 +1,7 @@ #ifndef _FTL_NET_LISTENER_HPP_ #define _FTL_NET_LISTENER_HPP_ -#ifndef WIN32 -#include <netinet/in.h> -#endif - -#ifdef WIN32 -//#include <windows.h> -#include <winsock2.h> -#endif +#include <ftl/net/common.hpp> #include <ftl/net/handlers.hpp> #include <ftl/net/peer.hpp> @@ -23,12 +16,12 @@ class Protocol; class Listener { public: explicit Listener(const char *uri); - explicit Listener(int sfd) : descriptor_(sfd), default_proto_(nullptr) {} + explicit Listener(SOCKET sfd) : descriptor_(sfd), default_proto_(nullptr) {} virtual ~Listener(); bool isListening() { return descriptor_ >= 0; } void close(); - int _socket() { return descriptor_; } + SOCKET _socket() { return descriptor_; } void setProtocol(Protocol *p) { default_proto_ = p; } @@ -36,7 +29,7 @@ class Listener { void onConnection(connecthandler_t h) { handler_connect_.push_back(h); }; private: - int descriptor_; + SOCKET descriptor_; Protocol *default_proto_; sockaddr_in slocalAddr; std::vector<connecthandler_t> handler_connect_; diff --git a/components/net/cpp/include/ftl/net/peer.hpp b/components/net/cpp/include/ftl/net/peer.hpp index 0a16dd27170268b1c098d8a235d4447b7d4354b2..6d28d3b84d1c6a9c3861c09239c9e97ccf4dc995 100644 --- a/components/net/cpp/include/ftl/net/peer.hpp +++ b/components/net/cpp/include/ftl/net/peer.hpp @@ -5,12 +5,7 @@ #define NOMINMAX #endif -#ifndef WIN32 -#define INVALID_SOCKET -1 -#include <netinet/in.h> -#else -#include <winsock2.h> -#endif +#include <ftl/net/common.hpp> //#define GLOG_NO_ABBREVIATED_SEVERITIES #include <loguru.hpp> @@ -74,7 +69,7 @@ class Peer { public: explicit Peer(const char *uri, ftl::net::Dispatcher *d=nullptr); - explicit Peer(int s, ftl::net::Dispatcher *d=nullptr); + explicit Peer(SOCKET s, ftl::net::Dispatcher *d=nullptr); ~Peer(); /** @@ -172,7 +167,7 @@ class Peer { * Get the internal OS dependent socket. * TODO(nick) Work out if this should be private. */ - int _socket() const { return sock_; }; + SOCKET _socket() const { return sock_; }; /** * Internal handlers for specific event types. This should be private but @@ -198,7 +193,7 @@ class Peer { private: // Data Status status_; - int sock_; + SOCKET sock_; ftl::URI::scheme_t scheme_; uint32_t version_; @@ -274,6 +269,7 @@ R Peer::call(const std::string &name, ARGS... args) { template <typename T, typename... ARGS> int Peer::asyncCall( const std::string &name, + // cppcheck-suppress * std::function<void(const T&)> cb, ARGS... args) { auto args_obj = std::make_tuple(args...); diff --git a/components/net/cpp/include/ftl/net/universe.hpp b/components/net/cpp/include/ftl/net/universe.hpp index 11ebcfdf51620808c1333a0be65be2688b08e7d2..169eff58923b115287539c50358fe1840e91ce57 100644 --- a/components/net/cpp/include/ftl/net/universe.hpp +++ b/components/net/cpp/include/ftl/net/universe.hpp @@ -59,7 +59,7 @@ class Universe : public ftl::Configurable { */ Peer *connect(const std::string &addr); - int numberOfPeers() const { return peers_.size(); } + size_t numberOfPeers() const { return peers_.size(); } int waitConnections(); diff --git a/components/net/cpp/include/ftl/net/ws_internal.hpp b/components/net/cpp/include/ftl/net/ws_internal.hpp index 5390f10281c860f91d35e3adf71d1101c1a0b275..ea0471a8882ae5419232ac37c5aae61c7042030a 100644 --- a/components/net/cpp/include/ftl/net/ws_internal.hpp +++ b/components/net/cpp/include/ftl/net/ws_internal.hpp @@ -6,6 +6,8 @@ #include <functional> #include <ftl/uri.hpp> +#include <ftl/net/common.hpp> + using std::size_t; namespace ftl { @@ -44,7 +46,7 @@ int ws_dispatch(const char *data, size_t len, std::function<void(const wsheader_ */ int ws_prepare(wsheader_type::opcode_type, bool useMask, size_t len, char *buffer, size_t maxlen); -bool ws_connect(int sockfd, const ftl::URI &uri); +bool ws_connect(SOCKET sockfd, const ftl::URI &uri); }; }; diff --git a/components/net/cpp/include/ftl/uuid.hpp b/components/net/cpp/include/ftl/uuid.hpp index c7c884e5defa36ee8d4cd8bdf96c4f9e263a5d52..5d494b8ddc26b262113b42db0bf1e461d61fc8c9 100644 --- a/components/net/cpp/include/ftl/uuid.hpp +++ b/components/net/cpp/include/ftl/uuid.hpp @@ -56,6 +56,7 @@ namespace ftl { if (::UuidToStringA(&guid_, &szUuid) == RPC_S_OK) { return std::string((char*)szUuid); } + return "00000000-0000-0000-0000-000000000000"; #else char b[37]; uuid_unparse(uuid_, b); diff --git a/components/net/cpp/src/listener.cpp b/components/net/cpp/src/listener.cpp index 8e0f1267f29c09c87aaea16692e08d3f93692cf9..b8f276a105920dd1933a98ebf4663619e948944e 100644 --- a/components/net/cpp/src/listener.cpp +++ b/components/net/cpp/src/listener.cpp @@ -16,6 +16,7 @@ #include <arpa/inet.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 +#define SOCKET int #endif #ifdef WIN32 @@ -29,8 +30,8 @@ using std::shared_ptr; using ftl::net::Peer; using ftl::URI; -int tcpListen(URI &uri) { - int ssock; +SOCKET tcpListen(URI &uri) { + SOCKET ssock; //std::cerr << "TCP Listen: " << uri.getHost() << " : " << uri.getPort() << std::endl; #ifdef WIN32 WSAData wsaData; @@ -90,7 +91,7 @@ int tcpListen(URI &uri) { return ssock; } -int wsListen(URI &uri) { +SOCKET wsListen(URI &uri) { return INVALID_SOCKET; } diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp index 4f76a98ff2fadb9f8f7ee669668854e8c7f9bce0..bb29691e5e8bc2d8203277e03829fff5b76ddeb9 100644 --- a/components/net/cpp/src/peer.cpp +++ b/components/net/cpp/src/peer.cpp @@ -6,11 +6,11 @@ #define NOMINMAX #endif +#include <ftl/net/common.hpp> + #include <fcntl.h> #ifdef WIN32 -#include <winsock2.h> #include <Ws2tcpip.h> -#include <windows.h> #endif #ifdef WIN32 @@ -24,17 +24,6 @@ #include <ftl/config.h> #include "net_internal.hpp" -#ifndef WIN32 -#include <unistd.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <arpa/inet.h> -#define INVALID_SOCKET -1 -#define SOCKET_ERROR -1 -#endif - #include <iostream> #include <memory> #include <algorithm> @@ -68,9 +57,9 @@ ftl::UUID ftl::net::this_peer; static ctpl::thread_pool pool(5); // TODO(nick) Move to tcp_internal.cpp -static int tcpConnect(URI &uri) { +static SOCKET tcpConnect(URI &uri) { int rc; - sockaddr_in destAddr; + //sockaddr_in destAddr; #ifdef WIN32 WSAData wsaData; @@ -81,20 +70,26 @@ static int tcpConnect(URI &uri) { #endif //We want a TCP socket - int csocket = socket(AF_INET, SOCK_STREAM, 0); + SOCKET csocket = socket(AF_INET, SOCK_STREAM, 0); if (csocket == INVALID_SOCKET) { LOG(ERROR) << "Unable to create TCP socket"; return INVALID_SOCKET; } - #ifdef WIN32 + /*#ifdef WIN32 HOSTENT *host = gethostbyname(uri.getHost().c_str()); #else hostent *host = gethostbyname(uri.getHost().c_str()); - #endif + #endif*/ + + addrinfo hints = {}, *addrs; + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + rc = getaddrinfo(uri.getHost().c_str(), std::to_string(uri.getPort()).c_str(), &hints, &addrs); - if (host == NULL) { + if (rc != 0 || addrs == nullptr) { #ifndef WIN32 close(csocket); #else @@ -105,16 +100,18 @@ static int tcpConnect(URI &uri) { return INVALID_SOCKET; } - destAddr.sin_family = AF_INET; - destAddr.sin_addr.s_addr = ((in_addr *)(host->h_addr))->s_addr; - destAddr.sin_port = htons(uri.getPort()); + //destAddr.sin_family = AF_INET; + //destAddr.sin_addr.s_addr = ((in_addr *)(host->h_addr))->s_addr; + //destAddr.sin_port = htons(uri.getPort()); // Make nonblocking /*long arg = fcntl(csocket, F_GETFL, NULL)); arg |= O_NONBLOCK; fcntl(csocket, F_SETFL, arg) < 0)*/ - rc = ::connect(csocket, (struct sockaddr*)&destAddr, sizeof(destAddr)); + // TODO(Nick) - Check all returned addresses. + auto addr = addrs; + rc = ::connect(csocket, addr->ai_addr, (socklen_t)addr->ai_addrlen); if (rc < 0) { if (errno == EINPROGRESS) { @@ -140,7 +137,7 @@ static int tcpConnect(URI &uri) { return csocket; } -Peer::Peer(int s, Dispatcher *d) : sock_(s) { +Peer::Peer(SOCKET s, Dispatcher *d) : sock_(s) { status_ = (s == INVALID_SOCKET) ? kInvalid : kConnecting; _updateURI(); @@ -541,10 +538,10 @@ int Peer::_send() { auto send_size = send_buf_.vector_size(); int c = 0; for (int i = 0; i < send_size; i++) { - c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, send_vec[i].iov_len, 0); + c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, (int)send_vec[i].iov_len, 0); } #else - int c = ftl::net::internal::writev(sock_, send_buf_.vector(), send_buf_.vector_size()); + int c = ftl::net::internal::writev(sock_, send_buf_.vector(), (int)send_buf_.vector_size()); #endif send_buf_.clear(); diff --git a/components/net/cpp/src/universe.cpp b/components/net/cpp/src/universe.cpp index 55ab9b0a50ca43401e92c09eb69c1e9a395deeaa..28a6b00565ca2f0bffd47814a6417c4a33138f76 100644 --- a/components/net/cpp/src/universe.cpp +++ b/components/net/cpp/src/universe.cpp @@ -106,7 +106,7 @@ int Universe::_setDescriptors() { FD_ZERO(&sfdread_); FD_ZERO(&sfderror_); - int n = 0; + SOCKET n = 0; unique_lock<mutex> lk(net_mutex_); @@ -193,7 +193,7 @@ bool Universe::createResource(const std::string &uri) { int Universe::numberOfSubscribers(const std::string &res) const { auto s = subscribers_.find(res); if (s != subscribers_.end()) { - return s->second.size(); + return (int)s->second.size(); } else { return -1; } @@ -258,7 +258,8 @@ void Universe::_run() { if (selres < 0) { switch (errno) { case 9 : continue; // Bad file descriptor = socket closed - default : std::cout << "Unknown select error: " << strerror(errno) << std::endl; + case 4 : continue; // Interrupted system call ... no problem + default : LOG(WARNING) << "Unhandled select error: " << strerror(errno) << "(" << errno << ")"; } continue; } else if (selres == 0) { @@ -276,7 +277,7 @@ void Universe::_run() { sockaddr_storage addr; //Finally accept this client connection. - int csock = accept(l->_socket(), (sockaddr*)&addr, (socklen_t*)&rsize); + SOCKET csock = accept(l->_socket(), (sockaddr*)&addr, (socklen_t*)&rsize); if (csock != INVALID_SOCKET) { auto p = new Peer(csock, &disp_); diff --git a/components/net/cpp/src/ws_internal.cpp b/components/net/cpp/src/ws_internal.cpp index 50e9f8b5e3d029956b170c380b45815335b7f931..a58a47d7746f34bbfe4dc057dd3514473d029cb7 100644 --- a/components/net/cpp/src/ws_internal.cpp +++ b/components/net/cpp/src/ws_internal.cpp @@ -9,21 +9,9 @@ #include <ftl/net/ws_internal.hpp> #include <memory> -#ifndef WIN32 -#include <unistd.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <arpa/inet.h> -#define INVALID_SOCKET -1 -#define SOCKET_ERROR -1 -#endif #ifdef WIN32 -#include <winsock2.h> #include <Ws2tcpip.h> -#include <windows.h> #endif #include <string> @@ -85,7 +73,7 @@ int ftl::net::ws_dispatch(const char *data, size_t len, std::function<void(const // Perform dispatch d(ws, &data[ws.header_size], ws.N); - return ws.header_size+ws.N; + return (int)(ws.header_size+ws.N); } int ftl::net::ws_prepare(wsheader_type::opcode_type op, bool useMask, size_t len, char *data, size_t maxlen) { @@ -138,10 +126,10 @@ int ftl::net::ws_prepare(wsheader_type::opcode_type op, bool useMask, size_t len } } - return header_size; + return (int)header_size; } -bool ftl::net::ws_connect(int sockfd, const URI &uri) { +bool ftl::net::ws_connect(SOCKET sockfd, const URI &uri) { string http = ""; int status; int i; @@ -158,7 +146,7 @@ bool ftl::net::ws_connect(int sockfd, const URI &uri) { http += "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n"; http += "Sec-WebSocket-Version: 13\r\n"; http += "\r\n"; - int rc = ::send(sockfd, http.c_str(), http.length(), 0); + int rc = ::send(sockfd, http.c_str(), (int)http.length(), 0); if (rc != (int)http.length()) { LOG(ERROR) << "Could not send Websocket http request..."; std::cout << http; diff --git a/components/net/cpp/test/peer_unit.cpp b/components/net/cpp/test/peer_unit.cpp index 583f615d4b9c77735342972116bb15a3bac461fb..d72d96791349818949b65eb2957f7cf3c41fbf70 100644 --- a/components/net/cpp/test/peer_unit.cpp +++ b/components/net/cpp/test/peer_unit.cpp @@ -7,6 +7,7 @@ #include <thread> #include <chrono> +#include <ftl/net/common.hpp> #include <ftl/net/peer.hpp> #include <ftl/net/protocol.hpp> #include <ftl/config.h> @@ -34,25 +35,25 @@ using std::chrono::milliseconds; class MockPeer : public Peer { public: - MockPeer() : Peer(0) {} + MockPeer() : Peer((SOCKET)0) {} void mock_data() { data(); } }; // --- Support ----------------------------------------------------------------- -static std::map<int, std::string> fakedata; +static std::map<SOCKET, std::string> fakedata; #ifdef WIN32 int ftl::net::internal::recv(SOCKET sd, char *buf, int n, int f) { #else -ssize_t ftl::net::internal::recv(int sd, void *buf, size_t n, int f) { +ssize_t ftl::net::internal::recv(SOCKET sd, void *buf, size_t n, int f) { #endif if (fakedata.count(sd) == 0) { std::cout << "Unrecognised socket" << std::endl; return 0; } - int l = fakedata[sd].size(); + size_t l = fakedata[sd].size(); std::memcpy(buf, fakedata[sd].c_str(), l); fakedata.erase(sd); @@ -237,8 +238,8 @@ TEST_CASE("Peer::call()", "[rpc]") { std::thread thr([&s]() { while (fakedata[0].size() == 0) std::this_thread::sleep_for(std::chrono::milliseconds(20)); - auto [id,value] = readRPC<tuple<>>(0); - auto res_obj = std::make_tuple(1,id,"__return__",77); + auto res = readRPC<tuple<>>(0); + auto res_obj = std::make_tuple(1,std::get<0>(res),"__return__",77); std::stringstream buf; msgpack::pack(buf, res_obj); fakedata[0] = buf.str(); @@ -262,9 +263,9 @@ TEST_CASE("Peer::call()", "[rpc]") { std::thread thr([&s]() { while (fakedata[0].size() == 0) std::this_thread::sleep_for(std::chrono::milliseconds(20)); - auto [id,value] = readRPC<tuple<>>(0); + auto res = readRPC<tuple<>>(0); vector<int> data = {44,55,66}; - auto res_obj = std::make_tuple(1,id,"__return__",data); + auto res_obj = std::make_tuple(1,std::get<0>(res),"__return__",data); std::stringstream buf; msgpack::pack(buf, res_obj); fakedata[0] = buf.str(); diff --git a/components/rgbd-sources/include/ftl/rgbd_source.hpp b/components/rgbd-sources/include/ftl/rgbd_source.hpp index e6ca35418f80368e5f62adc622203ce09d5962a6..aa5748324dc9aeddd1134556fb3153baf08c1915 100644 --- a/components/rgbd-sources/include/ftl/rgbd_source.hpp +++ b/components/rgbd-sources/include/ftl/rgbd_source.hpp @@ -19,7 +19,7 @@ namespace rgbd { */ class RGBDSource : public ftl::Configurable { public: - RGBDSource(nlohmann::json &config); + explicit RGBDSource(nlohmann::json &config); RGBDSource(nlohmann::json &config, ftl::net::Universe *net); virtual ~RGBDSource(); @@ -57,6 +57,7 @@ class RGBDSource : public ftl::Configurable { */ class Register { public: + // cppcheck-suppress * Register(const std::string &n, std::function<RGBDSource*(nlohmann::json&,ftl::net::Universe*)> f) { RGBDSource::_register(n,f); }; diff --git a/components/rgbd-sources/src/algorithms/rtcensus.cpp b/components/rgbd-sources/src/algorithms/rtcensus.cpp index dbafd2d3737d5dca90a85fe6b125e7579245efb9..b288045e0f24eb6a2b5b3ef4729c5853b5e17ae5 100644 --- a/components/rgbd-sources/src/algorithms/rtcensus.cpp +++ b/components/rgbd-sources/src/algorithms/rtcensus.cpp @@ -43,8 +43,8 @@ static vector<uint64_t> sparse_census_16x16(const Mat &arr) { result.resize(arr.cols*arr.rows, 0); /* Loops adapted to avoid edge out-of-bounds checks */ - for (size_t v=7; v < arr.rows-7; v++) { - for (size_t u=7; u < arr.cols-7; u++) { + for (int v=7; v < arr.rows-7; v++) { + for (int u=7; u < arr.cols-7; u++) { uint64_t r = 0; /* 16x16 sparse kernel to 8x8 mask (64 bits) */ diff --git a/components/rgbd-sources/src/calibrate.cpp b/components/rgbd-sources/src/calibrate.cpp index 7e94ac9efcc140c4b3e8e4c3815392eb54d53863..05364c507c8072c0c4da2f060ec7d8a992945c61 100644 --- a/components/rgbd-sources/src/calibrate.cpp +++ b/components/rgbd-sources/src/calibrate.cpp @@ -78,7 +78,7 @@ void Calibrate::Settings::write(FileStorage& fs) const { void Calibrate::Settings::read(ftl::Configurable *node) { boardSize.width = node->value<vector<int>>("board_size", {10,10})[0]; boardSize.height = node->value<vector<int>>("board_size", {10,10})[1]; - squareSize = node->value("square_size", 50); + squareSize = node->value("square_size", 50.0f); nrFrames = node->value("num_frames", 20); aspectRatio = node->value("fix_aspect_ratio", false); calibZeroTangentDist = node->value("assume_zero_tangential_distortion", false); diff --git a/components/rgbd-sources/src/disparity.hpp b/components/rgbd-sources/src/disparity.hpp index f5c98f399811bd50e1776f8b0f86fc851e41f9d4..cb25e28953bf8ac8455c5a0565fa639e61979196 100644 --- a/components/rgbd-sources/src/disparity.hpp +++ b/components/rgbd-sources/src/disparity.hpp @@ -37,6 +37,7 @@ class Disparity : public ftl::Configurable { */ class Register { public: + // cppcheck-suppress * Register(const std::string &n, std::function<Disparity*(ftl::Configurable *, const std::string &)> f) { Disparity::_register(n,f); }; @@ -53,8 +54,8 @@ class Disparity : public ftl::Configurable { protected: //nlohmann::json &config_; - size_t min_disp_; - size_t max_disp_; + int min_disp_; + int max_disp_; cv::Mat mask_l_; private: diff --git a/components/rgbd-sources/src/local.cpp b/components/rgbd-sources/src/local.cpp index e66396597ddb99e53913299e8db89ca422953513..d3d33d7353ffd070579acac71e294da26885ed51 100644 --- a/components/rgbd-sources/src/local.cpp +++ b/components/rgbd-sources/src/local.cpp @@ -263,9 +263,9 @@ bool LocalSource::get(cv::Mat &l, cv::Mat &r) { } if (downsize_ != 1.0f) { - cv::resize(l, l, cv::Size(l.cols * downsize_, l.rows * downsize_), + cv::resize(l, l, cv::Size((int)(l.cols * downsize_), (int)(l.rows * downsize_)), 0, 0, cv::INTER_LINEAR); - cv::resize(r, r, cv::Size(r.cols * downsize_, r.rows * downsize_), + cv::resize(r, r, cv::Size((int)(r.cols * downsize_), (int)(r.rows * downsize_)), 0, 0, cv::INTER_LINEAR); } diff --git a/components/rgbd-sources/src/rgbd_source.cpp b/components/rgbd-sources/src/rgbd_source.cpp index 17c6443fc3f60cb2dccaaad1884ae6b62305b1fa..d796c02e9bb90d72bdd67d52334e5ad079d88abd 100644 --- a/components/rgbd-sources/src/rgbd_source.cpp +++ b/components/rgbd-sources/src/rgbd_source.cpp @@ -36,8 +36,8 @@ void RGBDSource::getRGBD(cv::Mat &rgb, cv::Mat &depth) { Eigen::Vector4f RGBDSource::point(uint ux, uint uy) { const auto ¶ms = getParameters(); - const float x = ((float)ux-params.width/2) / params.fx; - const float y = ((float)uy-params.height/2) / params.fy; + const float x = ((float)ux-params.width/2) / (float)params.fx; + const float y = ((float)uy-params.height/2) / (float)params.fy; unique_lock<mutex> lk(mutex_); const float depth = depth_.at<float>(uy,ux); @@ -54,11 +54,12 @@ bool RGBDSource::snapshot(const std::string &fileprefix) { cv::imwrite(fileprefix+"-RGB.jpg", rgb); cv::imwrite(fileprefix+"-DEPTH.png",depth); + return true; } RGBDSource *RGBDSource::create(nlohmann::json &config, ftl::net::Universe *net) { auto &cfg = ftl::config::resolve(config); - if (cfg["type"].type_name() != "string") { + if (!cfg["type"].is_string()) { LOG(ERROR) << "Missing RGB-D source type: " << cfg["type"].type_name(); //return nullptr; } diff --git a/components/rgbd-sources/src/stereovideo_source.cpp b/components/rgbd-sources/src/stereovideo_source.cpp index daff717e7f014066c664d0f7fcbed2f6e49cd660..4e8da1d065492d23f8c7e9b945b8e3ede55b815a 100644 --- a/components/rgbd-sources/src/stereovideo_source.cpp +++ b/components/rgbd-sources/src/stereovideo_source.cpp @@ -103,7 +103,7 @@ static void disparityToDepth(const cv::Mat &disparity, cv::Mat &depth, const cv: cv::Vec4d homg_pt = _Q*cv::Vec4d(x, y, d, 1.0); //dptr[x] = Vec3d(homg_pt.val); //dptr[x] /= homg_pt[3]; - dptr[x] = (homg_pt[2] / homg_pt[3]) / 1000.0f; // Depth in meters + dptr[x] = (float)(homg_pt[2] / homg_pt[3]) / 1000.0f; // Depth in meters if( fabs(d) <= FLT_EPSILON ) dptr[x] = 1000.0f; @@ -112,12 +112,15 @@ static void disparityToDepth(const cv::Mat &disparity, cv::Mat &depth, const cv: } void StereoVideoSource::grab() { + // TODO(Nick) find a way to move this to last part ... but grab can't + // be called twice by different threads and it is currently + // FIXME Call to grab from multiple threads + unique_lock<mutex> lk(mutex_); calib_->rectified(left_, right_); cv::Mat disp; disp_->compute(left_, right_, disp); - unique_lock<mutex> lk(mutex_); left_.copyTo(rgb_); disparityToDepth(disp, depth_, calib_->getQ()); }