From 0151d20c9739d47b09956f922313de33e7831d76 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 24 Feb 2010 12:06:06 +0000 Subject: [PATCH] Skinny: redial - 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 --- .../endpoints/mod_skinny/skinny_protocol.c | 40 ++++++++++++---- .../endpoints/mod_skinny/skinny_protocol.h | 48 ++++++++++--------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.c b/src/mod/endpoints/mod_skinny/skinny_protocol.c index 9347fe3664..ef236c6167 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.c +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.c @@ -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); diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.h b/src/mod/endpoints/mod_skinny/skinny_protocol.h index 302883e3e6..60f1b9d6a3 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.h +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.h @@ -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]; };