diff -urN ./chan_sccp-20071213/sccp_actions.c ./chan_sccp-20071213-mod-cp7931-2/sccp_actions.c --- ./chan_sccp-20071213/sccp_actions.c 2007-12-13 20:48:30.000000000 +0200 +++ ./chan_sccp-20071213-mod-cp7931-2/sccp_actions.c 2008-04-10 10:10:12.000000000 +0300 @@ -404,15 +404,22 @@ k->instance = 0; sccp_log(10)(VERBOSE_PREFIX_3 "%s: Looking for a speeddial button place %s (%d)\n", d->id, k->name, k->config_instance); for (i = 0 ; i < StationMaxButtonTemplateSize ; i++) { - if ( (btn[i].type == SKINNY_BUTTONTYPE_SPEEDDIAL) || (btn[i].type == SKINNY_BUTTONTYPE_MULTI) || (btn[i].type == SCCP_BUTTONTYPE_HINT) || (btn[i].type == SCCP_BUTTONTYPE_SPEEDDIAL)) { + if ( (btn[i].type == SKINNY_BUTTONTYPE_SPEEDDIAL) || (btn[i].type == SKINNY_BUTTONTYPE_MULTI) || (btn[i].type == SCCP_BUTTONTYPE_HINT) || (btn[i].type == SCCP_BUTTONTYPE_SPEEDDIAL) || (btn[i].type == SKINNY_BUTTONTYPE_MESSAGES) || (btn[i].type == SKINNY_BUTTONTYPE_DIRECTORY) || (btn[i].type == SKINNY_BUTTONTYPE_APPLICATION) || (btn[i].type == SKINNY_BUTTONTYPE_HEADSET)) { if (btn_count == k->config_instance) { k->instance = i + 1; btn[i].instance = k->instance; btn[i].ptr = k; - if (!ast_strlen_zero(k->hint)) - btn[i].type = SCCP_BUTTONTYPE_HINT; - else - btn[i].type = SCCP_BUTTONTYPE_SPEEDDIAL; + if ((btn[i].type != SKINNY_BUTTONTYPE_MESSAGES) && (btn[i].type != SKINNY_BUTTONTYPE_DIRECTORY) && (btn[i].type != SKINNY_BUTTONTYPE_APPLICATION) && (btn[i].type != SKINNY_BUTTONTYPE_HEADSET)) + { + if (!ast_strlen_zero(k->hint)) + { + btn[i].type = SCCP_BUTTONTYPE_HINT; + } + else + { + btn[i].type = SCCP_BUTTONTYPE_SPEEDDIAL; + } + } sccp_log(10)(VERBOSE_PREFIX_3 "%s: Configured Phone Button [%.2d] = %s (%s) temporary instance (%d)\n", d->id, i+1, (btn[i].type == SCCP_BUTTONTYPE_HINT) ? "SPEEDIAL WITH HINT" : "SPEEDIAL",k->name, k->instance); break; } @@ -516,12 +523,13 @@ } } - if (btn[i].type == SCCP_BUTTONTYPE_SPEEDDIAL) { + if ((btn[i].type == SCCP_BUTTONTYPE_SPEEDDIAL) || (btn[i].type == SKINNY_BUTTONTYPE_MESSAGES) || (btn[i].type == SKINNY_BUTTONTYPE_DIRECTORY) || (btn[i].type == SKINNY_BUTTONTYPE_APPLICATION) || (btn[i].type == SKINNY_BUTTONTYPE_HEADSET)) { btn[i].instance = speedindex++; k = btn[i].ptr; - k->type = SKINNY_BUTTONTYPE_SPEEDDIAL; + k->type = btn[i].type; /*SKINNY_BUTTONTYPE_SPEEDDIAL;*/ k->instance = btn[i].instance; } + } ast_mutex_unlock(&d->lock); @@ -567,6 +575,18 @@ r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_DISPLAY; } else if (btn[i].type == SKINNY_BUTTONTYPE_UNUSED) { r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_UNDEFINED; + }else if (btn[i].type == SKINNY_BUTTONTYPE_MESSAGES) { + r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_MESSAGES; + r1->msg.ButtonTemplateMessage.definition[i].instanceNumber = btn[i].instance; + }else if (btn[i].type == SKINNY_BUTTONTYPE_DIRECTORY) { + r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_DIRECTORY; + r1->msg.ButtonTemplateMessage.definition[i].instanceNumber = btn[i].instance; + }else if (btn[i].type == SKINNY_BUTTONTYPE_APPLICATION) { + r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_APPLICATION; + r1->msg.ButtonTemplateMessage.definition[i].instanceNumber = btn[i].instance; + }else if (btn[i].type == SKINNY_BUTTONTYPE_HEADSET) { + r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = SKINNY_BUTTONTYPE_HEADSET; + r1->msg.ButtonTemplateMessage.definition[i].instanceNumber = btn[i].instance; } else r1->msg.ButtonTemplateMessage.definition[i].buttonDefinition = btn[i].type; diff -urN ./chan_sccp-20071213/sccp_device.c ./chan_sccp-20071213-mod-cp7931-2/sccp_device.c --- ./chan_sccp-20071213/sccp_device.c 2007-12-13 20:48:30.000000000 +0200 +++ ./chan_sccp-20071213-mod-cp7931-2/sccp_device.c 2008-04-10 10:25:53.000000000 +0300 @@ -141,6 +141,14 @@ for (i = 0 ; i < 4 ; i++) (btn++)->type = SKINNY_BUTTONTYPE_SPEEDDIAL; break; + case SKINNY_DEVICETYPE_CISCO7931: + for (i = 0 ; i < 20 ; i++) + (btn++)->type = SKINNY_BUTTONTYPE_MULTI; + (btn++)->type = SKINNY_BUTTONTYPE_MESSAGES; + (btn++)->type = SKINNY_BUTTONTYPE_DIRECTORY; + (btn++)->type = SKINNY_BUTTONTYPE_APPLICATION; + (btn++)->type = SKINNY_BUTTONTYPE_HEADSET; + break; default: /* at least one line */ (btn++)->type = SKINNY_BUTTONTYPE_LINE; diff -urN ./chan_sccp-20071213/sccp_protocol.h ./chan_sccp-20071213-mod-cp7931-2/sccp_protocol.h --- ./chan_sccp-20071213/sccp_protocol.h 2007-12-13 20:48:30.000000000 +0200 +++ ./chan_sccp-20071213-mod-cp7931-2/sccp_protocol.h 2008-04-10 10:09:15.000000000 +0300 @@ -219,6 +219,7 @@ #define SKINNY_DEVICETYPE_CISCO7941GE 309 #define SKINNY_DEVICETYPE_CISCO7911 307 #define SKINNY_DEVICETYPE_CISCO7985 302 +#define SKINNY_DEVICETYPE_CISCO7931 348 #define SKINNY_DEVICE_RS_NONE 0 @@ -284,15 +285,19 @@ #define SKINNY_BUTTONTYPE_CALLPARK 0x7E #define SKINNY_BUTTONTYPE_CALLPICKUP 0x7F #define SKINNY_BUTTONTYPE_GROUPCALLPICKUP 0x80 +#define SKINNY_BUTTONTYPE_MESSAGES 0xc2 +#define SKINNY_BUTTONTYPE_DIRECTORY 0xc3 +#define SKINNY_BUTTONTYPE_APPLICATION 0xc5 +#define SKINNY_BUTTONTYPE_HEADSET 0xc6 #define SKINNY_BUTTONTYPE_KEYPAD 0xf0 #define SKINNY_BUTTONTYPE_AEC 0xfd #define SKINNY_BUTTONTYPE_UNDEFINED 0xff /* this is not a skinny button type. Used for speedial/line buttons */ -#define SKINNY_BUTTONTYPE_MULTI 0xc0 -#define SCCP_BUTTONTYPE_LINE 0xc1 -#define SCCP_BUTTONTYPE_SPEEDDIAL 0xc2 -#define SCCP_BUTTONTYPE_HINT 0xc3 +#define SKINNY_BUTTONTYPE_MULTI 0xe0 +#define SCCP_BUTTONTYPE_LINE 0xe1 +#define SCCP_BUTTONTYPE_SPEEDDIAL 0xe2 +#define SCCP_BUTTONTYPE_HINT 0xe3 /* unregister */ #define SKINNY_UNREGISTERSTATUS_OK 0 diff -urN ./chan_sccp-20071213/sccp_utils.c ./chan_sccp-20071213-mod-cp7931-2/sccp_utils.c --- ./chan_sccp-20071213/sccp_utils.c 2007-12-13 20:48:30.000000000 +0200 +++ ./chan_sccp-20071213-mod-cp7931-2/sccp_utils.c 2008-01-09 21:03:44.000000000 +0200 @@ -1273,6 +1273,8 @@ return "Cisco7971"; case SKINNY_DEVICETYPE_CISCO7985: return "Cisco7985"; + case SKINNY_DEVICETYPE_CISCO7931: + return "Cisco7931"; default: return "unknow"; }