?? klcinterface.c
字號:
/***************************************************************************
*
* Module: KlcInterface.c
*
* Description: KLC Interface Routines
*
* Author: Craig L. Mahananey
*
* Copyright 1999, Lucent Technologies, Inc., All rights reserved
*
*
* Change Log:
*
* Date By Description
* ======== === ====================================================
* 11/11/99 CLM Created
* 01/31/00 DSO Added support for IP Demo Application message format.
* 11/06/2000 mwb Added INTERFACE_TERSE for quieter operation
*
***************************************************************************/
/*
* Application layer include files
*/
#include "SysDep.h"
#include "KlcInterface.h"
#include "klc.h"
#include "DSPInterface.h"
/*
* Standard include files
*/
#include <stdio.h>
#include <string.h>
#include <sockLib.h>
#include <inetLib.h>
#include <strLib.h>
#include <ioLib.h>
#include <fioLib.h>
#include <taskLib.h>
#include <in.h>
#ifdef PPA
/*------------*/
/* DEFINES */
/*------------*/
#define MAX_NUM_DIGIT 12
#define PORT_FACTOR 4
/*------------*/
/* TYPEDEFS */
/*------------*/
typedef unsigned char byte;
/*---------------*/
/* LOCAL DATA */
/*---------------*/
MSG_Q_ID PPAKlcInterfaceQId; /* klc's message queue Id */
int dtmfDigitEnable = 0;
int dtmfDigitDisable = 0;
unsigned int dtmfDigitTbl[PORT_FACTOR];
unsigned int dtmfDigitCollectTbl[MAX_NUM_DIGIT*PORT_FACTOR];
unsigned short destinationDigitTbl[MAX_NUM_DIGIT*PORT_FACTOR];
char dstinationAddrTbl [PORT_FACTOR][MAX_NUM_DIGIT+1];
/*--------------*/
/* PROTOTYPES */
/*--------------*/
static void PPAInterfaceInit();
static void PPAInterfaceDaemon (void);
static void PPAInterfacePut(char *readBuff);
static void dtmfDigitTable(void);
/*---------------*/
/* GLOBAL DATA */
/*---------------*/
int onHook = 0;;
int offHook = 0;
extern unsigned short ppaChannelNum;
#endif /*#ifdef PPA */
/***************************************************************************
*
* KeyLampMonitor( MSG_Q_ID eventQ)
*
* Arguments
* Input: Event Q to use to send events
*
* Returns: Nothing
*
* Description:
* 1. Open key/lamp monitor device
* 2. Wait on read and send events over eventQ
*
**************************************************************************/
/* sdg added */
extern int handset_up;
extern int on_speakerphone;
extern int tone_enabled;
/* dial-digit-tone-disconnect */
/* The tone currently being played.*/
extern tone_type tone_playing;
/* sdg end */
/*#include "h323.h"
extern int* state;
*/
void KeyLampMonitor( MSG_Q_ID eventQ )
{
MSG_Q_ID klcQ;
klcKeyEnums keypress;
klcdatatype klcdata;
dtmf_tone_type tone;
NonWrapperMsg *msg;
NonWrapperMsg temp;
int loopCounter;
int wait_time = -1;
static int keyLongPressEvent;
static int keyPressFlag=0;
static char keyLongPress;
static int keyHangUpPress = 0;
/* dial-digit-tone-disconnect */
/* The tone to be resumed after the DTMF digit is played.*/
tone_type tone_tobe_resumed = null_tone;
/*
* Initialize the KLC driver
*/
klcInit( MAXNUMPROGKEYS );
/*
* Create and register a message queue with the driver
*/
if(( klcQ = msgQCreate( MAX_NUM_KLC_EVENTS, sizeof(klcdatatype), MSG_Q_FIFO )) == (MSG_Q_ID)ERROR )
{
#ifndef INTERFACE_TERSE
fprintf( stderr, "KeyLampMonitor: Failure to create message queue.\n" );
#endif /* INTERFACE_TERSE */
return;
}
klcRegister( klcQ );
#ifdef PPA
PPAKlcInterfaceQId = klcQ; /* use for PPA Demo App */
PPAInterfaceInit();
#endif
/*
* Get a buffer for sending data to the Application.
*/
if ((msg = (NonWrapperMsg *) MQBufGet()) == NULL)
{
#ifndef INTERFACE_TERSE
fprintf( stderr, "KeyLampMonitor: Could not get buffer.\n" );
#endif /* INTERFACE_TERSE */
return;
}
/*
* Read forever on the queue and turn data into events
*/
while ( 1 )
{
/*
* Receive message from KLC driver.
*/
if( msgQReceive( klcQ, (char *)&klcdata, sizeof( klcdata ), wait_time ) == ERROR )
{
if (keyHangUpPress)
{
keyHangUpPress = 0;
wait_time = -1;
msg->event = local_on_hook_event;
}
else if(keyPressFlag)
{
/*keyPressFlag=0;*/
tone = null_dtmf_tone;
msg->event = null_event;
msg->digit = 0;
if(keyLongPressEvent == digit_event)
{
keyLongPressEvent = long_digit_event;
msg->event = long_digit_event;
msg->digit = keyLongPress;
}
else if(keyLongPressEvent == cancel_key_event)
{
keyLongPressEvent = long_cancel_key_event;
msg->event = long_cancel_key_event;
}
else
{
continue;
}
}
loopCounter = 0;
if (MQSend ((char*)msg, NO_WAIT) == -1)
{
while (loopCounter++ < 10)
{
taskDelay(10);
if (MQSend ((char*)msg, NO_WAIT) != -1) /* resend message */
{
break;
}
}
if (loopCounter >= 10)
{
fprintf(stderr, "KeyLampMonitor: Could not get buffer after 10 tries.\n");
MQBufFree((char*)msg);
}
}
loopCounter = 0;
while (((msg = (NonWrapperMsg *) MQBufGet()) == NULL) && loopCounter++ < 10)
{
taskDelay(10);
}
#ifndef INTERFACE_TERSE
if (loopCounter >= 10)
fprintf(stderr, "KeyLampMonitor: Could not get buffer after 10 tries.\n");
#endif
continue;
/*
#ifndef INTERFACE_TERSE
fprintf( stderr, "KeyLampMonitor: Failure reading from klcQ.\n" );
#endif INTERFACE_TERSE
return;*/
}
tone = null_dtmf_tone;
msg->event = null_event;
msg->digit = 0;
/* printf("\n klcdata.keypress is %d \n",klcdata.keypress);
printf("\n klcdata.tag is %d \n",klcdata.tag);*/
if(klcdata.tag)
{
}
else
{
keyPressFlag=0;
if (!keyHangUpPress)
wait_time = -1;
}
keypress = (klcKeyEnums)klcdata.keypress;
if( keypress == klcKeyHOOK_UP )
{
if (keyHangUpPress)
{
msg->event = call_transfer_key_event;
}
else
{
msg->event = local_off_hook_event;
}
keyHangUpPress = 0;
wait_time = -1;
}
else if( keypress == klcKeyHOOK_DOWN )
{
keyHangUpPress = 1;
wait_time = 30;
/*msg->event = local_on_hook_event;*/
}
else if( klcdata.tag == KLC_PRESSED )
{
if (keyHangUpPress)
{
keyHangUpPress = 0;
wait_time = -1;
msg->event = local_on_hook_event;
loopCounter = 0;
if (MQSend ((char*)msg, NO_WAIT) == -1)
{
while (loopCounter++ < 10)
{
taskDelay(10);
if (MQSend ((char*)msg, NO_WAIT) != -1) /* resend message */
{
break;
}
}
if (loopCounter >= 10)
{
fprintf(stderr, "KeyLampMonitor: Could not get buffer after 10 tries.\n");
MQBufFree((char*)msg);
}
}
loopCounter = 0;
while (((msg = (NonWrapperMsg *) MQBufGet()) == NULL) && loopCounter++ < 10)
{
taskDelay(10);
}
#ifndef INTERFACE_TERSE
if (loopCounter >= 10)
fprintf(stderr, "KeyLampMonitor: Could not get buffer after 10 tries.\n");
#endif
continue;
}
switch( keypress )
{
case klcKey0:
tone = dtmf_0;
msg->event = digit_event;
msg->digit = 0;
break;
case klcKey1:
tone = dtmf_1;
msg->event = digit_event;
msg->digit = 1;
break;
case klcKey2:
tone = dtmf_2;
msg->event = digit_event;
msg->digit = 2;
break;
case klcKey3:
tone = dtmf_3;
msg->event = digit_event;
msg->digit = 3;
break;
case klcKey4:
tone = dtmf_4;
msg->event = digit_event;
msg->digit = 4;
break;
case klcKey5:
tone = dtmf_5;
msg->event = digit_event;
msg->digit = 5;
break;
case klcKey6:
tone = dtmf_6;
msg->event = digit_event;
msg->digit = 6;
break;
case klcKey7:
tone = dtmf_7;
msg->event = digit_event;
msg->digit = 7;
break;
case klcKey8:
tone = dtmf_8;
msg->event = digit_event;
msg->digit = 8;
break;
case klcKey9:
tone = dtmf_9;
msg->event = digit_event;
msg->digit = 9;
break;
case klcKeySTAR:
msg->event = digit_event;
msg->digit = 10;
tone = dtmf_star;
break;
case klcKeyHASH:
msg->event = digit_event;
msg->digit = 11;
tone = dtmf_hash;
break;
case klcKeySPKR:
msg->event = speaker_event;
break;
case klcKeyVOLP:
msg->event = volume_up_event;
break;
case klcKeyVOLM:
msg->event = volume_down_event;
break;
case klcKeya:
msg->event = call_to_key_event;
break;
case klcKeyb:
msg->event = call_in_key_event;
break;
case klcKeyc:
msg->event = redial_key_event;
break;
case klcKeyTRAN:
msg->event = call_transfer_key_event;/*G1*/
break;
case klcKeyRegister:
msg->event = query_register_number_event;
break;
case klcKeyDROP:
msg->event = volume_mute_event;/*G4*/
break;
case klcKeyConfig:
msg->event = rapid_config_event;
break;
case klcKeyFWD:
msg->event = noanswer_key_event;/*G5*/
break;
case klcKeyMSG:
msg->event = message_key_event;
break;
case klcKeyG2:
msg->event = phonebook_key_event;
break;
case klcKeyG3:
msg->event = callout_key_event;
break;
case klcKeyG6:
msg->event = save_event;
break;
case klcKeyG7:
msg->event = delete_event;
break;
case klcKeyMUTE:
msg->event = volume_mute_event;
break;
case klcKeySK1:
msg->event = cancel_key_event;
break;
case klcKeySK2:
msg->event = left_key_event;
break;
case klcKeySK3:
msg->event = right_key_event;
break;
case klcKeySK4:
msg->event = ok_key_event;
break;
case klcKeySPEED1:
msg->event = speed_dial_key_event;
msg->digit = 1;
break;
case klcKeySPEED2:
msg->event = speed_dial_key_event;
msg->digit = 2;
break;
case klcKeySPEED3:
msg->event = speed_dial_key_event;
msg->digit = 3;
break;
case klcKeySPEED4:
msg->event = speed_dial_key_event;
msg->digit = 4;
break;
case klcKeySPEED5:
msg->event = speed_dial_key_event;
msg->digit = 5;
break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -