diff --git a/CMakeLists.txt b/CMakeLists.txt index c910064f..d1491cf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ endif() project(PIP) set(PIP_MAJOR 5) set(PIP_MINOR 2) -set(PIP_REVISION 0) +set(PIP_REVISION 1) set(PIP_SUFFIX ) set(PIP_COMPANY SHS) set(PIP_DOMAIN org.SHS) diff --git a/libs/main/system/pihidevice.cpp b/libs/main/system/pihidevice.cpp index 51d06074..1f654664 100644 --- a/libs/main/system/pihidevice.cpp +++ b/libs/main/system/pihidevice.cpp @@ -125,6 +125,11 @@ bool PIHIDevice::open(const PIHIDeviceInfo & device) { } +bool PIHIDevice::open() { + return open(di); +} + + void PIHIDevice::close() { stop(); #ifndef WINDOWS @@ -242,12 +247,13 @@ void PIHIDevice::run() { if (ReadFile(PRIVATE->deviceHandle, PRIVATE->buffer.data(), PRIVATE->buffer.size_s(), &readed, nullptr) != TRUE) return; // piCout << readed << PRIVATE->buffer.size(); if (readed != PRIVATE->buffer.size()) return; - auto gd = HidP_GetData(HidP_Input, gdd, &gdd_len, PRIVATE->preparsed, (PCHAR)PRIVATE->buffer.data(), PRIVATE->buffer.size_s()); + auto gd = HidP_GetData(HidP_Input, gdd, &gdd_len, PRIVATE->preparsed, (PCHAR)PRIVATE->buffer.data(), PRIVATE->buffer.size_s()); + NO_UNUSED(gd); // piCout << "readed" << PRIVATE->buffer << gdd_len; auto cbit = cur_buttons.makeIterator(); while (cbit.next()) cbit.value() = 0; - for (int i = 0; i < gdd_len; ++i) { + for (ULONG i = 0; i < gdd_len; ++i) { const auto & cd(gdd[i]); // piCout << cd.DataIndex << cd.RawValue; auto vi = di.axis_by_dataindex.value(cd.DataIndex); @@ -258,7 +264,7 @@ void PIHIDevice::run() { e.value = static_cast(cd.RawValue); event(e); } else { - auto & axis(cur_axes[cd.DataIndex]); + // auto & axis(cur_axes[cd.DataIndex]); float fv = (cd.RawValue - vi.min) / piMaxf(1.f, (float)(vi.max - vi.min)); cur_axes[vi.data_index] = procDeadZone(fv); } diff --git a/libs/main/system/pihidevice.h b/libs/main/system/pihidevice.h index 7f6dc9c9..e85bfb91 100644 --- a/libs/main/system/pihidevice.h +++ b/libs/main/system/pihidevice.h @@ -94,6 +94,7 @@ public: bool isOpened() const; bool open(const PIHIDeviceInfo & device); + bool open(); void close(); void start(); void stop(); diff --git a/libs/main/text/piconstchars.h b/libs/main/text/piconstchars.h index afadcc56..b81c0832 100644 --- a/libs/main/text/piconstchars.h +++ b/libs/main/text/piconstchars.h @@ -196,7 +196,7 @@ public: if (isNull() && s.isNull()) return true; if (isNull() xor s.isNull()) return false; if (size() != s.size()) return false; - return strcmp(str, s.str) == 0; + return strncmp(str, s.str, size()) == 0; } //! \~english Compare operator. @@ -209,7 +209,7 @@ public: if (isNull() && s.isNull()) return false; if (isNull() && !s.isNull()) return true; if (!isNull() && s.isNull()) return false; - if (size() == s.size()) return strcmp(str, s.str) < 0; + if (size() == s.size()) return strncmp(str, s.str, size()) < 0; return size() < s.size(); } @@ -219,7 +219,7 @@ public: if (isNull() && s.isNull()) return false; if (isNull() && !s.isNull()) return false; if (!isNull() && s.isNull()) return true; - if (size() == s.size()) return strcmp(str, s.str) > 0; + if (size() == s.size()) return strncmp(str, s.str, size()) > 0; return size() > s.size(); } diff --git a/libs/main/types/pivariant.cpp b/libs/main/types/pivariant.cpp index 56e8f506..dddc0f2f 100644 --- a/libs/main/types/pivariant.cpp +++ b/libs/main/types/pivariant.cpp @@ -1754,16 +1754,24 @@ PIVariantTypes::IODevice PIVariant::toIODevice() const { //! PIPointd PIVariant::toPoint() const { PIByteArray ba(_content); + if (_type == PIVariant::pivPoint) { + PIPointd r; + ba >> r; + return r; + } if (_type == PIVariant::pivString) { PIString r; ba >> r; PIStringList l = r.split(';'); if (l.size() >= 2) return PIPointd(l[0].toDouble(), l[1].toDouble()); } - if (_type == PIVariant::pivPoint) { - PIPointd r; + if (_type == PIVariant::pivMathVector) { + PIMathVectord r; ba >> r; - return r; + PIPointd ret; + if (r.size() > 0) ret.x = r[0]; + if (r.size() > 1) ret.y = r[1]; + return ret; } return PIPointd(); } @@ -1880,6 +1888,14 @@ PIMathVectord PIVariant::toMathVector() const { ba >> r; return r; } + if (_type == PIVariant::pivPoint) { + PIPointd r; + ba >> r; + PIMathVectord ret(2); + ret[0] = r.x; + ret[1] = r.y; + return ret; + } return PIMathVectord(); }