资讯详情

java实现电脑端拨号+播放语音功能

运行环境 设备: win xp 32bit jdk 1.6 86X 子佩电话工具(应该有很多,用的是CC301)

EventCallback.java

package phone; import org.xvolks.jnative.JNative; import org.xvolks.jnative.exceptions.NativeException; import org.xvolks.jnative.pointers.Pointer; import org.xvolks.jnative.util.Callback;  ////////////////////////////////////////////////////////////////////////////////////////// ////事件发生回调原型 //uChannelID:通道ID //dwUserData:用户定制数据 //lType:事件类型ID 查看BRI_EVENT.lEventType Define //lHandle:句柄使用值 //lResult:事件相关数据 //lParam:保留数据,扩展使用 //szData:事件相关数据 //pDataEx:扩展使用附加数据 ///////////////////////////////////////////////////////////////////////////////////////// //typedef BRIINT32 (CALLBACK *PCallBack_Event)(BRIINT16 uChannelID,BRIUINT32 dwUserData,BRIINT32 lType,BRIINT32 lHandle,BRIINT32 lResult,BRIINT32 lParam,BRIPCHAR8 pData,BRIPCHAR8 pDataEx);  public class EventCallback implements Callback/* 实现此接口 */{      private int myAddress = -1;     public EventCallback() {      }      /** * Method callback java对应于dll中回调函数 * * @param values * an long[] 参数组和非整形数代表地址 * @return an int * @version 11/26/2013 */     public int callback(long[] values) {         if (values == null) {             System.out.println("callback ret "   -1);             return -1;         }         System.out.println("参数的个数"  values.length);         if (values.length == 8) {
            String szData = "";
