Esempio n. 1
0
void
VersionSlider::onVersionSliderChange(int newValue)
{
    int version, i;
    double wantedTimestamp = (double)newValue / 100.0;

    if(settingCurrentVersion)
        return;

    //i < maximum(): if the timestamp is greater than any version before the last (maximum()) then we don't check for the last and will take that one.
    for(i = 1; i <= maximum(); i++) {
        if(rpldata_wsn_version_get_timestamp(i) > wantedTimestamp) {
            if(i > 1 && (wantedTimestamp - rpldata_wsn_version_get_timestamp(i - 1)) < (rpldata_wsn_version_get_timestamp(i) - wantedTimestamp))
                i--;
            break;
        }
    }
    if(i > maximum()) {
        setRealtime();
    } else {
        version = i;
        setValue(version);
    }

    emit changeWsnVersion(value());
}
    void audioThreadProc(PyMutex& threadLock, bool& stopSignal) {
        while(true) {
            {
                PyScopedLock l(threadLock);
                if(stopSignal) return;
            }

            if(needRealtimeReset) {
                needRealtimeReset = false;
                setRealtime();
            }

            OUTSAMPLE_t buffer[48 * 2 * 10]; // 10ms stereo in 48khz
            size_t frameCount = 0;
            {
                PyScopedLock lock(player->lock);
                if(stopSignal) return;
                player->readOutStream(buffer, sizeof(buffer)/sizeof(OUTSAMPLE_t), NULL);
                frameCount = sizeof(buffer)/sizeof(OUTSAMPLE_t) / player->outNumChannels;
            }

            PaError ret = Pa_WriteStream(stream, buffer, frameCount);
            if(ret == paOutputUnderflowed)
                printf("warning: paOutputUnderflowed\n");
            else if(ret != paNoError) {
                printf("Pa_WriteStream error %i (%s)\n", ret, Pa_GetErrorText(ret));
                // sleep half a second to avoid spamming
                for(int i = 0; i < 50; ++i) {
                    usleep(10 * 1000);
                    PyScopedLock l(threadLock);
                    if(stopSignal) return;
                }
            }
        }
    }
Esempio n. 3
0
void
VersionSlider::onChangeCurrentVersion(int newVersion)
{
    if(newVersion == 0) {
        setRealtime();
    } else {
        setValue(newVersion);
    }

    emit changeWsnVersion(value());
}
Esempio n. 4
0
VersionSlider::VersionSlider(QWidget * parent):
QWidget(parent), ui(new Ui::VersionSlider), showUpdate(false), incrTime(false), currentTimestamp(0), currentMaxTimestamp(0), maxTimestamp(0)
{
    ui->setupUi(this);

    settingCurrentVersion = false;

    connect(ui->versionSlider, SIGNAL(valueChanged(int)), this, SLOT(onVersionSliderChange(int)));
    connect(ui->versionSpin, SIGNAL(valueChanged(int)), this, SLOT(onVersionSpinChange(int)));

    setRealtime();
}
Esempio n. 5
0
void
VersionSlider::onVersionSpinChange(int newValue)
{
    int version = qMax(qMin(newValue, maximum() + 1), 1);

    if(settingCurrentVersion)
        return;

    if(version > maximum()) {
        setRealtime();
    } else {
        setValue(version);
    }
    emit changeWsnVersion(value());
}
Esempio n. 6
0
void
VersionSlider::onUpdateVersionCount(int versionCount)
{
    bool versionChange = false;
    bool inRealtime = realtime();

    if(value() > versionCount || inRealtime)
        versionChange = true;

    setMaximum(versionCount);
    if(inRealtime) {
        setRealtime();
    }

    if(versionChange)
        emit changeWsnVersion(value());
}
Esempio n. 7
0
/**
 * The main method that starts MAESTOR! This is where the ros node is made and all of the 
 * services are advertised. There are also wrappers in here for all of the service methods that 
 * link up to the ones that are in RobotControl. 
 * @param  argc Number of arguments
 * @param  argv Argument array
 * @return      0 when it shuts down
 */
int main(int argc, char **argv) {
    ros::init(argc, argv, "Maestor"); 
    setRealtime();

    //Check for the run type

    if(argc == 2)
    {
        if(strcmp(argv[1], "sim") == 0)
        {
            //If simulation set the runtime to sim
            robot.setSimType();
        }
    }
    //Init the node
    NodeHandle n; //Fully initializes the node
    Scheduler timer(FREQ_200HZ);
    robot.setPeriod(1.0/timer.getFrequency());
    ServiceServer srv = n.advertiseService("fib", &fib);
    ServiceServer Initsrv = n.advertiseService("initRobot", &initRobot);
    ServiceServer SPsrv = n.advertiseService("setProperties", &setProperties);
    ServiceServer Comsrv = n.advertiseService("command", &command);
    ServiceServer RMsrv = n.advertiseService("requiresMotion", &requiresMotion);
    ServiceServer GPsrv = n.advertiseService("getProperties", &getProperties);
    ServiceServer LTsrv = n.advertiseService("loadTrajectory", &loadTrajectory);
    ServiceServer IFsrv = n.advertiseService("ignoreFrom", &ignoreFrom);
    ServiceServer IAFsrv = n.advertiseService("ignoreAllFrom", &ignoreAllFrom);
    ServiceServer UFsrv = n.advertiseService("unignoreFrom", &unignoreFrom);
    ServiceServer UAFsrv = n.advertiseService("unignoreAllFrom", &unignoreAllFrom);
    ServiceServer STsrv = n.advertiseService("setTrigger", &setTrigger);
    ServiceServer ETsrv = n.advertiseService("extendTrajectory", &extendTrajectory);
    ServiceServer StTsrv = n.advertiseService("startTrajectory", &startTrajectory);
    ServiceServer SpTsrv = n.advertiseService("stopTrajectory", &stopTrajectory);

    ServiceServer SetPropsrv = n.advertiseService("setProperty", &setProperty);

    while (ros::ok()) {
        ros::spinOnce();
        robot.updateHook();
        timer.sleep();
        timer.update();
    }
    return 0;
}
    static int paStreamCallback(
        const void *input, void *output,
        unsigned long frameCount,
        const PaStreamCallbackTimeInfo* timeInfo,
        PaStreamCallbackFlags statusFlags,
        void *userData )
    {
        OutStream* outStream = (OutStream*) userData;

        // We must not hold the PyGIL here!
        PyScopedLock lock(outStream->player->lock);

        if(outStream->needRealtimeReset) {
            outStream->needRealtimeReset = false;
            setRealtime();
        }

        outStream->player->readOutStream((OUTSAMPLE_t*) output, frameCount * outStream->player->outNumChannels, NULL);
        return paContinue;
    }
static
int paStreamCallback(
					 const void *input, void *output,
					 unsigned long frameCount,
					 const PaStreamCallbackTimeInfo* timeInfo,
					 PaStreamCallbackFlags statusFlags,
					 void *userData )
{
	PlayerObject* player = (PlayerObject*) userData;

	// We must not hold the PyGIL here!
	PyScopedLock lock(player->lock);
	
	if(player->needRealtimeReset) {
		player->needRealtimeReset = 0;
		setRealtime();
	}

	player->readOutStream((int16_t*) output, frameCount * player->outNumChannels);
	return paContinue;
}