Example #1
0
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 ) );
}
Example #2
0
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
    }
}
Example #3
0
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 );
}
Example #4
0
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);
    }
    
}
Example #5
0
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;
	}
}