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

📄 d161a.cs

📁 vs2005串口编程示例,好多例子,是学习串口编程方面不错的资料
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.Text;

using System.Runtime.InteropServices;

namespace Ex13_11
{
    public struct TC_INI_TYPE
    {
        public short wCardNo; //卡的总数
        public short wCardType; //卡的类型
        public short wConnect; //卡之间是否连通
        public short wIRQ; //中断号
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public char[] cbDir; //安装目录
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public short[] wAddress;//每块卡的地址
        public short wMajorVer; //软件主版本号 
        public short wMinorVer; //软件辅版本号
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public short[] wChType; //每个通道的类型
    }
    public struct TC_INI_TYPE_MORE
    {
    }
    [StructLayout(LayoutKind.Sequential)]
    unsafe class DJ160API
    {
        private DJ160API() { }

        public const short MAX_CHANNEL_NO = 128;
        public const short LEN_FILEPATH = 128;
        public const short MAX_CARD_NO = 32;

        #region  初始化函数;

        ///  <summary>
        ///  初始化函数,初始化设备驱动程序
        ///  返回值:
        ///  0表示成功;
        ///  -1表示打开设备驱动程序错误;
        ///  -2表示读取TC08A-V.INI文件时,发生错误;
        ///  -3表示INI文件的设置与实际硬件不一致时,发生错误
        ///  </summary>
        ///  <returns>long</returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long LoadDRV();

        ///  <summary>
        ///  关闭驱动程序
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FreeDRV();

        ///  <summary>
        ///   初始化语音卡硬件,并为每个通道分配语音缓冲区。
        ///   wusedCh可以用函数CheckValidCh来获得;
        ///   在调用本函数的时候,将为每路分配wFileBufLen大小的语音缓冲区,共计wusedCh*wFileBufLen,若申请不到,则返回-2。
        ///   buffer必须为1024的整数倍。
        ///   返回值:
        ///   0表示成功;
        ///   -1表示LoadDRV没有成功,造成本函数调用失败;
        ///   -2表示分别分配缓冲区失败;
        ///   列:EnableCard(8,1024*16)将会申请1024K的内存
        ///  </summary>
        ///  <param  name="wusedCh">工作的通道总数</param>
        ///  <param  name="wFileBufLen">驱动种为每通道分配的语音内存大小</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long EnableCard(short wusedCh, short wFileBufLen);
        ///  <summary>
        ///   关闭语音卡的硬件,释放缓冲区,程序结束(包括正常和不正常退出)时需要调用此函数
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void DisableCard();
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void GetSysInfo(ref  TC_INI_TYPE TmpIni);
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void GetSysInfoMore(ref  TC_INI_TYPE_MORE TmpMore);

        ///  <summary>
        ///  检测在当前机器内可用的通道总数。
        ///  返回值:
        ///  棕的可用通道数
        ///  </summary>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckValidCh();

        ///  <summary>
        ///  检测某个通道的类型
        ///  返回值:
        ///  CHTYPE_USER(0)表示内线;
        ///  CHTYPE_TRUNK(1)表示外线;
        ///  CHTYPE_EMPTY(2)表示悬空;
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckChType(short wChnlNo);

        ///  <summary>
        ///  检测某个通道的类型
        ///  返回值:
        ///  CHTYPE_USER(0)表示内线;
        ///  CHTYPE_TRUNK(1)表示外线;
        ///  CHTYPE_EMPTY(2)表示悬空;
        ///  CHTYPE_EMPTY(3)表示录音模块;
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckChTypeNew(short wChnlNo);

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool IsSupportCallerID();

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetPackrate(short wPackRate);

        ///  <summary>
        ///  维持文件录放音的持续进行,需要在处理函数的大循环中调用。
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void PUSH_PLAY();

        ///  <summary>
        ///  设定要检测的挂机忙音的参数。
        ///  </summary>
        ///  <param  name="BusyLen">忙音的时间长度,单位为秒</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetBusyPara(short BusyLen);

        ///  <summary>
        ///  设定拨号以后要检测的信号音的参数。
        ///  比如国际中规定拨号后的回铃音为响1秒,停止为4秒,忙音为0.35秒,写为SetDialPara(100,4000,350,7)
        ///  </summary>
        ///  <param  name="RingBack">回铃音中响声的时间长度,单位为毫秒</param>
        ///  <param  name="RingBack0">回铃音中两声之间间隔的时间长度,单位为毫秒</param>
        ///  <param  name="BusyLen">对方占线时返回的忙音信号的时间长度</param>
        ///  <param  name="RingTimes">一共响多少次认为是无人接听</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetDialPara(short RingBack, short RingBack0, short BusyLen, short RingTimes);

        ///  <summary>
        ///  读取D161A卡的序列号,注意:该序列号必须在LoadDRV之后,EnableCard之前。
        ///
        ///  </summary>
        ///  <param  name="wCardNo">卡号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long NewReadPass(short wCardNo);

        ///  <summary>
        ///  设定某通道的工作参数
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="cbWorkMode">选择要设定的工作模式</param>
        ///  <param  name="cbModeVal">参数值</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void D_SetWorkMode(short wChnlNo, byte cbWorkMode, byte cbModeVal);

        #endregion

        #region  振铃及摘挂机函数;

        ///  <summary>
        ///  检测(外线)是否有震铃信号或(内线)有无提机
        ///  比如:当函数返回1时,对于外线此时“提机”(OffHook)可以接通该路电话,而内线无需“提机”即可处于接通状态。
        ///  返回值:
        ///  1表示有振铃信号(外线)或话机提机(内线)
        ///  0表示无振铃信号(外线)或话机提机(内线)
        ///  
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool RingDetect(short wChnlNo);

        ///  <summary>
        ///  外线提机,对于内线,此函数不起作用。
        ///  注意:不要对内线通道调用本函数。
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void OffHook(short wChnlNo);

        ///  <summary>
        ///    外线挂机,对于内线,此函数不起作用。
        ///    注意:不要对内线调用本函数
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void HangUp(short wChnlNo);

        #endregion

        #region  放音函数;

        ///  <summary>
        ///  指定通道开始普通内存放音。当放音长度(dwPlayLen)大于系统缓冲区的长度(在函数EnableCard中定义)时,
        ///  需要函数PUSH_PLAY来维持录音的持续
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="PlayBuf">语音缓冲区地址</param>
        ///  <param  name="dwStartPos">在缓冲区中的偏移</param>
        ///  <param  name="dwPlayLen">放音的长度</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartPlay(short wChnlNo, byte[] PlayBuf, int dwStartPos, int dwPlayLen);

        ///  <summary>
        ///  指定通道停止内存放音,本函数可以停止内存普通放音、内存索引放音、内存循环放音。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopPlay(short wChnlNo);

        ///  <summary>
        ///  检查指定通道放音是否结束,本函数可以用于普通内存放音、索引内存放音、循环内存放音和文件放音。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool CheckPlayEnd(short wChnlNo);

        ///  <summary>
        ///  开始文件放音。停止该方式的放音,一定要用StopPlayFile。
        ///  检查放音是否结束,用CheckPlayEnd。
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        ///  <param  name="FileName"></param>
        ///  <param  name="StartPos"></param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartPlayFile(short wChnlNo, byte[] FileName, int StartPos);

        ///  <summary>
        ///  对指定通道停止文件放音。
        ///  对StartPlayFile开始的放音,必须用本函数来停止,这样才能关闭语音文件。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopPlayFile(short wChnlNo);

        ///  <summary>
        ///  初始化多文件放音。每开始一个新的多文件放音前调用此函数。
        ///  </summary>
        ///  <param  name="Line">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void RsetIndexPlayFile(short Line);

        ///  <summary>
        ///  增加多文件放音的放音文件。
        ///  返回值:
        ///  0代表失败,1代表成功。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="FileName">增加的语音文件名称</param>
        ///  <returns>bool</returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool AddIndexPlayFile(short wChnlNo, byte[] FileName);

        ///  <summary>
        ///  开始一个内存索引放音
        ///  返回值:0失败,1成功。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="pIndexTable">要放音的索引序号</param>
        ///  <param  name="wIndexLen">要放音的索引长度</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartPlayIndex(short wChnlNo, short[] pIndexTable, short wIndexLen);

        ///  <summary>
        ///  检查多文件放音是否结束,并维护多文件放音的连续性。当进行多文件放音时,必须用本函数以保证多文件放音的连续性。
        ///  返回值:
        ///  0未结束,1结束
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool CheckIndexPlayFile(short wChnlNo);

        ///  <summary>
        ///  停止多文件放音。  该函数停止指定通道的多文件放音,对于使用StartIndexPlayFile函数开始的多文件放音,结束时一定要调用本函数。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopIndexPlayFile(short wChnlNo);

        ///  <summary>
        ///  开始一个多文件放音。
        ///  当调用该函数成功后,必须循环调用CheckIndexPlayFile函数来检测放音是否结束没,
        ///  并维护多文件放音联系进行
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartIndexPlayFile(short wChnlNo);

        #endregion

        #region  录音函数

⌨️ 快捷键说明

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