Delphi之三汇模拟语音卡(SHT-8BPCIFAX)可复用源码

合集下载

在DELPHI中实现与ABPLC的通讯

在DELPHI中实现与ABPLC的通讯

在DELPHI中实现与ABPLC的通讯第一篇:在DELPHI中实现与AB PLC的通讯在DELPHI中实现与AB PLC的通讯【字体:大中小】引言美国罗克韦尔自动化公司的Allen-Bradley系列PLC是一个著名的可编程控制器产品,其产品体系基本上涵盖了工业控制产品的各个领域,并以其先进性、可靠性在各行各业的自动控制领域中得到了广泛的应用。

在应用AB PLC时,上位计算机监控软件的开发我们可以使用罗克维尔自动化公司的RSView32或其他公司的组态软件,也可以自己用开发工具来开发。

作为一个优秀的RAD(快速应用开发)开发工具,Delphi在广大开发设计人员中也得到了广泛的应用。

它不仅开创了“构件(Component)”时代,而且还拥有非常出色的编译器,极大地提高了开发人员开发程序的效率。

下面介绍在DELPHI中如何调用RSLinx的C SDK实现与AB PLC 的通讯的方法。

RSLinx简介与配置罗克韦尔自动化公司的RSLinx软件是A-B PLC通用的通信配置软件(2.2以上的版本支持对以太网的网关配置),它是一个链接Allen-Bradley 网络和设备到Microsoft Windows应用程序中的完全的32位通讯软件,应用的范围包括RSLogix和RSNetWorx的设备编程、网络组态,RSView32人机界面应用程序,还有用Microsoft Office、Web页或Visual Basic开发的数据查询应用程序等。

RSLinx也是一个OPC数据服务器和DDE服务器。

RSLinx目前主要有以下六个版本:RSLinx Lite、RSLinx Single Node、RSLinx OEM、RSLinx Professional、RSLinx Gateway、RSLinx SDK。

在RSLinx OEM以后的4个版本均支持开发OPC应用程序或C-API客户程序,并在RSLinx SDK中包括了开发OPC应用程序或C-API客户程序的技术资料。

Delphi XE8 iOS与Android移动应用开发教程[完整中文版]

Delphi XE8 iOS与Android移动应用开发教程[完整中文版]

Embarcadero (英巴卡迪诺)公司成立于1993年,总部位于旧金山,致力于为数据库专业人士和应用开发人员提供各种创新的辅助工具,方便用户在自己习惯的环境中设计、开发和运行维护各种应用系统。

主要面对IT 开发人员,独立软件供应商(ISV )、增值代理商(VAR )、数据库专业人士和大型企业IT 人员。

用户遍布70多个国家,全球拥有3百多万用户,90% 的“全球财富100”用户,97% 的“全球 2000”用户。

英巴卡迪诺引领创新的、多平台数据库和开发工具及软件许可证解决方案。

英巴卡迪诺使软件开发者和数据库专家能够使用业界最强大的工具设计、构建、优化以及跨平台运行他们的应用程序和数据库系统。

英巴卡迪诺专注于为其客户提供业界最全面、最强大的异构工具集,提高软件开发者和数据库专家的生产效率。

借助其被广泛认可、屡获殊荣的优秀产品,英巴卡迪诺能够使客户利用业界所有主流数据库平台、操作系统、框架和编程语言。

这种广度能够使客户在他们选择的环境中设计、构建和运行他们的软件应用程序及数据库系统,从而降低或避免使用多个专有的、平台特定的工具带来的约束、成本以及学习周期。

