]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Skinny: redial
authorMathieu Parent <math.parent@gmail.com>
Wed, 24 Feb 2010 12:06:06 +0000 (12:06 +0000)
committerMathieu Parent <math.parent@gmail.com>
Wed, 24 Feb 2010 12:06:06 +0000 (12:06 +0000)
- Allow redial from softKey or stimulus
- Add redial, newcall to on_hook softkeys
- Add endcall to ringing and connected softkeys

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16791 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_skinny/skinny_protocol.c
src/mod/endpoints/mod_skinny/skinny_protocol.h

index 9347fe36647daadbb76e40c3a1adcd52d55dd53a..ef236c616766e13e13b763da518a52208ea6630e 100644 (file)
@@ -99,21 +99,21 @@ struct soft_key_template_definition soft_key_template_default[] = {
        { "\200\001", SOFTKEY_REDIAL },
        { "\200\002", SOFTKEY_NEWCALL },
        { "\200\003", SOFTKEY_HOLD },
-       { "\200\004", SOFTKEY_TRNSFER },
+       { "\200\004", SOFTKEY_TRANSFER },
        { "\200\005", SOFTKEY_CFWDALL },
        { "\200\006", SOFTKEY_CFWDBUSY },
        { "\200\007", SOFTKEY_CFWDNOANSWER },
-       { "\200\010", SOFTKEY_BKSPC },
+       { "\200\010", SOFTKEY_BACKSPACE },
        { "\200\011", SOFTKEY_ENDCALL },
        { "\200\012", SOFTKEY_RESUME },
        { "\200\013", SOFTKEY_ANSWER },
        { "\200\014", SOFTKEY_INFO },
-       { "\200\015", SOFTKEY_CONFRN },
+       { "\200\015", SOFTKEY_CONFRM },
        { "\200\016", SOFTKEY_PARK },
        { "\200\017", SOFTKEY_JOIN },
-       { "\200\020", SOFTKEY_MEETME },
-       { "\200\021", SOFTKEY_PICKUP },
-       { "\200\022", SOFTKEY_GPICKUP },
+       { "\200\020", SOFTKEY_MEETMECONFRM },
+       { "\200\021", SOFTKEY_CALLPICKUP },
+       { "\200\022", SOFTKEY_GRPCALLPICKUP },
        { "\200\077", SOFTKEY_DND },
        { "\200\120", SOFTKEY_IDIVERT },
 };
@@ -1421,6 +1421,10 @@ switch_status_t skinny_handle_soft_key_set_request(listener_t *listener, skinny_
        message->data.soft_key_set.total_soft_key_set_count = 11;
        
        /* TODO fill the set */
+       message->data.soft_key_set.soft_key_set[SKINNY_KEY_SET_ON_HOOK].soft_key_template_index[0] = SOFTKEY_REDIAL;
+       message->data.soft_key_set.soft_key_set[SKINNY_KEY_SET_ON_HOOK].soft_key_template_index[1] = SOFTKEY_NEWCALL;
+       message->data.soft_key_set.soft_key_set[SKINNY_KEY_SET_CONNECTED].soft_key_template_index[0] = SOFTKEY_ENDCALL;
+       message->data.soft_key_set.soft_key_set[SKINNY_KEY_SET_RING_IN].soft_key_template_index[0] = SOFTKEY_ENDCALL;
 
        skinny_send_reply(listener, message);
 
@@ -1521,6 +1525,8 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
        skinny_profile_t *profile;
        switch_channel_t *channel = NULL;
        uint32_t line;
+       private_t *tech_pvt = NULL;
+
 
        switch_assert(listener->profile);
        switch_assert(listener->device_name);
@@ -1537,11 +1543,20 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
 
        if(!listener->session[line]) { /*the line is not busy */
                switch(request->data.soft_key_event.event) {
+                       case SOFTKEY_REDIAL:
+                               skinny_create_session(listener, line, SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT);
+       
+                               tech_pvt = switch_core_session_get_private(listener->session[line]);
+                               assert(tech_pvt != NULL);
+               
+                               strcpy(tech_pvt->dest, "redial");
+                               skinny_process_dest(listener, line);
+                               break;
                        case SOFTKEY_NEWCALL:
                                skinny_create_session(listener, line, SKINNY_KEY_SET_OFF_HOOK);
                                break;
                        default:
-                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
                                        "Unknown SoftKeyEvent type while not busy: %d.\n", request->data.soft_key_event.event);
                }
        } else { /* the line is busy */
@@ -1554,7 +1569,7 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
 
                                break;
                        default:
-                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
                                        "Unknown SoftKeyEvent type while busy: %d.\n", request->data.soft_key_event.event);
                }
        }
