Revision
16791
Author
sathieu
Date
2010-02-24 06:06:06 -0600 (Wed, 24 Feb 2010)

Log Message

Skinny: redial

- Allow redial from softKey or stimulus
- Add redial, newcall to on_hook softkeys
- Add endcall to ringing and connected softkeys

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.c (16790 => 16791)


--- freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.c	2010-02-24 12:05:56 UTC (rev 16790)
+++ freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.c	2010-02-24 12:06:06 UTC (rev 16791)
@@ -99,21 +99,21 @@
 	{ "\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 @@
 	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,7 +1525,9 @@
 	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 @@
 
 	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 @@
 
 				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 @@
 	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);
 	

Modified: freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.h (16790 => 16791)


--- freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.h	2010-02-24 12:05:56 UTC (rev 16790)
+++ freeswitch/trunk/src/mod/endpoints/mod_skinny/skinny_protocol.h	2010-02-24 12:06:06 UTC (rev 16791)
@@ -230,7 +230,7 @@
 /* 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 @@
 };
 
 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_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];
 };