⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 编写d300sc-e1卡呼出程序.txt

📁 编写D300SC-E1卡呼出程序 编写D300SC-E1卡呼出程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:

if(mode==EV_ASYNC) return dx_playtone(voxdev,&tngen[i],r2_tpt,mode);
/* ELSE mode==EV_SYNC, return ToneID */

if(dx_playtone(voxdev,&tngen[i],r2_tpt,EV_SYNC)==-1){
printf("%s: Error in dx_playtone %s\n",ATDV_NAMEP(voxdev),ATDV_ERRMSGP(voxdev));
return -1;
} 
if((term=ATDX_TERMMSK(voxdev))==-1){
printf("ATDX_TERMMSK error\n");
return -1;
}
if(term&TM_TONE){
if((bksig=ATDX_TONEID(voxdev))==-1){
printf("ATDX_TONEID error\n");
return -1;
}
return bksig;
} else {
printf("%s: No Backward Signal Detect\n",ATDV_NAMEP(voxdev));
return -1;
}
}

/*******************************************************
 * Function Name: dt_onhook_out()
 * Description  : set dti device on hook
 * Input: int dtidev is dti device channel handle
 * Return :  0, if successful
 * : -1, unsuccessful  
 *******************************************************/
int dt_onhook_out(int i)
{
int OldHookState=dev[i].hook;
dev[i].hook=DX_ONHOOK;
//set abcd(xxxx)-->1011
if(dt_settssig(dev[i].dti,DTB_ABIT|DTB_CBIT|DTB_DBIT,DTA_SETMSK)==-1){
printf("%s: dt_settssig() in dt_onhook_out(1) error.\n",dev[i].voxname);
dev[i].hook=OldHookState;
return dev[i].hook;
}

return 0;//successful
}

/*******************************************************
 * Function Name: hangup_detection()
 * Description:to detect user hangup signal 
 * Return value:  
 *******************************************************/
DWORD WINAPI hangup_detection(int *channel)
{
int arcv,brcv,axmt,bxmt;
int i;
long tsbits;
for(;;){
Sleep(100);

for (i=0;i<MAXCHAN;i++){
if(dev[i].hook==DX_ONHOOK) continue;
if((tsbits=ATDT_TSSGBIT(dev[i].dti))==AT_FAILURE){
printf("ATDT_TSSGBIT() in hangup_detection(1)\n");
printf(" %s\n",ATDV_ERRMSGP(dev[i].dti));
continue;
}
arcv=(tsbits & DTSG_RCVA)?1:0;
brcv=(tsbits & DTSG_RCVB)?1:0;
axmt=(tsbits & DTSG_XMTA)?1:0;
bxmt=(tsbits & DTSG_XMTB)?1:0;
//only for dialout, outline hangup first
if((arcv==1)&&(brcv==1)&&(axmt==0)&&(bxmt==0)){
//printf("Hangup detected.\n");
dx_stopch(dev[i].vox,EV_ASYNC);
dev[i].hook=DX_ONHOOK;
}
}

}
return 1L;
}

/***************************************************************************
 * FUNCTION NAME: printts()
 * DESCRIPTION: to printf ts abcd if needed
 * INPUT: dti device handle
 *  RETURN: 
 **************************************************************************/
int printts(int i)
{
long tsbits;
int arcv,brcv,crcv,drcv,axmt,bxmt,cxmt,dxmt;

if(dev[i].hook==DX_OFFHOOK){
printf("%s: Can not printts in DX_OFFHOOK\n",dev[i].voxname);
return 0;
}
if((tsbits=ATDT_TSSGBIT(dev[i].dti))==AT_FAILURE){
printf("ATDT_TSSGBIT() error.\n");
return -1;
}
arcv=(tsbits & DTSG_RCVA)?1:0;
brcv=(tsbits & DTSG_RCVB)?1:0;
crcv=(tsbits & DTSG_RCVC)?1:0;
drcv=(tsbits & DTSG_RCVD)?1:0;
axmt=(tsbits & DTSG_XMTA)?1:0;
bxmt=(tsbits & DTSG_XMTB)?1:0;
cxmt=(tsbits & DTSG_XMTC)?1:0;
dxmt=(tsbits & DTSG_XMTD)?1:0;
printf("%s: RX=%d%d%d%d, ",dev[i].voxname,arcv,brcv,crcv,drcv);
printf("TX=%d%d%d%d.\n",axmt,bxmt,cxmt,dxmt);
return 0;
}

/***************************************************************************
 * FUNCTION NAME: play_init()
 * DESCRIPTION: to initialize tonegen and r2_tpt
 *  RETURN: 
 **************************************************************************/