// String szDataEx = "";
            int lType = (int)values[3];
            long lResult = values[4];
            try { 
                int iCh = (int)values[0];
                Pointer _pointer = Pointer.createPointerToNativeMemory(
                        (int) values[6], 1024); /* 获取字符串通过指针 */
// Pointer _pointer1 = Pointer.createPointerToNativeMemory(
// (int) values[7], 1024);

                szData = _pointer.getAsString() ;
            // szDataEx = _pointer1.getAsString(); 
                String str = "",strValue="";
                strValue= "Handle="+values[3]+ "Result=" + lResult+  "Data=" + szData ;
                switch(lType)
                {
                case BriSDKLib.BriEvent_PhoneHook:
                    {
    
      //电话接通后根据对方阻抗大小,声音会变大变小,200就太大,中间幅度200就太大,一般电话机100可以
                        /* QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFVOL,50); QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFLEVEL,4); QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFNUM,9); QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFLOWINHIGH,20); QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFHIGHINLOW,20); */
                        //str.Format("通道%d: 电话机摘机,演示修改检测DTMF灵敏度,DTMFVOL=50/DTMFLEVEL=5/DTMFNUM=10,如果检测不到电话机拨号就修改该值更小",m_nChannelID+1);
                        if(BriSDKLib.QNV_General(iCh,BriSDKLib.QNV_GENERAL_ISDIALING,0, null) <= 0)
                        {
                            //QNV_SetDevCtrl(m_nChannelID,QNV_CTRL_DOHOOK,0);//没有正在拨号可以考虑自动软挂机,避免3方通话状态,话机里有背景音出现
                        }
                        str= "通道"+iCh+ ": 电话机摘机";
                    }break;
                case BriSDKLib.BriEvent_PhoneHang:
                    {
                    // QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFVOL,5);
                    // QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFLEVEL,3);
                    // QNV_SetParam(pEvent->uChannelID,QNV_PARAM_DTMFNUM,6);
                    // str.Format("通道%d: 电话机挂机,演示修改检测DTMF灵敏度",m_nChannelID+1);
                        str= "通道" + iCh + ": 电话机挂机";
                }break;
                case BriSDKLib.BriEvent_CallIn:
                    str = "通道"+ iCh +": 来电响铃 " + strValue;
                    break;
                case BriSDKLib.BriEvent_GetCallID:
                    {
                        long lSerial= BriSDKLib.QNV_DevInfo(iCh,BriSDKLib.QNV_DEVINFO_GETSERIAL);
                        str= "通道" +  iCh +": 接收到来电号码 "+ szData;
                    }break;
                case BriSDKLib.BriEvent_StopCallIn:
                    str = "通道"+ iCh +": 停止呼入,产生一个未接电话 "+ szData;break;
                case BriSDKLib.BriEvent_DialEnd:
                    {
                        if(BriSDKLib.QNV_GetDevCtrl(iCh,BriSDKLib.QNV_CTRL_PHONE) > 0)
                        {
                            //QNV_SetDevCtrl(m_nChannelID,QNV_CTRL_DOHOOK,0);//电话机已经拿着可以考虑自动软挂机,避免3方通话状态,话机里有背景音出现
                        }
                        str = "通道:" + iCh +" 拨号结束 "+ strValue;
                    }break;
                case BriSDKLib.BriEvent_PlayFileEnd:
                    str = "通道" + iCh + ": 播放文件结束 " + strValue;break;
                case BriSDKLib.BriEvent_PlayMultiFileEnd:
                    str = "通道" + iCh +": 多文件连播结束 %s"+ strValue;break;
                case BriSDKLib.BriEvent_RepeatPlayFile:
                    str = "通道"+iCh + ": 循环播放文件 %s"+ strValue;break;
                case BriSDKLib.BriEvent_PlayStringEnd:
                    str= "通道" +iCh+ ": 播放字符结束 %s" + strValue;break;
                case BriSDKLib.BriEvent_SendCallIDEnd:
                    str= "通道"+iCh+ ": 给话机震铃时发送号码结束 "+ strValue;break;
                case BriSDKLib.BriEvent_Silence:
                    str= "通道" +iCh +": 通话中一定时间的静音 "+ strValue;break;
                case BriSDKLib.BriEvent_GetDTMFChar:
                    str= "通道"+iCh+": 接收到按键 "+strValue;break;
                case BriSDKLib.BriEvent_RemoteHook:
                    {
                        if(BriSDKLib.HOOK_POLARITY == lResult)
                        {
                            str= "通道"+ iCh + ": 远程摘机(反级检测) "+ strValue ;
                        }else
                            str = "通道 " + iCh + ":信号音检测远程摘机信号,仅做参考 "+ strValue;
                    }break;
                case BriSDKLib.BriEvent_RemoteHang:
                    {
                        if(BriSDKLib.HOOK_POLARITY == lResult)
                        {
                            str= "通道" + iCh + ": 远程挂机(反级检测) "+ strValue;
                        }else
                        {
                            str= "通道" + iCh + ": 信号音检测远程挂机(忙音检测),仅做参考 "+ strValue;
                        }
                    }break;
                case BriSDKLib.BriEvent_Busy:
                    str = "通道"+ iCh + ": 接收到忙音,线路可能已经断开 " + strValue;break;
                case BriSDKLib.BriEvent_DialTone:
                    str= "通道" +iCh + ": 检测到拨号音 "+ strValue;break;
                case BriSDKLib.BriEvent_DialToneEx:
                    str= "通道"+ iCh + ": 接通状态下检测到拨号音信号,如果是刚来电,可能是刚才的来电已经未接了,仅做参考 "+strValue;break;
                case BriSDKLib.BriEvent_PhoneDial:
                    str= "通道" +iCh + ": 电话机拨号 "+ strValue;break;
                case BriSDKLib.BriEvent_RingBack:
                    str= "通道" +iCh + ": 拨号后接收到回铃音 "+ strValue;break;
                case BriSDKLib.BriEvent_MicIn:
                    str= "通道" +iCh + ": 麦克风插入 "+ strValue;break;
                case BriSDKLib.BriEvent_MicOut:
                    str= "通道" +iCh + ": 麦克风拔出 "+ strValue;break;
                case BriSDKLib.BriEvent_FlashEnd:
                    str= "通道" +iCh + ": 拍插簧完成 "+ strValue;break;
                case BriSDKLib.BriEvent_RemoteSendFax:
                    str= "通道" +iCh + ": 对方准备发送传真 "+ strValue;break;
                case BriSDKLib.BriEvent_FaxRecvFinished:
                    str= "通道" +iCh + ": 接收传真完成 "+ strValue;break;
                case BriSDKLib.BriEvent_FaxRecvFailed:
                    str= "通道" +iCh + ": 接收传真失败 "+ strValue;break;
                case BriSDKLib.BriEvent_FaxSendFinished:
                    str= "通道" +iCh + ": 发送传真完成 "+ strValue;break;
                case BriSDKLib.BriEvent_FaxSendFailed:
                    str= "通道" +iCh + ": 发送传真失败 "+ strValue;break;
                case BriSDKLib.BriEvent_RefuseEnd:
                    str= "通道" +iCh + ": 拒接来电完成 "+ strValue;break;  
                case BriSDKLib.BriEvent_RecvedFSK:
                    {
                        if(lResult == BriSDKLib.CALLIDMODE_FSK) 
                            str= "通道" +iCh + ": 接收到来电号码信息FSK数据 "+ strValue;    
                        else 
                            str= "通道" +iCh + ": 接收到来电号码信息DTMF数据 "+ strValue;
                    }break; 
                case BriSDKLib.BriEvent_PSTNFree:
                    {
                        str= "通道" +iCh + ": PSTN线路已空闲 "+ strValue;
                        //WriteCallLog(m_nChannelID);
                    }break; 
                case BriSDKLib.BriEvent_CheckLine:
                    {
                        if( (lResult & BriSDKLib.CHECKLINE_MASK_DIALOUT)>0 )
                        {
                            str= "通道" +iCh + ":[ok]***线路拨号音正常,能正常软拨号***-----------------";              
                        }else
                        {
                            str= "通道" +iCh + "[err]线路拨号音不正常,可能不能正常软拨号,检查LINE口线路";   
                        }                   
                        if( (lResult & BriSDKLib.CHECKLINE_MASK_REV)>0 )
                        {
                            str= "通道" +iCh + "[ok]***线路LINE口/PHONE口未接反***----------------------";                   
                        }else
                        {
                            str= "通道" +iCh + "[err]线路LINE口/PHONE口可能接反了";
                        }
                    }break;
                case BriSDKLib.BriEvent_DevErr:
                    {
                        str= "通道" +iCh + ": 设备发生错误 "+ strValue;        
                        if(lResult == 3)// || (atol(pEvent->szData)&0xFF) == 6)//检测到移除获取多个失败
                        {
                            /* QNV_CloseDevice(ODT_CHANNEL,m_nChannelID); long lChNum=QNV_DevInfo(0,QNV_DEVINFO_GETCHANNELS); str.Format("当前通道数量:%d,考虑重新初始化所有设备",lChNum<0?0:lChNum); */

                        }
                    }break;
                case BriSDKLib.BriEvent_PlugOut:
                    {
                        str= "通道" +iCh + ": 设备被拔掉 ";           
                    }break;
                case BriSDKLib.BriEvent_EnableHook:
                    {
                        str= "通道" +iCh + ": HOOK被控制 lResult= " + lResult;                   
                    }break;
                case BriSDKLib.BriEvent_EnablePlay:
                    {
                        str= "通道" +iCh + ": 喇叭被控制 lResult= " + lResult; 
                    }break;
                case BriSDKLib.BriEvent_EnablePlayMux:
                    {
                        str= "通道" +iCh + ": 喇叭mux修改 lResult= " + lResult;
                    }break;
                case BriSDKLib.BriEvent_DoStartDial:
                    {
                        if(lResult == BriSDKLib.CHECKDIALTONE_FAILED)
                        {
                            str= "通道" +iCh + ": 自动拨号失败,未检测到拨号音,请检查线路";
                        }else
                        {
                            str= "通道" +iCh + ": 开始拨号 data=" + szData;
                        }
                    }break;
                case BriSDKLib.BriEvent_DevCtrl:
                    {
                        if(lResult == BriSDKLib.QNV_CTRL_PLAYTOLINE)
                        {
                            if(Integer.parseInt(szData) > 0)
                            {
                                str = "播放到线路状态 打开";
                            }else
                            {
                                str = "播放到线路状态 关闭";
                            }
                        }
                    }break;
                default:
                    {
                        strValue= "通道:"+iCh +"其它忽略事件 eventid= "+lType + "Result=" + lResult+  "Data=" + szData ;
                    }break;
                }

                if(lType == BriSDKLib.BriEvent_RemoteSendFax && lResult == 1)
                {
                    //BFU_FaxTooltip(m_nChannelID,"",TTIP_AUTORECV);
                    /* if(MessageBox("对方准备发送传真,是否接收?","传真提示",MB_YESNO|MB_ICONWARNING) == IDYES) { BFU_StartRecvFax(m_nChannelID,"",0); } */
                }

                System.out.println( str );

            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }


            return 1;
        } else {
            System.out.println("Bad number of arguments ! 8 expected "
                    + values.length + " found");
            System.out.println("callback ret " + 2);
            return 2;
        }
    }

    /** * java回调函数地址 */

        public int getCallbackAddress() throws NativeException {
            if(myAddress == -1) {
                    myAddress = JNative.createCallback(8, this);
            }
            return myAddress;
    }

}

