// Constructor. drumkv1widget_lv2::drumkv1widget_lv2 ( drumkv1_lv2 *pDrumk, LV2UI_Controller controller, LV2UI_Write_Function write_function ) : drumkv1widget() { m_pDrumkUi = new drumkv1_lv2ui(pDrumk, controller, write_function); #ifdef CONFIG_LV2_EXTERNAL_UI m_external_host = NULL; #endif #ifdef CONFIG_LV2_UI_IDLE m_bIdleClosed = false; #endif for (uint32_t i = 0; i < drumkv1::NUM_PARAMS; ++i) m_params_def[i] = true; // May initialize the scheduler/work notifier. initSchedNotifier(); // Initial update, always... refreshElements(); activateElement(); }
ErrVal RtpBuffer::PushElement(Element element){ int difference=1; int pos=0; //printf("Valors de la cua RTP abans del push: start:%d, end:%d, elements:%d\n",buffer.start,buffer.end,buffer.elements); if(buffer.elements>0) if(buffer.end>0) difference=element.Sequence_num-buffer.element[buffer.end-1].Sequence_num; else difference=element.Sequence_num-buffer.element[MAX_ELEMENTS-1].Sequence_num; //printf("Difference = %d\n",difference); //Cal ordenar un cop es posen if(difference==1){ //Si no hi ha hagut cap desordre al enviar paquets buffer.element[buffer.end]=element; if(buffer.end<MAX_ELEMENTS-1) buffer.end++; else buffer.end=0; if(buffer.elements<MAX_ELEMENTS){ buffer.elements++; return Err::m_nOK; } else{ printf("ERROR: Fora del buffer !!\n"); return Err::m_nEndOfBuffer; } } else{ // Hi ha hagut algun desordre a l'enviament pos=buffer.end+difference-1; // El paquet rebut és anterior al ultim de la cua. No hem de modificar el END ni el ELEMENTS if(difference<0){// El paquet rebut és anterior al ultim de la cua i la posició on posar el element dona la volta a la cua . Cal modificar la posició pos //printf("paquet anterior\n"); //printf("pos=%d\n",pos); if(pos<0){ pos=MAX_ELEMENTS+pos; } //printf("Out of range:%d",OutOfRange(pos)); if(OutOfRange(pos)){ //Si la posició és anterior al primer element de la cua hem de reduir el START i augmentar el ELEMENTS //Només si no dona la volta buffer.start=pos; refreshElements(); } } // El paquet és posterior al ultim. Augmentem en consonància el END i el ELEMENTS if(difference>0){ // printf("paquet posterior\n"); if(pos>=MAX_ELEMENTS) // La nova posició dóna la volta a la cua pos-=MAX_ELEMENTS; //actualitzem END i ELEMENTS if(buffer.end+=difference<MAX_ELEMENTS) buffer.end+=difference-1; else buffer.end=buffer.end+difference-MAX_ELEMENTS; if(buffer.elements+difference<=MAX_ELEMENTS) buffer.elements+=difference; else{ return Err::m_nEndOfBuffer; // printf("Fora del buffer\n"); } } //printf("posem el paquet desordenat a la pos= %d\n",pos); buffer.element[pos]=element; } //printf("Valors de la cua despres del push: start:%d, end:%d, elements:%d\n",buffer.start,buffer.end,buffer.elements); return Err::m_nOK; }