C#实现IVR(基于东进的语音卡)-1

来源:互联网 发布:淘宝卖家怎么退出村淘 编辑:程序博客网 时间:2024/05/18 16:18

上一年在公司做了一个小小的IVR项目.觉得这是一个和硬件驱动交互编程的不错例子.
共享一下.也讨论一下.
代码:(这个是调用系统驱动的DLL)

using System;
using System.Text;
using DJVoiceCard.Lib;

namespace DJVoiceCard.DL
{
    
public class SysFunction
    
{
        
#region 系统操作

        
/// <summary>
        
/// 初始化系统
        
/// </summary>
        
/// <returns></returns>

        public static bool SysInit(ref string sErr)
        
{
            
try
            
{
                StringBuilder sSys_INC 
= new StringBuilder("");
                StringBuilder sPrompt_INC 
= new StringBuilder("Prompt.ini");
                
int iSysInit = ISUP_Lib.DJISUP_InitSystem();
                
int iCardInit = DJFunction.DJSys_EnableCard(sSys_INC, sPrompt_INC);
                
bool iPromptInit = DJFunction.DJSys_EnableDtmfSend();
                
if (iSysInit == 1)
                
{
                    
if (iCardInit == 0)
                    
{
                        
if (iPromptInit)
                        
{
                            
return true;
                        }

                        
else
                        
{
                            sErr 
= "未能加载声音文件" + iPromptInit.ToString();
                            
return false;
                        }

                    }

                    
else
                    
{
                        sErr 
= iCardInit.ToString();
                        
return false;
                    }

                }

                
else
                
{
                    sErr 
= iSysInit.ToString();
                    
return false;
                }

            }

            
catch (Exception ex)
            
{
                sErr 
= ex.Message;
            }

            
return false;
        }


        
/// <summary>
        
/// 退出系统
        
/// </summary>

        public static void SysExit()
        
{
            DJFunction.DJSys_DisableCard();
            ISUP_Lib.DJISUP_ExitSystem();
        }


        
#endregion


        
#region 中继通道操作

        
/// <summary>
        
/// 获取中继通道总数
        
/// </summary>
        
/// <returns></returns>

        public static int iTrkTotal()
        
{
            
return DJFunction.DJTrk_GetTotalTrunkNum();
        }


        
/// <summary>
        
/// 信道状态;
        
/// </summary>
        
/// <param name="PCM_NO"></param>
        
/// <param name="Relay_NO"></param>
        
/// <returns></returns>

        public static int iRaleyStetes(byte PCM_NO, byte Relay_NO)
        
{
            
return ISUP_Lib.DJISUP_GetChnState(PCM_NO, Relay_NO);
        }



        
/// <summary>
        
/// 循环刷新缓存;
        
/// </summary>

        public static void Push_GerEvent()
        
{
            
try
            
{
                ISUP_Lib.DJISUP_GetEvent();
                DJFunction.DJSys_PushPlay();
            }

            
catch(Exception Ex)
            
{
               
            }

        }


        
/// <summary>
        
/// 获得中继号
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <returns></returns>

        public static int iPCMID(int iTrunkID)
        
{
            
return DJFunction.DJTrk_GetPcmID(iTrunkID);
        }


        
/// <summary>
        
/// 被叫号码
        
/// </summary>
        
/// <param name="PCM_NO"></param>
        
/// <param name="Relay_NO"></param>
        
/// <returns></returns>

        public static TC_INI_TYPE GetCallNum(int PCM_NO, int Relay_NO)
        
{
            TC_INI_TYPE sReVal 
= new TC_INI_TYPE();
            ISUP_Lib.DJISUP_GetCalleeNum((
byte)PCM_NO, (byte)Relay_NO, ref sReVal);
            
return sReVal;
        }


        
/// <summary>
        
/// 主叫号码
        
/// </summary>
        
/// <param name="PCM_NO"></param>
        
/// <param name="Relay_NO"></param>
        
/// <returns></returns>

        public static TC_INI_TYPE GetCallerNum(int PCM_NO, int Relay_NO)
        
{
            TC_INI_TYPE sReVal 
= new TC_INI_TYPE();
            ISUP_Lib.DJISUP_GetCallerNum((
byte)PCM_NO, (byte)Relay_NO, ref sReVal);
            
return sReVal;
        }


        
/// <summary>
        
/// 获取用户按键
        
/// </summary>
        
/// <param name="Relay_NO"></param>
        
/// <returns></returns>

        public static StringBuilder GetUserKeyPress(int Relay_NO)
        
{
            
return ISUP_Lib.DJTrk_GetDtmfCode(Relay_NO);
        }


        
/// <summary>
        
/// 设置中继信道的状态;
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <param name="States"></param>

        public static void SetRelayStates(int iTrunkID, int States)
        
{
            ISUP_Lib.DJISUP_SetChnState(((
byte)(iTrunkID / 30)), ((byte)(iTrunkID % 30)), (byte)States);
        }



        
/// <summary>
        
/// 呼出
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <param name="CalleeNum"></param>
        
/// <param name="CallerNum"></param>
        
/// <returns></returns>

        public static bool bCallOut(int iTrunkID, string CalleeNum, string CallerNum, ref string sErr)
        
{
            StringBuilder Callee 
= new StringBuilder(CallerNum);
            StringBuilder Caller 
= new StringBuilder(CalleeNum);
            
if (iTrunkID != -1)
            
{
                
bool bRel = ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30ref Callee, ref Caller);
                
//sErr = Callee.ToString() + "||" + Caller.ToString()+"||"+iTrunkID.ToString();
                return bRel;
            }

            
else
            
{
                sErr 
= "NaN";
                
return false;
            }

        }


        
/// <summary>
        
/// string
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <param name="CalleeNum"></param>
        
/// <param name="CallerNum"></param>
        
/// <returns></returns>

        public static bool bCallOut(int iTrunkID, string CalleeNum, string CallerNum)
        
{
            
char[] telNum = new char[120];
            PR p 
= new PR();
            p.TelarrChar 
= telNum;
            telNum 
= CalleeNum.ToCharArray();
            
byte[] _telNum = new byte[120];
            _telNum 
= Encoding.ASCII.GetBytes(telNum);


            
char[] CallNum = new char[120];
            CallNum 
= CallerNum.ToCharArray();
            
byte[] _CallNum = new byte[120];
            p.CallarrChar 
= CallNum;
            _CallNum 
= Encoding.ASCII.GetBytes(CallerNum);

            
if (iTrunkID != -1)
            
{
                
return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30ref CalleeNum, ref CallerNum);
            }

            
else
            
{
                
return false;
            }

        }


        
/// <summary>
        
/// byte][
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <param name="CalleeNum"></param>
        
/// <param name="CallerNum"></param>
        
/// <returns></returns>

        public static bool bCallOut(int iTrunkID, byte[] CalleeNum, byte[] CallerNum)
        
{
            
unsafe
            
{
                
if (iTrunkID != -1)
                
{
                    
return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, CalleeNum, CallerNum);
                }

                
else
                
{
                    
return false;
                }

            }

        }


        
/// <summary>
        
/// char *
        
/// </summary>
        
/// <param name="iTrunkID"></param>
        
/// <param name="calleeNum"></param>
        
/// <param name="callerNum"></param>
        
/// <returns></returns>

        public static unsafe bool bCallOut(int iTrunkID, StringBuilder calleeNum, StringBuilder callerNum)
        
{
            
unsafe
            
{
                
if (iTrunkID != -1)
                
{
                    
return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, calleeNum, callerNum);
                }

                
else
                
{
                    
return false;
                }

            }

        }

原创粉丝点击