// Called whenever the connection state of any PV changes: emits valuesChanged(), sizeChanged(), and stateChanged() as required.
void REIXSXESMCPDataSourcePre2013::onConnectionStateChanged() {
	bool wasConnected = isConnected_;

	isConnected_ = imagePV_->isConnected() &&
				   resolutionXPV_->hasValues() &&
				   resolutionYPV_->hasValues();

	// becoming disconnected...
	if(wasConnected && !isConnected_) {
		pixelsX_ = axes_[0].size = 0;
		pixelsY_ = axes_[1].size = 0;
		emitValuesChanged();
		emitSizeChanged();
		emitStateChanged(AMDataSource::InvalidFlag);

		AMErrorMon::report(AMErrorReport(this, AMErrorReport::Alert, -2, "Lost connection to MCP Detector " + imagePV_->pvName()));
	}

	// becoming connected...
	if(!wasConnected && isConnected_) {
		pixelsX_ = axes_[0].size = int(pow(2.0, double(resolutionXPV_->getInt())));
		pixelsY_ = axes_[1].size = int(pow(2.0, double(resolutionYPV_->getInt())));
		emitValuesChanged();
		emitSizeChanged();
		emitStateChanged(AMDataSource::ProcessingFlag);
	}
}
Ejemplo n.º 2
0
void RtpBuffer::commitPacket()
{
    quint16 fill = (m_data[m_last].sequenceNumber-m_data[m_first].sequenceNumber);
    if ((m_state == Filling) && (fill >= m_desiredFill)) {
        qDebug()<<Q_FUNC_INFO<<": start playing at: " << m_data[m_first].sequenceNumber << ", last: " << m_last << ": " << m_data[m_last].sequenceNumber;
        setState(Ready);
        m_mutex.unlock();
        emitStateChanged(Ready);
        emit ready();
        return;
    } else {
        m_mutex.unlock();
    }
}
Ejemplo n.º 3
0
const RtpPacket* RtpBuffer::takePacket()
{
    RtpPacket* packet = NULL;

    m_mutex.lock();
    if (m_state == Ready || m_state == Flushing) {
        // take from top, until free packet or flush
        packet = &(m_data[m_first]);

        // we might catch a packet which is marked as flush but is not received yet
        if (packet->flush) {
            qDebug()<<Q_FUNC_INFO<<": flush packet: " << packet->sequenceNumber;
            setState(Filling);
            packet->flush = false;
        } else {
            switch (packet->status) {
            case RtpPacket::PacketFree:
                qWarning()<<Q_FUNC_INFO<<": free packet: " << packet->sequenceNumber;
                setState(Empty);
                packet = NULL;
                break;
            case RtpPacket::PacketMissing:
                qWarning()<<Q_FUNC_INFO<< "missing packet: "<<packet->sequenceNumber<<", payload size: "<<packet->payloadSize;
                memcpy(packet->payload, m_silence, packet->payloadSize);
            case RtpPacket::PacketOk:
                if (m_first == m_last) {
                    qDebug()<<Q_FUNC_INFO<<": buffer empty";
                    setState(Empty);
                } else {
                    m_first = (m_first+1) % m_capacity;
                }
                packet->init();
                break;
            default:
                qFatal(__func__);
                packet = NULL;
            }
        }
    }
    State currentState = m_state;
    m_mutex.unlock();

    emitStateChanged(currentState);

    return packet;
}
Ejemplo n.º 4
0
void FilterMessageType::setAllowedTypeAction(QAction* action)
{
    mAllowedType = action->data().value<MessageType>();
    emitStateChanged();
}
Ejemplo n.º 5
0
void FilterFriendOnline::onlineActionToggled(bool state)
{
    enabled = state;
    emitStateChanged();
}