From dc66db841af0548f2ddd171aa1ab1ed736086f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Sat, 14 Mar 2009 10:04:56 +0100 Subject: [PATCH] introduce get_message_by_id --- gdigi.c | 49 +++++++++++++++++++------------------------------ gdigi.h | 7 ++++--- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/gdigi.c b/gdigi.c index f6ab5c4..9838ba6 100644 --- a/gdigi.c +++ b/gdigi.c @@ -268,6 +268,21 @@ static gint get_message_id(GString *msg) return -1; } +GString *get_message_by_id(MessageID id) +{ + GString *data = NULL; + + do { + if (data) + g_string_free(data, TRUE); + data = read_data(); + } while (get_message_id(data) != id); + + unpack_message(data); + + return data; +} + void append_value(GString *msg, guint value) { /* check how many bytes long the value is */ @@ -375,13 +390,7 @@ GStrv query_preset_names(gchar bank) send_message(REQUEST_PRESET_NAMES, &bank, 1); /* read reply */ - do { - if (data) - g_string_free(data, TRUE); - data = read_data(); - } while (get_message_id(data) != RECEIVE_PRESET_NAMES); - - unpack_message(data); + data = get_message_by_id(RECEIVE_PRESET_NAMES); if (data != NULL) { if (data->len >= 10) { @@ -413,11 +422,7 @@ GString *get_current_preset() send_message(REQUEST_PRESET, "\x04\x00", 3); /* read reply */ - data = read_data(); - g_string_free(data, TRUE); - - data = read_data(); - unpack_message(data); + data = get_message_by_id(RECEIVE_PRESET_PARAMETERS); return data; } @@ -451,15 +456,7 @@ static void request_device_configuration() send_message(REQUEST_DEVICE_CONFIGURATION, NULL, 0); - GString *data = NULL; - - do { - if (data) - g_string_free(data, TRUE); - data = read_data(); - } while (get_message_id(data) != RECEIVE_DEVICE_CONFIGURATION); - - unpack_message(data); + GString *data = get_message_by_id(RECEIVE_DEVICE_CONFIGURATION); if (data->len > 14) { os_major = data->str[8]; @@ -652,15 +649,7 @@ static void modifier_linkable_list() send_message(REQUEST_MODIFIER_LINKABLE_LIST, "\x00\x01", 2); - GString *data = NULL; - - do { - if (data) - g_string_free(data, TRUE); - data = read_data(); - } while (get_message_id(data) != RECEIVE_MOFIFIER_LINKABLE_LIST); - - unpack_message(data); + GString *data = get_message_by_id(RECEIVE_MODIFIER_LINKABLE_LIST); unsigned char *str = (unsigned char*)data->str; diff --git a/gdigi.h b/gdigi.h index 47c026d..3f6921d 100644 --- a/gdigi.h +++ b/gdigi.h @@ -553,7 +553,7 @@ enum { PRESETS_EXTERNAL = 6 }; -enum { +typedef enum { REQUEST_WHO_AM_I = 0x01, RECEIVE_WHO_AM_I = 0x02, @@ -584,7 +584,7 @@ enum { MOVE_PRESET = 0x39, REQUEST_MODIFIER_LINKABLE_LIST = 0x3A, - RECEIVE_MOFIFIER_LINKABLE_LIST = 0x3B, + RECEIVE_MODIFIER_LINKABLE_LIST = 0x3B, REQUEST_PARAMETER_VALUE = 0x40, RECEIVE_PARAMETER_VALUE = 0x41, @@ -605,10 +605,11 @@ enum { ACK = 0x7E, NACK = 0x7F -}; +} MessageID; void send_message(gint procedure, gchar *data, gint len); void append_value(GString *msg, guint value); +GString *get_message_by_id(MessageID id); void set_option(guint id, guint position, guint value); void switch_preset(guint bank, guint x); void store_preset_name(int x, const gchar *name);