void fx_init(struct razer_daemon *daemon)
{
	srand(time(NULL));

	effect_fft_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*effect_fft_samples);
	effect_fft_out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*effect_fft_samples);
 	effect_fft_hamming_buffer = create_hamming_window_buffer(effect_fft_samples);

	struct razer_parameter *parameter = NULL;
	effect = daemon_create_effect();
	effect->update = effect_update;
	effect->reset = effect_reset;
	effect->name = "Simple Spectrum display #1";
	effect->description = "Spectrum analyzer for sound input devices";
	effect->fps = 15;
	effect->effect_class = 1;
	effect->input_usage_mask = RAZER_EFFECT_FIRST_INPUT_USED;
	parameter = daemon_create_parameter_string("Effect Input Device","Filepath pointing to the sound input device/file(wav format) (STRING)","/dev/dsp");
	daemon_effect_add_parameter(effect,parameter);	
	parameter = daemon_create_parameter_float("Effect Magnitude","actual spectrum energy display(FLOAT)",0.0f);
	daemon_effect_add_parameter(effect,parameter);	
	int effect_uid = daemon_register_effect(daemon,effect);
	#ifdef USE_DEBUGGING
		printf("registered effect: %s (uid:%d)\n",effect->name,effect->id);
	#endif
	


}
void fx_init(struct razer_daemon *daemon)
{
	srand(time(NULL));
	struct razer_parameter *parameter = NULL;
	effect = daemon_create_effect();
	effect->update = effect_update;
	effect->name = "Progress Bar #1";
	effect->description = "Progress bar to display a percentage";
	effect->fps = 15;
	effect->effect_class = 1;
	effect->input_usage_mask = RAZER_EFFECT_FIRST_INPUT_USED;
	parameter = daemon_create_parameter_float("Effect Percentage","Percentage to display(FLOAT)",0.0f);
	daemon_effect_add_parameter(effect,parameter);	
	int effect_uid = daemon_register_effect(daemon,effect);
	#ifdef USE_DEBUGGING
		printf("registered effect: %s (uid:%d)\n",effect->name,effect->id);
	#endif

}
void fx_init(struct razer_daemon *daemon)
{
	srand(time(NULL));
	struct razer_parameter *parameter = NULL;
	effect_transition = daemon_create_effect();
	effect_transition->update = effect_transition_update;
	effect_transition->name = "Slow Opacity Transition";
	effect_transition->description = "First compute only effect";
	effect_transition->fps = 20;
	effect_transition->effect_class = 2;
	effect_transition->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	//parameter = daemon_create_parameter_int("End Counter","End of animation (Integer)",44);//TODO refactor to daemon_add_effect_parameter_int(effect,key,desc,value)
	//daemon_add_parameter(effect_transition->parameters,parameter);	
	parameter = daemon_create_parameter_int("Effect Length","Time effect lasts in ms(INT)",2000);
	daemon_effect_add_parameter(effect_transition,parameter);	
	parameter = daemon_create_parameter_int("Effect Direction","Effect direction value(INT)",1);
	daemon_effect_add_parameter(effect_transition,parameter);	

	int effect_transition_uid = daemon_register_effect(daemon,effect_transition);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_transition->name,effect_transition->id);
	#endif

	effect_mix = daemon_create_effect();
	effect_mix->update = effect_mix_update;
	effect_mix->name = "Default Mixer";
	effect_mix->description = "Standard effect mixer";
	effect_mix->fps = 20;
	effect_mix->effect_class = 1;
	effect_mix->input_usage_mask = RAZER_EFFECT_FIRST_INPUT_USED | RAZER_EFFECT_SECOND_INPUT_USED;
	int effect_mix_uid = daemon_register_effect(daemon,effect_mix);
	#ifdef USE_DEBUGGING
		printf("registered mix effect: %s (uid:%d)\n",effect_mix->name,effect_mix->id);
	#endif

	effect_null = daemon_create_effect();
	effect_null->update = effect_null_update;
	effect_null->name = "Empty Compute Node";
	effect_null->description = "Does nothing";
	effect_null->fps = 1;
	effect_null->effect_class = 1;
	effect_null->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	int effect_null_uid = daemon_register_effect(daemon,effect_null);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_null->name,effect_null->id);
	#endif

	effect_wait_mouse = daemon_create_effect();
	//effect_wait->update = effect_wait_update;
	effect_wait_mouse->handle_event = effect_wait_mouse_event_handler;
	effect_wait_mouse->name = "Wait For Mouse Button Up  Compute Node";
	effect_wait_mouse->description = "Waits for a mouse button and returns 0 ,it does nothing else";
	effect_wait_mouse->fps = 1;
	effect_wait_mouse->effect_class = 1;
	effect_wait_mouse->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	int effect_wait_mouse_uid = daemon_register_effect(daemon,effect_wait_mouse);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_wait_mouse->name,effect_wait_mouse->id);
	#endif

	effect_wait_key = daemon_create_effect();
	effect_wait_key->handle_event = effect_wait_key_event_handler;
	effect_wait_key->name = "Wait For Key Compute Node";
	effect_wait_key->description = "Waits for a key and returns 0 ,it does nothing else";
	effect_wait_key->fps = 1;
	effect_wait_key->effect_class = 1;
	effect_wait_key->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	int effect_wait_key_uid = daemon_register_effect(daemon,effect_wait_key);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_wait_key->name,effect_wait_key->id);
	#endif


	effect_random_col = daemon_create_effect();
	effect_random_col->update = effect_random_col_update;
	effect_random_col->name = "Randomize Color Parameter Compute Node";
	effect_random_col->description = "Randomizes a color parameter of his parent (able to transition slowly)";
	effect_random_col->fps = 1;
	effect_random_col->effect_class = 1;
	effect_random_col->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	parameter = daemon_create_parameter_int("Effect Length","Time transition lasts in ms(INT)",2000);
	daemon_effect_add_parameter(effect_random_col,parameter);	
	parameter = daemon_create_parameter_int("Parameter Index","Parent color parameter index to randomize(INT)",-1);
	daemon_effect_add_parameter(effect_random_col,parameter);	
	parameter = daemon_create_parameter_int("Randomize Now","Set to 1 to randomize the color(INT)",1);
	daemon_effect_add_parameter(effect_random_col,parameter);	
	parameter = daemon_create_parameter_rgb("Transition Destination Color","Randomized color store(RGB)",&effect_random_col_dst_rgb);
	daemon_effect_add_parameter(effect_random_col,parameter);	
	parameter = daemon_create_parameter_rgb("Transition Start Color","Internal color store(RGB)",&effect_random_col_src_rgb);
	daemon_effect_add_parameter(effect_random_col,parameter);	
	int effect_random_col_uid = daemon_register_effect(daemon,effect_random_col);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_random_col->name,effect_random_col->id);
	#endif

	effect_glimmer = daemon_create_effect();
	effect_glimmer->update = effect_glimmer_update;
	effect_glimmer->name = "Glimming Mixer";
	effect_glimmer->description = "Glimming colors switching between input effects";
	effect_glimmer->fps = 20;
	effect_glimmer->effect_class = 1;
	effect_glimmer->input_usage_mask = RAZER_EFFECT_FIRST_INPUT_USED | RAZER_EFFECT_SECOND_INPUT_USED;
	int effect_glimmer_uid = daemon_register_effect(daemon,effect_glimmer);
	#ifdef USE_DEBUGGING
		printf("registered mix effect: %s (uid:%d)\n",effect_glimmer->name,effect_glimmer->id);
	#endif

	effect_transition_mouse = daemon_create_effect();
	//effect_transition_mouse->update = effect_transition_mouse_update;
	effect_transition_mouse->handle_event = effect_transition_mouse_event_handler;
	effect_transition_mouse->name = "Mouse Position dependant Opacity Transition";
	effect_transition_mouse->description = "Mouse based compute only effect";
	effect_transition_mouse->fps = 20;
	effect_transition_mouse->effect_class = 2;
	effect_transition_mouse->input_usage_mask = RAZER_EFFECT_NO_INPUT_USED;
	effect_transition_mouse_base_range.min = &effect_transition_mouse_base_range_min;
	effect_transition_mouse_base_range.max = &effect_transition_mouse_base_range_max;
	parameter = daemon_create_parameter_pos_range("Effect Range","Min/Max Coords of mouse is able to travel (POS_RANGE)",&effect_transition_mouse_base_range);
	daemon_effect_add_parameter(effect_transition_mouse,parameter);	
	parameter = daemon_create_parameter_int("Effect Direction","Effect direction value 0 for vertical / 1 for horizontal(INT)",1);
	daemon_effect_add_parameter(effect_transition_mouse,parameter);	
	parameter = daemon_create_parameter_pos("Effect Position","Effect actual coordinate(POS)",&effect_transition_mouse_base_pos);
	daemon_effect_add_parameter(effect_transition_mouse,parameter);	

	int effect_transition_mouse_uid = daemon_register_effect(daemon,effect_transition_mouse);
	#ifdef USE_DEBUGGING
		printf("registered compute effect: %s (uid:%d)\n",effect_transition_mouse->name,effect_transition_mouse->id);
	#endif



}