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)
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)

View File

@@ -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<LONG>(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);
}

View File

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

View File

@@ -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();
}

View File

@@ -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();
}