mirror of git://git.sysmocom.de/ofono
stk: Add busy error for the display text command
According to the sequence 1.2 of the ETSI TS 102 384 a busy screen error should be returns for the display text proactive command when the ME is not able to display the text.
This commit is contained in:
parent
5154d5e38d
commit
8b0307a621
|
@ -116,6 +116,7 @@ Methods byte RequestSelection(string title, byte icon_id,
|
|||
cleared prior to the display of this text.
|
||||
|
||||
Possible Errors: [service].Error.SimToolkit.GoBack
|
||||
[service].Error.SimToolkit.Busy
|
||||
|
||||
Implementation notes:
|
||||
|
||||
|
|
15
src/stk.c
15
src/stk.c
|
@ -1203,6 +1203,9 @@ static void display_text_cb(enum stk_agent_result result, void *user_data)
|
|||
{
|
||||
struct ofono_stk *stk = user_data;
|
||||
gboolean confirm;
|
||||
struct stk_response rsp;
|
||||
static unsigned char screen_busy_result[] = { 0x01 };
|
||||
static struct ofono_error error = { .type = OFONO_ERROR_TYPE_FAILURE };
|
||||
|
||||
stk->respond_on_exit = FALSE;
|
||||
|
||||
|
@ -1250,6 +1253,15 @@ static void display_text_cb(enum stk_agent_result result, void *user_data)
|
|||
STK_RESULT_TYPE_NO_RESPONSE : STK_RESULT_TYPE_SUCCESS);
|
||||
break;
|
||||
|
||||
case STK_AGENT_RESULT_BUSY:
|
||||
memset(&rsp, 0, sizeof(rsp));
|
||||
rsp.result.type = STK_RESULT_TYPE_TERMINAL_BUSY;
|
||||
rsp.result.additional_len = sizeof(screen_busy_result);
|
||||
rsp.result.additional = screen_busy_result;
|
||||
if (stk_respond(stk, &rsp, stk_command_cb))
|
||||
stk_command_cb(&error, stk);
|
||||
break;
|
||||
|
||||
case STK_AGENT_RESULT_TERMINATE:
|
||||
default:
|
||||
send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED);
|
||||
|
@ -1366,6 +1378,7 @@ static void request_confirmation_cb(enum stk_agent_result result,
|
|||
break;
|
||||
|
||||
case STK_AGENT_RESULT_TERMINATE:
|
||||
default:
|
||||
send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED);
|
||||
break;
|
||||
}
|
||||
|
@ -1408,6 +1421,7 @@ static void request_key_cb(enum stk_agent_result result, char *string,
|
|||
break;
|
||||
|
||||
case STK_AGENT_RESULT_TERMINATE:
|
||||
default:
|
||||
send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED);
|
||||
break;
|
||||
}
|
||||
|
@ -1505,6 +1519,7 @@ static void request_string_cb(enum stk_agent_result result, char *string,
|
|||
break;
|
||||
|
||||
case STK_AGENT_RESULT_TERMINATE:
|
||||
default:
|
||||
send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
enum allowed_error {
|
||||
ALLOWED_ERROR_GO_BACK = 0x1,
|
||||
ALLOWED_ERROR_TERMINATE = 0x2,
|
||||
ALLOWED_ERROR_BUSY = 0x4,
|
||||
};
|
||||
|
||||
struct stk_agent {
|
||||
|
@ -62,6 +63,7 @@ struct stk_agent {
|
|||
#define ERROR_PREFIX OFONO_SERVICE ".Error"
|
||||
#define GOBACK_ERROR ERROR_PREFIX ".GoBack"
|
||||
#define TERMINATE_ERROR ERROR_PREFIX ".EndSession"
|
||||
#define BUSY_ERROR ERROR_PREFIX ".Busy"
|
||||
|
||||
static void stk_agent_send_noreply(struct stk_agent *agent, const char *method)
|
||||
{
|
||||
|
@ -194,6 +196,12 @@ static int check_error(struct stk_agent *agent, DBusMessage *reply,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if ((allowed_errors & ALLOWED_ERROR_BUSY) &&
|
||||
g_str_equal(err.name, BUSY_ERROR)) {
|
||||
*out_result = STK_AGENT_RESULT_BUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = -EINVAL;
|
||||
|
||||
out:
|
||||
|
@ -376,8 +384,8 @@ static void display_text_cb(DBusPendingCall *call, void *data)
|
|||
gboolean remove_agent;
|
||||
|
||||
if (check_error(agent, reply,
|
||||
ALLOWED_ERROR_GO_BACK | ALLOWED_ERROR_TERMINATE,
|
||||
&result) == -EINVAL) {
|
||||
ALLOWED_ERROR_GO_BACK | ALLOWED_ERROR_TERMINATE |
|
||||
ALLOWED_ERROR_BUSY, &result) == -EINVAL) {
|
||||
remove_agent = TRUE;
|
||||
goto error;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ enum stk_agent_result {
|
|||
STK_AGENT_RESULT_BACK,
|
||||
STK_AGENT_RESULT_TERMINATE,
|
||||
STK_AGENT_RESULT_TIMEOUT,
|
||||
STK_AGENT_RESULT_BUSY,
|
||||
};
|
||||
|
||||
struct stk_menu_item {
|
||||
|
|
Loading…
Reference in New Issue