int play_init(void)
{
int i;

memset(tngen,0,sizeof(tngen));
for(i=0;i<15;i++)
dx_bldtngen(&tngen[i],fsig[i][0],fsig[i][1],R2_DEFAMPL,R2_DEFAMPL,200);

memset(r2_tpt,0,sizeof(r2_tpt));

r2_tpt[0].tp_type=IO_CONT;
r2_tpt[0].tp_termno=DX_TONE;
r2_tpt[0].tp_length=SIGA_1;
r2_tpt[0].tp_flags=TF_TONE;
r2_tpt[0].tp_data=DX_TONEON;

r2_tpt[1].tp_type=IO_CONT;
r2_tpt[1].tp_termno=DX_TONE;
r2_tpt[1].tp_length=SIGA_6;
r2_tpt[1].tp_flags=TF_TONE;
r2_tpt[1].tp_data=DX_TONEON;

r2_tpt[2].tp_type=IO_CONT;
r2_tpt[2].tp_termno=DX_TONE;
r2_tpt[2].tp_length=SIGA_3;
r2_tpt[2].tp_flags=TF_TONE;
r2_tpt[2].tp_data=DX_TONEON;

r2_tpt[3].tp_type=IO_CONT;
r2_tpt[3].tp_termno=DX_TONE;
r2_tpt[3].tp_length=SIGB_1;
r2_tpt[3].tp_flags=TF_TONE;
r2_tpt[3].tp_data=DX_TONEON;

r2_tpt[4].tp_type=IO_CONT;
r2_tpt[4].tp_termno=DX_TONE;
r2_tpt[4].tp_length=SIGB_4;
r2_tpt[4].tp_flags=TF_TONE;
r2_tpt[4].tp_data=DX_TONEON;

r2_tpt[5].tp_type=IO_EOT;
r2_tpt[5].tp_termno=DX_MAXTIME;
r2_tpt[5].tp_length=700;
r2_tpt[5].tp_flags=TF_10MS;

play_tpt.tp_type = IO_EOT;
play_tpt.tp_termno= DX_MAXTIME;
play_tpt.tp_length= PLAY_TIME * 10;
play_tpt.tp_flags = TF_MAXTIME;

play_iott.io_type=IO_DEV|IO_LINK;
play_iott.io_bufp=0;
play_iott.io_offset=0;
play_iott.io_length=-1;
play_iott.io_fhandle=dx_fileopen("sample.vox",O_RDONLY|O_BINARY);
play_iott.io_nextp=&play_iott;

return 0;
}

/***************************************************************************
 * FUNCTION NAME: Aon_handler()
 * DESCRIPTION: to detect hangup signal using handler
 *  RETURN: 
 **************************************************************************/
int Aon_handler(int notuse)
{
int device;
int *datap=(int *)sr_getevtdatap();
int i;
int aon_detect=0;

if((*datap & DTMM_AON) != DTMM_AON) return 0;

device=sr_getevtdev();

for(i=0;i<MAXCHAN;i++)
if(dev[i].dti==device){
dev[i].hook=DX_ONHOOK;
if(dx_stopch(dev[i].vox,EV_ASYNC)==-1){
printf("%s: %2d Error in Hangup_detection\n",dev[i].voxname,i);
return 0;
}
printf("%s: %2d Aon received\n",dev[i].voxname,i);
break;
}
return 0;
}

/***************************************************************************
 * FUNCTION NAME: printstart()
 * DESCRIPTION: to print information
 *  RETURN: 
 **************************************************************************/
void printstart(void)
{
printf("\nD/300SC-E1 Windows NT Dialout Demo Program.\n");
printf("Compiler: Visual C++2.0 Later, Multithreaded Synchronous Mode.\n");
printf("---- Dialogic Corporation, Beijing. Tel: 8610-65045364.\n\n");
printf("\nBefore you compile this program, you must specify\n");
printf("your local telephone number length in the line\n");
printf("   #define DNIS_LEN 3\n");
printf("   #define ANI_LEN 7\n");
printf("If your number is 65045364, then ANI_LEN=8.\n");
printf("In this program MAXCHAN=%d, DNIS_LEN=%d, ANI_LEN=%d\n",MAXCHAN,DNIS_LEN,ANI_LEN);
printf("You need a file \"sample.vox\".\n\n");
printf("This program uses the %d threads to make calls,\n",MAXTHREAD);
printf("When connected, it plays sample.vox, then hangup\n");
printf("----------------------------------------------------------\n\n");
printf("Please Wait it opening channels\n");

}

2.2 编译并运行
在上面的工程的设置中增加以下库文件的包含:
libdxxmt.lib – 语音处理资源函数库
libsrlmt.lib – 标准运行时函数库
libdtimt.lib – 数字时隙函数库
sctools.lib – SC总线操作函数库

准备D/300SC-E1卡和数字1号信令线路,并将线路和卡连接好,编译并运行此例子程序。另外,我们需要使用CoolEdit录制一个8K/8Bit的VOX格式文件Sample.vox放置于当前目录下。

3 异步模式D/300SC-E1卡呼出程序
同样,请仔细地阅读Dialogic公司的异步单线程呼出模式程序源代码。

