B
babysheep
Unregistered / Unconfirmed
GUEST, unregistred user!
想问一些关于dialogic的问题。这两天正为一个函数发愁,就是ATDX_STATE(),这个函数在手册上有很清楚的解释和例子,但是应用起来却没有达到我想要的效果。我想侦测某个通道的当前状态(主要是空闲、来电、用户挂机)。我主要是通过下面的方法来做的。
首先初始化(举个例子):
void sysinit(void)
{
int channel =1;
dxinfo[channel].devhandle = dx_open( "dxxxB1C1", 0 )
}
接着在另外的地方调用ATDX_STATE:
int getstate(int channel)
{
long channelstate;
channelstate = ATDX_STATE(dxinfo[ channel ].devhandle);
switch(channelstate)
{
case CS_CALL:return 2;
case CS_HOOK:return 7;
case CS_IDLE:return 0;
case CS_DIAL:return 11;
case CS_GTDIG:return 12;
case CS_PLAY:return 13;
case CS_RECD:return 14;
case CS_STOPD:return 15;
case CS_TONE:return 16;
case CS_WINK:return 17;
default:return 1;
}
}
但是不管是打电话进来也好,怎么也好,ATDX_STATE返回的始终都是0,IDLE状态。
我用了其他的方法测试,比如用sr_wait()函数来获取event,然后用chdev = sr_getevtdev();来获取设备,再调用event = sr_getevttype();来判断事件类型,得到正确的结果。但是,我需要的是获取某个通道上的状态,如果那个通道没有event发生,用后面的方法就没有作用了,这个问题困扰了我很久了,希望能够得到解决,谢谢。
首先初始化(举个例子):
void sysinit(void)
{
int channel =1;
dxinfo[channel].devhandle = dx_open( "dxxxB1C1", 0 )
}
接着在另外的地方调用ATDX_STATE:
int getstate(int channel)
{
long channelstate;
channelstate = ATDX_STATE(dxinfo[ channel ].devhandle);
switch(channelstate)
{
case CS_CALL:return 2;
case CS_HOOK:return 7;
case CS_IDLE:return 0;
case CS_DIAL:return 11;
case CS_GTDIG:return 12;
case CS_PLAY:return 13;
case CS_RECD:return 14;
case CS_STOPD:return 15;
case CS_TONE:return 16;
case CS_WINK:return 17;
default:return 1;
}
}
但是不管是打电话进来也好,怎么也好,ATDX_STATE返回的始终都是0,IDLE状态。
我用了其他的方法测试,比如用sr_wait()函数来获取event,然后用chdev = sr_getevtdev();来获取设备,再调用event = sr_getevttype();来判断事件类型,得到正确的结果。但是,我需要的是获取某个通道上的状态,如果那个通道没有event发生,用后面的方法就没有作用了,这个问题困扰了我很久了,希望能够得到解决,谢谢。