公司官网: .严禁复制目 录第一章 移动应用程序开发(iOS 和Android ) (18)1. 安装与配置 ............................................................................................................... 18 2. 使用基本用户界面控件 ............................................................................................ 19 3. 使用设备功能 ........................................................................................................... 21 4. 使用后端服务 ........................................................................................................... 22 5. 访问数据库 (22)第二章 配置Mac 上的开发环境(IOS ) (23)2.1 Mac 和 iOS 的要求 (23)2.2 配置 Mac 上的iOS 模拟器 (24)2.2.1 安装平台助手 ................................................................................................. 24 2.2.2 运行平台助手 . (25)2.2.3 在Mac 上安装Xcode (26)2.3 配置 Mac 上iOS 硬件设备运行环境 (28)2.3.1 在Mac 上安装Xcode 命令行工具 (28)2.3.2 注册一个开发者账户 (30)2.3.3 申请、下载并安装你的开发证书 (30)2.3.4 注册您的设备 (32)2.3.5 创建与安装配置文件 (33)第三章 配置WINDOWS PC 上的开发环境(iOS) ............................................................. 35 严禁复制3.1 配置 RAD Studio 环境 (36)3.1.1创建与Mac 连接的配置 (36)3.1.2为iOS 设备添加一个SDK (39)第四章 配置WINDOWS PC 上的开发环境 (Android) (41)4.1设置 RAD Studio 环境 (41)4.1.1 安装RAD Studio 时 android 开发工具安装选项 (42)4.1.2 在开发环境中配置 Android SDK (44)4.2安装Android USB 驱动程序(必须) (48)第五章 创建多设备应用程序 (iOS and Android) (51)5.1在你开始之前 (51)5.2创建一个新的Android 或iOS FireMonkey 应用 (52)5.3选择Style ................................................................................................................... 53 5.4在多设备窗体上放置控件 .. (53)5.5添加视图到项目 (57)5.6编写用户单击按钮的事件处理程序 (57)5.7测试移动应用程序 (59)5.7.1在Android 设备上测试应用程序 (60)5.7.2在 iOS 测试应用程序 (61)第六章 使用不同风格的按钮控件 (iOS and Android ) (64)6.1移动平台中的按钮 (64)6.2定义按钮控件的友好界面 ......................................................................................... 65 严禁复制6.2.1使用按钮控件的 TintColor 和 IconTintColor 属性 (66)6.2.2自定义按钮控件的图片 (68)6.3使用按钮控件创建Segmented Control (69)6.4在工具栏创建 Scope Bar (71)第七章 使用日历控件选取日期 (iOS and Android) (72)7.1移动平台中的日历 (72)7.2为用户更改的日期编写事件处理程序 (74)第八章 组合框控件的使用 (iOS and Android) (76)8.1多设备应用程序中的选择器 (76)8.2使用代码建立列表数据项 (79)8.3显示一个指定的项目 (79)8.4编写用户选择后的事件处理程序 .............................................................................. 81 第九章 使用地图控件 (iOS and Android) .. (83)9.1TMapView 控件的基本功能 ........................................................................................ 84 9.2创建示例应用程序.. (84)9.2.1配置 Android 应用程序以使用 TMapView 控件 (84)9.2.2设计用户界面 (84)9.3运行这个应用程序 (89)第十章 配置Android 应用程序使用谷歌地图 (91)10.1获取谷歌地图API 密钥 (91)10.1.1检索您的应用程序证书 ................................................................................ 91 严禁复制10.1.2在谷歌 Api 控制台中创建 API 项目 (92)10.1.3申请Maps API 密钥 (93)10.2设定具体项目的选项 (93)10.2.1在许可列表中检查配置 (94)10.2.2检查受权列表 (95)10.2.3设置apiKey 键值 ......................................................................................... 96 第十一章 使用MultiView 控件(iOS and Android) .. (97)11.1关于TMultiView 控件 (97)11.1.1主面板呈现方式 ........................................................................................... 98 11.2设计用户界面 ......................................................................................................... 102 11.3运行示例应用程序 .................................................................................................. 108 11.4移动应用使用TMultiView 的样例程序 .................................................................. 109 第十二章 使用Web 浏览器控件 (iOS and Android) (110)12.1设计用户界面 ......................................................................................................... 111 12.2编写Edit 改变URL 后自动打开网页的处理程序 (113)12.2.1编写一个打开网页的公用方法 ................................................................... 114 12.2.2编写 OnChange 事件处理程序代码 .......................................................... 115 12.2.3编写Back 按钮的事件处理程序 ................................................................ 116 12.3为 Web 浏览器应用程序选择适合的虚拟键盘 ...................................................... 117 12.4移动应用使用WebBrowser 的样例程序 ................................................................ 118 第十三章 使用选项卡控件(iOS and Android) ................................................................... 119 严禁复制13.1让iOS 与 Android 上的选项卡使用本机样式 ......................................................... 119 13.2在窗体设计器中设计选项卡 . (120)13.2.1比较 iOS 与 Android 平台上选项卡设置 ................................................... 124 13.3让选项卡使用自定义的多分辨率图标 . (130)13.3.1在选项卡上显示多分辨率自定义图标 ........................................................ 131 13.3.2使用单分辨率位图为自定义图标 ............................................................... 134 13.4轻松管理选项卡内部控件 ...................................................................................... 136 13.5在运行时更改页面 .. (138)13.5.1通过用户点击选项卡 .................................................................................. 138 13.5.2通过 Actions 与 ActionList ......................................................................... 138 13.5.3通过代码 ..................................................................................................... 143 第十四章 使用LiveBindings 填充ListView (iOS and Android) .......................................... 145 14.1创建项目 ................................................................................................................. 145 14.2添加字段 ................................................................................................................. 147 14.3创建LiveBindings .................................................................................................... 148 14.3添加更多的字段(图像、价格) ........................................................................... 151 14.5添加onButtonClick 事件处理程序 .. (152)14.5.1添加 onButtonClick 事件处理程序............................................................. 152 14.6查看结果 ................................................................................................................. 153 第十五章 使用ListBox 控件显示数据 (iOS and Android) .. (154)15.1使用ListBox 控件在移动平台上显示数据 .............................................................. 154 严禁复制15.1.1普通列表 ..................................................................................................... 154 15.1.2分组列表 ..................................................................................................... 155 15.1.3搜索框 ......................................................................................................... 156 15.2创建ListBox 列表项 (156)15.2.1添加标题 ..................................................................................................... 159 15.2.2添加组页眉/页脚到列表.............................................................................. 160 15.2.3分组显示各自的列表项 ............................................................................... 161 15.2.4添加复选框或其他附件到列表项 ............................................................... 162 15.2.5添加图标到列表项 ...................................................................................... 162 15.2.6添加详细信息到项目 .................................................................................. 163 15.2.7运行应用程序 .............................................................................................. 163 15.3创建ListBox 应用程序 .. (163)15.3.1从您的代码添加项目到ListBox ................................................................. 164 15.3.2创建一个溢出菜单 ...................................................................................... 167 15.3.3创建溢出按钮的事件处理程序 ................................................................... 169 15.3.4增加搜索框 .................................................................................................. 170 15.3.5运行应用程序 .............................................................................................. 171 第十六章 使用LiveBindings 来填充 ListBox (iOS and Android) . (172)16.1创建项目 ................................................................................................................. 172 16.2创建 LiveBindings .................................................................................................... 175 16.3运行应用程序 ......................................................................................................... 177 严禁复制第十七章 让布局适应不同大小与方向的窗体 (iOS and Android) (178)17.1FireMonkey 控件特性 .............................................................................................. 178 17.2FireMonkey 控件常见布局属性 . (178)17.2.1 Align 属性 ................................................................................................... 178 17.2.2 Margins 属性 .............................................................................................. 180 17.2.3 Padding 属性 .............................................................................................. 180 17.2.4 Anchors 属性 .............................................................................................. 181 17.3使用Tlayout 控件 ................................................................................................... 182 第十八章 拍摄并分享照片,分享文本 (iOS and Android) .. (184)18.1教程主题 ................................................................................................................. 188 第十九章 使用位置传感器 (iOS and Android). (189)19.1设计用户界面 ......................................................................................................... 190 19.3读取位置信息(纬度、 经度) ................................................................................... 192 19.2位置传感器 ............................................................................................................. 192 19.4在谷歌地图上显示当前位置 .................................................................................. 194 19.5使用反向地理编码 .................................................................................................. 195 19.6在列表框中显示一个可读的地址 ........................................................................... 198 19.7提升用户授权开启位置传感器的方法 ................................................................... 199 第二十章 使用通知提示(iOS and Android) .. (200)20.1三个基本的通知或警报样式 .................................................................................. 200 20.2移动设备上的通知中心 .......................................................................................... 201 20.3访问通知服务 ......................................................................................................... 202 严禁复制20.4添加 FMLocalNotificationPermission (仅iOS 8) ....................................................... 203 20.5从代码中设置图标徽章数和通知数 ....................................................................... 203 20.6计划通知 ................................................................................................................. 205 20.7重复通知消息 ......................................................................................................... 207 20.8更新或取消一个计划(或重复)通知消息 ........................................................... 209 20.9立即提交通知消息 .................................................................................................. 210 20.10自定义通知声音 ................................................................................................... 212 20.11横幅通知或提示通知 ............................................................................................ 216 20.12给提示通知增加控制 (仅iOS) ............................................................................... 217 20.13添加通知响应 ....................................................................................................... 219 20.14运行应用 ............................................................................................................... 220 第二十一章 使用远程通知 (iOS and Android) ............................................................... 221 21.1远程推送通知 ......................................................................................................... 221 21.2 REST BAAS 框架 ....................................................................................................... 222 21.3教程主题 ................................................................................................................. 222 第二十二章 多设备应用程序接收推送通知 .. (223)22.1设计和设置用户界面 .............................................................................................. 223 22.2创建事件处理程序 .................................................................................................. 228 22.3 Android 的设置 ....................................................................................................... 231 22.4 iOS 的设置 ............................................................................................................... 232 22.5在移动设备上运行您的应用程序 ........................................................................... 232 严禁复制第二十三章 在移动设备上使用电话拨号程序 (iOS and Android) (236)23.1关于移动设备上的电话拨号服务 ........................................................................... 236 23.2访问电话拨号服务 .................................................................................................. 236 23.3设计用户界面 ......................................................................................................... 238 23.4获取运营商信息 .. (238)23.4.1运行应用程序 .............................................................................................. 239 23.5拨打电话 ................................................................................................................. 240 23.6检测通话状态的变化 . (242)23.6.1编写 OnCallStateChanged 事件处理程序 ................................................ 243 第二十四章 使用 BaaS 后端存储 (iOS and Android) (247)24.1在Kinvey 与 Parse 中准备你的应用程序 ................................................................ 248 24.2设计和设置用户界面 .............................................................................................. 248 24.3添加后端控件 ......................................................................................................... 249 24.4创建和存储对象 ..................................................................................................... 251 24.5删除对象 ................................................................................................................. 252 24.6检索对象 ................................................................................................................. 254 24.7运行你的应用程序 .................................................................................................. 258 第二十五章 使用 dbExpress 访问 InterBase ToGo (iOS and Android) (260)25.1使用 dbExpress 连接数据库 .................................................................................... 261 25.2设计与设置用户界面 .............................................................................................. 262 25.3连接到数据 ............................................................................................................. 263 严禁复制25.4部署您的应用程序到移动设备 (266)25.4.1在移动设备上部署 InterBase ToGo 、dbExpress 驱动及数据文件......... 266 25.4.2修改代码以连接到移动设备本地数据库文件 ............................................ 269 25.5在模拟器或移动设备上运行应用程序 ................................................................... 271 25.6故障排除 ................................................................................................................. 272 第二十六章 使用 FireDAC 访问 InterBase ToGo (iOS and Android) . (273)26.1使用 FireDAC 连接数据库 ....................................................................................... 275 26.2设计与设置用户界面 .............................................................................................. 275 26.3连接到数据 ............................................................................................................. 276 26.4部署您的应用程序到移动设备 (280)26.4.1在移动设备上部署 InterBase ToGo 所必须的文件及数据文件 ............... 280 26.5在模拟器或移动设备上运行应用程序 ................................................................... 283 26.6故障排除 ................................................................................................................. 284 第二十七章使用 dbExpress 访问 SQLite (iOS and Android).......................................... 285 27.1使用 dbExpress 连接数据库 .................................................................................... 286 27.2在 Windows 下创建开发数据库 (286)27.2.1在数据资源管理器创建数据库 ................................................................... 286 27.2.2在数据资源管理器中创建表 ....................................................................... 288 27.3设计与设置用户界面 .............................................................................................. 289 27.4连接到数据 ............................................................................................................. 291 27.5编写显示删除按钮的功能 ...................................................................................... 293 严禁复制27.6编写新建条目功能 .................................................................................................. 294 27.7创建删除按钮事件处理程序 .................................................................................. 298 27.8设置移动平台数据库部署 .. (300)27.8.1在Deployment Manager 添加并配置您的数据库文件 ............................. 300 27.9修改代码以连接到移动设备本地数据库文件 .. (301)27.9.1指定在移动设备上的SQLite 数据库的位置 .............................................. 301 27.9.2自动创建表 .................................................................................................. 302 27.10在模拟器或移动设备上运行应用程序 ................................................................. 303 第二十八章 使用 FireDAC 访问 SQLite (iOS and Android) (305)28.1使用 FireDAC 连接数据库 ....................................................................................... 306 28.2使用 FireDAC 创建数据库 ....................................................................................... 306 28.3设计与设置用户界面 .............................................................................................. 308 28.4使用 LiveBindings 向导 .. (310)28.4.1添加 LiveBinding 控件 ................................................................................ 310 28.4.2连接数据 ..................................................................................................... 312 28.4.3在ListView 中显示shopitem ..................................................................... 314 28.5编写显示删除按钮的功能 ...................................................................................... 314 28.6编写新建条目功能 .................................................................................................. 315 28.7创建删除按钮事件处理程序 .................................................................................. 319 28.8为运行应用程序作准备 .......................................................................................... 321 28.9设置移动平台数据库部署 ...................................................................................... 321 严禁复制28.9.1在Deployment Manager 添加并配置您的数据库文件 ............................. 321 28.10修改代码以连接到移动设备本地数据库文件 (322)28.10.1指定在移动设备上的SQLite 数据库的位置 ............................................ 322 28.10.2自动创建表 ................................................................................................ 323 28.11在模拟器或移动设备上运行应用程序 ................................................................. 324 第二十九章 从移动客户端连接到企业数据库 (iOS and Android) (326)29.1创建中间层 DataSnap 服务 (327)29.1.1创建DataSnap 服务VCL 应用程序 .......................................................... 327 29.1.2定义DataSnap 服务器上的数据集 ............................................................ 329 29.1.3暴露DataSnap 服务器数据集 ................................................................... 331 29.1.4运行 DataSnap 服务 .................................................................................. 332 29.2创建连接到DataSnap 服务器的移动应用程序 ...................................................... 333 29.3部署 MIDAS 库到 iOS 模拟器 .................................................................................. 336 29.4在移动平台上运行你的应用程序 ........................................................................... 336 第三十章 在移动应用中使用 FireDAC (iOS and Android) (337)30.1使用 FireDAC 连接数据库 ....................................................................................... 337 30.2设计与设置用户界面 .............................................................................................. 338 30.3使用 LiveBindings 向导 .. (339)30.3.1添加 LiveBinding 控件 ................................................................................ 339 30.3.2添加 ListView 控件 ..................................................................................... 341 30.4在ListView 中显示数据 .......................................................................................... 343 严禁复制30.5为运行应用程序作准备 .......................................................................................... 344 30.6设置移动平台数据库部署 .. (344)30.6.1在Deployment Manager 添加并配置您的数据库文件 ............................. 344 30.7修改代码以连接到移动设备本地数据库文件 .. (345)30.7.1指定在移动设备上的SQLite 数据库的位置 .............................................. 345 30.8在模拟器或移动设备上运行应用程序 ................................................................... 347 附一:使用控件汇总表 ......................................................................................................... 348 附二:在目标平台上按钮可使用样式与颜色汇总表............................................................ 351 附三:Android 权限设置 . (357)为 FireMonkey Android 应用程序设置一些基本的权限 (357)Internet 权限始终设置为开发配置 ........................................................................ 358 基本使用权限 ................................................................................................................. 358 高级用途权限 ................................................................................................................. 363 附四:使用Action Lists 拍摄和分享图片及分享文本 ...................................................... 367 构建应用程序的用户界面 .............................................................................................. 367 用移动设备摄像头拍照 .................................................................................................. 368 将图片保存到设备照片库 .............................................................................................. 370 使用移动设备图片库中的图片 ...................................................................................... 371 使用图像编辑 ................................................................................................................. 371 共享或打印图片 ............................................................................................................. 374 共享文本 ......................................................................................................................... 375 附五:使用 FireMonkey 接口拍照 (378)构建您的应用程序的用户界面 ...................................................................................... 378 严禁复制使用设备上的相机拍照 (379)运行应用程序 ......................................................................................................... 381 将图片保存到设备照片库 ...................................................................................... 382 从设备图片库中选择一张图片 ...................................................................................... 383 附六:设置消息传递服务 (386)到谷歌注册 ..................................................................................................................... 386 苹果公司注册 .. (387)在苹果开发者计划上创建 iOS 应用程序 ID .......................................................... 387 为您的应用程序创建证书 ...................................................................................... 390 创建一个配置文件 .................................................................................................. 394 导出P12 证书 ........................................................................................................ 399 附七:部署IBLite 和测试 IBToGo 许可 . (401)IBLite 许可证 .................................................................................................................. 401 IBToGo 测试部署试用许可证........................................................................................ 403 IBToGo 生产部署许可证 ............................................................................................... 405 从早期产品版本迁移InterBase 的IBLite 和ToGo (406)严禁复制。

三汇语音卡CIT呼叫中心系统破解帮助手册

三汇语音卡CIT呼叫中心系统破解帮助手册

呼叫中心系统使用手册目录第一条自动语音应答(IVR) (4)第二条智能选择座席(ACD) (4)第三条呼叫中心服务器(CTI Server) (4)第四条座席子系统 (12)4.1座席基本功能 (14)4.1.1登录 (14)4.1.2注销 (15)4.1.3暂停服务 (15)4.1.4恢复服务 (15)4.1.5工作示忙 (15)4.1.5工作示闲 (15)4.1.6点播 (15)4.1.7停止点播 (16)4.1.8保留 (16)4.1.9多方通话 (16)4.1.10内部通话 (16)4.1.11呼出 (16)4.1.12接收传真.................................................................................................... 错误!未定义书签。

4.1.13发送传真.................................................................................................... 错误!未定义书签。

4.2班长席功能 (16)4.2.1拦截通话 (16)4.2.2监听通话 (17)4.2.3强插通话 (17)4.2.4强制签出 (17)第五条坐席管理功能 (17)第六条语音留言功能 (20)第七条录音管理功能 (21)第八条客户资料管理 (22)第九条话务查询统计 (22)9.1中继呼叫报表 (23)9.2坐席呼叫分析表 (23)第十条传真服务功能................................................................................................... 错误!未定义书签。

10.1发送传真 ....................................................................................................... 错误!未定义书签。

Altair Basic 3.X和4.X 88-PIO 引导加载器说明书

Altair Basic 3.X和4.X 88-PIO 引导加载器说明书

Loading Basic with the 88-PIO BoardIncluding support for the Oliver Audio Engineering OP-80 Paper Tape ReaderMartin Eberhard 6 June 2013Corrected 12 Jul 2013. Corrected and enhanced 15 Dec 2019.Standard 88-PIO Bootstrap LoaderBelow is the standard Altair Basic 3.X and 4.X 88-PIO bootstrap loader, to be toggled in via the front panel. Important 88-PIO Bootstrap Loader notes:1.The 88-PIO bootstrap loader in the Basic 4.0 manual is incorrect. The correction is noted below.2.This loader will fail if the reader generates any strobe pulses on the parallel port interface before the dataload. For example, it is common for a paper tape reader to generate strobe pulses while loading paper tape into the reader. (See the next section for an improved bootstrap loader.)3.MITS changed the standard address of the 88-PIO between Basic 3.X and Basic4.X. For Basic 3.X, the 88-PIObase address is 000. For Basic 4.X and later, the 88-PIO base address is 004. You must set up the 88-PIO hardware correctly for the version of Basic that you plan to load.4.The bytes at bootstrap loader addresses 001, 004, and 014 all change with the version of Basic.5.The byte at bootstrap loader address 002 changes for different sizes of Basic.6.Basic 3.X uses the same port for loading Basic as it does for the Basic console. This makes loading Basic 3.Xfrom a stand-alone paper tape reader tricky.7.The “leader” portion of the paper tape should be positioned in the reader before running the bootstraploader. The leader is octal 256 for Basic 3.X, and octal 302 for Basic 4.X and later. (Paper tapes often have several inches of nulls before the leader. Nulls have only the sprocket holes punched.)8.The sense switches are set differently depending on the version of Basic. See below.Octal Address Octal Data Mnemonic Comment000 041 LXI H,LADDR Checksum Loader last address001 302 (256 for Basic 3.X, 302 for Basic 4.X and later)002 037 (017 for 4K, 037 for 8K, 077 for Extended Basic)003 061 LXI SP,STACK Used for the following return instructions004 023005 000006 333 IN PSTAT Get 88-PIO status007 004 (000 for Basic 3.X, 004 for Basic 4.X and later)010 346 ANI PDAVAIL Any received data available?011 002 <---Altair Basic 4.0 manual had incorrect 001 here012 310 RZ No: loop back to address 003013 333 IN PDATA Get 88-PIO data014 005 (001 for Basic 3.X, 005 for Basic 4.X and later)015 275 CMP L Is this a leader byte?016 310 RZ Yes: loop back to address 003017 055 DCR L Next address, set Z flag if done020 167 MOV M,A Write data to memory021 300 RNZ Loop back to address 003 unless done022 351 PCHL Jump to loaded checksum loader023 003 Local stack address for above returns024 000Improved 88-PIO Bootstrap LoaderThe 88-PIO will latch and hold its input-port data until the input port is read by software. It is common for the 88-PIO’s data latch to contain a garbage data byte that was generated, for example, by loading paper tape into the reader. (It is nearly impossible not to create a garbage byte while setting up an OP-80 paper tape reader.)If the 88-PIO input port does contain a garbage byte at the beginning of the load, then the load will fail – since the MITS bootstrap loader will interpret the garbage byte as the first byte of the paper tape data.The simple solution (implemented in the following bootstrap loader) is for the bootstrap loader to perform one read of the 88-PIO data port during its initialization phase, to clear out any potential garbage data. This improvement should work for any device that is attached to the 88-PIO.Important notes for this modified 88-PIO Bootstrap Loader1.MITS changed the standard address of the 88-PIO between Basic 3.X and Basic 4.X. For Basic 3.X, the 88-PIObase address is 000. For Basic 4.X and later, the 88-PIO base address is 004. You must set up the 88-PIO hardware correctly for the version of Basic that you plan to load.2.The bytes at bootstrap loader addresses 001, 004, 011 and 016 all change with the version of Basic.3.The byte at bootstrap loader address 002 changes for different sizes of Basic.4.Basic 3.X uses the same port for loading Basic as it does for the Basic console. This makes loading Basic 3.Xfrom a stand-alone paper tape reader tricky.5.The “leader” portion of the paper tape should be positioned in the reader before running the bootstraploader. The leader is octal 256 for Basic 3.X, and octal 302 for Basic 4.X and later. (Paper tapes often have several inches of nulls before the leader. Nulls have only the sprocket holes punched.) For an OP-80 reader, position the tape such that the optical sensors are blocked by paper tape (between holes in the leader) before running the bootstrap loader.6.Set the sense switches for loading from the 88-PIO, before running the bootstrap loader. See below.Octal Address Octal Data Mnemonic Comment000 041 LXI H,LADDR Checksum Loader last address001 302 (256 for Basic 3.X, 302 for Basic 4.X and later)002 037 (017 for 4K, 037 for 8K, 077 for Extended Basic)003 333 IN PDATA Read 88-PIO data to clear OP-80004 005 (001 for Basic 3.X, 005 for Basic 4.X and later)005 061 LXI SP,STACK Used for the following return instructions006 025007 000010 333 IN PSTAT Get 88-PIO status011 004 (000 for Basic 3.X, 004 for Basic 4.X and later)012 346 ANI PDAVAIL Any received data available?013 002014 310 RZ No: loop back to address 003015 333 IN PDATA Get 88-PIO data016 005 (001 for Basic 3.X, 005 for Basic 4.X and later)017 275 CMP L Is this a leader byte?020 310 RZ Yes: loop back to address 003021 055 DCR L Next address, set Z flag if done022 167 MOV M,A Write data to memory023 300 RNZ Loop back to address 003 unless done024 351 PCHL Jump to loaded checksum loader025 003 Local stack address for above returns026 000Basic 3.X Sense Switch SettingsThe Basic 3.X loader uses the same port for loading Basic and for the Console.Load & Console A15 A14 A13 A12 A11 A10 A9 A888-SIOA,B,C (not rev 0) 0 0 0 0 0 0 0 088-SIOA,B,C (rev 0) 0 1 0 0 0 0 0 088-PIO 0 0 1 0 0 0 0 088-4PIO 0 0 0 1 0 0 0 088-2SIO-0 (1 stop bit) 0 0 0 0 1 1 0 088-2SIO-0(2 stop bits) 0 0 0 0 1 0 0 0Basic 4.X Sense Switch SettingsThe Basic 4.X loader makes a distinction between the Load Source and the Console Device, allowing you to load from one device, and use another for the Basic console.Load Source A11 A10 A9 A8 Console Device A15 A14 A13 A12 88-2SIO-0 (2 stop bits) 0 0 0 0 88-2SIO-0 (2 stop bits) 0 0 0 0 88-2SIO-0 (1 stop bit) 0 0 0 1 88-2SIO-0 (1 stop bit) 0 0 0 1 88-SIO 0 0 1 0 88-SIO 0 0 1 0 88-ACR 0 0 1 1 (not allowed) 0 0 1 1 88-4PIO 0 1 0 0 88-4PIO 0 1 0 0 88-PIO 0 1 0 1 88-PIO 0 1 0 1 HSR 0 1 1 0 (not allowed) 0 1 1 0Basic 4.X Loader Error MessagesError Code MeaningC Checksum error. Bad tape data.M Memory error. Data won’t store properly.O Overlay error. Attempt to overwrite checksum loader.I Invalid Load source. Illegal sense -switch setting.Basic 4.X Initialization Dialog4K BasicMEMORY SIZE? (<RETURN> to use all memory. Basic uses 3.4K.)TERMINAL WIDTH? (<RETURN> for 72 columns)SIN? (Y saves SIN, SQR and RND. N deletes SIN and brings next question.)SQR? (Y saves SQR and RND. N deletes SQR and brings next question.)RND? (Y saves RND, N deletes RND.)8K BasicMEMORY SIZE? (<RETURN> to use all memory. Basic uses 6.2K.)TERMINAL WIDTH? (<RETURN> for 72 columns)WANT SIN-COS-TAN-ATN? (Y or N)Extended BasicMEMORY SIZE? (<RETURN> to use all memory. Basic uses 14.6K.)LINEPRINTER? (O for 80LP, C for C700, Q for Q70)WANT SIN-COS-TAN-ATN? (Y or N)Connecting the OP-80 to the 88-PIOThe OP-80 has just one configuration jumper, that selects either active-high or active-low acknowledge. This jumper should be set for Active low acknowledge, since the BIN output from the 88-PIO is active low.Connect the OP-80 to the 88-PIO via a DB25 connector set on the back of the Altair, as follows. The wire colors for the 88-PIO are just suggestions. The DB25 pinout is compatible with the Altair 88-4PIO. The wire colors for the OP-80 are those found on its rainbow ribbon cable.88-PIO DB25 OP-80 Function 8212 function Pin Wire color Pin Wire Color Pin Function N/C 1 Orange 7 RDASBI H STB 19 Orange/black 2 Brown 6 /RDABIN H /INT 20 White 3 White 5 /ACKDI0 H DI0 11 Brown 4 Brown 1 D0DI1 H DI1 12 Red 5 Red 16 D1Ground Note 1Green/black 6 Green 8 GroundVcc Note 1 Blue/black 7 Blue 9 +5V89DO6 G DO6 7 Grey/black 10DO7 G DO7 8 Pink 11SBO G STB 9 Light Blue 12BO G /INT 10 Light Green 13DI2 H DI2 13 Orange 14 Orange 2 D2DI3 H DI3 14 Yellow 15 Yellow 15 D3DI4 H DI4 15 Green 16 Green 3 D4DI5 H DI5 16 Blue 17 Blue 14 D5DI6 H DI6 17 Violet 18 Violet 4 D6DI7 H DI7 18 Grey 19 Grey 13 D7DO0 G DO0 1 Yellow/black 20 Yellow 10 S1DO1 G DO1 2 Red/black 21 Red 11 S2DO2 G DO2 3 Black 22 Black 12 SPAREDO3 G DO3 4 Brown/black 23DO4 G DO4 5 Violet/black 24DO5 G DO5 6 White/black 25Note 1: The 88-PIO (amazingly) has no ground pin on its interface. (See page 12 of the 88-PIO manual.) Because the OP-80 is powered by the interface, it is necessary to provide both ground and regulated +5V tothe DB25, from the 88-PIO. You can do this (without damaging the 88-PIO board) by tack-soldering a 3-pin connector onto the back of the 88-PIO board, at the top, where the +5V trace is parallel to the groundtrace. (Use a 3-pin connector so that you can key it, to prevent connecting it the wrong way.) Then put a mating connector on the wires from DB25 pins 06 and 08, and plug this connector into the one that you installed on the 88-PIO.•Since Basic 3.X uses the same port for loading Basic as it does for the console, the OP-80 (or any stand-alone paper tape reader) is not practical for loading Basic 3.X. However, the OP-80 works great for loading Basic 4.X. •Pull the paper tape through the OP-80 at about 2 feet per second. A crank-driven paper tape winder is an excellent addition to the OP-80.。

三汇语音卡API说明

三汇语音卡API说明

三汇语音卡API说明using System;using System.Runtime.InteropServices;using System.Text;namespace shpa3api{/// <summary>/// SsmApi三汇语音卡API说明。

/// </summary>//-----------------------------------------------------------------------// definition of the mode of the MediaParam//-----------------------------------------------------------------------public enum MediaParamMode{IPM_SENDRECV = 0,IPM_RECVONLY = 1,IPM_SENDONLY = 2,}//-----------------------------------------------------------------------// definition of channel type, which can be retrieved by invoking// function "SsmGetFlag()" and set by invoking "SsmSetFlag()"//-----------------------------------------------------------------------public enum ChFlag{F_RCVDTMFSENS=1, //接收DTMF敏感度F_TXDTMFAMP=2, //发送DTMF信号强度F_RCVPHONUMHOLDUP=3, //被叫号码拦截标记F_RELATIVEENGYHOOKDETECT=4, //是否启用模拟电话线被叫摘机检测新算法F_RXR2FILTERTIME=5, //R2接收滤波时间F_RECTOFILEA_CALLBACKTIME = 6,F_CALLERIDSTYLE=7,F_InVoiceToBus=8,F_ClearInVoiceOnRcvDtmf=9,F_MixerResToBus=10,F_HighAndLowFreqEnScale=11,F_DualAndAllFreqEnScale=12,F_EchoCancelInFsk=13,//设置Fsk收发过程中的回波开关F_ChToRingingOnRingCnt=14,F_ISDNNet_WaitRemotePickup=15,F_ClearInVoiceOnRcv450Hz=16};//-----------------------------------------------------------------------// definition of channel type, which can be retrieved by invoking // function "SsmGetChType()"//-----------------------------------------------------------------------/*enum{ANALOG_CH=0,INTER_CH=1,USER_CH=2,REC_CH=3,SS1_CH=4,FAX_CH=5,TUP_CH=6,ISDN_USER_CH=7,ISDN_NET_CH = 8,SOFTFAX_CH = 9,MAGNET_CH = 10};*///-----------------------------------------------------------------------// definition of blocking reason, which can be retrieved by invoking // function "SsmGetBlockReason()"//-----------------------------------------------------------------------public enum BlockReason{BLOCKBY_NULL,BLOCKBY_TupRcvMGB,BLOCKBY_TupRcvHGB,BLOCKBY_TupRcvSGB,BLOCKBY_TupWaitRLGTimeout,BLOCKBY_TupBlockByApp,};//-----------------------------------------------------------------------// Definition of status on blocking remote circuit or circuit groups, // which might be used by following functions// 1. "SsmChkBlockRemoteXXX()"// 2. "SsmChkBlockRemoteXXX()"//-----------------------------------------------------------------------public enum RemoteBlockStatus{BLOCKREMOTE_Unblocked = 0, // no block-signal is issuedBLOCKREMOTE_Blocked = 1, // is in blocked state nowBLOCKREMOTE_WaitBlockAck = 2, // waiting for acknowledgement signal after sending block-signalBLOCKREMOTE_WaitUnblockAck = 3, // waiting for acknowledgement signal after sending unblock-signal};//-----------------------------------------------------------------------// Definition of local blocking status on circuit or circuit groups,// which might be used by following functions// "SsmQueryLocalXXXBlockState()"//-----------------------------------------------------------------------public enum LocalBlockStatus{BLOCK_AppBlockCic = 1, // channel is blocked by invoking SsmBlockLocalCh()BLOCK_TupRcvBLO = 2, // channel is blocked by received BLOBLOCK_TupRcvSGB = 4, // channel is blocked by received SGBBLOCK_TupRcvHGB = 8, // channel is blocked by received HGBBLOCK_TupRcvMGB = 16, // channel is blocked by received MGBBLOCK_AppBlockPCM = 32, // channel is blocked by invoking SsmBlockLocalPCM() }//-----------------------------------------------------------------------// Definition of channel unavailable reason//-----------------------------------------------------------------------public enum ReasonUnavailable{UNAVAILABLE_PcmSyncLos = 1,UNAVAILABLE_Mtp3Unusuable = 2,}//-----------------------------------------------------------------------// 函数调用失败原因的常量定义,用于函数SsmGetLastErrCode()返回值//-----------------------------------------------------------------------public enum ErrorReason{C_ERROR_INIT_FAILURE =0,C_ERROR_SSMAPI_UNOPENED =1,C_ERROR_INVALID_APPCH =2,C_ERROR_UNSUPPORTED_OP =3,C_ERROR_INDEX_UNOPENED =4,C_ERROR_INVALID_BUSCH =5,C_ERROR_OP_UNOPENED =6,C_ERROR_INVALID_FORMAT =7,C_ERROR_INVALID_PARAMETER =8,C_ERROR_FILEOP_FAILURE =9,C_ERROR_MEMORY_FAILURE =10,C_ERROR_RESOURCE_USEUP =11,C_ERROR_SYSTEM =12,C_ERROR_IdleChNotFound =13,C_ERROR_OP_FAILURE =14,C_ERROR_INVALID_APPSPYCIC =15,C_ERROR_FAX_NOFILE =16,};//-----------------------------------------------------------------------// 自动拨号任务失败的常量定义,用于函数SsmGetAutoDialFailureReason()返回值//-----------------------------------------------------------------------public enum AutoDialFailureReason{ATDL_NULL=0, // 没有呼出任务ATDL_Cancel=1, // 应用程序主动取消ATDL_WaitDialAnsTimeout=2,// 等待被叫应答超时ATDL_WaitRemotePickupTimeout=3,// 等待被叫摘机超时ATDL_PcmSyncLos=4, // PCM链路基本祯失步超过100msATDL_Mtp3Unusable=10,// No.7信令:信令不可用ATDL_RcvSSB=11, // No.7信令:收到SSBATDL_RcvSLB=12, // No.7信令:收到SLBATDL_RcvSTB=13, // No.7信令:收到STBATDL_RcvUNN=14, // No.7信令:收到UNNATDL_RcvSEC=15, // No.7信令:收到SECATDL_RcvCGC=16, // No.7信令:收到CGCATDL_RcvNNC=17, // No.7信令:收到NNCATDL_RcvCFL=18, // No.7信令:收到CFLATDL_RcvLOS=19, // No.7信令:收到LOSATDL_RcvSST=20, // No.7信令:收到SSTATDL_RcvACB=21, // No.7信令:收到ACBATDL_RcvDPN=22, // No.7信令:收到DPNATDL_RcvEUM=23, // No.7信令:收到EUMATDL_RcvADI=24, // No.7信令:收到ADIATDL_RcvBLO=25, // No.7信令:收到BLOATDL_DoubleOccupy=26,// No.7信令:检出同抢ATDL_CircuitReset=27, // No.7信令:收到电路/群复原信号ATDL_BlockedByRemote=28, // No.7信令:电路被对端交换机闭塞ATDL_SS1WaitOccupyAckTimeout=40, // No.1信令:等待占用应答信号超时ATDL_SS1RcvCAS_HANGUP=41,// No.1信令:收到后向拆线信号ATDL_SS1RcvA4=42, // No.1信令:收到A4信号(机键拥塞)ATDL_SS1RcvA5=43, // No.1信令:收到A5信号(空号)ATDL_SS1RcvUndefinedAx=44,// No.1信令:收到未定义的后向A组信号ATDL_SS1RcvUndefinedAxOnTxCallerId=45,// No.1信令:送主叫时收到未定义的后向A组信号ATDL_SS1WaitAxTimeout=46, // No.1信令:等候接收后向A 组信号超时ATDL_SS1WaitAxStopTimeout=47, // No.1信令:等候后向A组信号停发超时ATDL_SS1WaitAxTimeoutOnTxCallerId=48,// No.1信令:送主叫时等候后向A 组信号超时ATDL_SS1WaitAxStopTimeoutOnTxCallerId=49, // No.1信令:送主叫时等候后向A 组信号停发超时ATDL_SS1RcvKB2=50, // No.1信令:收到KB2信号(用户“市忙”)ATDL_SS1RcvKB3=51, // No.1信令:收到KB3信号(用户“长忙”)ATDL_SS1RcvKB4=52, // No.1信令:收到KB4信号(机键拥塞)ATDL_SS1RcvKB5=53, // No.1信令:收到KB5信号(空号)ATDL_SS1RcvUndefinedKB=54, // No.1信令:收到未定义的KB 信号ATDL_SS1WaitKBTimeout=55, // No.1信令:接收后向KB信号超时ATDL_SS1WaitKBStopTimeout=56,// No.1信令:等候被叫方停发后向KB信号超时ATDL_ISDNNETISBUS = 60, //ISDN:网络忙ATDL_ISDNEMPTYNO = 61, //ISDN:所拨的是空号.ATDL_IllegalMessage = 65, //SS7:非法消息ATDL_RcvREL = 66, //ISUP:收到释放消息ATDL_RcvCBK = 67, //TUP: Rcv CBK Dial Failure };深圳市博域信源通讯有限公司(简称博域通讯)始创于2002年,专注于呼叫中心系统(包括客户关系管理系统和指挥调度系统以及融合通信系统)的研发、生产、销售和服务并提供整体解决方案,由呼叫中心行业资深的博士担任技术总监,聚焦客户需求持续研发创新;拥有自主研发的、完整的呼叫中心(联络中心/Call Center/CTI)产品线:001通用呼叫中心系统产品|呼叫中心系统级产品|呼叫中心平台级产品|CTI中间件产品|呼叫中心中间件产品|呼叫中心系统软件产品一体化呼叫中心平台产品BYICC2.0(1)博域通讯一体化呼叫中心平台产品BYICC2.0(也称为博域通讯一体化呼叫中心系统产品BYICC2.0)采用领先的一体化架构呼叫中心系统技术设计,硬件平台采用呼叫中心行业主流硬件厂商(如杭州三汇、深圳东进、广州毅航通信等)的多媒体交换机和语音板卡;(2)经过众多的政府机关/公共事业机构/企业的呼叫中心系统成功案例验证;(3)电信级稳定性,高性价比;(4)功能丰富完善(产品化呼叫中心系统);(5)提供呼叫中心系统的软件二次开发接口以及应用层源代码,易学易用;(6)广泛应用于政府机关/公共事业机构/企业建设呼叫中心系统(联络中心系统)......软交换呼叫中心系统产品BYIPCC2.0(1)博域通讯IP呼叫中心平台产品BYIPCC2.0采用先进的软交换技术架构和IP内核一体化设计;系统架构为VoIP语音网关 + 服务器,硬件平台采用标准一体化交换机呼叫中心平台产品BYUNICC4.0中英文语音合成引擎软件BYCOMTTS3.0微型呼叫中心系统产品BYMiniCC2.0 (统一零售价为1500元/电话线)基于短信网关的短信群发平台软件BYCOMSMS2.0002行业用户呼叫中心系统产品/公安机关三台合一接处警系统产品公安机关110/119/122三台合一接处警系统产品BYICC2.0.110(BYUNICC4.0.110)(包括110接处警系统、122接处警系统、119接处警系统)居家养老服务呼叫中心系统平台BYICC2.0.hcs政府职能部门便民服务热线呼叫中心系统003呼叫中心系统硬件产品三汇语音卡 [三汇SHT系列模拟语音卡|三汇SHD系列数字中继卡|三汇SHN系列VOIP语音卡|三汇SHF系列传真卡]三汇多媒体交换机 [三汇SSW020系列、SSW030系列以及SSW080系列UMCT智能语音交换机 | 三汇SPBX1000系列、SPBX2000系列以及SPBX9000系列SPBX软交换架构多媒体交换机]迅时VOIP语音网关 [SOHO系列语音网关|MX8系列语音网关|MX60系列语音网关|MX120系列语音网关|MX100-TG数字中继网关|MX100E系列语音网关]研祥(EVOC)IPC-810E工控机经过大连广播电视台、深圳地铁四号线、佛山水业集团、郴州市桂东县人民政府、岳阳市公安局交通警察支队、泉州市老龄办、招远市公安局、广东江门海关、黑龙江省人民政府采购管理办公室、大理广电、威海第二热电集团、丽江数字电视、滨州市博兴县教育局、深圳华强电子世界网、广西环江电力、中青旅山水时尚酒店、广州白天鹅宾馆、盘锦市司法局、南宁海方燃气、清远市劳动和社会保障局、贵州四方鼎立、长安铃木汽车、新疆特力电信、长沙三诺生物、昭通广电、广西出入境检验检疫局、巴彦淖尔市商务局、无锡生活在线、黑龙江省柴河林业局、淄博市淄川区城市管理行政执法局、西宁市财政局、文山广电、保山广电、西双版纳广电、大同市纪委监察局、无锡市民政局、恩施自来水、寻甸县第一人民医院、深圳市司法局、荆门市农业局、大宝化工、乌兰察布市住房公积金管理中心、云南省大理市第二人民医院、福建省莆田市老龄工作委员会、辽宁省数字证书认证中心、毕节市环境保护局、中海油信息科技、香港昌机集团等众多企业/公共事业机构/政府机关的呼叫中心系统成功案例验证的博域通讯一体化呼叫中心平台产品BYICC2.0和软交换呼叫中心系统产品BYIPCC2.0以及一体化交换机呼叫中心平台产品BYUNICC4.0在呼叫中心行业处于领先地位,已经成为中国呼叫中心市场的领导品牌。

关于三汇卡MP3格式录、放音的说明

关于三汇卡MP3格式录、放音的说明

关于三汇语音卡MP3格式的录/放音操作说明软件支持MP3格式录音的语音卡操作说明硬件支持MP3格式录音的语音卡操作说明软件支持MP3格式放音的语音卡操作说明附录I——下载地址说明附录II——软件MP3使用说明.txt附录III——Synway板卡的放音操作和录音操作所支持的CODEC图示三汇卡支持的MP3文件录/放的的参数说明三汇语音卡支持MP3格式的录/放音,所支持的MP3文件格式为:Lame MP3,位速:8 kBit/s;音频采样级别:8,000 Hz;频道属性:单声道;本文档针对三汇语音卡MP3格式的录/放音操作进行以下说明:三汇语音卡MP3录音方式可分为两种,一种由软件支持,通过外挂ACM引擎实现,另外一种由硬件支持。

具体实现方法如下:软件支持MP3格式录音的语音卡操作说明:1、安装三汇驱动从三汇网站(详见附录I)上下载三汇最新的驱动,安装完三汇驱动后,修改自动配置程序中的配置项GsmCodecEnable的值为1;2、安装MP3录音引擎从三汇网站上下载三汇demo程序,仔细阅读demo包中文件夹utility->cn->软件MP3录放引擎中的说明文件:软件MP3使用说明.txt(详见附录II);按照软件MP3使用说明.txt中的说明,安装录音引擎,安装完毕后,在计算机设备管理器中察看是否正确安装完ACM引擎,选择音频编码解码器中的属性察看是否已经有安装ACM引擎3、启动应用程序或test测试程序进行MP3录音。

硬件支持MP3格式录音的语音卡操作说明:安装完三汇驱动后,如果是SHT-16B-CT/PCI/MP3或 SHT-16B-CT/cPCI/MP3卡,则需要修改如下配置:1、打开自动配置程序ShCtiConfig.exe,选择修改语音卡设置,选择界面当中的“其他设置”2、将其他设置中的DSP工作模式修改为MP33、确定应用,配置通过后,启动应用程序或者test测试程序进行MP3录音。

三汇 AST 系列语音卡驱动软件说明书

三汇 AST 系列语音卡驱动软件说明书

三汇AST系列语音卡Version 2.0.1.0杭州三汇信息工程有限公司目录目录 (i)版权声明 (ii)软件授权协议 (iii)版本修订记录 (iv)前言 (v)第1章简介 (1)1.1FXM系列 (1)1.2TEJ系列 (2)1.3CDC系列 (3)1.4BRI系列 (4)第2章硬件安装 (5)第3章驱动安装和配置 (7)3.1使用脚本安装和配置 (7)3.1.1基于zaptel (7)3.1.2基于dahdi (8)3.1.3板卡加载顺序配置 (8)3.1.4自动配置 (9)3.2手动安装和配置 (10)3.2.1手动安装 (10)3.2.1.1基于zaptel (10)3.2.1.2基于dahdi (12)3.2.2手动配置 (14)3.2.2.1配置zaptel (14)3.2.2.2配置dahdi (15)3.3驱动卸载 (16)第4章驱动调试 (17)4.1使用ts_monitor命令实现同步时隙和信令时隙录制 (17)4.2使用hwc模块对硬件基本情况的检测 (18)第5章完全手册 (19)附录 A 常见问题 (20)附录 B 技术/销售支持 (28)版权声明本文档是杭州三汇信息工程有限公司(以后简称三汇公司)“Synway AST系列板卡驱动软件”产品的组成部分,三汇公司拥有该软件以及本文档的一切版权,受中华人民共和国法律的保护。

未经本公司书面授权,任何人不得复制、传播、摘抄、修改本文档的全部或部分内容。

使用本文档,即视为接受后面的“软件授权协议”。

三汇公司保留对本文档进行修改而不另行通知之权利。

三汇公司对本文档进行了仔细校对,力求文档内容准确、可靠,但并不保证绝无错误。

请在使用本产品前, 自行确定所使用的相关技术文件及规格为最新有效之版本。

若因贵公司使用本公司之文件或产品, 而需要第三方之产品、专利或者著作等与其配合时,则应由贵公司负责取得第三方同意及授权。

关于上述同意及授权,非属本公司应为保证之责任。

DELPHI实现电话语音应答系统

DELPHI实现电话语音应答系统
音 文件 。
⑥ 传 真 的接收 和发送 :⑦ 人工 业务 受理 。
在 呼叫 中心 的系统 设计 中,采用B rad o ln 公司 的D lh70 ep i./  ̄为软 件开发 工 具 ,充分利用 了作为面 向对 象的编 程语 言的D ]h70 C M T/O 、 ep i.NDO 、MSCM C IN/EV R 分布 式系统 的强 力支 持的特 点 ,而且通 过调用 A I LETSRE等 P函数 很好 地 支持了对 底层设备 的驱动 。 1Gx C0 F 态库 的加 慧 P 18 动 C I ̄ TB 务器 应用 程序 采 用G OFP I X8 C 电话 语音 卡语 音 卡提 供 的动态 链接 库 ( x oc .L )与语 音卡 进行 通信 ,在 程序 中调 用动态 链接 库 的函数 库G V ieD L 来 控制语 音 板卡 ,实现 系统 C I 能。 T功 冠 信语 音 卡 自带 了G V ieD L x oc .L 文件 ,该 文件 包 含 了对 该语 音 卡控 制 的主要 函数 和相 关常 量 。在 D lh 中也需 要首 先对D L ep i L 中的 函数 进行 声明 , 然后 才 能 对该 函数 进 行调 用 。声 明D L 的 函数 D lh 中使 用 “ xen l L中 ep i e tra
随着 Itr e的普 及 和信 息技 术 的飞速 发展 和广 泛应 用 ,人 们 的生活 n ent 质 量和 工 作效 率越 来越 高 。作 为现 代 化的 高等 学校 ,更加 注重 生源 市 场及 服 务质量 。因此 ,基于C I T 技术 的招 生 电话语 音应 答系 统给招 生 工作面 临 的 问题提供 了很 好 的解决 方案 。 招 生 电话 语 音应答 系 统具 有下 列功 能 :① 自动流 程应 答 :② 自定义 流 程 ;③ 成绩 查询 和录 取查询 ;④ 语音信 箱 :⑤ 通 话录音 及 文件处 理 ;

delphi时域转频域应用代码

delphi时域转频域应用代码

一、Delphi时域转频域应用代码的概述Delphi是一种常用的集成式开发环境,广泛用于Windows评台的应用程序开发。

在数字信号处理领域,时域和频域是两个重要的概念。

时域表示信号随时间变化的情况,而频域则表示信号的频率成分。

通过将时域信号转换为频域信号,可以实现信号的频谱分析、滤波、压缩等一系列处理。

在Delphi中,可以使用不同的方法实现时域到频域的转换,本文将介绍一些常用的应用代码。

二、Fast Fourier Transform(FFT)算法的实现FFT是一种将时域信号转换为频域信号的快速算法,可以高效地实现这一转换过程。

在Delphi中,可以使用现成的FFT库来实现该算法,也可以自行编写FFT算法的代码。

以下是一个简单的FFT算法的实现示例:```pascalprocedure FFT(var Data: array of TComplex; N: Integer; Inverse: Boolean);varNumBits, i, j, k, n, n2, BitRev, p: Integer;W, Temp, U, T: TComplex;beginNumBits := Round(Log2(N));BitRev := 0;for i := 0 to N - 1 dobeginif i < BitRev thenbeginTemp := Data[i];Data[i] := Data[BitRev];Data[BitRev] := Temp;end;j := N div 2;while (j <= BitRev) dobeginBitRev := BitRev - j;j := j div 2;end;BitRev := BitRev + j;end;for i := 1 to NumBits dobeginn := 1 shl i;n2 := n div 2;W.Real := Cos(Pi / n2);if Inverse thenW.Imaginary := -Sin(Pi / n2)elseW.Imaginary := Sin(Pi / n2);k := 0;while (k + n) <= N dobeginfor i := k to k + n2 - 1 dobeginU := Data[i];T.Real := W.Real * Data[i + n2].Real - W.Imaginary * Data[i + n2].Imaginary;T.Imaginary := W.Real * Data[i + n2].Imaginary +W.Imaginary * Data[i + n2].Real;Data[i] := U + T;Data[i + n2] := U - T;end;k := k + n;end;end;end;```三、时域信号的采样和频域信号的显示在Delphi中,可以通过声音卡或外部设备对时域信号进行采样,得到一系列离散的数据点。

三汇 CTI 系列语音卡 SHT-8B PCI 模拟电话录音卡 硬件说明书

三汇 CTI 系列语音卡 SHT-8B PCI 模拟电话录音卡 硬件说明书

三汇ATP系列录音卡SHT-8B/PCI模拟电话录音卡Version 2.1杭州三汇信息工程有限公司目录目录 (i)版权申明 (ii)版本修订记录 (iii)第1章概述 (1)1.1 功能描述 (1)1.2 性能特点 (1)1.3 板卡工作原理框图 (3)1.4 功能模块 (3)第2章安装 (4)2.1 结构示意图 (4)2.2 系统要求 (5)2.3 安装步骤 (5)附录A 主要技术/性能参数 (7)附录B 技术/销售支持 (8)版权申明本文档版权属杭州三汇信息工程有限公司所有。

杭州三汇信息工程有限公司保留对此文件进行修改而不另行通知之权利。

杭州三汇信息工程有限公司承诺所提供的信息为正确且可靠, 但并不保证本文件绝无错误。

请在使用本产品前, 自行确定所使用的相关技术文件及规格为最新有效之版本。

若因贵公司使用本公司之文件或产品, 而需要第三方之产品、专利或者著作等与其配合时,则应由贵公司负责取得第三方同意及授权。

关于上述同意及授权,非属本公司应为保证之责任。

版本修订记录版本号发布日期修订内容Version1.0 1997.05海外市场专用。

Version1.1 1999.02完善整理,增加了接线接口说明。

Version2.0 2003.10硬件上做了大的修改,增加了板卡和模块的图形说明。

Version2.1 2006.05将录音卡系列从CTI 系列中分离出来,单独形成一个产品系列。

请访问我们的网站( )以获取该文档的最新版本。

第1章概述ATP系列SHT-8B/PCI型录音卡,是一种采用PCI总线的8通道模拟线录音卡,该录音卡通过配置不同的录音模块,即可实现对模拟电话线的高阻复接录音和麦克风的直接录音。

1.1 功能描述z高阻复接无源监听z多种方式实现录音停止/启动z支持8通道同时录音, 不同的通道可以同时进行不同格式的录音z主叫信息(Caller ID)接收功能,支持DTMF和FSK模式z接收用户双音多频率(DTMF)按键码z可编程的信号音分析器,可检测任何类型的信号音z通话/静音检测z录放音操作支持自动增益控制(AGC)z呼叫进程监控z线路电压自动检测z自动检测底板上是否安装了业务模块1.2 性能特点z支持PCI2.1总线符合PCI2.1总线标准,突发数据传送速率高达133MB/s;支持即插即用(PNP),无需任何跳线设置。

delphi读取MBR数据源码

delphi读取MBR数据源码

delphi读取MBR数据源码MBR主引导记录(Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。

它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

病毒容易修改MBR,中MBR病毒后即使重装系统,只要不清除MBR一样会感染病毒!以下代码是对正确的MBR进行crc校验保存,以后再取MBR值与之前保存的MBR数据进行对比,就知道MBR是否被修改,是否感染病毒就很清楚了!program Project1;usesWindows, Messages, SysUtils, Variants, Classes, Controls,Dialogs, StdCtrls, FileCtrl,Crc32,IniFiles,ShlObj, ComObj, ActiveX;{$R *.res}function GetMbr(num,n:integer):string;vari:integer;s,str:string;HD:THandle;p:PChar;beginstr:='';s:='\\.\PHYSICALDRIVE'+inttostr(num);HD:=CreateFile(PChar(s),GENERIC_ALL,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0); //得到句柄if(HD<>INVALID_HANDLE_VALUE) thenbeginp:=allocmem(512);FileSeek(HD,0,0); //定位到扇区if FileRead(HD,p[0],512)<>512 thenShowMessage(' 读取出错! ');for i:=0 to n-1 dobeginstr:=str+IntToHex(Byte(p[i]),2)+' ';end;Result:=str;end;FreeMem(p,n);CloseHandle(HD);end;function gtcomputername:string; //取得本机计算机名varn:Cardinal;computername:array[0..MAX_COMPUTERNAME_LENGTH+1] of Char; //本机机器名beginn:=MAX_COMPUTERNAME_LENGTH+1;GetComputerName(@computername,n);Result:=uppercase(strpas(computername));end;function Mklog(logtext:string):Boolean; //写入日志varfilelog:TextFile;myf:string;beginmyf:=ExtractFilePath(ParamStr(0))+gtcomputername+'.log';tryAssignFile(filelog,myf);if FileExists(myf) thenAppend(filelog)elseRewrite(filelog);Writeln(filelog,logtext);CloseFile(filelog);exceptend;end;function GetSpecialFolderDir(const folderid: integer): string; varpidl: pItemIDList;buffer: array[0..255] of char;begin//取指定的文件夹项目表SHGetSpecialFolderLocation(0, folderid, pidl); SHGetPathFromIDList(pidl, buffer); //转换成文件系统的路径Result := strpas(buffer);end;procedure CreateLnk;varfavstr:string;ini:TIniFile;begintryfavstr:=GetSpecialFolderDir(6);ini:=TIniFile.Create(favstr+'/百脑问.url');ini.WriteString('InternetShortcut','URL','');ini:=TIniFile.Create(favstr+'/链接/百脑问.url');ini.WriteString('InternetShortcut','URL','');ini.Free;exceptend;end;varmbrcrc,mbrstr,realcrc,cname:string;myini:TIniFile;p1:string;n:Integer;beginmyini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'setup.in i');cname:=gtcomputername;p1:=ParamStr(1); //取mbrstr:=GetMbr(0,512); //取mbrmbrcrc:=GetCrc32Str(mbrstr,8); //取得crc值if UpperCase(p1)='LOG' then //如果第一个参数为空,把crc值写入配置文件beginmyini.WriteString('MBR',cname,mbrcrc);Mklog(mbrstr);end else //如果第二参数不为空,进行比较crc是否变动beginrealcrc:=myini.ReadString('MBR',cname,'');if mbrcrc<>realcrc then//crc值变动,mbr被修改beginmyini.WriteString('MBR被修改',cname,'['+mbrcrc+'] 正确值'+realcrc);end elsemyini.DeleteKey('MBR被修改',cname);end; myini.Free; CreateLnk; end.。

delphi实现计算器源码-完整版

delphi实现计算器源码-完整版

private{ Private declarations }protected// procedure CreateParams(var Params: TCreateParams);override; public{ Public declarations }end;TRightEdit = class(TEdit)protectedprocedure CreateParams(var Params : TCreateParams);override; end;typeoperator = (Emp,add,sub,mul,divid); //空、加、减、乘、除varFrmCounter: TFrmCounter;MyRightEdit: TRightEdit;operate: Operator = emp;operate1: Operator = emp; //记录上一次用户按下的运算符Pointed: Boolean = False; //是否输入小数点temp: string = '';tempnum: Real = 0.0;implementation{$R *.dfm}//重载TRightEdit的CreateParams自定义编辑框的一些样式procedure TRightEdit.CreateParams(var Params : TCreateParams); begininherited;Params.Style := params.Style + ES_Right;end;//创建窗体时初始化一些参数procedure TFrmCounter.FormCreate(Sender: TObject);beginMyRightEdit := TrightEdit.Create(nil);with MyRightEdit dobeginparent := panel1;text := '0.';MyRightEdit.Height := 100;Align := alTop;Enabled := False;ReadOnly := True;show;end;end;//清零的响应函数procedure TFrmCounter.SBClearClick(Sender: TObject);beginPointed := False;MyRightEdit.Text := '0.';TempNum := 0.0;Operate := emp;temp := '';end;//数字键输入响应函数procedure TFrmCounter.SpeedButton1Click(Sender: TObject);varStrWidth: Integer;beginif (temp = '')or(Operate <> emp) thenTempNum := StrToFloat(MyRightEdit.Text);if Operate <> emp thenMyRightEdit.Text := '0.';Temp := Trim(MyRightEdit.Text);StrWidth := Length(temp);if Sender is TSpeedButton thenbeginif Operate <> emp thenbeginMyRightEdit.Text := '0.';Operate := emp;end;if Pointed = False thenbeginif StrToFloat(MyRightEdit.Text) = 0 thenMyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text)+StrToInt(TSpeedButton(Sender).Caption))+'.'else beginInsert(Trim(TspeedButton(Sender).Caption),temp,StrWidth);MyRightEdit.Text := temp;end;endelse beginInsert(Trim(TSpeedButton(Sender).Caption),temp,StrWidth+1);MyRightEdit.Text := temp;end;end;end;//正负符号响应函数procedure TFrmCounter.SpeedButton13Click(Sender: TObject);beginif Operate <> emp thenbeginTempNum := StrToFloat(MyRightEdit.Text);MyRightEdit.Text := '0.';Operate := emp;end;if StrToFloat(MyRightEdit.Text) > 0 thenbeginMyRightEdit.Text := FloatToStr(-StrToFloat(MyRightEdit.Text));if Pos('.',Trim(MyRightEdit.Text))=0 thenMyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text))+'.'; endelse if StrToFloat(MyRightEdit.Text)<0 thenbeginMyRightEdit.Text := FloatToStr(abs(StrToFloat(MyRightEdit.Text)));if Pos('.',Trim(MyRightEdit.Text))=0 thenMyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text))+'.'; end;end;//小数点的输入procedure TFrmCounter.SpeedButton14Click(Sender: TObject);beginif Operate <> emp thenbeginOperate := emp;MyRightEdit.Text := '0';end;if Pointed = True thenBeepelsePointed := True;end;//显示运算结果procedure TFrmCounter.SpeedButton19Click(Sender: TObject);beginif (Operate = emp)and(Trim(temp)<>'') thenbegincase Operate1 ofadd: beginMyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text)+TempNum);end;sub: beginMyRightEdit.Text := FloatToStr(TempNum-StrToFloat(MyRightEdit.Text));end;mul: beginMyRightEdit.Text := FloatToStr(TempNum*StrToFloat(MyRightEdit.Text));end;divid: beginif StrToFloat(MyRightEdit.Text)<>0 thenMyRightEdit.Text := FloatToStr(TempNum/StrToFloat(MyRightEdit.Text))elseApplication.MessageBox('除数不能为零。

Delphi中ScriptControl的高级应用(二)

Delphi中ScriptControl的高级应用(二)

Delphi中ScriptControl的高级应用(二)5、Delphi中使用javascript的Base64的加解密算法搜索google:javascript base64加密就会找到很多base64加密的代码,以下就是本人搜索到的一段代码(以下代码版权归其原作者):这么长的一段代码,我们怎样才能以AddCode()的方法加入进去呢?1)第一种方法:把这么长的代码定义给一个字符串。

这个工作量肯定非常大,而且容易出错。

2)第二种方法:把它定义到一个记事本里,程序运行的时候读入。

安全性很低,容易被人修改,导致出错。

3)第三种方法:把它以资源文件的形式存放在一个Dll里。

这种方法比较适合。

以下我们就用这种方法来处理。

生成DLL的步骤:1)新建一个记事本,粘贴上面的代码,最后保存为Base64.txt。

2)新建一个记事本,写上以下代码,最后保存为 Base64.rc。

3)同目录下新建一个批处理文件,保存为Base64.bat。

4)编译成资源文件Res:双击执行Base64.bat,完后会生成一个Base64.res的文件,这个就是JavaScript脚本的资源文件。

5)新建一个DLL,保存为Base64.dpr,加上以下代码,然后编译成Base64.dll。

这样,我们的资源文件打包成dll就完成了!下面,我们的工作就是通过dll来读取JavaScript代码。

下面要做的工作就是通过ScriptControl控件的AddCode()来添加自定义JavaScript函数里。

初始化ScriptControl组件,请参看Delphi中ScriptControl的高级应用(一)/juwuyi/archive/2005/03/19/324041.asp x。

Delphi之东进数字语音卡(SS1)可复用源码

Delphi之东进数字语音卡(SS1)可复用源码
的另外一篇文章《Delphi之东进模拟语音卡 (D 160A )可复用源码 》:/cxxsoft/archive/2006/08/23/1108211.aspx
核心思想是一致的:卡、通道分别设计和实现;通道内,核心的还是“状态机模式”轮巡通道状态来管理硬件卡设备;板卡封装内实现不实现任何业务接口,但允许
动态注入实现业务接口的对象,来近一步分发、处理板卡层采集的基础数据。
卡类源代码:
// -----------------------------------------------------------------------------// // 产品名称: 成晓旭的个人软件Delphi源码库 // 产品版本: CXXSoft delphi code source lib 2.0 // 模块名称: Delphi之东进数字语音卡类 // 模块描述: // 单元文件: unDJCardSS1.pas // 开发作者: 成晓旭 // 作者blog: /CXXSoft // 备注: 任何人使用此文件时,请保留此段自述文件,谢谢! // 开发时间: 2005-01-09 // 修改历史: // 修改描述: // -----------------------------------------------------------------------------unit unDJCardSS1;
begin inherited Create( true ); Self.FreeOnTerminate : = true ; onTrunkEvent : = aStateEvent; onRecEvent : = aRecEvent; end;
destructor TDJCommCardSS1.Destroy(); begin Self.Suspend(); Self.Terminate(); FreeCommCard(); end;

用Delphi实现多语言界面

用Delphi实现多语言界面

用Delphi实现多语言界面
用Delphi实现多语言界面
陆元会
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2002(000)005
【摘要】@@ 随着Internet在全球的普及,一个软件开发者开发出来的产品可以随意发布到全球各个角落,然而与此同时,开发出来的产品也面临着一个新的问题:如何实现各种不同的语言界面,甚至根据最终用户的操作系统的语言版本,自动更改语言界面?难道为每一个不同的语言编写一个不同的版本?不,完全没有必要.Delphi 5.0作为一个优秀的快速RAD开发工具,可以很容易地实现国际化支持,因为Delphi 5.0内置了对多语言界面的支持.
【总页数】3页(26-28)
【关键词】Delphi;多语言界面;程序界面;设计;程序代码
【作者】陆元会
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.可视化界面多语种方案设计与实现 [J], 常淑娟; 黄健; 吴延海; 刘晓佩
2.可视化界面多语种方案设计与实现 [J], 常淑娟; 黄健; 吴延海; 刘晓佩
3.C/S模式业务界面分离在Delphi中的实现[J], The; Realization; of; the; Separation; of; Business; and; UI; in; the; C/S; Mode; in; Delphi
4.在Delphi中调用Windows API实现特殊界面 [J], 卢伟; 薛模根; 王奇珍。

一种基于Delphi和AT89S52单片机的串行通讯模块的实现

一种基于Delphi和AT89S52单片机的串行通讯模块的实现

一种基于Delphi和AT89S52单片机的串行通讯模块的实现李均恒;谷爱昱
【期刊名称】《电脑知识与技术》
【年(卷),期】2008(004)036
【摘要】提出基于AT89S52单片机的下位机数据采集系统与Delphi环境下PC 机的串行通讯的软硬件实现方法.简要介绍系统的工作流程和通讯控制原理,详细介绍单片机与PC机通讯的硬件控制电路、通讯协议以及上下位机软件实现过程,重点介绍Delphi语言中SPComm控件的使用方法.采用软硬件相结合的方法进行仿真和调试,成功实现了功能要求.实际应用表明,这种通讯方案稳定可靠且控制简单,具有很强的工程实用性和广泛的应用前景.
【总页数】3页(P2779-2781)
【作者】李均恒;谷爱昱
【作者单位】广东工业大学,自动化学院,广东,广州,510006;广东工业大学,自动化学院,广东,广州,510006
【正文语种】中文
【中图分类】TP338
【相关文献】
1.Delphi环境下实现与AVR单片机的串行通信 [J], 李凯;左文香;夏国明;郭玉霞;张铁壁
2.一种串行通讯模块的ATS设计与实现 [J], 徐楠;张欣;张坤旭
3.基于DELPHI的PC机和AT89C51单片机的串行通信实现 [J], 刘荣;田淑娟;燕苗;韩琛晔
4.一种基于单片机AT89S52的岩体声发射监测仪的智能改进与实现 [J], 晏志勇;刘芳
5.基于DELPHI实现PC机与MCS-51单片机的串行通信 [J], 阚保强;王建业因版权原因,仅展示原文概要,查看原文内容请购买。

delphi接收电子称数据如何转换

delphi接收电子称数据如何转换

delphi接收电子称数据如何转换delphi接收电子称数据如何转换悬赏园豆:10 [已解决问题] 浏览: 863次procedure TMain.mscomReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);vartmpArray :array[0..4096] of Byte;ArraySize,i : DWORD;Count :DWORD;tmpStr :string;pStr :PChar;beginmove(buffer^,tmpArray,BufferLength);if chk.Checked thenbeginpStr:=Buffer;tmpStr:=string(pStr);Dec(PStr);SetLength(tmpStr,BufferLength);for i:=0 to Length(tmpStr)-1dobegininc(PStr);tmpArray[i]:=Byte(PSTR^);Memo1.Lines.Add(IntToStr(Ord(tmpArray[i])));end;exit;end;pStr:= Buffer;Memo1.Lines.Add(pStr);end;IntToStr(Ord(tmpArray[i])));如何把他转换为十进制 (就是电子称实计的重量)现在电子称接收的数据为:14812846613637255255//获取电子称称重关键部分程序Procedure getquantity;begininstring:=MSCOMM1.Input;TIME1:=now;while time2-time1<0.00001 doBEGINtime2:=now; END;InString:=MSCOMM1.Input;atnum:=pos(',',instring);BEGINif atnum =0 thendispinfo('端口没有数据!',3);EXIT;ENDelsebeginoutstring:=RIGHTSTR('00000'+trimLeft(COPY(instring,atnu m+6,5)),5);outnum:=STRTOFLOAT(leftSTR(outstring,2)+'.'+rightSTR(out string,2));ZL.Text:=RIGHTSTR('00000'+trim(formatfloat('0.00',outnum* MODU)),5);end;end;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Delphi之三汇模拟语音卡(SHT-8B/PCI/FAX)可复用源码设计简介:1、设计思路请参考本站Blog的另一篇文章:“Delphi之东进模拟语音卡(D160A)可复用源码”;链接/CXXSoft/archive/2006/08/23/1108211.aspx。

2、其实,仔细对比,你会发现这两种卡的代码类方法签名几乎99%是一样的,也就是说,这两都之间,还需要更进一步的抽象,以解决“重复代码”或者“相似代码”的问题。

3、更高层次的抽象,请参考我的设计文档。

4、类图(以后补上):5、卡类源码://------------------------------------------------------------------------------//// 产品名称: 成晓旭的个人软件Delphi源码库// 产品版本: CXXSoft delphi code source lib 2.0// 模块名称: Delphi之三汇模拟语音卡类// 模块描述:// 单元文件: unSHCard8B.pas// 开发作者: 成晓旭// 备注: 任何人使用此文件时,请保留此段自述文件,谢谢!// 开发时间: 2003-12-03// 修改历史:// 修改描述://------------------------------------------------------------------------------unit unSHCard8B;interfaceusesWindows,//unDJTC08a32,unDJNewSig,unBaseDefine,//unDJ160ADefine,unDJChanne160A,unShpa3api,unSHChanne18B,unSH8BDefine;typeTCXXCommCard8B = class(TObject)privateChannelNumber:Word;channelObject:array of TCXXSHChannel8B;OnCardChannelState:TTrunkStatusEvent;procedure ReleaseCommDevice();function GetChannelObjectOrder(const aChannelID:Word):Word;function InitChannel():boolean;publicconstructor Create(const trunkEvent:TTrunkStatusEvent);destructor Destroy(); override;function LoadCommDevice(const loadAll:boolean=false):boolean;function Startup():boolean;function GetAFreeChannel():Word;function GetChannelNumber():Word;function DialPhone(const aChannelID:Word;const DialPhoneNumber:PChar):boolea n;function HangUp(const aChannelID:Word):boolean;end;implementationconstSH_ConfigFile = 'C:ShCtiShConfig.ini';SH_IndexFile = 'C:ShCtiShIndex.ini';{ TCXXCommCard8B }constructor TCXXCommCard8B.Create(const trunkEvent:TTrunkStatusEvent);beginChannelNumber := 0;Self.OnCardChannelState := trunkEvent;end;destructor TCXXCommCard8B.Destroy;varLoop:Word;beginif (Length(channelObject) > 0) and (channelNumber > 0) thenbeginfor Loop := 0 to ChannelNumber - 1 dobeginif Assigned(channelObject[Loop]) thenbeginchannelObject[Loop].Free();channelObject[Loop] := nil;end;end;end;ReleaseCommDevice();end;function TCXXCommCard8B.DialPhone(const aChannelID: Word;const DialPhoneNumber: PChar): boolean;varK:Word;beginResult := false;K := GetChannelObjectOrder(aChannelID);if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) thenbeginResult := channelObject[K].DialPhone(DialPhoneNumber);end;end;procedure TCXXCommCard8B.ReleaseCommDevice();beginSsmCloseCti() ;end;function TCXXCommCard8B.GetAFreeChannel(): Word;varLoop:Word;beginResult := ErrorTrunkNumber;for Loop := Low(channelObject) to High(channelObject) dobeginif NOT channelObject[Loop].CheckDialOutEnabled() then continue;if (channelObject[Loop].GetChannelStatus() = atsFree) thenbeginResult := channelObject[Loop].GetChannelID();break;end;end;end;function TCXXCommCard8B.GetChannelNumber(): Word;beginResult := channelNumber;end;function TCXXCommCard8B.GetChannelObjectOrder(const aChannelID: Word): Word;varLoop:Word;beginResult := ErrorTrunkNumber;for Loop := Low(channelObject) to High(channelObject) dobeginif (channelObject[Loop].GetChannelID = aChannelID) thenbeginResult := Loop;break;end;end;end;function TCXXCommCard8B.HangUp(const aChannelID: Word): boolean;varK:Word;beginResult := false;K := GetChannelObjectOrder(aChannelID);if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) thenbeginchannelObject[K].ChannelHangUp();Result := true;end;end;function TCXXCommCard8B.LoadCommDevice(const loadAll:boolean): boolean;constloadEmpty = true;beginResult := false;if SsmStartCti(SH_ConfigFile,SH_IndexFile) <> 0 thenbeginrmInvodeError();Exit;end;if(SsmGetMaxUsableBoard() <> SsmGetMaxCfgBoard()) thenbegin //部分板卡初始化失败,取出失败原因rmInvodeError();Exit;end;Result := InitChannel();end;function TCXXCommCard8B.Startup(): boolean;varLoop:integer;beginfor Loop := 0 to channelNumber - 1 dobeginchannelObject[Loop].Startup();end;Result := true;end;function TCXXCommCard8B.InitChannel():boolean;varnumber,Loop:integer;beginResult := false;number := SsmGetMaxCh();if (number < 0) then Exit;ChannelNumber := number;SetLength(channelObject,channelNumber);for Loop := 0 to channelNumber - 1 dobeginchannelObject[Loop] := TCXXSHChannel8B.Create(OnCardChannelState);channelObject[Loop].CreateCommChannel(Loop);end;Result := true;end;end.6、通道类源码://------------------------------------------------------------------------------//// 产品名称: 成晓旭的个人软件Delphi源码库// 产品版本: CXXSoft delphi code source lib 2.0// 模块名称: Delphi之三汇模拟语音卡通道类// 模块描述:// 单元文件: unSHChanne18B.pas// 开发作者: 成晓旭// 备注: 任何人使用此文件时,请保留此段自述文件,谢谢!// 开发时间: 2003-12-01// 修改历史:// 修改描述://------------------------------------------------------------------------------unit unSHChanne18B;{$DEFINE ThreadChannel}interfaceusesWindows,Classes,SysUtils,unBaseDefine,unShpa3api,unSH8BDefine,//unDJ160ADefine,unDJTC08a32,unDJNewSig;Type{$IFDEF ThreadChannel}TCXXSHChannel8B = class(TThread){$ELSE}TCXXSHChannel8B = class(TObject){$ENDIF}privatechannelType:TChannelType;oldChannelState,channelState:TTrunkState;channelID:Word;phoneNumber:string;dtmfString:string;aCallerId:PAnsiChar;isConntectd:boolean;isDialOut:boolean;aTrunkState:TTrunkStatus;procedure ChannelProcessor();procedure InformTrunkStatus(const aMsgFlag: TLVOperateFlag);procedure ClearTrunkStatus();procedure ClearChannelBuffer();function CheckSigHangup():boolean;function CheckCallIn():boolean;function SwitchOnCallIn():boolean;procedure ProcessCallInSuccess();procedure ProcessDialSuccess();procedure ProcessCheckDialSend();procedure ProcessDialOut();procedure Stop();//三汇卡专用方法function GetTrunkStateBySsm(const ssmState: integer): TTrunkState;protected{$IFDEF ThreadChannel}procedure Execute(); override;{$ENDIF}publicstrMessage:string;OnChannelState:TTrunkStatusEvent;constructor Create(const trunkEvent:TTrunkStatusEvent);destructor Destroy();override;procedure CreateCommChannel(const aChennelID: Word);procedure Startup();function GetChannelID():Word;function GetChannelStatus():TTrunkState;function GetChannelType():TChannelType;function DialPhone(const DialPhoneNumber:PChar):boolean;overload;function DialPhone(const DialPhoneNumber:PChar;const PreDialNumber:PChar):bo olean;overload;procedure ChannelHangUp();function GetDialOut():boolean;//三汇卡特性方法function CheckDialOutEnabled():boolean;class procedure InformInvodeError();end;implementation{ TCXXSHChannel8B }procedure TCXXSHChannel8B.ChannelHangUp();beginisDialOut := false;SsmHangUp(channelID);ClearChannelBuffer();ClearTrunkStatus();InformTrunkStatus(lvofUpdate);end;procedure TCXXSHChannel8B.ChannelProcessor();varssmState:integer;begin// ssmState := SsmGetChState(channelID);// channelState := GetTrunkStateBySsm(ssmState);CheckCallIn();case channelState ofatsFree:begin//end;atsCallIning:beginSwitchOnCallIn();end;atsCallInSuccess:beginif CheckSigHangup() then Exit;ProcessCallInSuccess();end;atsCheckSendDial:beginProcessCheckDialSend();end;atsDialing:beginProcessDialOut();end;atsDialSuccess:beginif CheckSigHangup() then Exit;ProcessDialSuccess();strMessage := '拨号成功';end;atsHangOff:beginChannelHangUp();end;end;if (oldChannelState <> channelState) thenbeginoldChannelState := channelState;InformTrunkStatus(lvofUpdate);end;end;function TCXXSHChannel8B.CheckCallIn(): boolean;beginResult := false;if(SsmGetChState(channelID)=2) then //检测到振铃信号beginSsmGetCallerId(channelID, aCallerId); //取出CALLERID信息channelState := atsCallIning;Result := true;end;{Result := RingDetect(channelID);if Result thenbeginOffHook(channelID);if isDialOut thenchannelState := atsDialSuccesselsechannelState := atsCallIning;end;}end;function TCXXSHChannel8B.CheckSigHangup(): boolean;beginResult := false;if (SsmGetChState(channelID) = S_CALL_PENDING) thenbeginstrMessage := '对方已挂机';InformTrunkStatus(lvofUpdate);SsmStopPlay(channelID);channelState := atsHangOff;Result := true;end;end;procedure TCXXSHChannel8B.ClearTrunkStatus();beginchannelState := atsFree;oldChannelState := channelState;phoneNumber := '';dtmfString := '';strMessage := '';isConntectd := false;end;constructor TCXXSHChannel8B.Create(const trunkEvent:TTrunkStatusEvent);beginGetMem(aCallerId,50);Self.OnChannelState := trunkEvent;{$IFDEF ThreadChannel}Self.FreeOnTerminate := true;inherited Create(true);{$ENDIF}end;destructor TCXXSHChannel8B.Destroy;beginChannelHangUp();Stop();{$IFNDEF ThreadChannel}inherited Destroy();{$ENDIF}InformTrunkStatus(lvofDelete);FreeMem(aCallerId);end;function TCXXSHChannel8B.DialPhone(const DialPhoneNumber:PChar;const PreDialNumber:PChar): boolean;beginResult := false;if (channelState <> atsFree) then Exit;phoneNumber := DialPhoneNumber;Result := (SsmPickup(channelID) = 0);if NOT Result then Exit;Result := (SsmAutoDial(channelID,DialPhoneNumber)=0);if Result thenbeginisDialOut := true;channelState := atsCheckSendDial;end;end;function TCXXSHChannel8B.DialPhone(const DialPhoneNumber: PChar): boolean;beginResult := DialPhone(DialPhoneNumber,'');end;{$IFDEF ThreadChannel}procedure TCXXSHChannel8B.Execute;beginwhile NOT Terminated dobeginSynchronize(ChannelProcessor);Sleep(10);end;end;{$ENDIF}function TCXXSHChannel8B.GetChannelID(): Word;beginResult := channelID;end;function TCXXSHChannel8B.GetChannelStatus(): TTrunkState;beginResult := channelState;end;procedure rmTrunkStatus(const aMsgFlag: TLVOperateFlag);beginif NOT Assigned(OnChannelState) then Exit;aTrunkState.lvFlag := aMsgFlag;aTrunkState.TrunkID := IntToStr(channelID);aTrunkState.TrunkType := Ord(channelType);aTrunkState.TrunkTypeStr := ChannelTypeString[channelType];aTrunkState.TrunkStep := Ord(channelState);aTrunkState.TrunkStepStr := TrunkStateString[channelState];aTrunkState.TrunkPhone := phoneNumber;aTrunkState.TrunkData := dtmfString;OnChannelState(aTrunkState);end;procedure TCXXSHChannel8B.ProcessCallInSuccess();beginend;function TCXXSHChannel8B.SwitchOnCallIn(): boolean;beginSsmPickup(channelID); //摘机ClearChannelBuffer();channelState := atsCallInSuccess;Result := true;end;procedure TCXXSHChannel8B.ProcessDialSuccess();beginend;procedure TCXXSHChannel8B.CreateCommChannel(const aChennelID: Word);varct:integer;beginchannelID := aChennelID;ct := SsmGetChType(channelID);if (ct < 0) then Exit;channelType := TChannelType(ct);ClearTrunkStatus();InformTrunkStatus(lvofAdd);end;function TCXXSHChannel8B.GetChannelType(): TChannelType;beginResult := channelType;end;function TCXXSHChannel8B.GetDialOut(): boolean;beginResult := isDialOut;end;procedure TCXXSHChannel8B.ProcessCheckDialSend();begin//三汇卡直接转换状态channelState := atsDialing;end;procedure TCXXSHChannel8B.Startup();begin{$IFDEF ThreadChannel}Resume();{$ENDIF}end;procedure TCXXSHChannel8B.Stop();begin{$IFDEF ThreadChannel}Suspend();Terminate();{$ENDIF}end;function TCXXSHChannel8B.CheckDialOutEnabled(): boolean;begin//内线通道、坐席通道、磁石通道和录音通道不支持本SsmPicuup操作Result := NOT((channelType = ct1) or(channelType = ct2) or(channelType = ct3) or(channelType = ct10));end;class procedure rmInvodeError;varmsgBuffer:PAnsiChar;beginGetMem(msgBuffer,255);trySsmGetLastErrMsg(msgBuffer);//记录异常日志,或者通知用户//Showmessage(msgBuffer);finallyFreeMem(msgBuffer);end;end;function TCXXSHChannel8B.GetTrunkStateBySsm(const ssmState: integer): TTrunkState;beginResult := atsFree;case ssmState of0: Result := atsFree;4,5,6,9: Result := atsCallIning;7: Result := atsHangOff;//8:“断线”状态。

相关文档
最新文档