3.1 源代码
/****************************************************************
 * Dial from D/300SC-E1 Demo program for Windows NT
 * Author: Yin Zhenwen, Email: Z.yin@dialogic.com
 * Dialogic Corporation, Beijing Office, tel: 65045364
 * All Rights Reserved
 * July, 1997
 * Environment: Windows NT 3.51/Later
 * Asynchronous Mode
 * Compiler: Visual C++ 4.0
*****************************************************************/
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<fcntl.h>
#include<time.h>
#include<srllib.h>
#include<dxxxlib.h>
#include<dtilib.h>
#include<sctools.h>

#define MAXCHAN 1    //Maximum cur_num of channels allowed. 
#define DNIS_LEN 3    //The Dialed cur_num Identification cur_num Service length, can change
#define ANI_LEN  7    //The Automatic cur_num identification length, can change

char Ani[ANI_LEN+3]={"7654321"};

#define DEBUG 0

#define IDLE_TIME    5 //seconds between two dials
#define SZ_ACK_TIME  6 //Seconds to wait for the ACK signal
#define MFC_TIME    17 //Seconds of max MFC time
#define CYCLE_TIME  60 //Seconds, Counts from end of SZ_ACK_TIME
#define PLAY_TIME   30 //Seconds to play Sample.vox after connection

DX_CST  *cstp;
DV_TPT  r2_tpt[6];
TN_GEN  tngen[15];
DV_TPT  play_tpt[2];
DX_IOTT play_iott;

char *voxchannels[] = {
   "dxxxB9C1" , "dxxxB1C2" , "dxxxB1C3" , "dxxxB1C4",
   "dxxxB2C1" , "dxxxB2C2" , "dxxxB2C3" , "dxxxB2C4",
   "dxxxB3C1" , "dxxxB3C2" , "dxxxB3C3" , "dxxxB3C4",
   "dxxxB4C1" , "dxxxB4C2" , "dxxxB4C3" , "dxxxB4C4",
   "dxxxB5C1" , "dxxxB5C2" , "dxxxB5C3" , "dxxxB5C4",
   "dxxxB6C1" , "dxxxB6C2" , "dxxxB6C3" , "dxxxB6C4",
   "dxxxB7C1" , "dxxxB7C2" , "dxxxB7C3" , "dxxxB7C4",
   "dxxxB8C1" , "dxxxB8C2" , 
NULL,
};

char *dtichannels[] = {
   "dtiB2T1" , "dtiB1T2" , "dtiB1T3" , "dtiB1T4",
   "dtiB1T5" , "dtiB1T6" , "dtiB1T7" , "dtiB1T8",
   "dtiB1T9" , "dtiB1T10", "dtiB1T11", "dtiB1T12",
   "dtiB1T13", "dtiB1T14", "dtiB1T15", "dtiB1T16",
   "dtiB1T17", "dtiB1T18", "dtiB1T19", "dtiB1T20",
   "dtiB1T21", "dtiB1T22", "dtiB1T23", "dtiB1T24",
   "dtiB1T25", "dtiB1T26", "dtiB1T27", "dtiB1T28",
   "dtiB1T29", "dtiB1T30", 
NULL,
};

int fsig[15][2]={
{1380,1500},{1380,1620},{1500,1620},{1380,1740},{1500,1740},
{1620,1740},{1380,1860},{1500,1860},{1620,1860},{1740,1860},
{1380,1980},{1500,1980},{1620,1980},{1740,1980},{1860,1980}
};

int bsig[15][2]={
{1140,1020},{1140, 900},{1020, 900},{1140, 780},{1020, 780},
{ 900, 780},{1140, 660},{1020, 660},{ 900, 660},{ 780, 660},
{1140, 540},{1020, 540},{ 900, 540},{ 780, 540},{ 660, 540}
};

typedef struct channel{
int  vox;//voice handle
int  dti;//dti handle
char voxname[20];
char dtiname[20];
char cur_string[ANI_LEN+3];
char dnis[20];//the number you want to dial out
int  cur_num;
int  bksig;
int  state;
time_t start_t;
} CHANNEL;
CHANNEL dev[MAXCHAN];

/* Defines for states */
#define ST_IDLE      1
#define ST_SZ_ACK    2
#define ST_MFC       3
#define ST_WAITOFHK  4
#define ST_PLAYFILE  5

/* Function Declaration */
int  process_event(int);
int  check_event(int,int);
int  end_prog(void);
int  promptfh;
int  dt_mfc(int);
int  dt_playf(int);
int  dt_bkaon(int i);
int  dt_fwaon(int);
int  dt_bwboff(int);
int  chan_init(int);
int  dt_getbksig(int i);
int  dt_seize(int);
int  r2_playfsig(int voxdev, int forwardsig, int mode);
int  r2_creatbsig(int voxdev);
int  play_init(void);
int  begin_dial();
int  InfoDebug(int channel, char * FunctionName);
int  printts(int i);
void wait_event();
void sysinit();

/* Structure for look up table */
typedef struct 
{
int current_state;
int dev_type;
int event;
int next_state;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -