summaryrefslogtreecommitdiff
path: root/examples/monitor.c
diff options
context:
space:
mode:
authorMichal Ratajsky <[email protected]>2014-08-12 05:06:12 +0200
committerMichal Ratajsky <[email protected]>2014-08-12 05:06:12 +0200
commit1e1847069eb58c2b62f2b3c11e1e9adf3a17ebde (patch)
tree4bcd30db2bdf4032c4a49844570ce4227cf2510e /examples/monitor.c
parent7396148c328d9f2a0d933374547c7e93a46b8efa (diff)
parent6c6d4239ddc807e922df3874654f99eea291aadb (diff)
downloadlibmatemixer-1e1847069eb58c2b62f2b3c11e1e9adf3a17ebde.tar.bz2
libmatemixer-1e1847069eb58c2b62f2b3c11e1e9adf3a17ebde.tar.xz
Merge branch 'oss-alsa'
Diffstat (limited to 'examples/monitor.c')
-rw-r--r--examples/monitor.c302
1 files changed, 182 insertions, 120 deletions
diff --git a/examples/monitor.c b/examples/monitor.c
index 3267b36..71d8b61 100644
--- a/examples/monitor.c
+++ b/examples/monitor.c
@@ -26,7 +26,7 @@
#include <libmatemixer/matemixer.h>
-static MateMixerControl *control;
+static MateMixerContext *context;
static GMainLoop *mainloop;
static gchar *
@@ -57,6 +57,30 @@ create_app_string (const gchar *app_name,
}
static const gchar *
+get_stream_control_role_string (MateMixerStreamControlRole role)
+{
+ switch (role) {
+ case MATE_MIXER_STREAM_CONTROL_ROLE_UNKNOWN:
+ return "Unknown";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_MASTER:
+ return "Master";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_PCM:
+ return "PCM";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_BASS:
+ return "Bass";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_TREBLE:
+ return "Treble";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_CD:
+ return "CD";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_SPEAKER:
+ return "PC Speaker";
+ case MATE_MIXER_STREAM_CONTROL_ROLE_PORT:
+ return "Port";
+ }
+ return "Unknown";
+}
+
+static const gchar *
create_role_string (MateMixerClientStreamRole role)
{
switch (role) {
@@ -89,7 +113,7 @@ create_role_string (MateMixerClientStreamRole role)
}
static gchar *
-create_volume_bar (MateMixerStream *stream, double *percent)
+create_volume_bar (MateMixerStreamControl *ctl, double *percent)
{
GString *string;
gint64 volume;
@@ -100,9 +124,9 @@ create_volume_bar (MateMixerStream *stream, double *percent)
int length = 30;
int stars;
- volume = mate_mixer_stream_get_volume (stream);
- volume_min = mate_mixer_stream_get_min_volume (stream);
- volume_max = mate_mixer_stream_get_normal_volume (stream);
+ volume = mate_mixer_stream_control_get_volume (ctl);
+ volume_min = mate_mixer_stream_control_get_min_volume (ctl);
+ volume_max = mate_mixer_stream_control_get_normal_volume (ctl);
string = g_string_new ("[");
@@ -122,39 +146,21 @@ static void
print_devices (void)
{
const GList *devices;
- const GList *ports;
const GList *profiles;
MateMixerDeviceProfile *active_profile;
- devices = mate_mixer_control_list_devices (control);
+ devices = mate_mixer_context_list_devices (context);
while (devices) {
MateMixerDevice *device = MATE_MIXER_DEVICE (devices->data);
g_print ("Device %s\n"
- " |-| Description : %s\n"
- " |-| Icon Name : %s\n\n",
+ " |-| Label : %s\n"
+ " |-| Icon Name : %s\n\n",
mate_mixer_device_get_name (device),
- mate_mixer_device_get_description (device),
+ mate_mixer_device_get_label (device),
mate_mixer_device_get_icon (device));
- ports = mate_mixer_device_list_ports (device);
- while (ports) {
- MateMixerPort *port = MATE_MIXER_PORT (ports->data);
-
- g_print (" |-| Port %s\n"
- " |-| Description : %s\n"
- " |-| Icon Name : %s\n"
- " |-| Priority : %u\n"
- " |-| Status : \n\n",
- mate_mixer_port_get_name (port),
- mate_mixer_port_get_description (port),
- mate_mixer_port_get_icon (port),
- mate_mixer_port_get_priority (port));
-
- ports = ports->next;
- }
-
profiles = mate_mixer_device_list_profiles (device);
active_profile = mate_mixer_device_get_active_profile (device);
@@ -162,15 +168,15 @@ print_devices (void)
MateMixerDeviceProfile *profile = MATE_MIXER_DEVICE_PROFILE (profiles->data);
g_print (" |%c| Profile %s\n"
- " |-| Description : %s\n"
- " |-| Priority : %u\n"
- " |-| Inputs : %u\n"
- " |-| Outputs : %u\n\n",
+ " |-| Label : %s\n"
+ " |-| Priority : %u\n"
+ " |-| Inputs : %u\n"
+ " |-| Outputs : %u\n\n",
(profile == active_profile)
? 'A'
: '-',
mate_mixer_device_profile_get_name (profile),
- mate_mixer_device_profile_get_description (profile),
+ mate_mixer_device_profile_get_label (profile),
mate_mixer_device_profile_get_priority (profile),
mate_mixer_device_profile_get_num_input_streams (profile),
mate_mixer_device_profile_get_num_output_streams (profile));
@@ -179,6 +185,35 @@ print_devices (void)
}
g_print ("\n");
+ const GList *switches = mate_mixer_device_list_switches (device);
+
+ while (switches != NULL) {
+ MateMixerSwitch *swtch = MATE_MIXER_SWITCH (switches->data);
+ MateMixerSwitchOption *active = mate_mixer_switch_get_active_option (swtch);
+
+ const GList *options;
+
+ options = mate_mixer_switch_list_options (swtch);
+
+ g_print ("Switch %s\n",
+ mate_mixer_switch_get_name (swtch));
+
+ while (options != NULL) {
+ MateMixerSwitchOption *option = MATE_MIXER_SWITCH_OPTION (options->data);
+
+ g_print (" |%c| %s\n",
+ (option == active)
+ ? '*'
+ : '-',
+ mate_mixer_switch_option_get_label (option));
+
+ options = options->next;
+ }
+
+ switches = switches->next;
+ }
+ g_print ("\n");
+
devices = devices->next;
}
}
@@ -187,45 +222,85 @@ static void
print_streams (void)
{
const GList *streams;
- const GList *ports;
- streams = mate_mixer_control_list_streams (control);
+ streams = mate_mixer_context_list_streams (context);
while (streams) {
- MateMixerStream *stream = MATE_MIXER_STREAM (streams->data);
- MateMixerClientStream *client = NULL;
- gchar *volume_bar;
- gdouble volume;
+ MateMixerStream *stream = MATE_MIXER_STREAM (streams->data);
+ MateMixerStreamControl *ctl;
+ MateMixerSwitch *swtch;
+ MateMixerClientStream *client = NULL;
+ gchar *volume_bar;
+ gdouble volume;
+
+ const GList *controls;
+ const GList *switches;
if (mate_mixer_stream_get_flags (stream) & MATE_MIXER_STREAM_CLIENT) {
/* The application-specific details are accessible through the client
* interface, which all client streams implement */
client = MATE_MIXER_CLIENT_STREAM (stream);
+ }
- /* Ignore event streams */
- if (mate_mixer_client_stream_get_role (client) == MATE_MIXER_CLIENT_STREAM_ROLE_EVENT) {
- streams = streams->next;
- continue;
- }
+ controls = mate_mixer_stream_list_controls (stream);
+
+ while (controls != NULL) {
+ ctl = MATE_MIXER_STREAM_CONTROL (controls->data);
+
+ const gchar *role;
+
+ role = get_stream_control_role_string (mate_mixer_stream_control_get_role (ctl));
+
+ // XXX volume is sometimes -nan, use flags
+ volume_bar = create_volume_bar (ctl, &volume);
+
+ g_print ("Stream %s control %s / %s\n"
+ " |-| Volume : %s %.1f %% (%.1f dB)\n"
+ " |-| Muted : %s\n"
+ " |-| Channels : %d\n"
+ " |-| Balance : %.1f\n"
+ " |-| Fade : %.1f\n"
+ " |-| Role : %s\n",
+ mate_mixer_stream_get_name (stream),
+ mate_mixer_stream_control_get_name (ctl),
+ mate_mixer_stream_control_get_label (ctl),
+ volume_bar,
+ volume,
+ mate_mixer_stream_control_get_decibel (ctl),
+ mate_mixer_stream_control_get_mute (ctl) ? "Yes" : "No",
+ mate_mixer_stream_control_get_num_channels (ctl),
+ mate_mixer_stream_control_get_balance (ctl),
+ mate_mixer_stream_control_get_fade (ctl),
+ role);
+
+ g_free (volume_bar);
+
+ controls = controls->next;
}
- volume_bar = create_volume_bar (stream, &volume);
+ switches = mate_mixer_stream_list_switches (stream);
- g_print ("Stream %s\n"
- " |-| Description : %s\n"
- " |-| Volume : %s %.1f %%\n"
- " |-| Muted : %s\n"
- " |-| Channels : %d\n"
- " |-| Balance : %.1f\n"
- " |-| Fade : %.1f\n",
- mate_mixer_stream_get_name (stream),
- mate_mixer_stream_get_description (stream),
- volume_bar,
- volume,
- mate_mixer_stream_get_mute (stream) ? "Yes" : "No",
- mate_mixer_stream_get_num_channels (stream),
- mate_mixer_stream_get_balance (stream),
- mate_mixer_stream_get_fade (stream));
+ while (switches != NULL) {
+ swtch = MATE_MIXER_SWITCH (switches->data);
+ const GList *options;
+
+ options = mate_mixer_switch_list_options (swtch);
+
+ g_print ("Switch %s\n",
+ mate_mixer_switch_get_name (swtch));
+
+ while (options != NULL) {
+ MateMixerSwitchOption *option = MATE_MIXER_SWITCH_OPTION (options->data);
+
+ g_print (" |%c| %s\n",
+ '-',
+ mate_mixer_switch_option_get_label (option));
+
+ options = options->next;
+ }
+
+ options = options->next;
+ }
if (client != NULL) {
MateMixerClientStreamFlags client_flags;
@@ -243,51 +318,36 @@ print_streams (void)
}
g_print ("\n");
- g_free (volume_bar);
-
- ports = mate_mixer_stream_list_ports (stream);
- while (ports) {
- MateMixerPort *port = MATE_MIXER_PORT (ports->data);
-
- g_print (" |-| Port %s\n"
- " |-| Description : %s\n"
- " |-| Icon Name : %s\n"
- " |-| Priority : %u\n"
- " |-| Status : \n\n",
- mate_mixer_port_get_name (port),
- mate_mixer_port_get_description (port),
- mate_mixer_port_get_icon (port),
- mate_mixer_port_get_priority (port));
-
- ports = ports->next;
- }
streams = streams->next;
}
}
static void
-print_cached_streams (void)
+print_stored_streams (void)
{
const GList *streams;
- streams = mate_mixer_control_list_cached_streams (control);
+ streams = mate_mixer_context_list_stored_streams (context);
while (streams) {
MateMixerStream *stream = MATE_MIXER_STREAM (streams->data);
+ MateMixerStreamControl *ctl;
MateMixerClientStream *client;
MateMixerClientStreamFlags client_flags;
MateMixerClientStreamRole client_role;
gchar *volume_bar;
gdouble volume;
- client = MATE_MIXER_CLIENT_STREAM (stream);
+ ctl = mate_mixer_stream_get_default_control (stream);
+
+ client = MATE_MIXER_CLIENT_STREAM (stream);
client_flags = mate_mixer_client_stream_get_flags (client);
client_role = mate_mixer_client_stream_get_role (client);
- volume_bar = create_volume_bar (stream, &volume);
+ volume_bar = create_volume_bar (ctl, &volume);
- g_print ("Cached stream %s\n"
+ g_print ("Stored stream %s\n"
" |-| Role : %s\n"
" |-| Volume : %s %.1f %%\n"
" |-| Muted : %s\n"
@@ -298,10 +358,10 @@ print_cached_streams (void)
create_role_string (client_role),
volume_bar,
volume,
- mate_mixer_stream_get_mute (stream) ? "Yes" : "No",
- mate_mixer_stream_get_num_channels (stream),
- mate_mixer_stream_get_balance (stream),
- mate_mixer_stream_get_fade (stream));
+ mate_mixer_stream_control_get_mute (ctl) ? "Yes" : "No",
+ mate_mixer_stream_control_get_num_channels (ctl),
+ mate_mixer_stream_control_get_balance (ctl),
+ mate_mixer_stream_control_get_fade (ctl));
if (client_flags & MATE_MIXER_CLIENT_STREAM_APPLICATION) {
gchar *app = create_app_string (mate_mixer_client_stream_get_app_name (client),
@@ -323,11 +383,11 @@ static void
connected (void)
{
g_print ("Connected using the %s backend.\n\n",
- mate_mixer_control_get_backend_name (control));
+ mate_mixer_context_get_backend_name (context));
print_devices ();
print_streams ();
- print_cached_streams ();
+ print_stored_streams ();
g_print ("Waiting for events. Hit CTRL+C to quit.\n");
}
@@ -337,7 +397,7 @@ state_cb (void)
{
MateMixerState state;
- state = mate_mixer_control_get_state (control);
+ state = mate_mixer_context_get_state (context);
switch (state) {
case MATE_MIXER_STATE_READY:
@@ -353,25 +413,25 @@ state_cb (void)
}
static void
-device_added_cb (MateMixerControl *control, const gchar *name)
+device_added_cb (MateMixerContext *context, const gchar *name)
{
g_print ("Device added: %s\n", name);
}
static void
-device_removed_cb (MateMixerControl *control, const gchar *name)
+device_removed_cb (MateMixerContext *context, const gchar *name)
{
g_print ("Device removed: %s\n", name);
}
static void
-stream_added_cb (MateMixerControl *control, const gchar *name)
+stream_added_cb (MateMixerContext *context, const gchar *name)
{
g_print ("Stream added: %s\n", name);
}
static void
-stream_removed_cb (MateMixerControl *control, const gchar *name)
+stream_removed_cb (MateMixerContext *context, const gchar *name)
{
g_print ("Stream removed: %s\n", name);
}
@@ -388,22 +448,22 @@ signal_cb (gpointer mainloop)
int main (int argc, char *argv[])
{
MateMixerState state;
- GOptionContext *context;
+ GOptionContext *ctx;
gchar *backend = NULL;
gchar *server = NULL;
GError *error = NULL;
GOptionEntry entries[] = {
- { "backend", 'b', 0, G_OPTION_ARG_STRING, &backend, "Sound system to use (pulseaudio, null)", NULL },
+ { "backend", 'b', 0, G_OPTION_ARG_STRING, &backend, "Sound system to use (pulseaudio, alsa, oss, null)", NULL },
{ "server", 's', 0, G_OPTION_ARG_STRING, &server, "Sound server address", NULL },
{ NULL }
};
- context = g_option_context_new ("- libmatemixer monitor");
+ ctx = g_option_context_new ("- libmatemixer monitor");
- g_option_context_add_main_entries (context, entries, NULL);
+ g_option_context_add_main_entries (ctx, entries, NULL);
- if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ if (!g_option_context_parse (ctx, &argc, &argv, &error)) {
g_printerr ("%s\n", error->message);
g_error_free (error);
return 1;
@@ -415,20 +475,24 @@ int main (int argc, char *argv[])
setlocale (LC_ALL, "");
- /* Set up the controller, through which we access the main functionality */
- control = mate_mixer_control_new ();
+ /* Set up the contextler, through which we access the main functionality */
+ context = mate_mixer_context_new ();
/* Some details about our application, only used with the PulseAudio backend */
- mate_mixer_control_set_app_name (control, "MateMixer Monitor");
- mate_mixer_control_set_app_id (control, "org.mate-desktop.libmatemixer-monitor");
- mate_mixer_control_set_app_version (control, "1.0");
- mate_mixer_control_set_app_icon (control, "multimedia-volume-control");
+ mate_mixer_context_set_app_name (context, "MateMixer Monitor");
+ mate_mixer_context_set_app_id (context, "org.mate-desktop.libmatemixer-monitor");
+ mate_mixer_context_set_app_version (context, "1.0");
+ mate_mixer_context_set_app_icon (context, "multimedia-volume-context");
if (backend) {
if (!strcmp (backend, "pulseaudio"))
- mate_mixer_control_set_backend_type (control, MATE_MIXER_BACKEND_PULSEAUDIO);
+ mate_mixer_context_set_backend_type (context, MATE_MIXER_BACKEND_PULSEAUDIO);
+ else if (!strcmp (backend, "alsa"))
+ mate_mixer_context_set_backend_type (context, MATE_MIXER_BACKEND_ALSA);
+ else if (!strcmp (backend, "oss"))
+ mate_mixer_context_set_backend_type (context, MATE_MIXER_BACKEND_OSS);
else if (!strcmp (backend, "null"))
- mate_mixer_control_set_backend_type (control, MATE_MIXER_BACKEND_NULL);
+ mate_mixer_context_set_backend_type (context, MATE_MIXER_BACKEND_NULL);
else
g_printerr ("Sound system backend '%s' is unknown, it will be auto-detected.\n",
backend);
@@ -437,40 +501,39 @@ int main (int argc, char *argv[])
}
if (server) {
- mate_mixer_control_set_server_address (control, server);
+ mate_mixer_context_set_server_address (context, server);
g_free (server);
}
/* Initiate connection to the sound server */
- if (!mate_mixer_control_open (control)) {
- g_object_unref (control);
- mate_mixer_deinit ();
+ if (!mate_mixer_context_open (context)) {
+ g_object_unref (context);
return 1;
}
- g_signal_connect (G_OBJECT (control),
+ g_signal_connect (G_OBJECT (context),
"device-added",
G_CALLBACK (device_added_cb),
NULL);
- g_signal_connect (G_OBJECT (control),
+ g_signal_connect (G_OBJECT (context),
"device-removed",
G_CALLBACK (device_removed_cb),
NULL);
- g_signal_connect (G_OBJECT (control),
+ g_signal_connect (G_OBJECT (context),
"stream-added",
G_CALLBACK (stream_added_cb),
NULL);
- g_signal_connect (G_OBJECT (control),
+ g_signal_connect (G_OBJECT (context),
"stream-removed",
G_CALLBACK (stream_removed_cb),
NULL);
- /* If mate_mixer_control_open() returns TRUE, the state will be either
+ /* If mate_mixer_context_open() returns TRUE, the state will be either
* MATE_MIXER_STATE_READY or MATE_MIXER_STATE_CONNECTING.
*
- * In case mate_mixer_control_open() returned FALSE, the current state
+ * In case mate_mixer_context_open() returned FALSE, the current state
* would be MATE_MIXER_STATE_FAILED */
- state = mate_mixer_control_get_state (control);
+ state = mate_mixer_context_get_state (context);
switch (state) {
case MATE_MIXER_STATE_READY:
@@ -480,7 +543,7 @@ int main (int argc, char *argv[])
g_print ("Waiting for connection...\n");
/* Wait for the state transition */
- g_signal_connect (control,
+ g_signal_connect (context,
"notify::state",
G_CALLBACK (state_cb),
NULL);
@@ -499,8 +562,7 @@ int main (int argc, char *argv[])
g_main_loop_run (mainloop);
- g_object_unref (control);
- mate_mixer_deinit ();
+ g_object_unref (context);
return 0;
}