void Controller::setChannel ( const Controller::ledid& channel, bool value ) { if ( !m_socket ) return; if ( !m_leds.contains(channel) ) return; m_leds[channel].value = value; emit ledChanged ( getStringFromPortPin(channel), QString::null, value ); struct udpio_packet { /* Port: 0=PORTA, ..., 3=PORTD, ... */ uint8_t port; /* Pins: Every bit corresponds to one pin, where the least significant (right) bit means pin 0. */ uint8_t pinmask; uint8_t mode; } data; data.port = channel.port; if (value) { data.mode = 1; data.pinmask = (1 << channel.pin); } else { data.mode = 0; data.pinmask = (1 << channel.pin); } m_socket->write ( (char*)&data, sizeof ( data ) ); }
void Controller::readyRead() { QSettings settings; settings.beginGroup ( m_plugin->pluginid() ); settings.beginGroup ( QLatin1String ( "channels" ) ); while (m_socket->hasPendingDatagrams()) { QByteArray bytes; bytes.resize ( m_socket->pendingDatagramSize() ); m_socket->readDatagram ( bytes.data(), bytes.size() ); while ( bytes.size() >= 7 ) { if (bytes.startsWith("pins") && bytes.size() >= 8) { m_leds.clear(); emit ledsCleared(); for (int port=0;port<4;++port) { for (int pin=0;pin<8;++pin) { const bool value = bytes[4+port] & (1 << pin); const QString name = settings.value(QLatin1String ( "channel_name" ) + getStringFromPortPin(ledid(port, pin)),tr("Channel Port %1, Pin %2").arg(port).arg(pin)).toString(); const ledid id = ledid(port, pin); m_leds[id] = ledchannel(port, pin, value, name); emit ledChanged(getStringFromPortPin(id), name, value); } } bytes = bytes.mid(8); } else if (bytes.startsWith("pinc") && bytes.size() >= 6) { emit watchpinChanged(bytes[4], bytes[5]); } else { qWarning() << m_plugin->pluginid() << "Failed to parse" << bytes; break; } } //while } }
void Controller::setChannelName ( const Controller::ledid& channel, const QString& name ) { if ( !m_leds.contains(channel) ) return; m_leds[channel].name = name; emit ledChanged ( getStringFromPortPin(channel), name, -1 ); QSettings settings; settings.beginGroup ( m_plugin->pluginid() ); settings.beginGroup ( QLatin1String ( "channels" ) ); settings.setValue ( QLatin1String ( "channel_name" ) + getStringFromPortPin(channel) , name ); }
void OSCRemote::readOscMsg(QString addr, QVariantList args) { qWarning()<<"OSC|"<<addr<<args; if(!addr.startsWith(_oscAddress)) return; qWarning()<<"1"; if(args.size()!=2) return; qWarning()<<"2"; bool ok = true; float intensity = (float)(args.at(1).toInt(&ok))/255.0f; if(!ok) return; qWarning()<<"3"; QString led = args.first().toString(); if(led == "LED1") ledChanged(1, intensity); else if(led == "LED2") ledChanged(2, intensity); else if(led == "LED3") ledChanged(3, intensity); else if(led == "LED"){ ledChanged(1, intensity); ledChanged(2, intensity); ledChanged(3, intensity); } }
LadspaControl::LadspaControl( Model * _parent, port_desc_t * _port, bool _link ) : Model( _parent ), m_link( _link ), m_port( _port ), m_linkEnabledModel( _link, this, tr( "Link channels" ) ), m_toggledModel( false, this, m_port->name ), m_knobModel( 0, 0, 0, 1, this, m_port->name ), m_tempoSyncKnobModel( 0, 0, 0, 1, m_port->max, this, m_port->name ) { if( m_link ) { connect( &m_linkEnabledModel, SIGNAL( dataChanged() ), this, SLOT( linkStateChanged() ), Qt::DirectConnection ); } switch( m_port->data_type ) { case TOGGLED: m_toggledModel.setInitValue( static_cast<bool>( m_port->def ) ); connect( &m_toggledModel, SIGNAL( dataChanged() ), this, SLOT( ledChanged() ) ); if( m_port->def == 1.0f ) { m_toggledModel.setValue( true ); } // TODO: careful: we must prevent saved scales m_toggledModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case INTEGER: case ENUM: m_knobModel.setRange( static_cast<int>( m_port->max ), static_cast<int>( m_port->min ), 1 + static_cast<int>( m_port->max - m_port->min ) / 400 ); m_knobModel.setInitValue( static_cast<int>( m_port->def ) ); connect( &m_knobModel, SIGNAL( dataChanged() ), this, SLOT( knobChanged() ) ); // TODO: careful: we must prevent saved scales m_knobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case FLOATING: m_knobModel.setRange( m_port->min, m_port->max, ( m_port->max - m_port->min ) / ( m_port->name.toUpper() == "GAIN" && m_port->max == 10.0f ? 4000.0f : ( m_port->suggests_logscale ? 8000.0f : 800.0f ) ) ); m_knobModel.setInitValue( m_port->def ); connect( &m_knobModel, SIGNAL( dataChanged() ), this, SLOT( knobChanged() ) ); // TODO: careful: we must prevent saved scales m_knobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case TIME: m_tempoSyncKnobModel.setRange( m_port->min, m_port->max, ( m_port->max - m_port->min ) / 800.0f ); m_tempoSyncKnobModel.setInitValue( m_port->def ); connect( &m_tempoSyncKnobModel, SIGNAL( dataChanged() ), this, SLOT( tempoKnobChanged() ) ); // TODO: careful: we must prevent saved scales m_tempoSyncKnobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; default: break; } }