@@ -1601,6 +1616,15 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess
        skinny_check_data_length(request, sizeof(request->data.stimulus));
 
        switch(request->data.stimulus.instance_type) {
+               case SKINNY_BUTTON_LAST_NUMBER_REDIAL:
+                       skinny_create_session(listener, line, SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT);
+
+                       tech_pvt = switch_core_session_get_private(listener->session[line]);
+                       assert(tech_pvt != NULL);
+       
+                       strcpy(tech_pvt->dest, "redial");
+                       skinny_process_dest(listener, line);
+                       break;
                case SKINNY_BUTTON_VOICEMAIL:
                        skinny_create_session(listener, line, SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT);
        
index 302883e3e6c091694ca4fd78669e55aa0c32870e..60f1b9d6a3a2281c2973620ef75ce6afb2cba31a 100644 (file)
@@ -230,7 +230,7 @@ enum skinny_ring_mode {
 /* SetLampMessage */
 #define SET_LAMP_MESSAGE 0x0086
 struct set_lamp_message {
-       uint32_t stimulus;
+       uint32_t stimulus; /* See enum skinny_button_definition */
        uint32_t stimulus_instance;
        uint32_t mode; /* See enum skinny_lamp_mode */
 };
@@ -361,6 +361,7 @@ struct button_definition {
 };
 
 enum skinny_button_definition {
+       SKINNY_BUTTON_LAST_NUMBER_REDIAL = 0x01,
        SKINNY_BUTTON_SPEED_DIAL = 0x02,
        SKINNY_BUTTON_LINE = 0x09,
        SKINNY_BUTTON_VOICEMAIL = 0x0F,
@@ -423,32 +424,33 @@ struct soft_key_template_res_message {
        struct soft_key_template_definition soft_key[32];
 };
 
-#define SOFTKEY_NONE 0x00
-#define SOFTKEY_REDIAL 0x01
-#define SOFTKEY_NEWCALL 0x02
-#define SOFTKEY_HOLD 0x03
-#define SOFTKEY_TRNSFER 0x04
-#define SOFTKEY_CFWDALL 0x05
-#define SOFTKEY_CFWDBUSY 0x06
-#define SOFTKEY_CFWDNOANSWER 0x07
-#define SOFTKEY_BKSPC 0x08
-#define SOFTKEY_ENDCALL 0x09
-#define SOFTKEY_RESUME 0x0A
-#define SOFTKEY_ANSWER 0x0B
-#define SOFTKEY_INFO 0x0C
-#define SOFTKEY_CONFRN 0x0D
-#define SOFTKEY_PARK 0x0E
-#define SOFTKEY_JOIN 0x0F
-#define SOFTKEY_MEETME 0x10
-#define SOFTKEY_PICKUP 0x11
-#define SOFTKEY_GPICKUP 0x12
-#define SOFTKEY_DND 0x13
-#define SOFTKEY_IDIVERT 0x14
+enum skinny_soft_key_event {
+       SOFTKEY_REDIAL = 0x01,
+       SOFTKEY_NEWCALL = 0x02,
+       SOFTKEY_HOLD = 0x03,
+       SOFTKEY_TRANSFER = 0x04,
+       SOFTKEY_CFWDALL = 0x05,
+       SOFTKEY_CFWDBUSY = 0x06,
+       SOFTKEY_CFWDNOANSWER = 0x07,
+       SOFTKEY_BACKSPACE = 0x08,
+       SOFTKEY_ENDCALL = 0x09,
+       SOFTKEY_RESUME = 0x0A,
+       SOFTKEY_ANSWER = 0x0B,
+       SOFTKEY_INFO = 0x0C,
+       SOFTKEY_CONFRM = 0x0D,
+       SOFTKEY_PARK = 0x0E,
+       SOFTKEY_JOIN = 0x0F,
+       SOFTKEY_MEETMECONFRM = 0x10,
+       SOFTKEY_CALLPICKUP = 0x11,
+       SOFTKEY_GRPCALLPICKUP = 0x12,
+       SOFTKEY_DND = 0x13,
+       SOFTKEY_IDIVERT = 0x14,
+};
 
 /* SoftKeySetResMessage */
 #define SOFT_KEY_SET_RES_MESSAGE 0x0109
 struct soft_key_set_definition {
-       uint8_t soft_key_template_index[16];
+       uint8_t soft_key_template_index[16]; /* See enum skinny_soft_key_event */
        uint16_t soft_key_info_index[16];
 };