BriSDKLib.java

package phone;

/** * @author fans * @version 2013-9-11 * */
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlock;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
import org.xvolks.jnative.util.Callback;

class BriSDKLib {
    public final static int NULL = 0;// c++
    public final static int TRUE = 1;// 表示真值
    public final static int FASLE = 0;// 表示假值

    public final static int QNV_DLL_VER = 0x104;// 动态库版本
    public static String QNV_DLL_VER_STR = "1.04";

    public final static int QNV_FILETRANS_VER = 0x30301;

    public static String QNV_CC_LICENSE = "quniccub_x";// CC开发的许可证

    // 播放/录音回调时如果返回该值,系统将自动删除该回调模块,下次将不会被回调
    public final static int CB_REMOVELIST = -1;

    public static String MULTI_SEPA_CHAR = "|";// 多个文件播放列表分割符号
    public final static int PROXYDIAL_SIGN = 0x40000000;// 代拨标记
    public static String PROXYDIAL_SIGN_STRU = "P";// 代拨标记
    public static String PROXYDIAL_SIGN_STRL = "p";// 代拨标记

    public static String RING_BEGIN_SIGN_STR = "0";
    public static String RING_END_SIGN_STR = "1";
    public static String RING_BEGIN_SIGN_CH = "0";
    public static String RING_END_SIGN_CH = "1";

