introduce get_message_by_id

This commit is contained in:
Tomasz Moń
2009-03-14 10:04:56 +01:00
parent e80683aea2
commit dc66db841a
2 changed files with 23 additions and 33 deletions

49
gdigi.c
View File

@@ -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;

View File

@@ -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);