static void subbCheck ( sTimer *tp ) { sub_sBuffer *bp = (sub_sBuffer *)tp->data; if (gdbroot->db->log.b.tmon) errh_Info("subbCheck: %u", tp->clock); #if 0 if (EXCL_ON) { /* Exclusive mode is on, requeue the buffer for later transmission */ addTime(nowTime(&tp->time), msToTime(NULL, bp->dt)); insertTimer(tp); } #endif if (subsm_SendBuffer(bp)) { setTimer(tp, msToClock(NULL, bp->dt)); insertTimer(tp); } else { freeTimer(tp); } }
/* * Watches socket to find a response for the given title * using TIMEOUT as maximum time to wait * returns adress:port string */ char* discoverHost(int sock, char* title) { struct timeval timeout; int found = 0; fd_set fds; char message[MESSAGE_SIZE]; int titleLen = strlen(title); msToTime(TIMEOUT, &timeout); //set up the timeout while(timeToMs(&timeout) > 0){ //use select() to wait on socket up to timeout FD_ZERO(&fds); FD_SET(sock, &fds); select(sock+1, &fds, NULL, NULL, &timeout); if(FD_ISSET(sock, &fds)) { mrecv(sock, message, MESSAGE_SIZE); //read next message from socket //check if its the right title if(strncmp(title, message, titleLen) == 0){ //get second line, which will have address:port char* host = (char*) calloc(strlen(message)-titleLen, sizeof(char)); strcpy(host, &message[titleLen+1]); return host; } } } //matching host was not found, return NULL return NULL; }
void testApp::parseIpadOSCMessage(){ ofxOscMessage m; ipadReceiver.getNextMessage(&m); if(!bSenderLive){ ipadIP = m.getRemoteIp(); ipadSender.setup(ipadIP, PORT_TO_IPAD); } string msg_string=""; string raw_address; raw_address = m.getAddress(); if(raw_address=="/1/connect"){ int val = m.getArgAsInt32(0); cout<<"connect request received: "<<val<<endl; if(val==0){ oscSendInitConfig(); } }else if(raw_address=="/1/runMosaic"){ bUpdateMosaic = m.getArgAsInt32(0); }else if(raw_address=="/1/stay"){ mosaicProcess.bStay = m.getArgAsInt32(0); }else if(raw_address=="/1/mosaicSpeed"){ mosaicProcess.speed = m.getArgAsFloat(0); oscSendFormatedFloat("/1/labelSpeed", mosaicProcess.speed, 4); }else if(raw_address=="/1/encoderMosaicSpeed"){ int val = (int) m.getArgAsFloat(0); if(val==0){ mosaicProcess.speed /= 1.005; }else if(val==1){ mosaicProcess.speed *= 1.005; }else{ cout<<"encoderMosaicSpeed sending run data"<<endl; } oscSendFloat("/1/mosaicSpeed", mosaicProcess.speed); oscSendFormatedFloat("/1/labelSpeed", mosaicProcess.speed, 4); }else if(raw_address=="/1/zoomOut"){ mosaicProcess.bZoomOut = m.getArgAsInt32(0); string msg = mosaicProcess.bZoomOut ? "Zoom out" : "Zoom in"; oscSendString("/1/labelZoom", msg); }else if(raw_address=="/1/snapImage"){ int val=m.getArgAsFloat(0); if(val==1){ cout<<"snap an image"<<endl; imageSet->addImage(grayImage); mosaicProcess.bUseEnd = true; imageSet->saveImage(grayImage); } }else if(raw_address=="/1/useVideo"){ mosaicProcess.bUseVideo = m.getArgAsInt32(0); cout<<"bUseVideo "<<mosaicProcess.bUseVideo<<endl; }else if(raw_address=="/1/presetOnly"){ mosaicProcess.bUsePresetOnly = m.getArgAsInt32(0); cout<<"bUsePresetOnly "<<mosaicProcess.bUsePresetOnly<<endl; }else if(raw_address=="/1/brightness"){ mosaicProcess.brightness = m.getArgAsFloat(0); oscSendFloat("/1/labelBrightness", mosaicProcess.brightness); cout<<"brightness "<<mosaicProcess.brightness<<endl; }else if(raw_address=="/1/contrast"){ mosaicProcess.contrast = m.getArgAsFloat(0); oscSendFloat("/1/labelContrast", mosaicProcess.contrast); cout<<"contrast "<<mosaicProcess.contrast<<endl; }else if(raw_address=="/1/hesitation"){ mosaicProcess.hesitation = m.getArgAsFloat(0); oscSendFloat("/1/labelHesitation", mosaicProcess.hesitation); cout<<"contrast "<<mosaicProcess.hesitation<<endl; // Music player // Add musicPosition, music msToTime() in testApp.h }else if(raw_address=="/1/musicVolume"){ music.setVolume(m.getArgAsFloat(0)); oscSendFloat("/1/labelVolume", music.getVolume()); }else if(raw_address=="/1/musicPlaying"){ bool playing = m.getArgAsInt32(0); if(playing){ music.play(); music.setPosition(musicPosition); }else{ musicPosition = music.getPosition(); music.stop(); } }else if(raw_address=="/1/musicReset"){ if(m.getArgAsInt32(0)==0){ musicPosition = 0.f; music.setPosition(musicPosition); oscSendFloat("/1/musicPosition", 0.f); oscSendFloat("/1/labelMusicPositionMs", 0.f); } }else if(raw_address=="/1/musicPosition"){ musicPosition = m.getArgAsFloat(0); music.setPosition(musicPosition); oscSendFloat("/1/MusicPosition", musicPosition); oscSendString("/1/labelMusicPositionMs", msToTime(music.getPositionMS())); // End Music Player }else if(raw_address=="/1/zoom"){ float zoom = m.getArgAsFloat(0); mosaicProcess.display_w = (int) (mosaicProcess.max_display_w*zoom); if(mosaicProcess.display_w>1024) mosaicProcess.display_w = 1024; if(mosaicProcess.display_w<2) mosaicProcess.display_w = 2; mosaicProcess.display_h = mosaicProcess.display_w * 3 / 4; }else if(raw_address=="/1/reset"){ int val=m.getArgAsFloat(0); if(val==1){ cout<<"reset brightness and contrast"<<endl; mosaicProcess.brightness = 0; mosaicProcess.contrast = 0; oscSendFloat("/1/brightness", 0); oscSendFloat("/1/contrast", 0); oscSendFloat("/1/labelBrightness", 0); oscSendFloat("/1/labelContrast", 0); mosaicProcess.speed = 0.01; oscSendFloat("/1/mosaicSpeed", mosaicProcess.speed); oscSendFormatedFloat("/1/labelSpeed", mosaicProcess.speed, 4); } }else{ cout<<"not handled: "<<raw_address<<endl; } }
void testApp::update(){ if(resizeFluid) { fluidSolver.setSize(fluidCellsX, fluidCellsX / msa::getWindowAspectRatio()); fluidDrawer.setup(&fluidSolver); resizeFluid = false; myVideo->setupVideo(fluidSolver.getWidth(), fluidSolver.getHeight(), &fluidSolver); } myVideo->update(); #ifdef USE_TUIO if(bTuioOn){ tuioClient.getMessage(); // do finger stuff list<ofxTuioCursor*>cursorList = tuioClient.getTuioCursors(); float MaxSpeed = 0.01; float MaxSpeed2 = MaxSpeed*MaxSpeed; for(list<ofxTuioCursor*>::iterator it=cursorList.begin(); it != cursorList.end(); it++) { ofxTuioCursor *tcur = (*it); float vx = tcur->getXSpeed() * tuioCursorSpeedMult; float vy = tcur->getYSpeed() * tuioCursorSpeedMult; if(vx == 0 && vy == 0) { vx = ofRandom(-tuioStationaryForce, tuioStationaryForce); vx = vx > MaxSpeed ? MaxSpeed : vx; vy = ofRandom(-tuioStationaryForce, tuioStationaryForce); vy = vy > MaxSpeed ? MaxSpeed : vy; } float v2 = vx*vx+vy*vy; if(v2 > MaxSpeed2){ float ratio = sqrt(v2/MaxSpeed2); vx/=ratio; vy/=ratio; }; // float x =tcur->getX(), y=tcur->getY(); // add a factor to correct LKB output range error float x =tcur->getX()*xFactor, y=tcur->getY()*yFactor; // float x =tcur->getX()*1.0, y=tcur->getY()*1.0; addToFluid(ofVec2f(x, y), ofVec2f(vx, vy), true, true); cout<<"TUIO "<<x <<" "<<y<<endl; } } #endif fluidSolver.update(); // osc msg queue update: for(int i=0; i<NUM_MSG_STRINGS; i++){ if(timers[i]<ofGetElapsedTimef()){ msg_strings[i]=""; } } // while(receiver.hasWaitingMessages()){ // parseOSCMessage(); // } while(ipadReceiver.hasWaitingMessages()){ parseIpadOSCMessage(); } if(music.getIsPlaying()){ oscSendString("/1/labelMusicPositionMs", msToTime(music.getPositionMS())); oscSendFloat("/1/musicPosition", music.getPosition()); } }