Add parser for Frame Identifier object
authorDenis Kenzior <denkenz@gmail.com>
Mon, 1 Mar 2010 23:10:56 +0000 (17:10 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Mon, 1 Mar 2010 23:21:47 +0000 (17:21 -0600)
src/stkutil.c

index 5322f08..cdb1f3c 100644 (file)
@@ -202,6 +202,30 @@ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter,
        return TRUE;
 }
 
+/* Defined in TS 102.223 Section 8.80 */
+static gboolean parse_dataobj_frame_id(struct comprehension_tlv_iter *iter,
+                                       void *user)
+{
+       unsigned char *frame_id = user;
+       const unsigned char *data;
+
+       if (comprehension_tlv_iter_get_tag(iter) !=
+                       STK_DATA_OBJECT_TYPE_FRAME_ID)
+               return FALSE;
+
+       if (comprehension_tlv_iter_get_length(iter) != 1)
+               return FALSE;
+
+       data = comprehension_tlv_iter_get_data(iter);
+
+       if (data[0] >= 0x10)
+               return FALSE;
+
+       *frame_id = data[0];
+
+       return TRUE;
+}
+
 static dataobj_handler handler_for_type(enum stk_data_object_type type)
 {
        switch (type) {
@@ -215,6 +239,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)
                return parse_dataobj_duration;
        case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE:
                return parse_dataobj_text_attr;
+       case STK_DATA_OBJECT_TYPE_FRAME_ID:
+               return parse_dataobj_frame_id;
        default:
                return NULL;
        };
@@ -287,6 +313,8 @@ static gboolean parse_display_text(struct stk_command *command,
 {
        gboolean ret;
 
+       command->display_text.frame_id = 0xFF;
+
        ret = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
                                DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
                                &command->display_text.text,
@@ -298,6 +326,8 @@ static gboolean parse_display_text(struct stk_command *command,
                                &command->display_text.duration,
                                STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE, 0,
                                &command->display_text.text_attribute,
+                               STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
+                               &command->display_text.frame_id,
                                STK_DATA_OBJECT_TYPE_INVALID);
 
        if (ret == FALSE)