version 5.2.1

fix potentially errors in PIConstChars compare methods
PIHIDevice::open() for open last device
PIVariant::toPoint() now can cast from PIMathVectord
This commit is contained in:
2025-09-13 17:25:12 +03:00
parent 3c72db2de8
commit dcdd7db33d
5 changed files with 33 additions and 10 deletions

View File

@@ -6,7 +6,7 @@ endif()
project(PIP) project(PIP)
set(PIP_MAJOR 5) set(PIP_MAJOR 5)
set(PIP_MINOR 2) set(PIP_MINOR 2)
set(PIP_REVISION 0) set(PIP_REVISION 1)
set(PIP_SUFFIX ) set(PIP_SUFFIX )
set(PIP_COMPANY SHS) set(PIP_COMPANY SHS)
set(PIP_DOMAIN org.SHS) set(PIP_DOMAIN org.SHS)

View File

@@ -125,6 +125,11 @@ bool PIHIDevice::open(const PIHIDeviceInfo & device) {
} }
bool PIHIDevice::open() {
return open(di);
}
void PIHIDevice::close() { void PIHIDevice::close() {
stop(); stop();
#ifndef WINDOWS #ifndef WINDOWS
@@ -243,11 +248,12 @@ void PIHIDevice::run() {
// piCout << readed << PRIVATE->buffer.size(); // piCout << readed << PRIVATE->buffer.size();
if (readed != PRIVATE->buffer.size()) return; 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; // piCout << "readed" << PRIVATE->buffer << gdd_len;
auto cbit = cur_buttons.makeIterator(); auto cbit = cur_buttons.makeIterator();
while (cbit.next()) while (cbit.next())
cbit.value() = 0; cbit.value() = 0;
for (int i = 0; i < gdd_len; ++i) { for (ULONG i = 0; i < gdd_len; ++i) {
const auto & cd(gdd[i]); const auto & cd(gdd[i]);
// piCout << cd.DataIndex << cd.RawValue; // piCout << cd.DataIndex << cd.RawValue;
auto vi = di.axis_by_dataindex.value(cd.DataIndex); auto vi = di.axis_by_dataindex.value(cd.DataIndex);
@@ -258,7 +264,7 @@ void PIHIDevice::run() {
e.value = static_cast<LONG>(cd.RawValue); e.value = static_cast<LONG>(cd.RawValue);
event(e); event(e);
} else { } 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)); float fv = (cd.RawValue - vi.min) / piMaxf(1.f, (float)(vi.max - vi.min));
cur_axes[vi.data_index] = procDeadZone(fv); cur_axes[vi.data_index] = procDeadZone(fv);
} }

View File

@@ -94,6 +94,7 @@ public:
bool isOpened() const; bool isOpened() const;
bool open(const PIHIDeviceInfo & device); bool open(const PIHIDeviceInfo & device);
bool open();
void close(); void close();
void start(); void start();
void stop(); void stop();

View File

@@ -196,7 +196,7 @@ public:
if (isNull() && s.isNull()) return true; if (isNull() && s.isNull()) return true;
if (isNull() xor s.isNull()) return false; if (isNull() xor s.isNull()) return false;
if (size() != s.size()) return false; if (size() != s.size()) return false;
return strcmp(str, s.str) == 0; return strncmp(str, s.str, size()) == 0;
} }
//! \~english Compare operator. //! \~english Compare operator.
@@ -209,7 +209,7 @@ public:
if (isNull() && s.isNull()) return false; if (isNull() && s.isNull()) return false;
if (isNull() && !s.isNull()) return true; if (isNull() && !s.isNull()) return true;
if (!isNull() && s.isNull()) return false; 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(); 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 false; if (isNull() && !s.isNull()) return false;
if (!isNull() && s.isNull()) return true; 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(); return size() > s.size();
} }

View File

@@ -1754,16 +1754,24 @@ PIVariantTypes::IODevice PIVariant::toIODevice() const {
//! //!
PIPointd PIVariant::toPoint() const { PIPointd PIVariant::toPoint() const {
PIByteArray ba(_content); PIByteArray ba(_content);
if (_type == PIVariant::pivPoint) {
PIPointd r;
ba >> r;
return r;
}
if (_type == PIVariant::pivString) { if (_type == PIVariant::pivString) {
PIString r; PIString r;
ba >> r; ba >> r;
PIStringList l = r.split(';'); PIStringList l = r.split(';');
if (l.size() >= 2) return PIPointd(l[0].toDouble(), l[1].toDouble()); if (l.size() >= 2) return PIPointd(l[0].toDouble(), l[1].toDouble());
} }
if (_type == PIVariant::pivPoint) { if (_type == PIVariant::pivMathVector) {
PIPointd r; PIMathVectord r;
ba >> 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(); return PIPointd();
} }
@@ -1880,6 +1888,14 @@ PIMathVectord PIVariant::toMathVector() const {
ba >> r; ba >> r;
return 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(); return PIMathVectord();
} }