diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2010-07-07 00:39:09 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-07-08 14:27:35 -0500 |
commit | 45d535b802713d28a23432e1287c72dea9fe32ec (patch) | |
tree | eaf103534aa753ccb2c069e4c4173e2b2302d978 | |
parent | 00cb839c837140aa97bba6bfb9592dc05b875380 (diff) | |
download | ofono-45d535b802713d28a23432e1287c72dea9fe32ec.tar.bz2 |
stk: Handle the Poll Interval proactive command
-rw-r--r-- | src/stk.c | 45 |
1 files changed, 45 insertions, 0 deletions
@@ -521,6 +521,47 @@ static gboolean handle_command_timer_mgmt(const struct stk_command *cmd, return TRUE; } +static gboolean handle_command_poll_interval(const struct stk_command *cmd, + struct stk_response *rsp, + struct ofono_stk *stk) +{ + struct ofono_modem *modem = __ofono_atom_get_modem(stk->atom); + int seconds; + + switch (cmd->poll_interval.duration.unit) { + case STK_DURATION_TYPE_MINUTES: + seconds = cmd->poll_interval.duration.interval * 60; + break; + case STK_DURATION_TYPE_SECONDS: + seconds = cmd->poll_interval.duration.interval; + break; + case STK_DURATION_TYPE_SECOND_TENTHS: + seconds = (4 + cmd->poll_interval.duration.interval) / 10; + if (seconds < 1) + seconds = 1; + break; + } + + if (ofono_modem_set_integer(modem, "status-poll-interval", seconds)) { + seconds = ofono_modem_get_integer(modem, + "status-poll-interval"); + if (!seconds) + seconds = 30; + } + + if (seconds > 255) { + rsp->poll_interval.max_interval.unit = + STK_DURATION_TYPE_MINUTES; + rsp->poll_interval.max_interval.interval = seconds / 60; + } else { + rsp->poll_interval.max_interval.unit = + STK_DURATION_TYPE_SECONDS; + rsp->poll_interval.max_interval.interval = seconds; + } + + return TRUE; +} + static void stk_proactive_command_cancel(struct ofono_stk *stk) { if (!stk->pending_cmd) @@ -593,6 +634,10 @@ void ofono_stk_proactive_command_notify(struct ofono_stk *stk, respond = handle_command_timer_mgmt(stk->pending_cmd, &rsp, stk); break; + case STK_COMMAND_TYPE_POLL_INTERVAL: + respond = handle_command_poll_interval(stk->pending_cmd, + &rsp, stk); + break; } if (respond) |