    public static String RINGBACK_TELDIAL_STR = "0";
    public static String RINGBACK_PCDIAL_STR = "1";
    public static String RINGBACK_PCDIAL_CH = "1";
    public static String RINGBACK_TELDIAL_CH = "0";

    public static String DIAL_DELAY_SECOND = ",";// 拨号时号码之间延迟1秒
    public static String DIAL_DELAY_HSECOND = ".";// 拨号时号码之间延迟0.5秒
    public static String DIAL_CHECK_CITYCODE = ":";// 拨号时该符号后自动过滤城市区号

    public static String CC_PARAM_SPLIT = ",";// CC参数的分隔符号

    // 自动创建录音文件时的默认目录名
    public static String RECFILE_DIR = "recfile";
    // 配置信息里的KEY
    public static String INI_QNVICC = "qnvicc";
    // 默认配置文件名
    public static String INI_FILENAME = "cc301config.ini";
    // VOIP代拨标记
    public static String CC_VOIP_SIGN = "VOIP";
    // 匿名登陆CC,密码跟号码为相同
    public static String WEB_802ID = "800002000000000000";

    public final static int MAX_USB_COUNT = 64;// 支持的最多USB芯片数
    public final static int MAX_CHANNEL_COUNT = 128;// 支持的最多通道数
    // 声卡控制有效通道ID号
    // 0->255为USB设备通道号
    public final static int SOUND_CHANNELID = 256;
    // 远程通信通道,HTTP上传/下载
    public final static int REMOTE_CHANNELID = 257;
    // CC控制通道
    public final static int CCCTRL_CHANNELID = 258;
    // //socket 服务器端通道
    public final static int SOCKET_SERVER_CHANNELID = 259;
    // socket 终端通道
    public final static int SOCKET_CLIENT_CHANNELID = 260;

    public final static int MAX_CCMSG_LEN = 400;// 发送消息的最大长度
    public final static int MAX_CCCMD_LEN = 400;// 发送命令的最大长度

    public final static int DEFAULT_FLASH_ELAPSE = 600;// 默认拍插簧间隔时间(ms)
    public final static int DEFAULT_FLASHFLASH_ELAPSE = 1000;// 默认拍插簧后间隔一定时间回调事件ms
    public final static int DEFAULT_RING_ELAPSE = 1000;// 默认给内部话机/交换机震铃时间ms响 1秒
    public final static int DEFAULT_RINGSILENCE_ELAPSE = 4000;// 默认给内部话机/交换机震铃后停止ms
                                                                // 4秒
    public final static int DEFAULT_RING_TIMEOUT = 12;// 默认给内线震铃超时次数,每次1秒响4秒停,总共时间就为N*5
    public final static int DEFAULT_REFUSE_ELAPSE = 500;// 拒接时默认使用间隔(ms)
    public final static int DEFAULT_DIAL_SPEED = 75;// 默认拨号速度ms
    public final static int DEFAULT_DIAL_SILENCE = 75;// 默认号码之间静音时间ms
    public final static int DEFAULT_CHECKDIALTONE_TIMEOUT = 3000;// 检测拨号音超时就强制呼叫ms
    public final static int DEFAULT_CALLINTIMEOUT = 5500;// 来电响铃超时ms

