xmlrpc_value *set_speaker_volume_RP(xmlrpc_env * const env,
									xmlrpc_value * const param_array,
									void *const server_context) {

	LOG_DEBUG(VOLUME_REMOTE_MSG_PREFIX "entering setSpeakerVolume...");

	xmlrpc_double level;
	int result;

	xmlrpc_decompose_value(env, param_array, "(d)", &level);
	if (env->fault_occurred) {
		return NULL;
	}

	result = set_speaker_volume(level);

	LOG_DEBUG(VOLUME_REMOTE_MSG_PREFIX "leaving setSpeakerVolume");
	return xmlrpc_build_value(env, "b", result);
}
Ejemplo n.º 2
0
void a_dispatch_key_event( int layer_num, int key_num, int key_event )
{
	if ((key_lock) && (key_num != A_KEY_BUTTON_2)) return;
	
	if (key_num == A_KEY_BUTTON_APP_MANAGER)
	{
		if (key_event == A_KEY_PRESSED)
		{
			if (dvset_isedit())
			{
				dvset_cursor(1);
				dvset_print();
				
				return;
			}
			else if (dvset_isselected())
			{
				a_set_button_text_pos(main_screen, "SELECT", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);

				a_set_button_text_pos(main_screen, "", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
				
				a_set_button_text_pos(main_screen, "", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
				
				a_set_button_text_pos(main_screen, "MENU", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);

				settings_init();
				dvset_cancel();
				dvset_print();
				
				refresh_main_menu = true;
			
				return;
			}
			else if (r2cs_flag)
			{
				r2cs_flag = false;
				lcd_show_menu_layer(help_layer);
				help_layer_timer = 3; // approx 2 seconds
			
				a_set_button_text_pos(main_screen, "R>CS", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
				return;
			}
			
			if (refresh_main_menu)
			{
				a_set_button_text_pos(main_screen, "PTT", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);

				a_set_button_text_pos(main_screen, "MUTE", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
				
				a_set_button_text_pos(main_screen, "R>CS", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
				
				a_set_button_text_pos(main_screen, "MENU", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);

				refresh_main_menu = false;
			}
		
			snmp_reset_cmnty = 0;
			
			software_ptt = 0; // prevent TXing forever...
			
			app_manager_select_next();
			lcd_show_help_layer(help_layer);
			
			if ((current_app->screen_num == VDISP_REF_LAYER) ||
				(current_app->screen_num == VDISP_DVSET_LAYER) ||
				(current_app->screen_num == VDISP_MAIN_LAYER && r2csURCALL()))
			{
				help_layer_timer = 0; // show help forever..
			}
			else if (current_app->screen_num == VDISP_RMUSET_LAYER)
			{
				help_layer_timer = 0; // show help forever..

				rmuset_print();				
			}
			else
			{
				help_layer_timer = 5; // approx 2 seconds
			}			
		}
		
		if (key_event == A_KEY_HOLD_5S)
		{
			if (SETTING_CHAR(C_DISABLE_UDP_BEACON) != 0)  // toggle UDP beacon
			{
				SETTING_CHAR(C_DISABLE_UDP_BEACON) = 0; // beacon is now on
				dhcp_init(0); // switch on DHCP
				wm8510_beep(50, 1200, 100);
				
				snmp_reset_cmnty = 1;
			}
			else
			{
				SETTING_CHAR(C_DISABLE_UDP_BEACON) = 1; // // beacon is now off
				wm8510_beep(800, 300, 100);
			}
		}
		
		if (key_event == A_KEY_HOLD_10S)
		{
			if ((snmp_reset_cmnty == 2) && (SETTING_CHAR(C_DISABLE_UDP_BEACON) == 0))
			{
				settings.s.snmp_cmnty[0] = 0; // erase first byte, new string will then
				   // be generated automatically
				wm8510_beep(500, 1200, 100);
				snmp_reset_cmnty = 0;
			}
		}			
		
	}
	else
	{
		if (snmp_reset_cmnty == 1)
		{
			if ((key_num == A_KEY_BUTTON_UP) && (key_event == A_KEY_HOLD_2S))
			{
				snmp_reset_cmnty = 2;
			}
		}
		
		int res = 0;
		
		if (layer_num == VDISP_CURRENT_LAYER)
		{
			if (current_app->key_event_handler != NULL)
			{
				res = current_app->key_event_handler(current_app, key_num, key_event);
			}
		}
		else
		{
			app_context_t * tmp_app = app_list_head;
			
			while (tmp_app != NULL)
			{
				if ((tmp_app->screen_num == layer_num) && 
					(tmp_app->key_event_handler != NULL))
				{
					res = tmp_app->key_event_handler(tmp_app, key_num, key_event);
					break;
				}
				
				tmp_app = tmp_app->next;
			}
		}
		
		if (res == 0) // handler didn't use this event
		{
			if (((key_event == A_KEY_PRESSED) || (key_event == A_KEY_REPEAT)) && (!r2cs_flag))
			{
				switch (key_num)
				{
					case A_KEY_BUTTON_UP:
						set_speaker_volume(1);
						break;
						
					case A_KEY_BUTTON_DOWN:
						set_speaker_volume(0);
						break;
				}
			}				
		}
	}			
}