Open Source Telephony
 help / color / mirror / Atom feed
* [PATCH 01/20] stkutil: Add Set Up Call response builder
@ 2010-05-27  4:59 Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 02/20] test-stkutil: Add Set Up Call response tests Andrzej Zaborowski
                   ` (19 more replies)
  0 siblings, 20 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2971 bytes --]

---
 src/stkutil.c |   37 +++++++++++++++++++++++++++++++++++++
 src/stkutil.h |    9 +++++++++
 2 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 2ca5c6a..c9b9511 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3383,6 +3383,20 @@ static gboolean build_dataobj_text(struct stk_tlv_builder *tlv,
 	return stk_tlv_builder_close_container(tlv);
 }
 
+/* Described in TS 102.223 Section 8.30 */
+static gboolean build_dataobj_cc_requested_action(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_common_byte_array *action = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_CALL_CONTROL_REQUESTED_ACTION;
+
+	return action->array == NULL ||
+		(stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		 stk_tlv_builder_append_bytes(tlv,
+						action->array, action->len) &&
+		 stk_tlv_builder_close_container(tlv));
+}
+
 static gboolean build_dataobj(struct stk_tlv_builder *tlv,
 				dataobj_writer builder_func, ...)
 {
@@ -3404,6 +3418,26 @@ static gboolean build_dataobj(struct stk_tlv_builder *tlv,
 	return TRUE;
 }
 
+static gboolean build_set_up_call(struct stk_tlv_builder *builder,
+					const struct stk_response *response)
+{
+	if (response->set_up_call.modified_result.cc_modified)
+		return build_dataobj(builder,
+				build_dataobj_cc_requested_action,
+				DATAOBJ_FLAG_CR,
+				&response->set_up_call.cc_requested_action,
+				build_dataobj_result,
+				DATAOBJ_FLAG_CR,
+				&response->set_up_call.modified_result.result,
+				NULL);
+	else
+		return build_dataobj(builder,
+				build_dataobj_cc_requested_action,
+				DATAOBJ_FLAG_CR,
+				&response->set_up_call.cc_requested_action,
+				NULL);
+}
+
 unsigned int stk_pdu_from_response(const struct stk_response *response,
 					unsigned char *pdu, unsigned int size)
 {
@@ -3495,6 +3529,9 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 					&response->select_item.item_id,
 					NULL);
 		break;
+	case STK_COMMAND_TYPE_SETUP_CALL:
+		ok = build_set_up_call(&builder, response);
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index b04078f..3245a90 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1069,6 +1069,14 @@ struct stk_response_select_item {
 	unsigned char item_id;
 };
 
+struct stk_response_set_up_call {
+	struct stk_common_byte_array cc_requested_action;
+	struct {
+		ofono_bool_t cc_modified;
+		struct stk_result result;
+	} modified_result;
+};
+
 struct stk_response {
 	unsigned char number;
 	unsigned char type;
@@ -1087,6 +1095,7 @@ struct stk_response {
 		struct stk_response_generic set_up_menu;
 		struct stk_response_select_item select_item;
 		struct stk_response_generic send_sms;
+		struct stk_response_set_up_call set_up_call;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 02/20] test-stkutil: Add Set Up Call response tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 03/20] stkutil: Add Polling Off response builder support Andrzej Zaborowski
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 9544 bytes --]

---
 unit/test-stkutil.c |  262 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 262 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 7793f3a..34fc63e 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -15956,6 +15956,234 @@ static const struct terminal_response_test select_item_response_data_811 = {
 	},
 };
 
+static const unsigned char set_up_call_response_111[] = {
+	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test set_up_call_response_data_111 = {
+	.pdu = set_up_call_response_111,
+	.pdu_len = sizeof(set_up_call_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x00, /* Only if not busy on another call */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_121[] = {
+	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x22,
+};
+
+static const struct terminal_response_test set_up_call_response_data_121 = {
+	.pdu = set_up_call_response_121,
+	.pdu_len = sizeof(set_up_call_response_121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x00, /* Only if not busy on another call */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_USER_REJECT,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_141[] = {
+	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test set_up_call_response_data_141 = {
+	.pdu = set_up_call_response_141,
+	.pdu_len = sizeof(set_up_call_response_141),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x02, /* Put all other calls on hold */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_151[] = {
+	0x81, 0x03, 0x01, 0x10, 0x04, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test set_up_call_response_data_151 = {
+	.pdu = set_up_call_response_151,
+	.pdu_len = sizeof(set_up_call_response_151),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x04, /* Disconnect all other calls */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_161[] = {
+	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x20, 0x02,
+};
+
+static const struct terminal_response_test set_up_call_response_data_161 = {
+	.pdu = set_up_call_response_161,
+	.pdu_len = sizeof(set_up_call_response_161),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x00, /* Only if not busy on another call */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
+			.additional_len = 1, /* ME currently busy on call */
+			.additional = (unsigned char[1]) { 0x02 },
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_171a[] = {
+	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x21, 0x00,
+};
+
+static const struct terminal_response_test set_up_call_response_data_171a = {
+	.pdu = set_up_call_response_171a,
+	.pdu_len = sizeof(set_up_call_response_171a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x02, /* Put all other calls on hold */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
+			.additional_len = 1, /* No specific cause given */
+			.additional = (unsigned char[1]) { 0x00 },
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_171b[] = {
+	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x21, 0x9d,
+};
+
+static const struct terminal_response_test set_up_call_response_data_171b = {
+	.pdu = set_up_call_response_171b,
+	.pdu_len = sizeof(set_up_call_response_171b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x02, /* Put all other calls on hold */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
+			.additional_len = 1, /* Facility rejected */
+			.additional = (unsigned char[1]) { 0x9d },
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_1101[] = {
+	0x81, 0x03, 0x01, 0x10, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test set_up_call_response_data_1101 = {
+	.pdu = set_up_call_response_1101,
+	.pdu_len = sizeof(set_up_call_response_1101),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x01, /* Only if not busy, with redial */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_1111b[] = {
+	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x30,
+};
+
+static const struct terminal_response_test set_up_call_response_data_1111b = {
+	.pdu = set_up_call_response_1111b,
+	.pdu_len = sizeof(set_up_call_response_1111b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x00, /* Only if not busy on another call */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NOT_CAPABLE,
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_1121[] = {
+	0x81, 0x03, 0x01, 0x10, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x21, 0x91,
+};
+
+static const struct terminal_response_test set_up_call_response_data_1121 = {
+	.pdu = set_up_call_response_1121,
+	.pdu_len = sizeof(set_up_call_response_1121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x01, /* Only if not busy, with redial */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
+			.additional_len = 1, /* User busy */
+			.additional = (unsigned char[1]) { 0x91 },
+		},
+	},
+};
+
+static const unsigned char set_up_call_response_311b[] = {
+	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x04,
+};
+
+static const struct terminal_response_test set_up_call_response_data_311b = {
+	.pdu = set_up_call_response_311b,
+	.pdu_len = sizeof(set_up_call_response_311b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_CALL,
+		.qualifier = 0x00, /* Only if not busy on another call */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NO_ICON,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -16897,6 +17125,40 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Setup Call 7.2.1",
 				&setup_call_data_721, test_setup_call);
 
+	g_test_add_data_func("/teststk/Set Up Call response 1.1.1",
+				&set_up_call_response_data_111,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.2.1",
+				&set_up_call_response_data_121,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.4.1",
+				&set_up_call_response_data_141,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.5.1",
+				&set_up_call_response_data_151,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.6.1",
+				&set_up_call_response_data_161,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.7.1A",
+				&set_up_call_response_data_171a,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.7.1B",
+				&set_up_call_response_data_171b,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.10.1",
+				&set_up_call_response_data_1101,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.11.1B",
+				&set_up_call_response_data_1111b,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 1.12.1",
+				&set_up_call_response_data_1121,
+				test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Call response 3.1.1B",
+				&set_up_call_response_data_311b,
+				test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Refresh 1.2.1",
 				&refresh_data_121, test_refresh);
 	g_test_add_data_func("/teststk/Refresh 1.5.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 03/20] stkutil: Add Polling Off response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 02/20] test-stkutil: Add Set Up Call response tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 04/20] test-stkutil: Add a Polling Off response test Andrzej Zaborowski
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 938 bytes --]

---
 src/stkutil.c |    2 ++
 src/stkutil.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index c9b9511..1f477db 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3532,6 +3532,8 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 	case STK_COMMAND_TYPE_SETUP_CALL:
 		ok = build_set_up_call(&builder, response);
 		break;
+	case STK_COMMAND_TYPE_POLLING_OFF:
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index 3245a90..82384c4 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1096,6 +1096,7 @@ struct stk_response {
 		struct stk_response_select_item select_item;
 		struct stk_response_generic send_sms;
 		struct stk_response_set_up_call set_up_call;
+		struct stk_response_generic polling_off;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 04/20] test-stkutil: Add a Polling Off response test
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 02/20] test-stkutil: Add Set Up Call response tests Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 03/20] stkutil: Add Polling Off response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 05/20] stkutil: Add the Provide Local Info response builder Andrzej Zaborowski
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1537 bytes --]

---
 unit/test-stkutil.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 34fc63e..35301f3 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -16184,6 +16184,26 @@ static const struct terminal_response_test set_up_call_response_data_311b = {
 	},
 };
 
+static const unsigned char polling_off_response_112[] = {
+	0x81, 0x03, 0x01, 0x04, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test polling_off_response_data_112 = {
+	.pdu = polling_off_response_112,
+	.pdu_len = sizeof(polling_off_response_112),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_POLLING_OFF,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -17207,6 +17227,10 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Polling off 1.1.2",
 				&polling_off_data_112, test_polling_off);
 
+	g_test_add_data_func("/teststk/Polling off response 1.1.2",
+				&polling_off_response_data_112,
+				test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Provide Local Info 1.2.1",
 			&provide_local_info_data_121, test_provide_local_info);
 	g_test_add_data_func("/teststk/Provide Local Info 1.4.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 05/20] stkutil: Add the Provide Local Info response builder
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (2 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 04/20] test-stkutil: Add a Polling Off response test Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 06/20] test-stkutil: Add Provide Local Info response tests Andrzej Zaborowski
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 18088 bytes --]

---
 src/stkutil.c |  447 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/stkutil.h |   53 +++++++
 2 files changed, 500 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 1f477db..422a786 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3165,6 +3165,17 @@ static gboolean stk_tlv_builder_append_byte(struct stk_tlv_builder *iter,
 	return TRUE;
 }
 
+static gboolean stk_tlv_builder_append_short(struct stk_tlv_builder *iter,
+						unsigned short num)
+{
+	if (iter->len + 2 > iter->max_len)
+		return FALSE;
+
+	iter->value[iter->len++] = num >> 8;
+	iter->value[iter->len++] = num & 0xff;
+	return TRUE;
+}
+
 static gboolean stk_tlv_builder_append_gsm_packed(struct stk_tlv_builder *iter,
 							const char *text)
 {
@@ -3383,6 +3394,118 @@ static gboolean build_dataobj_text(struct stk_tlv_builder *tlv,
 	return stk_tlv_builder_close_container(tlv);
 }
 
+/* Described in TS 102.223 Section 8.19 */
+static gboolean build_dataobj_location_info(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_location_info *li = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_LOCATION_INFO;
+	guint8 mccmnc[3];
+
+	if (li->mcc[0] == 0)
+		/*
+		 * "If no location information is available for an access
+		 * technology, the respective data object shall have
+		 * length zero."
+		 */
+		return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+			stk_tlv_builder_close_container(tlv);
+
+	sim_encode_mcc_mnc(mccmnc, li->mcc, li->mnc);
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, mccmnc, 3) &&
+		stk_tlv_builder_append_short(tlv, li->lac_tac) &&
+		(li->has_ci == FALSE ||
+		 stk_tlv_builder_append_short(tlv, li->ci)) &&
+		(li->has_ext_ci == FALSE ||
+		 stk_tlv_builder_append_short(tlv, li->ext_ci)) &&
+		(li->has_eutran_ci == FALSE ||
+		 (stk_tlv_builder_append_short(tlv, li->eutran_ci >> 12) &&
+		  stk_tlv_builder_append_short(tlv,
+					(li->eutran_ci << 4) | 0xf))) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.20
+ *
+ * See format note in parse_dataobj_imei.
+ */
+static gboolean build_dataobj_imei(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	char byte0[3];
+	const char *imei = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_IMEI;
+	unsigned char value[8];
+
+	if (imei == NULL)
+		return TRUE;
+
+	if (strlen(imei) != 15)
+		return FALSE;
+
+	byte0[0] = '*';
+	byte0[1] = imei[0];
+	byte0[2] = '\0';
+	sim_encode_bcd_number(byte0, value);
+	sim_encode_bcd_number(imei + 1, value + 1);
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, value, 8) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.22 */
+static gboolean build_dataobj_network_measurement_results(
+						struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_common_byte_array *nmr = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_NETWORK_MEASUREMENT_RESULTS;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		(nmr->len == 0 ||
+		 stk_tlv_builder_append_bytes(tlv, nmr->array, nmr->len)) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in 3GPP 31.111 Section 8.29 */
+static gboolean build_dataobj_bcch_channel_list(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_bcch_ch_list *list = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_BCCH_CHANNEL_LIST;
+	int i, bytes, pos, shift;
+	unsigned char value;
+
+	/* To distinguish between no BCCH Channel List data object and
+	 * an empty object in a sequence of empty and non-empty objects,
+	 * .channels must be non-NULL in objects in sequences.  */
+	if (list->channels == NULL)
+		return TRUE;
+
+	if (stk_tlv_builder_open_container(tlv, cr, tag, TRUE) != TRUE)
+		return FALSE;
+
+	bytes = (list->length * 10 + 7) / 8;
+	for (i = 0; i < bytes; i++) {
+		pos = (i * 8 + 7) / 10;
+		shift = pos * 10 + 10 - i * 8 - 8;
+
+		value = 0;
+		if (pos < list->length)
+			value |= list->channels[pos] >> shift;
+		if (shift > 2)
+			value |= list->channels[pos - 1] << (10 - shift);
+
+		if (stk_tlv_builder_append_byte(tlv, value) != TRUE)
+			return FALSE;
+	}
+
+	return stk_tlv_builder_close_container(tlv);
+}
+
 /* Described in TS 102.223 Section 8.30 */
 static gboolean build_dataobj_cc_requested_action(struct stk_tlv_builder *tlv,
 						const void *data, gboolean cr)
@@ -3397,6 +3520,195 @@ static gboolean build_dataobj_cc_requested_action(struct stk_tlv_builder *tlv,
 		 stk_tlv_builder_close_container(tlv));
 }
 
+/* Described in TS 102.223 Section 8.39 */
+static gboolean build_dataobj_datetime_timezone(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct sms_scts *scts = data;
+	struct sms_scts timestamp;
+	unsigned char value[7];
+	int offset = 0;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_DATETIME_TIMEZONE;
+
+	if (scts->month == 0 && scts->day == 0)
+		return TRUE;
+
+	/* Time zone information is optional */
+	if (scts->timezone == (gint8) 0xff) {
+		memcpy(&timestamp, scts, sizeof(timestamp));
+		timestamp.timezone = 0;
+		if (sms_encode_scts(&timestamp, value, &offset) != TRUE)
+			return FALSE;
+		value[6] = 0xff;
+	} else
+		if (sms_encode_scts(scts, value, &offset) != TRUE)
+			return FALSE;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, value, 7) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.45 */
+static gboolean build_dataobj_language(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	unsigned char tag = STK_DATA_OBJECT_TYPE_LANGUAGE;
+
+	if (data == NULL)
+		return TRUE;
+
+	/*
+	 * Coded as two GSM 7-bit characters with eighth bit clear.  Since
+	 * ISO 639-2 codes use only english alphabet letters, no conversion
+	 * from UTF-8 to GSM is needed.
+	 */
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, data, 2) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in 3GPP TS 31.111 Section 8.46 */
+static gboolean build_dataobj_timing_advance(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_timing_advance *tadv = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_TIMING_ADVANCE;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_byte(tlv, tadv->status) &&
+		stk_tlv_builder_append_byte(tlv, tadv->advance) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.61 */
+static gboolean build_dataobj_access_technologies(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_access_technologies *techs = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_ACCESS_TECHNOLOGY;
+	int i;
+
+	if (stk_tlv_builder_open_container(tlv, cr, tag, FALSE) != TRUE)
+		return FALSE;
+
+	for (i = 0; i < techs->length; i++)
+		if (stk_tlv_builder_append_byte(tlv, techs->techs[i]) != TRUE)
+			return FALSE;
+
+	return stk_tlv_builder_close_container(tlv);
+}
+
+/* Shortcut for a single Access Technology */
+static gboolean build_dataobj_access_technology(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	return build_dataobj_access_technologies(tlv,
+			&(const struct stk_access_technologies) {
+				.techs = data, .length = 1 }, cr);
+}
+
+/* Described in TS 102.223 Section 8.69 */
+static gboolean build_dataobj_esn(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	const guint32 *esn = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_ESN;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_short(tlv, *esn >> 16) &&
+		stk_tlv_builder_append_short(tlv, *esn >> 0) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.74
+ *
+ * See format note in parse_dataobj_imeisv.
+ */
+static gboolean build_dataobj_imeisv(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	char byte0[3];
+	const char *imeisv = data;
+	unsigned char value[9];
+	unsigned char tag = STK_DATA_OBJECT_TYPE_IMEISV;
+
+	if (imeisv == NULL)
+		return TRUE;
+
+	if (strlen(imeisv) != 16)
+		return FALSE;
+
+	byte0[0] = '3';
+	byte0[1] = imeisv[0];
+	byte0[2] = '\0';
+	sim_encode_bcd_number(byte0, value);
+	sim_encode_bcd_number(imeisv + 1, value + 1);
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, value, 9) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.75 */
+static gboolean build_dataobj_network_search_mode(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const enum stk_network_search_mode *mode = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_NETWORK_SEARCH_MODE;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_byte(tlv, *mode) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.76 */
+static gboolean build_dataobj_battery_state(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const enum stk_battery_state *state = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_BATTERY_STATE;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_byte(tlv, *state) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.81 */
+static gboolean build_dataobj_meid(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	const char *meid = data;
+	unsigned char value[8];
+	unsigned char tag = STK_DATA_OBJECT_TYPE_MEID;
+
+	if (meid == NULL)
+		return TRUE;
+
+	if (strlen(meid) != 16)
+		return FALSE;
+
+	sim_encode_bcd_number(meid, value);
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_bytes(tlv, value, 8) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
+/* Described in TS 102.223 Section 8.90 */
+static gboolean build_dataobj_broadcast_network_information(
+						struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_broadcast_network_information *bni = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_BROADCAST_NETWORK_INFO;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		stk_tlv_builder_append_byte(tlv, bni->tech) &&
+		stk_tlv_builder_append_bytes(tlv, bni->loc_info, bni->len) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
 static gboolean build_dataobj(struct stk_tlv_builder *tlv,
 				dataobj_writer builder_func, ...)
 {
@@ -3438,6 +3750,138 @@ static gboolean build_set_up_call(struct stk_tlv_builder *builder,
 				NULL);
 }
 
+static gboolean build_local_info(struct stk_tlv_builder *builder,
+					const struct stk_response *response)
+{
+	const struct stk_response_local_info *info =
+		&response->provide_local_info;
+	int i;
+
+	switch (response->qualifier) {
+	case 0x00: /* Location Information according to current NAA */
+		return build_dataobj(builder,
+					build_dataobj_location_info,
+					DATAOBJ_FLAG_CR, &info->location,
+					NULL);
+
+	case 0x01: /* IMEI of the terminal */
+		return build_dataobj(builder,
+					build_dataobj_imei,
+					DATAOBJ_FLAG_CR, info->imei,
+					NULL);
+
+	case 0x02: /* Network Measurement results according to current NAA */
+		return build_dataobj(builder,
+				build_dataobj_network_measurement_results,
+				DATAOBJ_FLAG_CR, &info->nmr.nmr,
+				build_dataobj_bcch_channel_list,
+				DATAOBJ_FLAG_CR, &info->nmr.bcch_ch_list,
+				NULL);
+
+	case 0x03: /* Date, time and time zone */
+		return build_dataobj(builder,
+					build_dataobj_datetime_timezone,
+					DATAOBJ_FLAG_CR, &info->datetime,
+					NULL);
+
+	case 0x04: /* Language setting */
+		return build_dataobj(builder,
+					build_dataobj_language,
+					DATAOBJ_FLAG_CR, info->language,
+					NULL);
+
+	case 0x05: /* Timing Advance */
+		return build_dataobj(builder,
+					build_dataobj_timing_advance,
+					DATAOBJ_FLAG_CR, &info->tadv,
+					NULL);
+
+	case 0x06: /* Access Technology (single access technology) */
+		return build_dataobj(builder,
+					build_dataobj_access_technology,
+					0, &info->access_technology,
+					NULL);
+
+	case 0x07: /* ESN of the terminal */
+		return build_dataobj(builder,
+					build_dataobj_esn,
+					DATAOBJ_FLAG_CR, &info->esn,
+					NULL);
+
+	case 0x08: /* IMEISV of the terminal */
+		return build_dataobj(builder,
+					build_dataobj_imeisv,
+					DATAOBJ_FLAG_CR, info->imeisv,
+					NULL);
+
+	case 0x09: /* Search Mode */
+		return build_dataobj(builder,
+					build_dataobj_network_search_mode,
+					0, &info->search_mode,
+					NULL);
+
+	case 0x0a: /* Charge State of the Battery */
+		return build_dataobj(builder,
+					build_dataobj_battery_state,
+					DATAOBJ_FLAG_CR, &info->battery_charge,
+					NULL);
+
+	case 0x0b: /* MEID of the terminal */
+		return build_dataobj(builder,
+					build_dataobj_meid,
+					0, info->meid,
+					NULL);
+
+	case 0x0d: /* Broadcast Network Information according to current tech */
+		return build_dataobj(builder,
+				build_dataobj_broadcast_network_information,
+				0, &info->broadcast_network_info,
+				NULL);
+
+	case 0x0e: /* Multiple Access Technologies */
+		return build_dataobj(builder,
+					build_dataobj_access_technologies,
+					0, &info->access_technologies,
+					NULL);
+
+	case 0x0f: /* Location Information for multiple NAAs */
+		if (build_dataobj(builder,
+					build_dataobj_access_technologies,
+					0, &info->location_infos.access_techs,
+					NULL) != TRUE)
+			return FALSE;
+
+		for (i = 0; i < info->location_infos.access_techs.length; i++)
+			if (build_dataobj(builder,
+					build_dataobj_location_info,
+					0, &info->location_infos.locations[i],
+					NULL) != TRUE)
+				return FALSE;
+
+		return TRUE;
+
+	case 0x10: /* Network Measurement results for multiple NAAs */
+		if (build_dataobj(builder,
+					build_dataobj_access_technologies,
+					0, &info->nmrs.access_techs,
+					NULL) != TRUE)
+			return FALSE;
+
+		for (i = 0; i < info->nmrs.access_techs.length; i++)
+			if (build_dataobj(builder,
+				build_dataobj_network_measurement_results,
+				0, &info->nmrs.nmrs[i].nmr,
+				build_dataobj_bcch_channel_list,
+				0, &info->nmrs.nmrs[i].bcch_ch_list,
+				NULL) != TRUE)
+				return FALSE;
+
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
 unsigned int stk_pdu_from_response(const struct stk_response *response,
 					unsigned char *pdu, unsigned int size)
 {
@@ -3534,6 +3978,9 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 		break;
 	case STK_COMMAND_TYPE_POLLING_OFF:
 		break;
+	case STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO:
+		ok = build_local_info(&builder, response);
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index 82384c4..013341c 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -110,6 +110,7 @@ enum stk_data_object_type {
 	STK_DATA_OBJECT_TYPE_CAUSE =				0x1A,
 	STK_DATA_OBJECT_TYPE_LOCATION_STATUS =			0x1B,
 	STK_DATA_OBJECT_TYPE_TRANSACTION_ID =			0x1C,
+	STK_DATA_OBJECT_TYPE_BCCH_CHANNEL_LIST =		0x1D,
 	STK_DATA_OBJECT_TYPE_ICON_ID =				0x1E,
 	STK_DATA_OBJECT_TYPE_ITEM_ICON_ID_LIST =		0x1F,
 	STK_DATA_OBJECT_TYPE_CARD_READER_STATUS =		0x20,
@@ -544,6 +545,8 @@ struct stk_location_info {
 	unsigned short ci;
 	ofono_bool_t has_ext_ci;
 	unsigned short ext_ci;
+	ofono_bool_t has_eutran_ci;
+	guint32 eutran_ci;
 };
 
 /*
@@ -1077,6 +1080,55 @@ struct stk_response_set_up_call {
 	} modified_result;
 };
 
+struct stk_response_local_info {
+	union {
+		struct stk_location_info location;
+		const char *imei;
+		struct stk_network_measurement_results {
+			struct stk_common_byte_array nmr;
+			struct stk_bcch_ch_list {
+				const short *channels;
+				int length;
+			} bcch_ch_list;
+		} nmr;
+		struct sms_scts datetime;
+		const char *language;
+		enum stk_battery_state battery_charge;
+		enum stk_access_technology_type access_technology;
+		struct stk_timing_advance {
+			enum {
+				STK_TIMING_ADVANCE_ME_IDLE = 0x00,
+				STK_TIMING_ADVANCE_ME_NOT_IDLE = 0x01,
+			} status;
+			/* Contains bit periods number according to 3GPP TS
+			 * 44.118 Section 9.3.106 / 3GPP TS 44.018 Section
+			 * 10.5.2.40.1, not microseconds */
+			int advance;
+		} tadv;
+		/* Bits[31:24]: manufacturer, bits[23:0]: serial number */
+		guint32 esn;
+		const char *imeisv;
+		enum stk_network_search_mode {
+			STK_NETWORK_SEARCH_MODE_MANUAL = 0x00,
+			STK_NETWORK_SEARCH_MODE_AUTOMATIC = 0x01,
+		} search_mode;
+		const char *meid;
+		struct stk_broadcast_network_information broadcast_network_info;
+		struct stk_access_technologies {
+			const enum stk_access_technology_type *techs;
+			int length;
+		} access_technologies;
+		struct {
+			struct stk_access_technologies access_techs;
+			struct stk_location_info *locations;
+		} location_infos;
+		struct {
+			struct stk_access_technologies access_techs;
+			struct stk_network_measurement_results *nmrs;
+		} nmrs;
+	};
+};
+
 struct stk_response {
 	unsigned char number;
 	unsigned char type;
@@ -1097,6 +1149,7 @@ struct stk_response {
 		struct stk_response_generic send_sms;
 		struct stk_response_set_up_call set_up_call;
 		struct stk_response_generic polling_off;
+		struct stk_response_local_info provide_local_info;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 06/20] test-stkutil: Add Provide Local Info response tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (3 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 05/20] stkutil: Add the Provide Local Info response builder Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 07/20] stkutil: Add Set Up Event List response builder support Andrzej Zaborowski
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 18508 bytes --]

---
 unit/test-stkutil.c |  555 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 555 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 35301f3..45f47d1 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -16204,6 +16204,509 @@ static const struct terminal_response_test polling_off_response_data_112 = {
 	},
 };
 
+static const unsigned char provide_local_info_response_111a[] = {
+	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x93, 0x07, 0x00, 0xf1,
+	0x10, 0x00, 0x01, 0x00, 0x01,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_111a = {
+	.pdu = provide_local_info_response_111a,
+	.pdu_len = sizeof(provide_local_info_response_111a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .location = {
+				.mcc = "001",
+				.mnc = "01",
+				.lac_tac = 0x0001,
+				.has_ci = TRUE,
+				.ci = 0x0001,
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_111b[] = {
+	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x93, 0x07, 0x00, 0x11,
+	0x10, 0x00, 0x01, 0x00, 0x01,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_111b = {
+	.pdu = provide_local_info_response_111b,
+	.pdu_len = sizeof(provide_local_info_response_111b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .location = {
+				.mcc = "001",
+				.mnc = "011",
+				.lac_tac = 0x0001,
+				.has_ci = TRUE,
+				.ci = 0x0001,
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_121[] = {
+	0x81, 0x03, 0x01, 0x26, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x94, 0x08, 0x1a, 0x32,
+	0x54, 0x76, 0x98, 0x10, 0x32, 0x54, /* Typo in TS 102 384? */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_121 = {
+	.pdu = provide_local_info_response_121,
+	.pdu_len = sizeof(provide_local_info_response_121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x01, /* IMEI of the Terminal */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .imei = "123456789012345", }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_131[] = {
+	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x96, 0x10, 0x34, 0x34,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x0d,
+	0x8c, 0x63, 0x58, 0xe2, 0x39, 0x8f, 0x63, 0xf9,
+	0x06, 0x45, 0x91, 0xa4, 0x90,
+};
+
+static const short bcch_channels_131[] = {
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_131 = {
+	.pdu = provide_local_info_response_131,
+	.pdu_len = sizeof(provide_local_info_response_131),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x02, /* Network Measurement Results */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .nmr = {
+				.nmr = {
+					/* RXLEV-FULL-SERVING-CELL=52, no BA,
+					 * no DTX */
+					.array = (unsigned char[16]) {
+						0x34, 0x34, 0x00, 0x00,
+						0x00, 0x00, 0x00, 0x00,
+						0x00, 0x00, 0x00, 0x00,
+						0x00, 0x00, 0x00, 0x00,
+					},
+					.len = 16,
+				},
+				.bcch_ch_list = {
+					.channels = (short[]) {
+						561, 565, 568, 569, 573,
+						575, 577, 581, 582, 585,
+					},
+					.length = 10,
+				},
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_141[] = {
+	0x81, 0x03, 0x01, 0x26, 0x03, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa6, 0x07, 0x20, 0x50,
+	0x70, 0x41, 0x80, 0x71, 0xff,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_141 = {
+	.pdu = provide_local_info_response_141,
+	.pdu_len = sizeof(provide_local_info_response_141),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x03, /* Date Time and Time Zone */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .datetime = {
+				.year = 2, /* 2002 - 1900 - 100 */
+				.month = 5,
+				.day = 7,
+				.hour = 14,
+				.minute = 8,
+				.second = 17,
+				.timezone = 0xff, /* No information */
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_151[] = {
+	0x81, 0x03, 0x01, 0x26, 0x04, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xad, 0x02, 0x65, 0x6e,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_151 = {
+	.pdu = provide_local_info_response_151,
+	.pdu_len = sizeof(provide_local_info_response_151),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x04, /* Language setting */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .language = "en", }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_161[] = {
+	0x81, 0x03, 0x01, 0x26, 0x05, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xae, 0x02, 0x00, 0x00,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_161 = {
+	.pdu = provide_local_info_response_161,
+	.pdu_len = sizeof(provide_local_info_response_161),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x05, /* Timing Advance */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .tadv = {
+				.status = STK_TIMING_ADVANCE_ME_IDLE,
+				.advance = 0,
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_171[] = {
+	0x81, 0x03, 0x01, 0x26, 0x06, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x3f, 0x01, 0x03,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_171 = {
+	.pdu = provide_local_info_response_171,
+	.pdu_len = sizeof(provide_local_info_response_171),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x06, /* Access technology */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .access_technology = STK_ACCESS_TECHNOLOGY_UTRAN, }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_181[] = {
+	0x81, 0x03, 0x01, 0x26, 0x07, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xc6, 0x04, 0x01, 0x02,
+	0x03, 0x04,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_181 = {
+	.pdu = provide_local_info_response_181,
+	.pdu_len = sizeof(provide_local_info_response_181),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x07, /* ESN of the terminal */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .esn = 0x01020304, }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_191[] = {
+	0x81, 0x03, 0x01, 0x26, 0x08, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xe2, 0x09, 0x13, 0x32,
+	0x54, 0x76, 0x98, 0x10, 0x32, 0x54, 0xf6,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_191 = {
+	.pdu = provide_local_info_response_191,
+	.pdu_len = sizeof(provide_local_info_response_191),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x08, /* IMEISV of the terminal */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .imeisv = "1234567890123456", }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1111[] = {
+	0x81, 0x03, 0x01, 0x26, 0x0a, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xe3, 0x01, 0x04,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1111 = {
+	.pdu = provide_local_info_response_1111,
+	.pdu_len = sizeof(provide_local_info_response_1111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x0a, /* Charge state of the battery */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .battery_charge = STK_BATTERY_FULL, }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1121[] = {
+	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x00,
+	/* Intra-frequency UTRAN Measurement report in ASN.1 goes here */
+	/* "The remaining bytes shall not be verified" */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1121 = {
+	.pdu = provide_local_info_response_1121,
+	.pdu_len = sizeof(provide_local_info_response_1121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x02, /* Network Measurement Results */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .nmr = {
+				.nmr = {
+					.array = (unsigned char[2])
+						{ 0x80, 0x00 },
+					.len = 2,
+				},
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1131[] = {
+	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x11,
+	/* Inter-frequency UTRAN Measurement report in ASN.1 goes here */
+	/* "The remaining bytes shall not be verified" */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1131 = {
+	.pdu = provide_local_info_response_1131,
+	.pdu_len = sizeof(provide_local_info_response_1131),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x02, /* Network Measurement Results */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .nmr = {
+				.nmr = {
+					.array = (unsigned char[2])
+						{ 0x80, 0x11},
+					.len = 2,
+				},
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1141[] = {
+	0x81, 0x03, 0x01, 0x26, 0x06, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x3f, 0x01, 0x08,
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1141 = {
+	.pdu = provide_local_info_response_1141,
+	.pdu_len = sizeof(provide_local_info_response_1141),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x06, /* Access technology */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .access_technology = STK_ACCESS_TECHNOLOGY_EUTRAN, }
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1151[] = {
+	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x00,
+	/* Intra-frequency E-UTRAN Measurement report in ASN.1 goes here */
+	/* "The remaining bytes shall not be verified" */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1151 = {
+	.pdu = provide_local_info_response_1151,
+	.pdu_len = sizeof(provide_local_info_response_1151),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x02, /* Network Measurement Results */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .nmr = {
+				.nmr = {
+					.array = (unsigned char[2])
+						{ 0x80, 0x00},
+					.len = 2,
+				},
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1161[] = {
+	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x11,
+	/* Inter-frequency E-UTRAN Measurement report in ASN.1 goes here */
+	/* "The remaining bytes shall not be verified" */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1161 = {
+	.pdu = provide_local_info_response_1161,
+	.pdu_len = sizeof(provide_local_info_response_1161),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x02, /* Network Measurement Results */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .nmr = {
+				.nmr = {
+					.array = (unsigned char[2])
+						{ 0x80, 0x11},
+					.len = 2,
+				},
+			}},
+		}},
+	},
+};
+
+static const unsigned char provide_local_info_response_1171[] = {
+	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0x93, 0x09, 0x00, 0xf1,
+	0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f,
+	/* Typo in TS 102 223?  Byte 18 changed to 01 here */
+};
+
+static const struct terminal_response_test
+		provide_local_info_response_data_1171 = {
+	.pdu = provide_local_info_response_1171,
+	.pdu_len = sizeof(provide_local_info_response_1171),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
+		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .provide_local_info = {
+			{ .location = {
+				.mcc = "001",
+				.mnc = "01",
+				.lac_tac = 0x0001,
+				.has_eutran_ci = TRUE,
+				.eutran_ci = 0x0000001,
+			}},
+		}},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -17244,6 +17747,58 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Provide Local Info 1.11.1",
 			&provide_local_info_data_1111, test_provide_local_info);
 
+	g_test_add_data_func("/teststk/Provide Local Info response 1.1.1A",
+			&provide_local_info_response_data_111a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.1.1B",
+			&provide_local_info_response_data_111b,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.2.1",
+			&provide_local_info_response_data_121,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.3.1",
+			&provide_local_info_response_data_131,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.4.1",
+			&provide_local_info_response_data_141,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.5.1",
+			&provide_local_info_response_data_151,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.6.1",
+			&provide_local_info_response_data_161,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.7.1",
+			&provide_local_info_response_data_171,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.8.1",
+			&provide_local_info_response_data_181,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.9.1",
+			&provide_local_info_response_data_191,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.11.1",
+			&provide_local_info_response_data_1111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.12.1",
+			&provide_local_info_response_data_1121,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.13.1",
+			&provide_local_info_response_data_1131,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.14.1",
+			&provide_local_info_response_data_1141,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.15.1",
+			&provide_local_info_response_data_1151,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.16.1",
+			&provide_local_info_response_data_1161,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Provide Local Info response 1.17.1",
+			&provide_local_info_response_data_1171,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Setup Event List 1.1.1",
 			&setup_event_list_data_111, test_setup_event_list);
 	g_test_add_data_func("/teststk/Setup Event List 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 07/20] stkutil: Add Set Up Event List response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (4 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 06/20] test-stkutil: Add Provide Local Info response tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 08/20] test-stkutil: Add a Set Up Event List response test Andrzej Zaborowski
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 965 bytes --]

---
 src/stkutil.c |    2 ++
 src/stkutil.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 422a786..819156d 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3981,6 +3981,8 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 	case STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO:
 		ok = build_local_info(&builder, response);
 		break;
+	case STK_COMMAND_TYPE_SETUP_EVENT_LIST:
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index 013341c..caadf65 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1150,6 +1150,7 @@ struct stk_response {
 		struct stk_response_set_up_call set_up_call;
 		struct stk_response_generic polling_off;
 		struct stk_response_local_info provide_local_info;
+		struct stk_response_generic set_up_event_list;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 08/20] test-stkutil: Add a Set Up Event List response test
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (5 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 07/20] stkutil: Add Set Up Event List response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 09/20] stkutil: Add the Timer Management response builder Andrzej Zaborowski
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1556 bytes --]

---
 unit/test-stkutil.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 45f47d1..8256f4e 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -16707,6 +16707,27 @@ static const struct terminal_response_test
 	},
 };
 
+static const unsigned char set_up_event_list_response_111[] = {
+	0x81, 0x03, 0x01, 0x05, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test
+		set_up_event_list_response_data_111 = {
+	.pdu = set_up_event_list_response_111,
+	.pdu_len = sizeof(set_up_event_list_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_EVENT_LIST,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -17812,6 +17833,10 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Setup Event List 1.4.1",
 			&setup_event_list_data_141, test_setup_event_list);
 
+	g_test_add_data_func("/teststk/Set Up Event List response 1.1.1",
+			&set_up_event_list_response_data_111,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Perform Card APDU 1.1.1",
 			&perform_card_apdu_data_111, test_perform_card_apdu);
 	g_test_add_data_func("/teststk/Perform Card APDU 1.1.2",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 09/20] stkutil: Add the Timer Management response builder
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (6 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 08/20] test-stkutil: Add a Set Up Event List response test Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 10/20] test-stkutil: Add Timer Management response tests Andrzej Zaborowski
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3385 bytes --]

---
 src/stkutil.c |   41 +++++++++++++++++++++++++++++++++++++++++
 src/stkutil.h |    7 +++++++
 2 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 819156d..42bc488 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -947,6 +947,7 @@ static gboolean parse_dataobj_timer_value(struct comprehension_tlv_iter *iter,
 	tv->hour = sms_decode_semi_octet(data[0]);
 	tv->minute = sms_decode_semi_octet(data[1]);
 	tv->second = sms_decode_semi_octet(data[2]);
+	tv->has_value = TRUE;
 
 	return TRUE;
 }
@@ -3520,6 +3521,36 @@ static gboolean build_dataobj_cc_requested_action(struct stk_tlv_builder *tlv,
 		 stk_tlv_builder_close_container(tlv));
 }
 
+/* Described in TS 102.223 Section 8.37 */
+static gboolean build_dataobj_timer_id(struct stk_tlv_builder *tlv,
+					const void *data, gboolean cr)
+{
+	const unsigned char *id = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_TIMER_ID;
+
+	return id[0] == 0 ||
+		(stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+		 stk_tlv_builder_append_byte(tlv, id[0]) &&
+		 stk_tlv_builder_close_container(tlv));
+}
+
+/* Described in TS 102.223 Section 8.38 */
+static gboolean build_dataobj_timer_value(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	const struct stk_timer_value *value = data;
+	unsigned char tag = STK_DATA_OBJECT_TYPE_TIMER_VALUE;
+
+	return value->has_value == FALSE ||
+		(stk_tlv_builder_open_container(tlv, cr, tag, FALSE) &&
+#define TO_BCD(bin) ((((bin) / 10) & 0xf) | (((bin) % 10) << 4))
+		 stk_tlv_builder_append_byte(tlv, TO_BCD(value->hour)) &&
+		 stk_tlv_builder_append_byte(tlv, TO_BCD(value->minute)) &&
+		 stk_tlv_builder_append_byte(tlv, TO_BCD(value->second)) &&
+#undef TO_BCD
+		 stk_tlv_builder_close_container(tlv));
+}
+
 /* Described in TS 102.223 Section 8.39 */
 static gboolean build_dataobj_datetime_timezone(struct stk_tlv_builder *tlv,
 						const void *data, gboolean cr)
@@ -3983,6 +4014,16 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 		break;
 	case STK_COMMAND_TYPE_SETUP_EVENT_LIST:
 		break;
+	case STK_COMMAND_TYPE_TIMER_MANAGEMENT:
+		ok = build_dataobj(&builder,
+					build_dataobj_timer_id,
+					DATAOBJ_FLAG_CR,
+					&response->timer_mgmt.id,
+					build_dataobj_timer_value,
+					DATAOBJ_FLAG_CR,
+					&response->timer_mgmt.value,
+					NULL);
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index caadf65..153da65 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -643,6 +643,7 @@ struct stk_r_apdu {
 
 /* Defined in TS 102.223 Section 8.38 */
 struct stk_timer_value {
+	ofono_bool_t has_value;
 	unsigned char hour;
 	unsigned char minute;
 	unsigned char second;
@@ -1129,6 +1130,11 @@ struct stk_response_local_info {
 	};
 };
 
+struct stk_response_timer_mgmt {
+	unsigned char id;
+	struct stk_timer_value value;
+};
+
 struct stk_response {
 	unsigned char number;
 	unsigned char type;
@@ -1151,6 +1157,7 @@ struct stk_response {
 		struct stk_response_generic polling_off;
 		struct stk_response_local_info provide_local_info;
 		struct stk_response_generic set_up_event_list;
+		struct stk_response_timer_mgmt timer_mgmt;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 10/20] test-stkutil: Add Timer Management response tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (7 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 09/20] stkutil: Add the Timer Management response builder Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 11/20] stkutil: Add Set Up Idle Mode Text response builder support Andrzej Zaborowski
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 27504 bytes --]

---
 unit/test-stkutil.c |  862 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 862 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 8256f4e..092e343 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -16728,6 +16728,771 @@ static const struct terminal_response_test
 	},
 };
 
+static const unsigned char timer_mgmt_response_111[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_111 = {
+	.pdu = timer_mgmt_response_111,
+	.pdu_len = sizeof(timer_mgmt_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 1,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_112[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01, 0xa5,
+	0x03, 0x00, 0x30, 0x95,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_112 = {
+	.pdu = timer_mgmt_response_112,
+	.pdu_len = sizeof(timer_mgmt_response_112),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 1,
+			.value = {
+				.minute = 3,
+				.second = 59,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_114[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01, 0xa5,
+	0x03, 0x00, 0x00, 0x95,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_114 = {
+	.pdu = timer_mgmt_response_114,
+	.pdu_len = sizeof(timer_mgmt_response_114),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 1,
+			.value = {
+				.second = 59,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_121[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_121 = {
+	.pdu = timer_mgmt_response_121,
+	.pdu_len = sizeof(timer_mgmt_response_121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 2,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_122[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02, 0xa5,
+	0x03, 0x32, 0x85, 0x85,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_122 = {
+	.pdu = timer_mgmt_response_122,
+	.pdu_len = sizeof(timer_mgmt_response_122),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 2,
+			.value = {
+				.hour = 23,
+				.minute = 58,
+				.second = 58,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_124[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02, 0xa5,
+	0x03, 0x00, 0x00, 0x95,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_124 = {
+	.pdu = timer_mgmt_response_124,
+	.pdu_len = sizeof(timer_mgmt_response_124),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 2,
+			.value = {
+				.second = 59,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_131[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_131 = {
+	.pdu = timer_mgmt_response_131,
+	.pdu_len = sizeof(timer_mgmt_response_131),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 8,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_132[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08, 0xa5,
+	0x03, 0x00, 0x81, 0x95,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_132 = {
+	.pdu = timer_mgmt_response_132,
+	.pdu_len = sizeof(timer_mgmt_response_132),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 8,
+			.value = {
+				.minute = 18,
+				.second = 59,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_134[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08, 0xa5,
+	0x03, 0x00, 0x95, 0x92,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_134 = {
+	.pdu = timer_mgmt_response_134,
+	.pdu_len = sizeof(timer_mgmt_response_134),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 8,
+			.value = {
+				.minute = 59,
+				.second = 29,
+				.has_value = TRUE,
+			},
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_141a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x01,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_141a = {
+	.pdu = timer_mgmt_response_141a,
+	.pdu_len = sizeof(timer_mgmt_response_141a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 1,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_141b[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_141b = {
+	.pdu = timer_mgmt_response_141b,
+	.pdu_len = sizeof(timer_mgmt_response_141b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+	},
+};
+
+static const unsigned char timer_mgmt_response_142a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x02,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_142a = {
+	.pdu = timer_mgmt_response_142a,
+	.pdu_len = sizeof(timer_mgmt_response_142a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 2,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_143a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x03,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_143a = {
+	.pdu = timer_mgmt_response_143a,
+	.pdu_len = sizeof(timer_mgmt_response_143a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 3,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_144a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x04,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_144a = {
+	.pdu = timer_mgmt_response_144a,
+	.pdu_len = sizeof(timer_mgmt_response_144a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 4,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_145a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x05,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_145a = {
+	.pdu = timer_mgmt_response_145a,
+	.pdu_len = sizeof(timer_mgmt_response_145a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 5,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_146a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x06,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_146a = {
+	.pdu = timer_mgmt_response_146a,
+	.pdu_len = sizeof(timer_mgmt_response_146a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 6,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_147a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x07,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_147a = {
+	.pdu = timer_mgmt_response_147a,
+	.pdu_len = sizeof(timer_mgmt_response_147a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 7,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_148a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x08,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_148a = {
+	.pdu = timer_mgmt_response_148a,
+	.pdu_len = sizeof(timer_mgmt_response_148a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x02, /* Get the current value of the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 8,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_151a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x01,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_151a = {
+	.pdu = timer_mgmt_response_151a,
+	.pdu_len = sizeof(timer_mgmt_response_151a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 1,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_151b[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_151b = {
+	.pdu = timer_mgmt_response_151b,
+	.pdu_len = sizeof(timer_mgmt_response_151b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+	},
+};
+
+static const unsigned char timer_mgmt_response_152a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x02,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_152a = {
+	.pdu = timer_mgmt_response_152a,
+	.pdu_len = sizeof(timer_mgmt_response_152a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 2,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_153a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x03,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_153a = {
+	.pdu = timer_mgmt_response_153a,
+	.pdu_len = sizeof(timer_mgmt_response_153a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 3,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_154a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x04,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_154a = {
+	.pdu = timer_mgmt_response_154a,
+	.pdu_len = sizeof(timer_mgmt_response_154a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 4,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_155a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x05,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_155a = {
+	.pdu = timer_mgmt_response_155a,
+	.pdu_len = sizeof(timer_mgmt_response_155a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 5,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_156a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x06,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_156a = {
+	.pdu = timer_mgmt_response_156a,
+	.pdu_len = sizeof(timer_mgmt_response_156a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 6,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_157a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x07,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_157a = {
+	.pdu = timer_mgmt_response_157a,
+	.pdu_len = sizeof(timer_mgmt_response_157a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 7,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_158a[] = {
+	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x08,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_158a = {
+	.pdu = timer_mgmt_response_158a,
+	.pdu_len = sizeof(timer_mgmt_response_158a),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x01, /* Deactivate the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
+		},
+		{ .timer_mgmt = {
+			.id = 8,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_163[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x03,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_163 = {
+	.pdu = timer_mgmt_response_163,
+	.pdu_len = sizeof(timer_mgmt_response_163),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 3,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_164[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x04,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_164 = {
+	.pdu = timer_mgmt_response_164,
+	.pdu_len = sizeof(timer_mgmt_response_164),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 4,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_165[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x05,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_165 = {
+	.pdu = timer_mgmt_response_165,
+	.pdu_len = sizeof(timer_mgmt_response_165),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 5,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_166[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x06,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_166 = {
+	.pdu = timer_mgmt_response_166,
+	.pdu_len = sizeof(timer_mgmt_response_166),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 6,
+		}},
+	},
+};
+
+static const unsigned char timer_mgmt_response_167[] = {
+	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x07,
+};
+
+static const struct terminal_response_test timer_mgmt_response_data_167 = {
+	.pdu = timer_mgmt_response_167,
+	.pdu_len = sizeof(timer_mgmt_response_167),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
+		.qualifier = 0x00, /* Start the Timer */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .timer_mgmt = {
+			.id = 7,
+		}},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -17936,6 +18701,103 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Timer Management 2.2.1",
 			&timer_mgmt_data_221, test_timer_mgmt);
 
+	g_test_add_data_func("/teststk/Timer Management response 1.1.1",
+			&timer_mgmt_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.1.2",
+			&timer_mgmt_response_data_112,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.1.4",
+			&timer_mgmt_response_data_114,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.2.1",
+			&timer_mgmt_response_data_121,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.2.2",
+			&timer_mgmt_response_data_122,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.2.4",
+			&timer_mgmt_response_data_124,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.3.1",
+			&timer_mgmt_response_data_131,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.3.2",
+			&timer_mgmt_response_data_132,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.3.4",
+			&timer_mgmt_response_data_134,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.1A",
+			&timer_mgmt_response_data_141a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.1B",
+			&timer_mgmt_response_data_141b,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.2A",
+			&timer_mgmt_response_data_142a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.3A",
+			&timer_mgmt_response_data_143a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.4A",
+			&timer_mgmt_response_data_144a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.5A",
+			&timer_mgmt_response_data_145a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.6A",
+			&timer_mgmt_response_data_146a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.7A",
+			&timer_mgmt_response_data_147a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.4.8A",
+			&timer_mgmt_response_data_148a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.1A",
+			&timer_mgmt_response_data_151a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.1B",
+			&timer_mgmt_response_data_151b,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.2A",
+			&timer_mgmt_response_data_152a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.3A",
+			&timer_mgmt_response_data_153a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.4A",
+			&timer_mgmt_response_data_154a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.5A",
+			&timer_mgmt_response_data_155a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.6A",
+			&timer_mgmt_response_data_156a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.7A",
+			&timer_mgmt_response_data_157a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.5.8A",
+			&timer_mgmt_response_data_158a,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.6.3",
+			&timer_mgmt_response_data_163,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.6.4",
+			&timer_mgmt_response_data_164,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.6.5",
+			&timer_mgmt_response_data_165,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.6.6",
+			&timer_mgmt_response_data_166,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Timer Management response 1.6.7",
+			&timer_mgmt_response_data_167,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.1.1",
 		&setup_idle_mode_text_data_111, test_setup_idle_mode_text);
 	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 11/20] stkutil: Add Set Up Idle Mode Text response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (8 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 10/20] test-stkutil: Add Timer Management response tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 12/20] test-stkutil: Add Set Up Idle Mode response builder tests Andrzej Zaborowski
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 935 bytes --]

---
 src/stkutil.c |    2 ++
 src/stkutil.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 42bc488..35db34c 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -4024,6 +4024,8 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 					&response->timer_mgmt.value,
 					NULL);
 		break;
+	case STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT:
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index 153da65..8c1b0db 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1158,6 +1158,7 @@ struct stk_response {
 		struct stk_response_local_info provide_local_info;
 		struct stk_response_generic set_up_event_list;
 		struct stk_response_timer_mgmt timer_mgmt;
+		struct stk_response_generic set_up_idle_mode_text;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 12/20] test-stkutil: Add Set Up Idle Mode response builder tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (9 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 11/20] stkutil: Add Set Up Idle Mode Text response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 13/20] stkutil: Add the Run AT Command response builder Andrzej Zaborowski
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3226 bytes --]

---
 unit/test-stkutil.c |   73 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 092e343..2dfb0c5 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -17493,6 +17493,69 @@ static const struct terminal_response_test timer_mgmt_response_data_167 = {
 	},
 };
 
+static const unsigned char set_up_idle_mode_text_response_111[] = {
+	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test
+		set_up_idle_mode_text_response_data_111 = {
+	.pdu = set_up_idle_mode_text_response_111,
+	.pdu_len = sizeof(set_up_idle_mode_text_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char set_up_idle_mode_text_response_211b[] = {
+	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x04,
+};
+
+static const struct terminal_response_test
+		set_up_idle_mode_text_response_data_211b = {
+	.pdu = set_up_idle_mode_text_response_211b,
+	.pdu_len = sizeof(set_up_idle_mode_text_response_211b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NO_ICON,
+		},
+	},
+};
+
+static const unsigned char set_up_idle_mode_text_response_241[] = {
+	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x32,
+};
+
+static const struct terminal_response_test
+		set_up_idle_mode_text_response_data_241 = {
+	.pdu = set_up_idle_mode_text_response_241,
+	.pdu_len = sizeof(set_up_idle_mode_text_response_241),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -18873,6 +18936,16 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Setup Idle Mode Text 6.1.1",
 		&setup_idle_mode_text_data_611, test_setup_idle_mode_text);
 
+	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 1.1.1",
+			&set_up_idle_mode_text_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 2.1.1B",
+			&set_up_idle_mode_text_response_data_211b,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 2.4.1",
+			&set_up_idle_mode_text_response_data_241,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Run At Command 1.1.1",
 			&run_at_command_data_111, test_run_at_command);
 	g_test_add_data_func("/teststk/Run At Command 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 13/20] stkutil: Add the Run AT Command response builder
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (10 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 12/20] test-stkutil: Add Set Up Idle Mode response builder tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 14/20] test-stkutil: Add Run AT Command response builder tests Andrzej Zaborowski
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2385 bytes --]

---
 src/stkutil.c |   29 +++++++++++++++++++++++++++++
 src/stkutil.h |    5 +++++
 2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 35db34c..5a53fc6 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3580,6 +3580,28 @@ static gboolean build_dataobj_datetime_timezone(struct stk_tlv_builder *tlv,
 		stk_tlv_builder_close_container(tlv);
 }
 
+/* Described in TS 102.223 Section 8.41 */
+static gboolean build_dataobj_at_response(struct stk_tlv_builder *tlv,
+						const void *data, gboolean cr)
+{
+	unsigned char tag = STK_DATA_OBJECT_TYPE_AT_RESPONSE;
+	int len;
+
+	if (data == NULL)
+		return TRUE;
+
+	/* "If the AT Response string is longer than the maximum length
+	 * capable of being transmitted to the UICC then the AT Response
+	 * string shall be truncated to this length by the terminal." */
+	len = strlen(data);
+	if (len > 240) /* Safe pick */
+		len = 240;
+
+	return stk_tlv_builder_open_container(tlv, cr, tag, TRUE) &&
+		stk_tlv_builder_append_bytes(tlv, data, len) &&
+		stk_tlv_builder_close_container(tlv);
+}
+
 /* Described in TS 102.223 Section 8.45 */
 static gboolean build_dataobj_language(struct stk_tlv_builder *tlv,
 					const void *data, gboolean cr)
@@ -4026,6 +4048,13 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 		break;
 	case STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT:
 		break;
+	case STK_COMMAND_TYPE_RUN_AT_COMMAND:
+		ok = build_dataobj(&builder,
+					build_dataobj_at_response,
+					DATAOBJ_FLAG_CR,
+					response->run_at_command.at_response,
+					NULL);
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index 8c1b0db..ac462e0 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1135,6 +1135,10 @@ struct stk_response_timer_mgmt {
 	struct stk_timer_value value;
 };
 
+struct stk_response_run_at_command {
+	const char *at_response;
+};
+
 struct stk_response {
 	unsigned char number;
 	unsigned char type;
@@ -1159,6 +1163,7 @@ struct stk_response {
 		struct stk_response_generic set_up_event_list;
 		struct stk_response_timer_mgmt timer_mgmt;
 		struct stk_response_generic set_up_idle_mode_text;
+		struct stk_response_run_at_command run_at_command;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 14/20] test-stkutil: Add Run AT Command response builder tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (11 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 13/20] stkutil: Add the Run AT Command response builder Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 15/20] stkutil: Add Send DTMF response builder support Andrzej Zaborowski
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3216 bytes --]

---
 unit/test-stkutil.c |   78 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 2dfb0c5..c25c0b2 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -17556,6 +17556,74 @@ static const struct terminal_response_test
 	},
 };
 
+static const unsigned char run_at_command_response_111[] = {
+	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00, 0xA9, 0x05, 0x2b, 0x43,
+	0x47, 0x4d, 0x49,
+};
+
+static const struct terminal_response_test run_at_command_response_data_111 = {
+	.pdu = run_at_command_response_111,
+	.pdu_len = sizeof(run_at_command_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+		{ .run_at_command = {
+			.at_response = "+CGMI",
+		}},
+	},
+};
+
+static const unsigned char run_at_command_response_211b[] = {
+	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x04, 0xA9, 0x05, 0x2b, 0x43,
+	0x47, 0x4d, 0x49,
+};
+
+static const struct terminal_response_test run_at_command_response_data_211b = {
+	.pdu = run_at_command_response_211b,
+	.pdu_len = sizeof(run_at_command_response_211b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NO_ICON,
+		},
+		{ .run_at_command = {
+			.at_response = "+CGMI",
+		}},
+	},
+};
+
+static const unsigned char run_at_command_response_251[] = {
+	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x32,
+};
+
+static const struct terminal_response_test run_at_command_response_data_251 = {
+	.pdu = run_at_command_response_251,
+	.pdu_len = sizeof(run_at_command_response_251),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -19021,6 +19089,16 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Run At Command 6.1.1",
 			&run_at_command_data_611, test_run_at_command);
 
+	g_test_add_data_func("/teststk/Run AT Command response 1.1.1",
+			&run_at_command_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Run AT Command response 2.1.1B",
+			&run_at_command_response_data_211b,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Run AT Command response 2.5.1",
+			&run_at_command_response_data_251,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Send DTMF 1.1.1",
 			&send_dtmf_data_111, test_send_dtmf);
 	g_test_add_data_func("/teststk/Send DTMF 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 15/20] stkutil: Add Send DTMF response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (12 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 14/20] test-stkutil: Add Run AT Command response builder tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 16/20] test-stkutil: Add the Send DTMF response tests Andrzej Zaborowski
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 925 bytes --]

---
 src/stkutil.c |    2 ++
 src/stkutil.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 5a53fc6..f27a777 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -4055,6 +4055,8 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 					response->run_at_command.at_response,
 					NULL);
 		break;
+	case STK_COMMAND_TYPE_SEND_DTMF:
+		break;
 	default:
 		return 0;
 	};
diff --git a/src/stkutil.h b/src/stkutil.h
index ac462e0..4a7a82d 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1164,6 +1164,7 @@ struct stk_response {
 		struct stk_response_timer_mgmt timer_mgmt;
 		struct stk_response_generic set_up_idle_mode_text;
 		struct stk_response_run_at_command run_at_command;
+		struct stk_response_generic send_dtmf;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 16/20] test-stkutil: Add the Send DTMF response tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (13 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 15/20] stkutil: Add Send DTMF response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 17/20] stkutil: Add Language Notification response builder support Andrzej Zaborowski
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3063 bytes --]

---
 unit/test-stkutil.c |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index c25c0b2..b411df3 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -17624,6 +17624,68 @@ static const struct terminal_response_test run_at_command_response_data_251 = {
 	},
 };
 
+static const unsigned char send_dtmf_response_111[] = {
+	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test send_dtmf_response_data_111 = {
+	.pdu = send_dtmf_response_111,
+	.pdu_len = sizeof(send_dtmf_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SEND_DTMF,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char send_dtmf_response_141[] = {
+	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x20, 0x07,
+};
+
+static const struct terminal_response_test send_dtmf_response_data_141 = {
+	.pdu = send_dtmf_response_141,
+	.pdu_len = sizeof(send_dtmf_response_141),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SEND_DTMF,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
+			.additional_len = 1, /* Not in speech call */
+			.additional = (unsigned char[1]) { 0x07 },
+		},
+	},
+};
+
+static const unsigned char send_dtmf_response_211b[] = {
+	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x04,
+};
+
+static const struct terminal_response_test send_dtmf_response_data_211b = {
+	.pdu = send_dtmf_response_211b,
+	.pdu_len = sizeof(send_dtmf_response_211b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_SEND_DTMF,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NO_ICON,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -19170,6 +19232,16 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Send DTMF 6.1.1",
 			&send_dtmf_data_611, test_send_dtmf);
 
+	g_test_add_data_func("/teststk/Send DTMF response 1.1.1",
+			&send_dtmf_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Send DTMF response 1.4.1",
+			&send_dtmf_response_data_141,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Send DTMF response 2.1.1B",
+			&send_dtmf_response_data_211b,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Language Notification 1.1.1",
 		&language_notification_data_111, test_language_notification);
 	g_test_add_data_func("/teststk/Language Notification 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 17/20] stkutil: Add Language Notification response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (14 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 16/20] test-stkutil: Add the Send DTMF response tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 18/20] test-stkutil: Add Language Notification response tests Andrzej Zaborowski
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 929 bytes --]

---
 src/stkutil.c |    1 +
 src/stkutil.h |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index f27a777..affbcae 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -4056,6 +4056,7 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 					NULL);
 		break;
 	case STK_COMMAND_TYPE_SEND_DTMF:
+	case STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION:
 		break;
 	default:
 		return 0;
diff --git a/src/stkutil.h b/src/stkutil.h
index 4a7a82d..cd9ef46 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1165,6 +1165,7 @@ struct stk_response {
 		struct stk_response_generic set_up_idle_mode_text;
 		struct stk_response_run_at_command run_at_command;
 		struct stk_response_generic send_dtmf;
+		struct stk_response_generic language_notification;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 18/20] test-stkutil: Add Language Notification response tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (15 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 17/20] stkutil: Add Language Notification response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 19/20] stkutil: Add Launch Browser response builder support Andrzej Zaborowski
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2433 bytes --]

---
 unit/test-stkutil.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index b411df3..3eab970 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -17686,6 +17686,48 @@ static const struct terminal_response_test send_dtmf_response_data_211b = {
 	},
 };
 
+static const unsigned char language_notification_response_111[] = {
+	0x81, 0x03, 0x01, 0x35, 0x01, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test
+		language_notification_response_data_111 = {
+	.pdu = language_notification_response_111,
+	.pdu_len = sizeof(language_notification_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION,
+		.qualifier = 0x01,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char language_notification_response_121[] = {
+	0x81, 0x03, 0x01, 0x35, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test
+		language_notification_response_data_121 = {
+	.pdu = language_notification_response_121,
+	.pdu_len = sizeof(language_notification_response_121),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION,
+		.qualifier = 0x00,
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -19247,6 +19289,13 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Language Notification 1.2.1",
 		&language_notification_data_121, test_language_notification);
 
+	g_test_add_data_func("/teststk/Language Notification response 1.1.1",
+			&language_notification_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Language Notification response 1.2.1",
+			&language_notification_response_data_121,
+			test_terminal_response_encoding);
+
 	g_test_add_data_func("/teststk/Launch Browser 1.1.1",
 			     &launch_browser_data_111, test_launch_browser);
 	g_test_add_data_func("/teststk/Launch Browser 1.2.1",
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 19/20] stkutil: Add Launch Browser response builder support
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (16 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 18/20] test-stkutil: Add Language Notification response tests Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-27  4:59 ` [PATCH 20/20] test-stkutil: Add Launch Browser response builder tests Andrzej Zaborowski
  2010-05-28 16:42 ` [PATCH 01/20] stkutil: Add Set Up Call response builder Denis Kenzior
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 949 bytes --]

---
 src/stkutil.c |    1 +
 src/stkutil.h |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index affbcae..b6dab66 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -4057,6 +4057,7 @@ unsigned int stk_pdu_from_response(const struct stk_response *response,
 		break;
 	case STK_COMMAND_TYPE_SEND_DTMF:
 	case STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION:
+	case STK_COMMAND_TYPE_LAUNCH_BROWSER:
 		break;
 	default:
 		return 0;
diff --git a/src/stkutil.h b/src/stkutil.h
index cd9ef46..cc5801c 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -1166,6 +1166,7 @@ struct stk_response {
 		struct stk_response_run_at_command run_at_command;
 		struct stk_response_generic send_dtmf;
 		struct stk_response_generic language_notification;
+		struct stk_response_generic launch_browser;
 	};
 
 	void (*destructor)(struct stk_response *response);
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 20/20] test-stkutil: Add Launch Browser response builder tests
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (17 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 19/20] stkutil: Add Launch Browser response builder support Andrzej Zaborowski
@ 2010-05-27  4:59 ` Andrzej Zaborowski
  2010-05-28 16:42 ` [PATCH 01/20] stkutil: Add Set Up Call response builder Denis Kenzior
  19 siblings, 0 replies; 21+ messages in thread
From: Andrzej Zaborowski @ 2010-05-27  4:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 4621 bytes --]

---
 unit/test-stkutil.c |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 118 insertions(+), 0 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 3eab970..0a47187 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -17728,6 +17728,108 @@ static const struct terminal_response_test
 	},
 };
 
+static const unsigned char launch_browser_response_111[] = {
+	0x81, 0x03, 0x01, 0x15, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test launch_browser_response_data_111 = {
+	.pdu = launch_browser_response_111,
+	.pdu_len = sizeof(launch_browser_response_111),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
+		.qualifier = 0x00, /* Launch browser, if not running */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char launch_browser_response_211[] = {
+	0x81, 0x03, 0x01, 0x15, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test launch_browser_response_data_211 = {
+	.pdu = launch_browser_response_211,
+	.pdu_len = sizeof(launch_browser_response_211),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
+		.qualifier = 0x02, /* Use the existing browser */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char launch_browser_response_221[] = {
+	0x81, 0x03, 0x01, 0x15, 0x03, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x00,
+};
+
+static const struct terminal_response_test launch_browser_response_data_221 = {
+	.pdu = launch_browser_response_221,
+	.pdu_len = sizeof(launch_browser_response_221),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
+		.qualifier = 0x03, /* Re-start browser session */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_SUCCESS,
+		},
+	},
+};
+
+static const unsigned char launch_browser_response_231[] = {
+	0x81, 0x03, 0x01, 0x15, 0x00, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x02, 0x26, 0x02,
+};
+
+static const struct terminal_response_test launch_browser_response_data_231 = {
+	.pdu = launch_browser_response_231,
+	.pdu_len = sizeof(launch_browser_response_231),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
+		.qualifier = 0x00, /* Launch browser, if not running */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_BROWSER_TEMPORARY,
+			.additional_len = 1, /* Browser unavailable */
+			.additional = (unsigned char[1]) { 0x02 },
+		},
+	},
+};
+
+static const unsigned char launch_browser_response_411b[] = {
+	0x81, 0x03, 0x01, 0x15, 0x02, 0x82, 0x02, 0x82,
+	0x81, 0x83, 0x01, 0x04,
+};
+
+static const struct terminal_response_test launch_browser_response_data_411b = {
+	.pdu = launch_browser_response_411b,
+	.pdu_len = sizeof(launch_browser_response_411b),
+	.response = {
+		.number = 1,
+		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
+		.qualifier = 0x02, /* Use the existing browser */
+		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
+		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
+		.result = {
+			.type = STK_RESULT_TYPE_NO_ICON,
+		},
+	},
+};
+
 int main(int argc, char **argv)
 {
 	g_test_init(&argc, &argv, NULL);
@@ -19373,5 +19475,21 @@ int main(int argc, char **argv)
 	g_test_add_data_func("/teststk/Launch Browser 7.1.1",
 			     &launch_browser_data_711, test_launch_browser);
 
+	g_test_add_data_func("/teststk/Launch Browser response 1.1.1",
+			&launch_browser_response_data_111,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Launch Browser response 2.1.1",
+			&launch_browser_response_data_211,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Launch Browser response 2.2.1",
+			&launch_browser_response_data_221,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Launch Browser response 2.3.1",
+			&launch_browser_response_data_231,
+			test_terminal_response_encoding);
+	g_test_add_data_func("/teststk/Launch Browser response 4.1.1B",
+			&launch_browser_response_data_411b,
+			test_terminal_response_encoding);
+
 	return g_test_run();
 }
-- 
1.7.1.86.g0e460.dirty


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 01/20] stkutil: Add Set Up Call response builder
  2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
                   ` (18 preceding siblings ...)
  2010-05-27  4:59 ` [PATCH 20/20] test-stkutil: Add Launch Browser response builder tests Andrzej Zaborowski
@ 2010-05-28 16:42 ` Denis Kenzior
  19 siblings, 0 replies; 21+ messages in thread