    // 设备类型
    public final static int DEVTYPE_UNKNOW = -1;// 未知设备
    // cc301系列
    public final static int DEVTYPE_T1 = 0x1009;
    public final static int DEVTYPE_T2 = 0x1000;
    public final static int DEVTYPE_T3 = 0x1008;
    public final static int DEVTYPE_T4 = 0x1005;
    public final static int DEVTYPE_T5 = 0x1002;
    public final static int DEVTYPE_T6 = 0x1004;

    public final static int DEVTYPE_IR1 = 0x8100;
    public final static int DEVTYPE_ID1 = 0x8102;

    public final static int DEVTYPE_IA1 = 0x8111;
    public final static int DEVTYPE_IA2 = 0x8112;
    public final static int DEVTYPE_IA3 = 0x8113;
    public final static int DEVTYPE_IA4 = 0x8114;
    public final static int DEVTYPE_IA4_F = 0x8115;

    public final static int DEVTYPE_IB1 = 0x8121;
    public final static int DEVTYPE_IB2 = 0x8122;
    public final static int DEVTYPE_IB3 = 0x8123;
    public final static int DEVTYPE_IB4 = 0x8124;

    public final static int DEVTYPE_IP1 = 0x8131;
    public final static int DEVTYPE_IP1_F = 0x8132;

    public final static int DEVTYPE_IC2_R = 0x8200;
    public final static int DEVTYPE_IC2_LP = 0x8203;
    public final static int DEVTYPE_IC2_LPQ = 0x8207;
    public final static int DEVTYPE_IC2_LPF = 0x8211;
    // 4路设备
    public final static int DEVTYPE_IC4_R = 0x8400;
    public final static int DEVTYPE_IC4_LP = 0x8403;
    public final static int DEVTYPE_IC4_LPQ = 0x8407;
    public final static int DEVTYPE_IC4_LPF = 0x8411;
    // 7路设备
    public final static int DEVTYPE_IC7_R = 0x8700;
    public final static int DEVTYPE_IC7_LP = 0x8703;
    public final static int DEVTYPE_IC7_LPQ = 0x8707;
    public final static int DEVTYPE_IC7_LPF = 0x8711;
    // 玻瑞器
    public final static int DEVTYPE_A1 = 0x1100000;
    public final static int DEVTYPE_A2 = 0x1200000;
    public final static int DEVTYPE_A3 = 0x1300000;
    public final static int DEVTYPE_A4 = 0x1400000;
    public final static int DEVTYPE_B1 = 0x2100000;
    public final static int DEVTYPE_B2 = 0x2200000;
    public final static int DEVTYPE_B3 = 0x2300000;
    public final static int DEVTYPE_B4 = 0x2400000;
    public final static int DEVTYPE_C4_L = 0x3100000;
    public final static int DEVTYPE_C4_P = 0x3200000;
    public final static int DEVTYPE_C4_LP = 0x3300000;
    public final static int DEVTYPE_C4_LPQ = 0x3400000;
    public final static int DEVTYPE_C7_L = 0x3500000;
    public final static int DEVTYPE_C7_P = 0x3600000;
    public final static int DEVTYPE_C7_LP = 0x3700000;
    public final static int DEVTYPE_C7_LPQ = 0x3800000;
    public final static int DEVTYPE_R1 = 0x4100000;
    public final static int DEVTYPE_C_PR = 0x4200000;

