kopia lustrzana https://gitlab.com/eliggett/wfview
Various fixes
rodzic
f663550da7
commit
a74f68d9d4
|
@ -123,10 +123,12 @@ void controllerSetup::mousePressed(controllerScene* scene, QPoint p)
|
||||||
|
|
||||||
void controllerSetup::onEventIndexChanged(int index) {
|
void controllerSetup::onEventIndexChanged(int index) {
|
||||||
Q_UNUSED(index);
|
Q_UNUSED(index);
|
||||||
|
// If command is changed, delete current command and deep copy the new command
|
||||||
if (currentButton != Q_NULLPTR && onEvent->currentData().toInt() < commands->size()) {
|
if (currentButton != Q_NULLPTR && onEvent->currentData().toInt() < commands->size()) {
|
||||||
QMutexLocker locker(mutex);
|
QMutexLocker locker(mutex);
|
||||||
currentButton->onCommand = &commands->at(onEvent->currentData().toInt());
|
if (currentButton->onCommand)
|
||||||
|
delete currentButton->onCommand;
|
||||||
|
currentButton->onCommand = new COMMAND(commands->at(onEvent->currentData().toInt()));
|
||||||
currentButton->onText->setPlainText(currentButton->onCommand->text);
|
currentButton->onText->setPlainText(currentButton->onCommand->text);
|
||||||
currentButton->onText->setPos(currentButton->pos.center().x() - currentButton->onText->boundingRect().width() / 2,
|
currentButton->onText->setPos(currentButton->pos.center().x() - currentButton->onText->boundingRect().width() / 2,
|
||||||
(currentButton->pos.center().y() - currentButton->onText->boundingRect().height() / 2)-6);
|
(currentButton->pos.center().y() - currentButton->onText->boundingRect().height() / 2)-6);
|
||||||
|
@ -138,9 +140,12 @@ void controllerSetup::onEventIndexChanged(int index) {
|
||||||
|
|
||||||
void controllerSetup::offEventIndexChanged(int index) {
|
void controllerSetup::offEventIndexChanged(int index) {
|
||||||
Q_UNUSED(index);
|
Q_UNUSED(index);
|
||||||
|
// If command is changed, delete current command and deep copy the new command
|
||||||
if (currentButton != Q_NULLPTR && offEvent->currentData().toInt() < commands->size()) {
|
if (currentButton != Q_NULLPTR && offEvent->currentData().toInt() < commands->size()) {
|
||||||
QMutexLocker locker(mutex);
|
QMutexLocker locker(mutex);
|
||||||
currentButton->offCommand = &commands->at(offEvent->currentData().toInt());
|
if (currentButton->offCommand)
|
||||||
|
delete currentButton->offCommand;
|
||||||
|
currentButton->offCommand = new COMMAND(commands->at(offEvent->currentData().toInt()));
|
||||||
currentButton->offText->setPlainText(currentButton->offCommand->text);
|
currentButton->offText->setPlainText(currentButton->offCommand->text);
|
||||||
currentButton->offText->setPos(currentButton->pos.center().x() - currentButton->offText->boundingRect().width() / 2,
|
currentButton->offText->setPos(currentButton->pos.center().x() - currentButton->offText->boundingRect().width() / 2,
|
||||||
(currentButton->pos.center().y() - currentButton->offText->boundingRect().height() / 2)+6);
|
(currentButton->pos.center().y() - currentButton->offText->boundingRect().height() / 2)+6);
|
||||||
|
@ -149,9 +154,12 @@ void controllerSetup::offEventIndexChanged(int index) {
|
||||||
|
|
||||||
void controllerSetup::knobEventIndexChanged(int index) {
|
void controllerSetup::knobEventIndexChanged(int index) {
|
||||||
Q_UNUSED(index);
|
Q_UNUSED(index);
|
||||||
|
// If command is changed, delete current command and deep copy the new command
|
||||||
if (currentKnob != Q_NULLPTR && knobEvent->currentData().toInt() < commands->size()) {
|
if (currentKnob != Q_NULLPTR && knobEvent->currentData().toInt() < commands->size()) {
|
||||||
QMutexLocker locker(mutex);
|
QMutexLocker locker(mutex);
|
||||||
currentKnob->command = &commands->at(knobEvent->currentData().toInt());
|
if (currentKnob->command)
|
||||||
|
delete currentKnob->command;
|
||||||
|
currentKnob->command = new COMMAND(commands->at(knobEvent->currentData().toInt()));
|
||||||
currentKnob->text->setPlainText(currentKnob->command->text);
|
currentKnob->text->setPlainText(currentKnob->command->text);
|
||||||
currentKnob->text->setPos(currentKnob->pos.center().x() - currentKnob->text->boundingRect().width() / 2,
|
currentKnob->text->setPos(currentKnob->pos.center().x() - currentKnob->text->boundingRect().width() / 2,
|
||||||
(currentKnob->pos.center().y() - currentKnob->text->boundingRect().height() / 2));
|
(currentKnob->pos.center().y() - currentKnob->text->boundingRect().height() / 2));
|
||||||
|
|
|
@ -56,6 +56,7 @@ void usbController::init(QMutex* mut,usbMap* prefs ,QVector<BUTTON>* buts,QVecto
|
||||||
QMutexLocker locker(mutex);
|
QMutexLocker locker(mutex);
|
||||||
|
|
||||||
// We need to make sure that all buttons/knobs have a command assigned, this is a fairly expensive operation
|
// We need to make sure that all buttons/knobs have a command assigned, this is a fairly expensive operation
|
||||||
|
// Perform a deep copy of the command to ensure that each controller is using a unique command.
|
||||||
|
|
||||||
for (BUTTON* but = buttonList->begin(); but != buttonList->end(); but++)
|
for (BUTTON* but = buttonList->begin(); but != buttonList->end(); but++)
|
||||||
{
|
{
|
||||||
|
@ -64,9 +65,9 @@ void usbController::init(QMutex* mut,usbMap* prefs ,QVector<BUTTON>* buts,QVecto
|
||||||
while (usbc != commands.end())
|
while (usbc != commands.end())
|
||||||
{
|
{
|
||||||
if (but->on == usbc->text)
|
if (but->on == usbc->text)
|
||||||
but->onCommand = usbc;
|
but->onCommand = new COMMAND(*usbc);
|
||||||
if (but->off == usbc->text)
|
if (but->off == usbc->text)
|
||||||
but->offCommand = usbc;
|
but->offCommand = new COMMAND(*usbc);
|
||||||
++usbc;
|
++usbc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +79,7 @@ void usbController::init(QMutex* mut,usbMap* prefs ,QVector<BUTTON>* buts,QVecto
|
||||||
while (usbc != commands.end())
|
while (usbc != commands.end())
|
||||||
{
|
{
|
||||||
if (kb->cmd == usbc->text)
|
if (kb->cmd == usbc->text)
|
||||||
kb->command = usbc;
|
kb->command = new COMMAND(*usbc);
|
||||||
++usbc;
|
++usbc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -501,16 +502,6 @@ void usbController::runTimer()
|
||||||
unsigned char tempJogpos = (unsigned char)data[1];
|
unsigned char tempJogpos = (unsigned char)data[1];
|
||||||
unsigned char tempShutpos = (unsigned char)data[0];
|
unsigned char tempShutpos = (unsigned char)data[0];
|
||||||
|
|
||||||
if (tempJogpos == dev.jogpos + 1 || (tempJogpos == 0 && dev.jogpos == 0xff))
|
|
||||||
{
|
|
||||||
dev.knobValues[0]++;
|
|
||||||
//qDebug(logUsbControl()) << "JOG PLUS" << jogCounter;
|
|
||||||
}
|
|
||||||
else if (tempJogpos != dev.jogpos) {
|
|
||||||
dev.knobValues[0]--;
|
|
||||||
//qDebug(logUsbControl()) << "JOG MINUS" << jogCounter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Button matrix:
|
/* Button matrix:
|
||||||
1000000000000000 = button15
|
1000000000000000 = button15
|
||||||
0100000000000000 = button14
|
0100000000000000 = button14
|
||||||
|
@ -553,6 +544,20 @@ void usbController::runTimer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto kb = std::find_if(knobList->begin(), knobList->end(), [dev](const KNOB& k)
|
||||||
|
{ return (k.devicePath == dev.path && k.num == 0); });
|
||||||
|
if (kb != knobList->end()) {
|
||||||
|
if (tempJogpos == dev.jogpos + 1 || (tempJogpos == 0 && dev.jogpos == 0xff))
|
||||||
|
{
|
||||||
|
dev.knobValues[0]++;
|
||||||
|
//qDebug(logUsbControl()) << "JOG PLUS" << jogCounter;
|
||||||
|
}
|
||||||
|
else if (tempJogpos != dev.jogpos) {
|
||||||
|
dev.knobValues[0]--;
|
||||||
|
//qDebug(logUsbControl()) << "JOG MINUS" << jogCounter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dev.buttons = tempButtons;
|
dev.buttons = tempButtons;
|
||||||
dev.jogpos = tempJogpos;
|
dev.jogpos = tempJogpos;
|
||||||
dev.shutpos = tempShutpos;
|
dev.shutpos = tempShutpos;
|
||||||
|
@ -649,15 +654,19 @@ void usbController::runTimer()
|
||||||
emit button(butf2->offCommand);
|
emit button(butf2->offCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((unsigned char)data[5] == 0x07)
|
auto kb = std::find_if(knobList->begin(), knobList->end(), [dev](const KNOB& k)
|
||||||
{
|
{ return (k.devicePath == dev.path && k.num == 0); });
|
||||||
if ((unsigned char)data[3] == 0x01)
|
if (kb != knobList->end()) {
|
||||||
|
if ((unsigned char)data[5] == 0x07)
|
||||||
{
|
{
|
||||||
dev.knobValues[0] = dev.knobValues[0] + data[1];
|
if ((unsigned char)data[3] == 0x01)
|
||||||
}
|
{
|
||||||
else if ((unsigned char)data[3] == 0x02)
|
dev.knobValues[0] = dev.knobValues[0] + data[1];
|
||||||
{
|
}
|
||||||
dev.knobValues[0] = dev.knobValues[0] - data[1];
|
else if ((unsigned char)data[3] == 0x02)
|
||||||
|
{
|
||||||
|
dev.knobValues[0] = dev.knobValues[0] - data[1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -690,7 +699,7 @@ void usbController::runTimer()
|
||||||
000000000000000000000010 = button1
|
000000000000000000000010 = button1
|
||||||
*/
|
*/
|
||||||
quint32 tempButtons = ((quint8)data[3] << 16) | ((quint8)data[2] << 8) | ((quint8)data[1] & 0xff);
|
quint32 tempButtons = ((quint8)data[3] << 16) | ((quint8)data[2] << 8) | ((quint8)data[1] & 0xff);
|
||||||
quint32 tempKnobs = ((quint8)data[16] << 16) | ((quint8)data[15] << 8) | ((quint8)data[14] & 0xff);
|
quint32 tempKnobs = ((quint8)data[16] << 24) | ((quint8)data[15] << 16) | ((quint8)data[14] << 8) | ((quint8)data[13] & 0xff);
|
||||||
|
|
||||||
if (dev.buttons != tempButtons)
|
if (dev.buttons != tempButtons)
|
||||||
{
|
{
|
||||||
|
@ -715,20 +724,27 @@ void usbController::runTimer()
|
||||||
}
|
}
|
||||||
dev.buttons = tempButtons;
|
dev.buttons = tempButtons;
|
||||||
|
|
||||||
if (dev.knobs != tempKnobs) {
|
|
||||||
// One of the knobs has moved
|
// Step through all knobs and emit ones that have been pressed.
|
||||||
for (unsigned char i = 0; i < 3; i++) {
|
for (unsigned char i = 0; i < dev.knobValues.size(); i++)
|
||||||
if ((tempKnobs >> (i * 8) & 0xff) != (dev.knobs >> (i * 8) & 0xff)) {
|
{
|
||||||
dev.knobValues[i] = dev.knobValues[i] + (qint8)((dev.knobs >> (i * 8)) & 0xff);
|
auto kb = std::find_if(knobList->begin(), knobList->end(), [dev,i](const KNOB& k)
|
||||||
|
{ return (k.devicePath == dev.path && k.num == i); });
|
||||||
|
if (kb != knobList->end()) {
|
||||||
|
if (dev.knobs != tempKnobs) {
|
||||||
|
// One of the knobs has moved
|
||||||
|
for (unsigned char i = 0; i < 4; i++) {
|
||||||
|
if ((tempKnobs >> (i * 8) & 0xff) != (dev.knobs >> (i * 8) & 0xff)) {
|
||||||
|
dev.knobValues[i] = dev.knobValues[i] + (qint8)((dev.knobs >> (i * 8)) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dev.knobs = tempKnobs;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev.knobs = tempKnobs;
|
}
|
||||||
|
else if (dev.usbDevice == QuickKeys && (quint8)data[0] == 0x02) {
|
||||||
// Tuning knob
|
|
||||||
dev.knobValues[0] = dev.knobValues[0] + (qint8)data[13];
|
|
||||||
|
|
||||||
} else if (dev.usbDevice == QuickKeys && (quint8)data[0] == 0x02) {
|
|
||||||
|
|
||||||
if ((quint8)data[1] == 0xf0) {
|
if ((quint8)data[1] == 0xf0) {
|
||||||
|
|
||||||
|
@ -758,13 +774,18 @@ void usbController::runTimer()
|
||||||
|
|
||||||
dev.buttons = tempButtons;
|
dev.buttons = tempButtons;
|
||||||
|
|
||||||
// Tuning knob
|
auto kb = std::find_if(knobList->begin(), knobList->end(), [dev](const KNOB& k)
|
||||||
if (data[7] & 0x01) {
|
{ return (k.devicePath == dev.path && k.num == 0); });
|
||||||
dev.knobValues[0]++;
|
if (kb != knobList->end()) {
|
||||||
}
|
// Tuning knob
|
||||||
else if (data[7] & 0x02) {
|
if (data[7] & 0x01) {
|
||||||
dev.knobValues[0]--;
|
dev.knobValues[0]++;
|
||||||
|
}
|
||||||
|
else if (data[7] & 0x02) {
|
||||||
|
dev.knobValues[0]--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ((quint8)data[1] == 0xf2 && (quint8)data[2] == 0x01)
|
else if ((quint8)data[1] == 0xf2 && (quint8)data[2] == 0x01)
|
||||||
{
|
{
|
||||||
|
@ -794,38 +815,26 @@ void usbController::runTimer()
|
||||||
|
|
||||||
for (unsigned char i = 0; i < dev.knobValues.size(); i++) {
|
for (unsigned char i = 0; i < dev.knobValues.size(); i++) {
|
||||||
for (KNOB* kb = knobList->begin(); kb != knobList->end(); kb++) {
|
for (KNOB* kb = knobList->begin(); kb != knobList->end(); kb++) {
|
||||||
if (kb != knobList->end() && kb->command && kb->devicePath == dev.path && kb->num == i && dev.knobValues[i]) {
|
if (kb != knobList->end() && kb->command && kb->devicePath == dev.path && kb->num == i && dev.knobValues[i] != dev.knobPrevious[i]) {
|
||||||
// sendCommand mustn't be deleted so we ensure it stays in-scope by declaring it private.
|
// sendCommand mustn't be deleted so we ensure it stays in-scope by declaring it private.
|
||||||
sendCommand = *kb->command;
|
sendCommand = *kb->command;
|
||||||
if (kb->num >0) {
|
if (sendCommand.command != cmdSetFreq) {
|
||||||
if (dev.knobSend[i] + (dev.knobValues[i] * 10) <= 0)
|
|
||||||
{
|
|
||||||
dev.knobSend[i] = 0;
|
|
||||||
}
|
|
||||||
else if (dev.knobSend[i] + (dev.knobValues[i] * 10) >= 255)
|
|
||||||
{
|
|
||||||
dev.knobSend[i] = 255;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
dev.knobSend[i] = dev.knobSend[i] + (dev.knobValues[i] * 10);
|
|
||||||
}
|
|
||||||
sendCommand.suffix = dev.knobSend[i];
|
|
||||||
} else {
|
|
||||||
int tempVal = dev.knobValues[i] * dev.sensitivity;
|
int tempVal = dev.knobValues[i] * dev.sensitivity;
|
||||||
tempVal = qMin(qMax(tempVal,0),255);
|
tempVal = qMin(qMax(tempVal,0),255);
|
||||||
sendCommand.suffix = quint8(tempVal);
|
sendCommand.suffix = quint8(tempVal);
|
||||||
dev.knobValues[i]=tempVal/dev.sensitivity; // This ensures that dial can't go outside 0-255
|
dev.knobValues[i]=tempVal/dev.sensitivity; // This ensures that dial can't go outside 0-255
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (dev.knobValues[i] != dev.knobPrevious[i]) {
|
{
|
||||||
emit button(&sendCommand);
|
sendCommand.value = dev.knobValues[i]/dev.sensitivity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit button(&sendCommand);
|
||||||
|
|
||||||
if (sendCommand.command == cmdSetFreq) {
|
if (sendCommand.command == cmdSetFreq) {
|
||||||
dev.knobValues[i] = 0;
|
dev.knobValues[i] = 0;
|
||||||
} else {
|
|
||||||
dev.knobPrevious[i]=dev.knobValues[i];
|
|
||||||
}
|
}
|
||||||
|
dev.knobPrevious[i]=dev.knobValues[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,6 @@ struct USBDEVICE {
|
||||||
|
|
||||||
struct COMMAND {
|
struct COMMAND {
|
||||||
COMMAND() {}
|
COMMAND() {}
|
||||||
|
|
||||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, unsigned char suffix) :
|
COMMAND(int index, QString text, usbCommandType cmdType, int command, unsigned char suffix) :
|
||||||
index(index), text(text), cmdType(cmdType), command(command), suffix(suffix) {}
|
index(index), text(text), cmdType(cmdType), command(command), suffix(suffix) {}
|
||||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, availableBands band) :
|
COMMAND(int index, QString text, usbCommandType cmdType, int command, availableBands band) :
|
||||||
|
|
|
@ -1740,6 +1740,7 @@ void wfmain::doShuttle(bool up, unsigned char level)
|
||||||
|
|
||||||
void wfmain::buttonControl(const COMMAND* cmd)
|
void wfmain::buttonControl(const COMMAND* cmd)
|
||||||
{
|
{
|
||||||
|
qDebug(logUsbControl()) << QString("executing command: %0 (%1) suffix:%2 value:%3" ).arg(cmd->text).arg(cmd->command).arg(cmd->suffix).arg(cmd->value);
|
||||||
switch (cmd->command) {
|
switch (cmd->command) {
|
||||||
case cmdGetBandStackReg:
|
case cmdGetBandStackReg:
|
||||||
issueCmd((cmds)cmd->command, cmd->band);
|
issueCmd((cmds)cmd->command, cmd->band);
|
||||||
|
|
Ładowanie…
Reference in New Issue