summaryrefslogtreecommitdiffstats
path: root/gisi
diff options
context:
space:
mode:
authorAki Niemi <aki.niemi@nokia.com>2010-11-30 14:51:39 +0200
committerAki Niemi <aki.niemi@nokia.com>2010-12-22 17:13:48 +0200
commit0f0532eb6ff629480c5f1acbdbb5ca9acde6f256 (patch)
treeaec9982c0115d0e2f0a7859babcf613738bebe20 /gisi
parentb4779411716610332d1165fb6114ffc742f627f0 (diff)
downloadofono-0f0532eb6ff629480c5f1acbdbb5ca9acde6f256.tar.bz2
gisi: Add getter for 16bit fields
Diffstat (limited to 'gisi')
-rw-r--r--gisi/message.c17
-rw-r--r--gisi/message.h2
2 files changed, 19 insertions, 0 deletions
diff --git a/gisi/message.c b/gisi/message.c
index 9284d597..51672e68 100644
--- a/gisi/message.c
+++ b/gisi/message.c
@@ -25,6 +25,7 @@
#include <stdint.h>
#include <errno.h>
+#include <arpa/inet.h>
#include <glib.h>
#include "message.h"
@@ -102,6 +103,22 @@ gboolean g_isi_msg_data_get_byte(const GIsiMessage *msg, unsigned offset,
return TRUE;
}
+gboolean g_isi_msg_data_get_word(const GIsiMessage *msg, unsigned offset,
+ uint16_t *word)
+{
+ const uint8_t *buf = g_isi_msg_data(msg);
+ uint16_t val;
+
+ if (!buf || g_isi_msg_data_len(msg) < offset + 1)
+ return FALSE;
+
+ memcpy(&val, buf + offset, sizeof(uint16_t));
+ if (word)
+ *word = ntohs(val);
+
+ return TRUE;
+}
+
gboolean g_isi_msg_data_get_struct(const GIsiMessage *msg, unsigned offset,
const void **type, size_t len)
{
diff --git a/gisi/message.h b/gisi/message.h
index 0be7e5bb..d71b8db4 100644
--- a/gisi/message.h
+++ b/gisi/message.h
@@ -60,6 +60,8 @@ const void *g_isi_msg_data(const GIsiMessage *msg);
gboolean g_isi_msg_data_get_byte(const GIsiMessage *msg, unsigned offset,
uint8_t *byte);
+gboolean g_isi_msg_data_get_word(const GIsiMessage *msg, unsigned offset,
+ uint16_t *word);
gboolean g_isi_msg_data_get_struct(const GIsiMessage *msg, unsigned offset,
const void **type, size_t len);