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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ public:
|
||||
|
||||
bool isOpened() const;
|
||||
bool open(const PIHIDeviceInfo & device);
|
||||
bool open();
|
||||
void close();
|
||||
void start();
|
||||
void stop();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user