    // --------------------------------------------------------------
    // 设备功能模块
    // 是否具有内置喇叭功能
    // 可以PC播放语音到喇叭/通话时线路声音到喇叭
    public final static int DEVMODULE_DOPLAY = 0x1;
    // 是否具有可接入外线获取来电号码(FSK/DTMF双制式)/通话录音功能
    // 可以来电弹屏/通话录音/通话时获取对方按键(DTMF)
    public final static int DEVMODULE_CALLID = 0x2;
    // 是否具有可接入话机进行PSTN通话功能
    // 可以使用电话机进行PSTN通话/获取话机拨出的号码
    public final static int DEVMODULE_PHONE = 0x4;
    // 是否具有继电器切换断开/接通话机功能
    // 断开话机后可以:来电时话机不响铃/使用话机MIC独立采集录音配合DEVFUNC_RING模块给话机模拟来电震铃
    public final static int DEVMODULE_SWITCH = 0x8;
    // PC播放语音给话机听筒,具有 DEVMODULE_SWITCH模块,switch后播放语音到话机听筒
    public final static int DEVMODULE_PLAY2TEL = 0x10;
    // 是否具有话机摘机后拨号/放音给线路的功能
    // 可以使用PC自动摘机进行拨号/通话时可以给对方播放语音/来电留言/外拨通知/来电IVR(语音答录)
    public final static int DEVMODULE_HOOK = 0x20;
    // 是否具有插入MIC/耳机功能
    // 可以用MIC/耳机进行PSTN通话/使用MIC独立录音/PC播放语音给耳机
    public final static int DEVMODULE_MICSPK = 0x40;
    // 是否具有让接在phone口的设备(电话机,交换机等)模拟震铃功能
    // 可以任意时刻让phone口的设备模拟来电震铃.如:在来电IVR(语音答录)之后进入工服务时给内部话机或交换机模拟震铃
    public final static int DEVMODULE_RING = 0x80;
    // 是否具有接收/发送传真功能
    // 可以发送图片,文档到对方的传真机/可以接收保存对方传真机发送过来的图片
    public final static int DEVMODULE_FAX = 0x100;
    // 具有级性反转检测对方摘机的功能
    // 如果PSTN线路在当地电信部门同时开通该级性反转检测服务,就可以在外拨时精确检测到对方摘机/挂机
    // 如果没有该功能,只有拨打的号码具有标准回铃才才能检测到对方摘机,对手机彩铃,IP等不具有标准回铃线路的不能检测对方摘机/挂机
    public final static int DEVMODULE_POLARITY = 0x800;
    // ----------------------------------------------------------------

    // 打开设备类型
    public final static int ODT_LBRIDGE = 0x0;// 玻瑞器
    public final static int ODT_SOUND = 0x1;// 声卡
    public final static int ODT_CC = 0x2;// CC模块
    public final static int ODT_SOCKET_CLIENT = 0x4;// SOCKET终端模块
    public final static int ODT_SOCKET_SERVER = 0x8;// SOCKET服务器模块
    public final static int ODT_ALL = 0xFF;// 全部
    public final static int ODT_CHANNEL = 0x100;// 关闭指定通道
    //

    // -----------------------------------------------------
    // linein线路选择
    public final static int LINEIN_ID_1 = 0x0;// 默认正常状态录音,采集来电号码等
    public final static int LINEIN_ID_2 = 0x1;// 电话机断开后话柄录音
    public final static int LINEIN_ID_3 = 0x2;// hook line
                                                // 软摘机后录音,录音数据可以提高对方的音量,降低本地音量
    public final static int LINEIN_ID_LOOP = 0x3;// 内部环路测试,设备测试使用,建议用户不需要使用
    // -----------------------------------------------------

    public final static int ADCIN_ID_MIC = 0x0;// mic录音
    public final static int ADCIN_ID_LINE = 0x1;// 电话线录音

    // adc
    public final static int DOPLAY_CHANNEL1_ADC = 0x0;
    public final static int DOPLAY_CHANNEL0_ADC = 0x1;
    public final static int DOPLAY_CHANNEL0_DAC = 0x2;
    public final static int DOPLAY_CHANNEL1_DAC = 0x3;

    // ------------
    public final static int SOFT_FLASH = 0x1;// 使用软件调用拍插完成
    public final static int TEL_FLASH = 0x2;// 使用话机拍插完成
    public final static int HOOK_VOICE = 0x0;// 语音检测的摘挂机信号
    public final static int HOOK_POLARITY = 0x1;// 反级检测的摘挂机信号
    // ------------
    // 拒接时使用模式
    public final static int REFUSE_ASYN = 0x0;// 异步模式,调用后函数立即返回,但并不表示拒接完成,拒接完成后将接收到一个拒接完成的事件
    public final static int REFUSE_SYN = 0x1;// 同步模式,调用后该函数被堵塞,等待拒接完成返回,系统不再有拒接完成的事件

    // 拍插簧类型
    public final static int FT_NULL = 0x0;
    public final static int FT_TEL = 0x1;// 话机拍插簧
    public final static int FT_PC = 0x2;// 软拍插簧
    public final static int FT_ALL = 0x3;
    // -------------------------------

    // 拨号类型
    public final static int DTT_DIAL = 0x0;// 拨号
    public final static int DTT_SEND = 0x1;// 二次发码/震铃发送CALLID
    // -------------------------------

    // 来电号码模式
    public final static int CALLIDMODE_NULL = 0x0;// 未知
    public final static  

标签: 3th8280中间继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台