From: Denis Kenzior @ 2010-05-28 16:42 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 282 bytes --]

Hi Andrew,

> ---
>  src/stkutil.c |   37 +++++++++++++++++++++++++++++++++++++
>  src/stkutil.h |    9 +++++++++
>  2 files changed, 46 insertions(+), 0 deletions(-)

All 20 patches in this series have now been pushed with some style fixes in 
between.

Thanks,
-Denis

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2010-05-28 16:42 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-27  4:59 [PATCH 01/20] stkutil: Add Set Up Call response builder Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 02/20] test-stkutil: Add Set Up Call response tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 03/20] stkutil: Add Polling Off response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 04/20] test-stkutil: Add a Polling Off response test Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 05/20] stkutil: Add the Provide Local Info response builder Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 06/20] test-stkutil: Add Provide Local Info response tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 07/20] stkutil: Add Set Up Event List response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 08/20] test-stkutil: Add a Set Up Event List response test Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 09/20] stkutil: Add the Timer Management response builder Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 10/20] test-stkutil: Add Timer Management response tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 11/20] stkutil: Add Set Up Idle Mode Text response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 12/20] test-stkutil: Add Set Up Idle Mode response builder tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 13/20] stkutil: Add the Run AT Command response builder Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 14/20] test-stkutil: Add Run AT Command response builder tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 15/20] stkutil: Add Send DTMF response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 16/20] test-stkutil: Add the Send DTMF response tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 17/20] stkutil: Add Language Notification response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 18/20] test-stkutil: Add Language Notification response tests Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 19/20] stkutil: Add Launch Browser response builder support Andrzej Zaborowski
2010-05-27  4:59 ` [PATCH 20/20] test-stkutil: Add Launch Browser response builder tests Andrzej Zaborowski
2010-05-28 16:42 ` [PATCH 01/20] stkutil: Add Set Up Call response builder Denis Kenzior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox