stk: Tweak the concept of continuous tones
authorDenis Kenzior <denkenz@gmail.com>
Wed, 31 Oct 2012 13:46:43 +0000 (08:46 -0500)
committerDenis Kenzior <denkenz@gmail.com>
Wed, 31 Oct 2012 21:14:27 +0000 (16:14 -0500)
The spec explicitly mentions continuous or repeatable tones.  02.40 only
mentions the RP-ACK tone as a single tone, all other tones seem to be
repeatable

src/stk.c

index 12f37b3..daa9fa8 100644 (file)
--- a/src/stk.c
+++ b/src/stk.c
@@ -2488,7 +2488,7 @@ static gboolean handle_command_play_tone(const struct stk_command *cmd,
        static const struct {
                const char *name;
                /* Continuous true/false according to 02.40 */
-               gboolean continuous;
+               gboolean repeatable;
        } tone_infos[] = {
                /* Default */
                [0x00] = { "general-beep", FALSE },
@@ -2498,9 +2498,9 @@ static gboolean handle_command_play_tone(const struct stk_command *cmd,
                [0x02] = { "busy", TRUE },
                [0x03] = { "congestion", TRUE },
                [0x04] = { "radio-path-acknowledge", FALSE },
-               [0x05] = { "radio-path-not-available", FALSE },
+               [0x05] = { "radio-path-not-available", TRUE },
                [0x06] = { "error", TRUE },
-               [0x07] = { "call-waiting", FALSE },
+               [0x07] = { "call-waiting", TRUE },
                [0x08] = { "ringing-tone", TRUE },
 
                /* Proprietary */
@@ -2557,7 +2557,15 @@ static gboolean handle_command_play_tone(const struct stk_command *cmd,
        else
                timeout = manufacturer_timeout;
 
-       if (!tone_infos[pt->tone].continuous)
+       /*
+        * According to TS 102.223 section 6.6.6:
+        * "the length of time for which the Terminal shall generate the tone,
+        * if the tone is contunious or repeatable.  For single tones, the
+        * value of this data object shall be ignored by the Terminal.  If no
+        * duration is specified, the Terminal shall default to a duration
+        * determined by the Terminal manufacturer
+        */
+       if (!tone_infos[pt->tone].repeatable)
                /* Duration ignored */
                err = stk_agent_play_tone(stk->current_agent, text,
                                                &pt->icon_id, vibrate,